OwlCyberSecurity - MANAGER
Edit File: class-custom-event.php
<?php namespace PixelYourSite; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * @property int post_id * @property string title * @property bool enabled * * @property int delay * @property array triggers * @property string trigger_type * * @property bool facebook_enabled * @property string facebook_event_type * @property string facebook_custom_event_type * @property bool facebook_params_enabled * @property array facebook_params * @property array facebook_custom_params * * @property bool pinterest_enabled * @property string pinterest_event_type * @property string pinterest_custom_event_type * @property bool pinterest_params_enabled * @property array pinterest_custom_params * @property array ga_custom_params * @property array ga_params * * @property bool ga_enabled * @property string ga_event_action * @property string ga_custom_event_action * @property string ga_event_category * @property string ga_event_label * @property string ga_event_value * @property bool ga_non_interactive * * @property bool bing_enabled * @property string bing_event_action * @property string bing_event_category * @property string bing_event_label * @property string bing_event_value */ class CustomEvent { private $post_id; private $title = 'Untitled'; private $enabled = true; public $GAEvents = array( "" => array("CustomEvent"=>array()), "All Properties" => array( "earn_virtual_currency" => array("virtual_currency_name","value"), "join_group" => array("group_id"), "login" => array("method"), "purchase" => array("transaction_id",'value','currency','tax','shipping','items','coupon'), "refund" => array("transaction_id",'value','currency','tax','shipping','items'), "search" => array("search_term"), "select_content" => array("content_type",'item_id'), "share" => array("content_type",'item_id'), "sign_up" => array("method"), "spend_virtual_currency" => array("item_name",'virtual_currency_name','value'), "tutorial_begin" => array(), "tutorial_complete" => array(), ), "Retail/Ecommerce" => array( 'add_payment_info' => array('coupon','currency','items','payment_type','value'), 'add_shipping_info' => array('coupon','currency','items','shipping_tier','value'), 'add_to_cart' => array('currency', 'items', 'value'), 'add_to_wishlist' => array('currency', 'items', 'value'), 'begin_checkout' => array('coupon','currency', 'items', 'value'), 'generate_lead' => array('value', 'currency'), 'purchase' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'refund' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'remove_from_cart' => array('currency', 'items', 'value'), 'select_item' => array('items', 'item_list_name', 'item_list_id'), 'select_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id'), 'view_cart' => array('currency', 'items', 'value'), 'view_item' => array('currency', 'items', 'value'), 'view_item_list' => array('items', 'item_list_name', 'item_list_id'), 'view_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id') ), "Jobs, Education, Local Deals, Real Estate" => array( 'add_payment_info' => array("coupon", 'currency', 'items', 'payment_type', 'value'), 'add_shipping_info' => array('coupon', 'currency', 'items', 'shipping_tier', 'value'), 'add_to_cart' => array('currency', 'items', 'value'), 'add_to_wishlist' => array('currency', 'items', 'value'), 'begin_checkout' => array('coupon','currency', 'items', 'value'), 'purchase' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'refund' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'remove_from_cart' => array('currency', 'items', 'value'), 'select_item' => array('items', 'item_list_name', 'item_list_id'), 'select_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id'), 'view_cart' => array('currency', 'items', 'value'), 'view_item' => array('currency', 'items', 'value'), 'view_item_list' => array('items', 'item_list_name', 'item_list_id'), 'view_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id') ), "Travel (Hotel/Air)" => array( 'add_payment_info' => array("coupon", 'currency', 'items', 'payment_type', 'value'), 'add_shipping_info' => array('coupon', 'currency', 'items', 'shipping_tier', 'value'), 'add_to_cart' => array('currency', 'items', 'value'), 'add_to_wishlist' => array('currency', 'items', 'value'), 'begin_checkout' => array('coupon','currency', 'items', 'value'), 'generate_lead' => array('value', 'currency'), 'purchase' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'refund' => array('affiliation', 'coupon', 'currency', 'items', 'transaction_id', 'shipping', 'tax', 'value'), 'remove_from_cart' => array('currency', 'items', 'value'), 'select_item' => array('items', 'item_list_name', 'item_list_id'), 'select_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id'), 'view_cart' => array('currency', 'items', 'value'), 'view_item' => array('currency', 'items', 'value'), 'view_item_list' => array('items', 'item_list_name', 'item_list_id'), 'view_promotion' => array('items', 'promotion_id', 'promotion_name', 'creative_name', 'creative_slot', 'location_id') ), "Games" => array( 'earn_virtual_currency' => array('virtual_currency_name', 'value'), 'join_group' => array('group_id'), 'level_end' => array('level_name', 'success'), 'level_start' => array('level_name'), 'level_up' => array('character', 'level'), 'post_score' => array('level', 'character', 'score'), 'select_content' => array('content_type', 'item_id'), 'spend_virtual_currency' => array('item_name', 'virtual_currency_name', 'value'), 'tutorial_begin' => array(), 'tutorial_complete' => array(), 'unlock_achievement' => array('achievement_id'), ) ); private $data = array( 'delay' => null, 'trigger_type' => 'page_visit', 'triggers' => array(), 'facebook_enabled' => false, 'facebook_event_type' => 'ViewContent', 'facebook_custom_event_type' => null, 'facebook_params_enabled' => false, 'facebook_params' => array(), 'facebook_custom_params' => array(), 'pinterest_enabled' => false, 'pinterest_event_type' => 'ViewContent', 'pinterest_custom_event_type' => null, 'pinterest_params_enabled' => false, 'pinterest_custom_params' => array(), 'ga_enabled' => false, 'ga_event_action' => '_custom', 'ga_custom_event_action' => null, 'ga_event_category' => null, 'ga_event_label' => null, 'ga_event_value' => null, 'ga_non_interactive' => true, //ver 4 'ga_params' => array(), 'ga_custom_params' => array(), 'ga_custom_params_enabled' => false, 'bing_enabled' => false, 'bing_event_action' => null, 'bing_event_category' => null, 'bing_event_label' => null, 'bing_event_value' => null, ); public function __construct( $post_id = null ) { $this->initialize( $post_id ); } public function __get( $key ) { if ( $key == 'post_id' ) { return $this->post_id; } if ( $key == 'title' ) { return $this->title; } if ( $key == 'enabled' ) { return $this->enabled; } if ( isset( $this->data[ $key ] ) ) { return $this->data[ $key ]; } else { return null; } } private function initialize( $post_id ) { if ( $post_id ) { $this->post_id = $post_id; $this->title = get_the_title( $post_id ); $data = get_post_meta( $post_id, '_pys_event_data', true ); $this->data = is_array( $data ) ? $data : array(); $state = get_post_meta( $post_id, '_pys_event_state', true ); $this->enabled = $state == 'active' ? true : false; if(count(GA()->getPixelIDs()) == 0) { $this->data['ga_enabled'] = false; $this->clearGa(); } } } public function update( $args = null ) { if ( ! is_array( $args ) ) { $args = $this->data; } /** * GENERAL */ // title wp_update_post( array( 'ID' => $this->post_id, 'post_title' => empty( $args['title'] ) ? $this->title : sanitize_text_field( $args['title'] ) ) ); // state $state = isset( $args['enabled'] ) && $args['enabled'] ? 'active' : 'paused'; $this->enabled = $state == 'active' ? true : false; update_post_meta( $this->post_id, '_pys_event_state', $state ); // trigger type $this->data['trigger_type'] = 'page_visit'; // delay $this->data['delay'] = isset( $args['delay'] ) && $args['delay'] ? (int) $args['delay'] : null; /** * TRIGGERS */ // reset old triggers $this->data['triggers'] = array(); // page visit triggers if ( $this->trigger_type == 'page_visit' && isset( $args['page_visit_triggers'] ) && is_array( $args['page_visit_triggers'] ) ) { foreach ( $args['page_visit_triggers'] as $trigger ) { if ( ! empty( $trigger['value'] ) ) { $this->data['triggers'][] = array( 'rule' => $trigger['rule'] == 'contains' ? 'contains' : 'match', 'value' => $trigger['value'], ); } } } // reset old url filters $this->data['url_filters'] = array(); /** * FACEBOOK */ $facebook_event_types = array( 'ViewContent', 'AddToCart', 'AddToWishlist', 'InitiateCheckout', 'AddPaymentInfo', 'Purchase', 'Lead', 'CompleteRegistration', 'Subscribe', 'CustomizeProduct', 'FindLocation', 'StartTrial', 'SubmitApplication', 'Schedule', 'Contact', 'Donate', 'CustomEvent' ); // enabled $this->data['facebook_enabled'] = isset( $args['facebook_enabled'] ) && $args['facebook_enabled'] ? true : false; // event type $this->data['facebook_event_type'] = isset( $args['facebook_event_type'] ) && in_array( $args['facebook_event_type'], $facebook_event_types ) ? sanitize_text_field( $args['facebook_event_type'] ) : 'ViewContent'; // custom event type $this->data['facebook_custom_event_type'] = $this->facebook_event_type == 'CustomEvent' && ! empty( $args['facebook_custom_event_type'] ) ? sanitizeKey( $args['facebook_custom_event_type'] ) : null; // params enabled $this->data['facebook_params_enabled'] = isset( $args['facebook_params_enabled'] ) && $args['facebook_params_enabled'] ? true : false; // params if ( $this->facebook_params_enabled && isset( $args['facebook_params'] ) && $this->facebook_event_type !== 'CustomEvent' ) { $this->data['facebook_params'] = array( 'value' => ! empty( $args['facebook_params']['value'] ) ? sanitize_text_field( $args['facebook_params']['value'] ) : null, 'currency' => ! empty( $args['facebook_params']['currency'] ) ? sanitize_text_field( $args['facebook_params']['currency'] ) : null, 'content_name' => ! empty( $args['facebook_params']['content_name'] ) ? sanitize_text_field( $args['facebook_params']['content_name'] ) : null, 'content_ids' => ! empty( $args['facebook_params']['content_ids'] ) ? sanitize_text_field( $args['facebook_params']['content_ids'] ) : null, 'content_type' => ! empty( $args['facebook_params']['content_type'] ) ? sanitize_text_field( $args['facebook_params']['content_type'] ) : null, 'content_category' => ! empty( $args['facebook_params']['content_category'] ) ? sanitize_text_field( $args['facebook_params']['content_category'] ) : null, 'num_items' => ! empty( $args['facebook_params']['num_items'] ) ? (int) $args['facebook_params']['num_items'] : null, 'order_id' => ! empty( $args['facebook_params']['order_id'] ) ? sanitize_text_field( $args['facebook_params']['order_id'] ) : null, 'search_string' => ! empty( $args['facebook_params']['search_string'] ) ? sanitize_text_field( $args['facebook_params']['search_string'] ) : null, 'status' => ! empty( $args['facebook_params']['status'] ) ? sanitize_text_field( $args['facebook_params']['status'] ) : null, 'predicted_ltv' => ! empty( $args['facebook_params']['predicted_ltv'] ) ? sanitize_text_field( $args['facebook_params']['predicted_ltv'] ) : null, ); // custom currency if ( $this->data['facebook_params']['currency'] == 'custom' && ! empty( $args['facebook_params']['custom_currency'] )) { $this->data['facebook_params']['custom_currency'] = sanitize_text_field( $args['facebook_params']['custom_currency'] ); } else { $this->data['facebook_params']['custom_currency'] = null; } } else { $this->data['facebook_params'] = array( 'value' => null, 'currency' => null, 'custom_currency' => null, 'content_name' => null, 'content_ids' => null, 'content_type' => null, 'content_category' => null, 'num_items' => null, 'order_id' => null, 'search_string' => null, 'status' => null, 'predicted_ltv' => null, ); } // reset old custom params $this->data['facebook_custom_params'] = array(); // custom params if ( $this->facebook_params_enabled && isset( $args['facebook_custom_params'] ) ) { foreach ( $args['facebook_custom_params'] as $custom_param ) { if ( ! empty( $custom_param['name'] ) && ! empty( $custom_param['value'] ) ) { $this->data['facebook_custom_params'][] = array( 'name' => sanitize_text_field( $custom_param['name'] ), 'value' => sanitize_text_field( $custom_param['value'] ), ); } } } /** * PINTEREST */ $pinterest_event_types = array( 'pagevisit', 'viewcategory', 'search', 'addtocart', 'checkout', 'watchvideo', 'signup', 'lead', 'custom', 'CustomEvent', ); // enabled $this->data['pinterest_enabled'] = isset( $args['pinterest_enabled'] ) && $args['pinterest_enabled'] ? true : false; // event type $this->data['pinterest_event_type'] = isset( $args['pinterest_event_type'] ) && in_array( $args['pinterest_event_type'], $pinterest_event_types ) ? sanitize_text_field( $args['pinterest_event_type'] ) : 'pagevisit'; // custom event type $this->data['pinterest_custom_event_type'] = $this->pinterest_event_type == 'CustomEvent' && ! empty( $args['pinterest_custom_event_type'] ) ? sanitizeKey( $args['pinterest_custom_event_type'] ) : null; // params enabled $this->data['pinterest_params_enabled'] = isset( $args['pinterest_params_enabled'] ) && $args['pinterest_params_enabled'] ? true : false; // reset old custom params $this->data['pinterest_custom_params'] = array(); // custom params if ( $this->pinterest_params_enabled && isset( $args['pinterest_custom_params'] ) ) { foreach ( $args['pinterest_custom_params'] as $custom_param ) { if ( ! empty( $custom_param['name'] ) && ! empty( $custom_param['value'] ) ) { $this->data['pinterest_custom_params'][] = array( 'name' => sanitize_text_field( $custom_param['name'] ), 'value' => sanitize_text_field( $custom_param['value'] ), ); } } } /** * GOOGLE ANALYTICS */ $this->updateGA($args); /** * BING */ $this->data['bing_enabled'] = isset($args['bing_enabled']) && $args['bing_enabled'] ? true : false; $this->data['bing_event_action'] = !empty($args['bing_event_action']) ? sanitize_text_field($args['bing_event_action']) : null; $this->data['bing_event_category'] = !empty($args['bing_event_category']) ? sanitize_text_field($args['bing_event_category']) : null; $this->data['bing_event_label'] = !empty($args['bing_event_label']) ? sanitize_text_field($args['bing_event_label']) : null; $this->data['bing_event_value'] = !empty($args['bing_event_value']) ? sanitize_text_field($args['bing_event_value']) : null; update_post_meta( $this->post_id, '_pys_event_data', $this->data ); } public function enable() { $this->enabled = true; update_post_meta( $this->post_id, '_pys_event_state', 'active' ); } public function disable() { $this->enabled = false; update_post_meta( $this->post_id, '_pys_event_state', 'paused' ); } /** * @return int */ public function getPostId() { return $this->post_id; } /** * @return string */ public function getTitle() { return $this->title; } public function isEnabled() { return $this->enabled; } public function getTriggerType() { return $this->trigger_type; } public function getDelay() { return $this->delay; } /** * @return array */ public function getPageVisitTriggers() { return $this->trigger_type == 'page_visit' ? $this->triggers : array(); } public function isFacebookEnabled() { return (bool) $this->facebook_enabled; } public function getFacebookEventType() { return $this->facebook_event_type == 'CustomEvent' ? $this->facebook_custom_event_type : $this->facebook_event_type; } public function isFacebookParamsEnabled() { return (bool) $this->facebook_params_enabled; } public function getFacebookParam( $key ) { return isset( $this->facebook_params[ $key ] ) ? $this->facebook_params[ $key ] : null; } public function getFacebookParams() { return $this->facebook_params_enabled ? $this->facebook_params : array(); } public function getFacebookCustomParams() { return $this->facebook_params_enabled ? $this->facebook_custom_params : array(); } public function isPinterestEnabled() { return (bool) $this->pinterest_enabled; } public function getPinterestEventType() { return $this->pinterest_event_type == 'CustomEvent' ? $this->pinterest_custom_event_type : $this->pinterest_event_type; } public function isPinterestParamsEnabled() { return (bool) $this->pinterest_params_enabled; } public function getPinterestCustomParams() { return $this->pinterest_params_enabled ? $this->pinterest_custom_params : array(); } public function isGoogleAnalyticsEnabled() { return (bool) $this->ga_enabled; } public function getGoogleAnalyticsAction() { return $this->ga_event_action == '_custom' || $this->ga_event_action == 'CustomEvent' ? $this->ga_custom_event_action : $this->ga_event_action; } public function isBingEnabled() { return (bool) $this->bing_enabled; } public function isGaV4() { $all = GA()->getPixelIDs(); if(count($all) == 0) { return false; } return strpos($all[0], 'G') === 0; } private function clearGa() { $this->data['ga_params'] = array(); $this->data['ga_custom_params'] = array(); $this->data['ga_event_action'] = 'CustomEvent'; $this->data['ga_custom_event_action']=null; $this->data['ga_non_interactive'] = false; // old $this->data['ga_event_category'] = null; $this->data['ga_event_label'] = null; $this->data['ga_event_value'] = null; } private function updateGA( $args) { $all = GA()->getPixelIDs(); $this->data['ga_enabled'] = count($all) > 0 && isset( $args['ga_enabled'] ) && $args['ga_enabled']; if(!$this->data['ga_enabled']) { $this->clearGa(); } else { if($this->isGaV4()) { $this->data['ga_event_action'] = isset( $args['ga_event_action'] ) ? sanitize_text_field( $args['ga_event_action'] ) : 'view_item'; $this->data['ga_custom_event_action'] = $this->ga_event_action == '_custom' || $this->ga_event_action == 'CustomEvent' && !empty( $args['ga_custom_event_action'] ) ? sanitizeKey( $args['ga_custom_event_action'] ) : null; $this->data['ga_params'] = array(); foreach ($this->GAEvents as $group) { foreach ($group as $name => $fields) { if($name == $this->data['ga_event_action']) { foreach ($fields as $field) { $this->data['ga_params'][$field] = isset($args['ga_params'][$field]) ? $args['ga_params'][$field] : ""; } break; } } } if ( isset( $args['ga_params'] ) ) { foreach ($args['ga_params'] as $key => $val) { $this->data['ga_params'][$key] = sanitize_text_field( $val ); } } // reset old custom params $this->data['ga_custom_params'] = array(); // custom params if ( isset( $args['ga_custom_params'] ) ) { foreach ( $args['ga_custom_params'] as $custom_param ) { if ( ! empty( $custom_param['name'] ) && ! empty( $custom_param['value'] ) ) { $this->data['ga_custom_params'][] = array( 'name' => sanitize_text_field( $custom_param['name'] ), 'value' => sanitize_text_field( $custom_param['value'] ), ); } } } $this->data['ga_non_interactive'] = isset( $args['ga_non_interactive'] ) && $args['ga_non_interactive'] ? true : false; } else { $ga_event_actions = array( '_custom', 'add_payment_info', 'add_to_cart', 'add_to_wishlist', 'begin_checkout', 'checkout_progress', 'generate_lead', 'login', 'purchase', 'refund', 'remove_from_cart', 'search', 'select_content', 'set_checkout_option', 'share', 'sign_up', 'view_item', 'view_item_list', 'view_promotion', 'view_search_results', ); // event action $this->data['ga_event_action'] = isset( $args['ga_event_action'] ) && in_array( $args['ga_event_action'], $ga_event_actions ) ? sanitize_text_field( $args['ga_event_action'] ) : 'view_item'; // custom event type $this->data['ga_custom_event_action'] = $this->ga_event_action == '_custom' && !empty( $args['ga_custom_event_action'] ) ? sanitizeKey( $args['ga_custom_event_action'] ) : null; $this->data['ga_event_category'] = ! empty( $args['ga_event_category'] ) ? sanitize_text_field( $args['ga_event_category'] ) : null; $this->data['ga_event_label'] = ! empty( $args['ga_event_label'] ) ? sanitize_text_field( $args['ga_event_label'] ) : null; $this->data['ga_event_value'] = ! empty( $args['ga_event_value'] ) ? sanitize_text_field( $args['ga_event_value'] ) : null; $this->data['ga_non_interactive'] = isset( $args['ga_non_interactive'] ) && $args['ga_non_interactive'] ? true : false; } } } public function getGACustomParams() { if($this->isGaV4()) { if(is_array($this->ga_custom_params)) { return $this->ga_custom_params; } return []; } $custom = array(); if($this->ga_event_category) { $custom[] = array('name'=>"event_category",'value' => $this->ga_event_category); } if($this->ga_event_value){ $custom[] = array('name'=>"value",'value' => $this->ga_event_value); } if($this->ga_event_label){ $custom[] = array('name'=>"event_label",'value' => $this->ga_event_label); } return $custom; } public function getGaParams() { if($this->isGaV4()) if(is_array($this->ga_params)) { return $this->ga_params; } else { return []; } $list = array(); foreach ($this->GAEvents as $group) { foreach ($group as $name => $fields) { if($name == $this->data['ga_event_action']) { foreach ($fields as $field) { $list[$field] = ""; } } } } return $list; } }