<?php
namespace ElementorOne\Admin\Services;
use ElementorOne\Admin\Helpers\Utils;
use ElementorOne\Logger;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Class Feedback
*/
class Feedback {
/**
* Logger instance
* @var Logger
*/
private Logger $logger;
/**
* Instance
* @var Feedback|null
*/
private static ?Feedback $instance = null;
/**
* Get instance
* @return Feedback|null
*/
public static function instance(): ?Feedback {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
$this->logger = new Logger( self::class );
}
/**
* Get product feedback URL
* @return string
*/
public function get_product_feedback_url(): string {
return Client::get_client_base_url() . '/feedback/api/v1/product-feedback';
}
/**
* Send product feedback
* @param string $product
* @param string $subject
* @param string $title
* @param string $description
* @param string|null $country_code
* @return void
* @throws \ElementorOne\Admin\Exceptions\ClientException
*/
public function send_product_feedback( string $product, string $subject, string $title, string $description, ?string $country_code = null ): void {
try {
$body = [
'product' => $product,
'subject' => $subject,
'title' => $title,
'description' => $description,
'referrerUrl' => wp_get_referer(),
];
if ( ! empty( $country_code ) ) {
$body['countryCode'] = $country_code;
}
Utils::get_api_client()->request(
$this->get_product_feedback_url(),
[
'method' => 'POST',
'body' => wp_json_encode( $body ),
]
);
} catch ( \Throwable $th ) {
$this->logger->error( $th->getMessage() );
if ( $th instanceof \ElementorOne\Admin\Exceptions\ClientException ) {
throw $th;
}
}
}
}