PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.07.11
E2Pdf – Export Pdf Tool for WordPress v1.07.11
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 / model / e2pdf-template.php

e2pdf-template.php in E2Pdf – Export Pdf Tool for WordPress 1.07.11, at classes/model/e2pdf-template.php

637 lines 21.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * E2pdf Template Model
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 Model_E2pdf_Template extends Model_E2pdf_Model {
17
18 private $template = array();
19 private $extension = null;
20 private $table;
21
22 /*
23 * On Template init
24 */
25
26 function __construct() {
27 global $wpdb;
28 parent::__construct();
29 $this->table = $wpdb->prefix . 'e2pdf_templates';
30 }
31
32 /**
33 * Load Template by ID
34 *
35 * @param int $template_id - ID of template
36 */
37 public function load($template_id, $full = true) {
38 global $wpdb;
39
40 $template = false;
41 if ($this->helper->get('cache')) {
42 $template = wp_cache_get($template_id, 'e2pdf_templates');
43 }
44
45 if ($template === false) {
46 $template = $wpdb->get_row($wpdb->prepare("SELECT * FROM `{$this->get_table()}` WHERE ID = %d", $template_id), ARRAY_A);
47 if ($this->helper->get('cache')) {
48 wp_cache_set($template_id, $template, 'e2pdf_templates');
49 }
50 }
51
52 if ($template) {
53 $this->template = $template;
54
55 $extension = new Model_E2pdf_Extension();
56 if ($this->get('extension')) {
57 $extension->load($this->get('extension'));
58 }
59 if ($this->get('item')) {
60 $extension->set('item', $this->get('item'));
61 }
62 if ($this->get('ID')) {
63 $extension->set('template_id', $this->get('ID'));
64 }
65 $this->extension = $extension;
66
67 if ($full) {
68 $this->set('fonts', unserialize($template['fonts']));
69
70 $pages = false;
71 if ($this->helper->get('cache')) {
72 $pages = wp_cache_get($this->get('ID'), 'e2pdf_pages');
73 }
74
75 if ($pages === false) {
76 $model_e2pdf_page = new Model_E2pdf_Page();
77 $pages = $model_e2pdf_page->get_pages($this->get('ID'));
78 if ($this->helper->get('cache')) {
79 wp_cache_set($this->get('ID'), $pages, 'e2pdf_pages');
80 }
81 }
82
83 $this->set('pages', $pages);
84 }
85 return true;
86 }
87 return false;
88 }
89
90 /**
91 * Get loaded Template
92 *
93 * @return object
94 */
95 public function template() {
96 return $this->template;
97 }
98
99 public function extension() {
100 return $this->extension;
101 }
102
103 /**
104 * Set Template attribute
105 *
106 * @param string $key - Attribute Key
107 * @param string $value - Attribute Value
108 */
109 public function set($key, $value) {
110 $this->template[$key] = $value;
111 }
112
113 /**
114 * Get Template attribute by Key
115 *
116 * @param string $key - Attribute Key
117 *
118 * @return mixed
119 */
120 public function get($key) {
121 if (isset($this->template[$key])) {
122 $value = $this->template[$key];
123 return $value;
124 } else {
125
126 switch ($key) {
127
128 case 'title':
129 $value = __("(no title)", 'e2pdf');
130 break;
131
132 case 'flatten':
133 case 'width':
134 case 'height':
135 case 'inline':
136 case 'auto':
137 case 'trash':
138 case 'locked':
139 case 'activated':
140 $value = 0;
141 break;
142
143 case 'appearance':
144 $value = 1;
145 break;
146
147 case 'compression':
148 $value = -1;
149 break;
150
151 case 'format':
152 $value = 'pdf';
153 break;
154
155 case 'fonts':
156 $value = array();
157 break;
158
159 default:
160 $value = '';
161 break;
162 }
163 return $value;
164 }
165 }
166
167 /**
168 * Get Templates table
169 *
170 * @return string
171 */
172 public function get_table() {
173 return $this->table;
174 }
175
176 /**
177 * Delete loaded template
178 */
179 public function delete() {
180 global $wpdb;
181 if ($this->get('ID')) {
182 if ($this->get('pdf')) {
183 $pdf_dir = $this->helper->get('pdf_dir') . $this->get('pdf') . "/";
184 $this->helper->delete_dir($pdf_dir);
185 }
186
187 $tpl_dir = $this->helper->get('tpl_dir') . $this->get('ID') . "/";
188 $this->helper->delete_dir($tpl_dir);
189
190 $where = array(
191 'ID' => $this->get('ID')
192 );
193 $wpdb->delete($this->get_table(), $where);
194
195 foreach ($this->get('pages') as $page) {
196 $model_e2pdf_page = new Model_E2pdf_Page();
197 $model_e2pdf_page->load($page['page_id'], $page['template_id']);
198 $model_e2pdf_page->delete();
199 }
200
201 if ($this->helper->get('cache')) {
202 wp_cache_delete($this->get('ID'), 'e2pdf_templates');
203 wp_cache_delete($this->get('ID'), 'e2pdf_pages');
204 }
205 }
206 }
207
208 /**
209 * Save template
210 */
211 public function save($rebuild = false) {
212 global $wpdb;
213 $template = $this->pre_save();
214
215 if ($this->get('ID')) {
216 $where = array(
217 'ID' => $this->get('ID')
218 );
219 $wpdb->update($this->get_table(), $template, $where);
220 } else {
221 $wpdb->insert($this->get_table(), $template);
222 $this->set('ID', $wpdb->insert_id);
223 }
224
225 if ($this->get('ID') && $rebuild) {
226 $this->flush();
227 foreach ($this->get('pages') as $page_key => $page_value) {
228 $page = new Model_E2pdf_Page();
229 foreach ($page_value as $page_value_key => $page_value_value) {
230 $page->set($page_value_key, $page_value_value);
231 }
232
233 if (!$page_value['actions']) {
234 $page_actions = array();
235 } else {
236 $page_actions = $page_value['actions'];
237 }
238 $page->set('actions', $page_actions);
239
240 $page->set('template_id', $this->get('ID'));
241 $page->set('page_id', $page_key);
242 $page->save();
243
244 if (isset($page_value['elements'])) {
245
246 $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
247
248 foreach ($page_value['elements'] as $element_key => $element_value) {
249 $element = new Model_E2pdf_Element();
250 foreach ($element_value as $element_value_key => $element_value_value) {
251 $element->set($element_value_key, $element_value_value);
252 }
253
254 if (!$element_value['properties']) {
255 $element_properties = array();
256 } else {
257 $element_properties = $element_value['properties'];
258 }
259 $element->set('properties', $element_properties);
260
261 if (!$element_value['actions']) {
262 $element_actions = array();
263 } else {
264 $element_actions = $element_value['actions'];
265 }
266 $element->set('actions', $element_actions);
267 $element->set('page_id', $page->get('page_id'));
268 $element->set('template_id', $this->get('ID'));
269 $element->save();
270 }
271 }
272 }
273 }
274
275 if ($this->helper->get('cache') && $this->get('ID')) {
276 wp_cache_delete($this->get('ID'), 'e2pdf_templates');
277 wp_cache_delete($this->get('ID'), 'e2pdf_pages');
278 }
279
280 return $this->get('ID');
281 }
282
283 /**
284 * Before save template
285 */
286 public function pre_save() {
287
288 $fonts = array();
289 $model_e2pdf_font = new Model_E2pdf_Font();
290
291 $all_fonts = $model_e2pdf_font->get_fonts();
292
293 $c_font = array_search($this->get('font'), $all_fonts);
294 if ($c_font) {
295 $fonts[$c_font] = $this->get('font');
296 }
297
298 $pages = $this->get('pages');
299 foreach ($pages as $key => $page) {
300 if (!empty($page['elements'])) {
301 foreach ($page['elements'] as $element_key => $element) {
302 $tmp_fonts = $model_e2pdf_font->get_element_fonts($element, $all_fonts);
303 if (!empty($tmp_fonts)) {
304 $fonts = array_merge($fonts, $tmp_fonts);
305 }
306 }
307 }
308 }
309
310 $this->set('fonts', $fonts);
311
312 $template = array(
313 'uid' => $this->get('uid'),
314 'title' => $this->get('title'),
315 'pdf' => $this->get('pdf'),
316 'updated_at' => current_time('mysql', 1),
317 'flatten' => $this->get('flatten'),
318 'format' => $this->get('format'),
319 'compression' => $this->get('compression'),
320 'appearance' => $this->get('appearance'),
321 'width' => $this->get('width'),
322 'height' => $this->get('height'),
323 'extension' => $this->get('extension'),
324 'item' => $this->get('item'),
325 'format' => $this->get('format'),
326 'dataset_title' => $this->get('dataset_title'),
327 'button_title' => $this->get('button_title'),
328 'inline' => $this->get('inline'),
329 'auto' => $this->get('auto'),
330 'name' => $this->get('name'),
331 'password' => $this->get('password'),
332 'meta_title' => $this->get('meta_title'),
333 'meta_subject' => $this->get('meta_subject'),
334 'meta_author' => $this->get('meta_author'),
335 'meta_keywords' => $this->get('meta_keywords'),
336 'fonts' => serialize($this->get('fonts')),
337 'font' => $this->get('font'),
338 'font_size' => $this->get('font_size'),
339 'font_color' => $this->get('font_color'),
340 'line_height' => $this->get('line_height'),
341 'trash' => $this->get('trash'),
342 'locked' => $this->get('locked'),
343 'activated' => $this->get('activated'),
344 'author' => get_current_user_id(),
345 );
346
347 if (!$this->get('ID')) {
348 $template['created_at'] = current_time('mysql', 1);
349 }
350
351 return $template;
352 }
353
354 public function fill($dataset = false, $uid = false) {
355
356 $this->set('dataset', $dataset);
357 $this->extension()->set('dataset', $this->get('dataset'));
358
359 if ($uid) {
360 $this->extension()->set('uid', $uid);
361 $entry = new Model_E2pdf_Entry();
362 if ($entry->load_by_uid($uid)) {
363 $uid_params = $entry->get('entry');
364 if (isset($uid_params['user_id'])) {
365 $this->extension()->set('user_id', $uid_params['user_id']);
366 }
367 if (isset($uid_params['args'])) {
368 $this->extension()->set('args', $uid_params['args']);
369 }
370 }
371 }
372
373 do_action('e2pdf_model_template_fill_pre', $this, $this->extension());
374
375 $action = new Model_E2pdf_Action();
376 $action->load($this->extension());
377
378 $pages = $this->get('pages');
379
380 $changed_elements = array();
381 foreach ($pages as $key => $value) {
382 $changed_elements = array_merge($changed_elements, $action->process_page_id($value));
383 }
384
385 $changed_pages = array();
386 if (!empty($changed_elements)) {
387 foreach ($changed_elements as $element) {
388 $changed_pages[$element['page_id']][] = $element;
389 }
390 }
391
392 foreach ($pages as $key => $value) {
393
394 if (isset($changed_pages[$value['page_id']])) {
395 $value['elements'] = array_merge($value['elements'], $changed_pages[$value['page_id']]);
396 }
397
398 $pages[$key] = $value = $action->process_actions($value);
399
400 if ($value) {
401 if (!empty($value['elements'])) {
402
403 $this->helper->load('sort')->stable_uasort($value['elements'], "sort_by_zindex");
404 $pages[$key]['elements'] = $value['elements'];
405
406 foreach ($value['elements'] as $el_key => $el_value) {
407 if ($el_value['type'] === 'e2pdf-checkbox') {
408 //e2pdf-checkbox render
409 $pages[$key]['elements'][$el_key]['properties']['option'] = $this->extension()->render(
410 $el_value['properties']['option'], false, $el_value
411 );
412 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
413 $el_value['value'], 'value', $el_value
414 );
415 } elseif ($el_value['type'] === 'e2pdf-radio') {
416 //e2pdf-radio render
417 $pages[$key]['elements'][$el_key]['properties']['option'] = $this->extension()->render(
418 $el_value['properties']['option'], false, $el_value
419 );
420 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
421 $el_value['value'], 'value', $el_value
422 );
423 } elseif ($el_value['type'] === 'e2pdf-select') {
424 //e2pdf-select render
425 $pages[$key]['elements'][$el_key]['properties']['options'] = $this->extension()->render(
426 $el_value['properties']['options'], false, $el_value
427 );
428 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
429 $el_value['value'], 'value', $el_value
430 );
431 } elseif ($el_value['type'] === 'e2pdf-html') {
432 //e2pdf-html render
433 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
434 $el_value['value'], 'value', $el_value
435 );
436 } elseif ($el_value['type'] === 'e2pdf-image') {
437 //e2pdf-image render
438 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
439 $el_value['value'], 'value', $el_value
440 );
441 } elseif ($el_value['type'] === 'e2pdf-signature') {
442 //e2pdf-signature render
443 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
444 $el_value['value'], 'value', $el_value
445 );
446 } else {
447 //another e2pdf fields render
448 $pages[$key]['elements'][$el_key]['value'] = $this->extension()->render(
449 $el_value['value'], 'value', $el_value
450 );
451 }
452 }
453 }
454 } else {
455 unset($pages[$key]);
456 }
457 }
458
459 $this->set('pages', $pages);
460
461 do_action('e2pdf_model_template_fill_after', $this, $this->extension());
462 }
463
464 public function pre_render() {
465 $pages = $this->get('pages');
466 foreach ($pages as $key => $page) {
467 $page = (array) $page;
468 $pages[$key] = $page;
469 if (!empty($page['elements'])) {
470 foreach ($page['elements'] as $el_key => $el_value) {
471 $el_value = (array) $el_value;
472 $pages[$key]['elements'][$el_key] = $el_value;
473 $esig = isset($el_value['properties']['esig']) && $el_value['properties']['esig'] ? true : false;
474 if ($el_value['type'] == 'e2pdf-image' || ($el_value['type'] == 'e2pdf-signature' && !$esig)) {
475 if ($image = $this->helper->load('image')->get_image($el_value['value'])) {
476 $pages[$key]['elements'][$el_key]['value'] = $image;
477 } else {
478 $pages[$key]['elements'][$el_key]['value'] = '';
479 }
480 }
481 }
482 }
483 }
484
485 return $pages;
486 }
487
488 public function convert($pre_save, $type = false) {
489
490 $model_e2pdf_convert = new Model_E2pdf_Convert();
491 $model_e2pdf_font = new Model_E2pdf_Font();
492
493 if ($pre_save) {
494 $pages = $this->get('pages');
495 $this->template = $this->pre_save();
496 $this->set('pages', $pages);
497 $this->set('fonts', unserialize($this->get('fonts')));
498 }
499
500 $fonts = array();
501 if ($this->get('fonts')) {
502 foreach ($this->get('fonts') as $key => $value) {
503 $fonts[] = array(
504 'name' => $value,
505 'value' => $model_e2pdf_font->get_font($key)
506 );
507 }
508 }
509
510 $pages = $this->pre_render();
511
512 $settings = array(
513 'title' => $this->get_filename(),
514 'flatten' => $this->get('flatten'),
515 'format' => $this->get('format'),
516 'compression' => $this->get('compression'),
517 'appearance' => $this->get('appearance'),
518 'password' => $this->get('password'),
519 'meta_title' => $this->get('meta_title'),
520 'meta_subject' => $this->get('meta_subject'),
521 'meta_author' => $this->get('meta_author'),
522 'meta_keywords' => $this->get('meta_keywords'),
523 'font' => $this->get('font'),
524 'font_size' => $this->get('font_size'),
525 'font_color' => $this->get('font_color'),
526 'line_height' => $this->get('line_height'),
527 'uid' => $this->get('uid'),
528 'dataset' => $this->get('dataset'),
529 );
530
531 if ($this->get('pdf')) {
532 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
533 if (file_exists($pdf)) {
534 $settings['pdf'] = base64_encode(file_get_contents($pdf));
535 }
536 }
537
538 $model_e2pdf_convert->set(array(
539 'type' => $type,
540 'data' => array(
541 'settings' => $settings,
542 'pages' => $pages,
543 'fonts' => $fonts
544 ),
545 ));
546
547 return $model_e2pdf_convert->convert();
548 }
549
550 public function render($pre_save = false) {
551 $model_e2pdf_api = new Model_E2pdf_Api();
552 $model_e2pdf_font = new Model_E2pdf_Font();
553
554 if ($pre_save) {
555 $pages = $this->get('pages');
556 $this->template = $this->pre_save();
557 $this->set('pages', $pages);
558 $this->set('fonts', unserialize($this->get('fonts')));
559 }
560
561 $fonts = array();
562 if ($this->get('fonts')) {
563 foreach ($this->get('fonts') as $key => $value) {
564 $fonts[] = array(
565 'name' => $value,
566 'value' => $model_e2pdf_font->get_font($key)
567 );
568 }
569 }
570
571 $pages = $this->pre_render();
572
573 $settings = array(
574 'title' => $this->get_filename(),
575 'flatten' => $this->get('flatten'),
576 'format' => $this->get('format'),
577 'compression' => $this->get('compression'),
578 'appearance' => $this->get('appearance'),
579 'password' => $this->get('password'),
580 'meta_title' => $this->get('meta_title'),
581 'meta_subject' => $this->get('meta_subject'),
582 'meta_author' => $this->get('meta_author'),
583 'meta_keywords' => $this->get('meta_keywords'),
584 'font' => $this->get('font'),
585 'font_size' => $this->get('font_size'),
586 'font_color' => $this->get('font_color'),
587 'line_height' => $this->get('line_height'),
588 'uid' => $this->get('uid'),
589 'dataset' => $this->get('dataset')
590 );
591
592 if ($this->get('pdf')) {
593 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
594 if (file_exists($pdf)) {
595 $settings['pdf'] = base64_encode(file_get_contents($pdf));
596 }
597 }
598
599 $model_e2pdf_api->set(array(
600 'action' => 'template/build',
601 'data' => array(
602 'settings' => $settings,
603 'pages' => $pages,
604 'fonts' => $fonts
605 ),
606 ));
607
608 $request = $model_e2pdf_api->request();
609
610 return $request;
611 }
612
613 public function get_filename() {
614 if ($this->get('name')) {
615 $name = $this->get('name');
616 } elseif ($this->get('title')) {
617 $name = $this->get('title');
618 } else {
619 $name = __('(no title)', 'e2pdf');
620 }
621 return $name;
622 }
623
624 public function flush() {
625 if ($this->get('ID')) {
626 $model_e2pdf_page = new Model_E2pdf_Page();
627 $pages = $model_e2pdf_page->get_pages($this->get('ID'));
628 foreach ($pages as $page_value) {
629 $page = new Model_E2pdf_Page();
630 $page->load($page_value['page_id'], $page_value['template_id']);
631 $page->delete();
632 }
633 }
634 }
635
636 }
637