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

567 lines 18.9 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 $helper_e2pdf_sort = new Helper_E2pdf_Sort();
179 foreach ($this->get('pages') as $page_key => $page_value) {
180 $page = new Model_E2pdf_Page();
181 if (isset($page_value['ID'])) {
182 unset($page_value['ID']);
183 }
184 foreach ($page_value as $page_value_key => $page_value_value) {
185 $page->set($page_value_key, $page_value_value);
186 }
187
188 /*
189 * @since 0.01.63
190 */
191 if (!$page_value['actions']) {
192 $page_actions = array();
193 } else {
194 $page_actions = $page_value['actions'];
195 }
196 $page->set('actions', $page_actions);
197
198 $page->set('template_id', $this->get('ID'));
199 $page->set('page_id', $page_key);
200 $page->save();
201
202 if (isset($page_value['elements'])) {
203
204 $helper_e2pdf_sort->stable_uasort($page_value['elements'], "sort_by_zindex");
205
206 foreach ($page_value['elements'] as $element_key => $element_value) {
207 if (isset($element_value['ID'])) {
208 unset($element_value['ID']);
209 }
210 $element = new Model_E2pdf_Element();
211 foreach ($element_value as $element_value_key => $element_value_value) {
212 $element->set($element_value_key, $element_value_value);
213 }
214
215 if (!$element_value['properties']) {
216 $element_properties = array();
217 } else {
218 $element_properties = $element_value['properties'];
219 }
220 $element->set('properties', $element_properties);
221
222 /*
223 * @since 0.01.63
224 */
225 if (!$element_value['actions']) {
226 $element_actions = array();
227 } else {
228 $element_actions = $element_value['actions'];
229 }
230 $element->set('actions', $element_actions);
231
232 $element->set('page_id', $page->get('ID'));
233 $element->set('template_id', $this->get('ID'));
234 $element->save();
235 }
236 }
237 }
238 }
239
240 return $this->get('ID');
241 }
242
243 /**
244 * Before save template
245 */
246 public function pre_save() {
247
248 $fonts = array();
249 $model_e2pdf_font = new Model_E2pdf_Font();
250
251 $all_fonts = $model_e2pdf_font->get_fonts();
252
253 $c_font = array_search($this->get('font'), $all_fonts);
254 if ($c_font) {
255 $fonts[$c_font] = $this->get('font');
256 }
257
258 $pages = $this->get('pages');
259 foreach ($pages as $key => $page) {
260 if (!empty($page['elements'])) {
261 foreach ($page['elements'] as $element_key => $element) {
262 $tmp_fonts = $model_e2pdf_font->get_element_fonts($element, $all_fonts);
263 if (!empty($tmp_fonts)) {
264 $fonts = array_merge($fonts, $tmp_fonts);
265 }
266 }
267 }
268 }
269
270 $this->set('fonts', $fonts);
271
272 $template = array(
273 'uid' => $this->get('uid'),
274 'title' => $this->get('title'),
275 'pdf' => $this->get('pdf'),
276 'updated_at' => current_time('mysql', 1),
277 'flatten' => $this->get('flatten'),
278 'format' => $this->get('format'),
279 'compression' => $this->get('compression'),
280 'appearance' => $this->get('appearance'),
281 'width' => $this->get('width'),
282 'height' => $this->get('height'),
283 'extension' => $this->get('extension'),
284 'item' => $this->get('item'),
285 'format' => $this->get('format'),
286 'dataset_title' => $this->get('dataset_title'),
287 'button_title' => $this->get('button_title'),
288 'inline' => $this->get('inline'),
289 'auto' => $this->get('auto'),
290 'name' => $this->get('name'),
291 'password' => $this->get('password'),
292 'fonts' => serialize($this->get('fonts')),
293 'font' => $this->get('font'),
294 'font_size' => $this->get('font_size'),
295 'font_color' => $this->get('font_color'),
296 'line_height' => $this->get('line_height'),
297 'trash' => $this->get('trash'),
298 'locked' => $this->get('locked'),
299 'activated' => $this->get('activated'),
300 'author' => get_current_user_id(),
301 );
302
303 if (!$this->get('ID')) {
304 $template['created_at'] = current_time('mysql', 1);
305 }
306
307 return $template;
308 }
309
310 public function fill($dataset = false, $uid = false) {
311
312 $this->set('dataset', $dataset);
313
314 $extension = new Model_E2pdf_Extension();
315 $extension->load($this->get('extension'));
316
317 $item = $this->get('item');
318
319 $extension->set('item', $item);
320 $extension->set('dataset', $this->get('dataset'));
321
322 if ($uid) {
323 $extension->set('uid', $uid);
324 }
325
326 do_action('e2pdf_model_template_fill_pre', $this, $extension);
327
328 $action = new Model_E2pdf_Action();
329 $action->load($extension);
330
331 $pages = $this->get('pages');
332 foreach ($pages as $key => $value) {
333
334 $pages[$key] = $value = $action->process_actions($value);
335
336 if ($value) {
337 if (!empty($value['elements'])) {
338 foreach ($value['elements'] as $el_key => $el_value) {
339 if ($el_value['type'] === 'e2pdf-checkbox') {
340 //e2pdf-checkbox render
341 $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render(
342 $el_value['properties']['option'], false, $el_value
343 );
344 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
345 $el_value['value'], 'value', $el_value
346 );
347 } elseif ($el_value['type'] === 'e2pdf-radio') {
348 //e2pdf-radio render
349 $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render(
350 $el_value['properties']['option'], false, $el_value
351 );
352 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
353 $el_value['value'], false, $el_value
354 );
355 } elseif ($el_value['type'] === 'e2pdf-select') {
356 //e2pdf-select render
357 $pages[$key]['elements'][$el_key]['properties']['options'] = $extension->render(
358 $el_value['properties']['options'], false, $el_value
359 );
360 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
361 $el_value['value'], 'value', $el_value
362 );
363 } elseif ($el_value['type'] === 'e2pdf-html') {
364 //e2pdf-html render
365 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
366 $el_value['value'], 'value', $el_value
367 );
368 } elseif ($el_value['type'] === 'e2pdf-image') {
369 //e2pdf-image render
370 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
371 $el_value['value'], 'value', $el_value
372 );
373 } elseif ($el_value['type'] === 'e2pdf-signature') {
374 //e2pdf-signature render
375 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
376 $el_value['value'], 'value', $el_value
377 );
378 } else {
379 //Other e2pdf fields render
380 $pages[$key]['elements'][$el_key]['value'] = $extension->render(
381 $el_value['value'], false, $el_value
382 );
383 }
384 }
385 }
386 } else {
387 unset($pages[$key]);
388 }
389 }
390
391 $this->set('name', $extension->render($this->get('name')));
392 $this->set('password', $extension->render($this->get('password')));
393 $this->set('button_title', $extension->render($this->get('button_title')));
394 $this->set('pages', $pages);
395
396 do_action('e2pdf_model_template_fill_after', $this, $extension);
397 }
398
399 public function pre_render() {
400 $helper_e2pdf_image = new Helper_E2pdf_Image();
401 $pages = $this->get('pages');
402 foreach ($pages as $key => $page) {
403 $page = (array) $page;
404 $pages[$key] = $page;
405 if (!empty($page['elements'])) {
406 foreach ($page['elements'] as $el_key => $el_value) {
407 $el_value = (array) $el_value;
408 $pages[$key]['elements'][$el_key] = $el_value;
409 $esig = isset($el_value['properties']['esig']) && $el_value['properties']['esig'] ? true : false;
410 if ($el_value['type'] == 'e2pdf-image' || ($el_value['type'] == 'e2pdf-signature' && !$esig)) {
411 if ($image = $helper_e2pdf_image->get_image($el_value['value'])) {
412 $pages[$key]['elements'][$el_key]['value'] = $image;
413 } else {
414 $pages[$key]['elements'][$el_key]['value'] = '';
415 }
416 }
417 }
418 }
419 }
420
421 return $pages;
422 }
423
424 public function convert($pre_save, $type = false) {
425
426 $model_e2pdf_convert = new Model_E2pdf_Convert();
427 $model_e2pdf_font = new Model_E2pdf_Font();
428
429 if ($pre_save) {
430 $pages = $this->get('pages');
431 $this->template = $this->pre_save();
432 $this->set('pages', $pages);
433 $this->set('fonts', unserialize($this->get('fonts')));
434 }
435
436 $fonts = array();
437 if ($this->get('fonts')) {
438 foreach ($this->get('fonts') as $key => $value) {
439 $fonts[] = array(
440 'name' => $value,
441 'value' => $model_e2pdf_font->get_font($key)
442 );
443 }
444 }
445
446 $pages = $this->pre_render();
447
448 $settings = array(
449 'title' => $this->get_filename(),
450 'flatten' => $this->get('flatten'),
451 'format' => $this->get('format'),
452 'compression' => $this->get('compression'),
453 'appearance' => $this->get('appearance'),
454 'password' => $this->get('password'),
455 'font' => $this->get('font'),
456 'font_size' => $this->get('font_size'),
457 'font_color' => $this->get('font_color'),
458 'line_height' => $this->get('line_height'),
459 'uid' => $this->get('uid'),
460 'dataset' => $this->get('dataset'),
461 );
462
463 if ($this->get('pdf')) {
464 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
465 if (file_exists($pdf)) {
466 $settings['pdf'] = base64_encode(file_get_contents($pdf));
467 }
468 }
469
470
471 $model_e2pdf_convert->set(array(
472 'type' => $type,
473 'data' => array(
474 'settings' => $settings,
475 'pages' => $pages,
476 'fonts' => $fonts
477 ),
478 ));
479
480 return $model_e2pdf_convert->convert();
481 }
482
483 public function render($pre_save = false) {
484 $model_e2pdf_api = new Model_E2pdf_Api();
485 $model_e2pdf_font = new Model_E2pdf_Font();
486
487
488 if ($pre_save) {
489 $pages = $this->get('pages');
490 $this->template = $this->pre_save();
491 $this->set('pages', $pages);
492 $this->set('fonts', unserialize($this->get('fonts')));
493 }
494
495 $fonts = array();
496 if ($this->get('fonts')) {
497 foreach ($this->get('fonts') as $key => $value) {
498 $fonts[] = array(
499 'name' => $value,
500 'value' => $model_e2pdf_font->get_font($key)
501 );
502 }
503 }
504
505 $pages = $this->pre_render();
506
507 $settings = array(
508 'title' => $this->get_filename(),
509 'flatten' => $this->get('flatten'),
510 'format' => $this->get('format'),
511 'compression' => $this->get('compression'),
512 'appearance' => $this->get('appearance'),
513 'password' => $this->get('password'),
514 'font' => $this->get('font'),
515 'font_size' => $this->get('font_size'),
516 'font_color' => $this->get('font_color'),
517 'line_height' => $this->get('line_height'),
518 'uid' => $this->get('uid'),
519 'dataset' => $this->get('dataset')
520 );
521
522 if ($this->get('pdf')) {
523 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
524 if (file_exists($pdf)) {
525 $settings['pdf'] = base64_encode(file_get_contents($pdf));
526 }
527 }
528
529 $model_e2pdf_api->set(array(
530 'action' => 'template/build',
531 'data' => array(
532 'settings' => $settings,
533 'pages' => $pages,
534 'fonts' => $fonts
535 ),
536 ));
537
538 $request = $model_e2pdf_api->request();
539
540 return $request;
541 }
542
543 public function get_filename() {
544 if ($this->get('name')) {
545 $name = $this->get('name');
546 } elseif ($this->get('title')) {
547 $name = $this->get('title');
548 } else {
549 $name = __('(no title)', 'e2pdf');
550 }
551 return $name;
552 }
553
554 public function flush() {
555 if ($this->get('ID')) {
556 $model_e2pdf_page = new Model_E2pdf_Page();
557 $pages = $model_e2pdf_page->get_pages($this->get('ID'));
558 foreach ($pages as $page_value) {
559 $page = new Model_E2pdf_Page();
560 $page->load($page_value['ID']);
561 $page->delete();
562 }
563 }
564 }
565
566 }
567