core/PixelRenderer.php (52 lines of code) (raw):
<?php
/*
* Copyright (C) 2017-present, Meta, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
/**
* @package FacebookPixelPlugin
*/
namespace FacebookPixelPlugin\Core;
use ReflectionClass;
use FacebookAds\Object\ServerSide\CustomData;
defined('ABSPATH') or die('Direct access not allowed');
class PixelRenderer {
const EVENT_ID = 'eventID';
const TRACK = 'track';
const TRACK_CUSTOM = 'trackCustom';
const FB_INTEGRATION_TRACKING = 'fb_integration_tracking';
const SCRIPT_TAG = "<script type='text/javascript'>%s</script>";
const FBQ_EVENT_CODE = "
fbq('%s', '%s', %s, %s);
";
const FBQ_AGENT_CODE = "
fbq('set', 'agent', '%s', '%s');";
public static function render($events, $fb_integration_tracking,
$script_tag = true) {
if (empty($events)) {
return "";
}
// The first line of the injected script will set the agent
// for all the events passed in $events
$code = sprintf(
self::FBQ_AGENT_CODE,
FacebookWordpressOptions::getAgentString(),
FacebookWordpressOptions::getPixelId()
);
foreach ($events as $event) {
$code .= self::getPixelTrackCode($event, $fb_integration_tracking);
}
return $script_tag ? sprintf(self::SCRIPT_TAG, $code) : $code;
}
private static function getPixelTrackCode($event, $fb_integration_tracking) {
$event_data[self::EVENT_ID] = $event->getEventId();
$custom_data = $event->getCustomData() !== null ?
$event->getCustomData() :
new CustomData();
$normalized_custom_data = $custom_data->normalize();
if (!is_null($fb_integration_tracking)) {
$normalized_custom_data[
self::FB_INTEGRATION_TRACKING] = $fb_integration_tracking;
}
$class = new ReflectionClass('FacebookPixelPlugin\Core\FacebookPixel');
return sprintf(
self::FBQ_EVENT_CODE,
$class->getConstant(strtoupper($event->getEventName())) !== false
? self::TRACK : self::TRACK_CUSTOM,
$event->getEventName(),
json_encode($normalized_custom_data, JSON_PRETTY_PRINT),
json_encode($event_data, JSON_PRETTY_PRINT)
);
}
}