PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.00.00
E2Pdf – Export Pdf Tool for WordPress v1.00.00
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.00.00, at classes/controller/e2pdf-templates.php

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