function generate(Vtiger_Request $request) { $moduleName = $request->getModule(); $recordId = $request->get('record'); $templateIds = $request->get('template'); $singlePdf = $request->get('single_pdf') == 1 ? true : false; $emailPdf = $request->get('email_pdf') == 1 ? true : false; if (!is_array($recordId)) { $recordId = [$recordId]; } if (count($templateIds) == 1 && count($recordId) == 1) { if ($emailPdf) { $filePath = 'cache/pdf/' . $recordId[0] . '_' . time() . '.pdf'; Vtiger_PDF_Model::exportToPdf($recordId[0], $moduleName, $templateIds[0], $filePath, 'F'); if (file_exists($filePath)) { header('Location: index.php?module=OSSMail&view=compose&pdf_path=' . $filePath); exit; } else { throw new AppException(vtranslate('LBL_EXPORT_ERROR', 'Settings:PDF')); } } else { Vtiger_PDF_Model::exportToPdf($recordId[0], $moduleName, $templateIds[0]); } } else { if (count($templateIds) == 1 && count($recordId) > 1) { Vtiger_PDF_Model::exportToPdf($recordId, $moduleName, $templateIds[0]); } else { // save multiple templates as pdf files if ($singlePdf) { $handlerClass = Vtiger_Loader::getComponentClassName('Pdf', 'mPDF', $moduleName); $pdf = new $handlerClass(); $styles = ''; $headers = ''; $footers = ''; $classes = ''; $body = ''; $origLanguage = vglobal('default_language'); foreach ($recordId as $index => $record) { $templateIdsTemp = $templateIds; $pdf->setRecordId($recordId[0]); $pdf->setModuleName($moduleName); $firstTemplate = array_shift($templateIdsTemp); $template = Vtiger_PDF_Model::getInstanceById($firstTemplate); $template->setMainRecordId($record); $pdf->setLanguage($template->get('language')); vglobal('default_language', $template->get('language')); $template->getParameters(); //$pdf->parseParams($template->getParameters()); $styles .= " @page template_{$record}_{$firstTemplate} {\n\t\t\t\t\t\tsheet-size: {$template->getFormat()};\n\t\t\t\t\t\tmargin-top: {$template->get('margin_top')}mm;\n\t\t\t\t\t\tmargin-left: {$template->get('margin_left')}mm;\n\t\t\t\t\t\tmargin-right: {$template->get('margin_right')}mm;\n\t\t\t\t\t\tmargin-bottom: {$template->get('margin_bottom')}mm;\n\t\t\t\t\t\todd-header-name: html_Header_{$record}_{$firstTemplate};\n\t\t\t\t\t\todd-footer-name: html_Footer_{$record}_{$firstTemplate};\n\t\t\t\t\t}"; $html = ''; $headers .= ' <htmlpageheader name="Header_' . $record . '_' . $firstTemplate . '">' . $template->getHeader() . '</htmlpageheader>'; $footers .= ' <htmlpagefooter name="Footer_' . $record . '_' . $firstTemplate . '">' . $template->getFooter() . '</htmlpagefooter>'; $classes .= ' div.page_' . $record . '_' . $firstTemplate . ' { page-break-before: always; page: template_' . $record . '_' . $firstTemplate . '; }'; $body .= '<div class="page_' . $record . '_' . $firstTemplate . '">' . $template->getBody() . '</div>'; foreach ($templateIdsTemp as $id) { $template = Vtiger_PDF_Model::getInstanceById($id); $template->setMainRecordId($record); $pdf->setLanguage($template->get('language')); vglobal('default_language', $template->get('language')); // building parameters $parameters = $template->getParameters(); //$pdf->parseParams($parameters); $styles .= " @page template_{$record}_{$id} {\n\t\t\t\t\t\t\tsheet-size: {$template->getFormat()};\n\t\t\t\t\t\t\tmargin-top: {$template->get('margin_top')}mm;\n\t\t\t\t\t\t\tmargin-left: {$template->get('margin_left')}mm;\n\t\t\t\t\t\t\tmargin-right: {$template->get('margin_right')}mm;\n\t\t\t\t\t\t\tmargin-bottom: {$template->get('margin_bottom')}mm;\n\t\t\t\t\t\t\todd-header-name: html_Header_{$record}_{$id};\n\t\t\t\t\t\t\todd-footer-name: html_Footer_{$record}_{$id};\n\t\t\t\t\t\t}"; $html = ''; $headers .= ' <htmlpageheader name="Header_' . $record . '_' . $id . '">' . $template->getHeader() . '</htmlpageheader>'; $footers .= ' <htmlpagefooter name="Footer_' . $record . '_' . $id . '">' . $template->getFooter() . '</htmlpagefooter>'; $classes .= ' div.page_' . $record . '_' . $id . ' { page-break-before: always; page: template_' . $record . '_' . $id . '; }'; $body .= '<div class="page_' . $record . '_' . $id . '">' . $template->getBody() . '</div>'; } } vglobal('default_language', $origLanguage); $html = "<html><head><style>{$styles} {$classes}</style></head><body>{$headers} {$footers} {$body}</body></html>"; $pdf->loadHTML($html); $pdf->setFileName(vtranslate('LBL_PDF_MANY_IN_ONE')); $pdf->output(); } else { mt_srand(time()); $postfix = time() . '_' . mt_rand(0, 1000); $pdfFiles = []; $origLanguage = vglobal('default_language'); foreach ($templateIds as $id) { foreach ($recordId as $record) { $handlerClass = Vtiger_Loader::getComponentClassName('Pdf', 'mPDF', $moduleName); $pdf = new $handlerClass(); $pdf->setTemplateId($id); $pdf->setRecordId($record); $pdf->setModuleName($moduleName); $template = Vtiger_PDF_Model::getInstanceById($id); $template->setMainRecordId($record); $pdf->setLanguage($template->get('language')); $pdf->setFileName($template->get('filename')); vglobal('default_language', $template->get('language')); $pdf->parseParams($template->getParameters()); $html = ''; $pdf->setHeader('Header', $template->getHeader()); $pdf->setFooter('Footer', $template->getFooter()); $html = $template->getBody(); $pdf->loadHTML($html); $pdfFileName = 'cache/pdf/' . $record . '_' . $pdf->getFileName() . '_' . $postfix . '.pdf'; $pdf->output($pdfFileName, 'F'); if (file_exists($pdfFileName)) { $pdfFiles[] = $pdfFileName; } unset($pdf, $template); } } vglobal('default_language', $origLanguage); if (!empty($pdfFiles)) { if (!empty($emailPdf)) { Vtiger_PDF_Model::attachToEmail($postfix); } else { Vtiger_PDF_Model::zipAndDownload($pdfFiles); } } } } } }