# e2pdf/1.00.00/classes/model/e2pdf-template.php

E2Pdf – Export Pdf Tool for WordPress, version 1.00.00. 538 lines.

- Page: https://pluginprobe.com/plugins/e2pdf/1.00.00/code/classes/model/e2pdf-template.php
- Raw: https://pluginprobe.com/plugins/e2pdf/1.00.00/raw/classes/model/e2pdf-template.php
- Modified: 2018-11-07T14:26:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/e2pdf/1.00.00/code/classes/model/e2pdf-template.php#L10-L20`.

```php
<?php

/**
 * E2pdf Template Model
 * 
 * @copyright  Copyright 2017 https://e2pdf.com
 * @license    GPL v2
 * @version    1
 * @link       https://e2pdf.com
 * @since      0.00.01
 */
if (!defined('ABSPATH')) {
    die('Access denied.');
}

class Model_E2pdf_Template extends Model_E2pdf_Model {

    private $template = array();
    private $table;

    /*
     * On Template init
     */

    function __construct() {
        global $wpdb;
        parent::__construct();
        $this->table = $wpdb->prefix . 'e2pdf_templates';
    }

    /**
     * Load Template by ID
     * 
     * @param int $template_id - ID of template
     */
    public function load($template_id) {
        global $wpdb;
        $template = $wpdb->get_row($wpdb->prepare("SELECT * FROM `{$this->get_table()}` WHERE ID = %d", $template_id), ARRAY_A);
        if ($template) {
            $this->template = $template;
            $this->set('fonts', unserialize($template['fonts']));
            $model_e2pdf_page = new Model_E2pdf_Page();
            $this->set('pages', $model_e2pdf_page->get_pages($this->get('ID')));
            return true;
        }
        return false;
    }

    /**
     * Get loaded Template
     * 
     * @return object
     */
    public function get_template() {
        return $this->template;
    }

    /**
     * Set Template attribute
     * 
     * @param string $key - Attribute Key 
     * @param string $value - Attribute Value 
     */
    public function set($key, $value) {
        $this->template[$key] = $value;
    }

    /**
     * Get Template attribute by Key
     * 
     * @param string $key - Attribute Key 
     * 
     * @return mixed
     */
    public function get($key) {
        if (isset($this->template[$key])) {
            $value = $this->template[$key];
            return $value;
        } else {

            switch ($key) {

                case 'title':
                    $value = __("(no title)", 'e2pdf');
                    break;

                case 'flatten':
                case 'width':
                case 'height':
                case 'inline':
                case 'auto':
                case 'trash':
                case 'locked':
                case 'activated':
                    $value = 0;
                    break;

                case 'appearance':
                    $value = 1;
                    break;

                case 'compression':
                    $value = -1;
                    break;

                case 'format':
                    $value = 'pdf';
                    break;

                case 'fonts':
                    $value = array();
                    break;

                default:
                    $value = '';
                    break;
            }
            return $value;
        }
    }

    /**
     * Get Templates table
     * 
     * @return string
     */
    public function get_table() {
        return $this->table;
    }

    /**
     * Delete loaded template
     */
    public function delete() {
        global $wpdb;
        if ($this->get('ID')) {
            if ($this->get('pdf')) {
                $pdf_dir = $this->helper->get('pdf_dir') . $this->get('pdf') . "/";
                $this->helper->delete_dir($pdf_dir);
            }

            $tpl_dir = $this->helper->get('tpl_dir') . $this->get('ID') . "/";
            $this->helper->delete_dir($tpl_dir);

            $where = array(
                'ID' => $this->get('ID')
            );
            $wpdb->delete($this->get_table(), $where);

            foreach ($this->get('pages') as $page) {
                $model_e2pdf_page = new Model_E2pdf_Page();
                $model_e2pdf_page->load($page['ID']);
                $model_e2pdf_page->delete();
            }
        }
    }

    /**
     * Save template
     */
    public function save($rebuild = false) {
        global $wpdb;
        $template = $this->pre_save();

        if ($this->get('ID')) {
            $where = array(
                'ID' => $this->get('ID')
            );
            $wpdb->update($this->get_table(), $template, $where);
        } else {
            $wpdb->insert($this->get_table(), $template);
            $this->set('ID', $wpdb->insert_id);
        }


        if ($this->get('ID') && $rebuild) {
            $this->flush();
            $helper_e2pdf_sort = new Helper_E2pdf_Sort();
            foreach ($this->get('pages') as $page_key => $page_value) {
                $page = new Model_E2pdf_Page();
                if (isset($page_value['ID'])) {
                    unset($page_value['ID']);
                }
                foreach ($page_value as $page_value_key => $page_value_value) {
                    $page->set($page_value_key, $page_value_value);
                }

                /*
                 * @since 0.01.63
                 */
                if (!$page_value['actions']) {
                    $page_actions = array();
                } else {
                    $page_actions = $page_value['actions'];
                }
                $page->set('actions', $page_actions);

                $page->set('template_id', $this->get('ID'));
                $page->set('page_id', $page_key);
                $page->save();

                if (isset($page_value['elements'])) {

                    $helper_e2pdf_sort->stable_uasort($page_value['elements'], "sort_by_zindex");

                    foreach ($page_value['elements'] as $element_key => $element_value) {
                        if (isset($element_value['ID'])) {
                            unset($element_value['ID']);
                        }
                        $element = new Model_E2pdf_Element();
                        foreach ($element_value as $element_value_key => $element_value_value) {
                            $element->set($element_value_key, $element_value_value);
                        }

                        if (!$element_value['properties']) {
                            $element_properties = array();
                        } else {
                            $element_properties = $element_value['properties'];
                        }
                        $element->set('properties', $element_properties);

                        /*
                         * @since 0.01.63
                         */
                        if (!$element_value['actions']) {
                            $element_actions = array();
                        } else {
                            $element_actions = $element_value['actions'];
                        }
                        $element->set('actions', $element_actions);

                        $element->set('page_id', $page->get('ID'));
                        $element->set('template_id', $this->get('ID'));
                        $element->save();
                    }
                }
            }
        }

        return $this->get('ID');
    }

    /**
     * Before save template
     */
    public function pre_save() {

        $fonts = array();
        $model_e2pdf_font = new Model_E2pdf_Font();

        $all_fonts = $model_e2pdf_font->get_fonts();

        $c_font = array_search($this->get('font'), $all_fonts);
        if ($c_font) {
            $fonts[$c_font] = $this->get('font');
        }

        $pages = $this->get('pages');
        foreach ($pages as $key => $page) {
            if (!empty($page['elements'])) {
                foreach ($page['elements'] as $element_key => $element) {
                    $tmp_fonts = $model_e2pdf_font->get_element_fonts($element, $all_fonts);
                    if (!empty($tmp_fonts)) {
                        $fonts = array_merge($fonts, $tmp_fonts);
                    }
                }
            }
        }

        $this->set('fonts', $fonts);

        $template = array(
            'uid' => $this->get('uid'),
            'title' => $this->get('title'),
            'pdf' => $this->get('pdf'),
            'updated_at' => current_time('mysql', 1),
            'flatten' => $this->get('flatten'),
            'format' => $this->get('format'),
            'compression' => $this->get('compression'),
            'appearance' => $this->get('appearance'),
            'width' => $this->get('width'),
            'height' => $this->get('height'),
            'extension' => $this->get('extension'),
            'item' => $this->get('item'),
            'format' => $this->get('format'),
            'dataset_title' => $this->get('dataset_title'),
            'button_title' => $this->get('button_title'),
            'inline' => $this->get('inline'),
            'auto' => $this->get('auto'),
            'name' => $this->get('name'),
            'password' => $this->get('password'),
            'fonts' => serialize($this->get('fonts')),
            'font' => $this->get('font'),
            'font_size' => $this->get('font_size'),
            'font_color' => $this->get('font_color'),
            'line_height' => $this->get('line_height'),
            'trash' => $this->get('trash'),
            'locked' => $this->get('locked'),
            'activated' => $this->get('activated'),
            'author' => get_current_user_id(),
        );

        if (!$this->get('ID')) {
            $template['created_at'] = current_time('mysql', 1);
        }

        return $template;
    }

    public function fill($dataset = false, $uid = false) {

        $this->set('dataset', $dataset);

        $extension = new Model_E2pdf_Extension();
        $extension->load($this->get('extension'));

        $item = $this->get('item');

        $extension->set('item', $item);
        $extension->set('dataset', $this->get('dataset'));

        if ($uid) {
            $extension->set('uid', $uid);
        }

        do_action('e2pdf_model_template_fill_pre', $this, $extension);

        $action = new Model_E2pdf_Action();
        $action->load($extension);

        $pages = $this->get('pages');
        foreach ($pages as $key => $value) {

            $pages[$key] = $value = $action->process_actions($value);

            if ($value) {
                if (!empty($value['elements'])) {
                    foreach ($value['elements'] as $el_key => $el_value) {
                        if ($el_value['type'] === 'e2pdf-checkbox') {
                            $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render($el_value['properties']['option']);
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-checkbox', $el_value['properties']['option']);
                        } elseif ($el_value['type'] === 'e2pdf-radio') {
                            $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render($el_value['properties']['option']);
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
                        } elseif ($el_value['type'] === 'e2pdf-select') {
                            $pages[$key]['elements'][$el_key]['properties']['options'] = $extension->render($el_value['properties']['options']);
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
                        } elseif ($el_value['type'] === 'e2pdf-html') {
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-html');
                        } elseif ($el_value['type'] === 'e2pdf-image') {
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-image');
                        } else {
                            $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
                        }
                    }
                }
            } else {
                unset($pages[$key]);
            }
        }

        $this->set('name', $extension->render($this->get('name')));
        $this->set('password', $extension->render($this->get('password')));
        $this->set('button_title', $extension->render($this->get('button_title')));
        $this->set('pages', $pages);

        do_action('e2pdf_model_template_fill_after', $this, $extension);
    }

    public function pre_render() {
        $helper_e2pdf_image = new Helper_E2pdf_Image();
        $pages = $this->get('pages');
        foreach ($pages as $key => $page) {
            $page = (array) $page;
            $pages[$key] = $page;
            if (!empty($page['elements'])) {
                foreach ($page['elements'] as $el_key => $el_value) {

                    $el_value = (array) $el_value;
                    $pages[$key]['elements'][$el_key] = $el_value;
                    if ($el_value['type'] == 'e2pdf-image') {
                        if ($image = $helper_e2pdf_image->get_image($el_value['value'])) {
                            $pages[$key]['elements'][$el_key]['value'] = $image;
                        } else {
                            $pages[$key]['elements'][$el_key]['value'] = '';
                        }
                    }
                }
            }
        }

        return $pages;
    }

    public function convert($pre_save, $type = false) {

        $model_e2pdf_convert = new Model_E2pdf_Convert();
        $model_e2pdf_font = new Model_E2pdf_Font();

        if ($pre_save) {
            $pages = $this->get('pages');
            $this->template = $this->pre_save();
            $this->set('pages', $pages);
            $this->set('fonts', unserialize($this->get('fonts')));
        }

        $fonts = array();
        if ($this->get('fonts')) {
            foreach ($this->get('fonts') as $key => $value) {
                $fonts[] = array(
                    'name' => $value,
                    'value' => $model_e2pdf_font->get_font($key)
                );
            }
        }

        $pages = $this->pre_render();

        $settings = array(
            'title' => $this->get_filename(),
            'flatten' => $this->get('flatten'),
            'format' => $this->get('format'),
            'compression' => $this->get('compression'),
            'appearance' => $this->get('appearance'),
            'password' => $this->get('password'),
            'font' => $this->get('font'),
            'font_size' => $this->get('font_size'),
            'font_color' => $this->get('font_color'),
            'line_height' => $this->get('line_height'),
            'uid' => $this->get('uid'),
            'dataset' => $this->get('dataset'),
        );

        if ($this->get('pdf')) {
            $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
            if (file_exists($pdf)) {
                $settings['pdf'] = base64_encode(file_get_contents($pdf));
            }
        }


        $model_e2pdf_convert->set(array(
            'type' => $type,
            'data' => array(
                'settings' => $settings,
                'pages' => $pages,
                'fonts' => $fonts
            ),
        ));

        return $model_e2pdf_convert->convert();
    }

    public function render($pre_save = false) {
        $model_e2pdf_api = new Model_E2pdf_Api();
        $model_e2pdf_font = new Model_E2pdf_Font();


        if ($pre_save) {
            $pages = $this->get('pages');
            $this->template = $this->pre_save();
            $this->set('pages', $pages);
            $this->set('fonts', unserialize($this->get('fonts')));
        }

        $fonts = array();
        if ($this->get('fonts')) {
            foreach ($this->get('fonts') as $key => $value) {
                $fonts[] = array(
                    'name' => $value,
                    'value' => $model_e2pdf_font->get_font($key)
                );
            }
        }

        $pages = $this->pre_render();

        $settings = array(
            'title' => $this->get_filename(),
            'flatten' => $this->get('flatten'),
            'format' => $this->get('format'),
            'compression' => $this->get('compression'),
            'appearance' => $this->get('appearance'),
            'password' => $this->get('password'),
            'font' => $this->get('font'),
            'font_size' => $this->get('font_size'),
            'font_color' => $this->get('font_color'),
            'line_height' => $this->get('line_height'),
            'uid' => $this->get('uid'),
            'dataset' => $this->get('dataset')
        );


        if ($this->get('pdf')) {
            $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
            if (file_exists($pdf)) {
                $settings['pdf'] = base64_encode(file_get_contents($pdf));
            }
        }


        $model_e2pdf_api->set(array(
            'action' => 'template/build',
            'data' => array(
                'settings' => $settings,
                'pages' => $pages,
                'fonts' => $fonts
            ),
        ));

        return $model_e2pdf_api->request();
    }

    public function get_filename() {
        if ($this->get('name')) {
            $name = $this->get('name');
        } elseif ($this->get('title')) {
            $name = $this->get('title');
        } else {
            $name = __('(no title)', 'e2pdf');
        }
        return $name;
    }

    public function flush() {
        if ($this->get('ID')) {
            $model_e2pdf_page = new Model_E2pdf_Page();
            $pages = $model_e2pdf_page->get_pages($this->get('ID'));
            foreach ($pages as $page_value) {
                $page = new Model_E2pdf_Page();
                $page->load($page_value['ID']);
                $page->delete();
            }
        }
    }

}

```
