{$entity}; if ($entity == 'invoice') { $path = $entity_obj->client->invoice_filepath($invitation); } if ($entity == 'quote') { $path = $entity_obj->client->quote_filepath($invitation); } if ($entity == 'credit') { $path = $entity_obj->client->credit_filepath($invitation); } if ($entity == 'recurring_invoice') { $path = $entity_obj->client->recurring_invoice_filepath($invitation); } $file_path = $path.$entity_obj->numberFormatter().'.pdf'; $url = config('ninja.app_url').'/phantom/'.$entity.'/'.$invitation->key.'?phantomjs_secret='.config('ninja.phantomjs_secret'); info($url); $key = config('ninja.phantomjs_key'); $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/"; $pdf = CurlUtils::post($phantom_url, json_encode([ 'url' => $url, 'renderType' => 'pdf', 'outputAsJson' => false, 'renderSettings' => [ 'emulateMedia' => 'print', 'pdfOptions' => [ 'preferCSSPageSize' => true, 'printBackground' => true, ], ], ])); $this->checkMime($pdf, $invitation, $entity); $numbered_pdf = $this->pageNumbering($pdf, $invitation->company); if ($numbered_pdf) { $pdf = $numbered_pdf; } if (! Storage::disk(config('filesystems.default'))->exists($path)) { Storage::disk(config('filesystems.default'))->makeDirectory($path); } $instance = Storage::disk(config('filesystems.default'))->put($file_path, $pdf); if ($return_pdf) { return $pdf; } return $file_path; } public function convertHtmlToPdf($html) { $key = config('ninja.phantomjs_key'); $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/"; $pdf = CurlUtils::post($phantom_url, json_encode([ 'content' => $html, 'renderType' => 'pdf', 'outputAsJson' => false, 'renderSettings' => [ 'emulateMedia' => 'print', 'pdfOptions' => [ 'preferCSSPageSize' => true, 'printBackground' => true, ], ], ])); $response = Response::make($pdf, 200); $response->header('Content-Type', 'application/pdf'); return $response; } /* Check if the returning PDF is valid. */ private function checkMime($pdf, $invitation, $entity) { $finfo = new \finfo(FILEINFO_MIME); if ($finfo->buffer($pdf) != 'application/pdf; charset=binary') { SystemLogger::dispatch( $pdf, SystemLog::CATEGORY_PDF, SystemLog::EVENT_PDF_RESPONSE, SystemLog::TYPE_PDF_FAILURE, $invitation->contact->client, $invitation->company, ); throw new PhantomPDFFailure('There was an error generating the PDF with Phantom JS'); } else { SystemLogger::dispatch( 'Entity PDF generated sucessfully => '.$invitation->{$entity}->number, SystemLog::CATEGORY_PDF, SystemLog::EVENT_PDF_RESPONSE, SystemLog::TYPE_PDF_SUCCESS, $invitation->contact->client, $invitation->company, ); } } public function displayInvitation(string $entity, string $invitation_key) { $key = $entity.'_id'; $invitation_instance = 'App\Models\\'.ucfirst(Str::camel($entity)).'Invitation'; $invitation = $invitation_instance::where('key', $invitation_key)->first(); $entity_obj = $invitation->{$entity}; $entity_obj->load('client'); App::setLocale($invitation->contact->preferredLocale()); $entity_design_id = $entity.'_design_id'; if ($entity == 'recurring_invoice') { $entity_design_id = 'invoice_design_id'; } $design_id = $entity_obj->design_id ? $entity_obj->design_id : $this->decodePrimaryKey($entity_obj->client->getSetting($entity_design_id)); $design = Design::withTrashed()->find($design_id); $html = new HtmlEngine($invitation); if ($design->is_custom) { $options = [ 'custom_partials' => json_decode(json_encode($design->design), true), ]; $template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options); } else { $template = new PdfMakerDesign(strtolower($design->name)); } $state = [ 'template' => $template->elements([ 'client' => $entity_obj->client, 'entity' => $entity_obj, 'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables, '$product' => $design->design->product, ]), 'variables' => $html->generateLabelsAndValues(), 'options' => [ 'all_pages_header' => $entity_obj->client->getSetting('all_pages_header'), 'all_pages_footer' => $entity_obj->client->getSetting('all_pages_footer'), ], 'process_markdown' => $entity_obj->client->company->markdown_enabled, ]; $maker = new PdfMakerService($state); $data['html'] = $maker->design($template) ->build() ->getCompiledHTML(true); if (config('ninja.log_pdf_html')) { info($data['html']); } return view('pdf.html', $data); } public function blade() { $i = \App\Models\Invoice::first(); $html_variables = (new HtmlEngine($i->invitations->first()))->makeValuesNoPrefix(); $variables = (new HtmlEngine($i->invitations->first()))->makeValuesNoPrefix(); $html_variables = array_merge($html_variables, $variables); // $smarty->assign($html_variables); $template_string = ' display {$foo} here {if $invoice.amount > 5}
ewwo {$invoice.amount * 5} {/if}
{if isset($entry) && is_array($entry)} I am a puppet {/if}
{if 1 > 0} 1 is greater than 0 {/if}
{if 0 > 1} 0 is greater than 1 {/if}
{foreach $countries as $country} {if $country.name = "Australia"} {$country.name}
{/if}
{/foreach} {foreach $invoice.line_items as $item} {$item->quantity} - {$item->cost} - {$item->notes} - {$item->line_total}
{/foreach} echo "I am a puppet"; '; $template_string = ' {{ _invoice_number }}

{{ _invoice_number }}

Athletes list

{{ _invoiceDate }}
{{ _shipping }}
{{ _client_address|raw }}
{{ xx }} $invoice.amount
'; $loader = new \Twig\Loader\FilesystemLoader(storage_path()); // $tags = ['if','for','raw','html','sandbox']; // $filters = ['upper']; // $methods = [ // 'Article' => ['getTitle', 'getBody'], // ]; // $properties = [ // 'Article' => ['title', 'body'], // ]; // $functions = ['range']; // $policy = new \Twig\Sandbox\SecurityPolicy($tags, $filters, $methods, $properties, $functions); // $sandbox = new \Twig\Extension\SandboxExtension($policy); $twig = new \Twig\Environment($loader); // $twig->addExtension($sandbox); // $twig = new \Twig\Environment(new \Twig\Loader\ArrayLoader([])); $template = $twig->createTemplate($template_string); echo $template->render(array_merge([ 'invoice' => $i->toArray(), ], $html_variables)); // try{ // $smarty->display('string:' . $template_string); // } // catch(\Throwable $e){ // echo $e->getMessage(); // exit; // } // $smarty->display('string:' . $template_string); } }