PluginProbe
NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner & Floating Notification Bar / 3.3.3
NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner & Floating Notification Bar v3.3.3
3.3.3 3.3.2 3.3.1 3.3.0 3.2.14 3.2.13 3.2.12 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 trunk 0.2.5.5 0.2.5.6 0.2.5.7 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 All 158 releases
← All changes | includes/Core/REST.php +55 -0 3.2.7 → 3.3.3 View file →
@@ -12,8 +12,9 @@
12 12 use NotificationX\Types\ContactForm;
13 13 use NotificationX\Admin\Settings;
14 14 use NotificationX\CoreInstaller;
15 15 use NotificationX\Extensions\PressBar\PressBar;
16 +use NotificationX\Extensions\ExitIntent\ExitIntentNotification;
16 17 use NotificationX\Admin\Reports\ReportEmail;
17 18 use NotificationX\Admin\EntriesMailReceiver;
18 19 use NotificationX\Extensions\ExtensionFactory;
19 20 use NotificationX\Extensions\Google\GoogleReviews;
@@ -178,8 +179,19 @@
178 179 'methods' => WP_REST_Server::EDITABLE,
179 180 'callback' => array( $this, 'gutenberg_remove' ),
180 181 'permission_callback' => array($this, 'edit_permission'),
181 182 ));
183 + // Exit Intent — Elementor Import / Remove
184 + register_rest_route( $namespace, '/exit-intent/elementor/import', array(
185 + 'methods' => WP_REST_Server::EDITABLE,
186 + 'callback' => array( $this, 'exit_intent_elementor_import' ),
187 + 'permission_callback' => array( $this, 'edit_permission' ),
188 + ));
189 + register_rest_route( $namespace, '/exit-intent/elementor/remove', array(
190 + 'methods' => WP_REST_Server::EDITABLE,
191 + 'callback' => array( $this, 'exit_intent_elementor_remove' ),
192 + 'permission_callback' => array( $this, 'edit_permission' ),
193 + ));
182 194 // Reporting Import
183 195 register_rest_route( $namespace, '/reporting-test', array(
184 196 'methods' => WP_REST_Server::EDITABLE,
185 197 'callback' => array( $this, 'reporting_test' ),
@@ -306,8 +318,28 @@
306 318 return true;
307 319 }
308 320
309 321 /**
322 + * Exit Intent — Elementor import.
323 + * Creates an `nx_exit_intent` Elementor document from a packaged seed and
324 + * returns its ID + edit URL via wp_send_json_success(['context' => ...]).
325 + */
326 + public function exit_intent_elementor_import( $request ) {
327 + $params = $request->get_params();
328 + ExitIntentNotification::get_instance()->create_exit_intent_with_elementor( $params );
329 + return true;
330 + }
331 +
332 + /**
333 + * Exit Intent — Elementor remove. Deletes the linked `nx_exit_intent` post.
334 + */
335 + public function exit_intent_elementor_remove( $request ) {
336 + $params = $request->get_params();
337 + ExitIntentNotification::get_instance()->delete_elementor_post( $params['elementor_id'] ?? 0 );
338 + return true;
339 + }
340 +
341 + /**
310 342 * Gutenberg Import for PressBar design.
311 343 *
312 344 * @param [type] $request
313 345 * @return void
@@ -365,8 +397,14 @@
365 397 if( ! $request->has_param('type') ) {
366 398 return $this->error( 'type' );
367 399 }
368 400
401 + // Country targeting search is available for every notification type,
402 + // so route it by field regardless of the type/source.
403 + if ( ! empty( $params['field'] ) && $params['field'] === 'country_targeting' ) {
404 + return Targeting::restResponse( $request->get_json_params() );
405 + }
406 +
369 407 switch( $params['type'] ) {
370 408 case 'ContactForm' :
371 409 return ContactForm::restResponse( $request->get_json_params() );
372 410 break;
@@ -426,8 +464,9 @@
426 464 */
427 465 public function miscellaneous($request) {
428 466 $params = $request->get_params();
429 467
468 + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
430 469 $result = apply_filters('nx_rest_miscellaneous', null, $params);
431 470 if($result !== null){
432 471 return rest_ensure_response([
433 472 'success' => true,
@@ -457,8 +496,9 @@
457 496 return Helper::delete_server_cookies();
458 497 }
459 498
460 499 public function rest_data($nonce = true){
500 + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
461 501 return apply_filters('nx_rest_data', array(
462 502 'root' => rest_url(),
463 503 'namespace' => $this->_namespace(),
464 504 'nonce' => $nonce ? wp_create_nonce( 'wp_rest' ) : '',
@@ -538,8 +578,10 @@
538 578 '/wp-json/notificationx/v1/elementor/import',
539 579 '/wp-json/notificationx/v1/gutenberg/import',
540 580 '/wp-json/notificationx/v1/elementor/remove',
541 581 '/wp-json/notificationx/v1/gutenberg/remove',
582 + '/wp-json/notificationx/v1/exit-intent/elementor/import',
583 + '/wp-json/notificationx/v1/exit-intent/elementor/remove',
542 584 '/wp-json/notificationx/v1/reporting-test',
543 585 '/wp-json/notificationx/v1/settings',
544 586 '/wp-json/notificationx/v1/miscellaneous',
545 587 '/wp-json/notificationx/v1/get-data',
@@ -546,8 +588,21 @@
546 588 '/wp-json/notificationx/v1/notice',
547 589 '/wp-json/notificationx/v1/delete-cookies',
548 590 '/wp-json/notificationx/v1/import',
549 591 '/wp-json/notificationx/v1/export',
592 +
593 + /*
594 + * TRANSITIONAL — remove in the release after Pro ships its own
595 + * NotificationXPro\Core\REST::jwt_whitelist() override.
596 + *
597 + * These four routes belong to Pro: the licensing library registers them
598 + * into this namespace, and Pro now whitelists all six itself. They stay
599 + * here for one release only because Free auto-updates from wp.org while
600 + * Pro updates through the licensed channel, so "new Free + old Pro" is a
601 + * normal state for a site, and an old Pro carries no override. Dropping
602 + * them before Pro has propagated would take the entries to zero for those
603 + * sites. Pro's override calls array_unique(), so the overlap is harmless.
604 + */
550 605 '/wp-json/notificationx/v1/license/activate',
551 606 '/wp-json/notificationx/v1/license/deactivate',
552 607 '/wp-json/notificationx/v1/license/submit-otp',
553 608 '/wp-json/notificationx/v1/license/resend-otp',