PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.06.02
E2Pdf – Export Pdf Tool for WordPress v1.06.02
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 1.08.09 All 71 releases
e2pdf / classes / model / e2pdf-template.php

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

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