PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.05.03
E2Pdf – Export Pdf Tool for WordPress v1.05.03
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
e2pdf / classes / controller / e2pdf-templates.php

e2pdf-templates.php in E2Pdf – Export Pdf Tool for WordPress 1.05.03, at classes/controller/e2pdf-templates.php

1,996 lines 79.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * E2pdf Templates Controller
5 *
6 * @copyright Copyright 2017 https://e2pdf.com
7 * @license GPL v2
8 * @version 1
9 * @link https://e2pdf.com
10 * @since 0.00.01
11 */
12 if (!defined('ABSPATH')) {
13 die('Access denied.');
14 }
15
16 class Controller_E2pdf_Templates extends Helper_E2pdf_View {
17
18 /**
19 * @url admin.php?page=e2pdf-templates
20 */
21 public function index_action() {
22
23 if ($this->post->get()) {
24 if ($this->post->get('screenoptionnonce')) {
25 $this->screen_action();
26 } else {
27 $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
28 if (($this->post->get('action') == '-1' && $this->post->get('action2') == '-1')) {
29 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 );
48 }
49 $this->redirect($location);
50 } else {
51 $action = $this->post->get('action') != '-1' ? $this->post->get('action') : $this->post->get('action2');
52 if ($this->post->get('post')) {
53 if ($action == 'trash') {
54 foreach ($this->post->get('post') as $key => $value) {
55 $this->trash_template($value);
56 }
57 $this->add_notification('update', __('Templates moved to trash', 'e2pdf'));
58 } elseif ($action == 'restore') {
59 foreach ($this->post->get('post') as $key => $value) {
60 $this->restore_template($value);
61 }
62 $this->add_notification('update', __('Templates restored', 'e2pdf'));
63 } elseif ($action == 'delete') {
64 foreach ($this->post->get('post') as $key => $value) {
65 $this->delete_template($value);
66 }
67 $this->add_notification('update', __('Templates deleted', 'e2pdf'));
68 }
69 }
70 }
71 }
72 }
73 }
74
75 /**
76 * @url admin.php?page=e2pdf-templates&action=view&id=$id
77 *
78 * @return file
79 */
80 public function view_action() {
81
82 if ($this->get->get('id')) {
83 $template = new Model_E2pdf_Template();
84
85 if ($template->load($this->get->get('id'))) {
86
87 $pages = $template->get('pages');
88
89 foreach ($pages as $page_key => $page_value) {
90
91 if (isset($page_value['elements'])) {
92
93 foreach ($page_value['elements'] as $element_key => $element_value) {
94
95 if (isset($element_value['type']) && $element_value['type'] == 'e2pdf-image') {
96
97 if (!$this->helper->load('image')->get_image($element_value['value'])) {
98 $pages[$page_key]['elements'][$element_key]['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
99
100 if (isset($pages[$page_key]['elements'][$element_key]['properties']['dimension'])) {
101 unset($pages[$page_key]['elements'][$element_key]['properties']['dimension']);
102 }
103 }
104 }
105 }
106 }
107 }
108
109 $template->set('pages', $pages);
110 $request = $template->render();
111
112 if (isset($request['error'])) {
113 $this->add_notification('error', $request['error']);
114 $this->render('blocks', 'notifications');
115 } else {
116 $filename = $template->get_filename();
117 $file = $request['file'];
118 $this->download_response('pdf', $file, $filename);
119 }
120 } else {
121 $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
122 $this->render('blocks', 'notifications');
123 }
124 } else {
125 $location = $this->helper->get_url(
126 array(
127 'page' => 'e2pdf',
128 )
129 );
130 $this->redirect($location);
131 }
132 }
133
134 /**
135 * @url admin.php?page=e2pdf-templates&action=preview
136 */
137 public function preview_action() {
138
139 $preview = array();
140
141 if ($this->post->get('preview')) {
142 $preview = json_decode(stripslashes($this->post->get('preview')), true);
143 }
144
145 if (empty($preview)) {
146 $this->close_tab_response();
147 } else {
148 $data = $preview;
149 $pages = $preview['pages'];
150 unset($preview['pages']);
151
152 $this->check_nonce($preview['_nonce'], 'e2pdf_post');
153
154 $template = new Model_E2pdf_Template();
155 foreach ($data as $key => $value) {
156 $template->set($key, $value);
157 }
158
159 $preview_pages = array();
160 foreach ($pages as $page_key => $page_value) {
161 $page = new Model_E2pdf_Page();
162 foreach ($page_value as $page_value_key => $page_value_value) {
163 $page->set($page_value_key, $page_value_value);
164 }
165 $page->set('page_id', $page_key);
166
167 $elements = array();
168
169 $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
170 $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
171
172 foreach ($page_value['elements'] as $element_key => $element_value) {
173 $element = new Model_E2pdf_Element();
174 $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
175 if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
176 if (!$this->helper->load('image')->get_image($element_value['value'])) {
177 $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
178 if (isset($element_value['properties']['dimension'])) {
179 unset($element_value['properties']['dimension']);
180 }
181 }
182 }
183
184 foreach ($element_value as $element_value_key => $element_value_value) {
185 $element->set($element_value_key, $element_value_value);
186 }
187
188 if (!$element_value['properties']) {
189 $element_properties = array();
190 } else {
191 $element_properties = $element_value['properties'];
192 }
193
194 $element->set('properties', $element_properties);
195 $elements[] = $element->get_element();
196 }
197
198 $page->set('elements', $elements);
199 $preview_pages[] = $page->get_page();
200 }
201
202 $template->set('pages', $preview_pages);
203 $request = $template->render(true);
204
205 if (isset($request['error'])) {
206 $this->add_notification('error', $request['error']);
207 $this->render('blocks', 'notifications');
208 } else {
209 $filename = $template->get_filename();
210 $file = $request['file'];
211 $this->download_response('pdf', $file, $filename);
212 }
213 }
214 }
215
216 /**
217 * @url admin.php?page=e2pdf-templates&action=convert&type=php
218 */
219 public function convert_action() {
220 $preview = array();
221
222 if ($this->post->get('preview')) {
223 $preview = json_decode(stripslashes($this->post->get('preview')), true);
224 }
225
226 if (empty($preview)) {
227 $this->close_tab_response();
228 } else {
229 $data = $preview;
230 $pages = $preview['pages'];
231 unset($preview['pages']);
232
233 $this->check_nonce($preview['_nonce'], 'e2pdf_post');
234
235 $template = new Model_E2pdf_Template();
236 foreach ($data as $key => $value) {
237 $template->set($key, $value);
238 }
239
240 $preview_pages = array();
241 foreach ($pages as $page_key => $page_value) {
242 $page = new Model_E2pdf_Page();
243 foreach ($page_value as $page_value_key => $page_value_value) {
244 $page->set($page_value_key, $page_value_value);
245 }
246 $page->set('page_id', $page_key);
247
248 $elements = array();
249
250 $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
251 $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
252
253 foreach ($page_value['elements'] as $element_key => $element_value) {
254 $element = new Model_E2pdf_Element();
255 $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
256 if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
257 if (!$this->helper->load('image')->get_image($element_value['value'])) {
258 $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
259 if (isset($element_value['properties']['dimension'])) {
260 unset($element_value['properties']['dimension']);
261 }
262 }
263 }
264
265 foreach ($element_value as $element_value_key => $element_value_value) {
266 $element->set($element_value_key, $element_value_value);
267 }
268
269 if (!$element_value['properties']) {
270 $element_properties = array();
271 } else {
272 $element_properties = $element_value['properties'];
273 }
274
275 $element->set('properties', $element_properties);
276 $elements[] = $element->get_element();
277 }
278
279 $page->set('elements', $elements);
280 $preview_pages[] = $page->get_page();
281 }
282
283 $template->set('pages', $preview_pages);
284
285 $allowed_types = array(
286 'php'
287 );
288
289 if (!in_array($this->get->get('type'), $allowed_types)) {
290 $type = 'php';
291 } else {
292 $type = $this->get->get('type');
293 }
294
295 $request = $template->convert(true, $type);
296
297 if (isset($request['error'])) {
298 $this->add_notification('error', $request['error']);
299 $this->render('blocks', 'notifications');
300 } else {
301 $filename = 'template';
302 $file = $request['file'];
303 $this->download_response($type, $file, $filename);
304 }
305 }
306 }
307
308 /**
309 * @url admin.php?page=e2pdf-templates&action=create
310 */
311 public function create_action() {
312
313 $template = new Model_E2pdf_Template();
314 $this->load_metaboxes();
315 $this->load_scripts();
316 $this->load_styles();
317
318 $this->view('license', $this->helper->get('license'));
319 $this->view('template', $template);
320 }
321
322 /**
323 * @url admin.php?page=e2pdf-templates&action=edit&id=$id
324 */
325 public function edit_action() {
326 if ($this->get->get('id')) {
327 $template = new Model_E2pdf_Template();
328 if ($template->load($this->get->get('id'))) {
329 $this->view('license', $this->helper->get('license'));
330 $this->view('template', $template);
331 $this->load_metaboxes();
332 $this->load_scripts();
333 $this->load_styles($template->get('extension'));
334 } else {
335 $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
336 $this->render('blocks', 'notifications');
337 }
338 } else {
339 $location = $this->helper->get_url(
340 array(
341 'page' => 'e2pdf-templates',
342 )
343 );
344 $this->redirect($location);
345 }
346 }
347
348 /**
349 * @url admin.php?page=e2pdf-templates&action=trash&id=$id
350 */
351 public function trash_action() {
352
353 if ($this->get->get('id')) {
354 $this->trash_template($this->get->get('id'));
355 $this->add_notification('update', __('Template moved to trash', 'e2pdf'));
356 }
357 $location = $this->helper->get_url(
358 array(
359 'page' => 'e2pdf-templates',
360 'status' => $this->get->get('status'),
361 'orderby' => $this->get->get('orderby'),
362 'order' => $this->get->get('order'),
363 's' => $this->get->get('s'),
364 )
365 );
366 $this->redirect($location);
367 }
368
369 /**
370 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
371 */
372 public function restore_action() {
373
374 if ($this->get->get('id')) {
375 $this->restore_template($this->get->get('id'));
376 $this->add_notification('update', __('Template restored', 'e2pdf'));
377 }
378
379 $location = $this->helper->get_url(
380 array(
381 'page' => 'e2pdf-templates',
382 'status' => $this->get->get('status'),
383 'orderby' => $this->get->get('orderby'),
384 'order' => $this->get->get('order'),
385 's' => $this->get->get('s'),
386 )
387 );
388 $this->redirect($location);
389 }
390
391 /**
392 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
393 */
394 public function delete_action() {
395
396 if ($this->get->get('id')) {
397 $this->delete_template($this->get->get('id'));
398 $this->add_notification('update', __('Template deleted', 'e2pdf'));
399 }
400
401 $location = $this->helper->get_url(
402 array(
403 'page' => 'e2pdf-templates',
404 'status' => $this->get->get('status'),
405 'orderby' => $this->get->get('orderby'),
406 'order' => $this->get->get('order'),
407 's' => $this->get->get('s'),
408 )
409 );
410 $this->redirect($location);
411 }
412
413 /**
414 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
415 */
416 public function duplicate_action() {
417
418 if ($this->get->get('id')) {
419 $this->duplicate_template($this->get->get('id'));
420 $this->add_notification('update', __('Template copy created', 'e2pdf'));
421 }
422 $location = $this->helper->get_url(
423 array(
424 'page' => 'e2pdf-templates',
425 'status' => $this->get->get('status'),
426 'orderby' => $this->get->get('orderby'),
427 'order' => $this->get->get('order'),
428 's' => $this->get->get('s'),
429 )
430 );
431 $this->redirect($location);
432 }
433
434 /**
435 * @url admin.php?page=e2pdf-templates&action=import
436 */
437 public function import_action() {
438
439 if ($this->post->get()) {
440
441 $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
442
443 $errors = array();
444
445 $allowed_ext = array(
446 'xml'
447 );
448
449 $import = $this->files->get('template');
450
451 $name = $import['name'];
452 $tmp = $import['tmp_name'];
453
454 $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
455
456 if (!$tmp) {
457 $this->add_notification('error', __('Please choose template to upload', 'e2pdf'));
458 } else if ($import['error']) {
459 $this->add_notification('error', $import['error']);
460 } elseif (!in_array($ext, $allowed_ext)) {
461 $this->add_notification('error', __('Incorrect file extension', 'e2pdf'));
462 } elseif ($import['type'] != 'text/xml') {
463 $this->add_notification('error', __('Incompatible type', 'e2pdf'));
464 } else {
465
466 $options = $this->post->get('options');
467
468 $xml = simplexml_load_file($import['tmp_name'], "SimpleXMLElement", LIBXML_PARSEHUGE);
469
470 $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
471
472 foreach ($pages as $page_key => $page) {
473 if (isset($page['elements']) && !empty($page['elements'])) {
474 foreach ($page['elements'] as $element_key => $element) {
475 if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
476 if ($options['images']) {
477 $image = base64_decode($element['base64']);
478 $file_name = basename($element['value']);
479 $upload_file = wp_upload_bits($file_name, null, $image);
480 if (!$upload_file['error']) {
481 $wp_filetype = wp_check_filetype($file_name, null);
482 $attachment = array(
483 'post_mime_type' => $wp_filetype['type'],
484 'post_parent' => 0,
485 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
486 'post_content' => '',
487 'post_status' => 'inherit'
488 );
489 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
490 if (!is_wp_error($attachment_id)) {
491 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
492 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
493 wp_update_attachment_metadata($attachment_id, $attachment_data);
494 $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
495 }
496 }
497 }
498 unset($pages[$page_key]['elements'][$element_key]['base64']);
499 }
500 }
501 }
502 }
503
504 $template = new Model_E2pdf_Template();
505 if ($options['overwrite']) {
506 $template->load((String) $xml->template->ID);
507 }
508
509 $template->set('title', (String) $xml->template->title);
510 $template->set('flatten', (String) $xml->template->flatten);
511 $template->set('format', (String) $xml->template->format);
512 $template->set('compression', (String) $xml->template->compression);
513 $template->set('appearance', (String) $xml->template->appearance);
514 $template->set('width', (String) $xml->template->width);
515 $template->set('height', (String) $xml->template->height);
516 $template->set('extension', (String) $xml->template->extension);
517
518 if (!$options['overwrite']) {
519 $template->set('item', "");
520 }
521
522 $fpro2pdf_backup = false;
523
524 if ($xml->source) {
525 if ((String) $xml->source == 'fpro2pdf') {
526 $template->set('item', (String) $xml->template->item);
527 $fpro2pdf_backup = true;
528 }
529 }
530
531 $template->set('inline', (String) $xml->template->inline);
532 $template->set('auto', (String) $xml->template->auto);
533 $template->set('font', (String) $xml->template->font);
534 $template->set('font_size', (String) $xml->template->font_size);
535 $template->set('font_color', (String) $xml->template->font_color);
536 $template->set('line_height', (String) $xml->template->line_height);
537 $template->set('fonts', stripslashes_deep(unserialize(base64_decode((String) $xml->template->fonts))));
538
539 $extension = new Model_E2pdf_Extension();
540 $extension->load($template->get('extension'));
541
542 if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
543 $template->set('item', (String) $xml->template->item);
544 $extension->set('item', $template->get('item'));
545 if ($result = $extension->import($xml->item, (String) $xml->template->item, $options)) {
546 if (is_array($result) && array_key_exists('errors', $result)) {
547 $errors = array_merge($errors, $result['errors']);
548 } else {
549 $template->set('item', $result);
550 }
551 }
552 }
553
554 $pages = apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension);
555 $dataset_title = apply_filters('e2pdf_controller_templates_import_dataset_title', (String) $xml->template->dataset_title, $options, $xml, $template, $extension);
556 $button_title = apply_filters('e2pdf_controller_templates_import_button_title', (String) $xml->template->button_title, $options, $xml, $template, $extension);
557 $name = apply_filters('e2pdf_controller_templates_import_name', (String) $xml->template->name, $options, $xml, $template, $extension);
558 $password = apply_filters('e2pdf_controller_templates_import_password', (String) $xml->template->password, $options, $xml, $template, $extension);
559
560 $template->set('pages', $pages);
561 $template->set('dataset_title', $dataset_title);
562 $template->set('button_title', $button_title);
563 $template->set('name', $name);
564 $template->set('password', $password);
565
566 if ($options['fonts'] && $xml->fonts) {
567 $model_e2pdf_font = new Model_E2pdf_Font();
568 $fonts = $model_e2pdf_font->get_fonts();
569
570 if ($xml->fonts) {
571 foreach ($xml->fonts->children() as $key => $font) {
572 $title = (String) $font->title;
573 $name = (String) $font->name;
574 $value = (String) $font->value;
575
576 $exist = array_search($title, $fonts);
577 if (!$exist) {
578 if (!file_exists($this->helper->get('fonts_dir') . $name)) {
579 $f_name = $name;
580 } else {
581 $i = 0;
582 do {
583 $f_name = $i . '_' . $name;
584 $i++;
585 } while (file_exists($this->helper->get('fonts_dir') . $f_name));
586 }
587 file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
588 }
589 }
590 }
591 }
592
593 if ($xml->pdf && $xml->pdf->source) {
594
595 $pdf_name = md5(time());
596 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
597 $pdf_images_dir = $pdf_dir . "images/";
598
599 $this->helper->create_dir($pdf_dir);
600 $this->helper->create_dir($pdf_images_dir);
601
602 $pdf_source = (String) $xml->pdf->source;
603 file_put_contents($pdf_dir . $pdf_name . ".pdf", base64_decode($pdf_source));
604
605 if ($xml->pdf->images) {
606 foreach ($xml->pdf->images->children() as $key => $image) {
607 $page_id = (String) $image->page_id;
608 $image_source = (String) $image->source;
609 file_put_contents($pdf_dir . "images/" . $page_id . ".png", base64_decode($image_source));
610 }
611 }
612 $template->set('pdf', $pdf_name);
613 }
614
615 if (empty($errors)) {
616 $template->save(true);
617 $this->add_notification('update', __('Template imported successfully', 'e2pdf'));
618 } else {
619 foreach ($errors as $key => $error) {
620 $this->add_notification('error', __($error, 'e2pdf'));
621 }
622 }
623
624 unlink($import['tmp_name']);
625 }
626 }
627
628 $this->view('import_disabled', false);
629
630 if (!$this->helper->load('xml')->check()) {
631 $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
632 $this->view('import_disabled', true);
633 }
634
635 $options = array(
636 'common' => array(
637 'name' => __('Template Options', 'e2pdf'),
638 'options' => array(
639 array(
640 'name' => __('Overwrite template by ID', 'e2pdf'),
641 'key' => 'options[overwrite]',
642 'value' => '0',
643 'default_value' => '0',
644 'type' => 'checkbox',
645 'placeholder' => '',
646 ),
647 array(
648 'name' => __('Import Images', 'e2pdf'),
649 'key' => 'options[images]',
650 'value' => '1',
651 'default_value' => '0',
652 'type' => 'checkbox',
653 'placeholder' => '',
654 ),
655 array(
656 'name' => __('Import Fonts', 'e2pdf'),
657 'key' => 'options[fonts]',
658 'value' => '1',
659 'default_value' => '0',
660 'type' => 'checkbox',
661 'placeholder' => '',
662 )
663 )
664 ),
665 'item' => array(
666 'name' => __('Item Options', 'e2pdf'),
667 'options' => array(
668 array(
669 'name' => __('Import Item', 'e2pdf'),
670 'key' => 'options[item]',
671 'value' => '0',
672 'default_value' => '0',
673 'type' => 'checkbox',
674 'placeholder' => '',
675 'class' => 'e2pdf-collapse',
676 'data-collapse' => 'e2pdf-import-extension-option'
677 ),
678 )
679 )
680 );
681
682 $options = apply_filters('e2pdf_controller_templates_import_options', $options);
683
684 $this->view('options', $options);
685 }
686
687 /**
688 * @url admin.php?page=e2pdf-templates&action=backup&id=$id
689 */
690 public function backup_action() {
691
692 if ($this->post->get()) {
693
694 $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
695
696 if ($this->helper->load('xml')->check()) {
697
698 $options = $this->post->get('options');
699
700 $xml = $this->helper->load('xml')->create('backup');
701
702 $template = new Model_E2pdf_Template();
703
704
705 if ($template->load($this->post->get('id'))) {
706
707 if ($template->get('title') != '') {
708 $filename = $template->get('title') . "." . date('Y-m-d.H-i-s') . ".e2pdf";
709 } else {
710 $filename = date('Y-m-d.H-i-s') . ".e2pdf";
711 }
712
713 $pages = $template->get('pages');
714 if ($options['images']) {
715 foreach ($pages as $page_key => $page) {
716 if (isset($page['elements']) && !empty($page['elements'])) {
717 foreach ($page['elements'] as $element_key => $element) {
718 if ($element['type'] === 'e2pdf-image') {
719 $pages[$page_key]['elements'][$element_key]['base64'] = $this->helper->load('image')->get_image($element['value']);
720 }
721 }
722 }
723 }
724 }
725
726 $pages = apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension());
727 $dataset_title = apply_filters('e2pdf_controller_templates_backup_dataset_title', $template->get('dataset_title'), $options, $template, $template->extension());
728 $button_title = apply_filters('e2pdf_controller_templates_backup_button_title', $template->get('button_title'), $options, $template, $template->extension());
729 $name = apply_filters('e2pdf_controller_templates_backup_name', $template->get('name'), $options, $template, $template->extension());
730 $password = apply_filters('e2pdf_controller_templates_backup_password', $template->get('password'), $options, $template, $template->extension());
731
732 // build xml
733 $xml->addChildCData('version', $this->helper->get('version'));
734 $xml->addChildCData('date', date('Y-m-d H:i:s'));
735
736 $options_xml = $xml->addChild('options');
737 foreach ($options as $option_key => $option) {
738 $options_xml->addChildCData($option_key, $option);
739 }
740
741 $template_xml = $xml->addChild('template');
742 $template_xml->addChildCData('ID', $template->get('ID'));
743 $template_xml->addChildCData('title', $template->get('title'));
744 $template_xml->addChildCData('created_at', $template->get('created_at'));
745 $template_xml->addChildCData('updated_at', $template->get('updated_at'));
746 $template_xml->addChildCData('flatten', $template->get('flatten'));
747 $template_xml->addChildCData('format', $template->get('format'));
748 $template_xml->addChildCData('compression', $template->get('compression'));
749 $template_xml->addChildCData('appearance', $template->get('appearance'));
750 $template_xml->addChildCData('width', $template->get('width'));
751 $template_xml->addChildCData('height', $template->get('height'));
752 $template_xml->addChildCData('extension', $template->get('extension'));
753 $template_xml->addChildCData('item', $template->get('item'));
754 $template_xml->addChildCData('dataset_title', $dataset_title);
755 $template_xml->addChildCData('button_title', $button_title);
756 $template_xml->addChildCData('inline', $template->get('inline'));
757 $template_xml->addChildCData('auto', $template->get('auto'));
758 $template_xml->addChildCData('name', $name);
759 $template_xml->addChildCData('password', $password);
760 $template_xml->addChildCData('font', $template->get('font'));
761 $template_xml->addChildCData('font_size', $template->get('font_size'));
762 $template_xml->addChildCData('font_color', $template->get('font_color'));
763 $template_xml->addChildCData('line_height', $template->get('line_height'));
764 $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
765 $template_xml->addChildCData('pages', base64_encode(serialize($pages)));
766
767 //include pdf
768 if ($template->get('pdf')) {
769 $pdf_xml = $xml->addChild('pdf');
770 $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")));
771 $pdf_xml_images = $pdf_xml->addChild('images');
772 foreach ($template->get('pages') as $key => $page) {
773 $pdf_xml_image = $pdf_xml_images->addChild('image');
774 $pdf_xml_image->addChildCData('page_id', $page['page_id']);
775 $pdf_xml_image->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/" . $page['page_id'] . ".png")));
776 }
777 }
778
779 //include fonts
780 if ($options['fonts']) {
781 $fonts_xml = $xml->addChild('fonts');
782 if ($template->get('fonts')) {
783 $model_e2pdf_font = new Model_E2pdf_Font();
784 foreach ($template->get('fonts') as $key => $value) {
785 $font = $fonts_xml->addChild('font');
786 $font->addChildCData('title', $value);
787 $font->addChildCData('name', $key);
788 $font->addChildCData('value', $model_e2pdf_font->get_font($key));
789 }
790 }
791 }
792
793 //include item
794 if ($options['item']) {
795 if ($template->extension()->method('backup')) {
796 $item = $xml->addChild('item');
797 $template->extension()->backup($item);
798 }
799 }
800
801 $file = $this->helper->load('xml')->get_xml();
802 $this->download_response('xml', $file, $filename);
803 } else {
804 $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
805 $this->render('blocks', 'notifications');
806 }
807 }
808 }
809
810 $this->view('export_disabled', false);
811
812 if (!$this->helper->load('xml')->check()) {
813 $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
814 $this->view('export_disabled', true);
815 }
816
817 $template = new Model_E2pdf_Template();
818 if ($template->load($this->get->get('id'))) {
819
820 $this->view('template', $template);
821
822 $options = array(
823 'common' => array(
824 'name' => __('Options', 'e2pdf'),
825 'options' => array(
826 array(
827 'name' => __('Include Item', 'e2pdf'),
828 'key' => 'options[item]',
829 'value' => $template->extension()->method('backup') ? 1 : 0,
830 'default_value' => 0,
831 'type' => 'checkbox',
832 'placeholder' => '',
833 'disabled' => $template->extension()->method('backup') ? false : 'disabled'
834 ),
835 array(
836 'name' => __('Include Images', 'e2pdf'),
837 'key' => 'options[images]',
838 'value' => 1,
839 'default_value' => 0,
840 'type' => 'checkbox',
841 'placeholder' => '',
842 ),
843 array(
844 'name' => __('Include Fonts', 'e2pdf'),
845 'key' => 'options[fonts]',
846 'value' => 1,
847 'default_value' => 0,
848 'type' => 'checkbox',
849 'placeholder' => '',
850 )
851 )
852 )
853 );
854
855 $options = apply_filters('e2pdf_controller_templates_backup_options', $options, $template, $template->extension());
856
857 $this->view('options', $options);
858 } else {
859 $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
860 $this->render('blocks', 'notifications');
861 }
862 }
863
864 public function screen_action() {
865 if ($this->post->get()) {
866 $this->check_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce');
867 $option = $this->post->get('wp_screen_options');
868 if (is_array($option) && isset($option['option']) && isset($option['value']) && $option['value']) {
869 update_option($option['option'], $option['value']);
870 }
871 }
872 $location = $this->helper->get_url(
873 array(
874 'page' => 'e2pdf-templates',
875 )
876 );
877 $this->redirect($location);
878 }
879
880 /**
881 * Save template via ajax
882 * action: wp_ajax_e2pdf_save_form
883 * function: e2pdf_save_form
884 *
885 * @return json
886 */
887 public function ajax_save_form() {
888 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
889
890 $data = json_decode($this->post->get('data'), true);
891
892 $template = new Model_E2pdf_Template();
893 if (isset($data['ID'])) {
894 $template->load($data['ID']);
895 if ($template->get('pdf') && $template->get('pdf') !== $data['pdf']) {
896 $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
897 $this->helper->delete_dir($old_pdf_path);
898 }
899 }
900
901 foreach ($data as $key => $value) {
902 $template->set($key, $value);
903 }
904 $template_id = $template->save(true);
905
906 if (isset($data['item']) && $data['item'] == '-1' && $template_id) {
907 $template->load($template_id);
908 if ($template->extension()->method('add_form')) {
909 $template = $template->extension()->add_form($template);
910 } else {
911 $template->set('item', '');
912 }
913 $template->save(true);
914 }
915
916 if ($template->get('activated')) {
917 $this->activate_template($template->get('ID'));
918 } elseif (!$template->get('activated')) {
919 $this->deactivate_template($template->get('ID'));
920 }
921
922 $response = array(
923 'redirect' => $this->helper->get_url(array(
924 'page' => 'e2pdf-templates',
925 'action' => 'edit',
926 'id' => $template->get('ID'))
927 )
928 );
929
930 $this->add_notification('update', __('Template saved successfully', 'e2pdf'));
931 $this->json_response($response);
932 }
933
934 public function ajax_get_styles() {
935
936 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
937 $data = $this->post->get('data');
938
939 $extension = new Model_E2pdf_Extension();
940 if ($extension->load($data)) {
941 $content = $extension->styles();
942 } else {
943 $content = array();
944 }
945 $response = array(
946 'content' => $content,
947 );
948 $this->json_response($response);
949 }
950
951 /**
952 * Get extensions via ajax
953 * action: wp_ajax_e2pdf_extension
954 * function: e2pdf_extension
955 *
956 * @return json
957 */
958 public function ajax_extension() {
959
960 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
961 $data = $this->post->get('data');
962
963 $extension = new Model_E2pdf_Extension();
964
965 $content = array();
966 if ($extension->load($data)) {
967 $content = $extension->items();
968
969 if ($extension->method('add_form')) {
970 $select = new stdClass();
971 $select->id = '-1';
972 $select->url = 'javascript:void(0);';
973 $select->name = __("Auto Form from PDF", "e2pdf");
974
975 array_unshift($content, $select);
976 }
977 }
978
979
980 $select = new stdClass();
981 $select->id = '';
982 $select->url = 'javascript:void(0);';
983 $select->name = __("--- Select ---", "e2pdf");
984
985 array_unshift($content, $select);
986
987 $response = array(
988 'content' => $content,
989 );
990 $this->json_response($response);
991 }
992
993 /**
994 * Get extensions via ajax
995 * action: wp_ajax_e2pdf_extension
996 * function: e2pdf_extension
997 *
998 * @return json
999 */
1000 public function ajax_visual_mapper() {
1001
1002 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1003
1004 $data = $this->post->get('data');
1005
1006 $item = isset($data['item']) ? $data['item'] : '';
1007
1008 $extension = new Model_E2pdf_Extension();
1009 $extension->load($data['extension']);
1010 $extension->set('item', $item);
1011
1012 if ($visual_mapper = $extension->visual_mapper()) {
1013 $response = array(
1014 'content' => $visual_mapper
1015 );
1016 } elseif (!$item) {
1017 $response = array(
1018 'content' => __("You must set Item to use <strong>Visual Mapper</strong>", "e2pdf"),
1019 );
1020 } else {
1021 $response = array(
1022 'content' => __("Sorry, this extension doesn't support <strong>Visual Mapper</strong>", "e2pdf"),
1023 );
1024 }
1025
1026 $this->json_response($response);
1027 }
1028
1029 /**
1030 * Upload Template via Ajax
1031 * action: wp_ajax_e2pdf_upload
1032 * function: e2pdf_upload
1033 *
1034 * @return json
1035 */
1036 public function ajax_upload() {
1037
1038 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1039
1040 $data = $this->post->get();
1041
1042 $post_extension = $data['extension'];
1043 $item = isset($data['item']) ? $data['item'] : '';
1044 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1045
1046 $font = isset($data['font']) ? $data['font'] : false;
1047 $font_size = isset($data['font_size']) ? $data['font_size'] : false;
1048 $line_height = isset($data['line_height']) ? $data['line_height'] : false;
1049 $activated = isset($data['activated']) ? $data['activated'] : 0;
1050 $title = isset($data['title']) ? $data['title'] : __('(no title)', 'e2pdf');
1051
1052 $allowed_ext = array(
1053 'pdf'
1054 );
1055
1056 $pdf = $this->files->get('pdf');
1057
1058 $name = strtolower($pdf['name']);
1059 $tmp = $pdf['tmp_name'];
1060 $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1061
1062 if ($pdf['error']) {
1063 $error = $pdf['error'];
1064 } elseif (!in_array($ext, $allowed_ext)) {
1065 $error = __('Incorrect file extension', 'e2pdf');
1066 } elseif ($pdf['type'] != 'application/pdf') {
1067 $error = __('Incompatible type', 'e2pdf');
1068 }
1069
1070 if ($error) {
1071 $response = array(
1072 'error' => $error,
1073 );
1074 } else {
1075
1076 $model_e2pdf_api = new Model_E2pdf_Api();
1077 $model_e2pdf_api->set(array(
1078 'action' => 'template/upload',
1079 'data' => array(
1080 'title' => $name,
1081 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1082 )
1083 ));
1084 $request = $model_e2pdf_api->request();
1085
1086 if (!isset($request['error'])) {
1087
1088 $extension = new Model_E2pdf_Extension();
1089 if ($post_extension) {
1090 $extension->load($post_extension);
1091 if ($item && $item != '-1') {
1092 $extension->set('item', $item);
1093 }
1094 }
1095
1096 $pdf_name = md5(time());
1097 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1098 $pdf_images_dir = $pdf_dir . "images/";
1099
1100 $this->helper->create_dir($pdf_dir);
1101 $this->helper->create_dir($pdf_images_dir);
1102
1103 move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1104
1105 $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1106 $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1107
1108 if (is_array($pages) && !empty($pages)) {
1109 foreach ($pages as $page_key => $page) {
1110
1111 $pages[$page_key]['page_id'] = $page_key;
1112
1113 if (isset($page['properties']['background'])) {
1114 file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1115 unset($pages[$page_key]['properties']['background']);
1116 }
1117
1118 if (isset($page['elements']) && !empty($page['elements'])) {
1119 foreach ($page['elements'] as $element_key => $element) {
1120 if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1121
1122 $image = base64_decode($element['base64']);
1123 $file_name = basename($element['value']);
1124
1125 //exif_imagetype
1126 if (!$file_name) {
1127 $ext = $this->helper->load('image')->get_image_extension($image);
1128 if ($ext) {
1129 $file_name = md5(mktime()) . "." . $ext;
1130 }
1131 }
1132
1133 if ($file_name) {
1134 $upload_file = wp_upload_bits($file_name, null, $image);
1135 if (!$upload_file['error']) {
1136 $wp_filetype = wp_check_filetype($file_name, null);
1137 $attachment = array(
1138 'post_mime_type' => $wp_filetype['type'],
1139 'post_parent' => 0,
1140 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1141 'post_content' => '',
1142 'post_status' => 'inherit'
1143 );
1144 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1145 if (!is_wp_error($attachment_id)) {
1146 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1147 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1148 wp_update_attachment_metadata($attachment_id, $attachment_data);
1149 $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1150 }
1151 }
1152
1153 unset($pages[$page_key]['elements'][$element_key]['base64']);
1154 } else {
1155 unset($pages[$page_key]['elements'][$element_key]);
1156 }
1157 } elseif (isset($element['name']) && $element['name']) {
1158 $el_value = $extension->auto_map($element['name']);
1159 if ($el_value !== false) {
1160 $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1161 }
1162 }
1163 }
1164 }
1165 }
1166
1167 $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1168
1169 $template = new Model_E2pdf_Template();
1170
1171 if ($template_id) {
1172 $template->load($template_id);
1173 if ($template->get('pdf')) {
1174 $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1175 $this->helper->delete_dir($old_pdf_path);
1176 }
1177 $template->set('title', $title);
1178 $template->set('pages', $pages);
1179 $template->set('pdf', $pdf_name);
1180 $template->set('width', (String) $xml->template->width);
1181 $template->set('height', (String) $xml->template->height);
1182 $template->set('extension', $post_extension);
1183 $template->set('item', $item);
1184 $template->set('font', $font ? $font : (String) $xml->template->font);
1185 $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1186 $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1187 } else {
1188 $template->set('title', $title);
1189 $template->set('flatten', (String) $xml->template->flatten);
1190 $template->set('format', (String) $xml->template->format);
1191 $template->set('compression', (String) $xml->template->compression);
1192 $template->set('appearance', (String) $xml->template->appearance);
1193 $template->set('width', (String) $xml->template->width);
1194 $template->set('height', (String) $xml->template->height);
1195 $template->set('extension', $post_extension);
1196 $template->set('item', $item);
1197 $template->set('dataset_title', "");
1198 $template->set('button_title', "");
1199 $template->set('inline', "");
1200 $template->set('auto', "");
1201 $template->set('name', "");
1202 $template->set('password', "");
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 $template->set('font_color', (String) $xml->template->font_color);
1207 $template->set('pages', $pages);
1208 $template->set('pdf', $pdf_name);
1209 }
1210
1211 if ($xml->fonts) {
1212
1213 $model_e2pdf_font = new Model_E2pdf_Font();
1214 $fonts = $model_e2pdf_font->get_fonts();
1215
1216 foreach ($xml->fonts->children() as $key => $font) {
1217 $font_title = (String) $font->title;
1218 $name = (String) $font->name;
1219 $value = (String) $font->value;
1220
1221 $exist = array_search($font_title, $fonts);
1222 if (!$exist) {
1223 if (!file_exists($this->helper->get('fonts_dir') . $name)) {
1224 $f_name = $name;
1225 } else {
1226 $i = 0;
1227 do {
1228 $f_name = $i . '_' . $name;
1229 $i++;
1230 } while (file_exists($this->helper->get('fonts_dir') . $f_name));
1231 }
1232 file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
1233 }
1234 }
1235 }
1236 $template->save(true);
1237
1238 if ($item == '-1' && $extension->method('add_form')) {
1239 $template = $extension->add_form($template);
1240 $template->save(true);
1241 }
1242
1243 if ($activated && !$template->get('activated')) {
1244 $this->activate_template($template->get('ID'));
1245 } elseif (!$activated && $template->get('activated')) {
1246 $this->deactivate_template($template->get('ID'));
1247 }
1248
1249 $response = array(
1250 'redirect' => $this->helper->get_url(array(
1251 'page' => 'e2pdf-templates',
1252 'action' => 'edit',
1253 'id' => $template->get('ID'))
1254 )
1255 );
1256 } else {
1257 $this->helper->delete_dir($pdf_dir);
1258 $response = array(
1259 'error' => __("PDF can't be parsed", 'e2pdf'),
1260 );
1261 }
1262 } else {
1263 $response = array(
1264 'error' => $request['error'],
1265 );
1266 }
1267 }
1268
1269 $this->json_response($response);
1270 }
1271
1272 /**
1273 * Upload Template via Ajax
1274 * action: wp_ajax_e2pdf_upload
1275 * function: e2pdf_upload
1276 *
1277 * @return json
1278 */
1279 public function ajax_reupload() {
1280
1281 $error = false;
1282
1283 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1284
1285 $data = $this->post->get();
1286
1287 $new = isset($data['new']) ? $data['new'] : array();
1288 $flush = isset($data['flush']) ? $data['flush'] : array();
1289 $positions = isset($data['positions']) ? $data['positions'] : array();
1290
1291 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1292
1293 if (!$template_id) {
1294 return false;
1295 }
1296
1297 $allowed_ext = array(
1298 'pdf'
1299 );
1300
1301 $pdf = $this->files->get('pdf');
1302
1303 $name = strtolower($pdf['name']);
1304 $tmp = $pdf['tmp_name'];
1305 $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1306
1307 if ($pdf['error']) {
1308 $error = $pdf['error'];
1309 } elseif (!in_array($ext, $allowed_ext)) {
1310 $error = __('Incorrect file extension', 'e2pdf');
1311 } elseif ($pdf['type'] != 'application/pdf') {
1312 $error = __('Incompatible type', 'e2pdf');
1313 }
1314
1315 if ($error) {
1316 $response = array(
1317 'error' => $error,
1318 );
1319 } else {
1320
1321 $model_e2pdf_api = new Model_E2pdf_Api();
1322 $model_e2pdf_api->set(array(
1323 'action' => 'template/upload',
1324 'data' => array(
1325 'title' => $name,
1326 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1327 )
1328 ));
1329 $request = $model_e2pdf_api->request();
1330
1331 if (!isset($request['error'])) {
1332
1333 $template = new Model_E2pdf_Template();
1334 if ($template->load($template_id)) {
1335
1336 if ($template->get('pdf')) {
1337
1338 $extension = new Model_E2pdf_Extension();
1339 if ($template->get('extension') && $template->get('item')) {
1340 $extension->load($template->get('extension'));
1341 $extension->set('item', $template->get('item'));
1342 }
1343
1344 $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1345 $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1346
1347 foreach ($pages as $page_key => $page) {
1348 $pages[$page_key]['page_id'] = $page_key;
1349 }
1350
1351 $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1352
1353 $model_e2pdf_element = new Model_E2pdf_Element();
1354 $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1355
1356 $original_pages = $template->get('pages');
1357
1358 foreach ($positions as $pos_key => $pos_page) {
1359 if (!in_array($pos_key, $flush)) {
1360 if (!isset($pages[$pos_page])) {
1361 $error = sprintf(__("Position of %s page incorrect", 'e2pdf'), $pos_key);
1362 } elseif ($pages[$pos_page]['properties']['width'] < $original_pages[$pos_key]['properties']['width']) {
1363 $error = sprintf(__("Width of PDF Page %s can't be less width of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1364 } elseif ($pages[$pos_page]['properties']['height'] < $original_pages[$pos_key]['properties']['height']) {
1365 $error = sprintf(__("Height of PDF Page %s can't be less height of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1366 }
1367 }
1368 }
1369
1370 if (!$error) {
1371
1372 $pdf_name = md5(time());
1373 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1374 $pdf_images_dir = $pdf_dir . "images/";
1375
1376 $this->helper->create_dir($pdf_dir);
1377 $this->helper->create_dir($pdf_images_dir);
1378
1379 move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1380
1381 if (is_array($pages) && !empty($pages)) {
1382 foreach ($pages as $page_key => $page) {
1383
1384 if (isset($page['properties']['background'])) {
1385 file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1386 unset($pages[$page_key]['properties']['background']);
1387 }
1388
1389 if (isset($page['elements']) && !empty($page['elements'])) {
1390 foreach ($page['elements'] as $element_key => $element) {
1391
1392 $last_element_id++;
1393 $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1394
1395 if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1396
1397 $image = base64_decode($element['base64']);
1398 $file_name = basename($element['value']);
1399
1400 //exif_imagetype
1401 if (!$file_name) {
1402 $ext = $this->helper->load('image')->get_image_extension($image);
1403 if ($ext) {
1404 $file_name = md5(mktime()) . "." . $ext;
1405 }
1406 }
1407
1408 if ($file_name) {
1409 $upload_file = wp_upload_bits($file_name, null, $image);
1410 if (!$upload_file['error']) {
1411 $wp_filetype = wp_check_filetype($file_name, null);
1412 $attachment = array(
1413 'post_mime_type' => $wp_filetype['type'],
1414 'post_parent' => 0,
1415 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1416 'post_content' => '',
1417 'post_status' => 'inherit'
1418 );
1419 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1420 if (!is_wp_error($attachment_id)) {
1421 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1422 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1423 wp_update_attachment_metadata($attachment_id, $attachment_data);
1424 $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1425 }
1426 }
1427 unset($pages[$page_key]['elements'][$element_key]['base64']);
1428 } else {
1429 unset($pages[$page_key]['elements'][$element_key]);
1430 }
1431 } elseif (isset($element['name']) && $element['name']) {
1432 $el_value = $extension->auto_map($element['name']);
1433 if ($el_value !== false) {
1434 $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1435 }
1436 }
1437 }
1438 }
1439
1440
1441 foreach ($positions as $pos_key => $pos_page) {
1442 if ($pos_page == $page_key) {
1443 if (in_array($pos_key, $new)) {
1444 if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1445 $elements = $original_pages[$pos_key]['elements'];
1446 $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1447 }
1448 } else {
1449 if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1450 $elements = $original_pages[$pos_key]['elements'];
1451 $pages[$page_key]['elements'] = $elements;
1452 } else {
1453 $pages[$page_key]['elements'] = array();
1454 }
1455 }
1456 }
1457 }
1458 }
1459
1460 $pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1461 $this->helper->delete_dir($pdf_path);
1462
1463 $template->set('pdf', $pdf_name);
1464 $template->set('pages', $pages);
1465 $template->save(true);
1466
1467 $response = array(
1468 'redirect' => $this->helper->get_url(array(
1469 'page' => 'e2pdf-templates',
1470 'action' => 'edit',
1471 'id' => $template->get('ID'))
1472 )
1473 );
1474 } else {
1475 $this->helper->delete_dir($pdf_dir);
1476 $response = array(
1477 'error' => __("PDF can't be parsed", 'e2pdf'),
1478 );
1479 }
1480 } else {
1481 $response = array(
1482 'error' => $error,
1483 );
1484 }
1485 }
1486 }
1487 } else {
1488 $response = array(
1489 'error' => $request['error'],
1490 );
1491 }
1492 }
1493
1494 $this->json_response($response);
1495 }
1496
1497 /**
1498 * Auto Generation of Template
1499 * action: wp_ajax_e2pdf_auto
1500 * function: e2pdf_auto
1501 *
1502 * @return json
1503 */
1504 public function ajax_auto() {
1505 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1506 $data = $this->post->get('data');
1507
1508 $extension = $data['extension'];
1509 $item = $data['item'];
1510
1511 if (!$extension || !$item) {
1512 return;
1513 }
1514
1515 $model_e2pdf_extension = new Model_E2pdf_Extension();
1516 $model_e2pdf_extension->load($extension);
1517 $model_e2pdf_extension->set('item', $item);
1518
1519 if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1520 $content = $model_e2pdf_extension->auto();
1521 } else {
1522 $content = array();
1523 }
1524
1525 $response = array(
1526 'content' => $content,
1527 );
1528 $this->json_response($response);
1529 }
1530
1531 public function ajax_activate_template() {
1532
1533 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1534 $data = $this->post->get('data');
1535
1536 $id = $data['id'];
1537
1538 if (!$id) {
1539 return;
1540 }
1541
1542 $request = $this->activate_template($id);
1543 if (isset($request['error'])) {
1544 $response = array(
1545 'error' => $request['error'],
1546 );
1547 } else {
1548 $response = array(
1549 'content' => true,
1550 );
1551 }
1552
1553
1554 $this->json_response($response);
1555 }
1556
1557 public function ajax_deactivate_template() {
1558 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1559 $data = $this->post->get('data');
1560
1561 $id = $data['id'];
1562
1563 if (!$id) {
1564 return;
1565 }
1566
1567 $request = $this->deactivate_template($id);
1568 if (isset($request['error'])) {
1569 $response = array(
1570 'error' => $request['error'],
1571 );
1572 } else {
1573 $response = array(
1574 'content' => true,
1575 );
1576 }
1577 $this->json_response($response);
1578 }
1579
1580 /**
1581 * Move template to trash
1582 *
1583 * @param int $id - ID of template
1584 */
1585 public function trash_template($id = false) {
1586
1587 $id = (int) $id;
1588
1589 if (!$id) {
1590 return false;
1591 }
1592 $template = new Model_E2pdf_Template();
1593 $template->load($id);
1594 $template->set('trash', '1');
1595 $template->save();
1596 }
1597
1598 /**
1599 * Delete template
1600 *
1601 * @param int $id - ID of template
1602 */
1603 public function delete_template($id = false) {
1604
1605 $id = (int) $id;
1606
1607 if (!$id) {
1608 return false;
1609 }
1610
1611 $template = new Model_E2pdf_Template();
1612 $template->load($id);
1613 $this->deactivate_template($template->get('ID'));
1614 $template->delete();
1615 }
1616
1617 /**
1618 * Restore template
1619 *
1620 * @param int $id - ID of template
1621 */
1622 public function restore_template($id = false) {
1623
1624 $id = (int) $id;
1625
1626 if (!$id) {
1627 return false;
1628 }
1629 $template = new Model_E2pdf_Template();
1630 $template->load($id);
1631 $template->set('trash', '0');
1632 $template->save();
1633 }
1634
1635 /**
1636 * Duplicate template
1637 *
1638 * @param int $id - ID of template
1639 */
1640 public function duplicate_template($id = false) {
1641
1642 $id = (int) $id;
1643
1644 if (!$id) {
1645 return false;
1646 }
1647
1648 $template = new Model_E2pdf_Template();
1649 $template->load($id);
1650
1651 $title = $template->get('title') . " " . __('(Copy)', 'e2pdf');
1652 $template->set('ID', false);
1653 $template->set('uid', '');
1654 $template->set('title', $title);
1655 $template->set('activated', '0');
1656
1657 if ($template->get('pdf')) {
1658 $pdf_name = md5(time());
1659 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1660 $pdf_images_dir = $pdf_dir . "images/";
1661
1662 $this->helper->create_dir($pdf_dir);
1663 $this->helper->create_dir($pdf_images_dir);
1664
1665 if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")) {
1666 $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/*");
1667 foreach ($images as $image) {
1668 copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
1669 }
1670 copy($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf", $this->helper->get('pdf_dir') . $pdf_name . "/" . $pdf_name . ".pdf");
1671 $template->set('pdf', $pdf_name);
1672 }
1673 }
1674
1675 $template->save(true);
1676 }
1677
1678 /**
1679 * Activate template
1680 *
1681 * @param int $id - ID of template
1682 */
1683 public function activate_template($id = false) {
1684
1685 $id = (int) $id;
1686
1687 if (!$id) {
1688 return false;
1689 }
1690
1691 $template = new Model_E2pdf_Template();
1692 $template->load($id);
1693
1694 $model_e2pdf_api = new Model_E2pdf_Api();
1695 $model_e2pdf_api->set(array(
1696 'action' => 'template/activate',
1697 'data' => array(
1698 'template_id' => $template->get('ID'),
1699 'template_uid' => $template->get('uid'),
1700 'template_title' => $template->get('title')
1701 )
1702 ));
1703 $request = $model_e2pdf_api->request();
1704
1705 if (!isset($request['error'])) {
1706 $template->set('activated', 1);
1707 $template->set('uid', $request['template_uid']);
1708 $template->save();
1709 }
1710
1711 return $request;
1712 }
1713
1714 /**
1715 * Deactivate template
1716 *
1717 * @param int $id - ID of template
1718 */
1719 public function deactivate_template($id = false) {
1720
1721 $id = (int) $id;
1722
1723 if (!$id) {
1724 return false;
1725 }
1726
1727 $template = new Model_E2pdf_Template();
1728 $template->load($id);
1729
1730 $model_e2pdf_api = new Model_E2pdf_Api();
1731 $model_e2pdf_api->set(array(
1732 'action' => 'template/deactivate',
1733 'data' => array(
1734 'template_id' => $template->get('ID'),
1735 'template_uid' => $template->get('uid'),
1736 )
1737 ));
1738 $request = $model_e2pdf_api->request();
1739
1740 if (!isset($request['error'])) {
1741 $template->set('activated', 0);
1742 $template->set('uid', '');
1743 $template->save();
1744 }
1745
1746 return $request;
1747 }
1748
1749 /**
1750 * Get templates list
1751 *
1752 * @param array() $filters - Array of filter/order conditions
1753 * @param bool $count - Return number of templates
1754 *
1755 * @return mixed - IF $count - int ELSE array()
1756 */
1757 public function get_templates_list($filters = array(), $count = false) {
1758 global $wpdb;
1759 $model_e2pdf_template = new Model_E2pdf_Template();
1760
1761 $condition = array();
1762 if (isset($filters['status']) && $filters['status'] == 'trash') {
1763 $condition = array(
1764 'trash' => array(
1765 'condition' => '=',
1766 'value' => '1',
1767 'type' => '%d'
1768 )
1769 );
1770 } else {
1771 $condition = array(
1772 'trash' => array(
1773 'condition' => '<>',
1774 'value' => '1',
1775 'type' => '%d'
1776 )
1777 );
1778 }
1779
1780 if (isset($filters['s']) && $filters['s']) {
1781 $condition['title'] = array(
1782 'condition' => 'LIKE',
1783 'value' => '%%' . $filters['s'] . '%%',
1784 'type' => '%s'
1785 );
1786 }
1787
1788
1789 $order_condition = array();
1790 if (isset($filters['orderby']) && isset($filters['order'])) {
1791 $order_condition = array(
1792 'orderby' => $filters['orderby'],
1793 'order' => $filters['order'],
1794 );
1795 } else {
1796 $order_condition = array(
1797 'orderby' => 'id',
1798 'order' => 'desc',
1799 );
1800 }
1801
1802
1803 $limit_condition = array();
1804 if (!$count) {
1805 $paged = isset($filters['paged']) && $filters['paged'] ? $filters['paged'] : '0';
1806 $paged = (int) $paged <= 0 ? 1 : (int) $paged;
1807 $per_page = get_option('e2pdf_templates_screen_per_page') ? get_option('e2pdf_templates_screen_per_page') : '20';
1808
1809 $limit_condition = array(
1810 'limit' => $per_page,
1811 'offset' => (int) ($paged - 1) * $per_page
1812 );
1813 }
1814
1815 $where = $this->helper->load('db')->prepare_where($condition);
1816 $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1817 $limit = $this->helper->load('db')->prepare_limit($limit_condition);
1818
1819 $tpls = $wpdb->get_results($wpdb->prepare("SELECT `ID` FROM " . $model_e2pdf_template->get_table() . $where['sql'] . $orderby . $limit . "", $where['filter']));
1820
1821 if ($count) {
1822 return count($tpls);
1823 }
1824
1825 $templates = array();
1826 foreach ($tpls as $key => $tpl) {
1827 $template = new Model_E2pdf_Template();
1828 $template->load($tpl->ID, false);
1829 if (is_array($this->helper->get('license')->get('activated_templates'))) {
1830 if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1831 $this->deactivate_template($template->get('ID'));
1832 } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1833 $this->activate_template($template->get('ID'));
1834 }
1835 }
1836
1837 $templates[] = $template;
1838 }
1839
1840 return $templates;
1841 }
1842
1843 /**
1844 * Get paper sizes list
1845 *
1846 * @return array() - Sizes list
1847 */
1848 public function get_sizes_list($size = false, $attr = false) {
1849
1850 $sizes = array(
1851 'A4' => array(
1852 'width' => '595',
1853 'height' => '842',
1854 ),
1855 'LETTER' => array(
1856 'width' => '612',
1857 'height' => '792',
1858 ),
1859 'NOTE' => array(
1860 'width' => '540',
1861 'height' => '720',
1862 ),
1863 'LEGAL' => array(
1864 'width' => '612',
1865 'height' => '1008',
1866 ),
1867 'TABLOID' => array(
1868 'width' => '792',
1869 'height' => '1224',
1870 ),
1871 'EXECUTIVE' => array(
1872 'width' => '522',
1873 'height' => '756',
1874 ),
1875 'POSTCARD' => array(
1876 'width' => '283',
1877 'height' => '416',
1878 ),
1879 );
1880
1881 if (!$size) {
1882 return $sizes;
1883 } else {
1884 if (isset($sizes[$size][$attr])) {
1885 return $sizes[$size][$attr];
1886 }
1887 return false;
1888 }
1889 }
1890
1891 /**
1892 * Get fonts list
1893 *
1894 * @return array() - Fonts list
1895 */
1896 public function get_fonts($with_path = false) {
1897
1898 $model_e2pdf_font = new Model_E2pdf_Font();
1899 $fonts = $model_e2pdf_font->get_fonts();
1900
1901 if ($with_path) {
1902 foreach ($fonts as $key => $value) {
1903 $fonts[$key] = array(
1904 'key' => $value,
1905 'subfield' => array(
1906 'path' => $key,
1907 ),
1908 'value' => $value
1909 );
1910 }
1911 }
1912
1913 return $fonts;
1914 }
1915
1916 /**
1917 * Get font sizes list
1918 *
1919 * @return array() - Font sizes list
1920 */
1921 public function get_font_sizes() {
1922
1923 $sizes = array();
1924 for ($i = 1; $i <= 72; $i++) {
1925 $sizes[$i] = $i . 'px';
1926 }
1927 return $sizes;
1928 }
1929
1930 /**
1931 * Get line heights list
1932 *
1933 * @return array() - Line heights list
1934 */
1935 public function get_line_heights() {
1936
1937 $line_heights = array();
1938 for ($i = 1; $i <= 512; $i++) {
1939 $line_heights[$i] = $i . 'px';
1940 }
1941 return $line_heights;
1942 }
1943
1944 /**
1945 * Load metaboxes on template edit/create action
1946 */
1947 public function load_metaboxes() {
1948
1949 add_meta_box(
1950 'e2pdf_templates_save', __('Save', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
1951 );
1952 add_meta_box(
1953 'e2pdf_templates_builder', __('PDF Builder', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_builder')
1954 );
1955 add_meta_box(
1956 'e2pdf_templates_settings', __('Settings', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_settings')
1957 );
1958 }
1959
1960 /**
1961 * Load javascript on template edit/create action
1962 */
1963 public function load_scripts() {
1964
1965 wp_enqueue_script('postbox');
1966 wp_enqueue_script('jquery-ui-droppable');
1967 wp_enqueue_script('jquery-ui-resizable');
1968 wp_enqueue_script('jquery-ui-selectable');
1969 wp_enqueue_script('jquery-ui-dialog');
1970 wp_enqueue_script('jquery-ui-autocomplete');
1971 wp_enqueue_script('wp-color-picker');
1972 wp_enqueue_media();
1973 }
1974
1975 /**
1976 * Load styles on template edit/create action
1977 */
1978 public function load_styles($ext = false) {
1979 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);
1980 wp_enqueue_style('wp-color-picker');
1981
1982 if ($ext) {
1983 $extension = new Model_E2pdf_Extension();
1984 if ($extension->load($ext)) {
1985 $styles = $extension->styles();
1986 if ($styles && is_array($styles)) {
1987 foreach ($styles as $key => $value) {
1988 wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, false, false);
1989 }
1990 }
1991 }
1992 }
1993 }
1994
1995 }
1996