PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.02.02
E2Pdf – Export Pdf Tool for WordPress v1.02.02
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.02.02, at classes/model/e2pdf-template.php

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