Example #1
0
 *
 *
 */
//exit('COMMENT ME TO TEST THE EXAMPLES!');
// require the autoloader class
require_once '../Autoloader.php';
// register the autoloader.
EmailOneApi_Autoloader::register();
// if using a framework that already uses an autoloading mechanism, like Yii for example,
// you can register the autoloader like:
// Yii::registerAutoloader(array('EmailOneApi_Autoloader', 'autoloader'), true);
/**
 * Notes: 
 * If SSL present on the webhost, the api can be accessed via SSL as well (https://...).
 * A self signed SSL certificate will work just fine.
 * If the EmailOne powered website doesn't use clean urls,
 * make sure your apiUrl has the index.php part of url included, i.e: 
 * http://www.emailone-powered-website.tld/api/index.php
 * 
 * Configuration components:
 * The api for the EmailOne EMA is designed to return proper etags when GET requests are made.
 * We can use this to cache the request response in order to decrease loading time therefore improving performance.
 * In this case, we will need to use a cache component that will store the responses and a file cache will do it just fine.
 * Please see EmailOneApi/Cache for a list of available cache components and their usage.
 */
// configuration object
$config = new EmailOneApi_Config(array('apiUrl' => 'http://www.emailone.net/api', 'publicKey' => 'YOUR_PUBLIC_API_KEY', 'privateKey' => 'YOUR_PRIVATE_API_KEY', 'components' => array('cache' => array('class' => 'EmailOneApi_Cache_File', 'filesPath' => dirname(__FILE__) . '/../EmailOneApi/Cache/data/cache'))));
// now inject the configuration and we are ready to make api calls
EmailOneApi_Base::setConfig($config);
// start UTC
date_default_timezone_set('UTC');
Example #2
0
 /**
  * Encodes an arbitrary variable into JSON format
  *
  * @param mixed $var any number, boolean, string, array, or object to be encoded.
  * If var is a string, it will be converted to UTF-8 format first before being encoded.
  * @return string JSON string representation of input var
  */
 public static function encode($var)
 {
     switch (gettype($var)) {
         case 'boolean':
             return $var ? 'true' : 'false';
         case 'NULL':
             return 'null';
         case 'integer':
             return (int) $var;
         case 'double':
         case 'float':
             return str_replace(',', '.', (double) $var);
             // locale-independent representation
         // locale-independent representation
         case 'string':
             $charset = 'utf-8';
             if ($config = EmailOneApi_Base::getConfig()) {
                 $charset = $config->charset;
             }
             if (($enc = strtoupper($charset)) !== 'UTF-8') {
                 $var = iconv($enc, 'UTF-8', $var);
             }
             if (function_exists('json_encode')) {
                 return json_encode($var);
             }
             // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
             $ascii = '';
             $strlen_var = strlen($var);
             /*
              * Iterate over every character in the string,
              * escaping with a slash or encoding to UTF-8 where necessary
              */
             for ($c = 0; $c < $strlen_var; ++$c) {
                 $ord_var_c = ord($var[$c]);
                 switch (true) {
                     case $ord_var_c == 0x8:
                         $ascii .= '\\b';
                         break;
                     case $ord_var_c == 0x9:
                         $ascii .= '\\t';
                         break;
                     case $ord_var_c == 0xa:
                         $ascii .= '\\n';
                         break;
                     case $ord_var_c == 0xc:
                         $ascii .= '\\f';
                         break;
                     case $ord_var_c == 0xd:
                         $ascii .= '\\r';
                         break;
                     case $ord_var_c == 0x22:
                     case $ord_var_c == 0x2f:
                     case $ord_var_c == 0x5c:
                         // double quote, slash, slosh
                         $ascii .= '\\' . $var[$c];
                         break;
                     case $ord_var_c >= 0x20 && $ord_var_c <= 0x7f:
                         // characters U-00000000 - U-0000007F (same as ASCII)
                         $ascii .= $var[$c];
                         break;
                     case ($ord_var_c & 0xe0) == 0xc0:
                         // characters U-00000080 - U-000007FF, mask 110XXXXX
                         // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
                         $c += 1;
                         $utf16 = self::utf8ToUTF16BE($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xf0) == 0xe0:
                         // characters U-00000800 - U-0000FFFF, mask 1110XXXX
                         // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]));
                         $c += 2;
                         $utf16 = self::utf8ToUTF16BE($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xf8) == 0xf0:
                         // characters U-00010000 - U-001FFFFF, mask 11110XXX
                         // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]));
                         $c += 3;
                         $utf16 = self::utf8ToUTF16BE($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xfc) == 0xf8:
                         // characters U-00200000 - U-03FFFFFF, mask 111110XX
                         // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]), ord($var[$c + 4]));
                         $c += 4;
                         $utf16 = self::utf8ToUTF16BE($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xfe) == 0xfc:
                         // characters U-04000000 - U-7FFFFFFF, mask 1111110X
                         // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]), ord($var[$c + 4]), ord($var[$c + 5]));
                         $c += 5;
                         $utf16 = self::utf8ToUTF16BE($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                 }
             }
             return '"' . $ascii . '"';
         case 'array':
             /*
              * As per JSON spec if any array key is not an integer
              * we must treat the the whole array as an object. We
              * also try to catch a sparsely populated associative
              * array with numeric keys here because some JS engines
              * will create an array with empty indexes up to
              * max_index which can cause memory issues and because
              * the keys, which may be relevant, will be remapped
              * otherwise.
              *
              * As per the ECMA and JSON specification an object may
              * have any string as a property. Unfortunately due to
              * a hole in the ECMA specification if the key is a
              * ECMA reserved word or starts with a digit the
              * parameter is only accessible using ECMAScript's
              * bracket notation.
              */
             // treat as a JSON object
             if (is_array($var) && count($var) && array_keys($var) !== range(0, sizeof($var) - 1)) {
                 return '{' . join(',', array_map(array('EmailOneApi_Json', 'nameValue'), array_keys($var), array_values($var))) . '}';
             }
             // treat it like a regular array
             return '[' . join(',', array_map(array('EmailOneApi_Json', 'encode'), $var)) . ']';
         case 'object':
             if ($var instanceof Traversable) {
                 $vars = array();
                 foreach ($var as $k => $v) {
                     $vars[$k] = $v;
                 }
             } else {
                 $vars = get_object_vars($var);
             }
             return '{' . join(',', array_map(array('EmailOneApi_Json', 'nameValue'), array_keys($vars), array_values($vars))) . '}';
         default:
             return '';
     }
 }
Example #3
0
 /**
  * Return a list of callbacks/event handlers for the given event
  * 
  * @param string $eventName
  * @return EmailOneApi_Params
  */
 public function getEventHandlers($eventName)
 {
     if (!self::$_eventHandlers instanceof EmailOneApi_Params) {
         self::$_eventHandlers = new EmailOneApi_Params(self::$_eventHandlers);
     }
     if (!self::$_eventHandlers->contains($eventName) || !self::$_eventHandlers->itemAt($eventName) instanceof EmailOneApi_Params) {
         self::$_eventHandlers->add($eventName, new EmailOneApi_Params());
     }
     return self::$_eventHandlers->itemAt($eventName);
 }