__serialize()); } public function __serialize(): array { return [ parent::__serialize(), $this->paginationToken, $this->requestSegments, ]; } /** * @deprecated Beginning from PHP7.4 __unserialize is used for new generated strings, then this method is only used for previously generated strings - remove after May 2023 * * {@inheritdoc} */ public function unserialize($serialized) { self::__unserialize(unserialize($serialized)); } public function __unserialize(array $serialized): void { list( $parentSerialized, $this->paginationToken, $this->requestSegments) = $serialized; is_array($parentSerialized) ? parent::__unserialize($parentSerialized) : parent::unserialize($parentSerialized); } /** * @return bool True if the response has not been read completely yet, i.e. additional requests to the server are * necessary to continue reading the requested data. */ public function hasMorePages(): bool { return !$this->isDone() && $this->paginationToken !== null; } /** {@inheritdoc} */ public function processResponse(Message $response) { if (($pagination = $response->findRueckmeldung(Rueckmeldungscode::PAGINATION)) !== null) { if (count($pagination->rueckmeldungsparameter) !== 1) { throw new UnexpectedResponseException("Unexpected pagination request: $pagination"); } // There is at least one more page $this->paginationToken = $pagination->rueckmeldungsparameter[0]; } else { // No pagination or last page parent::processResponse($response); } } /** {@inheritdoc} */ public function getNextRequest(?BPD $bpd, ?UPD $upd) { if ($this->requestSegments === null) { $this->requestSegments = parent::getNextRequest($bpd, $upd); } elseif ($this->paginationToken !== null) { foreach ($this->requestSegments as $segment) { if ($segment instanceof Paginateable) { $segment->setPaginationToken($this->paginationToken); } } $this->paginationToken = null; } return $this->requestSegments; } }