403Webshell
Server IP : 138.197.176.125  /  Your IP : 216.73.217.54
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux SuiteCRM-8 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.3.19
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/crest/modules/PDFMaker/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/crest/modules/PDFMaker/models/PDFMaker.php
<?php

/* * *******************************************************************************
 * The content of this file is subject to the PDF Maker Free license.
 * ("License"); You may not use this file except in compliance with the License
 * The Initial Developer of the Original Code is IT-Solutions4You s.r.o.
 * Portions created by IT-Solutions4You s.r.o. are Copyright(C) IT-Solutions4You s.r.o.
 * All Rights Reserved.
 * ****************************************************************************** */

class PDFMaker_PDFMaker_Model extends Vtiger_Module_Model {

    private $version_type = "Free";
    private $version_no;
    private $basicModules;
    private $pageFormats;
    var $log;
    var $db;

    function __construct() {
        PDFMaker_Debugger_Model::GetInstance()->Init();

        global $log;

        $this->log = $log;
        $this->db = PearDatabase::getInstance();

        $this->basicModules = array("20", "21", "22", "23");
        $this->name = "PDFMaker";
        $this->id = getTabId("PDFMaker");

        $_SESSION['KCFINDER']['uploadURL'] = "test/upload";
        $_SESSION['KCFINDER']['uploadDir'] = "../test/upload";
    }

    //Getters and Setters
    public function GetVersionType() {
        return $this->version_type;
    }

    public function GetPageFormats() {
        return $this->pageFormats;
    }

    public function GetBasicModules() {
        return $this->basicModules;
    }
    //ListView data
    public function GetListviewData() {
        $R_Atr = array('Invoice','Quotes','SalesOrder','PurchaseOrder');
        $sql = "SELECT vtiger_pdfmaker.templateid, vtiger_pdfmaker.description, vtiger_pdfmaker.module
                FROM vtiger_pdfmaker LEFT JOIN vtiger_pdfmaker_settings USING(templateid) WHERE module IN (?, ?, ?, ?)";
        $result = $this->db->pquery($sql, $R_Atr);

        $return_data = Array();
        $num_rows = $this->db->num_rows($result);

        for ($i = 0; $i < $num_rows; $i++) {
            $currModule = $this->db->query_result($result, $i, 'module');
            $templateid = $this->db->query_result($result, $i, 'templateid');

            $pdftemplatearray = array();
            $pdftemplatearray['templateid'] = $templateid;
            $pdftemplatearray['description'] = $this->db->query_result($result, $i, 'description');
            $pdftemplatearray['module'] = vtranslate($currModule, $currModule);
            $pdftemplatearray['edit'] = "<li><a href=\"index.php?module=PDFMaker&view=EditFree&return_view=List&templateid=" . $templateid . "\">" . vtranslate("LBL_EDIT", $MODULE) . "</a></li>";
              $return_data [] = $pdftemplatearray;
        }

        return $return_data;
    }

    //DetailView data
    public function GetDetailViewData($templateid) {
        $R_Atr = array($templateid, 'SalesOrder','Invoice','Quotes','PurchaseOrder');
        $sql = "SELECT vtiger_pdfmaker.*, vtiger_pdfmaker_settings.*
			FROM vtiger_pdfmaker
                        LEFT JOIN vtiger_pdfmaker_settings USING(templateid)
			WHERE vtiger_pdfmaker.templateid=? AND vtiger_pdfmaker.module IN (?, ?, ?, ?)";

        $result = $this->db->pquery($sql, $R_Atr);
        $pdftemplateResult = $this->db->fetch_array($result);

        $pdftemplateResult["templateid"] = $templateid;
        return $pdftemplateResult;
    }

    //EditView data
    public function GetEditViewData($templateid) {
        $sql = "SELECT vtiger_pdfmaker.*, vtiger_pdfmaker_settings.*
    			FROM vtiger_pdfmaker
    			LEFT JOIN vtiger_pdfmaker_settings USING(templateid)
    			WHERE vtiger_pdfmaker.templateid=?";

        $result = $this->db->pquery($sql, array($templateid));
        $pdftemplateResult = $this->db->fetch_array($result);
        return $pdftemplateResult;
    }

    //function for getting the mPDF object that contains prepared HTML output
    //returns the name of output filename - the file can be generated by calling mPDF->Output(..) method
    public function GetPreparedMPDF(&$mpdf, $record, $module, $language) {
        require_once("modules/PDFMaker/resources/pdfjs.php");

        $focus = CRMEntity::getInstance($module);

        foreach ($focus->column_fields as $cf_key => $cf_value) {
            $focus->column_fields[$cf_key] = '';
        }

        $focus->retrieve_entity_info($record, $module);
        $focus->id = $record;

        $PDFContent = $this->GetPDFContentRef($module, $focus, $language);
        $Settings = $PDFContent->getSettingsForModule($module);

        $pdf_content = $PDFContent->getContent();

        $header_html = $pdf_content["header"];
        $body_html = $pdf_content["body"];
        $footer_html = $pdf_content["footer"];

        // we need to set orientation for mPDF constructor in case of Custom format (array(width, length)) as well as we need to
        // set orientation for <pagebreak ... /> contruction
        if ($Settings["orientation"] == "landscape"){
            $orientation = "L";
        } else {
            $orientation = "P";
        }

        $format = $Settings["format"];  // variable $format used in mPDF constructor
        $formatPB = $format;            // variable $formatPB used in <pagebreak ... /> contruction
        if (strpos($format, ";") > 0) {
            $tmpArr = explode(";", $format);
            $format = array($tmpArr[0], $tmpArr[1]);
            $formatPB = $format[0] . "mm " . $format[1] . "mm";
        } elseif ($Settings["orientation"] == "landscape") {
            $format .= "-L";
            $formatPB .= "-L";
        }

        $mpdf = new ITS4You_PDFMaker_JavaScript('', $format, '', '', $Settings["margin_left"], $Settings["margin_right"], 0, 0, $Settings["margin_top"], $Settings["margin_bottom"], $orientation);
        if (mPDF_VERSION == 5.6) {
            $mpdf->SetAutoFont();
        }

        $this->mpdf_prepare_header_footer_settings($mpdf, $Settings);
        @$mpdf->SetHTMLHeader($header_html);
        @$mpdf->SetHTMLFooter($footer_html);
        @$mpdf->WriteHTML($body_html);

        $name = $this->GenerateName($record, $module);

        $name = str_replace(array(' ', '/', ','), array('-', '-', '-'), $name);
        return $name;
    }

    public function GenerateName($record, $module) {

        $focus = CRMEntity::getInstance($module);
        $focus->retrieve_entity_info($record, $module);

        $module_tabid = getTabId($module);
        $result = $this->db->pquery("SELECT fieldname FROM vtiger_field WHERE uitype=? AND tabid=?", array('4',$module_tabid));
        $fieldname = $this->db->query_result($result, 0, "fieldname");
        if (isset($focus->column_fields[$fieldname]) && $focus->column_fields[$fieldname] != "") {
            $name = $this->generate_cool_uri($focus->column_fields[$fieldname]);
        } else {
            $templatesStr = implode("_", $templates);
            $recordsStr = implode("_", $record);
            $name = $templatesStr . $recordsStr . date("ymdHi");
        }
        return $name;
    }

    public function GetPDFContentRef($module, $focus, $language) {
        return new PDFMaker_PDFContent_Model($module, $focus, $language);
    }

    public function DeleteAllRefLinks() {
        require_once('vtlib/Vtiger/Link.php');
        $link_res = $this->db->pquery("SELECT tabid FROM vtiger_tab WHERE isentitytype=?", array('1'));
        while ($link_row = $this->db->fetchByAssoc($link_res)) {
            Vtiger_Link::deleteLink($link_row["tabid"], "DETAILVIEWWIDGET", "PDFMaker");
            Vtiger_Link::deleteLink($link_row["tabid"], "LISTVIEWMASSACTION", "PDF Export", 'javascript:getPDFListViewPopup2(this,\'$MODULE$\');');
        }
    }

    public function AddHeaderLinks() {
        require_once('vtlib/Vtiger/Module.php');
        $link_module = Vtiger_Module::getInstance("PDFMaker");
        $link_module->addLink('HEADERSCRIPT', 'PDFMakerJS', 'layouts/v7/modules/PDFMaker/resources/PDFMakerActions.js', "", "1");
    }

    public function actualizeLinks() {
        $this->AddHeaderLinks();
    }

    private function mpdf_prepare_header_footer_settings(&$mpdf, &$Settings) {

        $disp_header = $Settings["disp_header"];
        $disp_optionsArr = array("dh_first", "dh_other");
        $disp_header_bin = str_pad(base_convert($disp_header, 10, 2), 2, "0", STR_PAD_LEFT);
        for ($i = 0; $i < count($disp_optionsArr); $i++) {
            if (substr($disp_header_bin, $i, 1) == "1")
                $mpdf->PDFMakerDispHeader[$disp_optionsArr[$i]] = true;
            else
                $mpdf->PDFMakerDispHeader[$disp_optionsArr[$i]] = false;
        }

        $disp_footer = $Settings["disp_footer"];
        $disp_optionsArr = array("df_first", "df_last", "df_other");
        $disp_footer_bin = str_pad(base_convert($disp_footer, 10, 2), 3, "0", STR_PAD_LEFT);
        for ($i = 0; $i < count($disp_optionsArr); $i++) {
            if (substr($disp_footer_bin, $i, 1) == "1")
                $mpdf->PDFMakerDispFooter[$disp_optionsArr[$i]] = true;
            else
                $mpdf->PDFMakerDispFooter[$disp_optionsArr[$i]] = false;
        }
    }

    public function GetAvailableSettings() {
        $menu_array = array();
        return $menu_array;
    }

    public function GetProductBlockFields($select_module = "") {
        $current_user = Users_Record_Model::getCurrentUserModel();
        $result = array();
        //Product block
        $Article_Strings = array("" => vtranslate("LBL_PLS_SELECT", "PDFMaker"),
            vtranslate("LBL_PRODUCTS_AND_SERVICES", "PDFMaker") => array(
                "PRODUCTBLOC_START" => vtranslate("LBL_ARTICLE_START", "PDFMaker"),
                "PRODUCTBLOC_END" => vtranslate("LBL_ARTICLE_END", "PDFMaker")),
            vtranslate("LBL_PRODUCTS_ONLY", "PDFMaker") => array(
                "PRODUCTBLOC_PRODUCTS_START" => vtranslate("LBL_ARTICLE_START", "PDFMaker"),
                "PRODUCTBLOC_PRODUCTS_END" => vtranslate("LBL_ARTICLE_END", "PDFMaker")),
            vtranslate("LBL_SERVICES_ONLY", "PDFMaker") => array(
                "PRODUCTBLOC_SERVICES_START" => vtranslate("LBL_ARTICLE_START", "PDFMaker"),
                "PRODUCTBLOC_SERVICES_END" => vtranslate("LBL_ARTICLE_END", "PDFMaker")),
        );
        $result["ARTICLE_STRINGS"] = $Article_Strings;

        //Common fields for product and services
        $Product_Fields = array("PS_CRMID" => vtranslate("LBL_RECORD_ID", "PDFMaker"),
            "PS_NO" => vtranslate("LBL_PS_NO", "PDFMaker"),
            "PRODUCTPOSITION" => vtranslate("LBL_PRODUCT_POSITION", "PDFMaker"),
            "CURRENCYNAME" => vtranslate("LBL_CURRENCY_NAME", "PDFMaker"),
            "CURRENCYCODE" => vtranslate("LBL_CURRENCY_CODE", "PDFMaker"),
            "CURRENCYSYMBOL" => vtranslate("LBL_CURRENCY_SYMBOL", "PDFMaker"),
            "PRODUCTNAME" => vtranslate("LBL_VARIABLE_PRODUCTNAME", "PDFMaker"),
            "PRODUCTTITLE" => vtranslate("LBL_VARIABLE_PRODUCTTITLE", "PDFMaker"),
            "PRODUCTEDITDESCRIPTION" => vtranslate("LBL_VARIABLE_PRODUCTEDITDESCRIPTION", "PDFMaker"),
            "PRODUCTDESCRIPTION" => vtranslate("LBL_VARIABLE_PRODUCTDESCRIPTION", "PDFMaker")
        );

        if ($this->db->num_rows($this->db->query("SELECT tabid FROM vtiger_tab WHERE name='Pdfsettings'")) > 0)
            $Product_Fields["CRMNOWPRODUCTDESCRIPTION"] = vtranslate("LBL_CRMNOW_DESCRIPTION", "PDFMaker");

        $Product_Fields["PRODUCTQUANTITY"] = vtranslate("LBL_VARIABLE_QUANTITY", "PDFMaker");
        $Product_Fields["PRODUCTUSAGEUNIT"] = vtranslate("LBL_VARIABLE_USAGEUNIT", "PDFMaker");
        $Product_Fields["PRODUCTLISTPRICE"] = vtranslate("LBL_VARIABLE_LISTPRICE", "PDFMaker");
        $Product_Fields["PRODUCTTOTAL"] = vtranslate("LBL_PRODUCT_TOTAL", "PDFMaker");
        $Product_Fields["PRODUCTDISCOUNT"] = vtranslate("LBL_VARIABLE_DISCOUNT", "PDFMaker");
        $Product_Fields["PRODUCTDISCOUNTPERCENT"] = vtranslate("LBL_VARIABLE_DISCOUNT_PERCENT", "PDFMaker");
        $Product_Fields["PRODUCTSTOTALAFTERDISCOUNT"] = vtranslate("LBL_VARIABLE_PRODUCTTOTALAFTERDISCOUNT", "PDFMaker");
        $Product_Fields["PRODUCTVATPERCENT"] = vtranslate("LBL_PRODUCT_VAT_PERCENT", "PDFMaker");
        $Product_Fields["PRODUCTVATSUM"] = vtranslate("LBL_PRODUCT_VAT_SUM", "PDFMaker");
        $Product_Fields["PRODUCTTOTALSUM"] = vtranslate("LBL_PRODUCT_TOTAL_VAT", "PDFMaker");

        if ($select_module != "") {

            $sql1 = "SELECT * FROM vtiger_inventorytaxinfo";
            $result1 = $this->db->pquery($sql1, array());

            while ($row1 = $this->db->fetchByAssoc($result1)) {
                $Taxes[$row1["taxname"]] = $row1["taxlabel"];
            }

            $select_moduleid = getTabid($select_module);

            $sql2 = "SELECT fieldname, fieldlabel, uitype FROM vtiger_field WHERE tablename = ? AND tabid = ? AND fieldname NOT IN ('productid','quantity','listprice','comment','discount_amount','discount_percent')";
            $result2 = $this->db->pquery($sql2, array("vtiger_inventoryproductrel",$select_moduleid));

            while ($row2 = $this->db->fetchByAssoc($result2)) {

                if ($row2["uitype"] == "83") {
                    $label = vtranslate("Tax");
                    $label .= " (";
                    $label .= vtranslate($Taxes[$row2["fieldname"]], $select_module);
                    $label .= ")";
                } else {
                    $label = vtranslate($row2["fieldlabel"], $select_module);
                }
                $Product_Fields["PRODUCT_".strtoupper($row2["fieldname"])] = $label;
            }
        }
        $result["SELECT_PRODUCT_FIELD"] = $Product_Fields;

        //Available fields for products
        $prod_fields = array();
        $serv_fields = array();

        $in = getTabId('Products');
        $in .= ', ' . getTabId('Services');

        $sql = "SELECT  t.tabid, t.name,
                        b.blockid, b.blocklabel,
                        f.fieldname, f.fieldlabel
                FROM vtiger_tab AS t
                INNER JOIN vtiger_blocks AS b USING(tabid)
                INNER JOIN vtiger_field AS f ON b.blockid = f.block
                WHERE t.tabid IN (" . $in . ")
                    AND (f.displaytype != 3 OR f.uitype = 55)
                ORDER BY t.name ASC, b.sequence ASC, f.sequence ASC, f.fieldid ASC";
        $res = $this->db->pquery($sql,array());
        while ($row = $this->db->fetchByAssoc($res)) {
            $module = $row["name"];
            $fieldname = $row["fieldname"];
            if (getFieldVisibilityPermission($module, $current_user->id, $fieldname) != '0')
                continue;

            $trans_field_nam = strtoupper($module) . "_" . strtoupper($fieldname);
            switch ($module) {
                case "Products":
                    $trans_block_lbl = vtranslate($row["blocklabel"], 'Products');
                    $trans_field_lbl = vtranslate($row["fieldlabel"], 'Products');
                    $prod_fields[$trans_block_lbl][$trans_field_nam] = $trans_field_lbl;
                    break;

                case "Services":
                    $trans_block_lbl = vtranslate($row["blocklabel"], 'Services');
                    $trans_field_lbl = vtranslate($row["fieldlabel"], 'Services');
                    $serv_fields[$trans_block_lbl][$trans_field_nam] = $trans_field_lbl;
                    break;

                default:
                    continue;
            }
        }

        $result["PRODUCTS_FIELDS"] = $prod_fields;
        $result["SERVICES_FIELDS"] = $serv_fields;

        return $result;
    }

     /**
     * Function to get the Quick Links for the module
     * @param <Array> $linkParams
     * @return <Array> List of Vtiger_Link_Model instances
     */
    public function getSideBarLinks($linkParams) {
        $currentUserModel = Users_Record_Model::getCurrentUserModel();

        $type = "SIDEBARLINK";
        $quickLinks = array();


        if ($linkParams["ACTION"] == "ProfilesPrivilegies") {
            $quickSLinks = array(
                'linktype' => "SIDEBARLINK",
                'linklabel' => "LBL_RECORDS_LIST",
                'linkurl' => "index.php?module=PDFMaker&view=List",
                'linkicon' => '');

            $links["SIDEBARLINK"][] = Vtiger_Link_Model::getInstanceFromValues($quickSLinks);
        } elseif ($linkParams["ACTION"] == "IndexAjax" && $linkParams["MODE"] == "showSettingsList") {

            if($currentUserModel->isAdminUser()) {
                $SettingsLinks = $this->GetAvailableSettings();

                foreach($SettingsLinks as $stype => $sdata) {

                    $quickLinks[] = array(
                        'linktype' => 'SIDEBARLINK',
                        'linklabel' => $sdata["label"],
                        'linkurl' => $sdata["location"],
                        'linkicon' => '');
                }
            }
        } else {
            $linkTypes = array('SIDEBARLINK', 'SIDEBARWIDGET');
            $links = Vtiger_Link_Model::getAllByType($this->getId(), $linkTypes, $linkParams);

            $quickLinks[] = array(
                'linktype' => 'SIDEBARLINK',
                'linklabel' => 'LBL_RECORDS_LIST',
                'linkurl' => $this->getListViewUrl(),
                'linkicon' => '',
            );
        }

        if (count($quickLinks) > 0) {
            foreach ($quickLinks as $quickLink) {
                $links[$type][] = Vtiger_Link_Model::getInstanceFromValues($quickLink);
            }
        }

        if($currentUserModel->isAdminUser() && $linkParams["ACTION"] != "Edit" && $linkParams["ACTION"] != "Detail") {
            $quickS2Links = array(
                'linktype' => "SIDEBARWIDGET",
                'linklabel' => "LBL_SETTINGS",
                'linkurl' => "module=PDFMaker&view=IndexAjax&mode=showSettingsList&pview=".$linkParams["ACTION"],
                'linkicon' => '');
            $links["SIDEBARWIDGET"][] = Vtiger_Link_Model::getInstanceFromValues($quickS2Links);
        }

        return $links;
    }

    function generate_cool_uri($name) {
        $Search = array("$", "€", "&", "%", ")", "(", ".", " - ", "/", " ", ",", "ľ", "š", "č", "ť", "ž", "ý", "á", "í", "é", "ó", "ö", "ů", "ú", "ü", "ä", "ň", "ď", "ô", "ŕ", "Ľ", "Š", "Č", "Ť", "Ž", "Ý", "Á", "Í", "É", "Ó", "Ú", "Ď", "\"", "°", "ß");
        $Replace = array("", "", "", "", "", "", "-", "-", "-", "-", "-", "l", "s", "c", "t", "z", "y", "a", "i", "e", "o", "o", "u", "u", "u", "a", "n", "d", "o", "r", "l", "s", "c", "t", "z", "y", "a", "i", "e", "o", "u", "d", "", "", "ss");
        $return = str_replace($Search, $Replace, $name);
        // echo $return;
        return $return;
    }

    public function getDetailViewLinks($templateid = ''){
        $linkTypes = array('DETAILVIEWTAB');
        $detail_url = 'index.php?module=PDFMaker&view=DetailFree&templateid='.$templateid.'&record=t'.$templateid;

        $detailViewLinks = array(
            array('linktype' => 'DETAILVIEWTAB',
                'linklabel' => vtranslate('LBL_PROPERTIES','PDFMaker'),
                'linkurl' => $detail_url,
                'linkicon' => '')
        );
        foreach ($detailViewLinks as $detailViewLink){
            $linkModelList['DETAILVIEWTAB'][] = Vtiger_Link_Model::getInstanceFromValues($detailViewLink);
        }

        return $linkModelList;
    }

    public static function getSimpleHtmlDomFile()
    {
        if (!class_exists('simple_html_dom_node')) {
            $pdfmaker_simple_html_dom = "modules/PDFMaker/resources/simple_html_dom/simple_html_dom.php";
            $emailmaker_simple_html_dom = "modules/EMAILMaker/resources/simple_html_dom/simple_html_dom.php";

            if (file_exists($pdfmaker_simple_html_dom)) {
                $file = $pdfmaker_simple_html_dom;
            } elseif (file_exists($emailmaker_simple_html_dom)) {
                $file = $emailmaker_simple_html_dom;
            } else {
                $file = 'include/simplehtmldom/simple_html_dom.php';
            }
        }

        if (!empty($file)) {
            require_once $file;
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit