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 / model / e2pdf-template.php

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

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