settings = $settings; $this->accounts = $settings['accounts']; $this->exportFormat = $settings['exportFormat']; $this->includeAttachments = $settings['includeAttachments']; $this->includeConfig = $settings['includeConfig']; $this->includeOldUploads = $settings['includeOldUploads']; $this->job = $settings['job']; $this->journals = new Collection; $this->exportEntries = new Collection; $this->files = new Collection; } /** * */ public function collectAttachments() { $attachmentCollector = app('FireflyIII\Export\Collector\AttachmentCollector', [$this->job]); $attachmentCollector->run(); $this->files = $this->files->merge($attachmentCollector->getFiles()); } /** * */ public function collectJournals() { $args = [$this->accounts, Auth::user(), $this->settings['startDate'], $this->settings['endDate']]; $journalCollector = app('FireflyIII\Export\JournalCollector', $args); $this->journals = $journalCollector->collect(); } public function collectOldUploads() { $uploadCollector = app('FireflyIII\Export\Collector\UploadCollector', [$this->job]); $uploadCollector->run(); $this->files = $this->files->merge($uploadCollector->getFiles()); } /** * */ public function convertJournals() { /** @var TransactionJournal $journal */ foreach ($this->journals as $journal) { $this->exportEntries->push(Entry::fromJournal($journal)); } } public function createConfigFile() { $this->configurationMaker = app('FireflyIII\Export\ConfigurationFile', [$this->job]); $this->files->push($this->configurationMaker->make()); } public function createZipFile() { $zip = new ZipArchive; $filename = storage_path('export') . DIRECTORY_SEPARATOR . $this->job->key . '.zip'; if ($zip->open($filename, ZipArchive::CREATE) !== true) { throw new FireflyException('Cannot store zip file.'); } // for each file in the collection, add it to the zip file. $search = storage_path('export') . DIRECTORY_SEPARATOR . $this->job->key . '-'; /** @var string $file */ foreach ($this->getFiles() as $file) { $zipName = str_replace($search, '', $file); $zip->addFile($file, $zipName); } $zip->close(); // delete the files: foreach ($this->getFiles() as $file) { unlink($file); } } /** * */ public function exportJournals() { $exporterClass = Config::get('firefly.export_formats.' . $this->exportFormat); $exporter = app($exporterClass, [$this->job]); $exporter->setEntries($this->exportEntries); $exporter->run(); $this->files->push($exporter->getFileName()); } /** * @return Collection */ public function getFiles() { return $this->files; } }