PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.04.07
E2Pdf – Export Pdf Tool for WordPress v1.04.07
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
e2pdf / classes / model / e2pdf-template.php

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

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