Changeset View
Changeset View
Standalone View
Standalone View
externals/twilio-php/Services/Twilio/Resource.php
- This file was added.
| Property | Old Value | New Value |
|---|---|---|
| File Mode | null | 100755 |
| <?php | |||||
| /** | |||||
| * Abstraction of a Twilio resource. | |||||
| * | |||||
| * @category Services | |||||
| * @package Services_Twilio | |||||
| * @author Neuman Vong <neuman@twilio.com> | |||||
| * @license http://creativecommons.org/licenses/MIT/ MIT | |||||
| * @link http://pear.php.net/package/Services_Twilio | |||||
| */ | |||||
| abstract class Services_Twilio_Resource { | |||||
| protected $subresources; | |||||
| public function __construct($client, $uri, $params = array()) | |||||
| { | |||||
| $this->subresources = array(); | |||||
| $this->client = $client; | |||||
| foreach ($params as $name => $param) { | |||||
| $this->$name = $param; | |||||
| } | |||||
| $this->uri = $uri; | |||||
| $this->init($client, $uri); | |||||
| } | |||||
| protected function init($client, $uri) | |||||
| { | |||||
| // Left empty for derived classes to implement | |||||
| } | |||||
| public function getSubresources($name = null) { | |||||
| if (isset($name)) { | |||||
| return isset($this->subresources[$name]) | |||||
| ? $this->subresources[$name] | |||||
| : null; | |||||
| } | |||||
| return $this->subresources; | |||||
| } | |||||
| protected function setupSubresources() | |||||
| { | |||||
| foreach (func_get_args() as $name) { | |||||
| $constantized = ucfirst(self::camelize($name)); | |||||
| $type = "Services_Twilio_Rest_" . $constantized; | |||||
| $this->subresources[$name] = new $type( | |||||
| $this->client, $this->uri . "/$constantized" | |||||
| ); | |||||
| } | |||||
| } | |||||
| /* | |||||
| * Get the resource name from the classname | |||||
| * | |||||
| * Ex: Services_Twilio_Rest_Accounts -> Accounts | |||||
| * | |||||
| * @param boolean $camelized Whether to return camel case or not | |||||
| */ | |||||
| public function getResourceName($camelized = false) | |||||
| { | |||||
| $name = get_class($this); | |||||
| $parts = explode('_', $name); | |||||
| $basename = end($parts); | |||||
| if ($camelized) { | |||||
| return $basename; | |||||
| } else { | |||||
| return self::decamelize($basename); | |||||
| } | |||||
| } | |||||
| public static function decamelize($word) | |||||
| { | |||||
| $callback = create_function('$matches', | |||||
| 'return strtolower(strlen("$matches[1]") ? "$matches[1]_$matches[2]" : "$matches[2]");'); | |||||
| return preg_replace_callback( | |||||
| '/(^|[a-z])([A-Z])/', | |||||
| $callback, | |||||
| $word | |||||
| ); | |||||
| } | |||||
| /** | |||||
| * Return camelized version of a word | |||||
| * Examples: sms_messages => SMSMessages, calls => Calls, | |||||
| * incoming_phone_numbers => IncomingPhoneNumbers | |||||
| * | |||||
| * @param string $word The word to camelize | |||||
| * @return string | |||||
| */ | |||||
| public static function camelize($word) { | |||||
| $callback = create_function('$matches', 'return strtoupper("$matches[2]");'); | |||||
| return preg_replace_callback('/(^|_)([a-z])/', | |||||
| $callback, | |||||
| $word); | |||||
| } | |||||
| /** | |||||
| * Get the value of a property on this resource. | |||||
| * | |||||
| * @param string $key The property name | |||||
| * @return mixed Could be anything. | |||||
| */ | |||||
| public function __get($key) { | |||||
| if ($subresource = $this->getSubresources($key)) { | |||||
| return $subresource; | |||||
| } | |||||
| return $this->$key; | |||||
| } | |||||
| /** | |||||
| * Print a JSON representation of this object. Strips the HTTP client | |||||
| * before returning. | |||||
| * | |||||
| * Note, this should mainly be used for debugging, and is not guaranteed | |||||
| * to correspond 1:1 with the JSON API output. | |||||
| * | |||||
| * Note that echoing an object before an HTTP request has been made to | |||||
| * "fill in" its properties may return an empty object | |||||
| */ | |||||
| public function __toString() { | |||||
| $out = array(); | |||||
| foreach ($this as $key => $value) { | |||||
| if ($key !== 'client' && $key !== 'subresources') { | |||||
| $out[$key] = $value; | |||||
| } | |||||
| } | |||||
| return json_encode($out, true); | |||||
| } | |||||
| } | |||||