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

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