2012-07-12 14:42:36 -04:00

149 lines
4.4 KiB
PHP
Executable File

<?php
/**
* Abstraction of a list resource from the Twilio API.
*
* @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_ListResource
extends Services_Twilio_Resource
implements IteratorAggregate
{
private $_page;
/**
* Gets a resource from this list.
*
* @param string $sid The resource SID
* @return Services_Twilio_InstanceResource The resource
*/
public function get($sid)
{
$schema = $this->getSchema();
$type = $schema['instance'];
return new $type(is_object($sid)
? new Services_Twilio_CachingDataProxy(
isset($sid->sid) ? $sid->sid : NULL, $this, $sid
) : new Services_Twilio_CachingDataProxy($sid, $this));
}
/**
* Deletes a resource from this list.
*
* @param string $sid The resource SID
* @return null
*/
public function delete($sid, array $params = array())
{
$schema = $this->getSchema();
$basename = $schema['basename'];
$this->proxy->deleteData("$basename/$sid", $params);
}
/**
* Create a resource on the list and then return its representation as an
* InstanceResource.
*
* @param array $params The parameters with which to create the resource
*
* @return Services_Twilio_InstanceResource The created resource
*/
protected function _create(array $params)
{
$schema = $this->getSchema();
$basename = $schema['basename'];
return $this->get($this->proxy->createData($basename, $params));
}
/**
* Create a resource on the list and then return its representation as an
* InstanceResource.
*
* @param array $params The parameters with which to create the resource
*
* @return Services_Twilio_InstanceResource The created resource
*/
public function retrieveData($sid, array $params = array())
{
$schema = $this->getSchema();
$basename = $schema['basename'];
return $this->proxy->retrieveData("$basename/$sid", $params);
}
/**
* Create a resource on the list and then return its representation as an
* InstanceResource.
*
* @param array $params The parameters with which to create the resource
*
* @return Services_Twilio_InstanceResource The created resource
*/
public function createData($sid, array $params = array())
{
$schema = $this->getSchema();
$basename = $schema['basename'];
return $this->proxy->createData("$basename/$sid", $params);
}
/**
* Returns a page of InstanceResources from this list.
*
* @param int $page The start page
* @param int $size Number of items per page
* @param array $size Optional filters
*
* @return Services_Twilio_Page A page
*/
public function getPage($page = 0, $size = 50, array $filters = array())
{
$schema = $this->getSchema();
$page = $this->proxy->retrieveData($schema['basename'], array(
'Page' => $page,
'PageSize' => $size,
) + $filters);
$page->{$schema['list']} = array_map(
array($this, 'get'),
$page->{$schema['list']}
);
return new Services_Twilio_Page($page, $schema['list']);
}
/**
* Returns meta data about this list resource type.
*
* @return array Meta data
*/
public function getSchema()
{
$name = get_class($this);
$parts = explode('_', $name);
$basename = end($parts);
return array(
'name' => $name,
'basename' => $basename,
'instance' => substr($name, 0, -1),
'list' => self::decamelize($basename),
);
}
public function getIterator($page = 0, $size = 50, array $filters = array())
{
return new Services_Twilio_AutoPagingIterator(
array($this, 'getPageGenerator'),
create_function('$page, $size, $filters',
'return array($page + 1, $size, $filters);'),
array($page, $size, $filters)
);
}
public function getPageGenerator($page, $size, array $filters = array()) {
return $this->getPage($page, $size, $filters)->getItems();
}
}