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

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