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();
}