post_content; foreach ( $amp_ads_id as $ad_id ) { $post_meta_dataset = array(); $post_meta_dataset = get_post_meta( $ad_id, $key = '', true ); $where_to_display = adsforwp_rmv_warnings( $post_meta_dataset, 'wheretodisplay', 'adsforwp_array' ); $jquery_selector = adsforwp_rmv_warnings( $post_meta_dataset, 'adsforwp_jquery_selector', 'adsforwp_array' ); $custom_target_position = adsforwp_rmv_warnings( $post_meta_dataset, 'adsforwp_custom_target_position', 'adsforwp_array' ); $new_element = adsforwp_rmv_warnings( $post_meta_dataset, 'adsforwp_new_element', 'adsforwp_array' ); if ( $where_to_display == 'ad_shortcode' ) { if ( ! has_shortcode( $content, 'adsforwp' ) ) { continue; } elseif ( ! preg_match( '/\[adsforwp(.*?)id=\"' . $ad_id . '\"\]/', $content, $matches ) ) { continue; } } elseif ( $where_to_display == 'custom_target' ) { if ( $custom_target_position == 'existing_element' && ! empty( $jquery_selector ) ) { $idselector = ltrim( $jquery_selector, '#' ); $classselector = ltrim( $jquery_selector, '.' ); if ( strpos( $jquery_selector, '#' ) !== false ) { if ( ! preg_match( '/id=\"' . $idselector . '\"/', $content, $matches ) ) { continue; } } elseif ( strpos( $jquery_selector, '.' ) !== false ) { if ( ! preg_match( '/class=\"' . $classselector . '\"/', $content, $matches ) ) { continue; } } } elseif ( $custom_target_position == 'new_element' && ! empty( $new_element ) ) { $new_element = html_entity_decode( $new_element ); preg_match( '//', $new_element, $matches ); if ( $matches ) { if ( ! preg_match( '/' . $matches[1] . '/', $content, $match ) ) { continue; } } else { continue; } } } ?> get_var( $wpdb->prepare( "SELECT `id` FROM `{$wpdb->prefix}adsforwp_stats` WHERE `ad_id` = %d AND `ad_device_name` = %s AND `ad_thetime` = %d;", $ad_id, trim( $device_name ), $today ) ); wp_cache_set( 'adsforwp_get_stats_impr_' . $ad_id, $stats ); } if ( $stats > 0 ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason:working on custom table $wpdb->query( $wpdb->prepare( "UPDATE `{$wpdb->prefix}adsforwp_stats` SET `ad_impressions` = `ad_impressions` + 1 WHERE `id` = %d;", $stats ) ); } else { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason:working on custom table $wpdb->insert( $wpdb->prefix . 'adsforwp_stats', array( 'ad_id' => $ad_id, 'ad_thetime' => $today, 'ad_clicks' => 0, 'ad_impressions' => 1, 'ad_device_name' => trim( $device_name ), ), array( '%d', // ad_id '%d', // ad_thetime '%d', // ad_clicks '%d', // ad_impressions '%s', // ad_device_name ) ); } } /** * Function to insert ad clicks for both (AMP and NON AMP) * * @global type $wpdb * @param type $ad_id * @param type $device_name */ public function adsforwp_insert_clicks( $ad_id, $device_name ) { global $wpdb; $today = adsforwp_get_date( 'day' ); $stats = wp_cache_get( 'adsforwp_get_stats_clicks_' . $ad_id ); if ( $stats === false ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason:working on custom table $stats = $wpdb->get_var( $wpdb->prepare( "SELECT `id` FROM `{$wpdb->prefix}adsforwp_stats` WHERE `ad_id` = %d AND `ad_device_name` = %s AND `ad_thetime` = %d;", $ad_id, trim( $device_name ), $today ) ); wp_cache_set( 'adsforwp_get_stats_clicks_' . $ad_id, $stats ); } if ( $stats > 0 ) { //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: working on custom table $wpdb->query( $wpdb->prepare( "UPDATE `{$wpdb->prefix}adsforwp_stats` SET `ad_clicks` = `ad_clicks` + 1 WHERE `id` = %d;", $stats ) ); } else { //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: working on custom table $wpdb->insert( $wpdb->prefix . 'adsforwp_stats', array( 'ad_id' => $ad_id, 'ad_thetime' => $today, 'ad_clicks' => 1, // Initial click count set to 1 'ad_impressions' => 0, // Initial impressions count set to 0 'ad_device_name' => trim( $device_name ), ), array( '%d', // ad_id '%d', // ad_thetime '%d', // ad_clicks '%d', // ad_impressions '%s', // ad_device_name ) ); } } /** * Ajax handler to get ad impression in AMP * * @return type void */ public function adsforwp_insert_ad_impression_amp() { if ( ! isset( $_GET['adsforwp_front_nonce'] ) ) { return; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason Validating nonce so sanitization not needed if ( ! wp_verify_nonce( $_GET['adsforwp_front_nonce'], 'adsforwp_ajax_check_front_nonce' ) ) { return; } $ad_id = isset( $_GET['event'] ) ? sanitize_text_field( wp_unslash( $_GET['event'] ) ) : ''; $device_name = 'amp'; if ( $ad_id ) { $this->adsforwp_insert_impression( $ad_id, $device_name ); } wp_die(); } /** * Ajax handler to get ad impression in NON AMP * * @return type void */ public function adsforwp_insert_ad_impression() { if ( ! isset( $_POST['adsforwp_front_nonce'] ) ) { return; } $settings = adsforwp_defaultSettings(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason Validating nonce so sanitization not needed if ( ! wp_verify_nonce( $_POST['adsforwp_front_nonce'], 'adsforwp_ajax_check_front_nonce' ) ) { return; } $ad_ids = array(); if ( ! empty( $_POST['ad_ids'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash $ad_ids = array_map( 'sanitize_text_field', $_POST['ad_ids'] ); } $device_name = isset( $_POST['device_name'] ) ? sanitize_text_field( wp_unslash( $_POST['device_name'] ) ) : ''; $is_track_impression = false; if($ad_ids){ $is_track_impression = true; } if($this->is_admin_user()){ if ( isset( $settings['ad_performance_tracker_for_admin'] ) && $settings['ad_performance_tracker_for_admin']==1) { if($ad_ids){ $is_track_impression = true; } }else{ $is_track_impression = false; } } if ( $is_track_impression==true) { foreach ( $ad_ids as $ad_id ) { if ( $ad_id ) { $this->adsforwp_insert_impression( $ad_id, $device_name ); } }//Foreach closed } wp_die(); } public function is_admin_user() { $status = false; if ( is_user_logged_in() ) { if ( current_user_can( 'administrator' ) ) { $status = true; } } return $status; } /** * Ajax handler to get ad clicks in NON AMP * * @return type void */ public function adsforwp_insert_ad_clicks() { if ( ! isset( $_POST['adsforwp_front_nonce'] ) ) { return; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason Validating nonce so sanitization not needed if ( ! wp_verify_nonce( $_POST['adsforwp_front_nonce'], 'adsforwp_ajax_check_front_nonce' ) ) { return; } $settings = adsforwp_defaultSettings(); $device_name = isset( $_POST['device_name'] ) ? sanitize_text_field( wp_unslash( $_POST['device_name'] ) ) : ''; $ad_id = isset( $_POST['ad_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ad_id'] ) ) : ''; $is_click_track = false; if($ad_id){ $is_click_track = true; } if($this->is_admin_user()){ if ( isset( $settings['ad_performance_tracker_for_admin'] ) && $settings['ad_performance_tracker_for_admin']==1) { if($ad_id){ $is_click_track = true; } }else{ $is_click_track = false; } } if ($is_click_track==true ) { $this->adsforwp_insert_clicks( $ad_id, $device_name ); } wp_die(); } /** * Ajax handler to get ad clicks in AMP * * @return type void */ public function adsforwp_insert_ad_clicks_amp() { if ( ! isset( $_GET['adsforwp_front_nonce'] ) ) { return; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason Validating nonce so sanitization not needed if ( ! wp_verify_nonce( $_GET['adsforwp_front_nonce'], 'adsforwp_ajax_check_front_nonce' ) ) { return; } $ad_id = isset( $_GET['event'] ) ? sanitize_text_field( wp_unslash( $_GET['event'] ) ) : ''; $device_name = 'amp'; if ( $ad_id ) { $this->adsforwp_insert_clicks( $ad_id, $device_name ); } wp_die(); } } if ( class_exists( 'Adsforwp_Admin_Analytics' ) ) { $adsforwp_analytics_hooks_obj = new Adsforwp_Admin_Analytics(); $adsforwp_analytics_hooks_obj->adsforwp_admin_analytics_hooks(); }