File "MixpanelPeople.php"

Full Path: /home/vantageo/public_html/cache/cache/.wp-cli/wp-content/plugins/woo-product-filter/modules/promo/models/classes/lib/Producers/MixpanelPeople.php
File size: 7.86 KB
MIME-type: text/x-php
Charset: utf-8

<?php
require_once(dirname(__FILE__) . '/MixpanelBaseProducer.php');

/**
 * Provides an API to create/update profiles on Mixpanel
 */
class Producers_MixpanelPeople extends Producers_MixpanelBaseProducer {

	/**
	 * Internal method to prepare a message given the message data
	 *
	 * @param $distinct_id
	 * @param $operation
	 * @param $value
	 * @param null $ip
	 * @return array
	 */
	private function _constructPayload( $distinct_id, $operation, $value, $ip = null, $ignore_time = false ) {
		$payload = array(
			'$token' => $this->_token,
			'$distinct_id' => $distinct_id,
			$operation => $value
		);
		if (null !== $ip) {
			$payload['$ip'] = $ip;
		}
		if (true === $ignore_time) {
			$payload['$ignore_time'] = true;
		}
		return $payload;
	}

	/**
	 * Set properties on a user record. If the profile does not exist, it creates it with these properties.
	 * If it does exist, it sets the properties to these values, overwriting existing values.
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param array $props associative array of properties to set on the profile
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function set( $distinct_id, $props, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$set', $props, $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Set properties on a user record. If the profile does not exist, it creates it with these properties.
	 * If it does exist, it sets the properties to these values but WILL NOT overwrite existing values.
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param array $props associative array of properties to set on the profile
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function setOnce( $distinct_id, $props, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$set_once', $props, $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Unset properties on a user record. If the profile does not exist, it creates it with no properties.
	 * If it does exist, it unsets these properties. NOTE: In other libraries we use 'unset' which is
	 * a reserved word in PHP.
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param array $props associative array of properties to unset on the profile
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function remove( $distinct_id, $props, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$unset', $props, $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Increments the value of a property on a user record. If the profile does not exist, it creates it and sets the
	 * property to the increment value.
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param $prop string the property to increment
	 * @param int $val the amount to increment the property by
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function increment( $distinct_id, $prop, $val, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$add', array("$prop" => $val), $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Adds $val to a list located at $prop. If the property does not exist, it will be created. If $val is a string
	 * and the list is empty or does not exist, a new list with one value will be created.
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param string $prop the property that holds the list
	 * @param string|array $val items to add to the list
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function append( $distinct_id, $prop, $val, $ip = null, $ignore_time = false ) {
		$operation = gettype($val) == 'array' ? '$union' : '$append';
		$payload = $this->_constructPayload($distinct_id, $operation, array("$prop" => $val), $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Adds a transaction to the user's profile for revenue tracking
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param string $amount the transaction amount e.g. "20.50"
	 * @param null $timestamp the timestamp of when the transaction occurred (default to current timestamp)
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function trackCharge( $distinct_id, $amount, $timestamp = null, $ip = null, $ignore_time = false ) {
		$timestamp = null == $timestamp ? time() : $timestamp;
		$date_iso = gmdate('c', $timestamp);
		$transaction = array(
			'$time' => $date_iso,
			'$amount' => $amount
		);
		$val = array('$transactions' => $transaction);
		$payload = $this->_constructPayload($distinct_id, '$append', $val, $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Clear all transactions stored on a user's profile
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function clearCharges( $distinct_id, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$set', array('$transactions' => array()), $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Delete this profile from Mixpanel
	 *
	 * @param string|int $distinct_id the distinct_id or alias of a user
	 * @param string|null $ip the ip address of the client (used for geo-location)
	 * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
	 */
	public function deleteUser( $distinct_id, $ip = null, $ignore_time = false ) {
		$payload = $this->_constructPayload($distinct_id, '$delete', '', $ip, $ignore_time);
		$this->enqueue($payload);
	}

	/**
	 * Returns the "engage" endpoint
	 *
	 * @return string
	 */
	public function _getEndpoint() {
		return $this->_options['people_endpoint'];
	}
}