is_success() || AEPC_Admin_Notices::has_notice( 'error' ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { wp_send_json_success( self::get_product_feed_status_html( false, $res->get( 'background_saving' ) ) ); } } /** * Update product catalog * * @return void|null */ public static function ajax_update_product_catalog() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Perform the edit from handler function already ready to perform the action. $res = AEPC_Admin_Handlers::update_product_catalog(); // Check about errors. if ( $res->get( 'background_saving' ) && ( ! $res->is_success() || AEPC_Admin_Notices::has_notice( 'error' ) ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { wp_send_json_success( self::get_product_feed_status_html( false, $res->get( 'background_saving' ) ) ); } } /** * Delete the product catalog feed * * @return void|null */ public static function ajax_delete_product_catalog_feed() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Perform the edit from handler function already ready to perform the action. $res = AEPC_Admin_Handlers::delete_product_catalog_feed(); // Check about errors. if ( ! $res->is_success() || AEPC_Admin_Notices::has_notice( 'error' ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { wp_send_json_success(); } } /** * Refresh the product catalog feed * * @return void|null */ public static function ajax_refresh_product_catalog_feed() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Perform the edit from handler function already ready to perform the action. $res = AEPC_Admin_Handlers::refresh_product_catalog_feed(); // Check about errors. if ( $res->get( 'background_saving' ) && ( ! $res->is_success() || AEPC_Admin_Notices::has_notice( 'error' ) ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { wp_send_json_success( self::get_product_feed_status_html( false, $res->get( 'background_saving' ) ) ); } } /** * Refresh the product catalog feed * * @return void|null */ public static function ajax_save_product_feed_refresh_interval() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Perform the edit from handler function already ready to perform the action. $res = AEPC_Admin_Handlers::save_product_feed_refresh_interval(); // Check about errors. if ( ! $res || AEPC_Admin_Notices::has_notice( 'error' ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'messages' => $notices ) ); } } /** * Send list of all user roles * * @return void|null */ public static function ajax_get_user_roles() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $roles = get_editable_roles(); // Map values. foreach ( $roles as $role_name => &$role ) { $role = array( 'id' => $role_name, 'text' => $role['name'], ); } wp_send_json( array_values( $roles ) ); } /** * Send list of all user roles * * @return void|null */ public static function ajax_get_standard_events() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $events = array(); // Map values. foreach ( AEPC_Track::$standard_events as $event => $args ) { if ( in_array( $event, array( 'CustomEvent' ), true ) || strpos( $args, 'value' ) === false ) { continue; } $events[] = array( 'id' => $event, 'text' => $event, ); } wp_send_json( array_values( $events ) ); } /** * Send list of all meta keys * * @return void|null */ public static function ajax_get_custom_fields() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } global $wpdb; $post_type_excluded = apply_filters( 'aepc_list_custom_fields_post_type_excluded', array( 'attachment', 'nav_menu_item', 'revision', ) ); $meta_key_excluded = apply_filters( 'aepc_list_meta_key_post_type_excluded', array( '_edit_last', '_edit_lock', '_featured', ) ); $post_type_placeholders = implode( ', ', array_fill( 0, count( $post_type_excluded ), '%s' ) ); $meta_key_placeholders = implode( ', ', array_fill( 0, count( $meta_key_excluded ), '%s' ) ); // @codingStandardsIgnoreStart $keys = $wpdb->get_col( $wpdb->prepare( " SELECT meta_key FROM $wpdb->postmeta pm LEFT JOIN $wpdb->posts p ON p.ID = pm.post_id WHERE p.post_type NOT IN ( {$post_type_placeholders} ) AND pm.meta_key NOT IN ( {$meta_key_placeholders} ) GROUP BY meta_key ORDER BY meta_key", array_merge( $post_type_excluded, $meta_key_excluded ) ) ); // @codingStandardsIgnoreEnd // Format array with key and value as select2 wants. foreach ( $keys as &$key ) { $key = array( 'id' => $key, 'text' => $key, ); } wp_send_json( $keys ); } /** * Send list of all available languages for filters * * @return void|null */ public static function ajax_get_languages() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } require_once ABSPATH . 'wp-admin/includes/translation-install.php'; $translations = wp_get_available_translations(); // Get only ISO code. $iso = array(); foreach ( $translations as $translation ) { $id = str_replace( '_', '-', $translation['language'] ); if ( is_string( $id ) ) { $iso[ $id ] = array( 'id' => $id, 'text' => $translation['english_name'], ); } } // Add default en_US. $iso['en-US'] = array( 'id' => 'en-US', 'text' => __( 'English (American)', 'pixel-caffeine' ), ); // Sort. ksort( $iso ); wp_send_json( array_values( $iso ) ); } /** * Send list of all available device types for filters * * @return void|null */ public static function ajax_get_device_types() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } wp_send_json( array( array( 'id' => 'desktop', 'text' => __( 'Desktop', 'pixel-caffeine' ), ), array( 'id' => 'mobile_iphone', 'text' => __( 'iPhone', 'pixel-caffeine' ), ), array( 'id' => 'mobile_android_phone', 'text' => __( 'Android Phone', 'pixel-caffeine' ), ), array( 'id' => 'mobile_ipad', 'text' => __( 'iPad', 'pixel-caffeine' ), ), array( 'id' => 'mobile_android_tablet', 'text' => __( 'Android Tablet', 'pixel-caffeine' ), ), array( 'id' => 'mobile_windows_phone', 'text' => __( 'Windows Phone', 'pixel-caffeine' ), ), array( 'id' => 'mobile_ipod', 'text' => __( 'iPod', 'pixel-caffeine' ), ), ) ); } /** * Send list of all available device types for filters * * @return void|null */ public static function ajax_get_dpa_params() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $params = array( 'value', 'currency', 'predicted_ltv', 'content_name', 'content_category', 'content_type', 'content_ids', 'num_items', 'search_string', 'status', ); foreach ( $params as &$param ) { $param = array( 'id' => $param, 'text' => $param, ); } wp_send_json( $params ); } /** * Send list of all terms divided by taxonomies for categories * * @return void|null */ public static function ajax_get_categories() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } /** * Set the taxonomies as key of terms. * * @var array $terms */ $terms = get_taxonomies( array( 'public' => true ) ); // Exclude tag taxonomies from categories. foreach ( array( 'post_tag', 'product_tag', 'product_shipping_class', 'post_format' ) as $tax ) { unset( $terms[ $tax ] ); } // Foreach taxonomy, get the available terms. foreach ( $terms as $taxonomy => &$list ) { global $wp_version; if ( version_compare( $wp_version, '4.5', '<' ) ) { $list = get_terms( $taxonomy ); } else { $list = get_terms( array_merge( array( 'taxonomy' => $taxonomy ) ) ); } if ( ! is_array( $list ) ) { unset( $terms[ $taxonomy ] ); continue; } // Format array for select2. foreach ( $list as &$term ) { $term = array( 'id' => $term->name, 'text' => $term->name, ); } // Add [[any]] on first place. $list = array_merge( array( array( 'id' => '[[any]]', 'text' => '--- ' . __( 'anything', 'pixel-caffeine' ) . ' ---', ), ), $list ); } wp_send_json( $terms ); } /** * Send list of all terms divided by taxonomies for categories * * @return void|null */ public static function ajax_get_tags() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } /** * Set the taxonomies as key of terms. * * @var array $terms */ $terms = get_taxonomies( array( 'public' => true ) ); // Foreach taxonomy, get the available terms. foreach ( $terms as $taxonomy => &$list ) { global $wp_version; // Return only tag taxonomies. if ( ! in_array( $taxonomy, array( 'post_tag', 'product_tag' ), true ) ) { unset( $terms[ $taxonomy ] ); continue; } if ( version_compare( $wp_version, '4.5', '<' ) ) { $list = get_terms( $taxonomy ); } else { $list = get_terms( array_merge( array( 'taxonomy' => $taxonomy ) ) ); } if ( ! is_array( $list ) ) { unset( $terms[ $taxonomy ] ); continue; } // Format array for select2. foreach ( $list as &$term ) { $term = array( 'id' => $term->name, 'text' => $term->name, ); } // Add [[any]] on first place. $list = array_merge( array( array( 'id' => '[[any]]', 'text' => '--- ' . __( 'anything', 'pixel-caffeine' ) . ' ---', ), ), $list ); } wp_send_json( $terms ); } /** * Send list of all posts divided by post_type * * @return void|null */ public static function ajax_get_posts() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Set the taxonomies as key of terms. $posts = get_post_types( array( 'public' => true ) ); // Foreach taxonomy, get the available terms. foreach ( $posts as $post_type => &$list ) { /** * The function get_posts below will return objects array because no return option in the configuration. * * @var WP_Post[] $list */ // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.get_posts_get_posts $list = get_posts( array( 'posts_per_page' => -1, 'post_type' => $post_type, 'suppress_filters' => false, // Use for performance. ) ); // Format array for select2. foreach ( $list as &$post ) { $post = array( 'id' => $post->ID, 'text' => $post->post_title, ); } // Add [[any]] on first place. $list = array_merge( array( array( 'id' => '[[any]]', 'text' => '--- ' . __( 'anything', 'pixel-caffeine' ) . ' ---', ), ), $list ); } wp_send_json( $posts ); } /** * Send the ca filter statement * * @return void|null */ public static function ajax_get_filter_statement() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Make filter array from javascript. $filter = array(); $tmp = array(); foreach ( (array) filter_input( INPUT_GET, 'filter', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ) as $v ) { if ( isset( $v['name'], $v['value'] ) ) { $bracketed = str_replace( '[]', '', $v['name'] ); if ( is_string( $bracketed ) ) { $tmp[ $bracketed ] = $v['value']; } } } // Convert string with brackets to array in php. foreach ( $tmp as $key => $val ) { $key_parts = preg_split( '/[\[\]]+/', $key, -1, PREG_SPLIT_NO_EMPTY ); $ref = &$filter; while ( $key_parts ) { $part = array_shift( $key_parts ); if ( ! isset( $ref[ $part ] ) ) { $ref[ $part ] = array(); } $ref = &$ref[ $part ]; } $ref = $val; } $tmp = new AEPC_Admin_CA(); if ( isset( $filter['ca_rule'] ) ) { $tmp->add_filter( $filter['ca_rule'] ); } $statements = $tmp->get_human_rule_list( '', '' ); echo wp_kses( array_pop( $statements ), 'post' ); die(); } /** * Send all currencies if woocommerce is activated * * @return void|null */ public static function ajax_get_currencies() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $currencies = array(); if ( AEPC_Addons_Support::are_detected_addons() ) { foreach ( AEPC_Currency::get_currencies() as $currency => $args ) { $currencies[] = array( 'id' => esc_attr( $currency ), 'text' => $args->symbol . ' (' . $args->name . ')', ); } } wp_send_json( $currencies ); } /** * Send all account ids of user * * @return void|null */ public static function ajax_get_account_ids() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Get account ids from facebook. try { $fb = AEPC_Admin::$api; $accounts = $fb->get_account_ids(); // Format for select2 component. foreach ( $accounts as &$account ) { $account = array( 'id' => wp_json_encode( array( 'id' => $account->account_id, 'name' => $account->name, ) ) ?: '{}', 'text' => $account->name . ' (#' . $account->account_id . ')', ); } wp_send_json( $accounts ); } catch ( Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Send all pixel of an account id * * @return void */ public static function ajax_get_pixel_ids() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) || ! filter_has_var( INPUT_GET, 'account_id' ) ) { wp_send_json_error( 'Not authorized.' ); } // Get pixel ids from facebook. try { $fb = AEPC_Admin::$api; $pixels = (array) $fb->get_pixel_ids( filter_input( INPUT_GET, 'account_id', FILTER_SANITIZE_STRING ) ); // Format for select2 component. foreach ( $pixels as &$pixel ) { $pixel = array( 'id' => wp_json_encode( array( 'id' => $pixel->id, 'name' => $pixel->name, ) ) ?: '{}', 'text' => $pixel->name . ' (#' . $pixel->id . ')', ); } wp_send_json( $pixels ); } catch ( Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Send the statistics of a pixel, get by facebook * * @return void|null */ public static function ajax_get_pixel_stats() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $sets = AEPC_Admin::get_pixel_stats_sets(); if ( is_wp_error( $sets ) ) { wp_send_json_error( $sets ); } else { wp_send_json( $sets ); } } /** * Send all pixel of an account id * * @return void|null */ public static function ajax_get_product_catalog_ids() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Get pixel ids from facebook. try { $fb = AEPC_Admin::$api; $product_catalogs = (array) $fb->get_product_catalogs( AEPC_Admin::$api->get_business_id() ); // Format for select2 component. foreach ( $product_catalogs as &$product_catalog ) { $product_catalog = array( 'id' => $product_catalog->id, 'name' => $product_catalog->name, ); } wp_send_json_success( (array) $product_catalogs ); } catch ( Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Send all product feed ids of product catalog id * * @return void|null */ public static function ajax_get_product_feed_ids() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } // Get pixel ids from facebook. try { $fb = AEPC_Admin::$api; $product_feeds = (array) $fb->get_product_feeds( filter_input( INPUT_GET, 'product_catalog_id', FILTER_SANITIZE_STRING ) ); // Format for select2 component. foreach ( $product_feeds as &$product_feed ) { $product_feed = array( 'id' => $product_feed->id, 'name' => $product_feed->name, ); } wp_send_json_success( (array) $product_feeds ); } catch ( Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Send the statistics of a pixel, get by facebook * * @return void */ public static function ajax_get_google_categories() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { wp_send_json_error( 'Not authorized' ); } try { $google_categories = AEPC_Admin::$product_catalogs_service->get_google_categories(); $parents = filter_input( INPUT_POST, 'parents', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ); // Get the only items of the parent specified. foreach ( $parents as $parent_child ) { $google_categories = $google_categories[ $parent_child ]; } $response = array_keys( $google_categories ); wp_send_json( $response ); } catch ( Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Load the facebook pixel box on settings page * * @return void|null */ public static function ajax_load_fb_pixel_box() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'general-settings' ); ob_start(); $page->get_template_part( 'panels/set-facebook-pixel', array( 'fb' => AEPC_Admin::$api ) ); $html = ob_get_clean(); // Don't need notices. AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'html' => $html, ) ); } /** * Load the facebook pixel box on settings page * * @return void|null */ public static function ajax_load_server_side() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'general-settings' ); ob_start(); $page->get_template_part( 'panels/server-side-settings', array( 'fb' => AEPC_Admin::$api ) ); $html = ob_get_clean(); // Don't need notices. AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'html' => $html, ) ); } /** * Load the custom audiences table list * * @return void|null */ public static function ajax_load_ca_list() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'custom-audiences' ); ob_start(); $page->get_template_part( 'tables/ca-list' ); $html = ob_get_clean(); // Don't need notices. $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'html' => $html, 'messages' => $notices, ) ); } /** * Load the conversions table list * * @return void|null */ public static function ajax_load_conversions_list() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'conversions' ); ob_start(); $page->get_template_part( 'tables/ce-tracking' ); $html = ob_get_clean(); // Don't need notices. $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'html' => $html, 'messages' => $notices, ) ); } /** * Load the conversions table list * * @return void|null */ public static function ajax_load_logs_list() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'logs' ); ob_start(); $page->get_template_part( 'tables/log-list' ); $html = ob_get_clean(); // Don't need notices. $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); wp_send_json_success( array( 'html' => $html, 'messages' => $notices, ) ); } /** * Load the news widget on admin sidebar * * @return void|null */ public static function ajax_load_sidebar() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'general-settings' ); ob_start(); $page->get_template_part( 'sidebar' ); $html = ob_get_clean(); wp_send_json_success( array( 'html' => $html, ) ); } /** * Load the product catalog status box * * @return void|null */ public static function ajax_load_product_feed_status() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } wp_send_json_success( self::get_product_feed_status_html() ); } /** * Load the product feed schedule options * * @return void|null */ public static function ajax_load_product_feed_schedule() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $page = AEPC_Admin::get_page( 'product-catalog' ); ob_start(); $page->get_form_fields( 'sub/schedule', array( 'group' => Configuration::VALUE_FB_ACTION_UPDATE, 'product_feed_id' => filter_input( INPUT_GET, 'product_feed_id', FILTER_SANITIZE_STRING ), ) ); $html = ob_get_clean(); wp_send_json_success( array( 'html' => $html, ) ); } /** * Refresh custom audience data after click on sync data * * @return void|null */ public static function ajax_refresh_ca_size() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } try { $ca_id = intval( filter_input( INPUT_GET, 'ca_id', FILTER_SANITIZE_NUMBER_INT ) ) ?: 0; $ca = new AEPC_Admin_CA( $ca_id ); $ca->refresh_size(); wp_send_json_success(); } catch ( Exception $e ) { wp_send_json_error( array( 'message' => $e->getMessage(), ) ); } } /** * Clear the transients * * @return void|null */ public static function ajax_clear_transients() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } AEPC_Admin::clear_transients(); wp_send_json_success( array( 'message' => __( 'Transients cleared correctly!', 'pixel-caffeine' ) ) ); } /** * Remove the access token option in order to reset facebook connection * * @return void|null */ public static function ajax_reset_fb_connection() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } AEPC_Admin::reset_fb_connection(); wp_send_json_success( array( 'message' => __( 'Facebook connection reset correctly!', 'pixel-caffeine' ) ) ); } /** * Dismiss the notices * * @return void|null */ public static function ajax_dismiss_notice() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } AEPC_Admin_Notices::dismiss_notice( filter_input( INPUT_GET, 'notice_id', FILTER_SANITIZE_STRING ) ); wp_send_json_success( array( 'message' => __( 'OK', 'pixel-caffeine' ) ) ); } /** * Add custom audience * * @return void|null */ public static function ajax_clear_logs() { if ( ! current_user_can( 'manage_ads' ) || ! wp_verify_nonce( filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING ), str_replace( 'ajax_', '', __FUNCTION__ ) ) ) { return null; } $log_repository = new LogRepository(); $log_repository->removeAll(); // Check about errors. if ( AEPC_Admin_Notices::has_notice( 'error' ) ) { $notices = AEPC_Admin_Notices::get_notices( 'error' ); // Do not save notices. AEPC_Admin_Notices::remove_notices( 'error' ); wp_send_json_error( $notices ); } else { AEPC_Admin_Notices::add_notice( 'success', 'main', __( 'All logs are removed.', 'pixel-caffeine' ) ); wp_send_json_success( self::get_logs_list_html() ); } } /** * HELPERS */ /** * Retrieve the product feed status in HTML format * * @param false $force_updating_status Set true if you want to force the "updating" status. * @param false $force_refreshing_status Set true if you want to force the "refreshing" status. * * @return array */ protected static function get_product_feed_status_html( $force_updating_status = false, $force_refreshing_status = false ) { $page = AEPC_Admin::get_page( 'product-catalog' ); $product_catalog = $page->get_product_catalog(); ob_start(); $page->get_template_part( 'panels/product-feed-status', array( 'product_catalog' => $product_catalog, 'force_updating' => $force_updating_status, 'force_refreshing' => $force_refreshing_status, ) ); $html = ob_get_clean(); // Don't need notices. $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); return array( 'html' => $html, 'fragment' => 'product_feed_status', 'messages' => $notices, ); } /** * Get the HTML for the logs list * * @return array */ protected static function get_logs_list_html() { $page = AEPC_Admin::get_page( 'logs' ); ob_start(); $page->get_template_part( 'tables/log-list' ); $html = ob_get_clean(); // Don't need notices. $notices = AEPC_Admin_Notices::get_notices(); AEPC_Admin_Notices::remove_notices(); return array( 'html' => $html, 'fragment' => 'logs_list', 'messages' => $notices, ); } }