Overview

Namespaces

  • Angelfon
    • SDK
      • Exceptions
      • Http
      • Rest
        • Api
          • V099
            • User

Classes

  • Angelfon\SDK\Domain
  • Angelfon\SDK\Http\GuzzleClient
  • Angelfon\SDK\Http\Response
  • Angelfon\SDK\InstanceContext
  • Angelfon\SDK\InstanceResource
  • Angelfon\SDK\ListResource
  • Angelfon\SDK\Options
  • Angelfon\SDK\Page
  • Angelfon\SDK\Rest\Api
  • Angelfon\SDK\Rest\Api\V099
  • Angelfon\SDK\Rest\Api\V099\User\CallContext
  • Angelfon\SDK\Rest\Api\V099\User\CallInstance
  • Angelfon\SDK\Rest\Api\V099\User\CallList
  • Angelfon\SDK\Rest\Api\V099\User\CallOptions
  • Angelfon\SDK\Rest\Api\V099\User\CallPage
  • Angelfon\SDK\Rest\Api\V099\User\CreateCallOptions
  • Angelfon\SDK\Rest\Api\V099\User\CreateSmsOptions
  • Angelfon\SDK\Rest\Api\V099\User\ReadCallOptions
  • Angelfon\SDK\Rest\Api\V099\User\ReadSmsOptions
  • Angelfon\SDK\Rest\Api\V099\User\SmsContext
  • Angelfon\SDK\Rest\Api\V099\User\SmsInstance
  • Angelfon\SDK\Rest\Api\V099\User\SmsList
  • Angelfon\SDK\Rest\Api\V099\User\SmsOptions
  • Angelfon\SDK\Rest\Api\V099\User\SmsPage
  • Angelfon\SDK\Rest\Api\V099\UserContext
  • Angelfon\SDK\Rest\Api\V099\UserInstance
  • Angelfon\SDK\Rest\Client
  • Angelfon\SDK\Serialize
  • Angelfon\SDK\Values
  • Angelfon\SDK\Version
  • Angelfon\SDK\VersionInfo

Interfaces

  • Angelfon\SDK\Http\Client

Exceptions

  • Angelfon\SDK\Exceptions\AngelfonException
  • Angelfon\SDK\Exceptions\ConfigurationException
  • Angelfon\SDK\Exceptions\RestException
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 
<?php
namespace Angelfon\SDK;

use Angelfon\SDK\Version;
use Angelfon\SDK\Http\Response;
use Angelfon\SDK\Exceptions\RestException;

abstract class Page implements \Iterator 
{
    protected static $metaKeys = array(
    'end',
    'first_page_uri',
    'next_page_uri',
    'last_page_uri',
    'page',
    'page_size',
    'previous_page_uri',
    'total',
    'num_pages',
    'start',
    'uri',
  );

  protected $version;
  protected $payload;
  protected $solution;
  protected $records;

  abstract public function buildInstance(array $payload);

  public function __construct(Version $version, Response $response) {
    $payload = $this->processResponse($response);

    $this->version = $version;
    $this->payload = $payload;
    $this->solution = array();
    $this->records = new \ArrayIterator($this->loadPage());
  }

  protected function processResponse(Response $response) {
    $content = $response->getContent();
    if ($response->getStatusCode() != 200 && !$this->isPagingEol($response->getContent())) {
      $message = '[HTTP ' . $response->getStatusCode() . '] Unable to fetch page';
      $code = $response->getStatusCode();

      if (is_array($content)) {
          if (array_key_exists('message', $content)) 
                throw new RestException($content['message'], $code, $code);
            else if (array_key_exists('data', $content)) 
                throw new RestException($content['data'], $content['error'], $code);
            else throw new RestException();
      }

      throw new RestException($message, $code, $response->getStatusCode());
    }
    return $content;
  }

  protected function isPagingEol($content) {
    return !is_null($content) && array_key_exists('data', $content) && $content['data'] == null;
  }

  protected function loadPage() {
    return $this->payload['data'];
  }

  public function getPreviousPageUrl() {
    if ($this->hasMeta('previous_page_url')) {
      return $this->getMeta('previous_page_url');
    } else if (array_key_exists('previous_page_uri', $this->payload) && $this->payload['previous_page_uri']) {
      return $this->getVersion()->getDomain()->absoluteUrl($this->payload['previous_page_uri']);
    }
    return null;
  }

  public function getNextPageUrl() {
    if ($this->hasMeta('next_page_url')) {
      return $this->getMeta('next_page_url');
    } else if (array_key_exists('next_page_uri', $this->payload) && $this->payload['next_page_uri']) {
        return $this->getVersion()->getDomain()->absoluteUrl($this->payload['next_page_uri']);
    }
    return null;
  }

  public function nextPage() {
    if (!$this->getNextPageUrl()) {
      return null;
    }

    $response = $this->getVersion()->getDomain()->getClient()->request('GET', $this->getNextPageUrl());
    return new static($this->getVersion(), $response, $this->solution);
  }

  public function previousPage() {
    if (!$this->getPreviousPageUrl()) {
      return null;
    }

    $response = $this->getVersion()->getDomain()->getClient()->request('GET', $this->getPreviousPageUrl());
    return new static($this->getVersion(), $response, $this->solution);
  }

  /**
   * (PHP 5 &gt;= 5.0.0)<br/>
   * Return the current element
   * @link http://php.net/manual/en/iterator.current.php
   * @return mixed Can return any type.
   */
  public function current() {
    return $this->buildInstance($this->records->current());
  }

  /**
   * (PHP 5 &gt;= 5.0.0)<br/>
   * Move forward to next element
   * @link http://php.net/manual/en/iterator.next.php
   * @return void Any returned value is ignored.
   */
  public function next() {
    $this->records->next();
  }

  /**
   * (PHP 5 &gt;= 5.0.0)<br/>
   * Return the key of the current element
   * @link http://php.net/manual/en/iterator.key.php
   * @return mixed scalar on success, or null on failure.
   */
  public function key() {
    return $this->records->key();
  }

  /**
   * (PHP 5 &gt;= 5.0.0)<br/>
   * Checks if current position is valid
   * @link http://php.net/manual/en/iterator.valid.php
   * @return boolean The return value will be casted to boolean and then evaluated.
   * Returns true on success or false on failure.
   */
  public function valid() {
    return $this->records->valid();
  }

  /**
   * (PHP 5 &gt;= 5.0.0)<br/>
   * Rewind the Iterator to the first element
   * @link http://php.net/manual/en/iterator.rewind.php
   * @return void Any returned value is ignored.
   */
  public function rewind() {
    $this->records->rewind();
  }


  /**
   * @return Version
   */
  public function getVersion() {
    return $this->version;
  }

  public function __toString() {
    return '[Page]';
  }
}
API documentation generated by ApiGen