diff --git a/CRM/DataprocessorOutputExport/PDF.php b/CRM/DataprocessorOutputExport/PDF.php index f2122c759ac50583b89f44e7e923bcda9ccd546e..7293318a07516de9d5b9263f13da1a5d2ff411c9 100644 --- a/CRM/DataprocessorOutputExport/PDF.php +++ b/CRM/DataprocessorOutputExport/PDF.php @@ -32,6 +32,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct * @param array $filter */ public function buildConfigurationForm(\CRM_Core_Form $form, $output=array()) { + $defaults = []; $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $output['data_processor_id'])); $dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor); $fields = array(); @@ -46,6 +47,33 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct $pdfFormats[$pdfFormat['id']] = $pdfFormat['label']; } + $smarty = \CRM_Core_Smarty::singleton(); + $templates = []; + $template_dirs = $smarty->template_dir; + if (!is_array($template_dirs)) { + $template_dirs = [$template_dirs]; + } + foreach($template_dirs as $template_dir) { + foreach(glob($template_dir."/CRM/DataprocessorOutputExport/PDF/*") as $fileName) { + if (is_dir($fileName)) { + $template = basename($fileName); + $title = $template; + if (file_exists($fileName."/title.txt")) { + $title = E::ts(file_get_contents($fileName."/title.txt")); + } + $templates[$template] = $title; + } + } + } + $defaults['template'] = key($templates); + + $form->add('select', 'template', E::ts('Template'), $templates, false, array( + 'style' => 'min-width:250px', + 'class' => 'crm-select2 huge', + 'multiple' => false, + 'placeholder' => E::ts('- select -'), + )); + $form->add('select', 'hidden_fields', E::ts('Hidden fields'), $fields, false, array( 'style' => 'min-width:250px', 'class' => 'crm-select2 huge', @@ -53,24 +81,21 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct 'placeholder' => E::ts('- select -'), )); - $form->add('select', 'pdf_format', E::ts('PDF Format'), $pdfFormats, false, array( + $form->add('select', 'section_titles', E::ts('Section Titles'), $fields, false, array( 'style' => 'min-width:250px', 'class' => 'crm-select2 huge', - 'multiple' => false, - 'placeholder' => E::ts('- Default PDF Format -'), + 'multiple' => true, + 'placeholder' => E::ts('- no section titles -'), )); - $form->assign('ManagePdfFormatUrl', CRM_Utils_System::url('civicrm/admin/pdfFormats', ['reset'=>1])); - $borderStyles = [ - 'full' => E::ts('Border around every cell'), - 'row_bottom' => E::ts('Border at the bottom of the row'), - ]; - $form->add('select', 'border', E::ts('Border'), $borderStyles, false, array( + $form->add('select', 'pdf_format', E::ts('PDF Format'), $pdfFormats, false, array( 'style' => 'min-width:250px', 'class' => 'crm-select2 huge', 'multiple' => false, - 'placeholder' => E::ts('- No border -'), + 'placeholder' => E::ts('- Default PDF Format -'), )); + $form->assign('ManagePdfFormatUrl', CRM_Utils_System::url('civicrm/admin/pdfFormats', ['reset'=>1])); + $form->add('checkbox', 'anonymous', E::ts('Available for anonymous users'), array(), false); @@ -88,6 +113,9 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct if ($configuration && isset($configuration['hidden_fields'])) { $defaults['hidden_fields'] = $configuration['hidden_fields']; } + if ($configuration && isset($configuration['section_titles'])) { + $defaults['section_titles'] = $configuration['section_titles']; + } if ($configuration && isset($configuration['pdf_format'])) { $defaults['pdf_format'] = $configuration['pdf_format']; } @@ -109,8 +137,8 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct if ($configuration && isset($configuration['additional_column_height'])) { $defaults['additional_column_height'] = $configuration['additional_column_height']; } - if ($configuration && isset($configuration['border'])) { - $defaults['border'] = $configuration['border']; + if ($configuration && isset($configuration['template'])) { + $defaults['template'] = $configuration['template']; } $form->setDefaults($defaults); } @@ -136,6 +164,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct public function processConfiguration($submittedValues, &$output) { $configuration = array(); $configuration['hidden_fields'] = $submittedValues['hidden_fields']; + $configuration['section_titles'] = $submittedValues['section_titles']; $configuration['pdf_format'] = $submittedValues['pdf_format']; $configuration['header'] = $submittedValues['header']; $configuration['anonymous'] = $submittedValues['anonymous']; @@ -143,7 +172,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct $configuration['additional_column_title'] = $submittedValues['additional_column_title']; $configuration['additional_column_width'] = $submittedValues['additional_column_width']; $configuration['additional_column_height'] = $submittedValues['additional_column_height']; - $configuration['border'] = $submittedValues['border']; + $configuration['template'] = $submittedValues['template']; return $configuration; } @@ -226,7 +255,6 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct $dataProcessorClass->getDataFlow()->addSort($sortFieldName, $sortDirection); } - self::createHeader($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor); self::exportDataProcessor($path, $dataProcessorClass, $outputBAO['configuration'], $idField, $selectedIds); $path = self::createFooter($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor); @@ -268,8 +296,6 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct CRM_Utils_File::restrictAccess($basePath.'/'); $filename = $basePath.'/'. $name.'.html'; - self::createHeader($filename, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor); - $count = $dataProcessorClass->getDataFlow()->recordCount(); $recordsPerJob = self::RECORDS_PER_JOB; for($i=0; $i < $count; $i = $i + $recordsPerJob) { @@ -315,68 +341,56 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct $runner->runAllViaWeb(); // does not return } - protected static function createHeader($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) { - $borderStyle = ""; - if (isset($configuration['border']) && $configuration['border'] == 'full') { - $borderStyle = "th, td { border: 1px solid black; padding-left: 4px; padding-right: 4px; }"; - } elseif (isset($configuration['border']) && $configuration['border'] == 'row_bottom') { - $borderStyle = "th, td { border-bottom: 1px solid black; }"; - } - - $content = " - <html> - <head> - <title>{$dataProcessor['title']}</title> - </head> - <body> - <style> - table { border-collapse: collapse; } - {$borderStyle} - </style> - <h1>{$dataProcessor['title']}</h1> - "; - - if (isset($configuration['header'])) { - $content .= $configuration['header']; - } - - $content .= "<table style=\"width: 100%;\"><thead><tr>"; + protected static function createFooter($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) { + $content = ""; $hiddenFields = array(); if (isset($configuration['hidden_fields']) && is_array($configuration['hidden_fields'])) { $hiddenFields = $configuration['hidden_fields']; } + $headerColumns = []; foreach($dataProcessorClass->getDataFlow()->getOutputFieldHandlers() as $outputHandler) { - if (!in_array($outputHandler->getOutputFieldSpecification()->alias, $hiddenFields)) { - $content .= "<th>" . self::encodeValue($outputHandler->getOutputFieldSpecification()->title) . "</th>"; - } + $headerColumns[$outputHandler->getOutputFieldSpecification()->alias] = $outputHandler->getOutputFieldSpecification()->title; } - if (isset($configuration['additional_column']) && $configuration['additional_column']) { - $additionalColumnStyle = ""; - if (isset($configuration['additional_column_width']) && $configuration['additional_column_width']) { - $additionalColumnStyle .= "width: {$configuration['additional_column_width']};"; - } - $content .= "<th style=\"{$additionalColumnStyle}\">"; - if (isset($configuration['additional_column_title']) && $configuration['additional_column_title']) { - $content .= $configuration['additional_column_title']; + $smarty = \CRM_Core_Smarty::singleton(); + $smarty->pushScope(array()); + $smarty->assign('configuration', $configuration); + $smarty->assign('hiddenFields', $hiddenFields); + $smarty->assign('headerColumns', $headerColumns); + $smarty->assign('dataProcessor', $dataProcessor); + + $parts = []; + foreach (glob($filename.".part.*") as $partFilename) { + $basePartFileName = basename($partFilename); + $partName = substr($basePartFileName, stripos($basePartFileName, ".part.")+6); + $partContent = file_get_contents($partFilename); + if ($partName == "_none_") { + $smarty->assign('sectionTitle', ''); + $smarty->assign('rows', $partContent); + $content .= $smarty->fetch(self::getTemplateFolder($configuration)."table.tpl"); + $smarty->popScope(); + } else { + $parts[$partName] = $partContent; } - $content .= "</th>"; + unlink($partFilename); } - $content .= "</tr></thead>"; - $file = fopen($filename, 'a'); - fwrite($file, $content."\r\n"); - fclose($file); - } + foreach($parts as $sectionTitle => $rows) { + $smarty->assign('sectionTitle', $sectionTitle); + $smarty->assign('rows', $rows); + $content .= $smarty->fetch(self::getTemplateFolder($configuration)."table.tpl"); + $smarty->popScope(); + unset($parts[$sectionTitle]); + } + $smarty->popScope(); - protected static function createFooter($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) { - $content = "</table></body></html>"; - $file = fopen($filename, 'a'); - fwrite($file, $content."\r\n"); - fclose($file); + $smarty->pushScope(array()); + $smarty->assign('configuration', $configuration); + $smarty->assign('dataProcessor', $dataProcessor); + $smarty->assign('content', $content); + $content = $smarty->fetch(self::getTemplateFolder($configuration)."html.tpl"); + $smarty->popScope(); - $content = file_get_contents($filename); - unlink($filename); $pdfFilename = str_replace(".html", ".pdf", $filename); $pdfFormat = isset($configuration['pdf_format']) ? $configuration['pdf_format'] : null; $pdfContents = \CRM_Utils_PDF_Utils::html2pdf($content, basename($pdfFilename), TRUE, $pdfFormat); @@ -393,22 +407,21 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct $hiddenFields = $configuration['hidden_fields']; } - $additionalColumn = ''; - if (isset($configuration['additional_column']) && $configuration['additional_column']) { - $style = ""; - if (isset($configuration['additional_column_width']) && $configuration['additional_column_width']) { - $style .= "width: {$configuration['additional_column_width']};"; - } - if (isset($configuration['additional_column_height']) && $configuration['additional_column_height']) { - $style .= "height: {$configuration['additional_column_height']};"; - } - $additionalColumn = "<td style=\"{$style}\"> </td>"; + $smarty = \CRM_Core_Smarty::singleton(); + $smarty->pushScope(array()); + $smarty->assign('configuration', $configuration); + $smarty->assign('hiddenFields', $hiddenFields); + $smarty->assign('dataProcessor', $dataProcessor); + + if (!isset($configuration['section_titles']) || !is_array($configuration['section_titles'])) { + $configuration['section_titles'] = array(); } - $content = ""; + $contents = []; try { while($record = $dataProcessor->getDataFlow()->nextRecord()) { $row = array(); + $content = ""; $rowIsSelected = true; if (isset($idField) && is_array($selectedIds) && count($selectedIds)) { $rowIsSelected = false; @@ -418,25 +431,41 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct } } if ($rowIsSelected) { - $content .= "<tr>"; - foreach ($record as $field => $value) { - if (!in_array($field, $hiddenFields)) { - $content .= "<td>" . self::encodeValue($value->formattedValue) . "</td>"; - } - } - $content .= $additionalColumn . "</tr>"; + $smarty->assign('record', $record); + $content = $smarty->fetch(self::getTemplateFolder($configuration)."row.tpl"); + } + + $sectionHeader = ""; + foreach($configuration['section_titles'] as $section_title) { + $sectionHeader .= strip_tags($record[$section_title]->formattedValue)." "; } + if (empty($sectionHeader)) { + $sectionHeader = "_none_"; + } + $sectionHeader = trim($sectionHeader); + if (!isset($contents[$sectionHeader])) { + $contents[$sectionHeader] = ""; + } + $contents[$sectionHeader] .= $content; } } catch (\Civi\DataProcessor\DataFlow\EndOfFlowException $e) { // Do nothing } - $file = fopen($filename, 'a'); - fwrite($file, $content . "\r\n"); - fclose($file); + foreach($contents as $sectionHeader => $content) { + $file = fopen($filename.".part.".$sectionHeader, 'a'); + fwrite($file, $content . "\r\n"); + fclose($file); + } + + $smarty->popScope(); } - protected static function encodeValue($value) { - return htmlentities($value); + protected static function getTemplateFolder($configuration) { + $template = "Default"; + if (isset($configuration['template'])) { + $template = $configuration['template']; + } + return "CRM/DataprocessorOutputExport/PDF/{$template}/"; } public static function exportBatch(CRM_Queue_TaskContext $ctx, $filename, $params, $dataProcessorId, $outputId, $offset, $limit, $sortFieldName = null, $sortDirection = 'ASC', $idField=null, $selectedIds=array()) { diff --git a/docs/CustomizePdfTemplate.md b/docs/CustomizePdfTemplate.md new file mode 100644 index 0000000000000000000000000000000000000000..1a99318d0cc02ca7c75a0b9601aa1f9743f8aa44 --- /dev/null +++ b/docs/CustomizePdfTemplate.md @@ -0,0 +1,6 @@ +# Customize a PDF Template + +1. Copy one of the subfolders under _template/CRM/DataProcessorOutputExport/PDF_ into _your-extension/template/CRM/DataProcessorOutputExport/PDF_ +2. Give the folder another name(e.g. MyCustom1) +3. Change the title by changing the content in tite.txt (e.g. My Custom 1) +4. Change the content of the three _.tpl_ files (e.g. adding a logo to html.tpl) diff --git a/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl b/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl index a158ec294efd7777b6e874cf99e23c32f4e9f119..fd912a91eae5a7c20d485373827fc8dbf3d92fc4 100644 --- a/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl +++ b/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl @@ -13,6 +13,11 @@ <div class="content">{$form.border.html}</div> <div class="clear"></div> </div> + <div class="crm-section"> + <div class="label">{$form.template.label}</div> + <div class="content">{$form.template.html}</div> + <div class="clear"></div> + </div> <div class="crm-section"> <div class="label">{$form.header.label}</div> <div class="content">{$form.header.html}</div> @@ -23,6 +28,11 @@ <div class="content">{$form.hidden_fields.html}</div> <div class="clear"></div> </div> + <div class="crm-section"> + <div class="label">{$form.section_titles.label}</div> + <div class="content">{$form.section_titles.html}</div> + <div class="clear"></div> + </div> <div class="crm-section"> <div class="label">{$form.additional_column.label}</div> <div class="content">{$form.additional_column.html}</div> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a623b6b3fe0314ec88e3f67121fc52f52571fb3d --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl @@ -0,0 +1,18 @@ +<html> +<head> + <title>{$dataProcessor.title}</title> +</head> +<body> +<style> + {literal} + table { border-collapse: collapse; margin-bottom: 2em;} + th, td { border-bottom: 1px solid black; } + {/literal} +</style> +<h1>{$dataProcessor.title}</h1> +{if $configuration.header} +{$configuration.header} +{/if} +{$content} +</body> +</html> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl @@ -0,0 +1,15 @@ +<tr> + {foreach from=$record item=value key=field} + {if (!in_array($field, $hiddenFields))} + <td>{$value->formattedValue|htmlentities}</td> + {/if} + {/foreach} + {if (isset($configuration.additional_column) && $configuration.additional_column)} + <td styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if} + "> + + </td> + {/if} +</tr> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl new file mode 100644 index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl @@ -0,0 +1,20 @@ +{if $sectionTitle} + <h2>{$sectionTitle}</h2> +{/if} +<table style="width: 100%;"> + <thead> + <tr> + {foreach from=$headerColumns item=title key=columnName} + {if (!in_array($columnName, $hiddenFields))} + <th>{$title|htmlentities}</th> + {/if} + {/foreach} + <th styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + "> + {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if} + </th> + </tr> + </thead> + {$rows} +</table> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2c1c8f40babb53e5a92c821369ba762cdc5d2843 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl @@ -0,0 +1,18 @@ +<html> +<head> + <title>{$dataProcessor.title}</title> +</head> +<body> +<style> + {literal} + table { border-collapse: collapse; margin-bottom: 2em;} + th, td { border: 1px solid black; padding-left: 4px; padding-right: 4px; } + {/literal} +</style> +<h1>{$dataProcessor.title}</h1> +{if $configuration.header} + {$configuration.header} +{/if} +{$content} +</body> +</html> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl @@ -0,0 +1,15 @@ +<tr> + {foreach from=$record item=value key=field} + {if (!in_array($field, $hiddenFields))} + <td>{$value->formattedValue|htmlentities}</td> + {/if} + {/foreach} + {if (isset($configuration.additional_column) && $configuration.additional_column)} + <td styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if} + "> + + </td> + {/if} +</tr> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl new file mode 100644 index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl @@ -0,0 +1,20 @@ +{if $sectionTitle} + <h2>{$sectionTitle}</h2> +{/if} +<table style="width: 100%;"> + <thead> + <tr> + {foreach from=$headerColumns item=title key=columnName} + {if (!in_array($columnName, $hiddenFields))} + <th>{$title|htmlentities}</th> + {/if} + {/foreach} + <th styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + "> + {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if} + </th> + </tr> + </thead> + {$rows} +</table> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt new file mode 100644 index 0000000000000000000000000000000000000000..50dee6e0d9c9735d0d0582887419ab78d67d23d0 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt @@ -0,0 +1 @@ +Default Full Border diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e13dfd6214c611cf0d76e9fedb528a01de6be576 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl @@ -0,0 +1,18 @@ +<html> +<head> + <title>{$dataProcessor.title}</title> +</head> +<body> +<style> + {literal} + table { border-collapse: collapse; margin-bottom: 2em;} + th, td { border: none; } + {/literal} +</style> +<h1>{$dataProcessor.title}</h1> +{if $configuration.header} + {$configuration.header} +{/if} +{$content} +</body> +</html> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl @@ -0,0 +1,15 @@ +<tr> + {foreach from=$record item=value key=field} + {if (!in_array($field, $hiddenFields))} + <td>{$value->formattedValue|htmlentities}</td> + {/if} + {/foreach} + {if (isset($configuration.additional_column) && $configuration.additional_column)} + <td styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if} + "> + + </td> + {/if} +</tr> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl new file mode 100644 index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl @@ -0,0 +1,20 @@ +{if $sectionTitle} + <h2>{$sectionTitle}</h2> +{/if} +<table style="width: 100%;"> + <thead> + <tr> + {foreach from=$headerColumns item=title key=columnName} + {if (!in_array($columnName, $hiddenFields))} + <th>{$title|htmlentities}</th> + {/if} + {/foreach} + <th styile=" + {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if} + "> + {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if} + </th> + </tr> + </thead> + {$rows} +</table> diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt new file mode 100644 index 0000000000000000000000000000000000000000..2613c7c24403df1420422a15ac504418cfc7e5a6 --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt @@ -0,0 +1 @@ +Default Without Border diff --git a/templates/CRM/DataprocessorOutputExport/PDF/README.md b/templates/CRM/DataprocessorOutputExport/PDF/README.md new file mode 100644 index 0000000000000000000000000000000000000000..56009aba20ad552790b689b823c776215983520b --- /dev/null +++ b/templates/CRM/DataprocessorOutputExport/PDF/README.md @@ -0,0 +1,9 @@ +# PDF Template + +You can customize PDF templates by copying one of the subfolders and pasting it in your extension in the directory +CRM/DataProcessorOutputExport/PDF and give it a custom name. +The file title.txt contains the title for this template. + +## Why would you do this? + +You can do this if you need a different layout. e.g. the style of table is not what you are looking for.