. */ namespace FireflyIII\Http\Controllers\Export; use Carbon\Carbon; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\Export\ExportFileGenerator; use Illuminate\Http\Response as LaravelResponse; /** * Class IndexController */ class IndexController extends Controller { /** @var JournalRepositoryInterface */ private $journalRepository; /** * IndexController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); // translations: $this->middleware( function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-life-bouy'); app('view')->share('title', (string)trans('firefly.export_data_title')); $this->journalRepository = app(JournalRepositoryInterface::class); return $next($request); } ); } /** * */ public function export() { /** @var ExportFileGenerator $generator */ $generator = app(ExportFileGenerator::class); // get first transaction in DB: $firstDate = new Carbon; $firstDate->subYear(); $journal = $this->journalRepository->firstNull(); if (null !== $journal) { $firstDate = clone $journal->date; } $generator->setStart($firstDate); $result = $generator->export(); $name = sprintf('%s_transaction_export.csv', date('Y_m_d')); $quoted = sprintf('"%s"', addcslashes($name, '"\\')); // headers for CSV file. /** @var LaravelResponse $response */ $response = response($result['transactions'], 200); $response ->header('Content-Description', 'File Transfer') ->header('Content-Type', 'text/x-csv') ->header('Content-Disposition', 'attachment; filename=' . $quoted) //->header('Content-Transfer-Encoding', 'binary') ->header('Connection', 'Keep-Alive') ->header('Expires', '0') ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->header('Pragma', 'public') ->header('Content-Length', strlen($result['transactions'])); return $response; // return CSV file made from 'transactions' array. return $result['transactions']; } /** * */ public function index() { return view('export.index'); } }