mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 22:10:55 +01:00
135 lines
3.6 KiB
PHP
135 lines
3.6 KiB
PHP
|
<?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);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|