. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Data\Export; use Carbon\Carbon; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Collection; /** * Class ExportRequest */ class ExportRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; public function getAll(): array { $result = [ 'start' => $this->getCarbonDate('start') ?? Carbon::now()->subYear(), 'end' => $this->getCarbonDate('end') ?? Carbon::now(), 'type' => $this->convertString('type'), ]; $parts = explode(',', $this->convertString('accounts')); $repository = app(AccountRepositoryInterface::class); $repository->setUser(auth()->user()); $accounts = new Collection(); foreach ($parts as $part) { $accountId = (int)$part; if (0 !== $accountId) { $account = $repository->find($accountId); if (null !== $account && AccountType::ASSET === $account->accountType->type) { $accounts->push($account); } } } $result['accounts'] = $accounts; return $result; } /** * The rules that the incoming request must be matched against. * * @return array */ public function rules(): array { return [ 'type' => 'in:csv', 'accounts' => 'min:1', 'start' => 'date|before:end', 'end' => 'date|after:start', ]; } }