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
e2pdf / classes / helper / e2pdf-xml.php

e2pdf-xml.php in E2Pdf – Export Pdf Tool for WordPress 1.32.49, at classes/helper/e2pdf-xml.php

211 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /helper/e2pdf-xml.php
5 *
6 * @package E2Pdf
7 * @license GPLv3
8 * @link https://e2pdf.com
9 */
10 if (!defined('ABSPATH')) {
11 die('Access denied.');
12 }
13
14 class Helper_E2pdf_Xml {
15
16 private $xml;
17 private $helper;
18
19 public function __construct() {
20 $this->helper = Helper_E2pdf_Helper::instance();
21 }
22
23 // check
24 public function check() {
25 if (extension_loaded('simplexml')) {
26 return true;
27 } else {
28 return false;
29 }
30 }
31
32 // create
33 public function create($key = false) {
34 $this->set('xml', new Helper_E2pdf_SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $key . '></' . $key . '>'));
35 return $this->get('xml');
36 }
37
38 // get xml
39 public function get_xml() {
40 if ($this->get('xml')) {
41 return $this->get('xml')->asXML();
42 }
43 return '';
44 }
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 }
210 }
211