File "TopBar.php"
Full Path: /home/stylijtl/public_html/wp-content/plugins/elementor/vendor/elementor/wp-one-package/src/Admin/Controllers/TopBar.php
File size: 3.68 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace ElementorOne\Admin\Controllers;
use Elementor\WPNotificationsPackage\V120\Notifications as NotificationsSDK;
use ElementorOne\Admin\Services\Feedback as FeedbackService;
use ElementorOne\Admin\Config;
use ElementorOne\Common\RestError;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Class TopBar
* Handles all top bar-related REST API endpoints
*/
class TopBar extends \WP_REST_Controller {
/**
* Constructor
*/
public function __construct() {
$this->namespace = Config::APP_REST_NAMESPACE;
$this->rest_base = 'top-bar';
add_action( 'rest_api_init', [ $this, 'register_routes' ] );
}
/**
* Register all notifications-related routes
* @return void
*/
public function register_routes() {
// GET /top-bar/notifications
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/notifications',
[
[
'methods' => \WP_REST_Server::READABLE,
'callback' => [ $this, 'get_notifications' ],
'permission_callback' => [ $this, 'create_item_permissions_check' ],
'args' => [
'app_name' => [
'type' => 'string',
'required' => true,
],
'app_version' => [
'type' => 'string',
'required' => true,
],
],
],
]
);
// POST /top-bar/feedback
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/feedback',
[
[
'methods' => \WP_REST_Server::CREATABLE,
'callback' => [ $this, 'send_product_feedback' ],
'permission_callback' => [ $this, 'create_item_permissions_check' ],
'args' => [
'product' => [
'type' => 'string',
'required' => true,
],
'subject' => [
'type' => 'string',
'required' => true,
],
'title' => [
'type' => 'string',
'required' => true,
],
'description' => [
'type' => 'string',
'required' => true,
],
'countryCode' => [
'type' => 'string',
'required' => false,
],
],
],
]
);
}
/**
* Get notifications
* @param \WP_REST_Request $request
* @return \WP_REST_Response|\WP_Error
*/
public function get_notifications( \WP_REST_Request $request ) {
try {
$app_name = $request->get_param( 'app_name' );
$app_version = $request->get_param( 'app_version' );
$notifications_sdk = new NotificationsSDK( [
'app_name' => $app_name,
'app_version' => $app_version,
] );
$notifications = $notifications_sdk->get_notifications_by_conditions( true );
return new \WP_REST_Response( $notifications );
} catch ( \Throwable $th ) {
return RestError::internal_server_error( $th->getMessage() );
}
}
/**
* Send feedback
* @param \WP_REST_Request $request
* @return \WP_REST_Response|\WP_Error
*/
public function send_product_feedback( \WP_REST_Request $request ) {
try {
$product = $request->get_param( 'product' );
$subject = $request->get_param( 'subject' );
$title = $request->get_param( 'title' );
$description = $request->get_param( 'description' );
$country_code = $request->get_param( 'countryCode' );
FeedbackService::instance()->send_product_feedback( $product, $subject, $title, $description, $country_code );
return new \WP_REST_Response( null, \WP_Http::NO_CONTENT );
} catch ( \Throwable $th ) {
if ( \WP_Http::UNAUTHORIZED === $th->getCode() ) {
return RestError::unauthorized( $th->getMessage() );
}
return RestError::bad_request( $th->getMessage() );
}
}
/**
* Check if the user has permission to create an item
* @param \WP_REST_Request $request
* @return true|\WP_Error
*/
public function create_item_permissions_check( $request ) {
return current_user_can( 'manage_options' );
}
}