Sindbad~EG File Manager
<?php
namespace PixelYourSite;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/** @noinspection PhpIncludeInspection */
require_once PYS_FREE_PATH . '/modules/facebook/function-helpers.php';
require_once PYS_FREE_PATH . '/modules/facebook/FDPEvent.php';
use PixelYourSite\Facebook\Helpers;
use PYS_PRO_GLOBAL\FacebookAds\Api;
use PYS_PRO_GLOBAL\FacebookAds\Object\ServerSide\EventRequest;
class Facebook extends Settings implements Pixel {
private static $_instance;
private $configured;
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
public function __construct() {
parent::__construct( 'facebook' );
$this->locateOptions(
PYS_FREE_PATH . '/modules/facebook/options_fields.json',
PYS_FREE_PATH . '/modules/facebook/options_defaults.json'
);
add_action( 'pys_register_pixels', function( $core ) {
/** @var PYS $core */
$core->registerPixel( $this );
} );
add_filter('pys_facebook_settings_sanitize_verify_meta_tag_field', array($this, 'sanitize_verify_meta_tag_field'));
add_action( 'wp_head', array( $this, 'output_meta_tag' ) );
}
public function enabled() {
return $this->getOption( 'enabled' );
}
public function configured() {
if ( $this->configured === null ) {
$pixel_id = $this->getPixelIDs();
$this->configured = $this->enabled()
&& count( $pixel_id ) > 0
&& !empty($pixel_id[0]);
}
return $this->configured;
}
public function getPixelIDs() {
$ids = (array) $this->getOption( 'pixel_id' );
if(count($ids) == 0|| empty($ids[0])) {
return apply_filters("pys_facebook_ids",[]);
} else {
$id = array_shift($ids);
return apply_filters("pys_facebook_ids", array($id)); // return first id only
}
}
public function getPixelOptions() {
return array(
'pixelIds' => $this->getPixelIDs(),
'advancedMatching' => $this->getOption( 'advanced_matching_enabled' ) ? Helpers\getAdvancedMatchingParams() : array(),
'advancedMatchingEnabled' => $this->getOption( 'advanced_matching_enabled' ),
'removeMetadata' => $this->getOption( 'remove_metadata' ),
'contentParams' => getTheContentParams(),
'commentEventEnabled' => $this->getOption( 'comment_event_enabled' ),
'wooVariableAsSimple' => $this->getOption( 'woo_variable_as_simple' ),
'downloadEnabled' => $this->getOption( 'download_event_enabled' ),
'formEventEnabled' => $this->getOption( 'form_event_enabled' ),
'serverApiEnabled' => $this->isServerApiEnabled() && count( $this->getApiToken() ) > 0,
'wooCRSendFromServer' => $this->getOption( "woo_complete_registration_send_from_server" ) && $this->getOption( "woo_complete_registration_fire_every_time" ),
'send_external_id' => $this->getOption( 'send_external_id' ),
'enabled_medical' => $this->getOption( 'enabled_medical' ),
'do_not_track_medical_param' => $this->getOption( 'do_not_track_medical_param' ),
'meta_ldu' => $this->getLDUMode(),
);
}
public function updateOptions( $values = null ) {
if(isset($_POST['pys'][$this->getSlug()]['test_api_event_code']))
{
$api_event_code_expiration_at = array();
foreach ($_POST['pys'][$this->getSlug()]['test_api_event_code'] as $key => $test_api)
{
if(!empty($test_api) && empty($this->getOption('test_api_event_code_expiration_at')[$key]))
{
$api_event_code_expiration_at[] = time() + $this->convertTimeToSeconds();
}
elseif (!empty($this->getOption('test_api_event_code_expiration_at')[$key]))
{
$api_event_code_expiration_at[] = $this->getOption('test_api_event_code_expiration_at')[$key];
}
}
$_POST['pys'][$this->getSlug()]['test_api_event_code_expiration_at'] = $api_event_code_expiration_at;
}
parent::updateOptions($values);
}
/**
* Create pixel event and fill it
* @param SingleEvent $event
* @return SingleEvent[]
*/
public function generateEvents($event) {
$pixelEvents = [];
if ( ! $this->configured() ) {
return [];
}
$pixelIds = $this->getPixelIDs();
if(count($pixelIds) > 0) {
$pixelEvent = clone $event;
if($this->addParamsToEvent($pixelEvent)) {
$pixelEvent->addPayload([
'pixelIds' => $pixelIds,
'eventID' => EventIdGenerator::guidv4()
]);
$pixelEvents[] = $pixelEvent;
}
}
return $pixelEvents;
}
// need refactoring
private function addDataToEvent($eventData,&$event) {
$params = $eventData["data"];
unset($eventData["data"]);
//unset($eventData["name"]);
$event->addParams($params);
$event->addPayload($eventData);
}
/**
* @param SingleEvent $event
* @return bool|mixed|null
*/
function addParamsToEvent(&$event) {
if ( ! $this->configured() ) {
return false;
}
$isActive = false;
switch ($event->getId()) {
//Automatic events
case 'automatic_event_signup' : {
if(isWooCommerceActive() && Facebook()->getOption("woo_complete_registration_fire_every_time")) {
$isActive = false;
} else {
$event->addPayload(["name" => "CompleteRegistration"]);
$isActive = $this->getOption($event->getId().'_enabled');
}
} break;
case 'automatic_event_login' :{
$event->addPayload(["name" => "Login"]);
$isActive = $this->getOption($event->getId().'_enabled');
} break;
case 'automatic_event_search' :{
$event->addPayload(["name" => "Search"]);
if(!empty( $_GET['s'] )) {
$event->addParams(["search_string" => $_GET['s']]);
}
$isActive = $this->getOption($event->getId().'_enabled');
} break;
case 'automatic_event_form' :
case 'automatic_event_download' :
case 'automatic_event_comment' :
case 'automatic_event_scroll' :
case 'automatic_event_time_on_page' : {
$isActive = $this->getOption($event->getId().'_enabled');
}break;
case 'init_event':{
$eventData = $this->getPageViewEventParams();
if($eventData) {
$isActive = true;
$event->addPayload( [ "ajaxFire" => !Consent()->checkConsent( 'facebook' ) ] );
$this->addDataToEvent($eventData,$event);
}
} break;
case 'custom_event':{
$eventData = $this->getCustomEventParams( $event->args );
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'fdp_view_content':{
if($this->getOption("fdp_view_content_enabled")){
$params = Helpers\getFDPViewContentEventParams();
$params["content_type"] = $this->getOption("fdp_content_type");
$payload = array(
'name' => "ViewContent",
);
$event->addParams($params);
$event->addPayload($payload);
$isActive = true;
}
}break;
case 'fdp_view_category':{
if($this->getOption("fdp_view_category_enabled")){
$params = Helpers\getFDPViewCategoryEventParams();
$params["content_type"] = $this->getOption("fdp_content_type");
$payload = array(
'name' => "ViewCategory",
);
$event->addParams($params);
$event->addPayload($payload);
$isActive = true;
}
}break;
case 'fdp_add_to_cart':{
if($this->getOption("fdp_add_to_cart_enabled")){
$params = Helpers\getFDPAddToCartEventParams();
$params["content_type"] = $this->getOption("fdp_content_type");
$params["value"] = $this->getOption("fdp_add_to_cart_value");
$params["currency"] = $this->getOption("fdp_currency");
$trigger_type = $this->getOption("fdp_add_to_cart_event_fire");
$trigger_value = $trigger_type == "scroll_pos" ?
$this->getOption("fdp_add_to_cart_event_fire_scroll") :
$this->getOption("fdp_add_to_cart_event_fire_css") ;
$payload = array(
'name' => "AddToCart",
'trigger_type' => $trigger_type,
'trigger_value' => [$trigger_value]
);
$event->addParams($params);
$event->addPayload($payload);
$isActive = true;
}
}break;
case 'fdp_purchase':{
if($this->getOption("fdp_view_category_enabled")){
$params = Helpers\getFDPPurchaseEventParams();
$params["content_type"] = $this->getOption("fdp_content_type");
$params["value"] = $this->getOption("fdp_purchase_value");
$params["currency"] = $this->getOption("fdp_currency");
$trigger_type = $this->getOption("fdp_purchase_event_fire");
$trigger_value = $trigger_type == "scroll_pos" ?
$this->getOption("fdp_purchase_event_fire_scroll") :
$this->getOption("fdp_purchase_event_fire_css");
$payload = array(
'name' => "Purchase",
'trigger_type' => $trigger_type,
'trigger_value' => [$trigger_value]
);
$event->addParams($params);
$event->addPayload($payload);
$isActive = true;
}
}break;
case 'woo_view_content': {
$eventData = $this->getWooViewContentEventParams();
if($eventData) {
$isActive = true;
$this->addDataToEvent($eventData,$event);
}
}break;
case 'woo_add_to_cart_on_cart_page':
case 'woo_add_to_cart_on_checkout_page': {
$eventData = $this->getWooAddToCartOnCartEventParams();
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'woo_remove_from_cart': {
$isActive = $this->getWooRemoveFromCartParams( $event);
}break;
case 'woo_view_category':{
$eventData = $this->getWooViewCategoryEventParams();
if($eventData) {
$isActive = true;
$this->addDataToEvent($eventData,$event);
}
}break;
case 'woo_initiate_checkout': {
$eventData = $this->getWooInitiateCheckoutEventParams();
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'woo_purchase':{
$eventData = $this->getWooPurchaseEventParams();
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'edd_view_content':{
$eventData = $this->getEddViewContentEventParams();
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
} break;
case 'edd_add_to_cart_on_checkout_page': {
$eventData = $this->getEddCartEventParams('AddToCart');
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'edd_remove_from_cart': {
$eventData = $this->getEddRemoveFromCartParams( $event->args['item'] );
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'edd_view_category': {
$eventData = $this->getEddViewCategoryEventParams();
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'edd_initiate_checkout': {
$eventData = $this->getEddCartEventParams('InitiateCheckout');
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'edd_purchase': {
$eventData = $this->getEddCartEventParams('Purchase');
if ($eventData) {
$isActive = true;
$this->addDataToEvent($eventData, $event);
}
}break;
case 'woo_complete_registration': {
if( $this->getOption("woo_complete_registration_fire_every_time") ||
get_user_meta( get_current_user_id(), 'pys_complete_registration', true )
) {
$eventData = $this->getWooCompleteRegistrationEventParams();
if($eventData) {
$isActive = true;
$this->addDataToEvent($eventData,$event);
}
}
}break;
case 'woo_add_to_cart_on_button_click':{
if ( $this->getOption( 'woo_add_to_cart_enabled' ) && PYS()->getOption( 'woo_add_to_cart_on_button_click' ) ) {
$isActive = true;
if(isset($event->args['productId'])) {
$eventData = $this->getWooAddToCartOnButtonClickEventParams( $event->args );
$event->addParams($eventData["params"]);
if($eventData) {
$event->addParams($eventData["params"]);
unset($eventData["params"]);
$event->addPayload($eventData);
}
}
$event->addPayload(array(
'name'=>"AddToCart",
));
}
}break;
case 'edd_add_to_cart_on_button_click':{
if ( $this->getOption( 'edd_add_to_cart_enabled' ) && PYS()->getOption( 'edd_add_to_cart_on_button_click' ) ) {
$isActive = true;
if($event->args != null) {
$eventData = $this->getEddAddToCartOnButtonClickEventParams( $event->args );
$event->addParams($eventData);
}
$event->addPayload(array(
'name'=>"AddToCart"
));
}
}break;
}
return $isActive;
}
public function getEventData( $eventType, $args = null ) {
return false;
}
public function outputNoScriptEvents() {
if ( ! $this->configured() || $this->getOption('disable_noscript')) {
return;
}
$ldu = $this->getLDUMode();
$eventsManager = PYS()->getEventsManager();
foreach ( $eventsManager->getStaticEvents( 'facebook' ) as $eventId => $events ) {
foreach ( $events as $event ) {
if( $event['name'] == "hCR") continue;
foreach ( $this->getPixelIDs() as $pixelID ) {
$args = array(
'id' => $pixelID,
'ev' => urlencode( $event['name'] ),
'noscript' => 1,
);
$params = $event[ 'params' ];
if ( $ldu ) {
$params = array_merge( $params, array(
'vdpo' => 'LDU',
'dpoco' => 0,
'dpost' => 0
) );
}
foreach ( $params as $param => $value ) {
if(is_array($value))
$value = json_encode($value);
@$args[ 'cd[' . $param . ']' ] = urlencode( $value );
}
$src = add_query_arg( $args, 'https://www.facebook.com/tr' );
$src = str_replace("[","%5B",$src); //pass markup validation
$src = str_replace("]","%5D",$src);
// ALT tag used to pass ADA compliance
printf( '<noscript><img height="1" width="1" style="display: none;" src="%s" alt=""></noscript>',
$src);
echo "\r\n";
}
}
}
}
private function getPageViewEventParams() {
$data = array();
$cpt = get_post_type();
if(!$cpt) return false;
return array(
'name' => 'PageView',
'data' => $data,
);
}
private function getGeneralEventParams() {
if ( ! $this->getOption( 'general_event_enabled' ) ) {
return false;
}
$eventName = PYS()->getOption( 'general_event_name' );
$eventName = sanitizeKey( $eventName );
if ( empty( $eventName ) ) {
$eventName = 'GeneralEvent';
}
$allowedContentTypes = array(
'on_posts_enabled' => PYS()->getOption( 'general_event_on_posts_enabled' ),
'on_pages_enables' => PYS()->getOption( 'general_event_on_pages_enabled' ),
'on_taxonomies_enabled' => PYS()->getOption( 'general_event_on_tax_enabled' ),
'on_cpt_enabled' => PYS()->getOption( 'general_event_on_' . get_post_type() . '_enabled', false ),
'on_woo_enabled' => PYS()->getOption( 'general_event_on_woo_enabled' ),
'on_edd_enabled' => PYS()->getOption( 'general_event_on_edd_enabled' ),
);
$params = getTheContentParams( $allowedContentTypes );
return array(
'name' => $eventName,
'data' => $params,
'delay' => (int) PYS()->getOption( 'general_event_delay' ),
);
}
public function getFDPEvents() {
$events = array();
$contentType = $this->getOption("fdp_content_type");
if($this->getOption("fdp_view_content_enabled")) {
$event = new FDPEvent();
$event->event_name = "fdp_view_content";
$event->content_type = $contentType;
$events[] = $event;
}
if($this->getOption("fdp_view_category_enabled")) {
$event = new FDPEvent();
$event->event_name = "fdp_view_category";
$event->content_type = $contentType;
$events[] = $event;
}
if($this->getOption("fdp_add_to_cart_enabled")) {
$event = new FDPEvent();
$event->event_name = "fdp_add_to_cart";
$event->content_type = $contentType;
$event->trigger_type = "scroll_pos";
$event->trigger_value = $this->getOption("fdp_add_to_cart_event_fire_scroll");
$events[] = $event;
}
if($this->getOption("fdp_purchase_enabled")) {
$event = new FDPEvent();
$event->event_name = "fdp_purchase";
$event->content_type = $contentType;
$event->trigger_type = $this->getOption("fdp_purchase_event_fire");
if($event->trigger_type == "scroll_pos") {
$event->trigger_value = $this->getOption("fdp_purchase_event_fire_scroll");
}
if($event->trigger_type == "css_click") {
$event->trigger_value = $this->getOption("fdp_purchase_event_fire_css");
}
$events[] = $event;
}
return $events;
}
/**
* @param FDPEvent $event
* @return array
*/
private function getFDPEventParams($event){
$name = "";
$params = "";
if($event->event_name == "fdp_view_content") {
$name = "ViewContent";
$params = Helpers\getFDPViewContentEventParams();
}
if($event->event_name == "fdp_view_category") {
$name = "ViewCategory";
$params = Helpers\getFDPViewCategoryEventParams();
}
if($event->event_name == "fdp_add_to_cart") {
$name = "AddToCart";
$params = Helpers\getFDPAddToCartEventParams();
$params["value"] = $this->getOption("fdp_add_to_cart_value");
$params["currency"] = $this->getOption("fdp_currency");
}
if($event->event_name == "fdp_purchase") {
$name = "Purchase";
$params = Helpers\getFDPPurchaseEventParams();
$params["value"] = $this->getOption("fdp_purchase_value");
$params["currency"] = $this->getOption("fdp_currency");
}
if($event->content_type) {
$params["content_type"] = $event->content_type;
}
return array(
'name' => $name,
'data' => $params,
'delay' => 0,
);
}
private function getWooViewContentEventParams() {
global $post;
if ( ! $this->getOption( 'woo_view_content_enabled' ) ) {
return false;
}
$params = array();
$product = wc_get_product( $post->ID );
if(!$product) return false;
$content_id = Helpers\getFacebookWooProductContentId( $post->ID );
$params['content_ids'] = $content_id ;
if ( wooProductIsType( $product, 'variable' ) && ! $this->getOption( 'woo_variable_as_simple' ) ) {
$params['content_type'] = 'product_group';
} else {
$params['content_type'] = 'product';
}
// Facebook for WooCommerce plugin integration
if ( ! Helpers\isDefaultWooContentIdLogic() && wooProductIsType( $product, 'variable' ) ) {
$params['content_type'] = 'product_group';
}
// content_name, category_name, tags
$params['tags'] = implode( ', ', getObjectTerms( 'product_tag', $post->ID ) );
$params = array_merge( $params, Helpers\getWooCustomAudiencesOptimizationParams( $post->ID ) );
// currency, value
if ( PYS()->getOption( 'woo_view_content_value_enabled' ) ) {
$value_option = PYS()->getOption( 'woo_view_content_value_option' );
$global_value = PYS()->getOption( 'woo_view_content_value_global', 0 );
$params['value'] = getWooEventValue( $value_option, $global_value,100, $post->ID ,1);
$params['currency'] = get_woocommerce_currency();
}
// contents
if ( Helpers\isDefaultWooContentIdLogic() ) {
// Facebook for WooCommerce plugin does not support new Dynamic Ads parameters
$params['contents'] = array(
array(
'id' => (string) reset( $content_id ),
'quantity' => 1,
//'item_price' => getWooProductPriceToDisplay( $post->ID ),
)
);
}
$params['product_price'] = getWooProductPriceToDisplay( $post->ID );
return array(
'name' => 'ViewContent',
'data' => $params,
'delay' => (int) PYS()->getOption( 'woo_view_content_delay' ),
);
}
private function getWooAddToCartOnButtonClickEventParams( $args ) {
if ( ! $this->getOption( 'woo_add_to_cart_enabled' ) || ! PYS()->getOption( 'woo_add_to_cart_on_button_click' ) ) {
return false;
}
$product_id = $args['productId'];
$quantity = $args['quantity'];
$params = Helpers\getWooSingleAddToCartParams( $product_id, $quantity );
$data = array(
'params' => $params,
);
$product = wc_get_product($product_id);
if(!$product) return false;
if($product->get_type() == 'grouped') {
$grouped = array();
foreach ($product->get_children() as $childId) {
$conId = Helpers\getFacebookWooProductContentId( $childId );
$grouped[$childId] = array(
'content_id' => (string) reset($conId),
'price' => getWooProductPriceToDisplay( $childId )
);
}
$data['grouped'] = $grouped;
}
return $data;
}
private function getWooAddToCartOnCartEventParams() {
if ( ! $this->getOption( 'woo_add_to_cart_enabled' ) ) {
return false;
}
$params = Helpers\getWooCartParams();
return array(
'name' => 'AddToCart',
'data' => $params,
);
}
/**
* @param SingleEvent $event
* @return bool
*/
private function getWooRemoveFromCartParams( $event ) {
if ( ! $this->getOption( 'woo_remove_from_cart_enabled' ) ) {
return false;
}
$cart_item = $event->args['item'];
$product_id = Helpers\getFacebookWooCartItemId( $cart_item );
$content_id = Helpers\getFacebookWooProductContentId( $product_id );
$params['content_type'] = 'product';
$params['content_ids'] = $content_id ;
// content_name, category_name, tags
$params['tags'] = implode( ', ', getObjectTerms( 'product_tag', $product_id ) );
$params = array_merge( $params, Helpers\getWooCustomAudiencesOptimizationParams( $product_id ) );
$params['num_items'] = $cart_item['quantity'];
$params['product_price'] = getWooProductPriceToDisplay( $product_id );
$params['contents'] = array(
array(
'id' => (string) reset( $content_id ),
'quantity' => $cart_item['quantity'],
//'item_price' => getWooProductPriceToDisplay( $product_id ),
)
) ;
$data = [
'name' => "RemoveFromCart",
];
$event->addParams($params);
$event->addPayload($data);
return true;
}
private function getWooViewCategoryEventParams() {
global $posts;
if ( ! $this->getOption( 'woo_view_category_enabled' ) ) {
return false;
}
if ( Helpers\isDefaultWooContentIdLogic() ) {
$params['content_type'] = 'product';
} else {
$params['content_type'] = 'product_group';
}
$params['content_category'] = array();
$term = get_term_by( 'slug', get_query_var( 'term' ), 'product_cat' );
if ( $term ) {
$params['content_name'] = $term->name;
$parent_ids = get_ancestors( $term->term_id, 'product_cat', 'taxonomy' );
foreach ( $parent_ids as $term_id ) {
$term = get_term_by( 'id', $term_id, 'product_cat' );
if($term) {
$params['content_category'][] = $term->name;
}
}
}
$params['content_category'] = implode( ', ', $params['content_category'] );
$content_ids = array();
$limit = min( count( $posts ), 5 );
for ( $i = 0; $i < $limit; $i ++ ) {
$content_ids = array_merge( Helpers\getFacebookWooProductContentId( $posts[ $i ]->ID ), $content_ids );
}
$params['content_ids'] = $content_ids ;
return array(
'name' => 'ViewCategory',
'data' => $params,
);
}
private function getWooInitiateCheckoutEventParams() {
if ( ! $this->getOption( 'woo_initiate_checkout_enabled' ) ) {
return false;
}
$params = Helpers\getWooCartParams( 'InitiateCheckout' );
return array(
'name' => 'InitiateCheckout',
'data' => $params,
);
}
private function getWooPurchaseEventParams() {
if ( ! $this->getOption( 'woo_purchase_enabled' ) ) {
return false;
}
$order_key = sanitize_key($_REQUEST['key']);
$cache_key = 'order_id_' . $order_key;
$order_id = get_transient( $cache_key );
global $wp;
if (PYS()->woo_is_order_received_page() && empty($order_id) && $wp->query_vars['order-received']) {
$order_id = absint( $wp->query_vars['order-received'] );
if ($order_id) {
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
}
if ( empty($order_id) ) {
$order_id = (int) wc_get_order_id_by_order_key( $order_key );
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
$order = wc_get_order( $order_id );
if(!$order) return false;
$content_ids = array();
$content_names = array();
$content_categories = array();
$tags = array();
$num_items = 0;
$contents = array();
foreach ( $order->get_items( 'line_item' ) as $line_item ) {
$product_id = Helpers\getFacebookWooCartItemId( $line_item );
$content_id = Helpers\getFacebookWooProductContentId( $product_id );
$content_ids = array_merge( $content_ids, $content_id );
$num_items += $line_item['qty'];
// content_name, category_name, tags
$custom_audiences = Helpers\getWooCustomAudiencesOptimizationParams( $product_id );
$content_names[] = $custom_audiences['content_name'];
$content_categories[] = $custom_audiences['category_name'];
$cart_item_tags = getObjectTerms( 'product_tag', $product_id );
$tags = array_merge( $tags, $cart_item_tags );
// raw product id
$_product_id = empty( $line_item['variation_id'] ) ? $line_item['product_id']
: $line_item['variation_id'];
// contents
$contents[] = array(
'id' => (string) reset( $content_id ),
'quantity' => $line_item['qty'],
'item_price' => getWooProductPriceToDisplay( $_product_id ),
);
}
$params['content_type'] = 'product';
$params['content_ids'] = $content_ids ;
$params['content_name'] = implode( ', ', $content_names );
$params['category_name'] = implode( ', ', $content_categories );
// contents
if ( Helpers\isDefaultWooContentIdLogic() ) {
// Facebook for WooCommerce plugin does not support new Dynamic Ads parameters
$params['contents'] = $contents ;
}
$tags = array_unique( $tags );
$tags = array_slice( $tags, 0, 100 );
$params['tags'] = implode( ', ', $tags );
$params['num_items'] = $num_items;
$value_option = PYS()->getOption( 'woo_purchase_value_option' );
$global_value = PYS()->getOption( 'woo_purchase_value_global', 0 );
$params['value'] = getWooEventValueOrder( $value_option, $order, $global_value );
$params['currency'] = get_woocommerce_currency();
$params['order_id'] = $order_id;
$params['fees'] = get_fees($order);
return array(
'name' => 'Purchase',
'data' => $params,
'woo_order' => $order_id
);
}
/**
* @param CustomEvent $customEvent
*
* @return array|bool
*/
private function getCustomEventParams( $customEvent ) {
$event_type = $customEvent->getFacebookEventType();
if ( ! $customEvent->isFacebookEnabled() || empty( $event_type ) ) {
return false;
}
$params = array();
// add pixel params
if ( $customEvent->isFacebookParamsEnabled() ) {
$params = $customEvent->getFacebookParams();
// use custom currency if any
if ( ! empty( $params['custom_currency'] ) ) {
$params['currency'] = $params['custom_currency'];
unset( $params['custom_currency'] );
}
// add custom params
foreach ( $customEvent->getFacebookCustomParams() as $custom_param ) {
$params[ $custom_param['name'] ] = $custom_param['value'];
}
}
return array(
'name' => $customEvent->getFacebookEventType(),
'data' => $params,
'delay' => $customEvent->getDelay(),
);
}
private function getEddViewContentEventParams() {
global $post;
if ( ! $this->getOption( 'edd_view_content_enabled' ) ) {
return false;
}
$params = array(
'content_type' => 'product',
'content_ids' => Helpers\getFacebookEddDownloadContentId( $post->ID ) ,
);
// content_name, category_name
$params['tags'] = implode( ', ', getObjectTerms( 'download_tag', $post->ID ) );
$params = array_merge( $params, Helpers\getEddCustomAudiencesOptimizationParams( $post->ID ) );
// currency, value
if ( PYS()->getOption( 'edd_view_content_value_enabled' ) ) {
$amount = getEddDownloadPriceToDisplay( $post->ID );
$value_option = PYS()->getOption( 'edd_view_content_value_option' );
$global_value = PYS()->getOption( 'edd_view_content_value_global', 0 );
$params['value'] = getEddEventValue( $value_option, $amount, $global_value );
$params['currency'] = edd_get_currency();
}
// contents
$params['contents'] = array(
array(
'id' => (string) $post->ID,
'quantity' => 1,
//'item_price' => getEddDownloadPriceToDisplay( $post->ID ),
)
);
return array(
'name' => 'ViewContent',
'data' => $params,
'delay' => (int) PYS()->getOption( 'edd_view_content_delay' ),
);
}
private function getEddAddToCartOnButtonClickEventParams( $download_id ) {
global $post;
// maybe extract download price id
if ( strpos( $download_id, '_') !== false ) {
list( $download_id, $price_index ) = explode( '_', $download_id );
} else {
$price_index = null;
}
$params = array(
'content_type' => 'product',
'content_ids' => Helpers\getFacebookEddDownloadContentId( $download_id ),
);
// content_name, category_name
$params['tags'] = implode( ', ', getObjectTerms( 'download_tag', $download_id ) );
$params = array_merge( $params, Helpers\getEddCustomAudiencesOptimizationParams( $download_id ) );
// currency, value
if ( PYS()->getOption( 'edd_add_to_cart_value_enabled' ) ) {
$amount = getEddDownloadPriceToDisplay( $download_id, $price_index );
$value_option = PYS()->getOption( 'edd_add_to_cart_value_option' );
$global_value = PYS()->getOption( 'edd_add_to_cart_value_global', 0 );
$params['value'] = getEddEventValue( $value_option, $amount, $global_value );
$params['currency'] = edd_get_currency();
}
// contents
$params['contents'] = array(
array(
'id' => (string) $download_id,
'quantity' => 1,
//'item_price' => getEddDownloadPriceToDisplay( $download_id ),
)
);
return $params;
}
private function getEddCartEventParams( $context = 'AddToCart' ) {
if ( $context == 'AddToCart' && ! $this->getOption( 'edd_add_to_cart_enabled' ) ) {
return false;
} elseif ( $context == 'InitiateCheckout' && ! $this->getOption( 'edd_initiate_checkout_enabled' ) ) {
return false;
} elseif ( $context == 'Purchase' && ! $this->getOption( 'edd_purchase_enabled' ) ) {
return false;
}
$data = array(
'name' => $context
);
if ( $context == 'AddToCart' ) {
$value_enabled = PYS()->getOption( 'edd_add_to_cart_value_enabled' );
$value_option = PYS()->getOption( 'edd_add_to_cart_value_option' );
$global_value = PYS()->getOption( 'edd_add_to_cart_value_global', 0 );
} elseif ( $context == 'InitiateCheckout' ) {
$value_enabled = PYS()->getOption( 'edd_initiate_checkout_value_enabled' );
$value_option = PYS()->getOption( 'edd_initiate_checkout_value_option' );
$global_value = PYS()->getOption( 'edd_initiate_checkout_global', 0 );
} else {
$value_enabled = PYS()->getOption( 'edd_purchase_value_enabled' );
$value_option = PYS()->getOption( 'edd_purchase_value_option' );
$global_value = PYS()->getOption( 'edd_purchase_value_global', 0 );
}
$params = array(
'content_type' => 'product'
);
$content_ids = array();
$content_names = array();
$content_categories = array();
$tags = array();
$contents = array();
$num_items = 0;
$amount = 0;
if ( $context == 'AddToCart' || $context == 'InitiateCheckout' ) {
$cart = edd_get_cart_contents();
} else {
$cart = edd_get_payment_meta_cart_details( edd_get_purchase_id_by_key( getEddPaymentKey() ), true );
}
foreach ( $cart as $cart_item_key => $cart_item ) {
$download_id = (int) $cart_item['id'];
$content_ids[] = Helpers\getFacebookEddDownloadContentId( $download_id );
// content_name, category_name
$custom_audiences = Helpers\getEddCustomAudiencesOptimizationParams( $download_id );
$content_names[] = $custom_audiences['content_name'];
$content_categories[] = $custom_audiences['category_name'];
$tags = array_merge( $tags, getObjectTerms( 'download_tag', $download_id ) );
$num_items += $cart_item['quantity'];
if ( in_array( $context, array( 'Purchase', 'FrequentShopper', 'VipClient', 'BigWhale' ) ) ) {
$item_options = $cart_item['item_number']['options'];
} else {
$item_options = $cart_item['options'];
}
// calculate cart items total
if ( $value_enabled ) {
if ( $context == 'Purchase' ) {
$amount += $cart_item['price'];
} else {
$amount += edd_get_cart_item_final_price( $cart_item_key );
}
}
// contents
$contents[] = array(
'id' => (string) $download_id,
'quantity' => $cart_item['quantity'],
);
}
$params['content_ids'] = $content_ids ;
$params['content_name'] = implode( ', ', $content_names );
$params['category_name'] = implode( ', ', $content_categories );
$params['contents'] = $contents ;
$tags = array_slice( array_unique( $tags ), 0, 100 );
$params['tags'] = implode( ', ', $tags );
$params['num_items'] = $num_items;
// currency, value
if ( $value_enabled ) {
$params['currency'] = edd_get_currency();
$params['value'] = getEddEventValue( $value_option, $amount, $global_value );
}
if ( $context == 'Purchase' ) {
$payment_key = getEddPaymentKey();
$payment_id = (int) edd_get_purchase_id_by_key( $payment_key );
$params['value'] = edd_get_payment_amount( $payment_id );
$params['currency'] = edd_get_currency();
$data['edd_order'] = $payment_id;
}
$data['data'] = $params;
return $data;
}
private function getEddRemoveFromCartParams( $cart_item ) {
if ( ! $this->getOption( 'edd_remove_from_cart_enabled' ) ) {
return false;
}
$download_id = $cart_item['id'];
$price_index = ! empty( $cart_item['options'] ) ? $cart_item['options']['price_id'] : null;
$params = array(
'content_type' => 'product',
'content_ids' => Helpers\getFacebookEddDownloadContentId( $download_id )
);
// content_name, category_name, tags
$params['tags'] = implode( ', ', getObjectTerms( 'download_tag', $download_id ) );
$params = array_merge( $params, Helpers\getEddCustomAudiencesOptimizationParams( $download_id ) );
$params['num_items'] = $cart_item['quantity'];
$params['contents'] = array(
array(
'id' => (string) $download_id,
'quantity' => $cart_item['quantity'],
//'item_price' => getEddDownloadPriceToDisplay( $download_id, $price_index ),
)
);
return array(
'name' => 'RemoveFromCart',
'data' => $params
);
}
private function getEddViewCategoryEventParams() {
global $posts;
if ( ! $this->getOption( 'edd_view_category_enabled' ) ) {
return false;
}
$params['content_type'] = 'product';
$term = get_term_by( 'slug', get_query_var( 'term' ), 'download_category' );
if(!$term) return false;
$params['content_name'] = $term->name;
$parent_ids = get_ancestors( $term->term_id, 'download_category', 'taxonomy' );
$params['content_category'] = array();
foreach ( $parent_ids as $term_id ) {
$term = get_term_by( 'id', $term_id, 'download_category' );
if($term) {
$params['content_category'][] = $term->name;
}
}
$params['content_category'] = implode( ', ', $params['content_category'] );
$content_ids = array();
$limit = min( count( $posts ), 5 );
for ( $i = 0; $i < $limit; $i ++ ) {
$content_ids = array_merge( array( Helpers\getFacebookEddDownloadContentId( $posts[ $i ]->ID ) ),
$content_ids );
}
$params['content_ids'] = $content_ids ;
return array(
'name' => 'ViewCategory',
'data' => $params,
);
}
/**
* @return array
*/
public function getApiToken() {
$tokens = array();
$pixelids = (array) $this->getOption( 'pixel_id' );
$serverids = (array) $this->getOption( 'server_access_api_token' );
if(count($pixelids) == 0) return array();
if ( isSuperPackActive() && SuperPack()->getOption( 'enabled' ) && SuperPack()->getOption( 'additional_ids_enabled' ) ) {
foreach ($pixelids as $key => $val) {
if(isset($serverids[$key]))
$tokens[$val] = $serverids[$key];
}
} else {
$tokens[$pixelids[0]] = reset( $serverids ); // return first id only
}
return $tokens;
}
/**
* @return array
*/
public function getApiTestCode() {
$testCode = array();
$pixelids = (array) $this->getOption( 'pixel_id' );
$serverTestCode = (array) $this->getOption( 'test_api_event_code' );
if ( isSuperPackActive() && SuperPack()->getOption( 'enabled' ) && SuperPack()->getOption( 'additional_ids_enabled' ) ) {
foreach ($pixelids as $key => $val) {
if(isset($serverTestCode[$key]))
$testCode[$val] = $serverTestCode[$key];
}
} else {
$testCode[$pixelids[0]] = reset( $serverTestCode ); // return first id only
}
return $testCode;
}
/**
* @return bool
*/
public function isServerApiEnabled() {
return $this->getOption("use_server_api");
}
private function getWooCompleteRegistrationEventParams($args=null) {
if ( ! $this->getOption( 'complete_registration_event_enabled' ) ) {
return false;
}
$params = array();
if($this->getOption("woo_complete_registration_fire_every_time") &&
$this->getOption("woo_complete_registration_use_custom_value") &&
isset( $_REQUEST['key'] ) && $_REQUEST['key'] != "" ) {
$params = Helpers\getCompleteRegistrationOrderParams();
}
$name = isset($args) && $args == "hCR" ? "hCR" : 'CompleteRegistration';
return $params = array(
'name' => $name,
'data' => $params,
);
}
function output_meta_tag() {
$metaTags = (array) Facebook()->getOption( 'verify_meta_tag' );
foreach ($metaTags as $tag) {
echo $tag;
}
}
function sanitize_verify_meta_tag_field($values) {
$values = is_array( $values ) ? $values : array();
$sanitized = array();
$allowed_html = array(
'meta' => array(
'name' => array(),
'content' => array(),
),
);
foreach ( $values as $key => $value ) {
$value = wp_kses($value, $allowed_html);
$new_value = $this->sanitize_textarea_field( $value );
if ( ! empty( $new_value ) && ! in_array( $new_value, $sanitized ) ) {
$sanitized[ $key ] = $new_value;
}
}
return $sanitized;
}
public function getLDUMode() {
return apply_filters( 'pys_meta_ldu_mode', false );
}
}
/**
* @return Facebook
*/
function Facebook() {
return Facebook::instance();
}
Facebook();
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists