. */ declare(strict_types=1); namespace FireflyIII\Services\Spectre\Request; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Services\Spectre\Object\Customer; use FireflyIII\Services\Spectre\Object\Login; use Illuminate\Support\Collection; use Log; /** * Class ListLoginsRequest */ class ListLoginsRequest extends SpectreRequest { /** @var Customer */ private $customer; /** @var array */ private $logins = []; /** * @throws FireflyException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function call(): void { $hasNextPage = true; $nextId = 0; while ($hasNextPage) { Log::debug(sprintf('Now calling ListLoginsRequest for next_id %d', $nextId)); $parameters = ['from_id' => $nextId, 'customer_id' => $this->customer->getId()]; $uri = '/api/v4/logins/?' . http_build_query($parameters); $response = $this->sendSignedSpectreGet($uri, []); // count entries: Log::debug(sprintf('Found %d entries in data-array', \count($response['data']))); // extract next ID $hasNextPage = false; if (isset($response['meta']['next_id']) && (int)$response['meta']['next_id'] > $nextId) { $hasNextPage = true; $nextId = $response['meta']['next_id']; Log::debug(sprintf('Next ID is now %d.', $nextId)); } $collection = new Collection; // store logins: /** @var array $loginArray */ foreach ($response['data'] as $loginArray) { $collection->push(new Login($loginArray)); } // sort logins by date created: $sorted = $collection->sortByDesc( function (Login $login) { return $login->getUpdatedAt()->timestamp; } ); $this->logins = $sorted->toArray(); } } /** * @return array */ public function getLogins(): array { return $this->logins; } /** * @param Customer $customer */ public function setCustomer(Customer $customer): void { $this->customer = $customer; } }