App\Http\Controllers\ClientPortalController::getInvoiceDocumentsZip PHP Method

getInvoiceDocumentsZip() public method

public getInvoiceDocumentsZip ( $invitationKey )
    public function getInvoiceDocumentsZip($invitationKey)
    {
        if (!($invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey))) {
            return $this->returnError();
        }
        Session::put('contact_key', $invitation->contact->contact_key);
        // track current contact
        $invoice = $invitation->invoice;
        $toZip = $this->getInvoiceZipDocuments($invoice);
        if (!count($toZip)) {
            return Response::view('error', ['error' => 'No documents small enough'], 404);
        }
        $zip = new ZipArchive($invitation->account->name . ' Invoice ' . $invoice->invoice_number . '.zip');
        return Response::stream(function () use($toZip, $zip) {
            foreach ($toZip as $name => $document) {
                $fileStream = $document->getStream();
                if ($fileStream) {
                    $zip->init_file_stream_transfer($name, $document->size, ['time' => $document->created_at->timestamp]);
                    while ($buffer = fread($fileStream, 256000)) {
                        $zip->stream_file_part($buffer);
                    }
                    fclose($fileStream);
                    $zip->complete_file_stream();
                } else {
                    $zip->add_file($name, $document->getRaw());
                }
            }
            $zip->finish();
        }, 200);
    }