vtenext/modules/PDFMaker/PDFMaker.php
2021-04-28 20:10:26 +02:00

251 lines
11 KiB
PHP

<?php
/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
//crmv@17889 //crmv@19166
class PDFMaker {
function __construct() {}
function vtlib_handler($modulename, $event_type) {
global $table_prefix;
if($event_type == 'module.postinstall') {
global $adb;
$adb->pquery('UPDATE '.$table_prefix.'_tab SET customized=0 WHERE name=?', array($modulename));
$this->importStandardLayouts();
$this->importProdBlockTemplates(); // crmv@120993
$moduleInstance = Vtecrm_Module::getInstance($modulename);
$res = $adb->query('SELECT profileid FROM '.$table_prefix.'_profile');
while ($row = $adb->fetchByAssoc($res)) {
$adb->pquery('INSERT INTO '.$table_prefix.'_profile2standardperm(profileid,tabid,Operation,permissions) VALUES (?,?,?,?)',array($row['profileid'],$moduleInstance->id,0,0));
$adb->pquery('INSERT INTO '.$table_prefix.'_profile2standardperm(profileid,tabid,Operation,permissions) VALUES (?,?,?,?)',array($row['profileid'],$moduleInstance->id,1,0));
$adb->pquery('INSERT INTO '.$table_prefix.'_profile2standardperm(profileid,tabid,Operation,permissions) VALUES (?,?,?,?)',array($row['profileid'],$moduleInstance->id,2,0));
$adb->pquery('INSERT INTO '.$table_prefix.'_profile2standardperm(profileid,tabid,Operation,permissions) VALUES (?,?,?,?)',array($row['profileid'],$moduleInstance->id,3,0));
$adb->pquery('INSERT INTO '.$table_prefix.'_profile2standardperm(profileid,tabid,Operation,permissions) VALUES (?,?,?,?)',array($row['profileid'],$moduleInstance->id,4,0));
}
$sql1 = "SELECT module FROM ".$table_prefix."_pdfmaker GROUP BY module";
$result1 = $adb->query($sql1);
while($row = $adb->fetchByAssoc($result1))
{
$relModuleInstance = Vtecrm_Module::getInstance($row["module"]);
Vtecrm_Link::addLink($relModuleInstance->id, 'LISTVIEWBASIC', 'PDF Export', "VTE.PDFMakerActions.getPDFListViewPopup2(this,'$"."MODULE$');", '', 1);
Vtecrm_Link::addLink($relModuleInstance->id, 'DETAILVIEWWIDGET', 'PDFMaker', "module=PDFMaker&action=PDFMakerAjax&file=getPDFActions&record=$"."RECORD$", '', 1);
}
SDK::setMenuButton('contestual','LBL_ADD_TEMPLATE','window.location=\'index.php?module=PDFMaker&action=EditPDFTemplate\';','add','PDFMaker','index');
SDK::setMenuButton('contestual','LBL_IMPORT','window.location=\'index.php?module=PDFMaker&action=ImportPDFTemplate\';','file_download','PDFMaker','index');
SDK::setMenuButton('contestual','LBL_EXPORT','return VTE.PDFMaker.ExportTemplates();','file_upload','PDFMaker','index'); // crmv@158392
SDK::setMenuButton('contestual','LBL_IMPORT','window.location=\'index.php?module=PDFMaker&action=ImportPDFTemplate\';','file_download','PDFMaker','ListPDFTemplates');
SDK::setMenuButton('contestual','LBL_EXPORT','return VTE.PDFMaker.ExportTemplates();','file_upload','PDFMaker','ListPDFTemplates'); // crmv@158392
global $php_max_execution_time;
set_time_limit($php_max_execution_time);
RecalculateSharingRules();
} else if($event_type == 'module.disabled') {
// TODO Handle actions when this module is disabled.
} else if($event_type == 'module.enabled') {
// TODO Handle actions when this module is enabled.
} else if($event_type == 'module.preuninstall') {
// TODO Handle actions when this module is about to be deleted.
} else if($event_type == 'module.preupdate') {
// TODO Handle actions before this module is updated.
} else if($event_type == 'module.postupdate') {
// TODO Handle actions after this module is updated.
}
}
// crmv@39106
function generatePDFForEmail($idslist, $module, $templateids, $language = null) {
require_once("modules/PDFMaker/InventoryPDF.php");
require_once("include/mpdf/mpdf.php"); //crmv@30066
global $adb, $table_prefix, $current_user, $current_language;
if (!is_array($idslist)) $idslist = array($idslist);
if (!is_array($templateids)) $templateids = array($templateids);
if (empty($language)) $language = $current_language;
$modFocus = CRMEntity::getInstance($module);
$name = "";
foreach($idslist as $record)
{
$modFocus->retrieve_entity_info($record,$module);
$modFocus->id = $record;
foreach ($templateids as $templateid)
{
$PDFContent = PDFContent::getInstance($templateid, $module, $modFocus, $language); //crmv@34738
$pdf_content = $PDFContent->getContent();
$Settings = $PDFContent->getSettings();
if($name=="")
$name = $PDFContent->getFilename();
// crmv@104506
// no decoding from html, like in checkGenerate file
$header_html = $pdf_content["header"];
$body_html = $pdf_content["body"];
$footer_html = $pdf_content["footer"];
// crmv@104506e
$body_html = str_replace("#LISTVIEWBLOCK_START#","",$body_html);
$body_html = str_replace("#LISTVIEWBLOCK_END#","",$body_html);
//$encoding = $Settings["encoding"];
if ($Settings["orientation"] == "landscape")
$format = $Settings["format"]."-L";
else
$format = $Settings["format"];
if (!isset($mpdf)) {
$mpdf=new mPDF('',$format,'','Arial',$Settings["margin_left"],$Settings["margin_right"],0,0,$Settings["margin_top"],$Settings["margin_bottom"]);
$mpdf->SetAutoFont();
@$mpdf->SetHTMLHeader($header_html);
} else {
@$mpdf->SetHTMLHeader($header_html);
@$mpdf->WriteHTML('<pagebreak sheet-size="'.$format.'" margin-left="'.$Settings["margin_left"].'mm" margin-right="'.$Settings["margin_right"].'mm" margin-top="0mm" margin-bottom="0mm" margin-header="'.$Settings["margin_top"].'mm" margin-footer="'.$Settings["margin_bottom"].'mm" />');
}
@$mpdf->SetHTMLFooter($footer_html);
@$mpdf->WriteHTML($body_html);
}
if ($name=="") {
if (count($idslist)>1) {
$name="BatchPDF";
} else {
$result = $adb->pquery("SELECT fieldname FROM {$table_prefix}_field WHERE uitype=4 AND tabid = ?", array(getTabId($module)));
$fieldname = $adb->query_result_no_html($result,0,"fieldname");
if (isset($focus->column_fields[$fieldname]) && $focus->column_fields[$fieldname] != "") {
$name = generate_cool_uri($focus->column_fields[$fieldname]);
} else {
$name = implode(';', $templateids).';'.$record.date("ymdHi");
$name = str_replace(";","_",$name);
}
}
}
$name .= '_'.date("ymdHis"); // crmv@101674
$file = 'storage/'.$name.'.pdf';
if (file_exists($file)) unlink($file);
$mpdf->Output($file);
}
return $name;
}
// crmv@39106e
function importStandardLayouts() {
global $adb, $table_prefix;
$tmp_file_name = 'modules/PDFMaker/StandardLayouts.xml';
$fh = fopen($tmp_file_name,"r");
$xml_content = fread($fh, filesize($tmp_file_name));
fclose($fh);
$type = "professional";
$xml = new SimpleXMLElement($xml_content);
foreach ($xml->template AS $data)
{
$filename = $this->cdataDecode($data->templatename);
$nameOfFile = $this->cdataDecode($data->filename);
$description = $this->cdataDecode($data->description);
$modulename = $this->cdataDecode($data->module);
$pdf_format = $this->cdataDecode($data->settings->format);
$pdf_orientation = $this->cdataDecode($data->settings->orientation);
$tabid = getTabId($modulename);
if ($type == "professional" || $tabid == "20" || $tabid == "21" || $tabid == "22" || $tabid == "23")
{
if ($data->settings->margins->top > 0) $margin_top = $data->settings->margins->top; else $margin_top = 0;
if ($data->settings->margins->bottom > 0) $margin_bottom = $data->settings->margins->bottom; else $margin_bottom = 0;
if ($data->settings->margins->left > 0) $margin_left = $data->settings->margins->left; else $margin_left = 0;
if ($data->settings->margins->right > 0) $margin_right = $data->settings->margins->right; else $margin_right = 0;
$dec_point = $this->cdataDecode($data->settings->decimals->point);
$dec_decimals = $this->cdataDecode($data->settings->decimals->decimals);
$dec_thousands = $this->cdataDecode($data->settings->decimals->thousands);
$header = $this->cdataDecode($data->header);
$body = $this->cdataDecode($data->body);
$footer = $this->cdataDecode($data->footer);
$check = $adb->pquery("SELECT templateid FROM {$table_prefix}_pdfmaker WHERE filename = ? AND module = ?",array($filename,$modulename));
if ($check && $adb->num_rows($check) > 0) {
continue;
}
$templateid = $adb->getUniqueID($table_prefix.'_pdfmaker');
$sql1 = "insert into ".$table_prefix."_pdfmaker (filename,module,description,body,deleted,templateid) values (?,?,?,NULL,?,?)";
$params1 = array($filename, $modulename, $description, 0, $templateid);
$adb->pquery($sql1, $params1);
$adb->updateClob($table_prefix.'_pdfmaker','body',"templateid = $templateid",$body);
$sql2 = "INSERT INTO ".$table_prefix."_pdfmaker_settings (templateid, margin_top, margin_bottom, margin_left, margin_right, format, orientation, decimals, decimal_point, thousands_separator, header, footer, encoding, file_name) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$params2 = array($templateid, $margin_top, $margin_bottom, $margin_left, $margin_right, $pdf_format, $pdf_orientation, $dec_decimals, $dec_point, $dec_thousands, $header, $footer, "auto", $nameOfFile);
$adb->pquery($sql2, $params2);
}
}
}
// crmv@120993
function importProdBlockTemplates() {
global $adb, $table_prefix;
include('modules/PDFMaker/installPBTemplates.php');
}
// crmv@120993e
function cdataDecode($text)
{
$From = array("<|!|[%|CDATA|[%|", "|%]|]|>");
$To = array("<![CDATA[", "]]>");
$decode_text = str_replace($From, $To, $text);
return $decode_text;
}
// crmv@151071
public function getPDFMakerDetails($module, $record) {
global $adb, $table_prefix, $current_user;
$details = array();
$res = $adb->pquery("SELECT p.templateid, p.filename AS templatename, p.module
FROM {$table_prefix}_pdfmaker p
LEFT JOIN {$table_prefix}_pdfmaker_userstatus u ON u.templateid = p.templateid AND u.userid = ?
WHERE (u.is_active IS NULL OR u.is_active = 1) " . ($module ? " AND p.module = ?" : '') . "
ORDER BY p.module, p.filename", array($current_user->id, $module));
if ($res) {
// templates list
$pdflist = array();
while ($row = $adb->FetchByAssoc($res, -1, false)) {
$pdflist[] = $row;
}
$details['templates'] = $pdflist;
$details['actions'] = array('sendemail');
if (isPermitted('Documents', 'EditView') == 'yes') $details['actions'][] = 'savedoc';
}
return $details;
}
// crmv@151071e
}
//crmv@17889e //crmv@19166e
?>