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/controller/e2pdf-templates.php +1894 -1293 1.08.001.32.49 View file →
@@ -1,11 +1,10 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Templates Controller
5 - *
4 + * E2Pdf Templates Controller
6 5 * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
6 + * @license GPLv3
8 7 * @version 1
9 8 * @link https://e2pdf.com
10 9 * @since 0.00.01
11 10 */
@@ -18,36 +17,29 @@
18 17 /**
19 18 * @url admin.php?page=e2pdf-templates
20 19 */
21 20 public function index_action() {
22 -
23 - if ($this->post->get()) {
24 - if ($this->post->get('screenoptionnonce')) {
21 + if ($this->post->get('screenoptionnonce')) {
22 + if (wp_verify_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce')) {
25 23 $this->screen_action();
26 24 } else {
27 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
28 - if (($this->post->get('action') == '-1' && $this->post->get('action2') == '-1')) {
25 + wp_die($this->message('wp_verify_nonce_error'));
26 + }
27 + } elseif ($this->post->get('_wpnonce')) {
28 + if (wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
29 + if ($this->post->get('action') == '-1' && $this->post->get('action2') == '-1') {
30 + $redirect_url = [
31 + 'page' => 'e2pdf-templates',
32 + 'status' => $this->get->get('status'),
33 + 'orderby' => $this->get->get('orderby'),
34 + 'order' => $this->get->get('order'),
35 + ];
29 36 if ($this->post->get('s')) {
30 - $location = $this->helper->get_url(
31 - array(
32 - 'page' => 'e2pdf-templates',
33 - 'status' => $this->get->get('status'),
34 - 'orderby' => $this->get->get('orderby'),
35 - 'order' => $this->get->get('order'),
36 - 's' => $this->post->get('s')
37 - )
38 - );
39 - } else {
40 - $location = $this->helper->get_url(
41 - array(
42 - 'page' => 'e2pdf-templates',
43 - 'status' => $this->get->get('status'),
44 - 'orderby' => $this->get->get('orderby'),
45 - 'order' => $this->get->get('order'),
46 - )
47 - );
37 + $redirect_url['s'] = $this->post->get('s');
48 38 }
49 - $this->redirect($location);
39 + $this->redirect(
40 + $this->helper->get_url($redirect_url)
41 + );
50 42 } else {
51 43 $action = $this->post->get('action') != '-1' ? $this->post->get('action') : $this->post->get('action2');
52 44 if ($this->post->get('post')) {
53 45 if ($action == 'trash') {
@@ -53,22 +45,35 @@
53 45 if ($action == 'trash') {
54 46 foreach ($this->post->get('post') as $key => $value) {
55 47 $this->trash_template($value);
56 48 }
57 - $this->add_notification('update', __('Templates moved to trash', 'e2pdf'));
49 + $this->add_notification('update', sprintf(__('Templates Trashed: %d', 'e2pdf'), count($this->post->get('post'))));
50 + } elseif ($action == 'activate') {
51 + foreach ($this->post->get('post') as $key => $value) {
52 + $this->activate_template($value);
53 + }
54 + $this->add_notification('update', sprintf(__('Templates Activated: %d', 'e2pdf'), count($this->post->get('post'))));
55 + } elseif ($action == 'deactivate') {
56 + foreach ($this->post->get('post') as $key => $value) {
57 + $this->deactivate_template($value);
58 + }
59 + $this->add_notification('update', sprintf(__('Templates Deactivated: %d', 'e2pdf'), count($this->post->get('post'))));
58 60 } elseif ($action == 'restore') {
59 61 foreach ($this->post->get('post') as $key => $value) {
60 62 $this->restore_template($value);
61 63 }
62 - $this->add_notification('update', __('Templates restored', 'e2pdf'));
64 + $this->add_notification('update', sprintf(__('Templates Restored: %d', 'e2pdf'), count($this->post->get('post'))));
63 65 } elseif ($action == 'delete') {
64 66 foreach ($this->post->get('post') as $key => $value) {
65 67 $this->delete_template($value);
66 68 }
67 - $this->add_notification('update', __('Templates deleted', 'e2pdf'));
69 + $this->add_notification('update', sprintf(__('Templates Deleted: %d', 'e2pdf'), count($this->post->get('post'))));
68 70 }
71 + $this->helper->load('license')->load();
69 72 }
70 73 }
74 + } else {
75 + wp_die($this->message('wp_verify_nonce_error'));
71 76 }
72 77 }
73 78 }
74 79
@@ -73,28 +78,90 @@
73 78 }
74 79
75 80 /**
76 81 * @url admin.php?page=e2pdf-templates&action=view&id=$id
77 - *
78 82 * @return file
79 83 */
80 84 public function view_action() {
81 -
82 85 if ($this->get->get('id')) {
83 86 $template = new Model_E2pdf_Template();
84 -
85 87 if ($template->load($this->get->get('id'))) {
86 88 $pages = $template->get('pages');
87 - foreach ($pages as $page_key => $page_value) {
88 - if (isset($page_value['elements'])) {
89 - foreach ($page_value['elements'] as $element_key => $element_value) {
90 - if (isset($element_value['type']) && $element_value['type'] == 'e2pdf-image') {
91 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
92 - $pages[$page_key]['elements'][$element_key]['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
93 -
94 - if (isset($pages[$page_key]['elements'][$element_key]['properties']['dimension'])) {
95 - unset($pages[$page_key]['elements'][$element_key]['properties']['dimension']);
96 - }
89 + foreach ($pages as $page_key => $page) {
90 + if (!empty($page['elements'])) {
91 + foreach ($page['elements'] as $element_key => $element) {
92 + if (isset($element['type'])) {
93 + switch ($element['type']) {
94 + case 'e2pdf-image':
95 + if (isset($element['properties']['quality']) && $element['properties']['quality']) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
96 + } else {
97 + $element['properties']['quality'] = $template->get('optimization');
98 + $pages[$page_key]['elements'][$element_key]['properties']['quality'] = $template->get('optimization');
99 + }
100 + if ($image = $this->helper->load('image')->get_image($element['value'], null, $element)) {
101 + $pages[$page_key]['elements'][$element_key]['value'] = $image;
102 + } else {
103 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/upload.svg');
104 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
105 + }
106 + break;
107 + case 'e2pdf-signature':
108 + $esig = isset($element['properties']['esig']) && $element['properties']['esig'] ? true : false;
109 + if (!$esig) {
110 + if ($image = $this->helper->load('image')->get_image($element['value'])) {
111 + $pages[$page_key]['elements'][$element_key]['value'] = $image;
112 + } else {
113 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/signature.svg');
114 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
115 + }
116 + }
117 + break;
118 + case 'e2pdf-qrcode':
119 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
120 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/qrcode.svg');
121 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
122 + break;
123 + case 'e2pdf-barcode':
124 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
125 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/barcode.svg');
126 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
127 + break;
128 + case 'e2pdf-graph':
129 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
130 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/graph.svg');
131 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
132 + break;
133 + case 'e2pdf-html':
134 + if (isset($pages[$page_key]['elements'][$element_key]['properties']['hide_page_if_empty'])) {
135 + unset($pages[$page_key]['elements'][$element_key]['properties']['hide_page_if_empty']);
136 + }
137 + if (isset($pages[$page_key]['elements'][$element_key]['properties']['hide_if_empty'])) {
138 + unset($pages[$page_key]['elements'][$element_key]['properties']['hide_if_empty']);
139 + }
140 + if (isset($element['properties']['nl2br']) && $element['properties']['nl2br']) {
141 + $element['value'] = nl2br($element['value']);
142 + }
143 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
144 + $element['value'] = $this->helper->load('properties')->html_worker(
145 + $element['value']
146 + );
147 + }
148 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('filter')->filter_html_tags(
149 + $element['value']
150 + );
151 + break;
152 + case 'e2pdf-page-number':
153 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
154 + $element['value'] = $this->helper->load('properties')->html_worker(
155 + $element['value']
156 + );
157 + }
158 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('filter')->filter_html_tags(
159 + $element['value']
160 + );
161 + break;
162 + default:
163 + break;
97 164 }
98 165 }
99 166 }
100 167 }
@@ -106,23 +173,23 @@
106 173 if (isset($request['error'])) {
107 174 $this->add_notification('error', $request['error']);
108 175 $this->render('blocks', 'notifications');
109 176 } else {
110 - $filename = $template->get_filename();
111 - $file = $request['file'];
112 - $this->download_response('pdf', $file, $filename);
177 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline');
178 + exit;
113 179 }
114 180 } else {
115 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
181 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
116 182 $this->render('blocks', 'notifications');
117 183 }
118 184 } else {
119 - $location = $this->helper->get_url(
120 - array(
121 - 'page' => 'e2pdf',
185 + $this->redirect(
186 + $this->helper->get_url(
187 + [
188 + 'page' => 'e2pdf',
189 + ]
122 190 )
123 191 );
124 - $this->redirect($location);
125 192 }
126 193 }
127 194
128 195 /**
@@ -128,15 +195,12 @@
128 195 /**
129 196 * @url admin.php?page=e2pdf-templates&action=preview
130 197 */
131 198 public function preview_action() {
132 -
133 199 $preview = array();
134 -
135 200 if ($this->post->get('preview')) {
136 201 $preview = json_decode(stripslashes($this->post->get('preview')), true);
137 202 }
138 -
139 203 if (empty($preview)) {
140 204 $this->close_tab_response();
141 205 } else {
142 206 $data = $preview;
@@ -141,162 +205,146 @@
141 205 } else {
142 206 $data = $preview;
143 207 $pages = $preview['pages'];
144 208 unset($preview['pages']);
145 -
146 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
147 -
148 - $template = new Model_E2pdf_Template();
149 - foreach ($data as $key => $value) {
150 - $template->set($key, $value);
151 - }
152 -
153 - $preview_pages = array();
154 - foreach ($pages as $page_key => $page_value) {
155 - $page = new Model_E2pdf_Page();
156 - foreach ($page_value as $page_value_key => $page_value_value) {
157 - $page->set($page_value_key, $page_value_value);
209 + if (wp_verify_nonce(isset($preview['_wpnonce']) ? $preview['_wpnonce'] : '', 'e2pdf_templates')) {
210 + $template = new Model_E2pdf_Template();
211 + foreach ($data as $key => $value) {
212 + $template->set($key, $value);
158 213 }
159 - $page->set('page_id', $page_key);
214 + $template->set('uid', $template->get('uid', true));
215 + $template->set('activated', $template->get('activated', true));
160 216
161 - $elements = array();
217 + $preview_pages = array();
218 + foreach ($pages as $page_key => $page) {
219 + $new_page = new Model_E2pdf_Page();
220 + foreach ($page as $page_set_key => $page_set_value) {
221 + $new_page->set($page_set_key, $page_set_value);
222 + }
223 + $new_page->set('page_id', $page_key);
162 224
163 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
164 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
165 -
166 - foreach ($page_value['elements'] as $element_key => $element_value) {
167 - $element = new Model_E2pdf_Element();
168 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
169 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
170 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
171 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
172 - if (isset($element_value['properties']['dimension'])) {
173 - unset($element_value['properties']['dimension']);
225 + $elements = array();
226 + foreach ($page['elements'] as $element_key => $element) {
227 + if (isset($element['type'])) {
228 + switch ($element['type']) {
229 + case 'e2pdf-image':
230 + if (isset($element['properties']['quality']) && $element['properties']['quality']) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
231 + } else {
232 + $element['properties']['quality'] = $template->get('optimization');
233 + $pages[$page_key]['elements'][$element_key]['properties']['quality'] = $template->get('optimization');
234 + }
235 + if ($image = $this->helper->load('image')->get_image($element['value'], null, $element)) {
236 + $element['value'] = $image;
237 + } else {
238 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/upload.svg');
239 + $element['properties']['preview'] = '1';
240 + }
241 + break;
242 + case 'e2pdf-signature':
243 + $esig = isset($element['properties']['esig']) && $element['properties']['esig'] ? true : false;
244 + if (!$esig) {
245 + if ($image = $this->helper->load('image')->get_image($element['value'])) {
246 + $element['value'] = $image;
247 + } else {
248 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/signature.svg');
249 + $element['properties']['preview'] = '1';
250 + }
251 + }
252 + break;
253 + case 'e2pdf-qrcode':
254 + $element['type'] = 'e2pdf-image';
255 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/qrcode.svg');
256 + $element['properties']['preview'] = '1';
257 + break;
258 + case 'e2pdf-barcode':
259 + $element['type'] = 'e2pdf-image';
260 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/barcode.svg');
261 + $element['properties']['preview'] = '1';
262 + break;
263 + case 'e2pdf-graph':
264 + $element['type'] = 'e2pdf-image';
265 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/graph.svg');
266 + $element['properties']['preview'] = '1';
267 + break;
268 + case 'e2pdf-html':
269 + if (isset($element['properties']['hide_page_if_empty'])) {
270 + unset($element['properties']['hide_page_if_empty']);
271 + }
272 + if (isset($element['properties']['hide_if_empty'])) {
273 + unset($element['properties']['hide_if_empty']);
274 + }
275 + if (isset($element['properties']['nl2br']) && $element['properties']['nl2br']) {
276 + $element['value'] = nl2br($element['value']);
277 + }
278 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
279 + $element['value'] = $this->helper->load('properties')->html_worker(
280 + $element['value']
281 + );
282 + }
283 + $element['value'] = $this->helper->load('filter')->filter_html_tags(
284 + $element['value']
285 + );
286 + break;
287 + case 'e2pdf-page-number':
288 + $element['value'] = str_replace(array('[e2pdf-page-number]', '[e2pdf-page-total]'), array('e2pdf-page-number', 'e2pdf-page-total'), $element['value']);
289 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
290 + $element['value'] = $this->helper->load('properties')->html_worker(
291 + $element['value']
292 + );
293 + }
294 + $element['value'] = $this->helper->load('filter')->filter_html_tags(
295 + $element['value']
296 + );
297 + break;
298 + default:
299 + break;
174 300 }
175 301 }
176 - }
177 302
178 - foreach ($element_value as $element_value_key => $element_value_value) {
179 - $element->set($element_value_key, $element_value_value);
180 - }
303 + $new_element = new Model_E2pdf_Element();
304 + foreach ($element as $element_set_key => $element_set_value) {
305 + $new_element->set($element_set_key, $element_set_value);
306 + }
181 307
182 - if (!$element_value['properties']) {
183 - $element_properties = array();
184 - } else {
185 - $element_properties = $element_value['properties'];
308 + if (isset($element['properties'])) {
309 + $element_properties = $element['properties'];
310 + } else {
311 + $element_properties = array();
312 + }
313 + $new_element->set('properties', $element_properties);
314 + $elements[] = $new_element->get_element();
186 315 }
187 316
188 - $element->set('properties', $element_properties);
189 - $elements[] = $element->get_element();
317 + $new_page->set('elements', $elements);
318 + $preview_pages[] = $new_page->get_page();
190 319 }
191 320
192 - $page->set('elements', $elements);
193 - $preview_pages[] = $page->get_page();
194 - }
321 + $template->set('pages', $preview_pages);
322 + $template->load_fonts();
195 323
196 - $template->set('pages', $preview_pages);
197 - $request = $template->render(true);
198 -
199 - if (isset($request['error'])) {
200 - $this->add_notification('error', $request['error']);
201 - $this->render('blocks', 'notifications');
202 - } else {
203 - $filename = $template->get_filename();
204 - $file = $request['file'];
205 - $this->download_response('pdf', $file, $filename);
206 - }
207 - }
208 - }
209 -
210 - /**
211 - * @url admin.php?page=e2pdf-templates&action=convert&type=php
212 - */
213 - public function convert_action() {
214 - $preview = array();
215 -
216 - if ($this->post->get('preview')) {
217 - $preview = json_decode(stripslashes($this->post->get('preview')), true);
218 - }
219 -
220 - if (empty($preview)) {
221 - $this->close_tab_response();
222 - } else {
223 - $data = $preview;
224 - $pages = $preview['pages'];
225 - unset($preview['pages']);
226 -
227 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
228 -
229 - $template = new Model_E2pdf_Template();
230 - foreach ($data as $key => $value) {
231 - $template->set($key, $value);
232 - }
233 -
234 - $preview_pages = array();
235 - foreach ($pages as $page_key => $page_value) {
236 - $page = new Model_E2pdf_Page();
237 - foreach ($page_value as $page_value_key => $page_value_value) {
238 - $page->set($page_value_key, $page_value_value);
239 - }
240 - $page->set('page_id', $page_key);
241 -
242 - $elements = array();
243 -
244 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
245 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
246 -
247 - foreach ($page_value['elements'] as $element_key => $element_value) {
248 - $element = new Model_E2pdf_Element();
249 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
250 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
251 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
252 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
253 - if (isset($element_value['properties']['dimension'])) {
254 - unset($element_value['properties']['dimension']);
255 - }
256 - }
324 + $type = isset($_GET['type']) ? sanitize_text_field(wp_unslash($_GET['type'])) : false;
325 + if ($type == 'php') {
326 + $request = $template->render('php');
327 + if (isset($request['error'])) {
328 + $this->add_notification('error', $request['error']);
329 + $this->render('blocks', 'notifications');
330 + } else {
331 + $this->download_response('php', $request['file'], 'template');
332 + exit;
257 333 }
258 -
259 - foreach ($element_value as $element_value_key => $element_value_value) {
260 - $element->set($element_value_key, $element_value_value);
261 - }
262 -
263 - if (!$element_value['properties']) {
264 - $element_properties = array();
334 + } else {
335 + $request = $template->render();
336 + if (isset($request['error'])) {
337 + $this->add_notification('error', $request['error']);
338 + $this->render('blocks', 'notifications');
265 339 } else {
266 - $element_properties = $element_value['properties'];
340 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline', false, true);
341 + exit;
267 342 }
268 -
269 - $element->set('properties', $element_properties);
270 - $elements[] = $element->get_element();
271 343 }
272 -
273 - $page->set('elements', $elements);
274 - $preview_pages[] = $page->get_page();
275 - }
276 -
277 - $template->set('pages', $preview_pages);
278 -
279 - $allowed_types = array(
280 - 'php'
281 - );
282 -
283 - if (!in_array($this->get->get('type'), $allowed_types)) {
284 - $type = 'php';
285 344 } else {
286 - $type = $this->get->get('type');
345 + wp_die($this->message('wp_verify_nonce_error'));
287 346 }
288 -
289 - $request = $template->convert(true, $type);
290 -
291 - if (isset($request['error'])) {
292 - $this->add_notification('error', $request['error']);
293 - $this->render('blocks', 'notifications');
294 - } else {
295 - $filename = 'template';
296 - $file = $request['file'];
297 - $this->download_response($type, $file, $filename);
298 - }
299 347 }
300 348 }
301 349
302 350 /**
@@ -302,14 +350,12 @@
302 350 /**
303 351 * @url admin.php?page=e2pdf-templates&action=create
304 352 */
305 353 public function create_action() {
306 -
307 354 $template = new Model_E2pdf_Template();
308 355 $this->load_metaboxes();
309 356 $this->load_scripts();
310 357 $this->load_styles();
311 -
312 358 $this->view('license', $this->helper->get('license'));
313 359 $this->view('template', $template);
314 360 }
315 361
@@ -318,9 +364,17 @@
318 364 */
319 365 public function edit_action() {
320 366 if ($this->get->get('id')) {
321 367 $template = new Model_E2pdf_Template();
322 - if ($template->load($this->get->get('id'))) {
368 + $revision_id = (int) $this->get->get('revision_id');
369 + if ($template->load($this->get->get('id'), true, $revision_id)) {
370 + if (is_array($this->helper->get('license')->get('activated_templates'))) {
371 + if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
372 + $template->deactivate();
373 + } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
374 + $template->activate();
375 + }
376 + }
323 377 $this->view('license', $this->helper->get('license'));
324 378 $this->view('template', $template);
325 379 $this->load_metaboxes();
326 380 $this->load_scripts();
@@ -325,18 +379,19 @@
325 379 $this->load_metaboxes();
326 380 $this->load_scripts();
327 381 $this->load_styles($template->get('extension'));
328 382 } else {
329 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
383 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
330 384 $this->render('blocks', 'notifications');
331 385 }
332 386 } else {
333 - $location = $this->helper->get_url(
334 - array(
335 - 'page' => 'e2pdf-templates',
387 + $this->redirect(
388 + $this->helper->get_url(
389 + [
390 + 'page' => 'e2pdf-templates',
391 + ]
336 392 )
337 393 );
338 - $this->redirect($location);
339 394 }
340 395 }
341 396
342 397 /**
@@ -342,23 +397,29 @@
342 397 /**
343 398 * @url admin.php?page=e2pdf-templates&action=trash&id=$id
344 399 */
345 400 public function trash_action() {
346 -
347 - if ($this->get->get('id')) {
348 - $this->trash_template($this->get->get('id'));
349 - $this->add_notification('update', __('Template moved to trash', 'e2pdf'));
401 + $notification = '';
402 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
403 + if ($this->get->get('id')) {
404 + $this->trash_template($this->get->get('id'));
405 + $notification = $this->add_notification('update', __('Template Trashed', 'e2pdf'));
406 + }
407 + } else {
408 + wp_die($this->message('wp_verify_nonce_error'));
350 409 }
351 - $location = $this->helper->get_url(
352 - array(
353 - 'page' => 'e2pdf-templates',
354 - 'status' => $this->get->get('status'),
355 - 'orderby' => $this->get->get('orderby'),
356 - 'order' => $this->get->get('order'),
357 - 's' => $this->get->get('s'),
410 + $this->redirect(
411 + $this->helper->get_url(
412 + [
413 + 'page' => 'e2pdf-templates',
414 + 'status' => $this->get->get('status'),
415 + 'orderby' => $this->get->get('orderby'),
416 + 'order' => $this->get->get('order'),
417 + 's' => $this->get->get('s'),
418 + 'notification' => $notification,
419 + ]
358 420 )
359 421 );
360 - $this->redirect($location);
361 422 }
362 423
363 424 /**
364 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
@@ -363,24 +424,29 @@
363 424 /**
364 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
365 426 */
366 427 public function restore_action() {
367 -
368 - if ($this->get->get('id')) {
369 - $this->restore_template($this->get->get('id'));
370 - $this->add_notification('update', __('Template restored', 'e2pdf'));
428 + $notification = '';
429 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
430 + if ($this->get->get('id')) {
431 + $this->restore_template($this->get->get('id'));
432 + $notification = $this->add_notification('update', __('Template Restored', 'e2pdf'));
433 + }
434 + } else {
435 + wp_die($this->message('wp_verify_nonce_error'));
371 436 }
372 -
373 - $location = $this->helper->get_url(
374 - array(
375 - 'page' => 'e2pdf-templates',
376 - 'status' => $this->get->get('status'),
377 - 'orderby' => $this->get->get('orderby'),
378 - 'order' => $this->get->get('order'),
379 - 's' => $this->get->get('s'),
437 + $this->redirect(
438 + $this->helper->get_url(
439 + [
440 + 'page' => 'e2pdf-templates',
441 + 'status' => $this->get->get('status'),
442 + 'orderby' => $this->get->get('orderby'),
443 + 'order' => $this->get->get('order'),
444 + 's' => $this->get->get('s'),
445 + 'notification' => $notification,
446 + ]
380 447 )
381 448 );
382 - $this->redirect($location);
383 449 }
384 450
385 451 /**
386 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
@@ -385,23 +451,30 @@
385 451 /**
386 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
387 453 */
388 454 public function delete_action() {
455 + $notification = '';
456 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
457 + if ($this->get->get('id')) {
458 + $this->delete_template($this->get->get('id'));
459 + $notification = $this->add_notification('update', __('Template Deleted', 'e2pdf'));
460 + }
461 + } else {
462 + wp_die($this->message('wp_verify_nonce_error'));
463 + }
389 464
390 - if ($this->get->get('id')) {
391 - $this->delete_template($this->get->get('id'));
392 - $this->add_notification('update', __('Template deleted', 'e2pdf'));
393 - }
394 - $location = $this->helper->get_url(
395 - array(
396 - 'page' => 'e2pdf-templates',
397 - 'status' => $this->get->get('status'),
398 - 'orderby' => $this->get->get('orderby'),
399 - 'order' => $this->get->get('order'),
400 - 's' => $this->get->get('s'),
465 + $this->redirect(
466 + $this->helper->get_url(
467 + [
468 + 'page' => 'e2pdf-templates',
469 + 'status' => $this->get->get('status'),
470 + 'orderby' => $this->get->get('orderby'),
471 + 'order' => $this->get->get('order'),
472 + 's' => $this->get->get('s'),
473 + 'notification' => $notification,
474 + ]
401 475 )
402 476 );
403 - $this->redirect($location);
404 477 }
405 478
406 479 /**
407 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
@@ -406,23 +479,29 @@
406 479 /**
407 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
408 481 */
409 482 public function duplicate_action() {
410 -
411 - if ($this->get->get('id')) {
412 - $this->duplicate_template($this->get->get('id'));
413 - $this->add_notification('update', __('Template copy created', 'e2pdf'));
483 + $notification = '';
484 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
485 + if ($this->get->get('id')) {
486 + $this->duplicate_template($this->get->get('id'));
487 + $notification = $this->add_notification('update', __('Template Duplicated', 'e2pdf'));
488 + }
489 + } else {
490 + wp_die($this->message('wp_verify_nonce_error'));
414 491 }
415 - $location = $this->helper->get_url(
416 - array(
417 - 'page' => 'e2pdf-templates',
418 - 'status' => $this->get->get('status'),
419 - 'orderby' => $this->get->get('orderby'),
420 - 'order' => $this->get->get('order'),
421 - 's' => $this->get->get('s'),
492 + $this->redirect(
493 + $this->helper->get_url(
494 + [
495 + 'page' => 'e2pdf-templates',
496 + 'status' => $this->get->get('status'),
497 + 'orderby' => $this->get->get('orderby'),
498 + 'order' => $this->get->get('order'),
499 + 's' => $this->get->get('s'),
500 + 'notification' => $notification,
501 + ]
422 502 )
423 503 );
424 - $this->redirect($location);
425 504 }
426 505
427 506 /**
428 507 * @url admin.php?page=e2pdf-templates&action=import
@@ -427,227 +506,430 @@
427 506 /**
428 507 * @url admin.php?page=e2pdf-templates&action=import
429 508 */
430 509 public function import_action() {
510 + if ($this->post->get('_wpnonce')) {
431 511
432 - if ($this->post->get()) {
512 + if (!wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
513 + wp_die($this->message('wp_verify_nonce_error'));
514 + }
433 515
434 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
435 - $errors = array();
436 - $allowed_ext = array(
437 - 'xml'
438 - );
439 -
440 - $import = $this->files->get('template');
441 - $name = $import['name'];
442 - $tmp = $import['tmp_name'];
443 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
444 -
445 - if (!$tmp) {
446 - $this->add_notification('error', __('Please choose template to upload', 'e2pdf'));
447 - } else if ($import['error']) {
448 - $this->add_notification('error', $import['error']);
449 - } elseif (!in_array($ext, $allowed_ext)) {
450 - $this->add_notification('error', __('Incorrect file extension', 'e2pdf'));
451 - } elseif ($import['type'] != 'text/xml') {
452 - $this->add_notification('error', __('Incompatible type', 'e2pdf'));
516 + $file = $this->helper->load('files')->upload($this->files->get('template'), ['xml'], ['text/xml', 'application/xml']);
517 + if (isset($file['error'])) {
518 + $this->add_notification('error', $file['error']);
453 519 } else {
454 -
520 + $errors = [];
455 521 $options = $this->post->get('options');
456 -
457 - $xml = simplexml_load_file($import['tmp_name'], "SimpleXMLElement", LIBXML_PARSEHUGE);
458 -
459 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
460 -
461 - foreach ($pages as $page_key => $page) {
462 - if (isset($page['elements']) && !empty($page['elements'])) {
463 - foreach ($page['elements'] as $element_key => $element) {
464 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
465 - if ($options['images']) {
466 - $image = base64_decode($element['base64']);
467 - $file_name = basename($element['value']);
468 - $upload_file = wp_upload_bits($file_name, null, $image);
469 - if (!$upload_file['error']) {
470 - $wp_filetype = wp_check_filetype($file_name, null);
471 - $attachment = array(
472 - 'post_mime_type' => $wp_filetype['type'],
473 - 'post_parent' => 0,
474 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
475 - 'post_content' => '',
476 - 'post_status' => 'inherit'
477 - );
478 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
479 - if (!is_wp_error($attachment_id)) {
480 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
481 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
482 - wp_update_attachment_metadata($attachment_id, $attachment_data);
483 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
522 + $xml = simplexml_load_file($file['tmp_name'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
523 + if (!isset($xml->template->pages)) {
524 + $this->add_notification('error', __('The file is not a valid E2Pdf Template', 'e2pdf'));
525 + } else {
526 + $pages = $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->pages));
527 + if (is_array($pages)) {
528 + foreach ($pages as $page_key => $page) {
529 + if (isset($page['elements']) && !empty($page['elements'])) {
530 + foreach ($page['elements'] as $element_key => $element) {
531 + if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
532 + if ($options['images']) {
533 + $image = base64_decode($element['base64']);
534 + $file_name = basename($element['value']);
535 + $upload_file = wp_upload_bits($file_name, null, $image);
536 + if (!$upload_file['error']) {
537 + $wp_filetype = wp_check_filetype($file_name, null);
538 + $attachment = array(
539 + 'post_mime_type' => $wp_filetype['type'],
540 + 'post_parent' => 0,
541 + 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
542 + 'post_content' => '',
543 + 'post_status' => 'inherit',
544 + );
545 + $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
546 + if (!is_wp_error($attachment_id)) {
547 + require_once ABSPATH . 'wp-admin/includes/image.php';
548 + $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
549 + wp_update_attachment_metadata($attachment_id, $attachment_data);
550 + $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
551 + }
552 + }
484 553 }
554 + unset($pages[$page_key]['elements'][$element_key]['base64']);
485 555 }
486 556 }
487 - unset($pages[$page_key]['elements'][$element_key]['base64']);
488 557 }
489 558 }
490 559 }
491 - }
492 560
493 - $template = new Model_E2pdf_Template();
494 - if ($options['overwrite']) {
495 - $template->load((String) $xml->template->ID);
496 - }
561 + $template = new Model_E2pdf_Template();
562 + if ($options['overwrite']) {
563 + if ($options['overwrite'] == '1' && $options['template_id']) {
564 + $template->load((int) $options['template_id']);
565 + } elseif ($options['overwrite'] == '2' && $options['custom_template_id']) {
566 + if (!$template->load((int) $options['custom_template_id'])) {
567 + $template->set('TMP_ID', (int) $options['custom_template_id']);
568 + }
569 + } elseif ($options['overwrite'] == '3') {
570 + if (!$template->load((int) $xml->template->ID)) {
571 + $template->set('TMP_ID', (int) $xml->template->ID);
572 + }
573 + }
574 + }
575 + $template->set('title', (string) $xml->template->title);
576 + $template->set('flatten', (string) $xml->template->flatten);
577 + if (isset($xml->template->tab_order)) {
578 + $template->set('tab_order', (string) $xml->template->tab_order);
579 + }
580 + $template->set('compression', (string) $xml->template->compression);
581 + if (isset($xml->template->optimization)) {
582 + $template->set('optimization', (string) $xml->template->optimization);
583 + }
584 + $template->set('appearance', (string) $xml->template->appearance);
585 + $template->set('width', (string) $xml->template->width);
586 + $template->set('height', (string) $xml->template->height);
587 + $template->set('extension', (string) $xml->template->extension);
588 + if (isset($xml->template->item)) {
589 + $template->set('item', (string) $xml->template->item);
590 + }
591 + if (isset($xml->template->item1)) {
592 + $template->set('item1', (string) $xml->template->item1);
593 + }
594 + if (isset($xml->template->item2)) {
595 + $template->set('item2', (string) $xml->template->item2);
596 + }
497 597
498 - $template->set('title', (String) $xml->template->title);
499 - $template->set('flatten', (String) $xml->template->flatten);
500 - $template->set('format', (String) $xml->template->format);
501 - $template->set('compression', (String) $xml->template->compression);
502 - $template->set('appearance', (String) $xml->template->appearance);
503 - $template->set('width', (String) $xml->template->width);
504 - $template->set('height', (String) $xml->template->height);
505 - $template->set('extension', (String) $xml->template->extension);
598 + $fpro2pdf_backup = false;
599 + if ($xml->source) {
600 + if ((string) $xml->source == 'fpro2pdf') {
601 + $fpro2pdf_backup = true;
602 + }
603 + }
506 604
507 - if (!$options['overwrite']) {
508 - $template->set('item', "");
509 - }
605 + $extension = new Model_E2pdf_Extension();
606 + $extension->load($template->get('extension'));
607 + if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
608 + $extension->set('item', $template->get('item'));
609 + if ($template->get('item') == '-2') {
610 + $extension->set('item1', $template->get('item1'));
611 + $extension->set('item2', $template->get('item2'));
612 + }
510 613
511 - $fpro2pdf_backup = false;
614 + $updated_items = $extension->import($xml->item, $options);
615 + if ($updated_items) {
616 + if (isset($updated_items['errors'])) {
617 + $errors = array_merge($errors, $updated_items['errors']);
618 + } else {
619 + if ($template->get('item') == '-2') {
620 + if ($template->get('item1') && isset($updated_items[$template->get('item1')])) {
621 + $item1 = $updated_items[$template->get('item1')];
622 + $template->set('item1', $item1);
623 + $extension->set('item1', $item1);
624 + } else {
625 + $template->set('item1', '');
626 + $extension->set('item1', '');
627 + }
628 + if ($template->get('item2') && isset($updated_items[$template->get('item2')])) {
629 + $item2 = $updated_items[$template->get('item2')];
630 + $template->set('item2', $item2);
631 + $extension->set('item2', $item2);
632 + } else {
633 + $template->set('item2', '');
634 + $extension->set('item2', '');
635 + }
636 + } else {
637 + if (isset($updated_items[$template->get('item')])) {
638 + $item = $updated_items[$template->get('item')];
639 + $template->set('item', $item);
640 + $extension->set('item', $item);
641 + } else {
642 + $template->set('item', '');
643 + $extension->set('item', '');
644 + }
645 + }
646 + }
647 + }
648 + }
512 649
513 - if ($xml->source) {
514 - if ((String) $xml->source == 'fpro2pdf') {
515 - $template->set('item', (String) $xml->template->item);
516 - $fpro2pdf_backup = true;
650 + $template->set('format', (string) $xml->template->format);
651 + if (isset($xml->template->resample)) {
652 + $template->set('resample', (string) $xml->template->resample);
517 653 }
518 - }
654 + $template->set(
655 + 'dataset_title',
656 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title, $options, $xml, $template, $extension)
657 + );
658 + if (isset($xml->template->dataset_title1)) {
659 + $template->set(
660 + 'dataset_title1',
661 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title1, $options, $xml, $template, $extension)
662 + );
663 + }
664 + if (isset($xml->template->dataset_title2)) {
665 + $template->set(
666 + 'dataset_title2',
667 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title2, $options, $xml, $template, $extension)
668 + );
669 + }
670 + $template->set(
671 + 'button_title',
672 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->button_title, $options, $xml, $template, $extension)
673 + );
674 + if (isset($xml->template->dpdf)) {
675 + $template->set(
676 + 'dpdf',
677 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dpdf, $options, $xml, $template, $extension)
678 + );
679 + }
680 + if (isset($xml->template->attachments)) {
681 + $template->set(
682 + 'attachments',
683 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->attachments, $options, $xml, $template, $extension)
684 + );
685 + }
686 + $template->set('inline', (string) $xml->template->inline);
687 + $template->set('auto', (string) $xml->template->auto);
688 + if (isset($xml->template->rtl)) {
689 + $template->set('rtl', (string) $xml->template->rtl);
690 + }
691 + if (isset($xml->template->font_processor)) {
692 + $template->set('font_processor', (string) $xml->template->font_processor);
693 + }
694 + $template->set(
695 + 'name',
696 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->name, $options, $xml, $template, $extension)
697 + );
698 + if (isset($xml->template->savename)) {
699 + $template->set(
700 + 'savename',
701 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->savename, $options, $xml, $template, $extension)
702 + );
703 + }
704 + $template->set(
705 + 'password',
706 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->password, $options, $xml, $template, $extension)
707 + );
708 + if (isset($xml->template->owner_password)) {
709 + $template->set(
710 + 'owner_password',
711 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->owner_password, $options, $xml, $template, $extension)
712 + );
713 + }
714 + if (isset($xml->template->permissions)) {
715 + $template->set('permissions', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->permissions)));
716 + } else {
717 + $template->set('permissions', array('printing'));
718 + }
719 + if (isset($xml->template->hooks)) {
720 + $template->set(
721 + 'hooks',
722 + (string) $xml->template->hooks
723 + );
724 + }
519 725
520 - $template->set('inline', (String) $xml->template->inline);
521 - $template->set('auto', (String) $xml->template->auto);
522 - $template->set('font', (String) $xml->template->font);
523 - $template->set('font_size', (String) $xml->template->font_size);
524 - $template->set('font_color', (String) $xml->template->font_color);
525 - $template->set('line_height', (String) $xml->template->line_height);
526 - $template->set('fonts', stripslashes_deep(unserialize(base64_decode((String) $xml->template->fonts))));
527 -
528 - $extension = new Model_E2pdf_Extension();
529 - $extension->load($template->get('extension'));
530 -
531 - if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
532 - $template->set('item', (String) $xml->template->item);
533 - $extension->set('item', $template->get('item'));
534 - if ($updated_item = $extension->import($xml->item, (String) $xml->template->item, $options)) {
535 - if (is_array($updated_item) && array_key_exists('errors', $updated_item)) {
536 - $errors = array_merge($errors, $updated_item['errors']);
537 - } else {
538 - $template->set('item', $updated_item);
539 - $extension->set('item', $updated_item);
540 - }
726 + $template->set(
727 + 'meta_title',
728 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_title, $options, $xml, $template, $extension)
729 + );
730 + $template->set(
731 + 'meta_subject',
732 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_subject, $options, $xml, $template, $extension)
733 + );
734 + $template->set(
735 + 'meta_author',
736 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_author, $options, $xml, $template, $extension)
737 + );
738 + $template->set(
739 + 'meta_keywords',
740 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_keywords, $options, $xml, $template, $extension)
741 + );
742 + if (isset($xml->template->lang_code)) {
743 + $template->set('lang_code', (string) $xml->template->lang_code);
541 744 }
542 - }
745 + $template->set('font', (string) $xml->template->font);
746 + $template->set('font_size', (string) $xml->template->font_size);
747 + $template->set('font_color', (string) $xml->template->font_color);
748 + $template->set('line_height', (string) $xml->template->line_height);
749 + if (isset($xml->template->text_align)) {
750 + $template->set('text_align', (string) $xml->template->text_align);
751 + }
752 + $template->set('fonts', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->fonts)));
753 + $template->set(
754 + 'properties',
755 + apply_filters('e2pdf_controller_templates_import_properties', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->properties)), $options, $xml, $template, $extension)
756 + );
757 + $template->set(
758 + 'actions',
759 + apply_filters('e2pdf_controller_templates_import_actions', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->actions)), $options, $xml, $template, $extension)
760 + );
761 + $template->set(
762 + 'pages',
763 + apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension)
764 + );
543 765
544 - $pages = apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension);
545 - $dataset_title = apply_filters('e2pdf_controller_templates_import_dataset_title', (String) $xml->template->dataset_title, $options, $xml, $template, $extension);
546 - $button_title = apply_filters('e2pdf_controller_templates_import_button_title', (String) $xml->template->button_title, $options, $xml, $template, $extension);
547 - $name = apply_filters('e2pdf_controller_templates_import_name', (String) $xml->template->name, $options, $xml, $template, $extension);
548 - $password = apply_filters('e2pdf_controller_templates_import_password', (String) $xml->template->password, $options, $xml, $template, $extension);
549 - $meta_title = apply_filters('e2pdf_controller_templates_import_meta_title', (String) $xml->template->meta_title, $options, $xml, $template, $extension);
550 - $meta_subject = apply_filters('e2pdf_controller_templates_import_meta_subject', (String) $xml->template->meta_subject, $options, $xml, $template, $extension);
551 - $meta_author = apply_filters('e2pdf_controller_templates_import_meta_author', (String) $xml->template->meta_author, $options, $xml, $template, $extension);
552 - $meta_keywords = apply_filters('e2pdf_controller_templates_import_meta_keywords', (String) $xml->template->meta_keywords, $options, $xml, $template, $extension);
766 + if ($options['fonts'] && $xml->fonts) {
767 + $model_e2pdf_font = new Model_E2pdf_Font();
768 + $fonts = $model_e2pdf_font->get_fonts();
553 769
554 - $template->set('pages', $pages);
555 - $template->set('dataset_title', $dataset_title);
556 - $template->set('button_title', $button_title);
557 - $template->set('name', $name);
558 - $template->set('password', $password);
559 - $template->set('meta_title', $meta_title);
560 - $template->set('meta_subject', $meta_subject);
561 - $template->set('meta_author', $meta_author);
562 - $template->set('meta_keywords', $meta_keywords);
770 + if ($xml->fonts) {
771 + foreach ($xml->fonts->children() as $key => $font) {
772 + $title = (string) $font->title;
773 + $name = (string) $font->name;
774 + $value = (string) $font->value;
563 775
564 - if ($options['fonts'] && $xml->fonts) {
565 - $model_e2pdf_font = new Model_E2pdf_Font();
566 - $fonts = $model_e2pdf_font->get_fonts();
776 + if ($title == 'Noto Sans' && $name == 'NotoSans-Regular.ttf') {
777 + $title = 'Noto Sans Regular';
778 + }
567 779
568 - if ($xml->fonts) {
569 - foreach ($xml->fonts->children() as $key => $font) {
570 - $title = (String) $font->title;
571 - $name = (String) $font->name;
572 - $value = (String) $font->value;
573 -
574 - $exist = array_search($title, $fonts);
575 - if (!$exist) {
576 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
577 - $f_name = $name;
578 - } else {
579 - $i = 0;
580 - do {
581 - $f_name = $i . '_' . $name;
582 - $i++;
583 - } while (file_exists($this->helper->get('fonts_dir') . $f_name));
780 + $exist = array_search($title, $fonts);
781 + if (!$exist) {
782 + if (!file_exists($this->helper->get('fonts_dir') . $name)) {
783 + $f_name = $name;
784 + } else {
785 + $i = 0;
786 + do {
787 + $f_name = $i . '_' . $name;
788 + $i++;
789 + } while (file_exists($this->helper->get('fonts_dir') . $f_name));
790 + }
791 + $font_ext = strtolower(pathinfo($f_name, PATHINFO_EXTENSION));
792 + if (in_array($font_ext, $model_e2pdf_font->get_allowed_extensions())) {
793 + file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value), LOCK_EX);
794 + }
584 795 }
585 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
586 796 }
587 797 }
588 798 }
589 - }
590 799
591 - if ($xml->pdf && $xml->pdf->source) {
800 + if ($xml->pdf && $xml->pdf->source) {
592 801
593 - $pdf_name = md5(time());
594 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
595 - $pdf_images_dir = $pdf_dir . "images/";
802 + $pdf_name = md5(time());
803 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
804 + $pdf_images_dir = $pdf_dir . 'images/';
596 805
597 - $this->helper->create_dir($pdf_dir);
598 - $this->helper->create_dir($pdf_images_dir);
806 + $this->helper->create_dir($pdf_dir);
807 + $this->helper->create_dir($pdf_images_dir);
599 808
600 - $pdf_source = (String) $xml->pdf->source;
601 - file_put_contents($pdf_dir . $pdf_name . ".pdf", base64_decode($pdf_source));
809 + $pdf_source = (string) $xml->pdf->source;
810 + file_put_contents($pdf_dir . $pdf_name . '.pdf', base64_decode($pdf_source), LOCK_EX);
602 811
603 - if ($xml->pdf->images) {
604 - foreach ($xml->pdf->images->children() as $key => $image) {
605 - $page_id = (String) $image->page_id;
606 - $image_source = (String) $image->source;
607 - file_put_contents($pdf_dir . "images/" . $page_id . ".png", base64_decode($image_source));
812 + if ($xml->pdf->images) {
813 + foreach ($xml->pdf->images->children() as $key => $image) {
814 + $page_id = (string) $image->page_id;
815 + $image_source = (string) $image->source;
816 + file_put_contents($pdf_dir . 'images/' . $page_id . '.png', base64_decode($image_source), LOCK_EX);
817 + }
608 818 }
819 + $template->set('pdf', $pdf_name);
609 820 }
610 - $template->set('pdf', $pdf_name);
611 - }
612 821
613 - if (empty($errors)) {
614 - $template->save(true);
615 -
616 - if ($options['item'] && (String) $xml->template->item != $template->get('item') && $template->get('ID') != (String) $xml->template->ID) {
617 - $extension->after_import((String) $xml->template->ID, $template->get('ID'));
822 + if (empty($errors)) {
823 + $template->save(true);
824 + if ($options['item']) {
825 + $extension->after_import((string) $xml->template->ID, $template->get('ID'));
826 + }
827 + $template->activate();
828 + if ($template->get('ID')) {
829 + $this->add_notification(
830 + 'update', sprintf(
831 + __('Template Imported: <a target="_blank" href="%1$s">View</a> | <a target="_blank" href="%2$s">Edit</a>', 'e2pdf'),
832 + $this->helper->get_url(
833 + [
834 + 'page' => 'e2pdf-templates',
835 + 'action' => 'view',
836 + 'id' => $template->get('ID')
837 + ]
838 + ),
839 + $this->helper->get_url(
840 + [
841 + 'page' => 'e2pdf-templates',
842 + 'action' => 'edit',
843 + 'id' => $template->get('ID')
844 + ]
845 + )
846 + )
847 + );
848 + } else {
849 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
850 + }
851 + } else {
852 + foreach ($errors as $key => $error) {
853 + $this->add_notification('error', $error);
854 + }
618 855 }
619 -
620 - $this->add_notification('update', __('Template imported successfully', 'e2pdf'));
621 - } else {
622 - foreach ($errors as $key => $error) {
623 - $this->add_notification('error', __($error, 'e2pdf'));
624 - }
625 856 }
626 -
627 - unlink($import['tmp_name']);
857 + if (is_file($file['tmp_name'])) {
858 + unlink($file['tmp_name']);
859 + }
628 860 }
629 861 }
630 862
631 863 $this->view('import_disabled', false);
632 864 if (!$this->helper->load('xml')->check()) {
633 - $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
865 + $this->add_notification('error', sprintf(__('The PHP %s extension is required', 'e2pdf'), 'SimpleXml'));
634 866 $this->view('import_disabled', true);
635 867 }
636 868
869 + global $wpdb;
870 +
871 + $order_condition = array(
872 + 'orderby' => 'ID',
873 + 'order' => 'desc',
874 + );
875 + $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
876 + $tpls = $wpdb->get_results($wpdb->prepare('SELECT `ID`, `title` FROM `' . (new Model_E2pdf_Template())->get_table() . '`' . $orderby . ''));
877 + $templates = [
878 + '' => __('--- Select ---', 'e2pdf')
879 + ];
880 + if (!empty($tpls)) {
881 + foreach ($tpls as $tpl) {
882 + $templates[$tpl->ID] = $tpl->ID . ' | ' . $tpl->title;
883 + }
884 + }
885 +
637 886 $options = array(
638 - 'common' => array(
887 + 'overwrite' => [
888 + 'name' => __('Overwrite Options', 'e2pdf'),
889 + 'options' => [
890 + [
891 + 'name' => __('Overwrite Template by ID', 'e2pdf'),
892 + 'key' => 'options[overwrite]',
893 + 'value' => '',
894 + 'default_value' => '',
895 + 'type' => 'select',
896 + 'options' => [
897 + '' => __('Create New E2Pdf Template ID', 'e2pdf'),
898 + '1' => __('Existing Template ID', 'e2pdf'),
899 + '2' => __('Custom Template ID', 'e2pdf'),
900 + '3' => __('Backup Template ID', 'e2pdf'),
901 + ]
902 + ],
903 + [
904 + 'name' => __('Template ID', 'e2pdf'),
905 + 'key' => 'options[template_id]',
906 + 'value' => '',
907 + 'default_value' => '',
908 + 'type' => 'select',
909 + 'options' => $templates,
910 + 'li' => array(
911 + 'class' => 'e2pdf-import-overwrite-option e2pdf-hide',
912 + ),
913 + ],
914 + [
915 + 'name' => __('Template ID', 'e2pdf'),
916 + 'key' => 'options[custom_template_id]',
917 + 'value' => '',
918 + 'default_value' => '',
919 + 'type' => 'text',
920 + 'class' => 'e2pdf-numbers',
921 + 'placeholder' => __('Template ID', 'e2pdf'),
922 + 'li' => array(
923 + 'class' => 'e2pdf-import-overwrite-option e2pdf-hide',
924 + ),
925 + ],
926 + ],
927 + ],
928 + 'template' => array(
639 929 'name' => __('Template Options', 'e2pdf'),
640 930 'options' => array(
641 931 array(
642 - 'name' => __('Overwrite template by ID', 'e2pdf'),
643 - 'key' => 'options[overwrite]',
644 - 'value' => '0',
645 - 'default_value' => '0',
646 - 'type' => 'checkbox',
647 - 'placeholder' => '',
648 - ),
649 - array(
650 932 'name' => __('Import Images', 'e2pdf'),
651 933 'key' => 'options[images]',
652 934 'value' => '1',
653 935 'default_value' => '0',
@@ -660,16 +942,16 @@
660 942 'value' => '1',
661 943 'default_value' => '0',
662 944 'type' => 'checkbox',
663 945 'placeholder' => '',
664 - )
665 - )
946 + ),
947 + ),
666 948 ),
667 949 'item' => array(
668 - 'name' => __('Item Options', 'e2pdf'),
950 + 'name' => __('Connection Options', 'e2pdf'),
669 951 'options' => array(
670 952 array(
671 - 'name' => __('Import Item', 'e2pdf'),
953 + 'name' => __('Import Connection', 'e2pdf'),
672 954 'key' => 'options[item]',
673 955 'value' => '0',
674 956 'default_value' => '0',
675 957 'type' => 'checkbox',
@@ -674,12 +956,12 @@
674 956 'default_value' => '0',
675 957 'type' => 'checkbox',
676 958 'placeholder' => '',
677 959 'class' => 'e2pdf-collapse',
678 - 'data-collapse' => 'e2pdf-import-extension-option'
960 + 'data-collapse' => 'e2pdf-import-extension-option',
679 961 ),
680 - )
681 - )
962 + ),
963 + ),
682 964 );
683 965
684 966 $options = apply_filters('e2pdf_controller_templates_import_options', $options);
685 967 $this->view('options', $options);
@@ -688,130 +970,202 @@
688 970
689 971 /**
690 972 * @url admin.php?page=e2pdf-templates&action=backup&id=$id
691 973 */
692 - public function backup_action() {
693 -
694 - if ($this->post->get()) {
695 -
696 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
697 -
698 - if ($this->helper->load('xml')->check()) {
699 -
700 - $options = $this->post->get('options');
701 - $xml = $this->helper->load('xml')->create('backup');
702 -
703 - $template = new Model_E2pdf_Template();
704 - if ($template->load($this->post->get('id'))) {
705 -
706 - if ($template->get('title') != '') {
707 - $filename = $template->get('title') . "." . date('Y-m-d.H-i-s') . ".e2pdf";
708 - } else {
709 - $filename = date('Y-m-d.H-i-s') . ".e2pdf";
710 - }
711 -
712 - $pages = $template->get('pages');
713 - if ($options['images']) {
714 - foreach ($pages as $page_key => $page) {
715 - if (isset($page['elements']) && !empty($page['elements'])) {
716 - foreach ($page['elements'] as $element_key => $element) {
717 - if ($element['type'] === 'e2pdf-image') {
718 - $pages[$page_key]['elements'][$element_key]['base64'] = $this->helper->load('image')->get_image($element['value']);
974 + public function download_action() {
975 + if ($this->post->get('_wpnonce')) {
976 + if (wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
977 + if ($this->helper->load('xml')->check()) {
978 + $options = $this->post->get('options');
979 + $xml = $this->helper->load('xml')->create('backup');
980 + $template = new Model_E2pdf_Template();
981 + if ($template->load($this->post->get('id'))) {
982 + if ($template->get('title') != '') {
983 + $filename = $template->get('ID') . ' - ' . $template->get('title') . '.' . date('Y-m-d.H-i-s') . '.e2pdf';
984 + } else {
985 + $filename = date('Y-m-d.H-i-s') . '.e2pdf';
986 + }
987 + $pages = $template->get('pages');
988 + if ($options['images']) {
989 + foreach ($pages as $page_key => $page) {
990 + if (isset($page['elements']) && !empty($page['elements'])) {
991 + foreach ($page['elements'] as $element_key => $element) {
992 + if ($element['type'] === 'e2pdf-image') {
993 + $file = false;
994 + if ($this->helper->load('pdf')->get_extension($element['value'])) {
995 + $file = $this->helper->load('pdf')->get_pdf($element['value']);
996 + } else {
997 + $file = $this->helper->load('image')->get_image($element['value']);
998 + }
999 + if ($file) {
1000 + $pages[$page_key]['elements'][$element_key]['base64'] = $file;
1001 + }
1002 + }
719 1003 }
720 1004 }
721 1005 }
722 1006 }
723 - }
724 1007
725 - $pages = apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension());
726 - $dataset_title = apply_filters('e2pdf_controller_templates_backup_dataset_title', $template->get('dataset_title'), $options, $template, $template->extension());
727 - $button_title = apply_filters('e2pdf_controller_templates_backup_button_title', $template->get('button_title'), $options, $template, $template->extension());
728 - $name = apply_filters('e2pdf_controller_templates_backup_name', $template->get('name'), $options, $template, $template->extension());
729 - $password = apply_filters('e2pdf_controller_templates_backup_password', $template->get('password'), $options, $template, $template->extension());
730 - $meta_title = apply_filters('e2pdf_controller_templates_backup_meta_title', $template->get('meta_title'), $options, $template, $template->extension());
731 - $meta_subject = apply_filters('e2pdf_controller_templates_backup_meta_subject', $template->get('meta_subject'), $options, $template, $template->extension());
732 - $meta_author = apply_filters('e2pdf_controller_templates_backup_meta_author', $template->get('meta_author'), $options, $template, $template->extension());
733 - $meta_keywords = apply_filters('e2pdf_controller_templates_backup_meta_keywords', $template->get('meta_keywords'), $options, $template, $template->extension());
1008 + /*
1009 + * Build Xml
1010 + */
1011 + $xml->addChildCData('version', $this->helper->get('version'));
1012 + $xml->addChildCData('date', date('Y-m-d H:i:s'));
734 1013
735 - // build xml
736 - $xml->addChildCData('version', $this->helper->get('version'));
737 - $xml->addChildCData('date', date('Y-m-d H:i:s'));
1014 + $options_xml = $xml->addChild('options');
1015 + foreach ($options as $option_key => $option) {
1016 + $options_xml->addChildCData($option_key, $option);
1017 + }
1018 + $template_xml = $xml->addChild('template');
1019 + $template_xml->addChildCData('ID', $template->get('ID'));
1020 + $template_xml->addChildCData('title', $template->get('title'));
1021 + $template_xml->addChildCData('created_at', $template->get('created_at'));
1022 + $template_xml->addChildCData('updated_at', $template->get('updated_at'));
1023 + $template_xml->addChildCData('flatten', $template->get('flatten'));
1024 + $template_xml->addChildCData('tab_order', $template->get('tab_order'));
1025 + $template_xml->addChildCData('compression', $template->get('compression'));
1026 + $template_xml->addChildCData('optimization', $template->get('optimization'));
1027 + $template_xml->addChildCData('appearance', $template->get('appearance'));
1028 + $template_xml->addChildCData('width', $template->get('width'));
1029 + $template_xml->addChildCData('height', $template->get('height'));
1030 + $template_xml->addChildCData('extension', $template->get('extension'));
1031 + $template_xml->addChildCData('item', $template->get('item'));
1032 + $template_xml->addChildCData('item1', $template->get('item1'));
1033 + $template_xml->addChildCData('item2', $template->get('item2'));
1034 + $template_xml->addChildCData('format', $template->get('format'));
1035 + $template_xml->addChildCData('resample', $template->get('resample'));
1036 + $template_xml->addChildCData(
1037 + 'dataset_title',
1038 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title'), $options, $template, $template->extension())
1039 + );
1040 + $template_xml->addChildCData(
1041 + 'dataset_title1',
1042 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title1'), $options, $template, $template->extension())
1043 + );
1044 + $template_xml->addChildCData(
1045 + 'dataset_title2',
1046 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title2'), $options, $template, $template->extension())
1047 + );
1048 + $template_xml->addChildCData(
1049 + 'button_title',
1050 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('button_title'), $options, $template, $template->extension())
1051 + );
1052 + $template_xml->addChildCData(
1053 + 'dpdf',
1054 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dpdf'), $options, $template, $template->extension())
1055 + );
1056 + $template_xml->addChildCData(
1057 + 'attachments',
1058 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('attachments'), $options, $template, $template->extension())
1059 + );
1060 + $template_xml->addChildCData('inline', $template->get('inline'));
1061 + $template_xml->addChildCData('auto', $template->get('auto'));
1062 + $template_xml->addChildCData('rtl', $template->get('rtl'));
1063 + $template_xml->addChildCData('font_processor', $template->get('font_processor'));
1064 + $template_xml->addChildCData(
1065 + 'name',
1066 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('name'), $options, $template, $template->extension())
1067 + );
1068 + $template_xml->addChildCData(
1069 + 'savename',
1070 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('savename'), $options, $template, $template->extension())
1071 + );
1072 + $template_xml->addChildCData(
1073 + 'password',
1074 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('password'), $options, $template, $template->extension())
1075 + );
1076 + $template_xml->addChildCData(
1077 + 'owner_password',
1078 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('owner_password'), $options, $template, $template->extension())
1079 + );
1080 + $template_xml->addChildCData('permissions', base64_encode(serialize($template->get('permissions'))));
1081 + $template_xml->addChildCData('hooks', $template->get('hooks'));
1082 + $template_xml->addChildCData(
1083 + 'meta_title',
1084 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_title'), $options, $template, $template->extension())
1085 + );
1086 + $template_xml->addChildCData(
1087 + 'meta_subject',
1088 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_subject'), $options, $template, $template->extension())
1089 + );
1090 + $template_xml->addChildCData(
1091 + 'meta_author',
1092 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_author'), $options, $template, $template->extension())
1093 + );
1094 + $template_xml->addChildCData(
1095 + 'meta_keywords',
1096 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_keywords'), $options, $template, $template->extension())
1097 + );
1098 + $template_xml->addChildCData('lang_code', $template->get('lang_code'));
1099 + $template_xml->addChildCData('font', $template->get('font'));
1100 + $template_xml->addChildCData('font_size', $template->get('font_size'));
1101 + $template_xml->addChildCData('font_color', $template->get('font_color'));
1102 + $template_xml->addChildCData('line_height', $template->get('line_height'));
1103 + $template_xml->addChildCData('text_align', $template->get('text_align'));
1104 + $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
1105 + $template_xml->addChildCData(
1106 + 'properties', base64_encode(
1107 + serialize(
1108 + apply_filters('e2pdf_controller_templates_backup_properties', $template->get('properties'), $options, $template, $template->extension())
1109 + )
1110 + )
1111 + );
1112 + $template_xml->addChildCData(
1113 + 'actions', base64_encode(
1114 + serialize(
1115 + apply_filters('e2pdf_controller_templates_backup_actions', $template->get('actions'), $options, $template, $template->extension())
1116 + )
1117 + )
1118 + );
1119 + $template_xml->addChildCData('pages', base64_encode(
1120 + serialize(
1121 + apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension())
1122 + )
1123 + )
1124 + );
738 1125
739 - $options_xml = $xml->addChild('options');
740 - foreach ($options as $option_key => $option) {
741 - $options_xml->addChildCData($option_key, $option);
742 - }
743 -
744 - $template_xml = $xml->addChild('template');
745 - $template_xml->addChildCData('ID', $template->get('ID'));
746 - $template_xml->addChildCData('title', $template->get('title'));
747 - $template_xml->addChildCData('created_at', $template->get('created_at'));
748 - $template_xml->addChildCData('updated_at', $template->get('updated_at'));
749 - $template_xml->addChildCData('flatten', $template->get('flatten'));
750 - $template_xml->addChildCData('format', $template->get('format'));
751 - $template_xml->addChildCData('compression', $template->get('compression'));
752 - $template_xml->addChildCData('appearance', $template->get('appearance'));
753 - $template_xml->addChildCData('width', $template->get('width'));
754 - $template_xml->addChildCData('height', $template->get('height'));
755 - $template_xml->addChildCData('extension', $template->get('extension'));
756 - $template_xml->addChildCData('item', $template->get('item'));
757 - $template_xml->addChildCData('dataset_title', $dataset_title);
758 - $template_xml->addChildCData('button_title', $button_title);
759 - $template_xml->addChildCData('inline', $template->get('inline'));
760 - $template_xml->addChildCData('auto', $template->get('auto'));
761 - $template_xml->addChildCData('name', $name);
762 - $template_xml->addChildCData('password', $password);
763 - $template_xml->addChildCData('meta_title', $meta_title);
764 - $template_xml->addChildCData('meta_subject', $meta_subject);
765 - $template_xml->addChildCData('meta_author', $meta_author);
766 - $template_xml->addChildCData('meta_keywords', $meta_keywords);
767 - $template_xml->addChildCData('font', $template->get('font'));
768 - $template_xml->addChildCData('font_size', $template->get('font_size'));
769 - $template_xml->addChildCData('font_color', $template->get('font_color'));
770 - $template_xml->addChildCData('line_height', $template->get('line_height'));
771 - $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
772 - $template_xml->addChildCData('pages', base64_encode(serialize($pages)));
773 -
774 -//include pdf
775 - if ($template->get('pdf')) {
776 - $pdf_xml = $xml->addChild('pdf');
777 - $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")));
778 - $pdf_xml_images = $pdf_xml->addChild('images');
779 - foreach ($template->get('pages') as $key => $page) {
780 - $pdf_xml_image = $pdf_xml_images->addChild('image');
781 - $pdf_xml_image->addChildCData('page_id', $page['page_id']);
782 - $pdf_xml_image->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/" . $page['page_id'] . ".png")));
1126 + // include pdf
1127 + if ($template->get('pdf')) {
1128 + $pdf_xml = $xml->addChild('pdf');
1129 + $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf')));
1130 + $pdf_xml_images = $pdf_xml->addChild('images');
1131 + foreach ($template->get('pages') as $key => $page) {
1132 + $pdf_xml_image = $pdf_xml_images->addChild('image');
1133 + $pdf_xml_image->addChildCData('page_id', $page['page_id']);
1134 + $pdf_xml_image->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . '/images/' . $page['page_id'] . '.png')));
1135 + }
783 1136 }
784 - }
785 1137
786 -//include fonts
787 - if ($options['fonts']) {
788 - $fonts_xml = $xml->addChild('fonts');
789 - if ($template->get('fonts')) {
790 - $model_e2pdf_font = new Model_E2pdf_Font();
791 - foreach ($template->get('fonts') as $key => $value) {
792 - $font = $fonts_xml->addChild('font');
793 - $font->addChildCData('title', $value);
794 - $font->addChildCData('name', $key);
795 - $font->addChildCData('value', $model_e2pdf_font->get_font($key));
1138 + // include fonts
1139 + if ($options['fonts']) {
1140 + $fonts_xml = $xml->addChild('fonts');
1141 + if ($template->get('fonts')) {
1142 + $model_e2pdf_font = new Model_E2pdf_Font();
1143 + foreach ($template->get('fonts') as $key => $value) {
1144 + $font = $fonts_xml->addChild('font');
1145 + $font->addChildCData('title', $value);
1146 + $font->addChildCData('name', $key);
1147 + $font->addChildCData('value', $model_e2pdf_font->get_font($key));
1148 + }
796 1149 }
797 1150 }
798 - }
799 1151
800 -//include item
801 - if ($options['item']) {
802 - if ($template->extension()->method('backup')) {
803 - $item = $xml->addChild('item');
804 - $template->extension()->backup($item);
1152 + // include item
1153 + if ($options['item']) {
1154 + if ($template->extension()->method('backup')) {
1155 + $item = $xml->addChild('item');
1156 + $template->extension()->backup($item);
1157 + }
805 1158 }
1159 + $this->download_response('xml', $this->helper->load('xml')->get_xml(), $filename);
1160 + exit;
1161 + } else {
1162 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
1163 + $this->render('blocks', 'notifications');
806 1164 }
807 -
808 - $file = $this->helper->load('xml')->get_xml();
809 - $this->download_response('xml', $file, $filename);
810 - } else {
811 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
812 - $this->render('blocks', 'notifications');
813 1165 }
1166 + } else {
1167 + wp_die($this->message('wp_verify_nonce_error'));
814 1168 }
815 1169 }
816 1170
817 1171 $this->view('export_disabled', false);
@@ -816,9 +1170,9 @@
816 1170
817 1171 $this->view('export_disabled', false);
818 1172
819 1173 if (!$this->helper->load('xml')->check()) {
820 - $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
1174 + $this->add_notification('error', sprintf(__('The PHP %s extension is required', 'e2pdf'), 'SimpleXml'));
821 1175 $this->view('export_disabled', true);
822 1176 }
823 1177
824 1178 $template = new Model_E2pdf_Template();
@@ -830,15 +1184,15 @@
830 1184 'common' => array(
831 1185 'name' => __('Options', 'e2pdf'),
832 1186 'options' => array(
833 1187 array(
834 - 'name' => __('Include Item', 'e2pdf'),
1188 + 'name' => __('Include Connection', 'e2pdf'),
835 1189 'key' => 'options[item]',
836 - 'value' => $template->extension()->method('backup') ? 1 : 0,
1190 + 'value' => $template->extension()->method('backup') ? '1' : '0',
837 1191 'default_value' => 0,
838 1192 'type' => 'checkbox',
839 1193 'placeholder' => '',
840 - 'disabled' => $template->extension()->method('backup') ? false : 'disabled'
1194 + 'disabled' => $template->extension()->method('backup') ? false : 'disabled',
841 1195 ),
842 1196 array(
843 1197 'name' => __('Include Images', 'e2pdf'),
844 1198 'key' => 'options[images]',
@@ -853,763 +1207,795 @@
853 1207 'value' => 1,
854 1208 'default_value' => 0,
855 1209 'type' => 'checkbox',
856 1210 'placeholder' => '',
857 - )
858 - )
859 - )
1211 + ),
1212 + ),
1213 + ),
860 1214 );
861 1215
862 1216 $options = apply_filters('e2pdf_controller_templates_backup_options', $options, $template, $template->extension());
863 1217 $this->view('options', $options);
864 1218 } else {
865 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
1219 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
866 1220 $this->render('blocks', 'notifications');
867 1221 }
868 1222 }
869 1223
1224 + // screen action
870 1225 public function screen_action() {
871 - if ($this->post->get()) {
872 - $this->check_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce');
873 - $option = $this->post->get('wp_screen_options');
874 - if (is_array($option) && isset($option['option']) && isset($option['value']) && $option['value']) {
875 - update_option($option['option'], $option['value']);
1226 + $option = $this->post->get('wp_screen_options');
1227 + if (is_array($option) && isset($option['option'], $option['value']) && $option['option'] === 'e2pdf_templates_screen_per_page') {
1228 + $per_page = (int) $option['value'];
1229 + if ($per_page > 0) {
1230 + update_option($option['option'], $per_page);
876 1231 }
877 1232 }
878 - $location = $this->helper->get_url(
879 - array(
880 - 'page' => 'e2pdf-templates',
1233 + $this->redirect(
1234 + $this->helper->get_url(
1235 + [
1236 + 'page' => 'e2pdf-templates',
1237 + ]
881 1238 )
882 1239 );
883 - $this->redirect($location);
884 1240 }
885 1241
886 - /**
887 - * Save template via ajax
888 - * action: wp_ajax_e2pdf_save_form
889 - * function: e2pdf_save_form
890 - *
891 - * @return json
892 - */
1242 + // ajax save form
893 1243 public function ajax_save_form() {
894 1244 global $wpdb;
895 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
896 -
897 - $data = json_decode($this->post->get('data'), true);
898 -
899 - $template = new Model_E2pdf_Template();
900 - if (isset($data['ID'])) {
901 - $template->load($data['ID']);
902 - if ($template->get('pdf') && $template->get('pdf') !== $data['pdf']) {
903 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
904 - $this->helper->delete_dir($old_pdf_path);
1245 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1246 + $data = json_decode($this->post->get('data'), true);
1247 + $template = new Model_E2pdf_Template();
1248 + if (isset($data['ID'])) {
1249 + $template->load($data['ID']);
905 1250 }
906 - }
907 -
908 - foreach ($data as $key => $value) {
909 - $template->set($key, $value);
910 - }
911 - $template_id = $template->save(true);
912 -
913 - if (!$template_id) {
914 - if ($wpdb->last_error) {
915 - $response = array(
916 - 'error' => $wpdb->last_error
917 - );
1251 + if (!isset($data['permissions'])) {
1252 + $data['permissions'] = array();
1253 + }
1254 + foreach ($data as $key => $value) {
1255 + if ($key == 'pdf' && $value) {
1256 + if (file_exists($this->helper->get('pdf_dir') . $value . '/' . $value . '.pdf')) {
1257 + $template->set($key, $value);
1258 + }
1259 + } else {
1260 + $template->set($key, $value);
1261 + }
1262 + }
1263 + $template_id = $template->save(true);
1264 + if (!$template_id) {
1265 + if ($wpdb->last_error) {
1266 + $response = array(
1267 + 'error' => $wpdb->last_error,
1268 + );
1269 + } else {
1270 + $response = array(
1271 + 'error' => __('Something went wrong!', 'e2pdf'),
1272 + );
1273 + }
918 1274 } else {
1275 + if (isset($data['item']) && $data['item'] == '-1') {
1276 + $template->load($template_id);
1277 + if ($template->extension()->method('auto_form')) {
1278 + $template = $template->extension()->auto_form($template, $data);
1279 + } else {
1280 + $template->set('item', '');
1281 + }
1282 + $template->save(true);
1283 + }
1284 + if (!isset($data['ID'])) {
1285 + $template->activate();
1286 + }
919 1287 $response = array(
920 - 'error' => __("Something went wrong!", "e2pdf")
1288 + 'redirect' => $this->helper->get_url(
1289 + array(
1290 + 'page' => 'e2pdf-templates',
1291 + 'action' => 'edit',
1292 + 'id' => $template->get('ID'),
1293 + 'notification' => $this->add_notification('update', __('Template Saved', 'e2pdf')),
1294 + )
1295 + ),
921 1296 );
922 1297 }
923 1298 } else {
924 - if (isset($data['item']) && $data['item'] == '-1' && $template_id) {
925 - $template->load($template_id);
926 - if ($template->extension()->method('auto_form')) {
927 - $template = $template->extension()->auto_form($template, $data);
928 - } else {
929 - $template->set('item', '');
930 - }
931 - $template->save(true);
932 - }
933 -
934 - if ($template->get('activated')) {
935 - $this->activate_template($template->get('ID'));
936 - } elseif (!$template->get('activated')) {
937 - $this->deactivate_template($template->get('ID'));
938 - }
939 -
940 - $response = array(
941 - 'redirect' => $this->helper->get_url(array(
942 - 'page' => 'e2pdf-templates',
943 - 'action' => 'edit',
944 - 'id' => $template->get('ID'))
945 - )
946 - );
947 -
948 - $this->add_notification('update', __('Template saved successfully', 'e2pdf'));
1299 + $response['error'] = $this->message('wp_verify_nonce_error');
949 1300 }
950 -
951 1301 $this->json_response($response);
952 1302 }
953 1303
954 1304 public function ajax_get_styles() {
955 1305
956 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
957 - $data = $this->post->get('data');
958 -
959 - $extension = new Model_E2pdf_Extension();
960 - if ($extension->load($data)) {
961 - $content = $extension->styles();
1306 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1307 + $data = $this->post->get('data');
1308 + $content = array();
1309 + if (isset($data['extension']) && isset($data['item'])) {
1310 + $extension = new Model_E2pdf_Extension();
1311 + if ($extension->load($data['extension'])) {
1312 + $content = $extension->styles($data['item']);
1313 + }
1314 + }
1315 + $response = array(
1316 + 'content' => $content,
1317 + );
962 1318 } else {
963 - $content = array();
1319 + $response['error'] = $this->message('wp_verify_nonce_error');
964 1320 }
965 - $response = array(
966 - 'content' => $content,
967 - );
968 1321 $this->json_response($response);
969 1322 }
970 1323
971 - /**
972 - * Get extensions via ajax
973 - * action: wp_ajax_e2pdf_extension
974 - * function: e2pdf_extension
975 - *
976 - * @return json
977 - */
1324 + // ajax extension
978 1325 public function ajax_extension() {
979 -
980 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
981 - $data = $this->post->get('data');
982 -
983 - $extension = new Model_E2pdf_Extension();
984 -
985 - $content = array();
986 - if ($extension->load($data)) {
987 - $content = $extension->items();
988 -
989 - if ($extension->method('auto_form')) {
990 - $select = new stdClass();
991 - $select->id = '-1';
992 - $select->url = 'javascript:void(0);';
993 - $select->name = __("Auto Form from PDF", "e2pdf");
994 -
995 - array_unshift($content, $select);
1326 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1327 + $data = $this->post->get('data');
1328 + $extension = new Model_E2pdf_Extension();
1329 + $content = array();
1330 + if ($extension->load($data)) {
1331 + $content = $extension->items();
1332 + if ($extension->method('merged_items')) {
1333 + $select = new stdClass();
1334 + $select->id = '-2';
1335 + $select->url = '';
1336 + $select->name = __('Merged Connections', 'e2pdf');
1337 + array_unshift($content, $select);
1338 + }
1339 + if ($extension->method('auto_form')) {
1340 + $select = new stdClass();
1341 + $select->id = '-1';
1342 + $select->url = '';
1343 + $select->name = __('Auto Form from PDF', 'e2pdf');
1344 + array_unshift($content, $select);
1345 + }
996 1346 }
1347 + $select = new stdClass();
1348 + $select->id = '';
1349 + $select->url = '';
1350 + $select->name = __('--- Select ---', 'e2pdf');
1351 + array_unshift($content, $select);
1352 + $response = array(
1353 + 'content' => $content,
1354 + );
1355 + } else {
1356 + $response['error'] = $this->message('wp_verify_nonce_error');
997 1357 }
998 -
999 - $select = new stdClass();
1000 - $select->id = '';
1001 - $select->url = 'javascript:void(0);';
1002 - $select->name = __("--- Select ---", "e2pdf");
1003 -
1004 - array_unshift($content, $select);
1005 -
1006 - $response = array(
1007 - 'content' => $content,
1008 - );
1009 1358 $this->json_response($response);
1010 1359 }
1011 1360
1012 - /**
1013 - * Get extensions via ajax
1014 - * action: wp_ajax_e2pdf_extension
1015 - * function: e2pdf_extension
1016 - *
1017 - * @return json
1018 - */
1361 + // ajax visual mapper
1019 1362 public function ajax_visual_mapper() {
1020 -
1021 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1022 -
1023 - $data = $this->post->get('data');
1024 -
1025 - $item = isset($data['item']) ? $data['item'] : '';
1026 -
1027 - $extension = new Model_E2pdf_Extension();
1028 - $extension->load($data['extension']);
1029 - $extension->set('item', $item);
1030 -
1031 - if ($visual_mapper = $extension->visual_mapper()) {
1032 - $response = array(
1033 - 'content' => $visual_mapper
1034 - );
1035 - } elseif (!$item) {
1036 - $response = array(
1037 - 'content' => __("You must set Item to use <strong>Visual Mapper</strong>", "e2pdf"),
1038 - );
1363 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1364 + $data = $this->post->get('data');
1365 + $item = isset($data['item']) ? $data['item'] : '';
1366 + $item1 = isset($data['item1']) ? $data['item1'] : '';
1367 + $item2 = isset($data['item2']) ? $data['item2'] : '';
1368 + $extension = new Model_E2pdf_Extension();
1369 + $extension->load($data['extension']);
1370 + $extension->set('item', $item);
1371 + if ($item == '-2') {
1372 + $extension->set('item1', $item1);
1373 + $extension->set('item2', $item2);
1374 + }
1375 + $visual_mapper = $extension->visual_mapper();
1376 + if ($visual_mapper) {
1377 + $response = array(
1378 + 'content' => $visual_mapper,
1379 + );
1380 + } elseif (!$item || ($item == '-2' && !$item1 && !$item2)) {
1381 + $response = array(
1382 + 'content' => __('You must set the Connection to use the Visual Mapper', 'e2pdf'),
1383 + );
1384 + } else {
1385 + $response = array(
1386 + 'content' => __("Sorry, this Extension doesn't support the Visual Mapper", 'e2pdf'),
1387 + );
1388 + }
1039 1389 } else {
1040 - $response = array(
1041 - 'content' => __("Sorry, this extension doesn't support <strong>Visual Mapper</strong>", "e2pdf"),
1042 - );
1390 + $response['error'] = $this->message('wp_verify_nonce_error');
1043 1391 }
1044 -
1045 1392 $this->json_response($response);
1046 1393 }
1047 1394
1048 - /**
1049 - * Upload Template via Ajax
1050 - * action: wp_ajax_e2pdf_upload
1051 - * function: e2pdf_upload
1052 - *
1053 - * @return json
1054 - */
1395 + // ajax upload
1055 1396 public function ajax_upload() {
1056 1397
1057 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1398 + if (!wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1399 + $this->json_response(
1400 + [
1401 + 'error' => $this->message('wp_verify_nonce_error'),
1402 + ]
1403 + );
1404 + }
1058 1405
1059 1406 $data = $this->post->get();
1060 -
1061 1407 $post_extension = $data['extension'];
1062 1408 $item = isset($data['item']) ? $data['item'] : '';
1063 1409 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1064 -
1065 1410 $font = isset($data['font']) ? $data['font'] : false;
1066 1411 $font_size = isset($data['font_size']) ? $data['font_size'] : false;
1067 1412 $line_height = isset($data['line_height']) ? $data['line_height'] : false;
1068 - $activated = isset($data['activated']) ? $data['activated'] : 0;
1069 1413 $title = isset($data['title']) ? $data['title'] : __('(no title)', 'e2pdf');
1414 + $rtl = isset($data['rtl']) && $data['rtl'] ? '1' : '0';
1415 + $text_align = isset($data['text_align']) ? $data['text_align'] : 'left';
1070 1416
1071 - $allowed_ext = array(
1072 - 'pdf'
1073 - );
1074 -
1075 - $pdf = $this->files->get('pdf');
1076 -
1077 - $name = strtolower($pdf['name']);
1078 - $tmp = $pdf['tmp_name'];
1079 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1080 -
1081 - if ($pdf['error']) {
1082 - $error = $pdf['error'];
1083 - } elseif (!in_array($ext, $allowed_ext)) {
1084 - $error = __('Incorrect file extension', 'e2pdf');
1085 - } elseif ($pdf['type'] != 'application/pdf') {
1086 - $error = __('Incompatible type', 'e2pdf');
1417 + $file = $this->helper->load('files')->upload($this->files->get('pdf'), ['pdf'], ['application/pdf']);
1418 + if (isset($file['error'])) {
1419 + $this->json_response(
1420 + [
1421 + 'error' => $file['error'],
1422 + ]
1423 + );
1087 1424 }
1088 1425
1089 - if ($error) {
1090 - $response = array(
1091 - 'error' => $error,
1092 - );
1426 + wp_raise_memory_limit('admin');
1427 + if (get_option('e2pdf_api_protocol', '0') == '1' && ($tmp = realpath($file['tmp_name']))) {
1428 + $upload = class_exists('CURLFile') ? new CURLFile($tmp) : '@' . $tmp;
1093 1429 } else {
1430 + $upload = base64_encode(file_get_contents($file['tmp_name']));
1431 + }
1094 1432
1095 - $model_e2pdf_api = new Model_E2pdf_Api();
1096 - $model_e2pdf_api->set(array(
1097 - 'action' => 'template/upload',
1098 - 'data' => array(
1099 - 'title' => $name,
1100 - 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1433 + $model_e2pdf_api = new Model_E2pdf_Api();
1434 + $model_e2pdf_api->set(
1435 + array(
1436 + 'action' => 'template/upload2',
1437 + 'data' => array(
1438 + 'title' => $file['name'],
1439 + 'pdf' => $upload,
1440 + ),
1101 1441 )
1102 - ));
1103 - $request = $model_e2pdf_api->request();
1442 + );
1443 + $request = $model_e2pdf_api->request();
1104 1444
1105 - if (!isset($request['error'])) {
1445 + if (isset($request['error'])) {
1446 + $this->json_response(
1447 + [
1448 + 'error' => $request['error'],
1449 + ]
1450 + );
1451 + }
1106 1452
1107 - $extension = new Model_E2pdf_Extension();
1108 - if ($post_extension) {
1109 - $extension->load($post_extension);
1110 - if ($item && $item != '-1') {
1111 - $extension->set('item', $item);
1112 - }
1113 - }
1453 + $extension = new Model_E2pdf_Extension();
1454 + if ($post_extension) {
1455 + $extension->load($post_extension);
1456 + if ($item && $item != '-1') {
1457 + $extension->set('item', $item);
1458 + }
1459 + }
1114 1460
1115 - $pdf_name = md5(time());
1116 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1117 - $pdf_images_dir = $pdf_dir . "images/";
1461 + $pdf_name = md5(time());
1462 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
1463 + $pdf_images_dir = $pdf_dir . 'images/';
1464 + $this->helper->create_dir($pdf_dir);
1465 + $this->helper->create_dir($pdf_images_dir);
1118 1466
1119 - $this->helper->create_dir($pdf_dir);
1120 - $this->helper->create_dir($pdf_images_dir);
1467 + if (!move_uploaded_file($file['tmp_name'], $pdf_dir . $pdf_name . '.pdf')) {
1468 + $this->json_response(
1469 + [
1470 + 'error' => 'Failed to move uploaded file',
1471 + ]
1472 + );
1473 + }
1121 1474
1122 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1123 -
1124 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1125 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1126 -
1127 - if (is_array($pages) && !empty($pages)) {
1128 - foreach ($pages as $page_key => $page) {
1129 -
1130 - $pages[$page_key]['page_id'] = $page_key;
1131 -
1132 - if (isset($page['properties']['background'])) {
1133 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1134 - unset($pages[$page_key]['properties']['background']);
1135 - }
1136 -
1137 - if (isset($page['elements']) && !empty($page['elements'])) {
1138 - foreach ($page['elements'] as $element_key => $element) {
1139 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1140 -
1141 - $image = base64_decode($element['base64']);
1142 - $file_name = basename($element['value']);
1143 -
1144 -//exif_imagetype
1145 - if (!$file_name) {
1146 - $ext = $this->helper->load('image')->get_image_extension($image);
1147 - if ($ext) {
1148 - $file_name = md5(mktime()) . "." . $ext;
1149 - }
1150 - }
1151 -
1152 - if ($file_name) {
1153 - $upload_file = wp_upload_bits($file_name, null, $image);
1154 - if (!$upload_file['error']) {
1155 - $wp_filetype = wp_check_filetype($file_name, null);
1156 - $attachment = array(
1157 - 'post_mime_type' => $wp_filetype['type'],
1158 - 'post_parent' => 0,
1159 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1160 - 'post_content' => '',
1161 - 'post_status' => 'inherit'
1162 - );
1163 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1164 - if (!is_wp_error($attachment_id)) {
1165 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1166 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1167 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1168 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1169 - }
1170 - }
1171 -
1172 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1173 - } else {
1174 - unset($pages[$page_key]['elements'][$element_key]);
1175 - }
1176 - } elseif (isset($element['name']) && $element['name']) {
1177 - $el_value = $extension->auto_map($element['name']);
1178 - if ($el_value !== false) {
1179 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1180 - }
1475 + try {
1476 + $xml_template = [];
1477 + $pages = [];
1478 + if (class_exists('XMLReader')) {
1479 + $reader = new XMLReader();
1480 + if (!$reader->XML($request['file'])) {
1481 + throw new Exception(__('Failed to parse PDF', 'e2pdf'));
1482 + }
1483 + while ($reader->read()) {
1484 + if ($reader->nodeType == XMLReader::ELEMENT) {
1485 + switch ($reader->name) {
1486 + case 'template':
1487 + $template_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1488 + $xml_template = [
1489 + 'width' => (string) $template_node->width,
1490 + 'height' => (string) $template_node->height,
1491 + 'format' => (string) $template_node->format,
1492 + 'compression' => (string) $template_node->compression,
1493 + 'appearance' => (string) $template_node->appearance,
1494 + 'meta_title' => (string) $template_node->meta_title,
1495 + 'meta_subject' => (string) $template_node->meta_subject,
1496 + 'meta_author' => (string) $template_node->meta_author,
1497 + 'meta_keywords' => (string) $template_node->meta_keywords,
1498 + 'lang_code' => (string) $template_node->lang_code,
1499 + 'font' => (string) $template_node->font,
1500 + 'font_size' => (string) $template_node->font_size,
1501 + 'font_color' => (string) $template_node->font_color,
1502 + ];
1503 + break;
1504 + case 'page':
1505 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1506 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1507 + break;
1508 + case 'fonts':
1509 + $fonts_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1510 + foreach ($fonts_node->children() as $xml_font) {
1511 + $this->helper->load('xml')->parse_xml_font($xml_font);
1181 1512 }
1182 - }
1513 + break;
1514 + default:
1515 + break;
1183 1516 }
1184 1517 }
1518 + }
1185 1519
1186 - $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1187 -
1188 - $template = new Model_E2pdf_Template();
1189 -
1190 - if ($template_id) {
1191 - $template->load($template_id);
1192 - if ($template->get('pdf')) {
1193 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1194 - $this->helper->delete_dir($old_pdf_path);
1195 - }
1196 - $template->set('title', $title);
1197 - $template->set('pages', $pages);
1198 - $template->set('pdf', $pdf_name);
1199 - $template->set('width', (String) $xml->template->width);
1200 - $template->set('height', (String) $xml->template->height);
1201 - $template->set('extension', $post_extension);
1202 - $template->set('item', $item);
1203 - $template->set('font', $font ? $font : (String) $xml->template->font);
1204 - $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1205 - $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1206 - } else {
1207 - $template->set('title', $title);
1208 - $template->set('flatten', (String) $xml->template->flatten);
1209 - $template->set('format', (String) $xml->template->format);
1210 - $template->set('compression', (String) $xml->template->compression);
1211 - $template->set('appearance', (String) $xml->template->appearance);
1212 - $template->set('width', (String) $xml->template->width);
1213 - $template->set('height', (String) $xml->template->height);
1214 - $template->set('extension', $post_extension);
1215 - $template->set('item', $item);
1216 - $template->set('dataset_title', "");
1217 - $template->set('button_title', "");
1218 - $template->set('inline', "");
1219 - $template->set('auto', "");
1220 - $template->set('name', "");
1221 - $template->set('password', "");
1222 - $template->set('meta_title', (String) $xml->template->meta_title);
1223 - $template->set('meta_subject', (String) $xml->template->meta_subject);
1224 - $template->set('meta_author', (String) $xml->template->meta_author);
1225 - $template->set('meta_keywords', (String) $xml->template->meta_keywords);
1226 - $template->set('font', $font ? $font : (String) $xml->template->font);
1227 - $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1228 - $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1229 - $template->set('font_color', (String) $xml->template->font_color);
1230 - $template->set('pages', $pages);
1231 - $template->set('pdf', $pdf_name);
1520 + $reader->close();
1521 + unset($reader);
1522 + } elseif (is_callable('simplexml_load_string')) {
1523 + $xml = simplexml_load_string($request['file'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
1524 + if (isset($xml->pages)) {
1525 + foreach ($xml->pages->page as $page_node) {
1526 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1232 1527 }
1528 + }
1529 + if (isset($xml->template)) {
1530 + $xml_template = [
1531 + 'width' => (string) $xml->template->width,
1532 + 'height' => (string) $xml->template->height,
1533 + 'format' => (string) $xml->template->format,
1534 + 'compression' => (string) $xml->template->compression,
1535 + 'appearance' => (string) $xml->template->appearance,
1536 + 'meta_title' => (string) $xml->template->meta_title,
1537 + 'meta_subject' => (string) $xml->template->meta_subject,
1538 + 'meta_author' => (string) $xml->template->meta_author,
1539 + 'meta_keywords' => (string) $xml->template->meta_keywords,
1540 + 'lang_code' => (string) $xml->template->lang_code,
1541 + 'font' => (string) $xml->template->font,
1542 + 'font_size' => (string) $xml->template->font_size,
1543 + 'font_color' => (string) $xml->template->font_color,
1544 + ];
1545 + }
1546 + if (isset($xml->fonts) && $xml->fonts) {
1547 + foreach ($xml->fonts->children() as $key => $xml_font) {
1548 + $this->helper->load('xml')->parse_xml_font($xml_font);
1549 + }
1550 + }
1551 + }
1233 1552
1234 - if ($xml->fonts) {
1553 + if (empty($pages) || !is_array($pages)) {
1554 + throw new Exception(__('Failed to parse PDF pages', 'e2pdf'));
1555 + }
1235 1556
1236 - $model_e2pdf_font = new Model_E2pdf_Font();
1237 - $fonts = $model_e2pdf_font->get_fonts();
1557 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1238 1558
1239 - foreach ($xml->fonts->children() as $key => $font) {
1240 - $font_title = (String) $font->title;
1241 - $name = (String) $font->name;
1242 - $value = (String) $font->value;
1559 + $template = new Model_E2pdf_Template();
1560 + if ($template_id) {
1561 + $template->load($template_id);
1562 + $template->set('title', $title);
1563 + $template->set('pages', $pages);
1564 + $template->set('pdf', $pdf_name);
1565 + $template->set('width', $xml_template['width']);
1566 + $template->set('height', $xml_template['height']);
1567 + $template->set('extension', $post_extension);
1568 + $template->set('item', $item);
1569 + $template->set('rtl', $rtl);
1570 + $template->set('font', $font ? $font : $xml_template['font']);
1571 + $template->set('font_size', $font_size ? $font_size : $xml_template['font_size']);
1572 + $template->set('line_height', $line_height ? $line_height : $xml_template['font_size']);
1573 + $template->set('text_align', $text_align);
1574 + } else {
1575 + $template->set('title', $title);
1576 + $template->set('flatten', '1');
1577 + $template->set('format', $xml_template['format']);
1578 + $template->set('compression', $xml_template['compression']);
1579 + $template->set('appearance', $xml_template['appearance']);
1580 + $template->set('width', $xml_template['width']);
1581 + $template->set('height', $xml_template['height']);
1582 + $template->set('extension', $post_extension);
1583 + $template->set('item', $item);
1584 + $template->set('dataset_title', '');
1585 + $template->set('button_title', '');
1586 + $template->set('dpdf', '');
1587 + $template->set('attachments', '');
1588 + $template->set('inline', '');
1589 + $template->set('auto', '');
1590 + $template->set('rtl', $rtl);
1591 + $template->set('name', '[e2pdf-dataset]');
1592 + $template->set('savename', '[e2pdf-dataset]');
1593 + $template->set('password', '');
1594 + $template->set('meta_title', $xml_template['meta_title']);
1595 + $template->set('meta_subject', $xml_template['meta_subject']);
1596 + $template->set('meta_author', $xml_template['meta_author']);
1597 + $template->set('meta_keywords', $xml_template['meta_keywords']);
1598 + $template->set('lang_code', $xml_template['lang_code']);
1599 + $template->set('font', $font ? $font : $xml_template['font']);
1600 + $template->set('font_size', $font_size ? $font_size : $xml_template['font_size']);
1601 + $template->set('line_height', $line_height ? $line_height : $xml_template['font_size']);
1602 + $template->set('text_align', $text_align);
1603 + $template->set('font_color', $xml_template['font_color']);
1604 + $template->set('pages', $pages);
1605 + $template->set('pdf', $pdf_name);
1606 + }
1607 + $template->save(true);
1243 1608
1244 - $exist = array_search($font_title, $fonts);
1245 - if (!$exist) {
1246 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
1247 - $f_name = $name;
1248 - } else {
1249 - $i = 0;
1250 - do {
1251 - $f_name = $i . '_' . $name;
1252 - $i++;
1253 - } while (file_exists($this->helper->get('fonts_dir') . $f_name));
1254 - }
1255 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
1256 - }
1257 - }
1258 - }
1259 - $template->save(true);
1609 + if ($item == '-1' && $extension->method('auto_form')) {
1610 + $template = $extension->auto_form($template, $data);
1611 + $template->save(true);
1612 + }
1260 1613
1261 - if ($item == '-1' && $extension->method('auto_form')) {
1262 - $template = $extension->auto_form($template, $data);
1263 - $template->save(true);
1264 - }
1614 + if (!$template_id) {
1615 + $template->activate();
1616 + }
1265 1617
1266 - if ($activated && !$template->get('activated')) {
1267 - $this->activate_template($template->get('ID'));
1268 - } elseif (!$activated && $template->get('activated')) {
1269 - $this->deactivate_template($template->get('ID'));
1270 - }
1271 -
1272 - $response = array(
1273 - 'redirect' => $this->helper->get_url(array(
1274 - 'page' => 'e2pdf-templates',
1275 - 'action' => 'edit',
1276 - 'id' => $template->get('ID'))
1277 - )
1278 - );
1279 - } else {
1280 - $this->helper->delete_dir($pdf_dir);
1281 - $response = array(
1282 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1283 - );
1284 - }
1285 - } else {
1286 - $response = array(
1287 - 'error' => $request['error'],
1288 - );
1618 + $this->json_response(
1619 + [
1620 + 'redirect' => $this->helper->get_url(
1621 + [
1622 + 'page' => 'e2pdf-templates',
1623 + 'action' => 'edit',
1624 + 'id' => $template->get('ID'),
1625 + ]
1626 + ),
1627 + ]
1628 + );
1629 + } catch (Exception $ex) {
1630 + if (file_exists($pdf_dir)) {
1631 + $this->helper->delete_dir($pdf_dir);
1289 1632 }
1633 + $this->json_response(
1634 + [
1635 + 'error' => $ex->getMessage(),
1636 + ]
1637 + );
1290 1638 }
1291 -
1292 - $this->json_response($response);
1293 1639 }
1294 1640
1295 - /**
1296 - * Upload Template via Ajax
1297 - * action: wp_ajax_e2pdf_upload
1298 - * function: e2pdf_upload
1299 - *
1300 - * @return json
1301 - */
1641 + // ajax reupload
1302 1642 public function ajax_reupload() {
1303 1643
1304 - $error = false;
1305 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1644 + if (!wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1645 + $this->json_response(
1646 + [
1647 + 'error' => $this->message('wp_verify_nonce_error'),
1648 + ]
1649 + );
1650 + }
1651 +
1306 1652 $data = $this->post->get();
1307 -
1308 1653 $new = isset($data['new']) ? $data['new'] : array();
1309 1654 $flush = isset($data['flush']) ? $data['flush'] : array();
1310 1655 $positions = isset($data['positions']) ? $data['positions'] : array();
1311 1656 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1312 -
1313 1657 if (!$template_id) {
1314 1658 return false;
1315 1659 }
1316 1660
1317 - $allowed_ext = array(
1318 - 'pdf'
1319 - );
1661 + $file = $this->helper->load('files')->upload($this->files->get('pdf'), ['pdf'], ['application/pdf']);
1662 + if (isset($file['error'])) {
1663 + $this->json_response(
1664 + [
1665 + 'error' => $file['error'],
1666 + ]
1667 + );
1668 + }
1320 1669
1321 - $pdf = $this->files->get('pdf');
1670 + wp_raise_memory_limit('admin');
1671 + if (get_option('e2pdf_api_protocol', '0') == '1' && ($tmp = realpath($file['tmp_name']))) {
1672 + $upload = class_exists('CURLFile') ? new CURLFile($tmp) : '@' . $tmp;
1673 + } else {
1674 + $upload = base64_encode(file_get_contents($file['tmp_name']));
1675 + }
1322 1676
1323 - $name = strtolower($pdf['name']);
1324 - $tmp = $pdf['tmp_name'];
1325 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1677 + $model_e2pdf_api = new Model_E2pdf_Api();
1678 + $model_e2pdf_api->set(
1679 + array(
1680 + 'action' => 'template/upload2',
1681 + 'data' => array(
1682 + 'title' => $file['name'],
1683 + 'pdf' => $upload,
1684 + ),
1685 + )
1686 + );
1687 + $request = $model_e2pdf_api->request();
1326 1688
1327 - if ($pdf['error']) {
1328 - $error = $pdf['error'];
1329 - } elseif (!in_array($ext, $allowed_ext)) {
1330 - $error = __('Incorrect file extension', 'e2pdf');
1331 - } elseif ($pdf['type'] != 'application/pdf') {
1332 - $error = __('Incompatible type', 'e2pdf');
1689 + if (isset($request['error'])) {
1690 + $this->json_response(
1691 + [
1692 + 'error' => $request['error'],
1693 + ]
1694 + );
1333 1695 }
1334 1696
1335 - if ($error) {
1336 - $response = array(
1337 - 'error' => $error,
1697 + $template = new Model_E2pdf_Template();
1698 + if (!$template->load($template_id)) {
1699 + $this->json_response(
1700 + [
1701 + 'error' => __('Failed to load E2Pdf Template', 'e2pdf'),
1702 + ]
1338 1703 );
1339 - } else {
1704 + }
1340 1705
1341 - $model_e2pdf_api = new Model_E2pdf_Api();
1342 - $model_e2pdf_api->set(array(
1343 - 'action' => 'template/upload',
1344 - 'data' => array(
1345 - 'title' => $name,
1346 - 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1347 - )
1348 - ));
1349 - $request = $model_e2pdf_api->request();
1706 + $extension = new Model_E2pdf_Extension();
1707 + if ($template->get('extension') && $template->get('item')) {
1708 + $extension->load($template->get('extension'));
1709 + $extension->set('item', $template->get('item'));
1710 + }
1350 1711
1351 - if (!isset($request['error'])) {
1352 - $template = new Model_E2pdf_Template();
1353 - if ($template->load($template_id)) {
1354 - if ($template->get('pdf')) {
1355 - $extension = new Model_E2pdf_Extension();
1356 - if ($template->get('extension') && $template->get('item')) {
1357 - $extension->load($template->get('extension'));
1358 - $extension->set('item', $template->get('item'));
1359 - }
1712 + $pdf_name = md5(time());
1713 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
1714 + $pdf_images_dir = $pdf_dir . 'images/';
1715 + $this->helper->create_dir($pdf_dir);
1716 + $this->helper->create_dir($pdf_images_dir);
1360 1717
1361 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1362 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1718 + if (!move_uploaded_file($file['tmp_name'], $pdf_dir . $pdf_name . '.pdf')) {
1719 + $this->json_response(
1720 + [
1721 + 'error' => 'Failed to move uploaded file',
1722 + ]
1723 + );
1724 + }
1363 1725
1364 - foreach ($pages as $page_key => $page) {
1365 - $pages[$page_key]['page_id'] = $page_key;
1726 + try {
1727 + $pages = [];
1728 + $pos_pages = [];
1729 + if (class_exists('XMLReader')) {
1730 + $reader = new XMLReader();
1731 + if (!$reader->XML($request['file'])) {
1732 + throw new Exception(__('Failed to parse PDF', 'e2pdf'));
1733 + }
1734 + while ($reader->read()) {
1735 + if ($reader->nodeType == XMLReader::ELEMENT) {
1736 + if ($reader->name == 'page') {
1737 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1738 + $pos_pages[] = (string) $page_node['number'];
1366 1739 }
1740 + }
1741 + }
1742 + $reader->close();
1743 + unset($reader);
1744 + foreach ($positions as $pos_key => $pos_page) {
1745 + if (!in_array($pos_key, $flush)) {
1746 + if ($pos_page == '0') {
1747 + $flush[] = $pos_key;
1748 + } elseif (!in_array($pos_page, $pos_pages, false)) {
1749 + throw new Exception(sprintf(__('Invalid position of %s page', 'e2pdf'), $pos_key));
1750 + }
1751 + }
1752 + }
1753 + $reader = new XMLReader();
1754 + $reader->XML($request['file']);
1755 + while ($reader->read()) {
1756 + if ($reader->nodeType == XMLReader::ELEMENT) {
1757 + switch ($reader->name) {
1758 + case 'page':
1759 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1760 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1761 + break;
1762 + default:
1763 + break;
1764 + }
1765 + }
1766 + }
1767 + $reader->close();
1768 + unset($reader);
1769 + } elseif (is_callable('simplexml_load_string')) {
1770 + $xml = simplexml_load_string($request['file'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
1771 + if (isset($xml->pages)) {
1772 + foreach ($xml->pages->page as $page_node) {
1773 + $pos_pages[] = (string) $page_node['number'];
1774 + }
1775 + }
1776 + foreach ($positions as $pos_key => $pos_page) {
1777 + if (!in_array($pos_key, $flush)) {
1778 + if ($pos_page == '0') {
1779 + $flush[] = $pos_key;
1780 + } elseif (!in_array($pos_page, $pos_pages, false)) {
1781 + throw new Exception(sprintf(__('Invalid position of %s page', 'e2pdf'), $pos_key));
1782 + }
1783 + }
1784 + }
1785 + if (isset($xml->pages)) {
1786 + foreach ($xml->pages->page as $page_node) {
1787 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1788 + }
1789 + }
1790 + }
1367 1791
1368 - $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1792 + if (empty($pages) || !is_array($pages)) {
1793 + throw new Exception(__('Failed to parse PDF pages', 'e2pdf'));
1794 + }
1369 1795
1370 - $model_e2pdf_element = new Model_E2pdf_Element();
1371 - $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1796 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1372 1797
1373 - $original_pages = $template->get('pages');
1798 + $model_e2pdf_element = new Model_E2pdf_Element();
1799 + $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1800 + $original_pages = $template->get('pages');
1374 1801
1375 - foreach ($positions as $pos_key => $pos_page) {
1376 - if (!in_array($pos_key, $flush)) {
1377 - if (!isset($pages[$pos_page])) {
1378 - $error = sprintf(__("Position of %s page incorrect", 'e2pdf'), $pos_key);
1379 - } elseif ($pages[$pos_page]['properties']['width'] < $original_pages[$pos_key]['properties']['width']) {
1380 - $error = sprintf(__("Width of PDF Page %s can't be less width of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1381 - } elseif ($pages[$pos_page]['properties']['height'] < $original_pages[$pos_key]['properties']['height']) {
1382 - $error = sprintf(__("Height of PDF Page %s can't be less height of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1383 - }
1802 + foreach ($pages as $page_key => $page) {
1803 + if (isset($page['elements']) && !empty($page['elements'])) {
1804 + foreach ($page['elements'] as $element_key => $element) {
1805 + $last_element_id++;
1806 + $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1807 + }
1808 + }
1809 + foreach ($positions as $pos_key => $pos_page) {
1810 + if ($pos_page == $page_key) {
1811 + if (in_array($pos_key, $new)) {
1812 + if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1813 + $elements = $original_pages[$pos_key]['elements'];
1814 + $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1384 1815 }
1385 - }
1386 -
1387 - if (!$error) {
1388 -
1389 - $pdf_name = md5(time());
1390 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1391 - $pdf_images_dir = $pdf_dir . "images/";
1392 -
1393 - $this->helper->create_dir($pdf_dir);
1394 - $this->helper->create_dir($pdf_images_dir);
1395 -
1396 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1397 -
1398 - if (is_array($pages) && !empty($pages)) {
1399 - foreach ($pages as $page_key => $page) {
1400 -
1401 - if (isset($page['properties']['background'])) {
1402 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1403 - unset($pages[$page_key]['properties']['background']);
1404 - }
1405 -
1406 - if (isset($page['elements']) && !empty($page['elements'])) {
1407 - foreach ($page['elements'] as $element_key => $element) {
1408 -
1409 - $last_element_id++;
1410 - $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1411 -
1412 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1413 -
1414 - $image = base64_decode($element['base64']);
1415 - $file_name = basename($element['value']);
1416 -
1417 -//exif_imagetype
1418 - if (!$file_name) {
1419 - $ext = $this->helper->load('image')->get_image_extension($image);
1420 - if ($ext) {
1421 - $file_name = md5(mktime()) . "." . $ext;
1422 - }
1423 - }
1424 -
1425 - if ($file_name) {
1426 - $upload_file = wp_upload_bits($file_name, null, $image);
1427 - if (!$upload_file['error']) {
1428 - $wp_filetype = wp_check_filetype($file_name, null);
1429 - $attachment = array(
1430 - 'post_mime_type' => $wp_filetype['type'],
1431 - 'post_parent' => 0,
1432 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1433 - 'post_content' => '',
1434 - 'post_status' => 'inherit'
1435 - );
1436 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1437 - if (!is_wp_error($attachment_id)) {
1438 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1439 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1440 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1441 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1442 - }
1443 - }
1444 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1445 - } else {
1446 - unset($pages[$page_key]['elements'][$element_key]);
1447 - }
1448 - } elseif (isset($element['name']) && $element['name']) {
1449 - $el_value = $extension->auto_map($element['name']);
1450 - if ($el_value !== false) {
1451 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1452 - }
1453 - }
1454 - }
1455 - }
1456 -
1457 - foreach ($positions as $pos_key => $pos_page) {
1458 - if ($pos_page == $page_key) {
1459 - if (in_array($pos_key, $new)) {
1460 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1461 - $elements = $original_pages[$pos_key]['elements'];
1462 - $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1463 - }
1464 - } else {
1465 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1466 - $elements = $original_pages[$pos_key]['elements'];
1467 - $pages[$page_key]['elements'] = $elements;
1468 - } else {
1469 - $pages[$page_key]['elements'] = array();
1470 - }
1471 - }
1472 - if (isset($original_pages[$pos_key]['actions'])) {
1473 - $pages[$page_key]['actions'] = $original_pages[$pos_key]['actions'];
1474 - }
1475 - }
1476 - }
1477 - }
1478 -
1479 - $pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1480 - $this->helper->delete_dir($pdf_path);
1481 -
1482 - $template->set('pdf', $pdf_name);
1483 - $template->set('pages', $pages);
1484 - $template->save(true);
1485 -
1486 - $response = array(
1487 - 'redirect' => $this->helper->get_url(array(
1488 - 'page' => 'e2pdf-templates',
1489 - 'action' => 'edit',
1490 - 'id' => $template->get('ID'))
1491 - )
1492 - );
1816 + } else {
1817 + if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1818 + $elements = $original_pages[$pos_key]['elements'];
1819 + $pages[$page_key]['elements'] = $elements;
1493 1820 } else {
1494 - $this->helper->delete_dir($pdf_dir);
1495 - $response = array(
1496 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1497 - );
1821 + $pages[$page_key]['elements'] = array();
1498 1822 }
1499 - } else {
1500 - $response = array(
1501 - 'error' => $error,
1502 - );
1503 1823 }
1824 + if (isset($original_pages[$pos_key]['actions'])) {
1825 + $pages[$page_key]['actions'] = $original_pages[$pos_key]['actions'];
1826 + }
1504 1827 }
1505 1828 }
1506 - } else {
1507 - $response = array(
1508 - 'error' => $request['error'],
1509 - );
1510 1829 }
1830 +
1831 + $template->set('pdf', $pdf_name);
1832 + $template->set('pages', $pages);
1833 + $template->save(true);
1834 +
1835 + $this->json_response(
1836 + [
1837 + 'redirect' => $this->helper->get_url(
1838 + array(
1839 + 'page' => 'e2pdf-templates',
1840 + 'action' => 'edit',
1841 + 'id' => $template->get('ID'),
1842 + )
1843 + ),
1844 + ]
1845 + );
1846 + } catch (Exception $ex) {
1847 + if (file_exists($pdf_dir)) {
1848 + $this->helper->delete_dir($pdf_dir);
1849 + }
1850 + $this->json_response(
1851 + [
1852 + 'error' => $ex->getMessage(),
1853 + ]
1854 + );
1511 1855 }
1512 -
1513 - $this->json_response($response);
1514 1856 }
1515 1857
1516 - /**
1517 - * Auto Generation of Template
1518 - * action: wp_ajax_e2pdf_auto
1519 - * function: e2pdf_auto
1520 - *
1521 - * @return json
1522 - */
1858 + // ajax auto
1523 1859 public function ajax_auto() {
1524 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1525 - $data = $this->post->get('data');
1860 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1861 + $data = $this->post->get('data');
1526 1862
1527 - $extension = $data['extension'];
1528 - $item = $data['item'];
1863 + $extension = $data['extension'];
1864 + $item = isset($data['item']) ? $data['item'] : '';
1865 + $item1 = isset($data['item1']) ? $data['item1'] : '';
1866 + $item2 = isset($data['item2']) ? $data['item2'] : '';
1867 + $font_size = isset($data['font_size']) ? $data['font_size'] : '14';
1868 + $line_height = isset($data['line_height']) ? $data['line_height'] : '14';
1529 1869
1530 - if (!$extension || !$item) {
1531 - return;
1532 - }
1870 + if (!$extension || !$item) {
1871 + return;
1872 + }
1533 1873
1534 - $model_e2pdf_extension = new Model_E2pdf_Extension();
1535 - $model_e2pdf_extension->load($extension);
1536 - $model_e2pdf_extension->set('item', $item);
1874 + $model_e2pdf_extension = new Model_E2pdf_Extension();
1875 + $model_e2pdf_extension->load($extension);
1876 + $model_e2pdf_extension->set('item', $item);
1877 + $model_e2pdf_extension->set('item1', $item1);
1878 + $model_e2pdf_extension->set('item2', $item2);
1879 + $model_e2pdf_extension->set('font_size', $font_size);
1880 + $model_e2pdf_extension->set('line_height', $line_height);
1537 1881
1538 - if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1539 - $content = $model_e2pdf_extension->auto();
1882 + if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1883 + $content = $model_e2pdf_extension->auto();
1884 + } else {
1885 + $content = array();
1886 + }
1887 +
1888 + $response = array(
1889 + 'content' => $content,
1890 + );
1540 1891 } else {
1541 - $content = array();
1892 + $response['error'] = $this->message('wp_verify_nonce_error');
1542 1893 }
1543 -
1544 - $response = array(
1545 - 'content' => $content,
1546 - );
1547 1894 $this->json_response($response);
1548 1895 }
1549 1896
1897 + // ajax activate template
1550 1898 public function ajax_activate_template() {
1551 -
1552 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1553 - $data = $this->post->get('data');
1554 -
1555 - $id = $data['id'];
1556 -
1557 - if (!$id) {
1558 - return;
1559 - }
1560 -
1561 - $request = $this->activate_template($id);
1562 - if (isset($request['error'])) {
1563 - $response = array(
1564 - 'error' => $request['error'],
1565 - );
1899 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1900 + $data = $this->post->get('data');
1901 + $id = $data['id'];
1902 + if (!$id) {
1903 + return;
1904 + }
1905 + $request = $this->activate_template($id);
1906 + if (isset($request['error'])) {
1907 + $response = array(
1908 + 'error' => $request['error'],
1909 + );
1910 + } else {
1911 + $response = array(
1912 + 'content' => 'activated',
1913 + );
1914 + }
1566 1915 } else {
1567 - $response = array(
1568 - 'content' => true,
1569 - );
1916 + $response['error'] = $this->message('wp_verify_nonce_error');
1570 1917 }
1571 -
1572 -
1573 1918 $this->json_response($response);
1574 1919 }
1575 1920
1921 + // ajax deactivaate template
1576 1922 public function ajax_deactivate_template() {
1577 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1578 - $data = $this->post->get('data');
1579 -
1580 - $id = $data['id'];
1581 -
1582 - if (!$id) {
1583 - return;
1923 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1924 + $data = $this->post->get('data');
1925 + $id = $data['id'];
1926 + if (!$id) {
1927 + return;
1928 + }
1929 + $request = $this->deactivate_template($id);
1930 + if (isset($request['error'])) {
1931 + $response = array(
1932 + 'error' => $request['error'],
1933 + );
1934 + } else {
1935 + $response = array(
1936 + 'content' => 'deactivated',
1937 + );
1938 + }
1939 + } else {
1940 + $response['error'] = $this->message('wp_verify_nonce_error');
1584 1941 }
1942 + $this->json_response($response);
1943 + }
1585 1944
1586 - $request = $this->deactivate_template($id);
1587 - if (isset($request['error'])) {
1588 - $response = array(
1589 - 'error' => $request['error'],
1945 + // ajax email
1946 + public function ajax_email() {
1947 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1948 + $data = $this->post->get('data');
1949 + $email = isset($data['email']) ? trim($data['email']) : '';
1950 + $email_code = isset($data['email_code']) ? trim($data['email_code']) : '';
1951 + $model_e2pdf_api = new Model_E2pdf_Api();
1952 + $model_e2pdf_api->set(
1953 + array(
1954 + 'action' => 'common/email',
1955 + 'data' => array(
1956 + 'email' => $email,
1957 + 'email_code' => $email_code,
1958 + 'email_confirm' => isset($data['email_code']),
1959 + ),
1960 + )
1590 1961 );
1962 + $request = $model_e2pdf_api->request();
1963 + if (isset($request['error'])) {
1964 + if ($request['error'] === 'incorrect_email') {
1965 + $response = array(
1966 + 'error' => __('Invalid E-mail address format', 'e2pdf'),
1967 + );
1968 + } elseif ($request['error'] === 'incorrect_code') {
1969 + $response = array(
1970 + 'error' => __('Invalid Confirmation Code', 'e2pdf'),
1971 + );
1972 + } else {
1973 + $response = array(
1974 + 'error' => $request['error'],
1975 + );
1976 + }
1977 + } elseif (isset($request['success'])) {
1978 + $response = array(
1979 + 'content' => $request['success'],
1980 + );
1981 + if ($request['success'] == 'subscribed') {
1982 + update_option('e2pdf_email', $email);
1983 + }
1984 + }
1591 1985 } else {
1592 - $response = array(
1593 - 'content' => true,
1594 - );
1986 + $response['error'] = $this->message('wp_verify_nonce_error');
1595 1987 }
1596 1988 $this->json_response($response);
1597 1989 }
1598 1990
1599 - /**
1600 - * Move template to trash
1601 - *
1602 - * @param int $id - ID of template
1603 - */
1991 + // trash template
1604 1992 public function trash_template($id = false) {
1605 -
1606 1993 $id = (int) $id;
1607 -
1608 1994 $template = new Model_E2pdf_Template();
1609 - if ($id && $template->load($id)) {
1995 + if ($id && $template->load($id, false)) {
1610 1996 $template->set('trash', '1');
1611 - $template->save();
1997 + $template->update(array('trash'));
1612 1998 $this->deactivate_template($template->get('ID'));
1613 1999 return true;
1614 2000 }
1615 2001 return false;
@@ -1614,17 +2000,11 @@
1614 2000 }
1615 2001 return false;
1616 2002 }
1617 2003
1618 - /**
1619 - * Delete template
1620 - *
1621 - * @param int $id - ID of template
1622 - */
2004 + // delete template
1623 2005 public function delete_template($id = false) {
1624 -
1625 2006 $id = (int) $id;
1626 -
1627 2007 $template = new Model_E2pdf_Template();
1628 2008 if ($id && $template->load($id)) {
1629 2009 $this->deactivate_template($template->get('ID'));
1630 2010 $template->delete();
@@ -1632,31 +2012,21 @@
1632 2012 }
1633 2013 return false;
1634 2014 }
1635 2015
1636 - /**
1637 - * Restore template
1638 - *
1639 - * @param int $id - ID of template
1640 - */
2016 + // restore template
1641 2017 public function restore_template($id = false) {
1642 -
1643 2018 $id = (int) $id;
1644 -
1645 2019 $template = new Model_E2pdf_Template();
1646 - if ($id && $template->load($id)) {
2020 + if ($id && $template->load($id, false)) {
1647 2021 $template->set('trash', '0');
1648 - $template->save();
2022 + $template->update(array('trash'));
1649 2023 return true;
1650 2024 }
1651 2025 return false;
1652 2026 }
1653 2027
1654 - /**
1655 - * Duplicate template
1656 - *
1657 - * @param int $id - ID of template
1658 - */
2028 + // duplicate template
1659 2029 public function duplicate_template($id = false) {
1660 2030
1661 2031 $id = (int) $id;
1662 2032
@@ -1661,28 +2031,27 @@
1661 2031 $id = (int) $id;
1662 2032
1663 2033 $template = new Model_E2pdf_Template();
1664 2034 if ($id && $template->load($id)) {
1665 - $title = $template->get('title') . " " . __('(Copy)', 'e2pdf');
2035 + $title = $template->get('title') . ' ' . __('(Copy)', 'e2pdf');
1666 2036 $template->set('ID', false);
2037 + $template->set('title', $title);
1667 2038 $template->set('uid', '');
1668 - $template->set('title', $title);
1669 2039 $template->set('activated', '0');
1670 -
1671 2040 if ($template->get('pdf')) {
1672 2041 $pdf_name = md5(time());
1673 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1674 - $pdf_images_dir = $pdf_dir . "images/";
2042 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
2043 + $pdf_images_dir = $pdf_dir . 'images/';
1675 2044
1676 2045 $this->helper->create_dir($pdf_dir);
1677 2046 $this->helper->create_dir($pdf_images_dir);
1678 2047
1679 - if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")) {
1680 - $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/*");
2048 + if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf')) {
2049 + $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . '/images/*');
1681 2050 foreach ($images as $image) {
1682 2051 copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
1683 2052 }
1684 - copy($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf", $this->helper->get('pdf_dir') . $pdf_name . "/" . $pdf_name . ".pdf");
2053 + copy($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf', $this->helper->get('pdf_dir') . $pdf_name . '/' . $pdf_name . '.pdf');
1685 2054 $template->set('pdf', $pdf_name);
1686 2055 }
1687 2056 }
1688 2057 $template->save(true);
@@ -1690,84 +2059,39 @@
1690 2059 }
1691 2060 return false;
1692 2061 }
1693 2062
1694 - /**
1695 - * Activate template
1696 - *
1697 - * @param int $id - ID of template
1698 - */
2063 + // activate template
1699 2064 public function activate_template($id = false) {
1700 -
1701 2065 $id = (int) $id;
1702 -
1703 2066 $template = new Model_E2pdf_Template();
1704 - if ($id && $template->load($id)) {
1705 - $model_e2pdf_api = new Model_E2pdf_Api();
1706 - $model_e2pdf_api->set(array(
1707 - 'action' => 'template/activate',
1708 - 'data' => array(
1709 - 'template_id' => $template->get('ID'),
1710 - 'template_uid' => $template->get('uid'),
1711 - 'template_title' => $template->get('title')
1712 - )
1713 - ));
1714 - $request = $model_e2pdf_api->request();
1715 -
1716 - if (!isset($request['error'])) {
1717 - $template->set('activated', 1);
1718 - $template->set('uid', $request['template_uid']);
1719 - $template->save();
1720 - }
1721 -
1722 - return $request;
2067 + if ($id && $template->load($id, false)) {
2068 + return $template->activate();
2069 + } else {
2070 + return array(
2071 + 'error' => __('Something went wrong!', 'e2pdf'),
2072 + );
1723 2073 }
1724 - return false;
1725 2074 }
1726 2075
1727 - /**
1728 - * Deactivate template
1729 - *
1730 - * @param int $id - ID of template
1731 - */
2076 + // deactivate template
1732 2077 public function deactivate_template($id = false) {
1733 -
1734 2078 $id = (int) $id;
1735 -
1736 2079 $template = new Model_E2pdf_Template();
1737 - if ($id && $template->load($id)) {
1738 - $model_e2pdf_api = new Model_E2pdf_Api();
1739 - $model_e2pdf_api->set(array(
1740 - 'action' => 'template/deactivate',
1741 - 'data' => array(
1742 - 'template_id' => $template->get('ID'),
1743 - 'template_uid' => $template->get('uid'),
1744 - )
1745 - ));
1746 - $request = $model_e2pdf_api->request();
1747 -
1748 - if (!isset($request['error'])) {
1749 - $template->set('activated', 0);
1750 - $template->set('uid', '');
1751 - $template->save();
1752 - }
1753 - return $request;
2080 + if ($id && $template->load($id, false)) {
2081 + return $template->deactivate();
2082 + } else {
2083 + return array(
2084 + 'error' => __('Something went wrong!', 'e2pdf'),
2085 + );
1754 2086 }
1755 - return false;
1756 2087 }
1757 2088
1758 - /**
1759 - * Get templates list
1760 - *
1761 - * @param array() $filters - Array of filter/order conditions
1762 - * @param bool $count - Return number of templates
1763 - *
1764 - * @return mixed - IF $count - int ELSE array()
1765 - */
2089 + // get templates list
1766 2090 public function get_templates_list($filters = array(), $count = false) {
1767 2091 global $wpdb;
2092 +
1768 2093 $model_e2pdf_template = new Model_E2pdf_Template();
1769 -
1770 2094 $condition = array();
1771 2095 if (isset($filters['status']) && $filters['status'] == 'trash') {
1772 2096 $condition = array(
1773 2097 'trash' => array(
@@ -1772,10 +2096,10 @@
1772 2096 $condition = array(
1773 2097 'trash' => array(
1774 2098 'condition' => '=',
1775 2099 'value' => '1',
1776 - 'type' => '%d'
1777 - )
2100 + 'type' => '%d',
2101 + ),
1778 2102 );
1779 2103 } else {
1780 2104 $condition = array(
1781 2105 'trash' => array(
@@ -1780,10 +2104,10 @@
1780 2104 $condition = array(
1781 2105 'trash' => array(
1782 2106 'condition' => '<>',
1783 2107 'value' => '1',
1784 - 'type' => '%d'
1785 - )
2108 + 'type' => '%d',
2109 + ),
1786 2110 );
1787 2111 }
1788 2112
1789 2113 if (isset($filters['s']) && $filters['s']) {
@@ -1789,17 +2113,27 @@
1789 2113 if (isset($filters['s']) && $filters['s']) {
1790 2114 $condition['title'] = array(
1791 2115 'condition' => 'LIKE',
1792 2116 'value' => '%%' . $filters['s'] . '%%',
1793 - 'type' => '%s'
2117 + 'type' => '%s',
2118 + 'or' => array(
2119 + array(
2120 + 'ID' => array(
2121 + 'condition' => 'LIKE',
2122 + 'value' => '%%' . $filters['s'] . '%%',
2123 + 'type' => '%s',
2124 + ),
2125 + ),
2126 + ),
1794 2127 );
1795 2128 }
1796 2129
1797 2130 $order_condition = array();
1798 - if (isset($filters['orderby']) && isset($filters['order'])) {
2131 + $sortable = array('id', 'title', 'updated_at');
2132 + if (isset($filters['orderby']) && in_array($filters['orderby'], $sortable) && isset($filters['order'])) {
1799 2133 $order_condition = array(
1800 2134 'orderby' => $filters['orderby'],
1801 - 'order' => $filters['order'],
2135 + 'order' => $filters['order'] == 'asc' ? 'asc' : 'desc',
1802 2136 );
1803 2137 } else {
1804 2138 $order_condition = array(
1805 2139 'orderby' => 'id',
@@ -1810,13 +2144,12 @@
1810 2144 $limit_condition = array();
1811 2145 if (!$count) {
1812 2146 $paged = isset($filters['paged']) && $filters['paged'] ? $filters['paged'] : '0';
1813 2147 $paged = (int) $paged <= 0 ? 1 : (int) $paged;
1814 - $per_page = get_option('e2pdf_templates_screen_per_page') ? get_option('e2pdf_templates_screen_per_page') : '20';
1815 -
2148 + $per_page = (int) get_option('e2pdf_templates_screen_per_page', '20');
1816 2149 $limit_condition = array(
1817 - 'limit' => $per_page,
1818 - 'offset' => (int) ($paged - 1) * $per_page
2150 + 'limit' => (int) $per_page,
2151 + 'offset' => (int) ($paged - 1) * $per_page,
1819 2152 );
1820 2153 }
1821 2154
1822 2155 $where = $this->helper->load('db')->prepare_where($condition);
@@ -1821,11 +2154,11 @@
1821 2154
1822 2155 $where = $this->helper->load('db')->prepare_where($condition);
1823 2156 $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1824 2157 $limit = $this->helper->load('db')->prepare_limit($limit_condition);
2158 + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
2159 + $tpls = $wpdb->get_results($wpdb->prepare('SELECT `ID` FROM `' . $model_e2pdf_template->get_table() . '`' . $where['sql'] . $orderby . $limit . '', $where['filter']));
1825 2160
1826 - $tpls = $wpdb->get_results($wpdb->prepare("SELECT `ID` FROM " . $model_e2pdf_template->get_table() . $where['sql'] . $orderby . $limit . "", $where['filter']));
1827 -
1828 2161 if ($count) {
1829 2162 return count($tpls);
1830 2163 }
1831 2164
@@ -1834,32 +2167,30 @@
1834 2167 $template = new Model_E2pdf_Template();
1835 2168 $template->load($tpl->ID, false);
1836 2169 if (is_array($this->helper->get('license')->get('activated_templates'))) {
1837 2170 if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1838 - $this->deactivate_template($template->get('ID'));
2171 + $template->deactivate();
1839 2172 } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1840 - $this->activate_template($template->get('ID'));
2173 + $template->activate();
1841 2174 }
1842 2175 }
1843 -
1844 2176 $templates[] = $template;
1845 2177 }
1846 -
1847 2178 return $templates;
1848 2179 }
1849 2180
1850 - /**
1851 - * Get paper sizes list
1852 - *
1853 - * @return array() - Sizes list
1854 - */
2181 + // get sizes list
1855 2182 public function get_sizes_list($size = false, $attr = false) {
1856 2183
1857 2184 $sizes = array(
1858 - 'A4' => array(
2185 + 'A4 (PORTRAIT)' => array(
1859 2186 'width' => '595',
1860 2187 'height' => '842',
1861 2188 ),
2189 + 'A4 (LANDSCAPE)' => array(
2190 + 'width' => '842',
2191 + 'height' => '595',
2192 + ),
1862 2193 'LETTER' => array(
1863 2194 'width' => '612',
1864 2195 'height' => '792',
1865 2196 ),
@@ -1894,15 +2225,10 @@
1894 2225 return false;
1895 2226 }
1896 2227 }
1897 2228
1898 - /**
1899 - * Get fonts list
1900 - *
1901 - * @return array() - Fonts list
1902 - */
2229 + // get fonts
1903 2230 public function get_fonts($with_path = false) {
1904 -
1905 2231 $model_e2pdf_font = new Model_E2pdf_Font();
1906 2232 $fonts = $model_e2pdf_font->get_fonts();
1907 2233
1908 2234 if ($with_path) {
@@ -1911,9 +2237,9 @@
1911 2237 'key' => $value,
1912 2238 'subfield' => array(
1913 2239 'path' => $key,
1914 2240 ),
1915 - 'value' => $value
2241 + 'value' => $value,
1916 2242 );
1917 2243 }
1918 2244 }
1919 2245
@@ -1919,43 +2245,324 @@
1919 2245
1920 2246 return $fonts;
1921 2247 }
1922 2248
1923 - /**
1924 - * Get font sizes list
1925 - *
1926 - * @return array() - Font sizes list
1927 - */
2249 + // get font sizes
1928 2250 public function get_font_sizes() {
1929 -
2251 + $max_font_size = apply_filters('e2pdf_controller_templates_max_font_size', 512);
1930 2252 $sizes = array();
1931 - for ($i = 1; $i <= 72; $i++) {
1932 - $sizes[$i] = $i . 'px';
2253 + for ($i = 1; $i <= $max_font_size; $i++) {
2254 + $sizes[$i] = $i;
1933 2255 }
1934 2256 return $sizes;
1935 2257 }
1936 2258
1937 - /**
1938 - * Get line heights list
1939 - *
1940 - * @return array() - Line heights list
1941 - */
2259 + // get line heights
1942 2260 public function get_line_heights() {
1943 2261
2262 + $max_line_height = apply_filters('e2pdf_controller_templates_max_line_height', 512);
1944 2263 $line_heights = array();
1945 - for ($i = 1; $i <= 512; $i++) {
1946 - $line_heights[$i] = $i . 'px';
2264 + for ($i = 1; $i <= $max_line_height; $i++) {
2265 + $line_heights[$i] = $i;
1947 2266 }
1948 2267 return $line_heights;
1949 2268 }
1950 2269
1951 - /**
1952 - * Load metaboxes on template edit/create action
1953 - */
2270 + // get lang codes
2271 + public function get_lang_codes() {
2272 + return array(
2273 + '' => '',
2274 + 'aa' => 'aa',
2275 + 'ab' => 'ab',
2276 + 'ae' => 'ae',
2277 + 'af' => 'af',
2278 + 'ak' => 'ak',
2279 + 'am' => 'am',
2280 + 'an' => 'an',
2281 + 'ar' => 'ar',
2282 + 'ar-AE' => 'ar-AE',
2283 + 'ar-BH' => 'ar-BH',
2284 + 'ar-DZ' => 'ar-DZ',
2285 + 'ar-EG' => 'ar-EG',
2286 + 'ar-IQ' => 'ar-IQ',
2287 + 'ar-JO' => 'ar-JO',
2288 + 'ar-KW' => 'ar-KW',
2289 + 'ar-LB' => 'ar-LB',
2290 + 'ar-LY' => 'ar-LY',
2291 + 'ar-MA' => 'ar-MA',
2292 + 'ar-OM' => 'ar-OM',
2293 + 'ar-QA' => 'ar-QA',
2294 + 'ar-SA' => 'ar-SA',
2295 + 'ar-SY' => 'ar-SY',
2296 + 'ar-TN' => 'ar-TN',
2297 + 'ar-YE' => 'ar-YE',
2298 + 'as' => 'as',
2299 + 'av' => 'av',
2300 + 'ay' => 'ay',
2301 + 'az' => 'az',
2302 + 'ba' => 'ba',
2303 + 'be' => 'be',
2304 + 'bg' => 'bg',
2305 + 'bh' => 'bh',
2306 + 'bi' => 'bi',
2307 + 'bm' => 'bm',
2308 + 'bn' => 'bn',
2309 + 'bo' => 'bo',
2310 + 'br' => 'br',
2311 + 'bs' => 'bs',
2312 + 'ca' => 'ca',
2313 + 'ce' => 'ce',
2314 + 'ch' => 'ch',
2315 + 'co' => 'co',
2316 + 'cr' => 'cr',
2317 + 'cs' => 'cs',
2318 + 'cu' => 'cu',
2319 + 'cv' => 'cv',
2320 + 'cy' => 'cy',
2321 + 'da' => 'da',
2322 + 'de' => 'de',
2323 + 'de-AT' => 'de-AT',
2324 + 'de-CH' => 'de-CH',
2325 + 'de-DE' => 'de-DE',
2326 + 'de-LI' => 'de-LI',
2327 + 'de-LU' => 'de-LU',
2328 + 'div' => 'div',
2329 + 'dv' => 'dv',
2330 + 'dz' => 'dz',
2331 + 'ee' => 'ee',
2332 + 'el' => 'el',
2333 + 'en' => 'en',
2334 + 'en-AU' => 'en-AU',
2335 + 'en-BZ' => 'en-BZ',
2336 + 'en-CA' => 'en-CA',
2337 + 'en-CB' => 'en-CB',
2338 + 'en-GB' => 'en-GB',
2339 + 'en-IE' => 'en-IE',
2340 + 'en-JM' => 'en-JM',
2341 + 'en-NZ' => 'en-NZ',
2342 + 'en-PH' => 'en-PH',
2343 + 'en-TT' => 'en-TT',
2344 + 'en-US' => 'en-US',
2345 + 'en-ZA' => 'en-ZA',
2346 + 'en-ZW' => 'en-ZW',
2347 + 'eo' => 'eo',
2348 + 'es' => 'es',
2349 + 'es-AR' => 'es-AR',
2350 + 'es-BO' => 'es-BO',
2351 + 'es-CL' => 'es-CL',
2352 + 'es-CO' => 'es-CO',
2353 + 'es-CR' => 'es-CR',
2354 + 'es-DO' => 'es-DO',
2355 + 'es-EC' => 'es-EC',
2356 + 'es-ES' => 'es-ES',
2357 + 'es-GT' => 'es-GT',
2358 + 'es-HN' => 'es-HN',
2359 + 'es-MX' => 'es-MX',
2360 + 'es-NI' => 'es-NI',
2361 + 'es-PA' => 'es-PA',
2362 + 'es-PE' => 'es-PE',
2363 + 'es-PR' => 'es-PR',
2364 + 'es-PY' => 'es-PY',
2365 + 'es-SV' => 'es-SV',
2366 + 'es-US' => 'es-US',
2367 + 'es-UY' => 'es-UY',
2368 + 'es-VE' => 'es-VE',
2369 + 'et' => 'et',
2370 + 'eu' => 'eu',
2371 + 'fa' => 'fa',
2372 + 'ff' => 'ff',
2373 + 'fi' => 'fi',
2374 + 'fj' => 'fj',
2375 + 'fo' => 'fo',
2376 + 'fr' => 'fr',
2377 + 'fr-BE' => 'fr-BE',
2378 + 'fr-CA' => 'fr-CA',
2379 + 'fr-CH' => 'fr-CH',
2380 + 'fr-FR' => 'fr-FR',
2381 + 'fr-LU' => 'fr-LU',
2382 + 'fr-MC' => 'fr-MC',
2383 + 'fy' => 'fy',
2384 + 'ga' => 'ga',
2385 + 'gd' => 'gd',
2386 + 'gl' => 'gl',
2387 + 'gn' => 'gn',
2388 + 'gu' => 'gu',
2389 + 'gv' => 'gv',
2390 + 'ha' => 'ha',
2391 + 'he' => 'he',
2392 + 'hi' => 'hi',
2393 + 'ho' => 'ho',
2394 + 'hr' => 'hr',
2395 + 'hr-BA' => 'hr-BA',
2396 + 'hr-HR' => 'hr-HR',
2397 + 'ht' => 'ht',
2398 + 'hu' => 'hu',
2399 + 'hy' => 'hy',
2400 + 'hz' => 'hz',
2401 + 'ia' => 'ia',
2402 + 'id' => 'id',
2403 + 'ie' => 'ie',
2404 + 'ig' => 'ig',
2405 + 'ii' => 'ii',
2406 + 'ik' => 'ik',
2407 + 'in' => 'in',
2408 + 'io' => 'io',
2409 + 'is' => 'is',
2410 + 'it' => 'it',
2411 + 'it-CH' => 'it-CH',
2412 + 'it-IT' => 'it-IT',
2413 + 'iu' => 'iu',
2414 + 'iw' => 'iw',
2415 + 'ja' => 'ja',
2416 + 'ji' => 'ji',
2417 + 'jv' => 'jv',
2418 + 'jw' => 'jw',
2419 + 'ka' => 'ka',
2420 + 'kg' => 'kg',
2421 + 'ki' => 'ki',
2422 + 'kj' => 'kj',
2423 + 'kk' => 'kk',
2424 + 'kl' => 'kl',
2425 + 'km' => 'km',
2426 + 'kn' => 'kn',
2427 + 'ko' => 'ko',
2428 + 'kok' => 'kok',
2429 + 'kr' => 'kr',
2430 + 'ks' => 'ks',
2431 + 'ku' => 'ku',
2432 + 'kv' => 'kv',
2433 + 'kw' => 'kw',
2434 + 'ky' => 'ky',
2435 + 'kz' => 'kz',
2436 + 'la' => 'la',
2437 + 'lb' => 'lb',
2438 + 'lg' => 'lg',
2439 + 'li' => 'li',
2440 + 'ln' => 'ln',
2441 + 'lo' => 'lo',
2442 + 'ls' => 'ls',
2443 + 'lt' => 'lt',
2444 + 'lu' => 'lu',
2445 + 'lv' => 'lv',
2446 + 'mg' => 'mg',
2447 + 'mh' => 'mh',
2448 + 'mi' => 'mi',
2449 + 'mk' => 'mk',
2450 + 'ml' => 'ml',
2451 + 'mn' => 'mn',
2452 + 'mo' => 'mo',
2453 + 'mr' => 'mr',
2454 + 'ms' => 'ms',
2455 + 'ms-BN' => 'ms-BN',
2456 + 'ms-MY' => 'ms-MY',
2457 + 'mt' => 'mt',
2458 + 'my' => 'my',
2459 + 'na' => 'na',
2460 + 'nb' => 'nb',
2461 + 'nd' => 'nd',
2462 + 'ne' => 'ne',
2463 + 'ng' => 'ng',
2464 + 'nl' => 'nl',
2465 + 'nl-BE' => 'nl-BE',
2466 + 'nl-NL' => 'nl-NL',
2467 + 'nn' => 'nn',
2468 + 'no' => 'no',
2469 + 'nr' => 'nr',
2470 + 'ns' => 'ns',
2471 + 'nv' => 'nv',
2472 + 'ny' => 'ny',
2473 + 'oc' => 'oc',
2474 + 'oj' => 'oj',
2475 + 'om' => 'om',
2476 + 'or' => 'or',
2477 + 'os' => 'os',
2478 + 'pa' => 'pa',
2479 + 'pi' => 'pi',
2480 + 'pl' => 'pl',
2481 + 'ps' => 'ps',
2482 + 'pt' => 'pt',
2483 + 'pt-BR' => 'pt-BR',
2484 + 'pt-PT' => 'pt-PT',
2485 + 'qu' => 'qu',
2486 + 'qu-BO' => 'qu-BO',
2487 + 'qu-EC' => 'qu-EC',
2488 + 'qu-PE' => 'qu-PE',
2489 + 'rm' => 'rm',
2490 + 'rn' => 'rn',
2491 + 'ro' => 'ro',
2492 + 'ru' => 'ru',
2493 + 'rw' => 'rw',
2494 + 'sa' => 'sa',
2495 + 'sb' => 'sb',
2496 + 'sc' => 'sc',
2497 + 'sd' => 'sd',
2498 + 'se' => 'se',
2499 + 'se-FI' => 'se-FI',
2500 + 'se-NO' => 'se-NO',
2501 + 'se-SE' => 'se-SE',
2502 + 'sg' => 'sg',
2503 + 'sh' => 'sh',
2504 + 'si' => 'si',
2505 + 'sk' => 'sk',
2506 + 'sl' => 'sl',
2507 + 'sm' => 'sm',
2508 + 'sn' => 'sn',
2509 + 'so' => 'so',
2510 + 'sq' => 'sq',
2511 + 'sr' => 'sr',
2512 + 'sr-BA' => 'sr-BA',
2513 + 'sr-SP' => 'sr-SP',
2514 + 'ss' => 'ss',
2515 + 'st' => 'st',
2516 + 'su' => 'su',
2517 + 'sv' => 'sv',
2518 + 'sv-FI' => 'sv-FI',
2519 + 'sv-SE' => 'sv-SE',
2520 + 'sw' => 'sw',
2521 + 'sx' => 'sx',
2522 + 'syr' => 'syr',
2523 + 'ta' => 'ta',
2524 + 'te' => 'te',
2525 + 'tg' => 'tg',
2526 + 'th' => 'th',
2527 + 'ti' => 'ti',
2528 + 'tk' => 'tk',
2529 + 'tl' => 'tl',
2530 + 'tn' => 'tn',
2531 + 'to' => 'to',
2532 + 'tr' => 'tr',
2533 + 'ts' => 'ts',
2534 + 'tt' => 'tt',
2535 + 'tw' => 'tw',
2536 + 'ty' => 'ty',
2537 + 'ug' => 'ug',
2538 + 'uk' => 'uk',
2539 + 'ur' => 'ur',
2540 + 'us' => 'us',
2541 + 'uz' => 'uz',
2542 + 've' => 've',
2543 + 'vi' => 'vi',
2544 + 'vo' => 'vo',
2545 + 'wa' => 'wa',
2546 + 'wo' => 'wo',
2547 + 'xh' => 'xh',
2548 + 'yi' => 'yi',
2549 + 'yo' => 'yo',
2550 + 'za' => 'za',
2551 + 'zh' => 'zh',
2552 + 'zh-CN' => 'zh-CN',
2553 + 'zh-HK' => 'zh-HK',
2554 + 'zh-MO' => 'zh-MO',
2555 + 'zh-SG' => 'zh-SG',
2556 + 'zh-TW' => 'zh-TW',
2557 + 'zu' => 'zu',
2558 + );
2559 + }
2560 +
2561 + // load metaboxes
1954 2562 public function load_metaboxes() {
1955 -
1956 2563 add_meta_box(
1957 - 'e2pdf_templates_save', __('Save', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
2564 + 'e2pdf_templates_save', __('Preset', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
1958 2565 );
1959 2566 add_meta_box(
1960 2567 'e2pdf_templates_builder', __('PDF Builder', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_builder')
1961 2568 );
@@ -1963,13 +2570,10 @@
1963 2570 'e2pdf_templates_settings', __('Settings', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_settings')
1964 2571 );
1965 2572 }
1966 2573
1967 - /**
1968 - * Load javascript on template edit/create action
1969 - */
2574 + // load scripts
1970 2575 public function load_scripts() {
1971 -
1972 2576 wp_enqueue_script('postbox');
1973 2577 wp_enqueue_script('jquery-ui-droppable');
1974 2578 wp_enqueue_script('jquery-ui-resizable');
1975 2579 wp_enqueue_script('jquery-ui-selectable');
@@ -1978,15 +2582,13 @@
1978 2582 wp_enqueue_script('wp-color-picker');
1979 2583 wp_enqueue_media();
1980 2584 }
1981 2585
1982 - /**
1983 - * Load styles on template edit/create action
1984 - */
2586 + // load styles
1985 2587 public function load_styles($ext = false) {
1986 - wp_enqueue_style('plugin_name-admin-ui-css', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css', false, false, false);
2588 + $version = get_option('e2pdf_debug', '0') === '1' ? strtotime('now') : $this->helper->get('version');
2589 + wp_enqueue_style('css/e2pdf.jquery-ui', plugins_url('css/jquery-ui.css', $this->helper->get('plugin_file_path')), false, $version, false);
1987 2590 wp_enqueue_style('wp-color-picker');
1988 -
1989 2591 if ($ext) {
1990 2592 $extension = new Model_E2pdf_Extension();
1991 2593 if ($extension->load($ext)) {
1992 2594 $styles = $extension->styles();
@@ -1991,12 +2593,11 @@
1991 2593 if ($extension->load($ext)) {
1992 2594 $styles = $extension->styles();
1993 2595 if ($styles && is_array($styles)) {
1994 2596 foreach ($styles as $key => $value) {
1995 - wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, false, false);
2597 + wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, $version, false);
1996 2598 }
1997 2599 }
1998 2600 }
1999 2601 }
2000 2602 }
2001 -
2002 2603 }