PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.15
E2Pdf – Export Pdf Tool for WordPress v1.32.15
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.15, at classes/helper/e2pdf-xml.php

198 lines 7.5 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
18 // check
19 public function check() {
20 if (extension_loaded('simplexml')) {
21 return true;
22 } else {
23 return false;
24 }
25 }
26
27 // create
28 public function create($key = false) {
29 $this->set('xml', new Helper_E2pdf_SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $key . '></' . $key . '>'));
30 return $this->get('xml');
31 }
32
33 // get xml
34 public function get_xml() {
35 if ($this->get('xml')) {
36 return $this->get('xml')->asXML();
37 }
38 return '';
39 }
40
41 // set
42 public function set($key, $value) {
43 if (!isset($this->xml)) {
44 $this->xml = new stdClass();
45 }
46 $this->xml->$key = $value;
47 }
48
49 // get
50 public function get($key) {
51 if (isset($this->xml->$key)) {
52 return $this->xml->$key;
53 } else {
54 return false;
55 }
56 }
57
58 // get node value
59 public function get_node_value($element, $attribute = '') {
60 $value = '';
61 if (is_object($element) && $attribute && isset($element->attributes) && $element->attributes->getNamedItem($attribute)) {
62 $value = $element->attributes->getNamedItem($attribute)->nodeValue;
63 }
64 return $value;
65 }
66
67 // set node value
68 public function set_node_value($element, $attribute = '', $value = '', $parent = false) {
69
70 if (!is_object($element) || !method_exists($element, 'setAttribute') || !$attribute) {
71 return $element;
72 }
73
74 if ($parent && (!is_object($element->parentNode) || !method_exists($element->parentNode, 'setAttribute'))) {
75 return $element;
76 }
77
78 if ($parent) {
79 $target = $element->parentNode;
80 } else {
81 $target = $element;
82 }
83 $target->setAttribute($attribute, $value);
84
85 return $element;
86 }
87
88 // parse xml page
89 public function parse_xml_page($page_node, &$pages, $pdf_images_dir, $extension) {
90
91 $page_number = (string) $page_node['number'];
92 $pages[$page_number] = [];
93 $pages[$page_number]['page_id'] = $page_number;
94
95 if (isset($page_node->properties)) {
96 $pages[$page_number]['properties'] = [];
97 foreach ($page_node->properties->children() as $prop_name => $prop_value) {
98 $prop_string = (string) $prop_value;
99 if ($prop_name === 'background' && !empty($prop_string)) {
100 file_put_contents($pdf_images_dir . $page_number . '.png', base64_decode($prop_string), LOCK_EX);
101 do_action('e2pdf_pdf_upload_background_save_after');
102 } else {
103 $pages[$page_number]['properties'][$prop_name] = $prop_string;
104 }
105 }
106 }
107 if (isset($page_node->elements)) {
108 $pages[$page_number]['elements'] = [];
109 $element_index = 0;
110 foreach ($page_node->elements->element as $element_node) {
111 $pages[$page_number]['elements'][$element_index] = [];
112 foreach ($element_node->children() as $elem_name => $elem_value) {
113 if ($elem_name == 'properties') {
114 $pages[$page_number]['elements'][$element_index]['properties'] = [];
115 foreach ($elem_value->children() as $inner_prop_name => $inner_prop_value) {
116 $pages[$page_number]['elements'][$element_index]['properties'][$inner_prop_name] = (string) $inner_prop_value;
117 }
118 } else {
119 $pages[$page_number]['elements'][$element_index][$elem_name] = (string) $elem_value;
120 }
121 }
122 $element = $pages[$page_number]['elements'][$element_index];
123 if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
124 $image = base64_decode($element['base64']);
125 $file_name = basename($element['value']);
126 if (!$file_name) {
127 $ext = $this->helper->load('image')->get_extension($image);
128 if ($ext) {
129 $file_name = md5(mktime()) . '.' . $ext;
130 }
131 }
132 if ($file_name) {
133 $upload_file = wp_upload_bits($file_name, null, $image);
134 if (!$upload_file['error']) {
135 $wp_filetype = wp_check_filetype($file_name, null);
136 $attachment = array(
137 'post_mime_type' => $wp_filetype['type'],
138 'post_parent' => 0,
139 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
140 'post_content' => '',
141 'post_status' => 'inherit',
142 );
143 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
144 if (!is_wp_error($attachment_id)) {
145 require_once ABSPATH . 'wp-admin/includes/image.php';
146 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
147 wp_update_attachment_metadata($attachment_id, $attachment_data);
148 $pages[$page_number]['elements'][$element_index]['value'] = $upload_file['url'];
149 }
150 }
151 unset($pages[$page_number]['elements'][$element_index]['base64']);
152 } else {
153 unset($pages[$page_number]['elements'][$element_index]);
154 }
155 } elseif (isset($element['name']) && $element['name']) {
156 $el_value = $extension->auto_map($element['name']);
157 if ($el_value !== false) {
158 $pages[$page_number]['elements'][$element_index]['value'] = $el_value;
159 }
160 }
161 $element_index++;
162 }
163 }
164 }
165
166 // parse xml font
167 public function parse_xml_font($font) {
168
169 $model_e2pdf_font = new Model_E2pdf_Font();
170 $fonts = $model_e2pdf_font->get_fonts();
171 $fonts_dir = $this->helper->get('fonts_dir');
172
173 $font_title = (string) $font->title;
174 $font_name = (string) $font->name;
175 $font_value = (string) $font->value;
176
177 $exist = array_search($font_title, $fonts, true);
178 if ($exist === false) {
179 if (!file_exists($fonts_dir . $font_name)) {
180 $f_name = $font_name;
181 } else {
182 $i = 0;
183 do {
184 $f_name = $i . '_' . $font_name;
185 $i++;
186 } while (file_exists($fonts_dir . $f_name));
187 }
188 $font_ext = strtolower(pathinfo($f_name, PATHINFO_EXTENSION));
189 if (in_array($font_ext, $model_e2pdf_font->get_allowed_extensions())) {
190 $font_data = base64_decode($font_value);
191 if ($font_data !== false) {
192 file_put_contents($fonts_dir . $f_name, $font_data, LOCK_EX);
193 }
194 }
195 }
196 }
197 }
198