Example #1
0
 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);
                     }
                 }
             }
         }
     }
 }