PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
← All changes | classes/helper/e2pdf-xml.php +184 -28 1.02.021.32.49 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Zip Helper
5 - *
6 - * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
8 - * @version 1
9 - * @link https://e2pdf.com
10 - * @since 0.00.01
4 + * File: /helper/e2pdf-xml.php
5 + *
6 + * @package E2Pdf
7 + * @license GPLv3
8 + * @link https://e2pdf.com
11 9 */
12 10 if (!defined('ABSPATH')) {
13 11 die('Access denied.');
14 12 }
@@ -14,15 +12,16 @@
14 12 }
15 13
16 14 class Helper_E2pdf_Xml {
17 15
18 - private $xml = null;
16 + private $xml;
17 + private $helper;
19 18
20 - /**
21 - * Check if extension simplexml available
22 - *
23 - * @return bool
24 - */
19 + public function __construct() {
20 + $this->helper = Helper_E2pdf_Helper::instance();
21 + }
22 +
23 + // check
25 24 public function check() {
26 25 if (extension_loaded('simplexml')) {
27 26 return true;
28 27 } else {
@@ -29,26 +28,183 @@
29 28 return false;
30 29 }
31 30 }
32 31
33 - /**
34 - * Create new XML
35 - *
36 - * @param string $key - Wrapper of XML
37 - *
38 - * @return object - XML Object
39 - */
32 + // create
40 33 public function create($key = false) {
41 - $this->xml = new Helper_E2pdf_SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $key . '></' . $key . '>');
42 - return $this->xml;
34 + $this->set('xml', new Helper_E2pdf_SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $key . '></' . $key . '>'));
35 + return $this->get('xml');
43 36 }
44 37
45 - /**
46 - * Get XML file in Base64
47 - *
48 - * @return string
49 - */
38 + // get xml
50 39 public function get_xml() {
51 - return base64_encode($this->xml->asXML());
40 + if ($this->get('xml')) {
41 + return $this->get('xml')->asXML();
42 + }
43 + return '';
52 44 }
53 45
46 + // set
47 + public function set($key, $value) {
48 + if (!isset($this->xml)) {
49 + $this->xml = new stdClass();
50 + }
51 + $this->xml->$key = $value;
52 + }
53 +
54 + // get
55 + public function get($key) {
56 + if (isset($this->xml->$key)) {
57 + return $this->xml->$key;
58 + } else {
59 + return false;
60 + }
61 + }
62 +
63 + // get node value
64 + public function get_node_value($element, $attribute = '') {
65 + $value = '';
66 + if (is_object($element) && $attribute && isset($element->attributes) && $element->attributes->getNamedItem($attribute)) {
67 + $value = $element->attributes->getNamedItem($attribute)->nodeValue;
68 + }
69 + return $value;
70 + }
71 +
72 + // set node value
73 + public function set_node_value($element, $attribute = '', $value = '', $parent = false) {
74 +
75 + if (!is_object($element) || !method_exists($element, 'setAttribute') || !$attribute) {
76 + return $element;
77 + }
78 +
79 + if ($parent && (!is_object($element->parentNode) || !method_exists($element->parentNode, 'setAttribute'))) {
80 + return $element;
81 + }
82 +
83 + if ($parent) {
84 + $target = $element->parentNode;
85 + } else {
86 + $target = $element;
87 + }
88 + $target->setAttribute($attribute, $value);
89 +
90 + return $element;
91 + }
92 +
93 + // parse xml page
94 + public function parse_xml_page($page_node, &$pages, $pdf_images_dir, $extension) {
95 +
96 + $page_number = (string) $page_node['number'];
97 + $pages[$page_number] = [];
98 + $pages[$page_number]['page_id'] = $page_number;
99 +
100 + if (isset($page_node->properties)) {
101 + $pages[$page_number]['properties'] = [];
102 + foreach ($page_node->properties->children() as $prop_name => $prop_value) {
103 + $prop_string = (string) $prop_value;
104 + if ($prop_name === 'background' && !empty($prop_string)) {
105 + file_put_contents($pdf_images_dir . $page_number . '.png', base64_decode($prop_string), LOCK_EX);
106 + do_action('e2pdf_pdf_upload_background_save_after');
107 + } else {
108 + $pages[$page_number]['properties'][$prop_name] = $prop_string;
109 + }
110 + }
111 + }
112 + if (isset($page_node->elements)) {
113 + $pages[$page_number]['elements'] = [];
114 + $element_index = 0;
115 + foreach ($page_node->elements->element as $element_node) {
116 + $pages[$page_number]['elements'][$element_index] = [];
117 + foreach ($element_node->children() as $elem_name => $elem_value) {
118 + if ($elem_name == 'properties') {
119 + $pages[$page_number]['elements'][$element_index]['properties'] = [];
120 + foreach ($elem_value->children() as $inner_prop_name => $inner_prop_value) {
121 + $pages[$page_number]['elements'][$element_index]['properties'][$inner_prop_name] = (string) $inner_prop_value;
122 + }
123 + } else {
124 + $pages[$page_number]['elements'][$element_index][$elem_name] = (string) $elem_value;
125 + }
126 + }
127 + $element = $pages[$page_number]['elements'][$element_index];
128 + if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
129 + $image = base64_decode($element['base64']);
130 + $file_name = basename($element['value']);
131 + if (!$file_name) {
132 + $ext = $this->helper->load('image')->get_extension($image);
133 + if ($ext) {
134 + $file_name = md5(mktime()) . '.' . $ext;
135 + }
136 + }
137 + if ($file_name) {
138 + $upload_file = wp_upload_bits($file_name, null, $image);
139 + if (!$upload_file['error']) {
140 + $wp_filetype = wp_check_filetype($file_name, null);
141 + $attachment = array(
142 + 'post_mime_type' => $wp_filetype['type'],
143 + 'post_parent' => 0,
144 + 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
145 + 'post_content' => '',
146 + 'post_status' => 'inherit',
147 + );
148 + $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
149 + if (!is_wp_error($attachment_id)) {
150 + require_once ABSPATH . 'wp-admin/includes/image.php';
151 + $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
152 + wp_update_attachment_metadata($attachment_id, $attachment_data);
153 + $pages[$page_number]['elements'][$element_index]['value'] = $upload_file['url'];
154 + }
155 + }
156 + unset($pages[$page_number]['elements'][$element_index]['base64']);
157 + } else {
158 + unset($pages[$page_number]['elements'][$element_index]);
159 + }
160 + } elseif (isset($element['name']) && $element['name']) {
161 + $el_value = $extension->auto_map($element['name']);
162 + if ($el_value !== false) {
163 + $pages[$page_number]['elements'][$element_index]['value'] = $el_value;
164 + }
165 + }
166 + $element_index++;
167 + }
168 + }
169 + }
170 +
171 + // parse xml font
172 + public function parse_xml_font($font) {
173 +
174 + if (!$font) {
175 + return;
176 + }
177 +
178 + $font_title = isset($font->title) ? (string) $font->title : '';
179 + $font_name = isset($font->name) ? (string) $font->name : '';
180 + $font_value = isset($font->value) ? (string) $font->value : '';
181 +
182 + if (!$font_title || !$font_name || !$font_value) {
183 + return;
184 + }
185 +
186 + $model_e2pdf_font = new Model_E2pdf_Font();
187 + $fonts = $model_e2pdf_font->get_fonts();
188 + $fonts_dir = $this->helper->get('fonts_dir');
189 +
190 + $exist = array_search($font_title, $fonts, true);
191 + if ($exist === false) {
192 + if (!file_exists($fonts_dir . $font_name)) {
193 + $f_name = $font_name;
194 + } else {
195 + $i = 0;
196 + do {
197 + $f_name = $i . '_' . $font_name;
198 + $i++;
199 + } while (file_exists($fonts_dir . $f_name));
200 + }
201 + $font_ext = strtolower(pathinfo($f_name, PATHINFO_EXTENSION));
202 + if (in_array($font_ext, $model_e2pdf_font->get_allowed_extensions())) {
203 + $font_data = base64_decode($font_value);
204 + if ($font_data !== false) {
205 + file_put_contents($fonts_dir . $f_name, $font_data, LOCK_EX);
206 + }
207 + }
208 + }
209 + }
54 210 }