is_preview()) {
show_admin_bar(false);
}
if ($this->is_preview() && class_exists('QueryMonitor')) {
// Query Monitor renders its own output into the preview iframe and
// corrupts it, so display is silenced while building a preview.
// phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged
ini_set('display_errors', 'Off');
// phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged
ini_set('error_reporting', E_ALL);
$qm = \QueryMonitor::init();
remove_action('plugins_loaded', [$qm, 'action_plugins_loaded']);
}
}
/**
* This method is responsible for enqueueing scripts for public use.
*
* @return void
*/
public function enqueue_scripts($return) {
if ($this->is_preview()) {
$args = [
'total' => 1,
'nxPreview' => true,
'pressbar' => [],
'active' => [],
'gdpr' => [],
'popup' => [],
'exit_intent' => [],
];
$settings = $this->preview_settings();
if (empty($settings['source']) || empty($settings['type']))
return;
if ('inline' === $settings['type'] || 'woocommerce_sales_inline' == $settings['source'] ){
$args['total'] = 0;
return $args;
}
$source = $settings['source'];
$type = $settings['type'];
if ($type === 'exit_intent') {
$args['exit_intent'] = [
$source => [
'entries' => [
$this->preview_entry($settings),
],
'post' => $settings,
]
];
} else if ($source === 'press_bar') {
$args['pressbar'] = [
$source => [
'content' => FrontEnd::get_instance()->get_bar_content($settings, true),
'post' => $settings,
]
];
} else if($source === 'gdpr_notification') {
$args['gdpr'] = [
$source => [
'entries' => [
$this->preview_entry($settings),
],
'post' => $settings,
]
];
} else if($source === 'popup_notification') {
$args['popup'] = [
$source => [
'entries' => [
$this->preview_entry($settings),
],
'post' => $settings,
]
];
} else {
$args['active'] = [
$source => [
'entries' => [
$this->preview_entry($settings),
],
'post' => $settings,
]
];
}
$args['settings'] = FrontEnd::get_instance()->get_settings();
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$this->notificationXArr = apply_filters('get_notifications_ids', $args);
wp_enqueue_style('notificationx-public');
wp_enqueue_script('notificationx-public');
do_action('notificationx_scripts', $this->notificationXArr);
add_filter('show_admin_bar', '__return_false');
return $this->notificationXArr;
}
return $return;
}
public function header_scripts() {
if ($this->is_preview()) {
?>
is_preview()) {
?>
$nx_id,
'active_installs' => wp_rand(50, 70),
'active_installs_text' => 'Try It Out',
'all_time' => wp_rand(50, 70),
'all_time_text' => 'Why Don\'t You?',
'anonymous_title' => 'Anonymous Title',
'author' => 'WPDeveloper',
'author_profile' => 'https://profiles.wordpress.org/wpdevteam/',
'amount' => wp_rand(50, 70),
'avatar' => [
'src' => NOTIFICATIONX_PUBLIC_URL . 'image/icons/pink-face-looped.gif',
],
'picture' => NOTIFICATIONX_PUBLIC_URL . 'image/icons/pink-face-looped.gif',
'city' => 'Dhaka',
'city_country' => 'Dhaka, Bangladesh',
'content' => 'Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.',
'count' => wp_rand(50, 70),
'country' => 'Bangladesh',
'course_title' => 'PHP Beginners – Become a PHP Master',
'created_at' => wp_date('Y-m-d H:i:s', strtotime('2 days ago')),
'day' => 'days',
'downloaded' => wp_rand(50, 70),
'email' => 'support@wpdeveloper.com',
'entry_id' => wp_rand(1000, 9999),
'entry_key' => 'ChIJ0cpDbNvBVTcRGX9JNhhpC8I',
'first_name' => 'John',
'_first_name' => 'John',
'formatted_address' => 'House 592, Road 8 Avenue 5, Dhaka 1216, Bangladesh',
'ga_title' => 'NotificationX',
'icon' => 'https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/generic_business-71.png',
'icons' => array(
'1x' => "https://ps.w.org/notificationx/assets/icon-128x128.gif?rev=2783824",
'2x' => "https://ps.w.org/notificationx/assets/icon-256x256.gif?rev=2783824",
),
'id' => 5,
'image_data' => array(
'url' => NOTIFICATIONX_PUBLIC_URL . 'image/icons/pink-face-looped.gif',
'alt' => '',
'classes' => 'greview_icon',
),
'ip' => '103.108.146.88',
'key' => '7368a455f5c113afbfd3d8c3ea89a5ed-5719',
'last_name' => 'Doe',
'_last_name' => 'Doe',
'last_updated' => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
'last_week' => wp_rand(50, 70),
'last_week_text' => 'Get Started for Free.',
'lat' => 23.8371427,
'link' => '#',
'lon' => 90.3704629,
'month' => 'months',
'name' => 'John Doe',
'names' => 'John Doe',
'none' => '',
'num_ratings' => 2974,
'nx_id' => '60',
'order_id' => 5815,
'place_id' => 'ChIJ0cpDbNvBVTcRGX9JNhhpC8I',
'place_name' => 'WPDeveloper',
'plugin_name' => 'NotificationX',
'plugin_name_text' => 'try it out',
'plugin_review' => 'Lorem Ipsum is simply dummy text...',
'place_review' => 'Lorem Ipsum is simply dummy text...',
'plugin_theme_name' => 'NotificationX',
'post_link' => '#',
'product_id' => 168,
'product_title' => 'Assorted Coffee',
'rated' => wp_rand(50, 70),
'rating' => 4.4,
'ratings' => array(
0 => 48,
1 => 13,
2 => 21,
3 => 66,
4 => 2826,
),
'realtime_siteview' => wp_rand(50, 70),
'siteview' => wp_rand(50, 70),
'slug' => 'notificafionx',
'sometime' => 'Some time ago',
'source' => 'google_reviews',
'status' => 'wc-processing',
'this_page' => 'this page',
'timestamp' => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
'title' => 'Hoodie with Logo',
'today' => wp_rand(50, 70),
'today_text' => 'Try It Out',
'type' => 'realtime_siteview',
'updated_at' => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
'url' => '#',
'user_id' => '1',
'username' => 'johndoe',
'version' => '5.5.2',
'views' => wp_rand(50, 70),
'website' => 'https://wpdeveloper.com/',
'year' => 'years',
'yesterday' => wp_rand(50, 70),
'your-email' => 'support@wpdeveloper.com',
'your-message' => 'Lorem Ipsum is simply dummy text.',
'your-name' => 'John Doe',
'your-subject' => 'Lorem Ipsum',
'post_title' => 'Hello World',
'sales_count' => wp_rand(50, 70),
'donation_count' => wp_rand(50, 70),
'1day' => __('In last 1 day', 'notificationx'),
'7days' => __('In last 7 days', 'notificationx'),
'30days' => __('In last 30 days', 'notificationx'),
'post_comment' => 'Lorem Ipsum is simply dummy text...',
// 'select_a_tag' => 'Jhon',
];
if (!empty($settings['custom_contents']) && is_array($settings['custom_contents']) && count($settings['custom_contents'])) {
$custom = !empty($settings['custom_contents'][0]) ? $settings['custom_contents'][0] : [];
if (isset($custom['first_name'], $custom['last_name'])) {
$custom['name'] = Helper::name($custom['first_name'], $custom['last_name']);
}
$defaults = array_merge($defaults, $custom);
}
$settings['freemius_plugins'] = '';
$defaults['image_data'] = FrontEnd::get_instance()->apply_defaults((array) FrontEnd::get_instance()->get_image_url($defaults, $settings), $defaults['image_data']);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_preview_entry_$type", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_preview_entry_$source", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$_defaults = apply_filters("nx_fallback_data_$source", $defaults, $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$_defaults = apply_filters('nx_fallback_data', $_defaults, $_defaults, $settings);
$defaults = FrontEnd::get_instance()->apply_defaults($defaults, $_defaults);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_filtered_entry_$type", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_filtered_entry_$source", $defaults, $settings);
// $defaults = $this->link_url($defaults, $settings);
if (strpos($settings['theme'], 'maps_theme') !== false && 'maps_image' === $settings['show_notification_image']) {
$defaults['image_data'] = array(
'url' => NOTIFICATIONX_ASSETS . 'admin/images/map.jpg',
'alt' => '',
'classes' => 'greview_icon',
);
}
if ('gravatar' === $settings['show_notification_image']) {
$defaults['image_data'] = array(
'url' => NOTIFICATIONX_PUBLIC_URL . 'image/icons/pink-face-looped.gif',
'alt' => '',
'classes' => 'greview_icon',
);
}
if ('none' === $settings['show_notification_image'] && !$settings['show_default_image']) {
$defaults['image_data'] = false;
}
return $defaults;
}
public function get_settings() {
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reviewed for the NotificationX codebase: acceptable in this context.
if ( empty($_POST['nx-preview']) ) {
return array();
}
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reviewed for the NotificationX codebase: acceptable in this context.
$settings = base64_decode( sanitize_text_field( wp_unslash( $_POST['nx-preview'] ) ), true );
$settings = json_decode( $settings, true );
if ( ! is_array($settings) ) {
return array();
}
// Simple sanitization
array_walk_recursive( $settings, function ( &$value ) {
if ( is_string( $value ) ) {
$value = wp_strip_all_tags( $value );
}
});
return $settings;
}
public function preview_settings($settings = []) {
$settings = !empty($settings) ? $settings : $this->get_settings();
if (empty($settings['source'])){
return [];
}
if ($settings['global_queue']) {
$settings['global_queue'] = false;
$settings['_global_queue'] = true;
}
$settings['nx_id'] = wp_rand();
$settings['is_preview'] = true;
if (empty($settings['theme']) && !empty($settings['themes'])) {
$settings['theme'] = $settings['themes'];
}
if ('form' === $settings['type']) {
$settings['notification-template']['first_param'] = 'tag_first_name';
}
if( !empty( $settings['notification-template'] ) ) {
$settings['notification-template'] = array_map( 'esc_html', $settings['notification-template'] );
}
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$settings = apply_filters("nx_get_post_{$settings['source']}", $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$settings = apply_filters("nx_preview_settings_{$settings['source']}", $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$settings = apply_filters('nx_get_post', $settings);
return $settings;
}
public function content_heading($tabs) {
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$urls = apply_filters('nx_preview_url', [
'default' => trailingslashit(home_url()),
]);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$tabs['config']['content_heading']['talk_to_support'] = apply_filters('talk_to_support', [
'text' => __('Talk to Support', 'notificationx'),
'classes' => 'nx-talk-to-support',
'type' => 'button',
'name' => 'talk_to_support',
'target' => '_blank',
'href' => esc_url('https://notificationx.com/support/?support=chat'),
]);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$tabs['config']['content_heading']['preview'] = apply_filters('nx_content_heading_preview', [
'label' => __('Preview', 'notificationx'),
'type' => 'preview-modal',
'name' => 'preview',
'urls' => $urls,
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
'errors' => apply_filters('nx_content_heading_preview_errors', []),
'rules' => Rules::logicalRule([
Rules::includes('themes', ['woo_inline_stock-theme-two', 'tutor_inline_conv-theme-eight', 'flashing_tab_theme-1','flashing_tab_theme-2' ,'flashing_tab_theme-3' , 'flashing_tab_theme-4','woocommerce_sales_inline_stock-theme-two','learnpress_inline_conv-theme-eight'], true),
Rules::is('type', 'notification_bar', true),
]),
]);
return $tabs;
}
public function inline_notifications_data($return, $source, $id, $settings = []) {
if ($this->is_preview() && !empty($id)) {
$settings = $this->preview_settings($settings);
$settings['is_preview'] = true;
if ( ( empty($settings['source']) || empty($settings['type']) || 'inline' !== $settings['type']) && ('woocommerce_sales_inline' !== $settings['source']) ){
return;
}
remove_filter('nx_inline_notifications_data', [$this, 'inline_notifications_data'], 10);
$source = !empty($settings['source']) ? $settings['source'] : '';
$type = !empty($settings['type']) ? $settings['type'] : '';
$settings['inline_location'] = is_array($settings['inline_location']) ? $settings['inline_location'] : [];
$settings['inline_location'][] = 'woocommerce_before_add_to_cart_form';
$defaults = [
"nx_id" => wp_rand(),
"entry_id" => 78,
"order_id" => 96,
"product_id" => $id,
"id" => $id,
// "status" => "wc-pending",
"title" => get_the_title($id),
"product_title" => get_the_title($id),
"link" => "#",
"timestamp" => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
// "first_name" => "John",
// "last_name" => "Doe",
// "name" => "John Doe",
"email" => "support@wpdeveloper.com",
"source" => $source,
"entry_key" => "96-7",
"created_at" => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
"updated_at" => gmdate('Y-m-d H:i:s', strtotime('2 days ago')),
"none" => "",
// "anonymous_title" => "Anonymous Product",
// "sometime" => "Some time ago",
"sales_count" => wp_rand(50, 70),
"donation_count" => wp_rand(50, 70),
// "30days" => "in last 30 days",
// "day:30" => "30 days",
// "1day" => "in last 1 day",
// "7days" => "in last 7 days",
];
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$_defaults = apply_filters("nx_fallback_data_$source", $defaults, $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$_defaults = apply_filters('nx_fallback_data', $_defaults, $_defaults, $settings);
$defaults = FrontEnd::get_instance()->apply_defaults($defaults, $_defaults);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_preview_entry_$type", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_preview_entry_$source", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_filtered_entry_$type", $defaults, $settings);
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$defaults = apply_filters("nx_filtered_entry_$source", $defaults, $settings);
return [
'shortcode' => [
[
"entries" => [$defaults],
"post" => $settings,
],
],
];
}
return $return;
}
public function is_preview() {
$is_preview = false;
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reviewed for the NotificationX codebase: acceptable in this context.
if (!empty($_POST['nx-preview'])) {
$is_preview = true;
}
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reviewed for the NotificationX codebase: acceptable in this context.
$is_preview = apply_filters('nx_is_preview',$is_preview);
return $is_preview;
}
}