Current File : //var/www/prestashop/modules/ps_metrics/vendor/segmentio/analytics-php/lib/Segment.php |
<?php
namespace ps_metrics_module_v4_0_6;
if (!\function_exists('json_encode')) {
throw new \Exception('Segment needs the JSON PHP extension.');
}
require \dirname(__FILE__) . '/Segment/Client.php';
class Segment
{
private static $client;
/**
* Initializes the default client to use. Uses the socket consumer by default.
* @param string $secret your project's secret key
* @param array $options passed straight to the client
*/
public static function init($secret, $options = array())
{
self::assert($secret, "Segment::init() requires secret");
self::$client = new Segment_Client($secret, $options);
}
/**
* Tracks a user action
*
* @param array $message
* @return boolean whether the track call succeeded
*/
public static function track(array $message)
{
self::checkClient();
$event = !empty($message["event"]);
self::assert($event, "Segment::track() expects an event");
self::validate($message, "track");
return self::$client->track($message);
}
/**
* Tags traits about the user.
*
* @param array $message
* @return boolean whether the identify call succeeded
*/
public static function identify(array $message)
{
self::checkClient();
$message["type"] = "identify";
self::validate($message, "identify");
return self::$client->identify($message);
}
/**
* Tags traits about the group.
*
* @param array $message
* @return boolean whether the group call succeeded
*/
public static function group(array $message)
{
self::checkClient();
$groupId = !empty($message["groupId"]);
$userId = !empty($message["userId"]);
self::assert($groupId && $userId, "Segment::group() expects userId and groupId");
return self::$client->group($message);
}
/**
* Tracks a page view
*
* @param array $message
* @return boolean whether the page call succeeded
*/
public static function page(array $message)
{
self::checkClient();
$name = !empty($message["name"]);
self::assert($name, "Segment::page() requires userId or anonymousId");
self::validate($message, "page");
return self::$client->page($message);
}
/**
* Tracks a screen view
*
* @param array $message
* @return boolean whether the screen call succeeded
*/
public static function screen(array $message)
{
self::checkClient();
$name = !empty($message["name"]);
self::validate($message, "screen");
return self::$client->screen($message);
}
/**
* Aliases the user id from a temporary id to a permanent one
*
* @param array $from user id to alias from
* @return boolean whether the alias call succeeded
*/
public static function alias(array $message)
{
self::checkClient();
$userId = !empty($message["userId"]);
$previousId = !empty($message["previousId"]);
self::assert($userId && $previousId, "Segment::alias() requires both userId and previousId");
return self::$client->alias($message);
}
/**
* Validate common properties.
*
* @param array $msg
* @param string $type
*/
public static function validate($msg, $type)
{
$userId = !empty($msg["userId"]);
$anonId = !empty($msg["anonymousId"]);
self::assert($userId || $anonId, "Segment::{$type}() requires userId or anonymousId");
}
/**
* Flush the client
*/
public static function flush()
{
self::checkClient();
return self::$client->flush();
}
/**
* Check the client.
*
* @throws Exception
*/
private static function checkClient()
{
if (null != self::$client) {
return;
}
throw new \Exception("Analytics::init() must be called before any other tracking method.");
}
/**
* Assert `value` or throw.
*
* @param array $value
* @param string $msg
* @throws Exception
*/
private static function assert($value, $msg)
{
if (!$value) {
throw new \Exception($msg);
}
}
}