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

2,009 lines 78.1 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 $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
177 if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
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 $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
260 if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
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 $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 $helper_e2pdf_image = new Helper_E2pdf_Image();
1143 $ext = $helper_e2pdf_image->get_image_extension($image);
1144 if ($ext) {
1145 $file_name = md5(mktime()) . "." . $ext;
1146 }
1147 }
1148
1149 if ($file_name) {
1150 $upload_file = wp_upload_bits($file_name, null, $image);
1151 if (!$upload_file['error']) {
1152 $wp_filetype = wp_check_filetype($file_name, null);
1153 $attachment = array(
1154 'post_mime_type' => $wp_filetype['type'],
1155 'post_parent' => 0,
1156 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1157 'post_content' => '',
1158 'post_status' => 'inherit'
1159 );
1160 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1161 if (!is_wp_error($attachment_id)) {
1162 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1163 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1164 wp_update_attachment_metadata($attachment_id, $attachment_data);
1165 $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1166 }
1167 }
1168
1169 unset($pages[$page_key]['elements'][$element_key]['base64']);
1170 } else {
1171 unset($pages[$page_key]['elements'][$element_key]);
1172 }
1173 } elseif (isset($element['name']) && $element['name']) {
1174 $el_value = $extension->auto_map($element['name']);
1175 if ($el_value !== false) {
1176 $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1177 }
1178 }
1179 }
1180 }
1181 }
1182
1183 $helper_e2pdf_sort = new Helper_E2pdf_Sort();
1184 $helper_e2pdf_sort->stable_uasort($pages, "sort_by_pageid");
1185
1186 $template = new Model_E2pdf_Template();
1187
1188 if ($template_id) {
1189 $template->load($template_id);
1190 }
1191
1192 if ($template_id) {
1193 if ($template->get('pdf')) {
1194 $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1195 $this->helper->delete_dir($old_pdf_path);
1196 }
1197 $template->set('pages', $pages);
1198 $template->set('pdf', $pdf_name);
1199 $template->set('width', (String) $xml->template->width);
1200 $template->set('height', (String) $xml->template->height);
1201 } else {
1202 $template->set('title', (String) $xml->template->title);
1203 $template->set('flatten', (String) $xml->template->flatten);
1204 $template->set('format', (String) $xml->template->format);
1205 $template->set('compression', (String) $xml->template->compression);
1206 $template->set('appearance', (String) $xml->template->appearance);
1207 $template->set('width', (String) $xml->template->width);
1208 $template->set('height', (String) $xml->template->height);
1209 $template->set('extension', $post_extension);
1210 $template->set('item', $item);
1211 $template->set('dataset_title', "");
1212 $template->set('button_title', "");
1213 $template->set('inline', "");
1214 $template->set('auto', "");
1215 $template->set('name', "");
1216 $template->set('password', "");
1217 $template->set('font', (String) $xml->template->font);
1218 $template->set('font_size', (String) $xml->template->font_size);
1219 $template->set('font_color', (String) $xml->template->font_color);
1220 $template->set('line_height', (String) $xml->template->font_size);
1221 $template->set('pages', $pages);
1222 $template->set('pdf', $pdf_name);
1223 }
1224
1225 if ($xml->fonts) {
1226
1227 $model_e2pdf_font = new Model_E2pdf_Font();
1228 $fonts = $model_e2pdf_font->get_fonts();
1229
1230 foreach ($xml->fonts->children() as $key => $font) {
1231 $title = (String) $font->title;
1232 $name = (String) $font->name;
1233 $value = (String) $font->value;
1234
1235 $exist = array_search($title, $fonts);
1236 if (!$exist) {
1237 if (!file_exists($this->helper->get('fonts_dir') . $name)) {
1238 $f_name = $name;
1239 } else {
1240 $i = 0;
1241 do {
1242 $f_name = $i . '_' . $name;
1243 $i++;
1244 } while (file_exists($this->helper->get('fonts_dir') . $f_name));
1245 }
1246 file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
1247 }
1248 }
1249 }
1250 $template->save(true);
1251
1252 $response = array(
1253 'redirect' => $this->helper->get_url(array(
1254 'page' => 'e2pdf-templates',
1255 'action' => 'edit',
1256 'id' => $template->get('ID'))
1257 )
1258 );
1259 } else {
1260 $this->helper->delete_dir($pdf_dir);
1261 $response = array(
1262 'error' => __("PDF can't be parsed", 'e2pdf'),
1263 );
1264 }
1265 } else {
1266 $response = array(
1267 'error' => $request['error'],
1268 );
1269 }
1270 }
1271
1272 $this->json_response($response);
1273 }
1274
1275 /**
1276 * Upload Template via Ajax
1277 * action: wp_ajax_e2pdf_upload
1278 * function: e2pdf_upload
1279 *
1280 * @return json
1281 */
1282 public function ajax_reupload() {
1283
1284
1285 $error = false;
1286
1287 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1288
1289 $data = $this->post->get();
1290
1291 $new = isset($data['new']) ? $data['new'] : array();
1292 $flush = isset($data['flush']) ? $data['flush'] : array();
1293 $positions = isset($data['positions']) ? $data['positions'] : array();
1294
1295 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1296
1297 if (!$template_id) {
1298 return false;
1299 }
1300
1301 $allowed_ext = array(
1302 'pdf'
1303 );
1304
1305 $pdf = $this->files->get('pdf');
1306
1307 $name = strtolower($pdf['name']);
1308 $tmp = $pdf['tmp_name'];
1309 $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1310
1311 if ($pdf['error']) {
1312 $error = $pdf['error'];
1313 } elseif (!in_array($ext, $allowed_ext)) {
1314 $error = __('Incorrect file extension', 'e2pdf');
1315 } elseif ($pdf['type'] != 'application/pdf') {
1316 $error = __('Incompatible type', 'e2pdf');
1317 }
1318
1319 if ($error) {
1320 $response = array(
1321 'error' => $error,
1322 );
1323 } else {
1324
1325 $model_e2pdf_api = new Model_E2pdf_Api();
1326 $model_e2pdf_api->set(array(
1327 'action' => 'template/upload',
1328 'data' => array(
1329 'title' => $name,
1330 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1331 )
1332 ));
1333 $request = $model_e2pdf_api->request();
1334
1335 if (!isset($request['error'])) {
1336
1337 $template = new Model_E2pdf_Template();
1338 if ($template->load($template_id)) {
1339
1340 if ($template->get('pdf')) {
1341
1342 $extension = new Model_E2pdf_Extension();
1343 if ($template->get('extension') && $template->get('item')) {
1344 $extension->load($template->get('extension'));
1345 $extension->set('item', $template->get('item'));
1346 }
1347
1348 $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1349 $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1350
1351 foreach ($pages as $page_key => $page) {
1352 $pages[$page_key]['page_id'] = $page_key;
1353 }
1354
1355 $helper_e2pdf_sort = new Helper_E2pdf_Sort();
1356 $helper_e2pdf_sort->stable_uasort($pages, "sort_by_pageid");
1357
1358 $model_e2pdf_element = new Model_E2pdf_Element();
1359 $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1360
1361 $original_pages = $template->get('pages');
1362
1363 foreach ($positions as $pos_key => $pos_page) {
1364 if (!in_array($pos_key, $flush)) {
1365 if (!isset($pages[$pos_page])) {
1366 $error = sprintf(__("Position of %s page incorrect", 'e2pdf'), $pos_key);
1367 } elseif ($pages[$pos_page]['properties']['width'] < $original_pages[$pos_key]['properties']['width']) {
1368 $error = sprintf(__("Width of PDF Page %s can't be less width of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1369 } elseif ($pages[$pos_page]['properties']['height'] < $original_pages[$pos_key]['properties']['height']) {
1370 $error = sprintf(__("Height of PDF Page %s can't be less height of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1371 }
1372 }
1373 }
1374
1375 if (!$error) {
1376
1377 $pdf_name = md5(time());
1378 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1379 $pdf_images_dir = $pdf_dir . "images/";
1380
1381 $this->helper->create_dir($pdf_dir);
1382 $this->helper->create_dir($pdf_images_dir);
1383
1384 move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1385
1386 if (is_array($pages) && !empty($pages)) {
1387 foreach ($pages as $page_key => $page) {
1388
1389 if (isset($page['properties']['background'])) {
1390 file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1391 unset($pages[$page_key]['properties']['background']);
1392 }
1393
1394 if (isset($page['elements']) && !empty($page['elements'])) {
1395 foreach ($page['elements'] as $element_key => $element) {
1396
1397 $last_element_id++;
1398 $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1399
1400 if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1401
1402 $image = base64_decode($element['base64']);
1403 $file_name = basename($element['value']);
1404
1405 //exif_imagetype
1406 if (!$file_name) {
1407 $helper_e2pdf_image = new Helper_E2pdf_Image();
1408 $ext = $helper_e2pdf_image->get_image_extension($image);
1409 if ($ext) {
1410 $file_name = md5(mktime()) . "." . $ext;
1411 }
1412 }
1413
1414 if ($file_name) {
1415 $upload_file = wp_upload_bits($file_name, null, $image);
1416 if (!$upload_file['error']) {
1417 $wp_filetype = wp_check_filetype($file_name, null);
1418 $attachment = array(
1419 'post_mime_type' => $wp_filetype['type'],
1420 'post_parent' => 0,
1421 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1422 'post_content' => '',
1423 'post_status' => 'inherit'
1424 );
1425 $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1426 if (!is_wp_error($attachment_id)) {
1427 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1428 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1429 wp_update_attachment_metadata($attachment_id, $attachment_data);
1430 $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1431 }
1432 }
1433 unset($pages[$page_key]['elements'][$element_key]['base64']);
1434 } else {
1435 unset($pages[$page_key]['elements'][$element_key]);
1436 }
1437 } elseif (isset($element['name']) && $element['name']) {
1438 $el_value = $extension->auto_map($element['name']);
1439 if ($el_value !== false) {
1440 $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1441 }
1442 }
1443 }
1444 }
1445
1446
1447 foreach ($positions as $pos_key => $pos_page) {
1448 if ($pos_page == $page_key) {
1449 if (in_array($pos_key, $new)) {
1450 if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1451 $elements = $original_pages[$pos_key]['elements'];
1452 $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1453 }
1454 } else {
1455 if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1456 $elements = $original_pages[$pos_key]['elements'];
1457 $pages[$page_key]['elements'] = $elements;
1458 } else {
1459 $pages[$page_key]['elements'] = array();
1460 }
1461 }
1462 }
1463 }
1464 }
1465
1466 $pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1467 $this->helper->delete_dir($pdf_path);
1468
1469 $template->set('pdf', $pdf_name);
1470 $template->set('pages', $pages);
1471 $template->save(true);
1472
1473 $response = array(
1474 'redirect' => $this->helper->get_url(array(
1475 'page' => 'e2pdf-templates',
1476 'action' => 'edit',
1477 'id' => $template->get('ID'))
1478 )
1479 );
1480 } else {
1481 $this->helper->delete_dir($pdf_dir);
1482 $response = array(
1483 'error' => __("PDF can't be parsed", 'e2pdf'),
1484 );
1485 }
1486 } else {
1487 $response = array(
1488 'error' => $error,
1489 );
1490 }
1491 }
1492 }
1493 } else {
1494 $response = array(
1495 'error' => $request['error'],
1496 );
1497 }
1498 }
1499
1500 $this->json_response($response);
1501 }
1502
1503 /**
1504 * Auto Generation of Template
1505 * action: wp_ajax_e2pdf_auto
1506 * function: e2pdf_auto
1507 *
1508 * @return json
1509 */
1510 public function ajax_auto() {
1511 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1512 $data = $this->post->get('data');
1513
1514 $extension = $data['extension'];
1515 $item = $data['item'];
1516
1517 if (!$extension || !$item) {
1518 return;
1519 }
1520
1521 $model_e2pdf_extension = new Model_E2pdf_Extension();
1522 $model_e2pdf_extension->load($extension);
1523 $model_e2pdf_extension->set('item', $item);
1524
1525 if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1526 $content = $model_e2pdf_extension->auto();
1527 } else {
1528 $content = array();
1529 }
1530
1531 $response = array(
1532 'content' => $content,
1533 );
1534 $this->json_response($response);
1535 }
1536
1537 public function ajax_activate_template() {
1538
1539 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1540 $data = $this->post->get('data');
1541
1542 $id = $data['id'];
1543
1544 if (!$id) {
1545 return;
1546 }
1547
1548 $request = $this->activate_template($id);
1549 if (isset($request['error'])) {
1550 $response = array(
1551 'error' => $request['error'],
1552 );
1553 } else {
1554 $response = array(
1555 'content' => true,
1556 );
1557 }
1558
1559
1560 $this->json_response($response);
1561 }
1562
1563 public function ajax_deactivate_template() {
1564 $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1565 $data = $this->post->get('data');
1566
1567 $id = $data['id'];
1568
1569 if (!$id) {
1570 return;
1571 }
1572
1573 $request = $this->deactivate_template($id);
1574 if (isset($request['error'])) {
1575 $response = array(
1576 'error' => $request['error'],
1577 );
1578 } else {
1579 $response = array(
1580 'content' => true,
1581 );
1582 }
1583 $this->json_response($response);
1584 }
1585
1586 /**
1587 * Move template to trash
1588 *
1589 * @param int $id - ID of template
1590 */
1591 public function trash_template($id = false) {
1592
1593 $id = (int) $id;
1594
1595 if (!$id) {
1596 return false;
1597 }
1598 $template = new Model_E2pdf_Template();
1599 $template->load($id);
1600 $template->set('trash', '1');
1601 $template->save();
1602 }
1603
1604 /**
1605 * Delete template
1606 *
1607 * @param int $id - ID of template
1608 */
1609 public function delete_template($id = false) {
1610
1611 $id = (int) $id;
1612
1613 if (!$id) {
1614 return false;
1615 }
1616
1617 $template = new Model_E2pdf_Template();
1618 $template->load($id);
1619 $this->deactivate_template($template->get('ID'));
1620 $template->delete();
1621 }
1622
1623 /**
1624 * Restore template
1625 *
1626 * @param int $id - ID of template
1627 */
1628 public function restore_template($id = false) {
1629
1630 $id = (int) $id;
1631
1632 if (!$id) {
1633 return false;
1634 }
1635 $template = new Model_E2pdf_Template();
1636 $template->load($id);
1637 $template->set('trash', '0');
1638 $template->save();
1639 }
1640
1641 /**
1642 * Duplicate template
1643 *
1644 * @param int $id - ID of template
1645 */
1646 public function duplicate_template($id = false) {
1647
1648 $id = (int) $id;
1649
1650 if (!$id) {
1651 return false;
1652 }
1653
1654 $template = new Model_E2pdf_Template();
1655 $template->load($id);
1656
1657 $title = $template->get('title') . " " . __('(Copy)', 'e2pdf');
1658 $template->set('ID', false);
1659 $template->set('uid', '');
1660 $template->set('title', $title);
1661 $template->set('activated', '0');
1662
1663 if ($template->get('pdf')) {
1664 $pdf_name = md5(time());
1665 $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1666 $pdf_images_dir = $pdf_dir . "images/";
1667
1668 $this->helper->create_dir($pdf_dir);
1669 $this->helper->create_dir($pdf_images_dir);
1670
1671
1672 if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")) {
1673 $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/*");
1674 foreach ($images as $image) {
1675 copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
1676 }
1677 copy($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf", $this->helper->get('pdf_dir') . $pdf_name . "/" . $pdf_name . ".pdf");
1678 $template->set('pdf', $pdf_name);
1679 }
1680 }
1681
1682
1683 $template->save(true);
1684 }
1685
1686 /**
1687 * Activate template
1688 *
1689 * @param int $id - ID of template
1690 */
1691 public function activate_template($id = false) {
1692
1693 $id = (int) $id;
1694
1695 if (!$id) {
1696 return false;
1697 }
1698
1699 $template = new Model_E2pdf_Template();
1700 $template->load($id);
1701
1702 $model_e2pdf_api = new Model_E2pdf_Api();
1703 $model_e2pdf_api->set(array(
1704 'action' => 'template/activate',
1705 'data' => array(
1706 'template_id' => $template->get('ID'),
1707 'template_uid' => $template->get('uid'),
1708 'template_title' => $template->get('title')
1709 )
1710 ));
1711 $request = $model_e2pdf_api->request();
1712
1713 if (!isset($request['error'])) {
1714 $template->set('activated', 1);
1715 $template->set('uid', $request['template_uid']);
1716 $template->save();
1717 }
1718
1719 return $request;
1720 }
1721
1722 /**
1723 * Deactivate template
1724 *
1725 * @param int $id - ID of template
1726 */
1727 public function deactivate_template($id = false) {
1728
1729 $id = (int) $id;
1730
1731 if (!$id) {
1732 return false;
1733 }
1734
1735 $template = new Model_E2pdf_Template();
1736 $template->load($id);
1737
1738 $model_e2pdf_api = new Model_E2pdf_Api();
1739 $model_e2pdf_api->set(array(
1740 'action' => 'template/deactivate',
1741 'data' => array(
1742 'template_id' => $template->get('ID'),
1743 'template_uid' => $template->get('uid'),
1744 )
1745 ));
1746 $request = $model_e2pdf_api->request();
1747
1748 if (!isset($request['error'])) {
1749 $template->set('activated', 0);
1750 $template->set('uid', '');
1751 $template->save();
1752 }
1753
1754 return $request;
1755 }
1756
1757 /**
1758 * Get templates list
1759 *
1760 * @param array() $filters - Array of filter/order conditions
1761 * @param bool $count - Return number of templates
1762 *
1763 * @return mixed - IF $count - int ELSE array()
1764 */
1765 public function get_templates_list($filters = array(), $count = false) {
1766 global $wpdb;
1767 $model_e2pdf_template = new Model_E2pdf_Template();
1768 $helper_e2pdf_db = new Helper_E2pdf_Db();
1769
1770 $condition = array();
1771 if (isset($filters['status']) && $filters['status'] == 'trash') {
1772 $condition = array(
1773 'trash' => array(
1774 'condition' => '=',
1775 'value' => '1',
1776 'type' => '%d'
1777 )
1778 );
1779 } else {
1780 $condition = array(
1781 'trash' => array(
1782 'condition' => '<>',
1783 'value' => '1',
1784 'type' => '%d'
1785 )
1786 );
1787 }
1788
1789 if (isset($filters['s']) && $filters['s']) {
1790 $condition['title'] = array(
1791 'condition' => 'LIKE',
1792 'value' => '%%' . $filters['s'] . '%%',
1793 'type' => '%s'
1794 );
1795 }
1796
1797
1798 $order_condition = array();
1799 if (isset($filters['orderby']) && isset($filters['order'])) {
1800 $order_condition = array(
1801 'orderby' => $filters['orderby'],
1802 'order' => $filters['order'],
1803 );
1804 } else {
1805 $order_condition = array(
1806 'orderby' => 'id',
1807 'order' => 'desc',
1808 );
1809 }
1810
1811 $where = $helper_e2pdf_db->prepare_where($condition);
1812 $orderby = $helper_e2pdf_db->prepare_orderby($order_condition);
1813
1814 $templates = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $model_e2pdf_template->get_table() . $where['sql'] . $orderby . "", $where['filter']));
1815
1816 if ($count) {
1817 return count($templates);
1818 }
1819
1820 $model_e2pdf_extension = new Model_E2pdf_Extension();
1821
1822 foreach ($templates as $key => $template) {
1823
1824 if (is_array($this->helper->get('license')->get('activated_templates'))) {
1825 if ($template->activated && !in_array($template->uid, $this->helper->get('license')->get('activated_templates'))) {
1826 $this->deactivate_template($template->ID);
1827 } elseif (!$template->activated && in_array($template->uid, $this->helper->get('license')->get('activated_templates'))) {
1828 $this->activate_template($template->ID);
1829 }
1830 }
1831
1832 if ($model_e2pdf_extension->load($template->extension)) {
1833 $item = $model_e2pdf_extension->get_item($template->item);
1834 $template->item_name = $item->name;
1835 $template->item_url = $item->url;
1836 } else {
1837 $template->item_name = __('[unavailable]', 'e2pdf');
1838 $template->item_url = 'javascript:void(0);';
1839 }
1840 }
1841
1842 return $templates;
1843 }
1844
1845 /**
1846 * Get extensions list
1847 *
1848 * @return array() - Extensions list
1849 */
1850 public function get_extensions_list() {
1851
1852 $model_e2pdf_extension = new Model_E2pdf_Extension();
1853 return $model_e2pdf_extension->get_extensions_list();
1854 }
1855
1856 /**
1857 * Get paper sizes list
1858 *
1859 * @return array() - Sizes list
1860 */
1861 public function get_sizes_list($size = false, $attr = false) {
1862
1863 $sizes = array(
1864 'A4' => array(
1865 'width' => '595',
1866 'height' => '842',
1867 ),
1868 'LETTER' => array(
1869 'width' => '612',
1870 'height' => '792',
1871 ),
1872 'NOTE' => array(
1873 'width' => '540',
1874 'height' => '720',
1875 ),
1876 'LEGAL' => array(
1877 'width' => '612',
1878 'height' => '1008',
1879 ),
1880 'TABLOID' => array(
1881 'width' => '792',
1882 'height' => '1224',
1883 ),
1884 'EXECUTIVE' => array(
1885 'width' => '522',
1886 'height' => '756',
1887 ),
1888 'POSTCARD' => array(
1889 'width' => '283',
1890 'height' => '416',
1891 ),
1892 );
1893
1894 if (!$size) {
1895 return $sizes;
1896 } else {
1897 if (isset($sizes[$size][$attr])) {
1898 return $sizes[$size][$attr];
1899 }
1900 return false;
1901 }
1902 }
1903
1904 /**
1905 * Get fonts list
1906 *
1907 * @return array() - Fonts list
1908 */
1909 public function get_fonts($with_path = false) {
1910
1911 $model_e2pdf_font = new Model_E2pdf_Font();
1912 $fonts = $model_e2pdf_font->get_fonts();
1913
1914 if ($with_path) {
1915 foreach ($fonts as $key => $value) {
1916 $fonts[$key] = array(
1917 'key' => $value,
1918 'subfield' => array(
1919 'path' => $key,
1920 ),
1921 'value' => $value
1922 );
1923 }
1924 }
1925
1926 return $fonts;
1927 }
1928
1929 /**
1930 * Get font sizes list
1931 *
1932 * @return array() - Font sizes list
1933 */
1934 public function get_font_sizes() {
1935
1936 $sizes = array();
1937 for ($i = 1; $i <= 72; $i++) {
1938 $sizes[$i] = $i . 'px';
1939 }
1940 return $sizes;
1941 }
1942
1943 /**
1944 * Get line heights list
1945 *
1946 * @return array() - Line heights list
1947 */
1948 public function get_line_heights() {
1949
1950 $line_heights = array();
1951 for ($i = 1; $i <= 512; $i++) {
1952 $line_heights[$i] = $i . 'px';
1953 }
1954 return $line_heights;
1955 }
1956
1957 /**
1958 * Load metaboxes on template edit/create action
1959 */
1960 public function load_metaboxes() {
1961
1962 add_meta_box(
1963 'e2pdf_templates_save', __('Save', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
1964 );
1965 add_meta_box(
1966 'e2pdf_templates_builder', __('PDF Builder', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_builder')
1967 );
1968 add_meta_box(
1969 'e2pdf_templates_settings', __('Settings', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_settings')
1970 );
1971 }
1972
1973 /**
1974 * Load javascript on template edit/create action
1975 */
1976 public function load_scripts() {
1977
1978 wp_enqueue_script('postbox');
1979 wp_enqueue_script('jquery-ui-droppable');
1980 wp_enqueue_script('jquery-ui-resizable');
1981 wp_enqueue_script('jquery-ui-selectable');
1982 wp_enqueue_script('jquery-ui-dialog');
1983 wp_enqueue_script('jquery-ui-autocomplete');
1984 wp_enqueue_script('wp-color-picker');
1985 wp_enqueue_media();
1986 }
1987
1988 /**
1989 * Load styles on template edit/create action
1990 */
1991 public function load_styles($ext = false) {
1992 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);
1993 wp_enqueue_style('wp-color-picker');
1994
1995 if ($ext) {
1996 $extension = new Model_E2pdf_Extension();
1997 if ($extension->load($ext)) {
1998 $styles = $extension->get_styles();
1999 if ($styles && is_array($styles)) {
2000 foreach ($styles as $key => $value) {
2001 wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, false, false);
2002 }
2003 }
2004 }
2005 }
2006 }
2007
2008 }
2009