Back | Home
الـ Path الحالي: /home/picotech/domains/instantly.picotech.app/public_html/public/./../app/.././../../finland.picotech.app/public_html/storage/../vendor/./nikic/../dompdf/../alexandr-mironov/../guzzlehttp/../././sebastian/lines-of-code/.././version/../../phpunit/../doctrine/../theseer/.././guzzlehttp/../brick/../telnyx/telnyx-php/lib
الملفات الموجودة في هذا الـ Path:
.
..
Address.php
AlphanumericSenderID.php
ApiOperations
ApiRequestor.php
ApiResource.php
ApiResponse.php
AvailablePhoneNumber.php
Balance.php
BillingGroup.php
Brand.php
Call.php
CallControlApplication.php
Campaign.php
Collection.php
Conference.php
Connection.php
CredentialConnection.php
ErrorObject.php
Event.php
Exception
FQDN.php
FQDNConnection.php
Fax.php
FaxApplication.php
HttpClient
IP.php
IPConnection.php
InboundChannel.php
Message.php
MessagingHostedNumberOrder.php
MessagingPhoneNumber.php
MessagingProfile.php
MobileOperatorNetwork.php
NumberLookup.php
NumberOrder.php
NumberOrderDocument.php
NumberReservation.php
OtaUpdate.php
OutboundVoiceProfile.php
PhoneNumber
PhoneNumber.php
PhoneNumberAssignmentByProfile.php
PhoneNumberCampaign.php
PortingOrder.php
PortingPhoneNumber.php
Portout.php
RegulatoryRequirement.php
RequestTelemetry.php
ShortCode.php
SimCard.php
TelephonyCredential.php
Telnyx.php
TelnyxObject.php
Util
Verification.php
VerifyProfile.php
VerifyVerification.php
Webhook.php
WebhookSignature.php

مشاهدة ملف: Collection.php

<?php

namespace Telnyx;

/**
 * Class Collection
 *
 * @property string $object
 * @property string $url
 * @property mixed $data
 *
 * @package Telnyx
 */
class Collection extends TelnyxObject implements \IteratorAggregate
{
    const OBJECT_NAME = "list";

    use ApiOperations\Request;

    protected $_requestParams = [];

    /**
     * @return string The base URL for the given class.
     */
    public static function baseUrl()
    {
        return Telnyx::$apiBase;
    }

    public function setRequestParams($params)
    {
        $this->_requestParams = $params;
    }

    public function all($params = null, $opts = null)
    {
        list($url, $params) = $this->extractPathAndUpdateParams($params);

        list($response, $opts) = $this->_request('get', $url, $params, $opts);
        $this->_requestParams = $params;

        // This is needed for nextPage() and previousPage()
        $response['url'] = $url;

        $obj = Util\Util::convertToTelnyxObject($response, $opts);
        $obj->setRequestParams($params);

        return $obj;
    }

    public function create($params = null, $opts = null)
    {
        list($url, $params) = $this->extractPathAndUpdateParams($params);

        list($response, $opts) = $this->_request('post', $url, $params, $opts);
        $this->_requestParams = $params;
        return Util\Util::convertToTelnyxObject($response, $opts);
    }

    public function retrieve($id, $params = null, $opts = null)
    {
        list($url, $params) = $this->extractPathAndUpdateParams($params);

        $id = Util\Util::utf8($id);
        $extn = urlencode($id);
        list($response, $opts) = $this->_request(
            'get',
            "$url/$extn",
            $params,
            $opts
        );
        $this->_requestParams = $params;
        return Util\Util::convertToTelnyxObject($response, $opts);
    }

    /**
     * @return \ArrayIterator An iterator that can be used to iterate
     *    across objects in the current page.
     */
    public function getIterator()
    {
        return new \ArrayIterator($this->data);
    }

    /**
     * @return Util\AutoPagingIterator An iterator that can be used to iterate
     *    across all objects across all pages. As page boundaries are
     *    encountered, the next page will be fetched automatically for
     *    continued iteration.
     */
    public function autoPagingIterator()
    {
        return new Util\AutoPagingIterator($this, $this->_requestParams);
    }

    /**
     * Returns an empty collection. This is returned from {@see nextPage()}
     * when we know that there isn't a next page in order to replicate the
     * behavior of the API when it attempts to return a page beyond the last.
     *
     * @param array|string|null $opts
     * @return Collection
     */
    public static function emptyCollection($opts = null)
    {
        return Collection::constructFrom(['data' => []], $opts);
    }

    /**
     * Returns true if the page object contains no element.
     *
     * @return boolean
     */
    public function isEmpty()
    {
        return empty($this->data);
    }

    /**
     * See if there are more results
     *
     * @return boolean
     */
    public function hasMore() {
        if (isset($this->meta)) {
            if ($this->meta['page_number'] < $this->meta['total_pages']) {
                return true;
            }
        }
        return false;
    }

    /**
     * See if there are previous results
     *
     * @return boolean
     */
    public function hasPrev() {
        if (isset($this->meta)) {
            if ($this->meta['page_number'] > 1) {
                return true;
            }
        }
        return false;
    }

    /**
     * Fetches the next page in the resource list (if there is one).
     *
     * This method will try to respect the limit of the current page. If none
     * was given, the default limit will be fetched again.
     *
     * @param array|null $params
     * @param array|string|null $opts
     * @return Collection
     */
    public function nextPage($params = null, $opts = null)
    {
        if (!$this->hasMore()) {
            return static::emptyCollection($opts);
        }

        $params = array_merge(
            $this->_requestParams,
            $params ?: []
        );

        // Remove page number from the next request. Detect both syntaxes
        if (isset($params['page']) && isset($params['page']['number'])) {
            unset($params['page']['number']);
        }
        elseif (isset($params['page[number]'])) {
            unset($params['page[number]']);
        }

        // Set a new page number
        $params['page[number]'] = $this->meta['page_number'] + 1;

        return $this->all($params, $opts);
    }

    /**
     * Fetches the previous page in the resource list (if there is one).
     *
     * This method will try to respect the limit of the current page. If none
     * was given, the default limit will be fetched again.
     *
     * @param array|null $params
     * @param array|string|null $opts
     * @return Collection
     */
    public function previousPage($params = null, $opts = null)
    {
        if (!$this->hasPrev()) {
            return static::emptyCollection($opts);
        }

        $params = array_merge(
            $this->_requestParams,
            $params ?: []
        );

        // Remove page number from the next request. Detect both syntaxes
        if (isset($params['page']) && isset($params['page']['number'])) {
            unset($params['page']['number']);
        }
        elseif (isset($params['page[number]'])) {
            unset($params['page[number]']);
        }

        // Set a new page number
        $params['page[number]'] = $this->meta['page_number'] - 1;

        return $this->all($params, $opts);
    }

    private function extractPathAndUpdateParams($params)
    {
        $url = parse_url($this->url);
        if (!isset($url['path'])) {
            throw new Exception\UnexpectedValueException("Could not parse list url into parts: {$url}");
        }

        if (isset($url['query'])) {
            // If the URL contains a query param, parse it out into $params so they
            // don't interact weirdly with each other.
            $query = [];
            parse_str($url['query'], $query);
            $params = array_merge($params ?: [], $query);
        }

        return [$url['path'], $params];
    }
}