# e2pdf/1.03.07/classes/model/e2pdf-shortcode.php

E2Pdf – Export Pdf Tool for WordPress, version 1.03.07. 809 lines.

- Page: https://pluginprobe.com/plugins/e2pdf/1.03.07/code/classes/model/e2pdf-shortcode.php
- Raw: https://pluginprobe.com/plugins/e2pdf/1.03.07/raw/classes/model/e2pdf-shortcode.php
- Modified: 2018-12-25T15:41:54+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.03.07/code/classes/model/e2pdf-shortcode.php#L10-L20`.

```php
<?php

/**
 * E2pdf Shortcode 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_Shortcode extends Model_E2pdf_Model {

    function __construct() {
        parent::__construct();
    }

    /**
     * [e2pdf-attachment] shortcode
     * 
     * @param array $atts - Shortcode attributes
     */
    function e2pdf_attachment($atts = array()) {

        $template_id = (int) $atts['id'];

        $response = '';

        if (!array_key_exists('apply', $atts) || !array_key_exists('dataset', $atts) || !$template_id) {
            return $response;
        }

        $dataset = $atts['dataset'];

        $template = new Model_E2pdf_Template();

        if ($template->load($template_id)) {

            $uid_params = array();
            $uid_params['template_id'] = $template_id;
            $uid_params['dataset'] = $dataset;

            $template->extension()->set('dataset', $dataset);

            if ($template->extension()->verify()) {

                if (array_key_exists('inline', $atts)) {
                    $inline = $atts['inline'] == 'true' ? 1 : 0;
                    $uid_params['inline'] = $inline;
                }

                if (array_key_exists('flatten', $atts)) {
                    $flatten = (int) $atts['flatten'];
                    $uid_params['flatten'] = $flatten;
                    $template->set('flatten', $flatten);
                }

                if (array_key_exists('format', $atts)) {
                    $format = $atts['format'];
                    $uid_params['format'] = $format;
                    $template->set('format', $format);
                }

                if (array_key_exists('password', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $password = $template->extension()->render($atts['password'], 'value');
                    } else {
                        $password = $atts['password'];
                    }
                    $uid_params['password'] = $password;
                    $template->set('password', $password);
                } else {
                    $template->set('password', $template->extension()->render($template->get('password'), 'value'));
                }

                if (array_key_exists('name', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $name = $template->extension()->render($atts['name'], 'value');
                    } else {
                        $name = $atts['name'];
                    }
                    $uid_params['name'] = $name;
                    $template->set('name', $name);
                } else {
                    $template->set('name', $template->extension()->render($template->get('name'), 'value'));
                }

                $entry = new Model_E2pdf_Entry();
                $entry->set('entry', $uid_params);
                if (!$entry->load_by_uid($entry->get('uid'))) {
                    $entry->save();
                }

                $template->fill($dataset, $entry->get('uid'));
                $request = $template->render();

                if (!isset($request['error']) && $entry->get('ID')) {
                    $tmp_dir = $this->helper->get('tmp_dir') . 'e2pdf' . md5($entry->get('uid')) . '/';

                    $this->helper->create_dir($tmp_dir);

                    if ($template->get('name')) {
                        $name = $template->get('name');
                    } else {
                        $name = $template->extension()->render($template->get_filename(), 'value');
                    }

                    $file_name = $name . '.pdf';
                    $file_path = $tmp_dir . $file_name;
                    file_put_contents($file_path, base64_decode($request['file']));

                    if (file_exists($file_path)) {
                        $entry->set('pdf_num', $entry->get('pdf_num') + 1);
                        $entry->save();

                        return $file_path;
                    }
                }
            }
        }

        return $response;
    }

    /**
     * [e2pdf-download] shortcode
     * 
     * @param array $atts - Shortcode attributes
     */
    function e2pdf_download($atts = array()) {

        $template_id = (int) $atts['id'];

        $response = '';

        if (!$template_id) {
            return $response;
        }

        if (array_key_exists('dataset', $atts)) {
            $dataset = $atts['dataset'];
        } else {
            return $response;
        }

        $template = new Model_E2pdf_Template();

        if ($template->load($template_id)) {

            $uid_params = array();
            $uid_params['template_id'] = $template_id;
            $uid_params['dataset'] = $dataset;

            if (array_key_exists('class', $atts)) {
                $classes = explode(" ", $atts['class']);
            } else {
                $classes = array();
            }

            $classes[] = 'e2pdf-download';

            $template->extension()->set('dataset', $dataset);

            if ($template->extension()->verify()) {

                $template->extension()->set('no_filter', true);

                if (array_key_exists('auto', $atts)) {
                    $auto = $atts['auto'] == 'true' ? 1 : 0;
                } else {
                    $auto = $template->get('auto');
                }

                if ($auto) {
                    $classes[] = 'e2pdf-auto';
                }

                if (array_key_exists('inline', $atts)) {
                    $inline = $atts['inline'] == 'true' ? 1 : 0;
                    $uid_params['inline'] = $inline;
                } else {
                    $inline = $template->get('inline');
                }

                if ($inline) {
                    $classes[] = 'e2pdf-inline';
                }

                if (array_key_exists('flatten', $atts)) {
                    $flatten = (int) $atts['flatten'];
                    $uid_params['flatten'] = $flatten;
                }

                if (array_key_exists('format', $atts)) {
                    $format = $atts['format'];
                    $uid_params['format'] = $format;
                }

                if (array_key_exists('button-title', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $title = $template->extension()->render($atts['button-title']);
                    } else {
                        $title = $atts['button-title'];
                    }
                } elseif ($template->extension()->render($template->get('button_title')) !== '') {
                    $title = $template->extension()->render($template->get('button_title'));
                } else {
                    $title = __('Download', 'e2pdf');
                }

                if (array_key_exists('password', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $password = $template->extension()->render($atts['password'], 'value');
                    } else {
                        $password = $atts['password'];
                    }
                    $uid_params['password'] = $password;
                }

                if (array_key_exists('name', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $name = $template->extension()->render($atts['name'], 'value');
                    } else {
                        $name = $atts['name'];
                    }
                    $uid_params['name'] = $name;
                }

                /*
                 * @since 0.01.33
                 */
                $entry = new Model_E2pdf_Entry();
                $entry->set('entry', $uid_params);
                if (!$entry->load_by_uid($entry->get('uid'))) {
                    $entry->save();
                }

                if ($entry->get('ID')) {
                    $url = esc_url(add_query_arg(array(
                        'page' => 'e2pdf-download',
                        'uid' => $entry->get('uid'),
                                    ), site_url('/')
                    ));

                    $response = "<a id='e2pdf-download' class='" . implode(" ", $classes) . "' target='_blank' href='{$url}'>{$title}</a>";
                }
            }
        }

        return $response;
    }

    /**
     * @since 0.01.44
     * 
     * [e2pdf-save] shortcode
     * 
     * @param array $atts - Shortcode attributes
     */
    function e2pdf_save($atts = array()) {

        $template_id = (int) $atts['id'];

        $response = '';

        if (!array_key_exists('apply', $atts) || !array_key_exists('dataset', $atts) || !$template_id) {
            return $response;
        }

        $dataset = $atts['dataset'];

        $template = new Model_E2pdf_Template();

        if ($template->load($template_id)) {

            $uid_params = array();
            $uid_params['template_id'] = $template_id;
            $uid_params['dataset'] = $dataset;


            $template->extension()->set('dataset', $dataset);

            if ($template->extension()->verify()) {

                if (array_key_exists('inline', $atts)) {
                    $inline = $atts['inline'] == 'true' ? 1 : 0;
                    $uid_params['inline'] = $inline;
                }

                if (array_key_exists('flatten', $atts)) {
                    $flatten = (int) $atts['flatten'];
                    $uid_params['flatten'] = $flatten;
                    $template->set('flatten', $flatten);
                }

                if (array_key_exists('format', $atts)) {
                    $format = $atts['format'];
                    $uid_params['format'] = $format;
                    $template->set('format', $format);
                }

                if (array_key_exists('password', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $password = $template->extension()->render($atts['password'], 'value');
                    } else {
                        $password = $atts['password'];
                    }
                    $uid_params['password'] = $password;
                    $template->set('password', $password);
                } else {
                    $template->set('password', $template->extension()->render($template->get('password'), 'value'));
                }

                if (array_key_exists('name', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $name = $template->extension()->render($atts['name'], 'value');
                    } else {
                        $name = $atts['name'];
                    }
                    $uid_params['name'] = $name;
                    $template->set('name', $name);
                } else {
                    $template->set('name', $template->extension()->render($template->get('name'), 'value'));
                }

                $entry = new Model_E2pdf_Entry();
                $entry->set('entry', $uid_params);
                if (!$entry->load_by_uid($entry->get('uid'))) {
                    $entry->save();
                }

                $template->fill($dataset, $entry->get('uid'));
                $request = $template->render();

                if (isset($request['error'])) {
                    return false;
                } else {
                    if ($entry->get('ID')) {

                        if (array_key_exists('dir', $atts)) {
                            $save_dir = $atts['dir'];
                        } else {
                            $tpl_dir = $this->helper->get('tpl_dir') . $template->get('ID') . "/";
                            $save_dir = $tpl_dir . "save/";
                            $this->helper->create_dir($tpl_dir);
                            $this->helper->create_dir($save_dir);
                        }

                        if (is_dir($save_dir) && is_writable($save_dir)) {

                            if ($template->get('name')) {
                                $name = $template->get('name');
                            } else {
                                $name = $template->extension()->render($template->get_filename(), 'value');
                            }

                            $file_name = $name . '.pdf';
                            $file_path = $save_dir . $file_name;
                            file_put_contents($file_path, base64_decode($request['file']));

                            if (file_exists($file_path)) {
                                $entry->set('pdf_num', $entry->get('pdf_num') + 1);
                                $entry->save();
                            }
                        }
                    }
                }
            }
        }

        return $response;
    }

    /**
     * [e2pdf-view] shortcode
     * 
     * @param array $atts - Shortcode attributes
     */
    function e2pdf_view($atts = array()) {

        $template_id = (int) $atts['id'];

        $response = '';

        $width = isset($atts['width']) ? $atts['width'] : '100%';
        $height = isset($atts['height']) ? $atts['height'] : '500';
        $pdf_url = isset($atts['pdf']) ? $atts['pdf'] : false;

        if (array_key_exists('class', $atts)) {
            $classes = explode(" ", $atts['class']);
        } else {
            $classes = array();
        }
        $classes[] = 'e2pdf-view';

        if ($pdf_url) {
            if (filter_var($pdf_url, FILTER_VALIDATE_URL)) {
                $url = plugins_url('assets/pdf.js/web/viewer.html?file=' . urlencode($pdf_url), $this->helper->get('plugin_file_path'));
                $response = "<iframe class='" . implode(" ", $classes) . "' width='{$width}' height='{$height}' src='{$url}'></iframe>";
            }
        } else {

            if (!$template_id) {
                return $response;
            }

            if (array_key_exists('dataset', $atts)) {
                $dataset = $atts['dataset'];
            } else {
                return $response;
            }

            $template = new Model_E2pdf_Template();

            if ($template->load($template_id)) {

                $uid_params = array();
                $uid_params['template_id'] = $template_id;
                $uid_params['dataset'] = $dataset;

                $template->extension()->set('dataset', $dataset);

                if ($template->extension()->verify()) {

                    $template->extension()->set('no_filter', true);

                    if (array_key_exists('inline', $atts)) {
                        $inline = $atts['inline'] == 'true' ? 1 : 0;
                        $uid_params['inline'] = $inline;
                    }

                    if (array_key_exists('flatten', $atts)) {
                        $flatten = (int) $atts['flatten'];
                        $uid_params['flatten'] = $flatten;
                    }

                    if (array_key_exists('format', $atts)) {
                        $format = $atts['format'];
                        $uid_params['format'] = $format;
                    }


                    if (array_key_exists('password', $atts)) {
                        if (!array_key_exists('filter', $atts)) {
                            $password = $template->extension()->render($atts['password']);
                        } else {
                            $password = $atts['password'];
                        }
                        $uid_params['password'] = $password;
                    }

                    if (array_key_exists('name', $atts)) {
                        if (!array_key_exists('filter', $atts)) {
                            $name = $template->extension()->render($atts['name'], 'value');
                        } else {
                            $name = $atts['name'];
                        }
                        $uid_params['name'] = $name;
                    }

                    $entry = new Model_E2pdf_Entry();
                    $entry->set('entry', $uid_params);
                    if (!$entry->load_by_uid($entry->get('uid'))) {
                        $entry->save();
                    }

                    if ($entry->get('ID')) {
                        $pdf_url = esc_url_raw(add_query_arg(array(
                            'page' => 'e2pdf-download',
                            'uid' => $entry->get('uid'),
                                        ), site_url('/')
                        ));

                        $url = plugins_url('assets/pdf.js/web/viewer.html?file=' . urlencode($pdf_url), $this->helper->get('plugin_file_path'));
                        $response = "<iframe class='" . implode(" ", $classes) . "' width='{$width}' height='{$height}' src='{$url}'></iframe>";
                    }
                }
            }
        }

        return $response;
    }

    function e2pdf_adobesign($atts = array()) {

        $template_id = (int) $atts['id'];

        $response = '';

        if (!array_key_exists('apply', $atts) || !array_key_exists('dataset', $atts) || !$template_id) {
            return $response;
        }

        $dataset = $atts['dataset'];
        $template = new Model_E2pdf_Template();
        if ($template->load($template_id)) {
            $uid_params = array();
            $uid_params['template_id'] = $template_id;
            $uid_params['dataset'] = $dataset;

            $template->extension()->set('dataset', $dataset);

            if ($template->extension()->verify()) {

                if (array_key_exists('inline', $atts)) {
                    $inline = $atts['inline'] == 'true' ? 1 : 0;
                    $uid_params['inline'] = $inline;
                }

                if (array_key_exists('flatten', $atts)) {
                    $flatten = (int) $atts['flatten'];
                    $uid_params['flatten'] = $flatten;
                    $template->set('flatten', $flatten);
                }

                if (array_key_exists('format', $atts)) {
                    $format = $atts['format'];
                    $uid_params['format'] = $format;
                    $template->set('format', $format);
                }

                if (array_key_exists('password', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $password = $template->extension()->render($atts['password'], 'value');
                    } else {
                        $password = $atts['password'];
                    }
                    $uid_params['password'] = $password;
                    $template->set('password', $password);
                } else {
                    $template->set('password', $template->extension()->render($template->get('password'), 'value'));
                }

                if (array_key_exists('name', $atts)) {
                    if (!array_key_exists('filter', $atts)) {
                        $name = $template->extension()->render($atts['name'], 'value');
                    } else {
                        $name = $atts['name'];
                    }
                    $uid_params['name'] = $name;
                    $template->set('name', $name);
                } else {
                    $template->set('name', $template->extension()->render($template->get('name'), 'value'));
                }

                $disable = array();
                if (array_key_exists('disable', $atts)) {
                    $disable = explode(',', $atts['disable']);
                }


                $entry = new Model_E2pdf_Entry();
                $entry->set('entry', $uid_params);
                if (!$entry->load_by_uid($entry->get('uid'))) {
                    $entry->save();
                }

                $template->fill($dataset, $entry->get('uid'));
                $request = $template->render();

                if (!isset($request['error']) && $entry->get('ID')) {
                    $tmp_dir = $this->helper->get('tmp_dir') . 'e2pdf' . md5($entry->get('uid')) . '/';
                    $this->helper->create_dir($tmp_dir);

                    if ($template->get('name')) {
                        $name = $template->get('name');
                    } else {
                        $name = $template->extension()->render($template->get_filename(), 'value');
                    }

                    $file_name = $name . '.pdf';

                    $file_path = $tmp_dir . $file_name;

                    file_put_contents($file_path, base64_decode($request['file']));

                    if (file_exists($file_path)) {

                        $agreement_id = false;
                        $documents = array();
                        if (!in_array('post_transientDocuments', $disable)) {
                            $model_e2pdf_adobesign = new Model_E2pdf_AdobeSign();
                            $model_e2pdf_adobesign->set(array(
                                'action' => 'api/rest/v5/transientDocuments',
                                'headers' => array(
                                    'Content-Type: multipart/form-data',
                                ),
                                'data' => array(
                                    'File-Name' => $file_name,
                                    'Mime-Type' => 'application/pdf',
                                    'File' => class_exists('cURLFile') ? new cURLFile($file_path) : '@' . $file_path
                                ),
                            ));

                            if ($transientDocumentId = $model_e2pdf_adobesign->request('transientDocumentId')) {
                                $documents[] = array(
                                    'transientDocumentId' => $transientDocumentId
                                );
                            }
                            $model_e2pdf_adobesign->flush();
                        }

                        $documents = apply_filters('e2pdf_model_shortcode_e2pdf_adobesign_fileInfos', $documents, $atts, $template, $entry, $template->extension(), $file_path);

                        if (!in_array('post_agreements', $disable) && !empty($documents)) {

                            $output = false;
                            if (array_key_exists('output', $atts)) {
                                $output = $atts['output'];
                            }

                            $recipients = array();
                            if (array_key_exists('recipients', $atts)) {
                                $atts['recipients'] = $template->extension()->render($atts['recipients']);
                                $recipients_list = explode(',', $atts['recipients']);

                                foreach ($recipients_list as $recipient_info) {
                                    $recipients[] = array(
                                        'recipientSetMemberInfos' => array(
                                            'email' => trim($recipient_info)
                                        ),
                                        'recipientSetRole' => 'SIGNER'
                                    );
                                }
                            }

                            $data = array(
                                'documentCreationInfo' => array(
                                    'signatureType' => 'ESIGN',
                                    'recipientSetInfos' => $recipients,
                                    'signatureFlow' => 'SENDER_SIGNATURE_NOT_REQUIRED',
                                    'fileInfos' => $documents,
                                    'name' => $name
                                )
                            );

                            $data = apply_filters('e2pdf_model_shortcode_e2pdf_adobesign_post_agreements_data', $data, $atts, $template, $entry, $template->extension(), $file_path, $documents);

                            $model_e2pdf_adobesign = new Model_E2pdf_AdobeSign();
                            $model_e2pdf_adobesign->set(array(
                                'action' => 'api/rest/v5/agreements',
                                'data' => $data,
                            ));

                            $agreement_id = $model_e2pdf_adobesign->request('agreementId');
                            $model_e2pdf_adobesign->flush();
                        }

                        $response = apply_filters('e2pdf_model_shortcode_e2pdf_adobesign_response', $response, $atts, $template, $entry, $template->extension(), $file_path, $documents, $agreement_id);
                    }

                    $this->helper->delete_dir($tmp_dir);
                    return $response;
                }
            }
        }

        return $response;
    }

    /**
     * [e2pdf-format-number] shortcode
     * 
     * @param array $atts - Shortcode attributes
     * @param string $value - Value
     */
    function e2pdf_format_number($atts = array(), $value = '') {

        $dec_point = isset($atts['dec_point']) ? $atts['dec_point'] : '.';
        $thousands_sep = isset($atts['thousands_sep']) ? $atts['thousands_sep'] : '';
        $decimal = isset($atts['decimal']) ? $atts['decimal'] : false;
        $explode = isset($atts['explode']) ? $atts['explode'] : '';
        $implode = isset($atts['implode']) ? $atts['implode'] : '';

        $new_value = array();
        $value = array_filter((array) $value, 'strlen');
        foreach ($value as $v) {
            if ($explode && strpos($v, $explode)) {
                $v = explode($explode, $v);
            }
            foreach ((array) $v as $n) {
                $n = str_replace(array(" ", ","), array("", "."), $n);
                $n = preg_replace('/\.(?=.*\.)/', '', $n);
                $n = floatval($n);

                if (!$decimal) {
                    $num = explode('.', $n);
                    $decimal = isset($num[1]) ? strlen($num[1]) : 0;
                }

                $n = number_format($n, $decimal, $dec_point, $thousands_sep);
                $new_value[] = $n;
            }
            unset($v);
        }
        $new_value = array_filter((array) $new_value, 'strlen');
        return implode($implode, $new_value);
    }

    function e2pdf_format_date($atts = array(), $value = '') {
        $format = isset($atts['format']) ? $atts['format'] : get_option('date_format');
        if (!$value) {
            return '';
        }
        $value = date($format, strtotime($value));
        return $value;
    }

    /**
     * [e2pdf-format-output] shortcode
     * 
     * @param array $atts - Shortcode attributes
     * @param string $value - Value
     */
    function e2pdf_format_output($atts = array(), $value = '') {

        $explode = isset($atts['explode']) ? $atts['explode'] : false;
        $implode = isset($atts['implode']) ? $atts['implode'] : '';
        $output = isset($atts['output']) ? $atts['output'] : false;
        $filter = isset($atts['filter']) ? $atts['filter'] : false;

        $filters = array();
        if ($filter) {
            if (strpos($filter, ',')) {
                $filters = explode(',', $filter);
            } else {
                $filters = array_filter((array) $filter, 'strlen');
            }
        }

        $new_value = array();
        $value = array_filter((array) $value, 'strlen');

        foreach ($value as $v) {
            if ($explode && strpos($v, $explode)) {
                $v = explode($explode, $v);
            }
            foreach ((array) $v as $n) {
                if (!empty($filters)) {
                    foreach ((array) $filters as $sub_filter) {
                        switch ($sub_filter) {
                            case 'trim':
                                $n = trim($n);
                                break;

                            case 'strip_tags':
                                $n = strip_tags($n);
                                break;

                            case 'strtolower':
                                if (function_exists('mb_strtolower')) {
                                    $n = mb_strtolower($n);
                                } elseif (function_exists('strtolower')) {
                                    $n = strtolower($n);
                                }
                                break;

                            case 'ucfirst':
                                if (function_exists('mb_strtoupper') && function_exists('mb_strtolower')) {
                                    $fc = mb_strtoupper(mb_substr($n, 0, 1));
                                    $n = $fc . mb_substr($n, 1);
                                } else if (function_exists('ucfirst') && function_exists('strtolower')) {
                                    $n = ucfirst($n);
                                }
                                break;

                            case 'strtoupper':
                                if (function_exists('mb_strtoupper')) {
                                    $n = mb_strtoupper($n);
                                } elseif (function_exists('strtoupper')) {
                                    $n = strtoupper($n);
                                }
                                break;

                            case 'lines':
                                $n = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $n);
                                break;

                            default:
                                break;
                        }
                    }
                }
                $new_value[] = $n;
            }
            unset($v);
        }

        if ($output) {
            $search = array();
            $replace = array();

            foreach ($new_value as $key => $value) {
                $search[] = "{" . $key . "}";
                $replace[] = $value;
            }
            $output = str_replace($search, $replace, $output);
            return preg_replace('~(?:{/?)[^/}]+/?}~s', "", $output);
        } else {
            return implode($implode, $new_value);
        }
    }

}

```
