* * */ //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');
/** * 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 ''; } }
/** * 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); }