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

538 lines 17.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 $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 $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render($el_value['properties']['option']);
341 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-checkbox', $el_value['properties']['option']);
342 } elseif ($el_value['type'] === 'e2pdf-radio') {
343 $pages[$key]['elements'][$el_key]['properties']['option'] = $extension->render($el_value['properties']['option']);
344 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
345 } elseif ($el_value['type'] === 'e2pdf-select') {
346 $pages[$key]['elements'][$el_key]['properties']['options'] = $extension->render($el_value['properties']['options']);
347 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
348 } elseif ($el_value['type'] === 'e2pdf-html') {
349 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-html');
350 } elseif ($el_value['type'] === 'e2pdf-image') {
351 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value'], 'value', 'e2pdf-image');
352 } else {
353 $pages[$key]['elements'][$el_key]['value'] = $extension->render($el_value['value']);
354 }
355 }
356 }
357 } else {
358 unset($pages[$key]);
359 }
360 }
361
362 $this->set('name', $extension->render($this->get('name')));
363 $this->set('password', $extension->render($this->get('password')));
364 $this->set('button_title', $extension->render($this->get('button_title')));
365 $this->set('pages', $pages);
366
367 do_action('e2pdf_model_template_fill_after', $this, $extension);
368 }
369
370 public function pre_render() {
371 $helper_e2pdf_image = new Helper_E2pdf_Image();
372 $pages = $this->get('pages');
373 foreach ($pages as $key => $page) {
374 $page = (array) $page;
375 $pages[$key] = $page;
376 if (!empty($page['elements'])) {
377 foreach ($page['elements'] as $el_key => $el_value) {
378
379 $el_value = (array) $el_value;
380 $pages[$key]['elements'][$el_key] = $el_value;
381 if ($el_value['type'] == 'e2pdf-image') {
382 if ($image = $helper_e2pdf_image->get_image($el_value['value'])) {
383 $pages[$key]['elements'][$el_key]['value'] = $image;
384 } else {
385 $pages[$key]['elements'][$el_key]['value'] = '';
386 }
387 }
388 }
389 }
390 }
391
392 return $pages;
393 }
394
395 public function convert($pre_save, $type = false) {
396
397 $model_e2pdf_convert = new Model_E2pdf_Convert();
398 $model_e2pdf_font = new Model_E2pdf_Font();
399
400 if ($pre_save) {
401 $pages = $this->get('pages');
402 $this->template = $this->pre_save();
403 $this->set('pages', $pages);
404 $this->set('fonts', unserialize($this->get('fonts')));
405 }
406
407 $fonts = array();
408 if ($this->get('fonts')) {
409 foreach ($this->get('fonts') as $key => $value) {
410 $fonts[] = array(
411 'name' => $value,
412 'value' => $model_e2pdf_font->get_font($key)
413 );
414 }
415 }
416
417 $pages = $this->pre_render();
418
419 $settings = array(
420 'title' => $this->get_filename(),
421 'flatten' => $this->get('flatten'),
422 'format' => $this->get('format'),
423 'compression' => $this->get('compression'),
424 'appearance' => $this->get('appearance'),
425 'password' => $this->get('password'),
426 'font' => $this->get('font'),
427 'font_size' => $this->get('font_size'),
428 'font_color' => $this->get('font_color'),
429 'line_height' => $this->get('line_height'),
430 'uid' => $this->get('uid'),
431 'dataset' => $this->get('dataset'),
432 );
433
434 if ($this->get('pdf')) {
435 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
436 if (file_exists($pdf)) {
437 $settings['pdf'] = base64_encode(file_get_contents($pdf));
438 }
439 }
440
441
442 $model_e2pdf_convert->set(array(
443 'type' => $type,
444 'data' => array(
445 'settings' => $settings,
446 'pages' => $pages,
447 'fonts' => $fonts
448 ),
449 ));
450
451 return $model_e2pdf_convert->convert();
452 }
453
454 public function render($pre_save = false) {
455 $model_e2pdf_api = new Model_E2pdf_Api();
456 $model_e2pdf_font = new Model_E2pdf_Font();
457
458
459 if ($pre_save) {
460 $pages = $this->get('pages');
461 $this->template = $this->pre_save();
462 $this->set('pages', $pages);
463 $this->set('fonts', unserialize($this->get('fonts')));
464 }
465
466 $fonts = array();
467 if ($this->get('fonts')) {
468 foreach ($this->get('fonts') as $key => $value) {
469 $fonts[] = array(
470 'name' => $value,
471 'value' => $model_e2pdf_font->get_font($key)
472 );
473 }
474 }
475
476 $pages = $this->pre_render();
477
478 $settings = array(
479 'title' => $this->get_filename(),
480 'flatten' => $this->get('flatten'),
481 'format' => $this->get('format'),
482 'compression' => $this->get('compression'),
483 'appearance' => $this->get('appearance'),
484 'password' => $this->get('password'),
485 'font' => $this->get('font'),
486 'font_size' => $this->get('font_size'),
487 'font_color' => $this->get('font_color'),
488 'line_height' => $this->get('line_height'),
489 'uid' => $this->get('uid'),
490 'dataset' => $this->get('dataset')
491 );
492
493
494 if ($this->get('pdf')) {
495 $pdf = $this->helper->get('pdf_dir') . $this->get('pdf') . "/" . $this->get('pdf') . ".pdf";
496 if (file_exists($pdf)) {
497 $settings['pdf'] = base64_encode(file_get_contents($pdf));
498 }
499 }
500
501
502 $model_e2pdf_api->set(array(
503 'action' => 'template/build',
504 'data' => array(
505 'settings' => $settings,
506 'pages' => $pages,
507 'fonts' => $fonts
508 ),
509 ));
510
511 return $model_e2pdf_api->request();
512 }
513
514 public function get_filename() {
515 if ($this->get('name')) {
516 $name = $this->get('name');
517 } elseif ($this->get('title')) {
518 $name = $this->get('title');
519 } else {
520 $name = __('(no title)', 'e2pdf');
521 }
522 return $name;
523 }
524
525 public function flush() {
526 if ($this->get('ID')) {
527 $model_e2pdf_page = new Model_E2pdf_Page();
528 $pages = $model_e2pdf_page->get_pages($this->get('ID'));
529 foreach ($pages as $page_value) {
530 $page = new Model_E2pdf_Page();
531 $page->load($page_value['ID']);
532 $page->delete();
533 }
534 }
535 }
536
537 }
538