PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
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
← All changes | classes/controller/e2pdf-templates.php +1926 -1318 1.05.031.32.49 View file →
@@ -1,11 +1,10 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Templates Controller
5 - *
4 + * E2Pdf Templates Controller
6 5 * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
6 + * @license GPLv3
8 7 * @version 1
9 8 * @link https://e2pdf.com
10 9 * @since 0.00.01
11 10 */
@@ -18,36 +17,29 @@
18 17 /**
19 18 * @url admin.php?page=e2pdf-templates
20 19 */
21 20 public function index_action() {
22 -
23 - if ($this->post->get()) {
24 - if ($this->post->get('screenoptionnonce')) {
21 + if ($this->post->get('screenoptionnonce')) {
22 + if (wp_verify_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce')) {
25 23 $this->screen_action();
26 24 } else {
27 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
28 - if (($this->post->get('action') == '-1' && $this->post->get('action2') == '-1')) {
25 + wp_die($this->message('wp_verify_nonce_error'));
26 + }
27 + } elseif ($this->post->get('_wpnonce')) {
28 + if (wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
29 + if ($this->post->get('action') == '-1' && $this->post->get('action2') == '-1') {
30 + $redirect_url = [
31 + 'page' => 'e2pdf-templates',
32 + 'status' => $this->get->get('status'),
33 + 'orderby' => $this->get->get('orderby'),
34 + 'order' => $this->get->get('order'),
35 + ];
29 36 if ($this->post->get('s')) {
30 - $location = $this->helper->get_url(
31 - array(
32 - 'page' => 'e2pdf-templates',
33 - 'status' => $this->get->get('status'),
34 - 'orderby' => $this->get->get('orderby'),
35 - 'order' => $this->get->get('order'),
36 - 's' => $this->post->get('s')
37 - )
38 - );
39 - } else {
40 - $location = $this->helper->get_url(
41 - array(
42 - 'page' => 'e2pdf-templates',
43 - 'status' => $this->get->get('status'),
44 - 'orderby' => $this->get->get('orderby'),
45 - 'order' => $this->get->get('order'),
46 - )
47 - );
37 + $redirect_url['s'] = $this->post->get('s');
48 38 }
49 - $this->redirect($location);
39 + $this->redirect(
40 + $this->helper->get_url($redirect_url)
41 + );
50 42 } else {
51 43 $action = $this->post->get('action') != '-1' ? $this->post->get('action') : $this->post->get('action2');
52 44 if ($this->post->get('post')) {
53 45 if ($action == 'trash') {
@@ -53,22 +45,35 @@
53 45 if ($action == 'trash') {
54 46 foreach ($this->post->get('post') as $key => $value) {
55 47 $this->trash_template($value);
56 48 }
57 - $this->add_notification('update', __('Templates moved to trash', 'e2pdf'));
49 + $this->add_notification('update', sprintf(__('Templates Trashed: %d', 'e2pdf'), count($this->post->get('post'))));
50 + } elseif ($action == 'activate') {
51 + foreach ($this->post->get('post') as $key => $value) {
52 + $this->activate_template($value);
53 + }
54 + $this->add_notification('update', sprintf(__('Templates Activated: %d', 'e2pdf'), count($this->post->get('post'))));
55 + } elseif ($action == 'deactivate') {
56 + foreach ($this->post->get('post') as $key => $value) {
57 + $this->deactivate_template($value);
58 + }
59 + $this->add_notification('update', sprintf(__('Templates Deactivated: %d', 'e2pdf'), count($this->post->get('post'))));
58 60 } elseif ($action == 'restore') {
59 61 foreach ($this->post->get('post') as $key => $value) {
60 62 $this->restore_template($value);
61 63 }
62 - $this->add_notification('update', __('Templates restored', 'e2pdf'));
64 + $this->add_notification('update', sprintf(__('Templates Restored: %d', 'e2pdf'), count($this->post->get('post'))));
63 65 } elseif ($action == 'delete') {
64 66 foreach ($this->post->get('post') as $key => $value) {
65 67 $this->delete_template($value);
66 68 }
67 - $this->add_notification('update', __('Templates deleted', 'e2pdf'));
69 + $this->add_notification('update', sprintf(__('Templates Deleted: %d', 'e2pdf'), count($this->post->get('post'))));
68 70 }
71 + $this->helper->load('license')->load();
69 72 }
70 73 }
74 + } else {
75 + wp_die($this->message('wp_verify_nonce_error'));
71 76 }
72 77 }
73 78 }
74 79
@@ -73,34 +78,90 @@
73 78 }
74 79
75 80 /**
76 81 * @url admin.php?page=e2pdf-templates&action=view&id=$id
77 - *
78 82 * @return file
79 83 */
80 84 public function view_action() {
81 -
82 85 if ($this->get->get('id')) {
83 86 $template = new Model_E2pdf_Template();
84 -
85 87 if ($template->load($this->get->get('id'))) {
86 -
87 88 $pages = $template->get('pages');
88 -
89 - foreach ($pages as $page_key => $page_value) {
90 -
91 - if (isset($page_value['elements'])) {
92 -
93 - foreach ($page_value['elements'] as $element_key => $element_value) {
94 -
95 - if (isset($element_value['type']) && $element_value['type'] == 'e2pdf-image') {
96 -
97 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
98 - $pages[$page_key]['elements'][$element_key]['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
99 -
100 - if (isset($pages[$page_key]['elements'][$element_key]['properties']['dimension'])) {
101 - unset($pages[$page_key]['elements'][$element_key]['properties']['dimension']);
102 - }
89 + foreach ($pages as $page_key => $page) {
90 + if (!empty($page['elements'])) {
91 + foreach ($page['elements'] as $element_key => $element) {
92 + if (isset($element['type'])) {
93 + switch ($element['type']) {
94 + case 'e2pdf-image':
95 + if (isset($element['properties']['quality']) && $element['properties']['quality']) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
96 + } else {
97 + $element['properties']['quality'] = $template->get('optimization');
98 + $pages[$page_key]['elements'][$element_key]['properties']['quality'] = $template->get('optimization');
99 + }
100 + if ($image = $this->helper->load('image')->get_image($element['value'], null, $element)) {
101 + $pages[$page_key]['elements'][$element_key]['value'] = $image;
102 + } else {
103 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/upload.svg');
104 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
105 + }
106 + break;
107 + case 'e2pdf-signature':
108 + $esig = isset($element['properties']['esig']) && $element['properties']['esig'] ? true : false;
109 + if (!$esig) {
110 + if ($image = $this->helper->load('image')->get_image($element['value'])) {
111 + $pages[$page_key]['elements'][$element_key]['value'] = $image;
112 + } else {
113 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/signature.svg');
114 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
115 + }
116 + }
117 + break;
118 + case 'e2pdf-qrcode':
119 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
120 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/qrcode.svg');
121 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
122 + break;
123 + case 'e2pdf-barcode':
124 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
125 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/barcode.svg');
126 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
127 + break;
128 + case 'e2pdf-graph':
129 + $pages[$page_key]['elements'][$element_key]['type'] = 'e2pdf-image';
130 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/graph.svg');
131 + $pages[$page_key]['elements'][$element_key]['properties']['preview'] = '1';
132 + break;
133 + case 'e2pdf-html':
134 + if (isset($pages[$page_key]['elements'][$element_key]['properties']['hide_page_if_empty'])) {
135 + unset($pages[$page_key]['elements'][$element_key]['properties']['hide_page_if_empty']);
136 + }
137 + if (isset($pages[$page_key]['elements'][$element_key]['properties']['hide_if_empty'])) {
138 + unset($pages[$page_key]['elements'][$element_key]['properties']['hide_if_empty']);
139 + }
140 + if (isset($element['properties']['nl2br']) && $element['properties']['nl2br']) {
141 + $element['value'] = nl2br($element['value']);
142 + }
143 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
144 + $element['value'] = $this->helper->load('properties')->html_worker(
145 + $element['value']
146 + );
147 + }
148 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('filter')->filter_html_tags(
149 + $element['value']
150 + );
151 + break;
152 + case 'e2pdf-page-number':
153 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
154 + $element['value'] = $this->helper->load('properties')->html_worker(
155 + $element['value']
156 + );
157 + }
158 + $pages[$page_key]['elements'][$element_key]['value'] = $this->helper->load('filter')->filter_html_tags(
159 + $element['value']
160 + );
161 + break;
162 + default:
163 + break;
103 164 }
104 165 }
105 166 }
106 167 }
@@ -112,23 +173,23 @@
112 173 if (isset($request['error'])) {
113 174 $this->add_notification('error', $request['error']);
114 175 $this->render('blocks', 'notifications');
115 176 } else {
116 - $filename = $template->get_filename();
117 - $file = $request['file'];
118 - $this->download_response('pdf', $file, $filename);
177 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline');
178 + exit;
119 179 }
120 180 } else {
121 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
181 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
122 182 $this->render('blocks', 'notifications');
123 183 }
124 184 } else {
125 - $location = $this->helper->get_url(
126 - array(
127 - 'page' => 'e2pdf',
185 + $this->redirect(
186 + $this->helper->get_url(
187 + [
188 + 'page' => 'e2pdf',
189 + ]
128 190 )
129 191 );
130 - $this->redirect($location);
131 192 }
132 193 }
133 194
134 195 /**
@@ -134,15 +195,12 @@
134 195 /**
135 196 * @url admin.php?page=e2pdf-templates&action=preview
136 197 */
137 198 public function preview_action() {
138 -
139 199 $preview = array();
140 -
141 200 if ($this->post->get('preview')) {
142 201 $preview = json_decode(stripslashes($this->post->get('preview')), true);
143 202 }
144 -
145 203 if (empty($preview)) {
146 204 $this->close_tab_response();
147 205 } else {
148 206 $data = $preview;
@@ -147,162 +205,146 @@
147 205 } else {
148 206 $data = $preview;
149 207 $pages = $preview['pages'];
150 208 unset($preview['pages']);
151 -
152 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
153 -
154 - $template = new Model_E2pdf_Template();
155 - foreach ($data as $key => $value) {
156 - $template->set($key, $value);
157 - }
158 -
159 - $preview_pages = array();
160 - foreach ($pages as $page_key => $page_value) {
161 - $page = new Model_E2pdf_Page();
162 - foreach ($page_value as $page_value_key => $page_value_value) {
163 - $page->set($page_value_key, $page_value_value);
209 + if (wp_verify_nonce(isset($preview['_wpnonce']) ? $preview['_wpnonce'] : '', 'e2pdf_templates')) {
210 + $template = new Model_E2pdf_Template();
211 + foreach ($data as $key => $value) {
212 + $template->set($key, $value);
164 213 }
165 - $page->set('page_id', $page_key);
214 + $template->set('uid', $template->get('uid', true));
215 + $template->set('activated', $template->get('activated', true));
166 216
167 - $elements = array();
217 + $preview_pages = array();
218 + foreach ($pages as $page_key => $page) {
219 + $new_page = new Model_E2pdf_Page();
220 + foreach ($page as $page_set_key => $page_set_value) {
221 + $new_page->set($page_set_key, $page_set_value);
222 + }
223 + $new_page->set('page_id', $page_key);
168 224
169 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
170 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
171 -
172 - foreach ($page_value['elements'] as $element_key => $element_value) {
173 - $element = new Model_E2pdf_Element();
174 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
175 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
176 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
177 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
178 - if (isset($element_value['properties']['dimension'])) {
179 - unset($element_value['properties']['dimension']);
225 + $elements = array();
226 + foreach ($page['elements'] as $element_key => $element) {
227 + if (isset($element['type'])) {
228 + switch ($element['type']) {
229 + case 'e2pdf-image':
230 + if (isset($element['properties']['quality']) && $element['properties']['quality']) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
231 + } else {
232 + $element['properties']['quality'] = $template->get('optimization');
233 + $pages[$page_key]['elements'][$element_key]['properties']['quality'] = $template->get('optimization');
234 + }
235 + if ($image = $this->helper->load('image')->get_image($element['value'], null, $element)) {
236 + $element['value'] = $image;
237 + } else {
238 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/upload.svg');
239 + $element['properties']['preview'] = '1';
240 + }
241 + break;
242 + case 'e2pdf-signature':
243 + $esig = isset($element['properties']['esig']) && $element['properties']['esig'] ? true : false;
244 + if (!$esig) {
245 + if ($image = $this->helper->load('image')->get_image($element['value'])) {
246 + $element['value'] = $image;
247 + } else {
248 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/signature.svg');
249 + $element['properties']['preview'] = '1';
250 + }
251 + }
252 + break;
253 + case 'e2pdf-qrcode':
254 + $element['type'] = 'e2pdf-image';
255 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/qrcode.svg');
256 + $element['properties']['preview'] = '1';
257 + break;
258 + case 'e2pdf-barcode':
259 + $element['type'] = 'e2pdf-image';
260 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/barcode.svg');
261 + $element['properties']['preview'] = '1';
262 + break;
263 + case 'e2pdf-graph':
264 + $element['type'] = 'e2pdf-image';
265 + $element['value'] = $this->helper->load('image')->get_image($this->helper->get('plugin_dir') . 'img/graph.svg');
266 + $element['properties']['preview'] = '1';
267 + break;
268 + case 'e2pdf-html':
269 + if (isset($element['properties']['hide_page_if_empty'])) {
270 + unset($element['properties']['hide_page_if_empty']);
271 + }
272 + if (isset($element['properties']['hide_if_empty'])) {
273 + unset($element['properties']['hide_if_empty']);
274 + }
275 + if (isset($element['properties']['nl2br']) && $element['properties']['nl2br']) {
276 + $element['value'] = nl2br($element['value']);
277 + }
278 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
279 + $element['value'] = $this->helper->load('properties')->html_worker(
280 + $element['value']
281 + );
282 + }
283 + $element['value'] = $this->helper->load('filter')->filter_html_tags(
284 + $element['value']
285 + );
286 + break;
287 + case 'e2pdf-page-number':
288 + $element['value'] = str_replace(array('[e2pdf-page-number]', '[e2pdf-page-total]'), array('e2pdf-page-number', 'e2pdf-page-total'), $element['value']);
289 + if (isset($element['properties']['html_worker']) && $element['properties']['html_worker']) {
290 + $element['value'] = $this->helper->load('properties')->html_worker(
291 + $element['value']
292 + );
293 + }
294 + $element['value'] = $this->helper->load('filter')->filter_html_tags(
295 + $element['value']
296 + );
297 + break;
298 + default:
299 + break;
180 300 }
181 301 }
182 - }
183 302
184 - foreach ($element_value as $element_value_key => $element_value_value) {
185 - $element->set($element_value_key, $element_value_value);
186 - }
303 + $new_element = new Model_E2pdf_Element();
304 + foreach ($element as $element_set_key => $element_set_value) {
305 + $new_element->set($element_set_key, $element_set_value);
306 + }
187 307
188 - if (!$element_value['properties']) {
189 - $element_properties = array();
190 - } else {
191 - $element_properties = $element_value['properties'];
308 + if (isset($element['properties'])) {
309 + $element_properties = $element['properties'];
310 + } else {
311 + $element_properties = array();
312 + }
313 + $new_element->set('properties', $element_properties);
314 + $elements[] = $new_element->get_element();
192 315 }
193 316
194 - $element->set('properties', $element_properties);
195 - $elements[] = $element->get_element();
317 + $new_page->set('elements', $elements);
318 + $preview_pages[] = $new_page->get_page();
196 319 }
197 320
198 - $page->set('elements', $elements);
199 - $preview_pages[] = $page->get_page();
200 - }
321 + $template->set('pages', $preview_pages);
322 + $template->load_fonts();
201 323
202 - $template->set('pages', $preview_pages);
203 - $request = $template->render(true);
204 -
205 - if (isset($request['error'])) {
206 - $this->add_notification('error', $request['error']);
207 - $this->render('blocks', 'notifications');
208 - } else {
209 - $filename = $template->get_filename();
210 - $file = $request['file'];
211 - $this->download_response('pdf', $file, $filename);
212 - }
213 - }
214 - }
215 -
216 - /**
217 - * @url admin.php?page=e2pdf-templates&action=convert&type=php
218 - */
219 - public function convert_action() {
220 - $preview = array();
221 -
222 - if ($this->post->get('preview')) {
223 - $preview = json_decode(stripslashes($this->post->get('preview')), true);
224 - }
225 -
226 - if (empty($preview)) {
227 - $this->close_tab_response();
228 - } else {
229 - $data = $preview;
230 - $pages = $preview['pages'];
231 - unset($preview['pages']);
232 -
233 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
234 -
235 - $template = new Model_E2pdf_Template();
236 - foreach ($data as $key => $value) {
237 - $template->set($key, $value);
238 - }
239 -
240 - $preview_pages = array();
241 - foreach ($pages as $page_key => $page_value) {
242 - $page = new Model_E2pdf_Page();
243 - foreach ($page_value as $page_value_key => $page_value_value) {
244 - $page->set($page_value_key, $page_value_value);
245 - }
246 - $page->set('page_id', $page_key);
247 -
248 - $elements = array();
249 -
250 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
251 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
252 -
253 - foreach ($page_value['elements'] as $element_key => $element_value) {
254 - $element = new Model_E2pdf_Element();
255 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
256 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
257 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
258 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
259 - if (isset($element_value['properties']['dimension'])) {
260 - unset($element_value['properties']['dimension']);
261 - }
262 - }
324 + $type = isset($_GET['type']) ? sanitize_text_field(wp_unslash($_GET['type'])) : false;
325 + if ($type == 'php') {
326 + $request = $template->render('php');
327 + if (isset($request['error'])) {
328 + $this->add_notification('error', $request['error']);
329 + $this->render('blocks', 'notifications');
330 + } else {
331 + $this->download_response('php', $request['file'], 'template');
332 + exit;
263 333 }
264 -
265 - foreach ($element_value as $element_value_key => $element_value_value) {
266 - $element->set($element_value_key, $element_value_value);
267 - }
268 -
269 - if (!$element_value['properties']) {
270 - $element_properties = array();
334 + } else {
335 + $request = $template->render();
336 + if (isset($request['error'])) {
337 + $this->add_notification('error', $request['error']);
338 + $this->render('blocks', 'notifications');
271 339 } else {
272 - $element_properties = $element_value['properties'];
340 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline', false, true);
341 + exit;
273 342 }
274 -
275 - $element->set('properties', $element_properties);
276 - $elements[] = $element->get_element();
277 343 }
278 -
279 - $page->set('elements', $elements);
280 - $preview_pages[] = $page->get_page();
281 - }
282 -
283 - $template->set('pages', $preview_pages);
284 -
285 - $allowed_types = array(
286 - 'php'
287 - );
288 -
289 - if (!in_array($this->get->get('type'), $allowed_types)) {
290 - $type = 'php';
291 344 } else {
292 - $type = $this->get->get('type');
345 + wp_die($this->message('wp_verify_nonce_error'));
293 346 }
294 -
295 - $request = $template->convert(true, $type);
296 -
297 - if (isset($request['error'])) {
298 - $this->add_notification('error', $request['error']);
299 - $this->render('blocks', 'notifications');
300 - } else {
301 - $filename = 'template';
302 - $file = $request['file'];
303 - $this->download_response($type, $file, $filename);
304 - }
305 347 }
306 348 }
307 349
308 350 /**
@@ -308,14 +350,12 @@
308 350 /**
309 351 * @url admin.php?page=e2pdf-templates&action=create
310 352 */
311 353 public function create_action() {
312 -
313 354 $template = new Model_E2pdf_Template();
314 355 $this->load_metaboxes();
315 356 $this->load_scripts();
316 357 $this->load_styles();
317 -
318 358 $this->view('license', $this->helper->get('license'));
319 359 $this->view('template', $template);
320 360 }
321 361
@@ -324,9 +364,17 @@
324 364 */
325 365 public function edit_action() {
326 366 if ($this->get->get('id')) {
327 367 $template = new Model_E2pdf_Template();
328 - if ($template->load($this->get->get('id'))) {
368 + $revision_id = (int) $this->get->get('revision_id');
369 + if ($template->load($this->get->get('id'), true, $revision_id)) {
370 + if (is_array($this->helper->get('license')->get('activated_templates'))) {
371 + if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
372 + $template->deactivate();
373 + } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
374 + $template->activate();
375 + }
376 + }
329 377 $this->view('license', $this->helper->get('license'));
330 378 $this->view('template', $template);
331 379 $this->load_metaboxes();
332 380 $this->load_scripts();
@@ -331,18 +379,19 @@
331 379 $this->load_metaboxes();
332 380 $this->load_scripts();
333 381 $this->load_styles($template->get('extension'));
334 382 } else {
335 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
383 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
336 384 $this->render('blocks', 'notifications');
337 385 }
338 386 } else {
339 - $location = $this->helper->get_url(
340 - array(
341 - 'page' => 'e2pdf-templates',
387 + $this->redirect(
388 + $this->helper->get_url(
389 + [
390 + 'page' => 'e2pdf-templates',
391 + ]
342 392 )
343 393 );
344 - $this->redirect($location);
345 394 }
346 395 }
347 396
348 397 /**
@@ -348,23 +397,29 @@
348 397 /**
349 398 * @url admin.php?page=e2pdf-templates&action=trash&id=$id
350 399 */
351 400 public function trash_action() {
352 -
353 - if ($this->get->get('id')) {
354 - $this->trash_template($this->get->get('id'));
355 - $this->add_notification('update', __('Template moved to trash', 'e2pdf'));
401 + $notification = '';
402 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
403 + if ($this->get->get('id')) {
404 + $this->trash_template($this->get->get('id'));
405 + $notification = $this->add_notification('update', __('Template Trashed', 'e2pdf'));
406 + }
407 + } else {
408 + wp_die($this->message('wp_verify_nonce_error'));
356 409 }
357 - $location = $this->helper->get_url(
358 - array(
359 - 'page' => 'e2pdf-templates',
360 - 'status' => $this->get->get('status'),
361 - 'orderby' => $this->get->get('orderby'),
362 - 'order' => $this->get->get('order'),
363 - 's' => $this->get->get('s'),
410 + $this->redirect(
411 + $this->helper->get_url(
412 + [
413 + 'page' => 'e2pdf-templates',
414 + 'status' => $this->get->get('status'),
415 + 'orderby' => $this->get->get('orderby'),
416 + 'order' => $this->get->get('order'),
417 + 's' => $this->get->get('s'),
418 + 'notification' => $notification,
419 + ]
364 420 )
365 421 );
366 - $this->redirect($location);
367 422 }
368 423
369 424 /**
370 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
@@ -369,24 +424,29 @@
369 424 /**
370 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
371 426 */
372 427 public function restore_action() {
373 -
374 - if ($this->get->get('id')) {
375 - $this->restore_template($this->get->get('id'));
376 - $this->add_notification('update', __('Template restored', 'e2pdf'));
428 + $notification = '';
429 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
430 + if ($this->get->get('id')) {
431 + $this->restore_template($this->get->get('id'));
432 + $notification = $this->add_notification('update', __('Template Restored', 'e2pdf'));
433 + }
434 + } else {
435 + wp_die($this->message('wp_verify_nonce_error'));
377 436 }
378 -
379 - $location = $this->helper->get_url(
380 - array(
381 - 'page' => 'e2pdf-templates',
382 - 'status' => $this->get->get('status'),
383 - 'orderby' => $this->get->get('orderby'),
384 - 'order' => $this->get->get('order'),
385 - 's' => $this->get->get('s'),
437 + $this->redirect(
438 + $this->helper->get_url(
439 + [
440 + 'page' => 'e2pdf-templates',
441 + 'status' => $this->get->get('status'),
442 + 'orderby' => $this->get->get('orderby'),
443 + 'order' => $this->get->get('order'),
444 + 's' => $this->get->get('s'),
445 + 'notification' => $notification,
446 + ]
386 447 )
387 448 );
388 - $this->redirect($location);
389 449 }
390 450
391 451 /**
392 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
@@ -391,24 +451,30 @@
391 451 /**
392 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
393 453 */
394 454 public function delete_action() {
395 -
396 - if ($this->get->get('id')) {
397 - $this->delete_template($this->get->get('id'));
398 - $this->add_notification('update', __('Template deleted', 'e2pdf'));
455 + $notification = '';
456 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
457 + if ($this->get->get('id')) {
458 + $this->delete_template($this->get->get('id'));
459 + $notification = $this->add_notification('update', __('Template Deleted', 'e2pdf'));
460 + }
461 + } else {
462 + wp_die($this->message('wp_verify_nonce_error'));
399 463 }
400 464
401 - $location = $this->helper->get_url(
402 - array(
403 - 'page' => 'e2pdf-templates',
404 - 'status' => $this->get->get('status'),
405 - 'orderby' => $this->get->get('orderby'),
406 - 'order' => $this->get->get('order'),
407 - 's' => $this->get->get('s'),
465 + $this->redirect(
466 + $this->helper->get_url(
467 + [
468 + 'page' => 'e2pdf-templates',
469 + 'status' => $this->get->get('status'),
470 + 'orderby' => $this->get->get('orderby'),
471 + 'order' => $this->get->get('order'),
472 + 's' => $this->get->get('s'),
473 + 'notification' => $notification,
474 + ]
408 475 )
409 476 );
410 - $this->redirect($location);
411 477 }
412 478
413 479 /**
414 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
@@ -413,23 +479,29 @@
413 479 /**
414 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
415 481 */
416 482 public function duplicate_action() {
417 -
418 - if ($this->get->get('id')) {
419 - $this->duplicate_template($this->get->get('id'));
420 - $this->add_notification('update', __('Template copy created', 'e2pdf'));
483 + $notification = '';
484 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
485 + if ($this->get->get('id')) {
486 + $this->duplicate_template($this->get->get('id'));
487 + $notification = $this->add_notification('update', __('Template Duplicated', 'e2pdf'));
488 + }
489 + } else {
490 + wp_die($this->message('wp_verify_nonce_error'));
421 491 }
422 - $location = $this->helper->get_url(
423 - array(
424 - 'page' => 'e2pdf-templates',
425 - 'status' => $this->get->get('status'),
426 - 'orderby' => $this->get->get('orderby'),
427 - 'order' => $this->get->get('order'),
428 - 's' => $this->get->get('s'),
492 + $this->redirect(
493 + $this->helper->get_url(
494 + [
495 + 'page' => 'e2pdf-templates',
496 + 'status' => $this->get->get('status'),
497 + 'orderby' => $this->get->get('orderby'),
498 + 'order' => $this->get->get('order'),
499 + 's' => $this->get->get('s'),
500 + 'notification' => $notification,
501 + ]
429 502 )
430 503 );
431 - $this->redirect($location);
432 504 }
433 505
434 506 /**
435 507 * @url admin.php?page=e2pdf-templates&action=import
@@ -434,218 +506,430 @@
434 506 /**
435 507 * @url admin.php?page=e2pdf-templates&action=import
436 508 */
437 509 public function import_action() {
510 + if ($this->post->get('_wpnonce')) {
438 511
439 - if ($this->post->get()) {
512 + if (!wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
513 + wp_die($this->message('wp_verify_nonce_error'));
514 + }
440 515
441 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
442 -
443 - $errors = array();
444 -
445 - $allowed_ext = array(
446 - 'xml'
447 - );
448 -
449 - $import = $this->files->get('template');
450 -
451 - $name = $import['name'];
452 - $tmp = $import['tmp_name'];
453 -
454 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
455 -
456 - if (!$tmp) {
457 - $this->add_notification('error', __('Please choose template to upload', 'e2pdf'));
458 - } else if ($import['error']) {
459 - $this->add_notification('error', $import['error']);
460 - } elseif (!in_array($ext, $allowed_ext)) {
461 - $this->add_notification('error', __('Incorrect file extension', 'e2pdf'));
462 - } elseif ($import['type'] != 'text/xml') {
463 - $this->add_notification('error', __('Incompatible type', 'e2pdf'));
516 + $file = $this->helper->load('files')->upload($this->files->get('template'), ['xml'], ['text/xml', 'application/xml']);
517 + if (isset($file['error'])) {
518 + $this->add_notification('error', $file['error']);
464 519 } else {
465 -
520 + $errors = [];
466 521 $options = $this->post->get('options');
467 -
468 - $xml = simplexml_load_file($import['tmp_name'], "SimpleXMLElement", LIBXML_PARSEHUGE);
469 -
470 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
471 -
472 - foreach ($pages as $page_key => $page) {
473 - if (isset($page['elements']) && !empty($page['elements'])) {
474 - foreach ($page['elements'] as $element_key => $element) {
475 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
476 - if ($options['images']) {
477 - $image = base64_decode($element['base64']);
478 - $file_name = basename($element['value']);
479 - $upload_file = wp_upload_bits($file_name, null, $image);
480 - if (!$upload_file['error']) {
481 - $wp_filetype = wp_check_filetype($file_name, null);
482 - $attachment = array(
483 - 'post_mime_type' => $wp_filetype['type'],
484 - 'post_parent' => 0,
485 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
486 - 'post_content' => '',
487 - 'post_status' => 'inherit'
488 - );
489 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
490 - if (!is_wp_error($attachment_id)) {
491 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
492 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
493 - wp_update_attachment_metadata($attachment_id, $attachment_data);
494 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
522 + $xml = simplexml_load_file($file['tmp_name'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
523 + if (!isset($xml->template->pages)) {
524 + $this->add_notification('error', __('The file is not a valid E2Pdf Template', 'e2pdf'));
525 + } else {
526 + $pages = $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->pages));
527 + if (is_array($pages)) {
528 + foreach ($pages as $page_key => $page) {
529 + if (isset($page['elements']) && !empty($page['elements'])) {
530 + foreach ($page['elements'] as $element_key => $element) {
531 + if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
532 + if ($options['images']) {
533 + $image = base64_decode($element['base64']);
534 + $file_name = basename($element['value']);
535 + $upload_file = wp_upload_bits($file_name, null, $image);
536 + if (!$upload_file['error']) {
537 + $wp_filetype = wp_check_filetype($file_name, null);
538 + $attachment = array(
539 + 'post_mime_type' => $wp_filetype['type'],
540 + 'post_parent' => 0,
541 + 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
542 + 'post_content' => '',
543 + 'post_status' => 'inherit',
544 + );
545 + $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
546 + if (!is_wp_error($attachment_id)) {
547 + require_once ABSPATH . 'wp-admin/includes/image.php';
548 + $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
549 + wp_update_attachment_metadata($attachment_id, $attachment_data);
550 + $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
551 + }
552 + }
495 553 }
554 + unset($pages[$page_key]['elements'][$element_key]['base64']);
496 555 }
497 556 }
498 - unset($pages[$page_key]['elements'][$element_key]['base64']);
499 557 }
500 558 }
501 559 }
502 - }
503 560
504 - $template = new Model_E2pdf_Template();
505 - if ($options['overwrite']) {
506 - $template->load((String) $xml->template->ID);
507 - }
561 + $template = new Model_E2pdf_Template();
562 + if ($options['overwrite']) {
563 + if ($options['overwrite'] == '1' && $options['template_id']) {
564 + $template->load((int) $options['template_id']);
565 + } elseif ($options['overwrite'] == '2' && $options['custom_template_id']) {
566 + if (!$template->load((int) $options['custom_template_id'])) {
567 + $template->set('TMP_ID', (int) $options['custom_template_id']);
568 + }
569 + } elseif ($options['overwrite'] == '3') {
570 + if (!$template->load((int) $xml->template->ID)) {
571 + $template->set('TMP_ID', (int) $xml->template->ID);
572 + }
573 + }
574 + }
575 + $template->set('title', (string) $xml->template->title);
576 + $template->set('flatten', (string) $xml->template->flatten);
577 + if (isset($xml->template->tab_order)) {
578 + $template->set('tab_order', (string) $xml->template->tab_order);
579 + }
580 + $template->set('compression', (string) $xml->template->compression);
581 + if (isset($xml->template->optimization)) {
582 + $template->set('optimization', (string) $xml->template->optimization);
583 + }
584 + $template->set('appearance', (string) $xml->template->appearance);
585 + $template->set('width', (string) $xml->template->width);
586 + $template->set('height', (string) $xml->template->height);
587 + $template->set('extension', (string) $xml->template->extension);
588 + if (isset($xml->template->item)) {
589 + $template->set('item', (string) $xml->template->item);
590 + }
591 + if (isset($xml->template->item1)) {
592 + $template->set('item1', (string) $xml->template->item1);
593 + }
594 + if (isset($xml->template->item2)) {
595 + $template->set('item2', (string) $xml->template->item2);
596 + }
508 597
509 - $template->set('title', (String) $xml->template->title);
510 - $template->set('flatten', (String) $xml->template->flatten);
511 - $template->set('format', (String) $xml->template->format);
512 - $template->set('compression', (String) $xml->template->compression);
513 - $template->set('appearance', (String) $xml->template->appearance);
514 - $template->set('width', (String) $xml->template->width);
515 - $template->set('height', (String) $xml->template->height);
516 - $template->set('extension', (String) $xml->template->extension);
598 + $fpro2pdf_backup = false;
599 + if ($xml->source) {
600 + if ((string) $xml->source == 'fpro2pdf') {
601 + $fpro2pdf_backup = true;
602 + }
603 + }
517 604
518 - if (!$options['overwrite']) {
519 - $template->set('item', "");
520 - }
605 + $extension = new Model_E2pdf_Extension();
606 + $extension->load($template->get('extension'));
607 + if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
608 + $extension->set('item', $template->get('item'));
609 + if ($template->get('item') == '-2') {
610 + $extension->set('item1', $template->get('item1'));
611 + $extension->set('item2', $template->get('item2'));
612 + }
521 613
522 - $fpro2pdf_backup = false;
614 + $updated_items = $extension->import($xml->item, $options);
615 + if ($updated_items) {
616 + if (isset($updated_items['errors'])) {
617 + $errors = array_merge($errors, $updated_items['errors']);
618 + } else {
619 + if ($template->get('item') == '-2') {
620 + if ($template->get('item1') && isset($updated_items[$template->get('item1')])) {
621 + $item1 = $updated_items[$template->get('item1')];
622 + $template->set('item1', $item1);
623 + $extension->set('item1', $item1);
624 + } else {
625 + $template->set('item1', '');
626 + $extension->set('item1', '');
627 + }
628 + if ($template->get('item2') && isset($updated_items[$template->get('item2')])) {
629 + $item2 = $updated_items[$template->get('item2')];
630 + $template->set('item2', $item2);
631 + $extension->set('item2', $item2);
632 + } else {
633 + $template->set('item2', '');
634 + $extension->set('item2', '');
635 + }
636 + } else {
637 + if (isset($updated_items[$template->get('item')])) {
638 + $item = $updated_items[$template->get('item')];
639 + $template->set('item', $item);
640 + $extension->set('item', $item);
641 + } else {
642 + $template->set('item', '');
643 + $extension->set('item', '');
644 + }
645 + }
646 + }
647 + }
648 + }
523 649
524 - if ($xml->source) {
525 - if ((String) $xml->source == 'fpro2pdf') {
526 - $template->set('item', (String) $xml->template->item);
527 - $fpro2pdf_backup = true;
650 + $template->set('format', (string) $xml->template->format);
651 + if (isset($xml->template->resample)) {
652 + $template->set('resample', (string) $xml->template->resample);
528 653 }
529 - }
654 + $template->set(
655 + 'dataset_title',
656 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title, $options, $xml, $template, $extension)
657 + );
658 + if (isset($xml->template->dataset_title1)) {
659 + $template->set(
660 + 'dataset_title1',
661 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title1, $options, $xml, $template, $extension)
662 + );
663 + }
664 + if (isset($xml->template->dataset_title2)) {
665 + $template->set(
666 + 'dataset_title2',
667 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dataset_title2, $options, $xml, $template, $extension)
668 + );
669 + }
670 + $template->set(
671 + 'button_title',
672 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->button_title, $options, $xml, $template, $extension)
673 + );
674 + if (isset($xml->template->dpdf)) {
675 + $template->set(
676 + 'dpdf',
677 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->dpdf, $options, $xml, $template, $extension)
678 + );
679 + }
680 + if (isset($xml->template->attachments)) {
681 + $template->set(
682 + 'attachments',
683 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->attachments, $options, $xml, $template, $extension)
684 + );
685 + }
686 + $template->set('inline', (string) $xml->template->inline);
687 + $template->set('auto', (string) $xml->template->auto);
688 + if (isset($xml->template->rtl)) {
689 + $template->set('rtl', (string) $xml->template->rtl);
690 + }
691 + if (isset($xml->template->font_processor)) {
692 + $template->set('font_processor', (string) $xml->template->font_processor);
693 + }
694 + $template->set(
695 + 'name',
696 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->name, $options, $xml, $template, $extension)
697 + );
698 + if (isset($xml->template->savename)) {
699 + $template->set(
700 + 'savename',
701 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->savename, $options, $xml, $template, $extension)
702 + );
703 + }
704 + $template->set(
705 + 'password',
706 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->password, $options, $xml, $template, $extension)
707 + );
708 + if (isset($xml->template->owner_password)) {
709 + $template->set(
710 + 'owner_password',
711 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->owner_password, $options, $xml, $template, $extension)
712 + );
713 + }
714 + if (isset($xml->template->permissions)) {
715 + $template->set('permissions', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->permissions)));
716 + } else {
717 + $template->set('permissions', array('printing'));
718 + }
719 + if (isset($xml->template->hooks)) {
720 + $template->set(
721 + 'hooks',
722 + (string) $xml->template->hooks
723 + );
724 + }
530 725
531 - $template->set('inline', (String) $xml->template->inline);
532 - $template->set('auto', (String) $xml->template->auto);
533 - $template->set('font', (String) $xml->template->font);
534 - $template->set('font_size', (String) $xml->template->font_size);
535 - $template->set('font_color', (String) $xml->template->font_color);
536 - $template->set('line_height', (String) $xml->template->line_height);
537 - $template->set('fonts', stripslashes_deep(unserialize(base64_decode((String) $xml->template->fonts))));
538 -
539 - $extension = new Model_E2pdf_Extension();
540 - $extension->load($template->get('extension'));
541 -
542 - if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
543 - $template->set('item', (String) $xml->template->item);
544 - $extension->set('item', $template->get('item'));
545 - if ($result = $extension->import($xml->item, (String) $xml->template->item, $options)) {
546 - if (is_array($result) && array_key_exists('errors', $result)) {
547 - $errors = array_merge($errors, $result['errors']);
548 - } else {
549 - $template->set('item', $result);
550 - }
726 + $template->set(
727 + 'meta_title',
728 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_title, $options, $xml, $template, $extension)
729 + );
730 + $template->set(
731 + 'meta_subject',
732 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_subject, $options, $xml, $template, $extension)
733 + );
734 + $template->set(
735 + 'meta_author',
736 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_author, $options, $xml, $template, $extension)
737 + );
738 + $template->set(
739 + 'meta_keywords',
740 + apply_filters('e2pdf_controller_templates_import_replace_shortcodes', (string) $xml->template->meta_keywords, $options, $xml, $template, $extension)
741 + );
742 + if (isset($xml->template->lang_code)) {
743 + $template->set('lang_code', (string) $xml->template->lang_code);
551 744 }
552 - }
745 + $template->set('font', (string) $xml->template->font);
746 + $template->set('font_size', (string) $xml->template->font_size);
747 + $template->set('font_color', (string) $xml->template->font_color);
748 + $template->set('line_height', (string) $xml->template->line_height);
749 + if (isset($xml->template->text_align)) {
750 + $template->set('text_align', (string) $xml->template->text_align);
751 + }
752 + $template->set('fonts', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->fonts)));
753 + $template->set(
754 + 'properties',
755 + apply_filters('e2pdf_controller_templates_import_properties', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->properties)), $options, $xml, $template, $extension)
756 + );
757 + $template->set(
758 + 'actions',
759 + apply_filters('e2pdf_controller_templates_import_actions', $this->helper->load('convert')->unserialize(base64_decode((string) $xml->template->actions)), $options, $xml, $template, $extension)
760 + );
761 + $template->set(
762 + 'pages',
763 + apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension)
764 + );
553 765
554 - $pages = apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension);
555 - $dataset_title = apply_filters('e2pdf_controller_templates_import_dataset_title', (String) $xml->template->dataset_title, $options, $xml, $template, $extension);
556 - $button_title = apply_filters('e2pdf_controller_templates_import_button_title', (String) $xml->template->button_title, $options, $xml, $template, $extension);
557 - $name = apply_filters('e2pdf_controller_templates_import_name', (String) $xml->template->name, $options, $xml, $template, $extension);
558 - $password = apply_filters('e2pdf_controller_templates_import_password', (String) $xml->template->password, $options, $xml, $template, $extension);
766 + if ($options['fonts'] && $xml->fonts) {
767 + $model_e2pdf_font = new Model_E2pdf_Font();
768 + $fonts = $model_e2pdf_font->get_fonts();
559 769
560 - $template->set('pages', $pages);
561 - $template->set('dataset_title', $dataset_title);
562 - $template->set('button_title', $button_title);
563 - $template->set('name', $name);
564 - $template->set('password', $password);
770 + if ($xml->fonts) {
771 + foreach ($xml->fonts->children() as $key => $font) {
772 + $title = (string) $font->title;
773 + $name = (string) $font->name;
774 + $value = (string) $font->value;
565 775
566 - if ($options['fonts'] && $xml->fonts) {
567 - $model_e2pdf_font = new Model_E2pdf_Font();
568 - $fonts = $model_e2pdf_font->get_fonts();
776 + if ($title == 'Noto Sans' && $name == 'NotoSans-Regular.ttf') {
777 + $title = 'Noto Sans Regular';
778 + }
569 779
570 - if ($xml->fonts) {
571 - foreach ($xml->fonts->children() as $key => $font) {
572 - $title = (String) $font->title;
573 - $name = (String) $font->name;
574 - $value = (String) $font->value;
575 -
576 - $exist = array_search($title, $fonts);
577 - if (!$exist) {
578 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
579 - $f_name = $name;
580 - } else {
581 - $i = 0;
582 - do {
583 - $f_name = $i . '_' . $name;
584 - $i++;
585 - } while (file_exists($this->helper->get('fonts_dir') . $f_name));
780 + $exist = array_search($title, $fonts);
781 + if (!$exist) {
782 + if (!file_exists($this->helper->get('fonts_dir') . $name)) {
783 + $f_name = $name;
784 + } else {
785 + $i = 0;
786 + do {
787 + $f_name = $i . '_' . $name;
788 + $i++;
789 + } while (file_exists($this->helper->get('fonts_dir') . $f_name));
790 + }
791 + $font_ext = strtolower(pathinfo($f_name, PATHINFO_EXTENSION));
792 + if (in_array($font_ext, $model_e2pdf_font->get_allowed_extensions())) {
793 + file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value), LOCK_EX);
794 + }
586 795 }
587 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
588 796 }
589 797 }
590 798 }
591 - }
592 799
593 - if ($xml->pdf && $xml->pdf->source) {
800 + if ($xml->pdf && $xml->pdf->source) {
594 801
595 - $pdf_name = md5(time());
596 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
597 - $pdf_images_dir = $pdf_dir . "images/";
802 + $pdf_name = md5(time());
803 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
804 + $pdf_images_dir = $pdf_dir . 'images/';
598 805
599 - $this->helper->create_dir($pdf_dir);
600 - $this->helper->create_dir($pdf_images_dir);
806 + $this->helper->create_dir($pdf_dir);
807 + $this->helper->create_dir($pdf_images_dir);
601 808
602 - $pdf_source = (String) $xml->pdf->source;
603 - file_put_contents($pdf_dir . $pdf_name . ".pdf", base64_decode($pdf_source));
809 + $pdf_source = (string) $xml->pdf->source;
810 + file_put_contents($pdf_dir . $pdf_name . '.pdf', base64_decode($pdf_source), LOCK_EX);
604 811
605 - if ($xml->pdf->images) {
606 - foreach ($xml->pdf->images->children() as $key => $image) {
607 - $page_id = (String) $image->page_id;
608 - $image_source = (String) $image->source;
609 - file_put_contents($pdf_dir . "images/" . $page_id . ".png", base64_decode($image_source));
812 + if ($xml->pdf->images) {
813 + foreach ($xml->pdf->images->children() as $key => $image) {
814 + $page_id = (string) $image->page_id;
815 + $image_source = (string) $image->source;
816 + file_put_contents($pdf_dir . 'images/' . $page_id . '.png', base64_decode($image_source), LOCK_EX);
817 + }
610 818 }
819 + $template->set('pdf', $pdf_name);
611 820 }
612 - $template->set('pdf', $pdf_name);
613 - }
614 821
615 - if (empty($errors)) {
616 - $template->save(true);
617 - $this->add_notification('update', __('Template imported successfully', 'e2pdf'));
618 - } else {
619 - foreach ($errors as $key => $error) {
620 - $this->add_notification('error', __($error, 'e2pdf'));
822 + if (empty($errors)) {
823 + $template->save(true);
824 + if ($options['item']) {
825 + $extension->after_import((string) $xml->template->ID, $template->get('ID'));
826 + }
827 + $template->activate();
828 + if ($template->get('ID')) {
829 + $this->add_notification(
830 + 'update', sprintf(
831 + __('Template Imported: <a target="_blank" href="%1$s">View</a> | <a target="_blank" href="%2$s">Edit</a>', 'e2pdf'),
832 + $this->helper->get_url(
833 + [
834 + 'page' => 'e2pdf-templates',
835 + 'action' => 'view',
836 + 'id' => $template->get('ID')
837 + ]
838 + ),
839 + $this->helper->get_url(
840 + [
841 + 'page' => 'e2pdf-templates',
842 + 'action' => 'edit',
843 + 'id' => $template->get('ID')
844 + ]
845 + )
846 + )
847 + );
848 + } else {
849 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
850 + }
851 + } else {
852 + foreach ($errors as $key => $error) {
853 + $this->add_notification('error', $error);
854 + }
621 855 }
622 856 }
623 -
624 - unlink($import['tmp_name']);
857 + if (is_file($file['tmp_name'])) {
858 + unlink($file['tmp_name']);
859 + }
625 860 }
626 861 }
627 862
628 863 $this->view('import_disabled', false);
629 -
630 864 if (!$this->helper->load('xml')->check()) {
631 - $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
865 + $this->add_notification('error', sprintf(__('The PHP %s extension is required', 'e2pdf'), 'SimpleXml'));
632 866 $this->view('import_disabled', true);
633 867 }
634 868
869 + global $wpdb;
870 +
871 + $order_condition = array(
872 + 'orderby' => 'ID',
873 + 'order' => 'desc',
874 + );
875 + $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
876 + $tpls = $wpdb->get_results($wpdb->prepare('SELECT `ID`, `title` FROM `' . (new Model_E2pdf_Template())->get_table() . '`' . $orderby . ''));
877 + $templates = [
878 + '' => __('--- Select ---', 'e2pdf')
879 + ];
880 + if (!empty($tpls)) {
881 + foreach ($tpls as $tpl) {
882 + $templates[$tpl->ID] = $tpl->ID . ' | ' . $tpl->title;
883 + }
884 + }
885 +
635 886 $options = array(
636 - 'common' => array(
887 + 'overwrite' => [
888 + 'name' => __('Overwrite Options', 'e2pdf'),
889 + 'options' => [
890 + [
891 + 'name' => __('Overwrite Template by ID', 'e2pdf'),
892 + 'key' => 'options[overwrite]',
893 + 'value' => '',
894 + 'default_value' => '',
895 + 'type' => 'select',
896 + 'options' => [
897 + '' => __('Create New E2Pdf Template ID', 'e2pdf'),
898 + '1' => __('Existing Template ID', 'e2pdf'),
899 + '2' => __('Custom Template ID', 'e2pdf'),
900 + '3' => __('Backup Template ID', 'e2pdf'),
901 + ]
902 + ],
903 + [
904 + 'name' => __('Template ID', 'e2pdf'),
905 + 'key' => 'options[template_id]',
906 + 'value' => '',
907 + 'default_value' => '',
908 + 'type' => 'select',
909 + 'options' => $templates,
910 + 'li' => array(
911 + 'class' => 'e2pdf-import-overwrite-option e2pdf-hide',
912 + ),
913 + ],
914 + [
915 + 'name' => __('Template ID', 'e2pdf'),
916 + 'key' => 'options[custom_template_id]',
917 + 'value' => '',
918 + 'default_value' => '',
919 + 'type' => 'text',
920 + 'class' => 'e2pdf-numbers',
921 + 'placeholder' => __('Template ID', 'e2pdf'),
922 + 'li' => array(
923 + 'class' => 'e2pdf-import-overwrite-option e2pdf-hide',
924 + ),
925 + ],
926 + ],
927 + ],
928 + 'template' => array(
637 929 'name' => __('Template Options', 'e2pdf'),
638 930 'options' => array(
639 931 array(
640 - 'name' => __('Overwrite template by ID', 'e2pdf'),
641 - 'key' => 'options[overwrite]',
642 - 'value' => '0',
643 - 'default_value' => '0',
644 - 'type' => 'checkbox',
645 - 'placeholder' => '',
646 - ),
647 - array(
648 932 'name' => __('Import Images', 'e2pdf'),
649 933 'key' => 'options[images]',
650 934 'value' => '1',
651 935 'default_value' => '0',
@@ -658,16 +942,16 @@
658 942 'value' => '1',
659 943 'default_value' => '0',
660 944 'type' => 'checkbox',
661 945 'placeholder' => '',
662 - )
663 - )
946 + ),
947 + ),
664 948 ),
665 949 'item' => array(
666 - 'name' => __('Item Options', 'e2pdf'),
950 + 'name' => __('Connection Options', 'e2pdf'),
667 951 'options' => array(
668 952 array(
669 - 'name' => __('Import Item', 'e2pdf'),
953 + 'name' => __('Import Connection', 'e2pdf'),
670 954 'key' => 'options[item]',
671 955 'value' => '0',
672 956 'default_value' => '0',
673 957 'type' => 'checkbox',
@@ -672,139 +956,216 @@
672 956 'default_value' => '0',
673 957 'type' => 'checkbox',
674 958 'placeholder' => '',
675 959 'class' => 'e2pdf-collapse',
676 - 'data-collapse' => 'e2pdf-import-extension-option'
960 + 'data-collapse' => 'e2pdf-import-extension-option',
677 961 ),
678 - )
679 - )
962 + ),
963 + ),
680 964 );
681 965
682 966 $options = apply_filters('e2pdf_controller_templates_import_options', $options);
683 -
684 967 $this->view('options', $options);
968 + $this->view('upload_max_filesize', $this->helper->load('files')->get_upload_max_filesize());
685 969 }
686 970
687 971 /**
688 972 * @url admin.php?page=e2pdf-templates&action=backup&id=$id
689 973 */
690 - public function backup_action() {
691 -
692 - if ($this->post->get()) {
693 -
694 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
695 -
696 - if ($this->helper->load('xml')->check()) {
697 -
698 - $options = $this->post->get('options');
699 -
700 - $xml = $this->helper->load('xml')->create('backup');
701 -
702 - $template = new Model_E2pdf_Template();
703 -
704 -
705 - if ($template->load($this->post->get('id'))) {
706 -
707 - if ($template->get('title') != '') {
708 - $filename = $template->get('title') . "." . date('Y-m-d.H-i-s') . ".e2pdf";
709 - } else {
710 - $filename = date('Y-m-d.H-i-s') . ".e2pdf";
711 - }
712 -
713 - $pages = $template->get('pages');
714 - if ($options['images']) {
715 - foreach ($pages as $page_key => $page) {
716 - if (isset($page['elements']) && !empty($page['elements'])) {
717 - foreach ($page['elements'] as $element_key => $element) {
718 - if ($element['type'] === 'e2pdf-image') {
719 - $pages[$page_key]['elements'][$element_key]['base64'] = $this->helper->load('image')->get_image($element['value']);
974 + public function download_action() {
975 + if ($this->post->get('_wpnonce')) {
976 + if (wp_verify_nonce($this->post->get('_wpnonce'), 'e2pdf_templates')) {
977 + if ($this->helper->load('xml')->check()) {
978 + $options = $this->post->get('options');
979 + $xml = $this->helper->load('xml')->create('backup');
980 + $template = new Model_E2pdf_Template();
981 + if ($template->load($this->post->get('id'))) {
982 + if ($template->get('title') != '') {
983 + $filename = $template->get('ID') . ' - ' . $template->get('title') . '.' . date('Y-m-d.H-i-s') . '.e2pdf';
984 + } else {
985 + $filename = date('Y-m-d.H-i-s') . '.e2pdf';
986 + }
987 + $pages = $template->get('pages');
988 + if ($options['images']) {
989 + foreach ($pages as $page_key => $page) {
990 + if (isset($page['elements']) && !empty($page['elements'])) {
991 + foreach ($page['elements'] as $element_key => $element) {
992 + if ($element['type'] === 'e2pdf-image') {
993 + $file = false;
994 + if ($this->helper->load('pdf')->get_extension($element['value'])) {
995 + $file = $this->helper->load('pdf')->get_pdf($element['value']);
996 + } else {
997 + $file = $this->helper->load('image')->get_image($element['value']);
998 + }
999 + if ($file) {
1000 + $pages[$page_key]['elements'][$element_key]['base64'] = $file;
1001 + }
1002 + }
720 1003 }
721 1004 }
722 1005 }
723 1006 }
724 - }
725 1007
726 - $pages = apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension());
727 - $dataset_title = apply_filters('e2pdf_controller_templates_backup_dataset_title', $template->get('dataset_title'), $options, $template, $template->extension());
728 - $button_title = apply_filters('e2pdf_controller_templates_backup_button_title', $template->get('button_title'), $options, $template, $template->extension());
729 - $name = apply_filters('e2pdf_controller_templates_backup_name', $template->get('name'), $options, $template, $template->extension());
730 - $password = apply_filters('e2pdf_controller_templates_backup_password', $template->get('password'), $options, $template, $template->extension());
1008 + /*
1009 + * Build Xml
1010 + */
1011 + $xml->addChildCData('version', $this->helper->get('version'));
1012 + $xml->addChildCData('date', date('Y-m-d H:i:s'));
731 1013
732 - // build xml
733 - $xml->addChildCData('version', $this->helper->get('version'));
734 - $xml->addChildCData('date', date('Y-m-d H:i:s'));
1014 + $options_xml = $xml->addChild('options');
1015 + foreach ($options as $option_key => $option) {
1016 + $options_xml->addChildCData($option_key, $option);
1017 + }
1018 + $template_xml = $xml->addChild('template');
1019 + $template_xml->addChildCData('ID', $template->get('ID'));
1020 + $template_xml->addChildCData('title', $template->get('title'));
1021 + $template_xml->addChildCData('created_at', $template->get('created_at'));
1022 + $template_xml->addChildCData('updated_at', $template->get('updated_at'));
1023 + $template_xml->addChildCData('flatten', $template->get('flatten'));
1024 + $template_xml->addChildCData('tab_order', $template->get('tab_order'));
1025 + $template_xml->addChildCData('compression', $template->get('compression'));
1026 + $template_xml->addChildCData('optimization', $template->get('optimization'));
1027 + $template_xml->addChildCData('appearance', $template->get('appearance'));
1028 + $template_xml->addChildCData('width', $template->get('width'));
1029 + $template_xml->addChildCData('height', $template->get('height'));
1030 + $template_xml->addChildCData('extension', $template->get('extension'));
1031 + $template_xml->addChildCData('item', $template->get('item'));
1032 + $template_xml->addChildCData('item1', $template->get('item1'));
1033 + $template_xml->addChildCData('item2', $template->get('item2'));
1034 + $template_xml->addChildCData('format', $template->get('format'));
1035 + $template_xml->addChildCData('resample', $template->get('resample'));
1036 + $template_xml->addChildCData(
1037 + 'dataset_title',
1038 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title'), $options, $template, $template->extension())
1039 + );
1040 + $template_xml->addChildCData(
1041 + 'dataset_title1',
1042 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title1'), $options, $template, $template->extension())
1043 + );
1044 + $template_xml->addChildCData(
1045 + 'dataset_title2',
1046 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dataset_title2'), $options, $template, $template->extension())
1047 + );
1048 + $template_xml->addChildCData(
1049 + 'button_title',
1050 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('button_title'), $options, $template, $template->extension())
1051 + );
1052 + $template_xml->addChildCData(
1053 + 'dpdf',
1054 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('dpdf'), $options, $template, $template->extension())
1055 + );
1056 + $template_xml->addChildCData(
1057 + 'attachments',
1058 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('attachments'), $options, $template, $template->extension())
1059 + );
1060 + $template_xml->addChildCData('inline', $template->get('inline'));
1061 + $template_xml->addChildCData('auto', $template->get('auto'));
1062 + $template_xml->addChildCData('rtl', $template->get('rtl'));
1063 + $template_xml->addChildCData('font_processor', $template->get('font_processor'));
1064 + $template_xml->addChildCData(
1065 + 'name',
1066 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('name'), $options, $template, $template->extension())
1067 + );
1068 + $template_xml->addChildCData(
1069 + 'savename',
1070 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('savename'), $options, $template, $template->extension())
1071 + );
1072 + $template_xml->addChildCData(
1073 + 'password',
1074 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('password'), $options, $template, $template->extension())
1075 + );
1076 + $template_xml->addChildCData(
1077 + 'owner_password',
1078 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('owner_password'), $options, $template, $template->extension())
1079 + );
1080 + $template_xml->addChildCData('permissions', base64_encode(serialize($template->get('permissions'))));
1081 + $template_xml->addChildCData('hooks', $template->get('hooks'));
1082 + $template_xml->addChildCData(
1083 + 'meta_title',
1084 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_title'), $options, $template, $template->extension())
1085 + );
1086 + $template_xml->addChildCData(
1087 + 'meta_subject',
1088 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_subject'), $options, $template, $template->extension())
1089 + );
1090 + $template_xml->addChildCData(
1091 + 'meta_author',
1092 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_author'), $options, $template, $template->extension())
1093 + );
1094 + $template_xml->addChildCData(
1095 + 'meta_keywords',
1096 + apply_filters('e2pdf_controller_templates_backup_replace_shortcodes', $template->get('meta_keywords'), $options, $template, $template->extension())
1097 + );
1098 + $template_xml->addChildCData('lang_code', $template->get('lang_code'));
1099 + $template_xml->addChildCData('font', $template->get('font'));
1100 + $template_xml->addChildCData('font_size', $template->get('font_size'));
1101 + $template_xml->addChildCData('font_color', $template->get('font_color'));
1102 + $template_xml->addChildCData('line_height', $template->get('line_height'));
1103 + $template_xml->addChildCData('text_align', $template->get('text_align'));
1104 + $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
1105 + $template_xml->addChildCData(
1106 + 'properties', base64_encode(
1107 + serialize(
1108 + apply_filters('e2pdf_controller_templates_backup_properties', $template->get('properties'), $options, $template, $template->extension())
1109 + )
1110 + )
1111 + );
1112 + $template_xml->addChildCData(
1113 + 'actions', base64_encode(
1114 + serialize(
1115 + apply_filters('e2pdf_controller_templates_backup_actions', $template->get('actions'), $options, $template, $template->extension())
1116 + )
1117 + )
1118 + );
1119 + $template_xml->addChildCData('pages', base64_encode(
1120 + serialize(
1121 + apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension())
1122 + )
1123 + )
1124 + );
735 1125
736 - $options_xml = $xml->addChild('options');
737 - foreach ($options as $option_key => $option) {
738 - $options_xml->addChildCData($option_key, $option);
739 - }
740 -
741 - $template_xml = $xml->addChild('template');
742 - $template_xml->addChildCData('ID', $template->get('ID'));
743 - $template_xml->addChildCData('title', $template->get('title'));
744 - $template_xml->addChildCData('created_at', $template->get('created_at'));
745 - $template_xml->addChildCData('updated_at', $template->get('updated_at'));
746 - $template_xml->addChildCData('flatten', $template->get('flatten'));
747 - $template_xml->addChildCData('format', $template->get('format'));
748 - $template_xml->addChildCData('compression', $template->get('compression'));
749 - $template_xml->addChildCData('appearance', $template->get('appearance'));
750 - $template_xml->addChildCData('width', $template->get('width'));
751 - $template_xml->addChildCData('height', $template->get('height'));
752 - $template_xml->addChildCData('extension', $template->get('extension'));
753 - $template_xml->addChildCData('item', $template->get('item'));
754 - $template_xml->addChildCData('dataset_title', $dataset_title);
755 - $template_xml->addChildCData('button_title', $button_title);
756 - $template_xml->addChildCData('inline', $template->get('inline'));
757 - $template_xml->addChildCData('auto', $template->get('auto'));
758 - $template_xml->addChildCData('name', $name);
759 - $template_xml->addChildCData('password', $password);
760 - $template_xml->addChildCData('font', $template->get('font'));
761 - $template_xml->addChildCData('font_size', $template->get('font_size'));
762 - $template_xml->addChildCData('font_color', $template->get('font_color'));
763 - $template_xml->addChildCData('line_height', $template->get('line_height'));
764 - $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
765 - $template_xml->addChildCData('pages', base64_encode(serialize($pages)));
766 -
767 -//include pdf
768 - if ($template->get('pdf')) {
769 - $pdf_xml = $xml->addChild('pdf');
770 - $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")));
771 - $pdf_xml_images = $pdf_xml->addChild('images');
772 - foreach ($template->get('pages') as $key => $page) {
773 - $pdf_xml_image = $pdf_xml_images->addChild('image');
774 - $pdf_xml_image->addChildCData('page_id', $page['page_id']);
775 - $pdf_xml_image->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/" . $page['page_id'] . ".png")));
1126 + // include pdf
1127 + if ($template->get('pdf')) {
1128 + $pdf_xml = $xml->addChild('pdf');
1129 + $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf')));
1130 + $pdf_xml_images = $pdf_xml->addChild('images');
1131 + foreach ($template->get('pages') as $key => $page) {
1132 + $pdf_xml_image = $pdf_xml_images->addChild('image');
1133 + $pdf_xml_image->addChildCData('page_id', $page['page_id']);
1134 + $pdf_xml_image->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . '/images/' . $page['page_id'] . '.png')));
1135 + }
776 1136 }
777 - }
778 1137
779 -//include fonts
780 - if ($options['fonts']) {
781 - $fonts_xml = $xml->addChild('fonts');
782 - if ($template->get('fonts')) {
783 - $model_e2pdf_font = new Model_E2pdf_Font();
784 - foreach ($template->get('fonts') as $key => $value) {
785 - $font = $fonts_xml->addChild('font');
786 - $font->addChildCData('title', $value);
787 - $font->addChildCData('name', $key);
788 - $font->addChildCData('value', $model_e2pdf_font->get_font($key));
1138 + // include fonts
1139 + if ($options['fonts']) {
1140 + $fonts_xml = $xml->addChild('fonts');
1141 + if ($template->get('fonts')) {
1142 + $model_e2pdf_font = new Model_E2pdf_Font();
1143 + foreach ($template->get('fonts') as $key => $value) {
1144 + $font = $fonts_xml->addChild('font');
1145 + $font->addChildCData('title', $value);
1146 + $font->addChildCData('name', $key);
1147 + $font->addChildCData('value', $model_e2pdf_font->get_font($key));
1148 + }
789 1149 }
790 1150 }
791 - }
792 1151
793 -//include item
794 - if ($options['item']) {
795 - if ($template->extension()->method('backup')) {
796 - $item = $xml->addChild('item');
797 - $template->extension()->backup($item);
1152 + // include item
1153 + if ($options['item']) {
1154 + if ($template->extension()->method('backup')) {
1155 + $item = $xml->addChild('item');
1156 + $template->extension()->backup($item);
1157 + }
798 1158 }
1159 + $this->download_response('xml', $this->helper->load('xml')->get_xml(), $filename);
1160 + exit;
1161 + } else {
1162 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
1163 + $this->render('blocks', 'notifications');
799 1164 }
800 -
801 - $file = $this->helper->load('xml')->get_xml();
802 - $this->download_response('xml', $file, $filename);
803 - } else {
804 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
805 - $this->render('blocks', 'notifications');
806 1165 }
1166 + } else {
1167 + wp_die($this->message('wp_verify_nonce_error'));
807 1168 }
808 1169 }
809 1170
810 1171 $this->view('export_disabled', false);
@@ -809,9 +1170,9 @@
809 1170
810 1171 $this->view('export_disabled', false);
811 1172
812 1173 if (!$this->helper->load('xml')->check()) {
813 - $this->add_notification('error', sprintf(__("PHP Extension <strong>%s</strong> not found", 'e2pdf'), 'SimpleXml'));
1174 + $this->add_notification('error', sprintf(__('The PHP %s extension is required', 'e2pdf'), 'SimpleXml'));
814 1175 $this->view('export_disabled', true);
815 1176 }
816 1177
817 1178 $template = new Model_E2pdf_Template();
@@ -823,15 +1184,15 @@
823 1184 'common' => array(
824 1185 'name' => __('Options', 'e2pdf'),
825 1186 'options' => array(
826 1187 array(
827 - 'name' => __('Include Item', 'e2pdf'),
1188 + 'name' => __('Include Connection', 'e2pdf'),
828 1189 'key' => 'options[item]',
829 - 'value' => $template->extension()->method('backup') ? 1 : 0,
1190 + 'value' => $template->extension()->method('backup') ? '1' : '0',
830 1191 'default_value' => 0,
831 1192 'type' => 'checkbox',
832 1193 'placeholder' => '',
833 - 'disabled' => $template->extension()->method('backup') ? false : 'disabled'
1194 + 'disabled' => $template->extension()->method('backup') ? false : 'disabled',
834 1195 ),
835 1196 array(
836 1197 'name' => __('Include Images', 'e2pdf'),
837 1198 'key' => 'options[images]',
@@ -846,919 +1207,891 @@
846 1207 'value' => 1,
847 1208 'default_value' => 0,
848 1209 'type' => 'checkbox',
849 1210 'placeholder' => '',
850 - )
851 - )
852 - )
1211 + ),
1212 + ),
1213 + ),
853 1214 );
854 1215
855 1216 $options = apply_filters('e2pdf_controller_templates_backup_options', $options, $template, $template->extension());
856 -
857 1217 $this->view('options', $options);
858 1218 } else {
859 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
1219 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
860 1220 $this->render('blocks', 'notifications');
861 1221 }
862 1222 }
863 1223
1224 + // screen action
864 1225 public function screen_action() {
865 - if ($this->post->get()) {
866 - $this->check_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce');
867 - $option = $this->post->get('wp_screen_options');
868 - if (is_array($option) && isset($option['option']) && isset($option['value']) && $option['value']) {
869 - update_option($option['option'], $option['value']);
1226 + $option = $this->post->get('wp_screen_options');
1227 + if (is_array($option) && isset($option['option'], $option['value']) && $option['option'] === 'e2pdf_templates_screen_per_page') {
1228 + $per_page = (int) $option['value'];
1229 + if ($per_page > 0) {
1230 + update_option($option['option'], $per_page);
870 1231 }
871 1232 }
872 - $location = $this->helper->get_url(
873 - array(
874 - 'page' => 'e2pdf-templates',
1233 + $this->redirect(
1234 + $this->helper->get_url(
1235 + [
1236 + 'page' => 'e2pdf-templates',
1237 + ]
875 1238 )
876 1239 );
877 - $this->redirect($location);
878 1240 }
879 1241
880 - /**
881 - * Save template via ajax
882 - * action: wp_ajax_e2pdf_save_form
883 - * function: e2pdf_save_form
884 - *
885 - * @return json
886 - */
1242 + // ajax save form
887 1243 public function ajax_save_form() {
888 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
889 -
890 - $data = json_decode($this->post->get('data'), true);
891 -
892 - $template = new Model_E2pdf_Template();
893 - if (isset($data['ID'])) {
894 - $template->load($data['ID']);
895 - if ($template->get('pdf') && $template->get('pdf') !== $data['pdf']) {
896 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
897 - $this->helper->delete_dir($old_pdf_path);
1244 + global $wpdb;
1245 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1246 + $data = json_decode($this->post->get('data'), true);
1247 + $template = new Model_E2pdf_Template();
1248 + if (isset($data['ID'])) {
1249 + $template->load($data['ID']);
898 1250 }
899 - }
900 -
901 - foreach ($data as $key => $value) {
902 - $template->set($key, $value);
903 - }
904 - $template_id = $template->save(true);
905 -
906 - if (isset($data['item']) && $data['item'] == '-1' && $template_id) {
907 - $template->load($template_id);
908 - if ($template->extension()->method('add_form')) {
909 - $template = $template->extension()->add_form($template);
1251 + if (!isset($data['permissions'])) {
1252 + $data['permissions'] = array();
1253 + }
1254 + foreach ($data as $key => $value) {
1255 + if ($key == 'pdf' && $value) {
1256 + if (file_exists($this->helper->get('pdf_dir') . $value . '/' . $value . '.pdf')) {
1257 + $template->set($key, $value);
1258 + }
1259 + } else {
1260 + $template->set($key, $value);
1261 + }
1262 + }
1263 + $template_id = $template->save(true);
1264 + if (!$template_id) {
1265 + if ($wpdb->last_error) {
1266 + $response = array(
1267 + 'error' => $wpdb->last_error,
1268 + );
1269 + } else {
1270 + $response = array(
1271 + 'error' => __('Something went wrong!', 'e2pdf'),
1272 + );
1273 + }
910 1274 } else {
911 - $template->set('item', '');
1275 + if (isset($data['item']) && $data['item'] == '-1') {
1276 + $template->load($template_id);
1277 + if ($template->extension()->method('auto_form')) {
1278 + $template = $template->extension()->auto_form($template, $data);
1279 + } else {
1280 + $template->set('item', '');
1281 + }
1282 + $template->save(true);
1283 + }
1284 + if (!isset($data['ID'])) {
1285 + $template->activate();
1286 + }
1287 + $response = array(
1288 + 'redirect' => $this->helper->get_url(
1289 + array(
1290 + 'page' => 'e2pdf-templates',
1291 + 'action' => 'edit',
1292 + 'id' => $template->get('ID'),
1293 + 'notification' => $this->add_notification('update', __('Template Saved', 'e2pdf')),
1294 + )
1295 + ),
1296 + );
912 1297 }
913 - $template->save(true);
1298 + } else {
1299 + $response['error'] = $this->message('wp_verify_nonce_error');
914 1300 }
915 -
916 - if ($template->get('activated')) {
917 - $this->activate_template($template->get('ID'));
918 - } elseif (!$template->get('activated')) {
919 - $this->deactivate_template($template->get('ID'));
920 - }
921 -
922 - $response = array(
923 - 'redirect' => $this->helper->get_url(array(
924 - 'page' => 'e2pdf-templates',
925 - 'action' => 'edit',
926 - 'id' => $template->get('ID'))
927 - )
928 - );
929 -
930 - $this->add_notification('update', __('Template saved successfully', 'e2pdf'));
931 1301 $this->json_response($response);
932 1302 }
933 1303
934 1304 public function ajax_get_styles() {
935 1305
936 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
937 - $data = $this->post->get('data');
938 -
939 - $extension = new Model_E2pdf_Extension();
940 - if ($extension->load($data)) {
941 - $content = $extension->styles();
1306 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1307 + $data = $this->post->get('data');
1308 + $content = array();
1309 + if (isset($data['extension']) && isset($data['item'])) {
1310 + $extension = new Model_E2pdf_Extension();
1311 + if ($extension->load($data['extension'])) {
1312 + $content = $extension->styles($data['item']);
1313 + }
1314 + }
1315 + $response = array(
1316 + 'content' => $content,
1317 + );
942 1318 } else {
943 - $content = array();
1319 + $response['error'] = $this->message('wp_verify_nonce_error');
944 1320 }
945 - $response = array(
946 - 'content' => $content,
947 - );
948 1321 $this->json_response($response);
949 1322 }
950 1323
951 - /**
952 - * Get extensions via ajax
953 - * action: wp_ajax_e2pdf_extension
954 - * function: e2pdf_extension
955 - *
956 - * @return json
957 - */
1324 + // ajax extension
958 1325 public function ajax_extension() {
959 -
960 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
961 - $data = $this->post->get('data');
962 -
963 - $extension = new Model_E2pdf_Extension();
964 -
965 - $content = array();
966 - if ($extension->load($data)) {
967 - $content = $extension->items();
968 -
969 - if ($extension->method('add_form')) {
970 - $select = new stdClass();
971 - $select->id = '-1';
972 - $select->url = 'javascript:void(0);';
973 - $select->name = __("Auto Form from PDF", "e2pdf");
974 -
975 - array_unshift($content, $select);
1326 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1327 + $data = $this->post->get('data');
1328 + $extension = new Model_E2pdf_Extension();
1329 + $content = array();
1330 + if ($extension->load($data)) {
1331 + $content = $extension->items();
1332 + if ($extension->method('merged_items')) {
1333 + $select = new stdClass();
1334 + $select->id = '-2';
1335 + $select->url = '';
1336 + $select->name = __('Merged Connections', 'e2pdf');
1337 + array_unshift($content, $select);
1338 + }
1339 + if ($extension->method('auto_form')) {
1340 + $select = new stdClass();
1341 + $select->id = '-1';
1342 + $select->url = '';
1343 + $select->name = __('Auto Form from PDF', 'e2pdf');
1344 + array_unshift($content, $select);
1345 + }
976 1346 }
1347 + $select = new stdClass();
1348 + $select->id = '';
1349 + $select->url = '';
1350 + $select->name = __('--- Select ---', 'e2pdf');
1351 + array_unshift($content, $select);
1352 + $response = array(
1353 + 'content' => $content,
1354 + );
1355 + } else {
1356 + $response['error'] = $this->message('wp_verify_nonce_error');
977 1357 }
978 -
979 -
980 - $select = new stdClass();
981 - $select->id = '';
982 - $select->url = 'javascript:void(0);';
983 - $select->name = __("--- Select ---", "e2pdf");
984 -
985 - array_unshift($content, $select);
986 -
987 - $response = array(
988 - 'content' => $content,
989 - );
990 1358 $this->json_response($response);
991 1359 }
992 1360
993 - /**
994 - * Get extensions via ajax
995 - * action: wp_ajax_e2pdf_extension
996 - * function: e2pdf_extension
997 - *
998 - * @return json
999 - */
1361 + // ajax visual mapper
1000 1362 public function ajax_visual_mapper() {
1001 -
1002 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1003 -
1004 - $data = $this->post->get('data');
1005 -
1006 - $item = isset($data['item']) ? $data['item'] : '';
1007 -
1008 - $extension = new Model_E2pdf_Extension();
1009 - $extension->load($data['extension']);
1010 - $extension->set('item', $item);
1011 -
1012 - if ($visual_mapper = $extension->visual_mapper()) {
1013 - $response = array(
1014 - 'content' => $visual_mapper
1015 - );
1016 - } elseif (!$item) {
1017 - $response = array(
1018 - 'content' => __("You must set Item to use <strong>Visual Mapper</strong>", "e2pdf"),
1019 - );
1363 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1364 + $data = $this->post->get('data');
1365 + $item = isset($data['item']) ? $data['item'] : '';
1366 + $item1 = isset($data['item1']) ? $data['item1'] : '';
1367 + $item2 = isset($data['item2']) ? $data['item2'] : '';
1368 + $extension = new Model_E2pdf_Extension();
1369 + $extension->load($data['extension']);
1370 + $extension->set('item', $item);
1371 + if ($item == '-2') {
1372 + $extension->set('item1', $item1);
1373 + $extension->set('item2', $item2);
1374 + }
1375 + $visual_mapper = $extension->visual_mapper();
1376 + if ($visual_mapper) {
1377 + $response = array(
1378 + 'content' => $visual_mapper,
1379 + );
1380 + } elseif (!$item || ($item == '-2' && !$item1 && !$item2)) {
1381 + $response = array(
1382 + 'content' => __('You must set the Connection to use the Visual Mapper', 'e2pdf'),
1383 + );
1384 + } else {
1385 + $response = array(
1386 + 'content' => __("Sorry, this Extension doesn't support the Visual Mapper", 'e2pdf'),
1387 + );
1388 + }
1020 1389 } else {
1021 - $response = array(
1022 - 'content' => __("Sorry, this extension doesn't support <strong>Visual Mapper</strong>", "e2pdf"),
1023 - );
1390 + $response['error'] = $this->message('wp_verify_nonce_error');
1024 1391 }
1025 -
1026 1392 $this->json_response($response);
1027 1393 }
1028 1394
1029 - /**
1030 - * Upload Template via Ajax
1031 - * action: wp_ajax_e2pdf_upload
1032 - * function: e2pdf_upload
1033 - *
1034 - * @return json
1035 - */
1395 + // ajax upload
1036 1396 public function ajax_upload() {
1037 1397
1038 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1398 + if (!wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1399 + $this->json_response(
1400 + [
1401 + 'error' => $this->message('wp_verify_nonce_error'),
1402 + ]
1403 + );
1404 + }
1039 1405
1040 1406 $data = $this->post->get();
1041 -
1042 1407 $post_extension = $data['extension'];
1043 1408 $item = isset($data['item']) ? $data['item'] : '';
1044 1409 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1045 -
1046 1410 $font = isset($data['font']) ? $data['font'] : false;
1047 1411 $font_size = isset($data['font_size']) ? $data['font_size'] : false;
1048 1412 $line_height = isset($data['line_height']) ? $data['line_height'] : false;
1049 - $activated = isset($data['activated']) ? $data['activated'] : 0;
1050 1413 $title = isset($data['title']) ? $data['title'] : __('(no title)', 'e2pdf');
1414 + $rtl = isset($data['rtl']) && $data['rtl'] ? '1' : '0';
1415 + $text_align = isset($data['text_align']) ? $data['text_align'] : 'left';
1051 1416
1052 - $allowed_ext = array(
1053 - 'pdf'
1054 - );
1055 -
1056 - $pdf = $this->files->get('pdf');
1057 -
1058 - $name = strtolower($pdf['name']);
1059 - $tmp = $pdf['tmp_name'];
1060 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1061 -
1062 - if ($pdf['error']) {
1063 - $error = $pdf['error'];
1064 - } elseif (!in_array($ext, $allowed_ext)) {
1065 - $error = __('Incorrect file extension', 'e2pdf');
1066 - } elseif ($pdf['type'] != 'application/pdf') {
1067 - $error = __('Incompatible type', 'e2pdf');
1417 + $file = $this->helper->load('files')->upload($this->files->get('pdf'), ['pdf'], ['application/pdf']);
1418 + if (isset($file['error'])) {
1419 + $this->json_response(
1420 + [
1421 + 'error' => $file['error'],
1422 + ]
1423 + );
1068 1424 }
1069 1425
1070 - if ($error) {
1071 - $response = array(
1072 - 'error' => $error,
1073 - );
1426 + wp_raise_memory_limit('admin');
1427 + if (get_option('e2pdf_api_protocol', '0') == '1' && ($tmp = realpath($file['tmp_name']))) {
1428 + $upload = class_exists('CURLFile') ? new CURLFile($tmp) : '@' . $tmp;
1074 1429 } else {
1430 + $upload = base64_encode(file_get_contents($file['tmp_name']));
1431 + }
1075 1432
1076 - $model_e2pdf_api = new Model_E2pdf_Api();
1077 - $model_e2pdf_api->set(array(
1078 - 'action' => 'template/upload',
1079 - 'data' => array(
1080 - 'title' => $name,
1081 - 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1433 + $model_e2pdf_api = new Model_E2pdf_Api();
1434 + $model_e2pdf_api->set(
1435 + array(
1436 + 'action' => 'template/upload2',
1437 + 'data' => array(
1438 + 'title' => $file['name'],
1439 + 'pdf' => $upload,
1440 + ),
1082 1441 )
1083 - ));
1084 - $request = $model_e2pdf_api->request();
1442 + );
1443 + $request = $model_e2pdf_api->request();
1085 1444
1086 - if (!isset($request['error'])) {
1445 + if (isset($request['error'])) {
1446 + $this->json_response(
1447 + [
1448 + 'error' => $request['error'],
1449 + ]
1450 + );
1451 + }
1087 1452
1088 - $extension = new Model_E2pdf_Extension();
1089 - if ($post_extension) {
1090 - $extension->load($post_extension);
1091 - if ($item && $item != '-1') {
1092 - $extension->set('item', $item);
1093 - }
1094 - }
1453 + $extension = new Model_E2pdf_Extension();
1454 + if ($post_extension) {
1455 + $extension->load($post_extension);
1456 + if ($item && $item != '-1') {
1457 + $extension->set('item', $item);
1458 + }
1459 + }
1095 1460
1096 - $pdf_name = md5(time());
1097 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1098 - $pdf_images_dir = $pdf_dir . "images/";
1461 + $pdf_name = md5(time());
1462 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
1463 + $pdf_images_dir = $pdf_dir . 'images/';
1464 + $this->helper->create_dir($pdf_dir);
1465 + $this->helper->create_dir($pdf_images_dir);
1099 1466
1100 - $this->helper->create_dir($pdf_dir);
1101 - $this->helper->create_dir($pdf_images_dir);
1467 + if (!move_uploaded_file($file['tmp_name'], $pdf_dir . $pdf_name . '.pdf')) {
1468 + $this->json_response(
1469 + [
1470 + 'error' => 'Failed to move uploaded file',
1471 + ]
1472 + );
1473 + }
1102 1474
1103 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1104 -
1105 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1106 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1107 -
1108 - if (is_array($pages) && !empty($pages)) {
1109 - foreach ($pages as $page_key => $page) {
1110 -
1111 - $pages[$page_key]['page_id'] = $page_key;
1112 -
1113 - if (isset($page['properties']['background'])) {
1114 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1115 - unset($pages[$page_key]['properties']['background']);
1116 - }
1117 -
1118 - if (isset($page['elements']) && !empty($page['elements'])) {
1119 - foreach ($page['elements'] as $element_key => $element) {
1120 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1121 -
1122 - $image = base64_decode($element['base64']);
1123 - $file_name = basename($element['value']);
1124 -
1125 -//exif_imagetype
1126 - if (!$file_name) {
1127 - $ext = $this->helper->load('image')->get_image_extension($image);
1128 - if ($ext) {
1129 - $file_name = md5(mktime()) . "." . $ext;
1130 - }
1131 - }
1132 -
1133 - if ($file_name) {
1134 - $upload_file = wp_upload_bits($file_name, null, $image);
1135 - if (!$upload_file['error']) {
1136 - $wp_filetype = wp_check_filetype($file_name, null);
1137 - $attachment = array(
1138 - 'post_mime_type' => $wp_filetype['type'],
1139 - 'post_parent' => 0,
1140 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1141 - 'post_content' => '',
1142 - 'post_status' => 'inherit'
1143 - );
1144 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1145 - if (!is_wp_error($attachment_id)) {
1146 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1147 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1148 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1149 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1150 - }
1151 - }
1152 -
1153 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1154 - } else {
1155 - unset($pages[$page_key]['elements'][$element_key]);
1156 - }
1157 - } elseif (isset($element['name']) && $element['name']) {
1158 - $el_value = $extension->auto_map($element['name']);
1159 - if ($el_value !== false) {
1160 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1161 - }
1475 + try {
1476 + $xml_template = [];
1477 + $pages = [];
1478 + if (class_exists('XMLReader')) {
1479 + $reader = new XMLReader();
1480 + if (!$reader->XML($request['file'])) {
1481 + throw new Exception(__('Failed to parse PDF', 'e2pdf'));
1482 + }
1483 + while ($reader->read()) {
1484 + if ($reader->nodeType == XMLReader::ELEMENT) {
1485 + switch ($reader->name) {
1486 + case 'template':
1487 + $template_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1488 + $xml_template = [
1489 + 'width' => (string) $template_node->width,
1490 + 'height' => (string) $template_node->height,
1491 + 'format' => (string) $template_node->format,
1492 + 'compression' => (string) $template_node->compression,
1493 + 'appearance' => (string) $template_node->appearance,
1494 + 'meta_title' => (string) $template_node->meta_title,
1495 + 'meta_subject' => (string) $template_node->meta_subject,
1496 + 'meta_author' => (string) $template_node->meta_author,
1497 + 'meta_keywords' => (string) $template_node->meta_keywords,
1498 + 'lang_code' => (string) $template_node->lang_code,
1499 + 'font' => (string) $template_node->font,
1500 + 'font_size' => (string) $template_node->font_size,
1501 + 'font_color' => (string) $template_node->font_color,
1502 + ];
1503 + break;
1504 + case 'page':
1505 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1506 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1507 + break;
1508 + case 'fonts':
1509 + $fonts_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1510 + foreach ($fonts_node->children() as $xml_font) {
1511 + $this->helper->load('xml')->parse_xml_font($xml_font);
1162 1512 }
1163 - }
1513 + break;
1514 + default:
1515 + break;
1164 1516 }
1165 1517 }
1518 + }
1166 1519
1167 - $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1168 -
1169 - $template = new Model_E2pdf_Template();
1170 -
1171 - if ($template_id) {
1172 - $template->load($template_id);
1173 - if ($template->get('pdf')) {
1174 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1175 - $this->helper->delete_dir($old_pdf_path);
1176 - }
1177 - $template->set('title', $title);
1178 - $template->set('pages', $pages);
1179 - $template->set('pdf', $pdf_name);
1180 - $template->set('width', (String) $xml->template->width);
1181 - $template->set('height', (String) $xml->template->height);
1182 - $template->set('extension', $post_extension);
1183 - $template->set('item', $item);
1184 - $template->set('font', $font ? $font : (String) $xml->template->font);
1185 - $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1186 - $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1187 - } else {
1188 - $template->set('title', $title);
1189 - $template->set('flatten', (String) $xml->template->flatten);
1190 - $template->set('format', (String) $xml->template->format);
1191 - $template->set('compression', (String) $xml->template->compression);
1192 - $template->set('appearance', (String) $xml->template->appearance);
1193 - $template->set('width', (String) $xml->template->width);
1194 - $template->set('height', (String) $xml->template->height);
1195 - $template->set('extension', $post_extension);
1196 - $template->set('item', $item);
1197 - $template->set('dataset_title', "");
1198 - $template->set('button_title', "");
1199 - $template->set('inline', "");
1200 - $template->set('auto', "");
1201 - $template->set('name', "");
1202 - $template->set('password', "");
1203 - $template->set('font', $font ? $font : (String) $xml->template->font);
1204 - $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1205 - $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1206 - $template->set('font_color', (String) $xml->template->font_color);
1207 - $template->set('pages', $pages);
1208 - $template->set('pdf', $pdf_name);
1520 + $reader->close();
1521 + unset($reader);
1522 + } elseif (is_callable('simplexml_load_string')) {
1523 + $xml = simplexml_load_string($request['file'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
1524 + if (isset($xml->pages)) {
1525 + foreach ($xml->pages->page as $page_node) {
1526 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1209 1527 }
1528 + }
1529 + if (isset($xml->template)) {
1530 + $xml_template = [
1531 + 'width' => (string) $xml->template->width,
1532 + 'height' => (string) $xml->template->height,
1533 + 'format' => (string) $xml->template->format,
1534 + 'compression' => (string) $xml->template->compression,
1535 + 'appearance' => (string) $xml->template->appearance,
1536 + 'meta_title' => (string) $xml->template->meta_title,
1537 + 'meta_subject' => (string) $xml->template->meta_subject,
1538 + 'meta_author' => (string) $xml->template->meta_author,
1539 + 'meta_keywords' => (string) $xml->template->meta_keywords,
1540 + 'lang_code' => (string) $xml->template->lang_code,
1541 + 'font' => (string) $xml->template->font,
1542 + 'font_size' => (string) $xml->template->font_size,
1543 + 'font_color' => (string) $xml->template->font_color,
1544 + ];
1545 + }
1546 + if (isset($xml->fonts) && $xml->fonts) {
1547 + foreach ($xml->fonts->children() as $key => $xml_font) {
1548 + $this->helper->load('xml')->parse_xml_font($xml_font);
1549 + }
1550 + }
1551 + }
1210 1552
1211 - if ($xml->fonts) {
1553 + if (empty($pages) || !is_array($pages)) {
1554 + throw new Exception(__('Failed to parse PDF pages', 'e2pdf'));
1555 + }
1212 1556
1213 - $model_e2pdf_font = new Model_E2pdf_Font();
1214 - $fonts = $model_e2pdf_font->get_fonts();
1557 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1215 1558
1216 - foreach ($xml->fonts->children() as $key => $font) {
1217 - $font_title = (String) $font->title;
1218 - $name = (String) $font->name;
1219 - $value = (String) $font->value;
1559 + $template = new Model_E2pdf_Template();
1560 + if ($template_id) {
1561 + $template->load($template_id);
1562 + $template->set('title', $title);
1563 + $template->set('pages', $pages);
1564 + $template->set('pdf', $pdf_name);
1565 + $template->set('width', $xml_template['width']);
1566 + $template->set('height', $xml_template['height']);
1567 + $template->set('extension', $post_extension);
1568 + $template->set('item', $item);
1569 + $template->set('rtl', $rtl);
1570 + $template->set('font', $font ? $font : $xml_template['font']);
1571 + $template->set('font_size', $font_size ? $font_size : $xml_template['font_size']);
1572 + $template->set('line_height', $line_height ? $line_height : $xml_template['font_size']);
1573 + $template->set('text_align', $text_align);
1574 + } else {
1575 + $template->set('title', $title);
1576 + $template->set('flatten', '1');
1577 + $template->set('format', $xml_template['format']);
1578 + $template->set('compression', $xml_template['compression']);
1579 + $template->set('appearance', $xml_template['appearance']);
1580 + $template->set('width', $xml_template['width']);
1581 + $template->set('height', $xml_template['height']);
1582 + $template->set('extension', $post_extension);
1583 + $template->set('item', $item);
1584 + $template->set('dataset_title', '');
1585 + $template->set('button_title', '');
1586 + $template->set('dpdf', '');
1587 + $template->set('attachments', '');
1588 + $template->set('inline', '');
1589 + $template->set('auto', '');
1590 + $template->set('rtl', $rtl);
1591 + $template->set('name', '[e2pdf-dataset]');
1592 + $template->set('savename', '[e2pdf-dataset]');
1593 + $template->set('password', '');
1594 + $template->set('meta_title', $xml_template['meta_title']);
1595 + $template->set('meta_subject', $xml_template['meta_subject']);
1596 + $template->set('meta_author', $xml_template['meta_author']);
1597 + $template->set('meta_keywords', $xml_template['meta_keywords']);
1598 + $template->set('lang_code', $xml_template['lang_code']);
1599 + $template->set('font', $font ? $font : $xml_template['font']);
1600 + $template->set('font_size', $font_size ? $font_size : $xml_template['font_size']);
1601 + $template->set('line_height', $line_height ? $line_height : $xml_template['font_size']);
1602 + $template->set('text_align', $text_align);
1603 + $template->set('font_color', $xml_template['font_color']);
1604 + $template->set('pages', $pages);
1605 + $template->set('pdf', $pdf_name);
1606 + }
1607 + $template->save(true);
1220 1608
1221 - $exist = array_search($font_title, $fonts);
1222 - if (!$exist) {
1223 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
1224 - $f_name = $name;
1225 - } else {
1226 - $i = 0;
1227 - do {
1228 - $f_name = $i . '_' . $name;
1229 - $i++;
1230 - } while (file_exists($this->helper->get('fonts_dir') . $f_name));
1231 - }
1232 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
1233 - }
1234 - }
1235 - }
1236 - $template->save(true);
1609 + if ($item == '-1' && $extension->method('auto_form')) {
1610 + $template = $extension->auto_form($template, $data);
1611 + $template->save(true);
1612 + }
1237 1613
1238 - if ($item == '-1' && $extension->method('add_form')) {
1239 - $template = $extension->add_form($template);
1240 - $template->save(true);
1241 - }
1614 + if (!$template_id) {
1615 + $template->activate();
1616 + }
1242 1617
1243 - if ($activated && !$template->get('activated')) {
1244 - $this->activate_template($template->get('ID'));
1245 - } elseif (!$activated && $template->get('activated')) {
1246 - $this->deactivate_template($template->get('ID'));
1247 - }
1248 -
1249 - $response = array(
1250 - 'redirect' => $this->helper->get_url(array(
1251 - 'page' => 'e2pdf-templates',
1252 - 'action' => 'edit',
1253 - 'id' => $template->get('ID'))
1254 - )
1255 - );
1256 - } else {
1257 - $this->helper->delete_dir($pdf_dir);
1258 - $response = array(
1259 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1260 - );
1261 - }
1262 - } else {
1263 - $response = array(
1264 - 'error' => $request['error'],
1265 - );
1618 + $this->json_response(
1619 + [
1620 + 'redirect' => $this->helper->get_url(
1621 + [
1622 + 'page' => 'e2pdf-templates',
1623 + 'action' => 'edit',
1624 + 'id' => $template->get('ID'),
1625 + ]
1626 + ),
1627 + ]
1628 + );
1629 + } catch (Exception $ex) {
1630 + if (file_exists($pdf_dir)) {
1631 + $this->helper->delete_dir($pdf_dir);
1266 1632 }
1633 + $this->json_response(
1634 + [
1635 + 'error' => $ex->getMessage(),
1636 + ]
1637 + );
1267 1638 }
1268 -
1269 - $this->json_response($response);
1270 1639 }
1271 1640
1272 - /**
1273 - * Upload Template via Ajax
1274 - * action: wp_ajax_e2pdf_upload
1275 - * function: e2pdf_upload
1276 - *
1277 - * @return json
1278 - */
1641 + // ajax reupload
1279 1642 public function ajax_reupload() {
1280 1643
1281 - $error = false;
1644 + if (!wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1645 + $this->json_response(
1646 + [
1647 + 'error' => $this->message('wp_verify_nonce_error'),
1648 + ]
1649 + );
1650 + }
1282 1651
1283 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1284 -
1285 1652 $data = $this->post->get();
1286 -
1287 1653 $new = isset($data['new']) ? $data['new'] : array();
1288 1654 $flush = isset($data['flush']) ? $data['flush'] : array();
1289 1655 $positions = isset($data['positions']) ? $data['positions'] : array();
1290 -
1291 1656 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1292 -
1293 1657 if (!$template_id) {
1294 1658 return false;
1295 1659 }
1296 1660
1297 - $allowed_ext = array(
1298 - 'pdf'
1299 - );
1661 + $file = $this->helper->load('files')->upload($this->files->get('pdf'), ['pdf'], ['application/pdf']);
1662 + if (isset($file['error'])) {
1663 + $this->json_response(
1664 + [
1665 + 'error' => $file['error'],
1666 + ]
1667 + );
1668 + }
1300 1669
1301 - $pdf = $this->files->get('pdf');
1670 + wp_raise_memory_limit('admin');
1671 + if (get_option('e2pdf_api_protocol', '0') == '1' && ($tmp = realpath($file['tmp_name']))) {
1672 + $upload = class_exists('CURLFile') ? new CURLFile($tmp) : '@' . $tmp;
1673 + } else {
1674 + $upload = base64_encode(file_get_contents($file['tmp_name']));
1675 + }
1302 1676
1303 - $name = strtolower($pdf['name']);
1304 - $tmp = $pdf['tmp_name'];
1305 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1677 + $model_e2pdf_api = new Model_E2pdf_Api();
1678 + $model_e2pdf_api->set(
1679 + array(
1680 + 'action' => 'template/upload2',
1681 + 'data' => array(
1682 + 'title' => $file['name'],
1683 + 'pdf' => $upload,
1684 + ),
1685 + )
1686 + );
1687 + $request = $model_e2pdf_api->request();
1306 1688
1307 - if ($pdf['error']) {
1308 - $error = $pdf['error'];
1309 - } elseif (!in_array($ext, $allowed_ext)) {
1310 - $error = __('Incorrect file extension', 'e2pdf');
1311 - } elseif ($pdf['type'] != 'application/pdf') {
1312 - $error = __('Incompatible type', 'e2pdf');
1689 + if (isset($request['error'])) {
1690 + $this->json_response(
1691 + [
1692 + 'error' => $request['error'],
1693 + ]
1694 + );
1313 1695 }
1314 1696
1315 - if ($error) {
1316 - $response = array(
1317 - 'error' => $error,
1697 + $template = new Model_E2pdf_Template();
1698 + if (!$template->load($template_id)) {
1699 + $this->json_response(
1700 + [
1701 + 'error' => __('Failed to load E2Pdf Template', 'e2pdf'),
1702 + ]
1318 1703 );
1319 - } else {
1704 + }
1320 1705
1321 - $model_e2pdf_api = new Model_E2pdf_Api();
1322 - $model_e2pdf_api->set(array(
1323 - 'action' => 'template/upload',
1324 - 'data' => array(
1325 - 'title' => $name,
1326 - 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1327 - )
1328 - ));
1329 - $request = $model_e2pdf_api->request();
1706 + $extension = new Model_E2pdf_Extension();
1707 + if ($template->get('extension') && $template->get('item')) {
1708 + $extension->load($template->get('extension'));
1709 + $extension->set('item', $template->get('item'));
1710 + }
1330 1711
1331 - if (!isset($request['error'])) {
1712 + $pdf_name = md5(time());
1713 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
1714 + $pdf_images_dir = $pdf_dir . 'images/';
1715 + $this->helper->create_dir($pdf_dir);
1716 + $this->helper->create_dir($pdf_images_dir);
1332 1717
1333 - $template = new Model_E2pdf_Template();
1334 - if ($template->load($template_id)) {
1718 + if (!move_uploaded_file($file['tmp_name'], $pdf_dir . $pdf_name . '.pdf')) {
1719 + $this->json_response(
1720 + [
1721 + 'error' => 'Failed to move uploaded file',
1722 + ]
1723 + );
1724 + }
1335 1725
1336 - if ($template->get('pdf')) {
1337 -
1338 - $extension = new Model_E2pdf_Extension();
1339 - if ($template->get('extension') && $template->get('item')) {
1340 - $extension->load($template->get('extension'));
1341 - $extension->set('item', $template->get('item'));
1726 + try {
1727 + $pages = [];
1728 + $pos_pages = [];
1729 + if (class_exists('XMLReader')) {
1730 + $reader = new XMLReader();
1731 + if (!$reader->XML($request['file'])) {
1732 + throw new Exception(__('Failed to parse PDF', 'e2pdf'));
1733 + }
1734 + while ($reader->read()) {
1735 + if ($reader->nodeType == XMLReader::ELEMENT) {
1736 + if ($reader->name == 'page') {
1737 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1738 + $pos_pages[] = (string) $page_node['number'];
1342 1739 }
1343 -
1344 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1345 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1346 -
1347 - foreach ($pages as $page_key => $page) {
1348 - $pages[$page_key]['page_id'] = $page_key;
1740 + }
1741 + }
1742 + $reader->close();
1743 + unset($reader);
1744 + foreach ($positions as $pos_key => $pos_page) {
1745 + if (!in_array($pos_key, $flush)) {
1746 + if ($pos_page == '0') {
1747 + $flush[] = $pos_key;
1748 + } elseif (!in_array($pos_page, $pos_pages, false)) {
1749 + throw new Exception(sprintf(__('Invalid position of %s page', 'e2pdf'), $pos_key));
1349 1750 }
1751 + }
1752 + }
1753 + $reader = new XMLReader();
1754 + $reader->XML($request['file']);
1755 + while ($reader->read()) {
1756 + if ($reader->nodeType == XMLReader::ELEMENT) {
1757 + switch ($reader->name) {
1758 + case 'page':
1759 + $page_node = new SimpleXMLElement($reader->readOuterXML(), LIBXML_PARSEHUGE);
1760 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1761 + break;
1762 + default:
1763 + break;
1764 + }
1765 + }
1766 + }
1767 + $reader->close();
1768 + unset($reader);
1769 + } elseif (is_callable('simplexml_load_string')) {
1770 + $xml = simplexml_load_string($request['file'], 'SimpleXMLElement', LIBXML_PARSEHUGE);
1771 + if (isset($xml->pages)) {
1772 + foreach ($xml->pages->page as $page_node) {
1773 + $pos_pages[] = (string) $page_node['number'];
1774 + }
1775 + }
1776 + foreach ($positions as $pos_key => $pos_page) {
1777 + if (!in_array($pos_key, $flush)) {
1778 + if ($pos_page == '0') {
1779 + $flush[] = $pos_key;
1780 + } elseif (!in_array($pos_page, $pos_pages, false)) {
1781 + throw new Exception(sprintf(__('Invalid position of %s page', 'e2pdf'), $pos_key));
1782 + }
1783 + }
1784 + }
1785 + if (isset($xml->pages)) {
1786 + foreach ($xml->pages->page as $page_node) {
1787 + $this->helper->load('xml')->parse_xml_page($page_node, $pages, $pdf_images_dir, $extension);
1788 + }
1789 + }
1790 + }
1350 1791
1351 - $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1792 + if (empty($pages) || !is_array($pages)) {
1793 + throw new Exception(__('Failed to parse PDF pages', 'e2pdf'));
1794 + }
1352 1795
1353 - $model_e2pdf_element = new Model_E2pdf_Element();
1354 - $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1796 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1355 1797
1356 - $original_pages = $template->get('pages');
1798 + $model_e2pdf_element = new Model_E2pdf_Element();
1799 + $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1800 + $original_pages = $template->get('pages');
1357 1801
1358 - foreach ($positions as $pos_key => $pos_page) {
1359 - if (!in_array($pos_key, $flush)) {
1360 - if (!isset($pages[$pos_page])) {
1361 - $error = sprintf(__("Position of %s page incorrect", 'e2pdf'), $pos_key);
1362 - } elseif ($pages[$pos_page]['properties']['width'] < $original_pages[$pos_key]['properties']['width']) {
1363 - $error = sprintf(__("Width of PDF Page %s can't be less width of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1364 - } elseif ($pages[$pos_page]['properties']['height'] < $original_pages[$pos_key]['properties']['height']) {
1365 - $error = sprintf(__("Height of PDF Page %s can't be less height of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1366 - }
1802 + foreach ($pages as $page_key => $page) {
1803 + if (isset($page['elements']) && !empty($page['elements'])) {
1804 + foreach ($page['elements'] as $element_key => $element) {
1805 + $last_element_id++;
1806 + $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1807 + }
1808 + }
1809 + foreach ($positions as $pos_key => $pos_page) {
1810 + if ($pos_page == $page_key) {
1811 + if (in_array($pos_key, $new)) {
1812 + if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1813 + $elements = $original_pages[$pos_key]['elements'];
1814 + $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1367 1815 }
1368 - }
1369 -
1370 - if (!$error) {
1371 -
1372 - $pdf_name = md5(time());
1373 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1374 - $pdf_images_dir = $pdf_dir . "images/";
1375 -
1376 - $this->helper->create_dir($pdf_dir);
1377 - $this->helper->create_dir($pdf_images_dir);
1378 -
1379 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1380 -
1381 - if (is_array($pages) && !empty($pages)) {
1382 - foreach ($pages as $page_key => $page) {
1383 -
1384 - if (isset($page['properties']['background'])) {
1385 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1386 - unset($pages[$page_key]['properties']['background']);
1387 - }
1388 -
1389 - if (isset($page['elements']) && !empty($page['elements'])) {
1390 - foreach ($page['elements'] as $element_key => $element) {
1391 -
1392 - $last_element_id++;
1393 - $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1394 -
1395 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1396 -
1397 - $image = base64_decode($element['base64']);
1398 - $file_name = basename($element['value']);
1399 -
1400 -//exif_imagetype
1401 - if (!$file_name) {
1402 - $ext = $this->helper->load('image')->get_image_extension($image);
1403 - if ($ext) {
1404 - $file_name = md5(mktime()) . "." . $ext;
1405 - }
1406 - }
1407 -
1408 - if ($file_name) {
1409 - $upload_file = wp_upload_bits($file_name, null, $image);
1410 - if (!$upload_file['error']) {
1411 - $wp_filetype = wp_check_filetype($file_name, null);
1412 - $attachment = array(
1413 - 'post_mime_type' => $wp_filetype['type'],
1414 - 'post_parent' => 0,
1415 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1416 - 'post_content' => '',
1417 - 'post_status' => 'inherit'
1418 - );
1419 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1420 - if (!is_wp_error($attachment_id)) {
1421 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1422 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1423 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1424 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1425 - }
1426 - }
1427 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1428 - } else {
1429 - unset($pages[$page_key]['elements'][$element_key]);
1430 - }
1431 - } elseif (isset($element['name']) && $element['name']) {
1432 - $el_value = $extension->auto_map($element['name']);
1433 - if ($el_value !== false) {
1434 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1435 - }
1436 - }
1437 - }
1438 - }
1439 -
1440 -
1441 - foreach ($positions as $pos_key => $pos_page) {
1442 - if ($pos_page == $page_key) {
1443 - if (in_array($pos_key, $new)) {
1444 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1445 - $elements = $original_pages[$pos_key]['elements'];
1446 - $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1447 - }
1448 - } else {
1449 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1450 - $elements = $original_pages[$pos_key]['elements'];
1451 - $pages[$page_key]['elements'] = $elements;
1452 - } else {
1453 - $pages[$page_key]['elements'] = array();
1454 - }
1455 - }
1456 - }
1457 - }
1458 - }
1459 -
1460 - $pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1461 - $this->helper->delete_dir($pdf_path);
1462 -
1463 - $template->set('pdf', $pdf_name);
1464 - $template->set('pages', $pages);
1465 - $template->save(true);
1466 -
1467 - $response = array(
1468 - 'redirect' => $this->helper->get_url(array(
1469 - 'page' => 'e2pdf-templates',
1470 - 'action' => 'edit',
1471 - 'id' => $template->get('ID'))
1472 - )
1473 - );
1816 + } else {
1817 + if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1818 + $elements = $original_pages[$pos_key]['elements'];
1819 + $pages[$page_key]['elements'] = $elements;
1474 1820 } else {
1475 - $this->helper->delete_dir($pdf_dir);
1476 - $response = array(
1477 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1478 - );
1821 + $pages[$page_key]['elements'] = array();
1479 1822 }
1480 - } else {
1481 - $response = array(
1482 - 'error' => $error,
1483 - );
1484 1823 }
1824 + if (isset($original_pages[$pos_key]['actions'])) {
1825 + $pages[$page_key]['actions'] = $original_pages[$pos_key]['actions'];
1826 + }
1485 1827 }
1486 1828 }
1487 - } else {
1488 - $response = array(
1489 - 'error' => $request['error'],
1490 - );
1491 1829 }
1830 +
1831 + $template->set('pdf', $pdf_name);
1832 + $template->set('pages', $pages);
1833 + $template->save(true);
1834 +
1835 + $this->json_response(
1836 + [
1837 + 'redirect' => $this->helper->get_url(
1838 + array(
1839 + 'page' => 'e2pdf-templates',
1840 + 'action' => 'edit',
1841 + 'id' => $template->get('ID'),
1842 + )
1843 + ),
1844 + ]
1845 + );
1846 + } catch (Exception $ex) {
1847 + if (file_exists($pdf_dir)) {
1848 + $this->helper->delete_dir($pdf_dir);
1849 + }
1850 + $this->json_response(
1851 + [
1852 + 'error' => $ex->getMessage(),
1853 + ]
1854 + );
1492 1855 }
1493 -
1494 - $this->json_response($response);
1495 1856 }
1496 1857
1497 - /**
1498 - * Auto Generation of Template
1499 - * action: wp_ajax_e2pdf_auto
1500 - * function: e2pdf_auto
1501 - *
1502 - * @return json
1503 - */
1858 + // ajax auto
1504 1859 public function ajax_auto() {
1505 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1506 - $data = $this->post->get('data');
1860 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1861 + $data = $this->post->get('data');
1507 1862
1508 - $extension = $data['extension'];
1509 - $item = $data['item'];
1863 + $extension = $data['extension'];
1864 + $item = isset($data['item']) ? $data['item'] : '';
1865 + $item1 = isset($data['item1']) ? $data['item1'] : '';
1866 + $item2 = isset($data['item2']) ? $data['item2'] : '';
1867 + $font_size = isset($data['font_size']) ? $data['font_size'] : '14';
1868 + $line_height = isset($data['line_height']) ? $data['line_height'] : '14';
1510 1869
1511 - if (!$extension || !$item) {
1512 - return;
1513 - }
1870 + if (!$extension || !$item) {
1871 + return;
1872 + }
1514 1873
1515 - $model_e2pdf_extension = new Model_E2pdf_Extension();
1516 - $model_e2pdf_extension->load($extension);
1517 - $model_e2pdf_extension->set('item', $item);
1874 + $model_e2pdf_extension = new Model_E2pdf_Extension();
1875 + $model_e2pdf_extension->load($extension);
1876 + $model_e2pdf_extension->set('item', $item);
1877 + $model_e2pdf_extension->set('item1', $item1);
1878 + $model_e2pdf_extension->set('item2', $item2);
1879 + $model_e2pdf_extension->set('font_size', $font_size);
1880 + $model_e2pdf_extension->set('line_height', $line_height);
1518 1881
1519 - if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1520 - $content = $model_e2pdf_extension->auto();
1882 + if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1883 + $content = $model_e2pdf_extension->auto();
1884 + } else {
1885 + $content = array();
1886 + }
1887 +
1888 + $response = array(
1889 + 'content' => $content,
1890 + );
1521 1891 } else {
1522 - $content = array();
1892 + $response['error'] = $this->message('wp_verify_nonce_error');
1523 1893 }
1524 -
1525 - $response = array(
1526 - 'content' => $content,
1527 - );
1528 1894 $this->json_response($response);
1529 1895 }
1530 1896
1897 + // ajax activate template
1531 1898 public function ajax_activate_template() {
1532 -
1533 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1534 - $data = $this->post->get('data');
1535 -
1536 - $id = $data['id'];
1537 -
1538 - if (!$id) {
1539 - return;
1540 - }
1541 -
1542 - $request = $this->activate_template($id);
1543 - if (isset($request['error'])) {
1544 - $response = array(
1545 - 'error' => $request['error'],
1546 - );
1899 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1900 + $data = $this->post->get('data');
1901 + $id = $data['id'];
1902 + if (!$id) {
1903 + return;
1904 + }
1905 + $request = $this->activate_template($id);
1906 + if (isset($request['error'])) {
1907 + $response = array(
1908 + 'error' => $request['error'],
1909 + );
1910 + } else {
1911 + $response = array(
1912 + 'content' => 'activated',
1913 + );
1914 + }
1547 1915 } else {
1548 - $response = array(
1549 - 'content' => true,
1550 - );
1916 + $response['error'] = $this->message('wp_verify_nonce_error');
1551 1917 }
1552 -
1553 -
1554 1918 $this->json_response($response);
1555 1919 }
1556 1920
1921 + // ajax deactivaate template
1557 1922 public function ajax_deactivate_template() {
1558 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1559 - $data = $this->post->get('data');
1560 -
1561 - $id = $data['id'];
1562 -
1563 - if (!$id) {
1564 - return;
1923 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1924 + $data = $this->post->get('data');
1925 + $id = $data['id'];
1926 + if (!$id) {
1927 + return;
1928 + }
1929 + $request = $this->deactivate_template($id);
1930 + if (isset($request['error'])) {
1931 + $response = array(
1932 + 'error' => $request['error'],
1933 + );
1934 + } else {
1935 + $response = array(
1936 + 'content' => 'deactivated',
1937 + );
1938 + }
1939 + } else {
1940 + $response['error'] = $this->message('wp_verify_nonce_error');
1565 1941 }
1942 + $this->json_response($response);
1943 + }
1566 1944
1567 - $request = $this->deactivate_template($id);
1568 - if (isset($request['error'])) {
1569 - $response = array(
1570 - 'error' => $request['error'],
1945 + // ajax email
1946 + public function ajax_email() {
1947 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1948 + $data = $this->post->get('data');
1949 + $email = isset($data['email']) ? trim($data['email']) : '';
1950 + $email_code = isset($data['email_code']) ? trim($data['email_code']) : '';
1951 + $model_e2pdf_api = new Model_E2pdf_Api();
1952 + $model_e2pdf_api->set(
1953 + array(
1954 + 'action' => 'common/email',
1955 + 'data' => array(
1956 + 'email' => $email,
1957 + 'email_code' => $email_code,
1958 + 'email_confirm' => isset($data['email_code']),
1959 + ),
1960 + )
1571 1961 );
1962 + $request = $model_e2pdf_api->request();
1963 + if (isset($request['error'])) {
1964 + if ($request['error'] === 'incorrect_email') {
1965 + $response = array(
1966 + 'error' => __('Invalid E-mail address format', 'e2pdf'),
1967 + );
1968 + } elseif ($request['error'] === 'incorrect_code') {
1969 + $response = array(
1970 + 'error' => __('Invalid Confirmation Code', 'e2pdf'),
1971 + );
1972 + } else {
1973 + $response = array(
1974 + 'error' => $request['error'],
1975 + );
1976 + }
1977 + } elseif (isset($request['success'])) {
1978 + $response = array(
1979 + 'content' => $request['success'],
1980 + );
1981 + if ($request['success'] == 'subscribed') {
1982 + update_option('e2pdf_email', $email);
1983 + }
1984 + }
1572 1985 } else {
1573 - $response = array(
1574 - 'content' => true,
1575 - );
1986 + $response['error'] = $this->message('wp_verify_nonce_error');
1576 1987 }
1577 1988 $this->json_response($response);
1578 1989 }
1579 1990
1580 - /**
1581 - * Move template to trash
1582 - *
1583 - * @param int $id - ID of template
1584 - */
1991 + // trash template
1585 1992 public function trash_template($id = false) {
1586 -
1587 1993 $id = (int) $id;
1588 -
1589 - if (!$id) {
1590 - return false;
1994 + $template = new Model_E2pdf_Template();
1995 + if ($id && $template->load($id, false)) {
1996 + $template->set('trash', '1');
1997 + $template->update(array('trash'));
1998 + $this->deactivate_template($template->get('ID'));
1999 + return true;
1591 2000 }
1592 - $template = new Model_E2pdf_Template();
1593 - $template->load($id);
1594 - $template->set('trash', '1');
1595 - $template->save();
2001 + return false;
1596 2002 }
1597 2003
1598 - /**
1599 - * Delete template
1600 - *
1601 - * @param int $id - ID of template
1602 - */
2004 + // delete template
1603 2005 public function delete_template($id = false) {
1604 -
1605 2006 $id = (int) $id;
1606 -
1607 - if (!$id) {
1608 - return false;
2007 + $template = new Model_E2pdf_Template();
2008 + if ($id && $template->load($id)) {
2009 + $this->deactivate_template($template->get('ID'));
2010 + $template->delete();
2011 + return true;
1609 2012 }
1610 -
1611 - $template = new Model_E2pdf_Template();
1612 - $template->load($id);
1613 - $this->deactivate_template($template->get('ID'));
1614 - $template->delete();
2013 + return false;
1615 2014 }
1616 2015
1617 - /**
1618 - * Restore template
1619 - *
1620 - * @param int $id - ID of template
1621 - */
2016 + // restore template
1622 2017 public function restore_template($id = false) {
1623 -
1624 2018 $id = (int) $id;
1625 -
1626 - if (!$id) {
1627 - return false;
2019 + $template = new Model_E2pdf_Template();
2020 + if ($id && $template->load($id, false)) {
2021 + $template->set('trash', '0');
2022 + $template->update(array('trash'));
2023 + return true;
1628 2024 }
1629 - $template = new Model_E2pdf_Template();
1630 - $template->load($id);
1631 - $template->set('trash', '0');
1632 - $template->save();
2025 + return false;
1633 2026 }
1634 2027
1635 - /**
1636 - * Duplicate template
1637 - *
1638 - * @param int $id - ID of template
1639 - */
2028 + // duplicate template
1640 2029 public function duplicate_template($id = false) {
1641 2030
1642 2031 $id = (int) $id;
1643 2032
1644 - if (!$id) {
1645 - return false;
1646 - }
1647 -
1648 2033 $template = new Model_E2pdf_Template();
1649 - $template->load($id);
2034 + if ($id && $template->load($id)) {
2035 + $title = $template->get('title') . ' ' . __('(Copy)', 'e2pdf');
2036 + $template->set('ID', false);
2037 + $template->set('title', $title);
2038 + $template->set('uid', '');
2039 + $template->set('activated', '0');
2040 + if ($template->get('pdf')) {
2041 + $pdf_name = md5(time());
2042 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
2043 + $pdf_images_dir = $pdf_dir . 'images/';
1650 2044
1651 - $title = $template->get('title') . " " . __('(Copy)', 'e2pdf');
1652 - $template->set('ID', false);
1653 - $template->set('uid', '');
1654 - $template->set('title', $title);
1655 - $template->set('activated', '0');
2045 + $this->helper->create_dir($pdf_dir);
2046 + $this->helper->create_dir($pdf_images_dir);
1656 2047
1657 - if ($template->get('pdf')) {
1658 - $pdf_name = md5(time());
1659 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1660 - $pdf_images_dir = $pdf_dir . "images/";
1661 -
1662 - $this->helper->create_dir($pdf_dir);
1663 - $this->helper->create_dir($pdf_images_dir);
1664 -
1665 - if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")) {
1666 - $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/*");
1667 - foreach ($images as $image) {
1668 - copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
2048 + if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf')) {
2049 + $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . '/images/*');
2050 + foreach ($images as $image) {
2051 + copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
2052 + }
2053 + copy($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf', $this->helper->get('pdf_dir') . $pdf_name . '/' . $pdf_name . '.pdf');
2054 + $template->set('pdf', $pdf_name);
1669 2055 }
1670 - copy($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf", $this->helper->get('pdf_dir') . $pdf_name . "/" . $pdf_name . ".pdf");
1671 - $template->set('pdf', $pdf_name);
1672 2056 }
2057 + $template->save(true);
2058 + return true;
1673 2059 }
1674 -
1675 - $template->save(true);
2060 + return false;
1676 2061 }
1677 2062
1678 - /**
1679 - * Activate template
1680 - *
1681 - * @param int $id - ID of template
1682 - */
2063 + // activate template
1683 2064 public function activate_template($id = false) {
1684 -
1685 2065 $id = (int) $id;
1686 -
1687 - if (!$id) {
1688 - return false;
1689 - }
1690 -
1691 2066 $template = new Model_E2pdf_Template();
1692 - $template->load($id);
1693 -
1694 - $model_e2pdf_api = new Model_E2pdf_Api();
1695 - $model_e2pdf_api->set(array(
1696 - 'action' => 'template/activate',
1697 - 'data' => array(
1698 - 'template_id' => $template->get('ID'),
1699 - 'template_uid' => $template->get('uid'),
1700 - 'template_title' => $template->get('title')
1701 - )
1702 - ));
1703 - $request = $model_e2pdf_api->request();
1704 -
1705 - if (!isset($request['error'])) {
1706 - $template->set('activated', 1);
1707 - $template->set('uid', $request['template_uid']);
1708 - $template->save();
2067 + if ($id && $template->load($id, false)) {
2068 + return $template->activate();
2069 + } else {
2070 + return array(
2071 + 'error' => __('Something went wrong!', 'e2pdf'),
2072 + );
1709 2073 }
1710 -
1711 - return $request;
1712 2074 }
1713 2075
1714 - /**
1715 - * Deactivate template
1716 - *
1717 - * @param int $id - ID of template
1718 - */
2076 + // deactivate template
1719 2077 public function deactivate_template($id = false) {
1720 -
1721 2078 $id = (int) $id;
1722 -
1723 - if (!$id) {
1724 - return false;
1725 - }
1726 -
1727 2079 $template = new Model_E2pdf_Template();
1728 - $template->load($id);
1729 -
1730 - $model_e2pdf_api = new Model_E2pdf_Api();
1731 - $model_e2pdf_api->set(array(
1732 - 'action' => 'template/deactivate',
1733 - 'data' => array(
1734 - 'template_id' => $template->get('ID'),
1735 - 'template_uid' => $template->get('uid'),
1736 - )
1737 - ));
1738 - $request = $model_e2pdf_api->request();
1739 -
1740 - if (!isset($request['error'])) {
1741 - $template->set('activated', 0);
1742 - $template->set('uid', '');
1743 - $template->save();
2080 + if ($id && $template->load($id, false)) {
2081 + return $template->deactivate();
2082 + } else {
2083 + return array(
2084 + 'error' => __('Something went wrong!', 'e2pdf'),
2085 + );
1744 2086 }
1745 -
1746 - return $request;
1747 2087 }
1748 2088
1749 - /**
1750 - * Get templates list
1751 - *
1752 - * @param array() $filters - Array of filter/order conditions
1753 - * @param bool $count - Return number of templates
1754 - *
1755 - * @return mixed - IF $count - int ELSE array()
1756 - */
2089 + // get templates list
1757 2090 public function get_templates_list($filters = array(), $count = false) {
1758 2091 global $wpdb;
2092 +
1759 2093 $model_e2pdf_template = new Model_E2pdf_Template();
1760 -
1761 2094 $condition = array();
1762 2095 if (isset($filters['status']) && $filters['status'] == 'trash') {
1763 2096 $condition = array(
1764 2097 'trash' => array(
@@ -1763,10 +2096,10 @@
1763 2096 $condition = array(
1764 2097 'trash' => array(
1765 2098 'condition' => '=',
1766 2099 'value' => '1',
1767 - 'type' => '%d'
1768 - )
2100 + 'type' => '%d',
2101 + ),
1769 2102 );
1770 2103 } else {
1771 2104 $condition = array(
1772 2105 'trash' => array(
@@ -1771,10 +2104,10 @@
1771 2104 $condition = array(
1772 2105 'trash' => array(
1773 2106 'condition' => '<>',
1774 2107 'value' => '1',
1775 - 'type' => '%d'
1776 - )
2108 + 'type' => '%d',
2109 + ),
1777 2110 );
1778 2111 }
1779 2112
1780 2113 if (isset($filters['s']) && $filters['s']) {
@@ -1780,18 +2113,27 @@
1780 2113 if (isset($filters['s']) && $filters['s']) {
1781 2114 $condition['title'] = array(
1782 2115 'condition' => 'LIKE',
1783 2116 'value' => '%%' . $filters['s'] . '%%',
1784 - 'type' => '%s'
2117 + 'type' => '%s',
2118 + 'or' => array(
2119 + array(
2120 + 'ID' => array(
2121 + 'condition' => 'LIKE',
2122 + 'value' => '%%' . $filters['s'] . '%%',
2123 + 'type' => '%s',
2124 + ),
2125 + ),
2126 + ),
1785 2127 );
1786 2128 }
1787 2129
1788 -
1789 2130 $order_condition = array();
1790 - if (isset($filters['orderby']) && isset($filters['order'])) {
2131 + $sortable = array('id', 'title', 'updated_at');
2132 + if (isset($filters['orderby']) && in_array($filters['orderby'], $sortable) && isset($filters['order'])) {
1791 2133 $order_condition = array(
1792 2134 'orderby' => $filters['orderby'],
1793 - 'order' => $filters['order'],
2135 + 'order' => $filters['order'] == 'asc' ? 'asc' : 'desc',
1794 2136 );
1795 2137 } else {
1796 2138 $order_condition = array(
1797 2139 'orderby' => 'id',
@@ -1798,18 +2140,16 @@
1798 2140 'order' => 'desc',
1799 2141 );
1800 2142 }
1801 2143
1802 -
1803 2144 $limit_condition = array();
1804 2145 if (!$count) {
1805 2146 $paged = isset($filters['paged']) && $filters['paged'] ? $filters['paged'] : '0';
1806 2147 $paged = (int) $paged <= 0 ? 1 : (int) $paged;
1807 - $per_page = get_option('e2pdf_templates_screen_per_page') ? get_option('e2pdf_templates_screen_per_page') : '20';
1808 -
2148 + $per_page = (int) get_option('e2pdf_templates_screen_per_page', '20');
1809 2149 $limit_condition = array(
1810 - 'limit' => $per_page,
1811 - 'offset' => (int) ($paged - 1) * $per_page
2150 + 'limit' => (int) $per_page,
2151 + 'offset' => (int) ($paged - 1) * $per_page,
1812 2152 );
1813 2153 }
1814 2154
1815 2155 $where = $this->helper->load('db')->prepare_where($condition);
@@ -1814,11 +2154,11 @@
1814 2154
1815 2155 $where = $this->helper->load('db')->prepare_where($condition);
1816 2156 $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1817 2157 $limit = $this->helper->load('db')->prepare_limit($limit_condition);
2158 + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
2159 + $tpls = $wpdb->get_results($wpdb->prepare('SELECT `ID` FROM `' . $model_e2pdf_template->get_table() . '`' . $where['sql'] . $orderby . $limit . '', $where['filter']));
1818 2160
1819 - $tpls = $wpdb->get_results($wpdb->prepare("SELECT `ID` FROM " . $model_e2pdf_template->get_table() . $where['sql'] . $orderby . $limit . "", $where['filter']));
1820 -
1821 2161 if ($count) {
1822 2162 return count($tpls);
1823 2163 }
1824 2164
@@ -1827,32 +2167,30 @@
1827 2167 $template = new Model_E2pdf_Template();
1828 2168 $template->load($tpl->ID, false);
1829 2169 if (is_array($this->helper->get('license')->get('activated_templates'))) {
1830 2170 if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1831 - $this->deactivate_template($template->get('ID'));
2171 + $template->deactivate();
1832 2172 } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1833 - $this->activate_template($template->get('ID'));
2173 + $template->activate();
1834 2174 }
1835 2175 }
1836 -
1837 2176 $templates[] = $template;
1838 2177 }
1839 -
1840 2178 return $templates;
1841 2179 }
1842 2180
1843 - /**
1844 - * Get paper sizes list
1845 - *
1846 - * @return array() - Sizes list
1847 - */
2181 + // get sizes list
1848 2182 public function get_sizes_list($size = false, $attr = false) {
1849 2183
1850 2184 $sizes = array(
1851 - 'A4' => array(
2185 + 'A4 (PORTRAIT)' => array(
1852 2186 'width' => '595',
1853 2187 'height' => '842',
1854 2188 ),
2189 + 'A4 (LANDSCAPE)' => array(
2190 + 'width' => '842',
2191 + 'height' => '595',
2192 + ),
1855 2193 'LETTER' => array(
1856 2194 'width' => '612',
1857 2195 'height' => '792',
1858 2196 ),
@@ -1887,15 +2225,10 @@
1887 2225 return false;
1888 2226 }
1889 2227 }
1890 2228
1891 - /**
1892 - * Get fonts list
1893 - *
1894 - * @return array() - Fonts list
1895 - */
2229 + // get fonts
1896 2230 public function get_fonts($with_path = false) {
1897 -
1898 2231 $model_e2pdf_font = new Model_E2pdf_Font();
1899 2232 $fonts = $model_e2pdf_font->get_fonts();
1900 2233
1901 2234 if ($with_path) {
@@ -1904,9 +2237,9 @@
1904 2237 'key' => $value,
1905 2238 'subfield' => array(
1906 2239 'path' => $key,
1907 2240 ),
1908 - 'value' => $value
2241 + 'value' => $value,
1909 2242 );
1910 2243 }
1911 2244 }
1912 2245
@@ -1912,43 +2245,324 @@
1912 2245
1913 2246 return $fonts;
1914 2247 }
1915 2248
1916 - /**
1917 - * Get font sizes list
1918 - *
1919 - * @return array() - Font sizes list
1920 - */
2249 + // get font sizes
1921 2250 public function get_font_sizes() {
1922 -
2251 + $max_font_size = apply_filters('e2pdf_controller_templates_max_font_size', 512);
1923 2252 $sizes = array();
1924 - for ($i = 1; $i <= 72; $i++) {
1925 - $sizes[$i] = $i . 'px';
2253 + for ($i = 1; $i <= $max_font_size; $i++) {
2254 + $sizes[$i] = $i;
1926 2255 }
1927 2256 return $sizes;
1928 2257 }
1929 2258
1930 - /**
1931 - * Get line heights list
1932 - *
1933 - * @return array() - Line heights list
1934 - */
2259 + // get line heights
1935 2260 public function get_line_heights() {
1936 2261
2262 + $max_line_height = apply_filters('e2pdf_controller_templates_max_line_height', 512);
1937 2263 $line_heights = array();
1938 - for ($i = 1; $i <= 512; $i++) {
1939 - $line_heights[$i] = $i . 'px';
2264 + for ($i = 1; $i <= $max_line_height; $i++) {
2265 + $line_heights[$i] = $i;
1940 2266 }
1941 2267 return $line_heights;
1942 2268 }
1943 2269
1944 - /**
1945 - * Load metaboxes on template edit/create action
1946 - */
2270 + // get lang codes
2271 + public function get_lang_codes() {
2272 + return array(
2273 + '' => '',
2274 + 'aa' => 'aa',
2275 + 'ab' => 'ab',
2276 + 'ae' => 'ae',
2277 + 'af' => 'af',
2278 + 'ak' => 'ak',
2279 + 'am' => 'am',
2280 + 'an' => 'an',
2281 + 'ar' => 'ar',
2282 + 'ar-AE' => 'ar-AE',
2283 + 'ar-BH' => 'ar-BH',
2284 + 'ar-DZ' => 'ar-DZ',
2285 + 'ar-EG' => 'ar-EG',
2286 + 'ar-IQ' => 'ar-IQ',
2287 + 'ar-JO' => 'ar-JO',
2288 + 'ar-KW' => 'ar-KW',
2289 + 'ar-LB' => 'ar-LB',
2290 + 'ar-LY' => 'ar-LY',
2291 + 'ar-MA' => 'ar-MA',
2292 + 'ar-OM' => 'ar-OM',
2293 + 'ar-QA' => 'ar-QA',
2294 + 'ar-SA' => 'ar-SA',
2295 + 'ar-SY' => 'ar-SY',
2296 + 'ar-TN' => 'ar-TN',
2297 + 'ar-YE' => 'ar-YE',
2298 + 'as' => 'as',
2299 + 'av' => 'av',
2300 + 'ay' => 'ay',
2301 + 'az' => 'az',
2302 + 'ba' => 'ba',
2303 + 'be' => 'be',
2304 + 'bg' => 'bg',
2305 + 'bh' => 'bh',
2306 + 'bi' => 'bi',
2307 + 'bm' => 'bm',
2308 + 'bn' => 'bn',
2309 + 'bo' => 'bo',
2310 + 'br' => 'br',
2311 + 'bs' => 'bs',
2312 + 'ca' => 'ca',
2313 + 'ce' => 'ce',
2314 + 'ch' => 'ch',
2315 + 'co' => 'co',
2316 + 'cr' => 'cr',
2317 + 'cs' => 'cs',
2318 + 'cu' => 'cu',
2319 + 'cv' => 'cv',
2320 + 'cy' => 'cy',
2321 + 'da' => 'da',
2322 + 'de' => 'de',
2323 + 'de-AT' => 'de-AT',
2324 + 'de-CH' => 'de-CH',
2325 + 'de-DE' => 'de-DE',
2326 + 'de-LI' => 'de-LI',
2327 + 'de-LU' => 'de-LU',
2328 + 'div' => 'div',
2329 + 'dv' => 'dv',
2330 + 'dz' => 'dz',
2331 + 'ee' => 'ee',
2332 + 'el' => 'el',
2333 + 'en' => 'en',
2334 + 'en-AU' => 'en-AU',
2335 + 'en-BZ' => 'en-BZ',
2336 + 'en-CA' => 'en-CA',
2337 + 'en-CB' => 'en-CB',
2338 + 'en-GB' => 'en-GB',
2339 + 'en-IE' => 'en-IE',
2340 + 'en-JM' => 'en-JM',
2341 + 'en-NZ' => 'en-NZ',
2342 + 'en-PH' => 'en-PH',
2343 + 'en-TT' => 'en-TT',
2344 + 'en-US' => 'en-US',
2345 + 'en-ZA' => 'en-ZA',
2346 + 'en-ZW' => 'en-ZW',
2347 + 'eo' => 'eo',
2348 + 'es' => 'es',
2349 + 'es-AR' => 'es-AR',
2350 + 'es-BO' => 'es-BO',
2351 + 'es-CL' => 'es-CL',
2352 + 'es-CO' => 'es-CO',
2353 + 'es-CR' => 'es-CR',
2354 + 'es-DO' => 'es-DO',
2355 + 'es-EC' => 'es-EC',
2356 + 'es-ES' => 'es-ES',
2357 + 'es-GT' => 'es-GT',
2358 + 'es-HN' => 'es-HN',
2359 + 'es-MX' => 'es-MX',
2360 + 'es-NI' => 'es-NI',
2361 + 'es-PA' => 'es-PA',
2362 + 'es-PE' => 'es-PE',
2363 + 'es-PR' => 'es-PR',
2364 + 'es-PY' => 'es-PY',
2365 + 'es-SV' => 'es-SV',
2366 + 'es-US' => 'es-US',
2367 + 'es-UY' => 'es-UY',
2368 + 'es-VE' => 'es-VE',
2369 + 'et' => 'et',
2370 + 'eu' => 'eu',
2371 + 'fa' => 'fa',
2372 + 'ff' => 'ff',
2373 + 'fi' => 'fi',
2374 + 'fj' => 'fj',
2375 + 'fo' => 'fo',
2376 + 'fr' => 'fr',
2377 + 'fr-BE' => 'fr-BE',
2378 + 'fr-CA' => 'fr-CA',
2379 + 'fr-CH' => 'fr-CH',
2380 + 'fr-FR' => 'fr-FR',
2381 + 'fr-LU' => 'fr-LU',
2382 + 'fr-MC' => 'fr-MC',
2383 + 'fy' => 'fy',
2384 + 'ga' => 'ga',
2385 + 'gd' => 'gd',
2386 + 'gl' => 'gl',
2387 + 'gn' => 'gn',
2388 + 'gu' => 'gu',
2389 + 'gv' => 'gv',
2390 + 'ha' => 'ha',
2391 + 'he' => 'he',
2392 + 'hi' => 'hi',
2393 + 'ho' => 'ho',
2394 + 'hr' => 'hr',
2395 + 'hr-BA' => 'hr-BA',
2396 + 'hr-HR' => 'hr-HR',
2397 + 'ht' => 'ht',
2398 + 'hu' => 'hu',
2399 + 'hy' => 'hy',
2400 + 'hz' => 'hz',
2401 + 'ia' => 'ia',
2402 + 'id' => 'id',
2403 + 'ie' => 'ie',
2404 + 'ig' => 'ig',
2405 + 'ii' => 'ii',
2406 + 'ik' => 'ik',
2407 + 'in' => 'in',
2408 + 'io' => 'io',
2409 + 'is' => 'is',
2410 + 'it' => 'it',
2411 + 'it-CH' => 'it-CH',
2412 + 'it-IT' => 'it-IT',
2413 + 'iu' => 'iu',
2414 + 'iw' => 'iw',
2415 + 'ja' => 'ja',
2416 + 'ji' => 'ji',
2417 + 'jv' => 'jv',
2418 + 'jw' => 'jw',
2419 + 'ka' => 'ka',
2420 + 'kg' => 'kg',
2421 + 'ki' => 'ki',
2422 + 'kj' => 'kj',
2423 + 'kk' => 'kk',
2424 + 'kl' => 'kl',
2425 + 'km' => 'km',
2426 + 'kn' => 'kn',
2427 + 'ko' => 'ko',
2428 + 'kok' => 'kok',
2429 + 'kr' => 'kr',
2430 + 'ks' => 'ks',
2431 + 'ku' => 'ku',
2432 + 'kv' => 'kv',
2433 + 'kw' => 'kw',
2434 + 'ky' => 'ky',
2435 + 'kz' => 'kz',
2436 + 'la' => 'la',
2437 + 'lb' => 'lb',
2438 + 'lg' => 'lg',
2439 + 'li' => 'li',
2440 + 'ln' => 'ln',
2441 + 'lo' => 'lo',
2442 + 'ls' => 'ls',
2443 + 'lt' => 'lt',
2444 + 'lu' => 'lu',
2445 + 'lv' => 'lv',
2446 + 'mg' => 'mg',
2447 + 'mh' => 'mh',
2448 + 'mi' => 'mi',
2449 + 'mk' => 'mk',
2450 + 'ml' => 'ml',
2451 + 'mn' => 'mn',
2452 + 'mo' => 'mo',
2453 + 'mr' => 'mr',
2454 + 'ms' => 'ms',
2455 + 'ms-BN' => 'ms-BN',
2456 + 'ms-MY' => 'ms-MY',
2457 + 'mt' => 'mt',
2458 + 'my' => 'my',
2459 + 'na' => 'na',
2460 + 'nb' => 'nb',
2461 + 'nd' => 'nd',
2462 + 'ne' => 'ne',
2463 + 'ng' => 'ng',
2464 + 'nl' => 'nl',
2465 + 'nl-BE' => 'nl-BE',
2466 + 'nl-NL' => 'nl-NL',
2467 + 'nn' => 'nn',
2468 + 'no' => 'no',
2469 + 'nr' => 'nr',
2470 + 'ns' => 'ns',
2471 + 'nv' => 'nv',
2472 + 'ny' => 'ny',
2473 + 'oc' => 'oc',
2474 + 'oj' => 'oj',
2475 + 'om' => 'om',
2476 + 'or' => 'or',
2477 + 'os' => 'os',
2478 + 'pa' => 'pa',
2479 + 'pi' => 'pi',
2480 + 'pl' => 'pl',
2481 + 'ps' => 'ps',
2482 + 'pt' => 'pt',
2483 + 'pt-BR' => 'pt-BR',
2484 + 'pt-PT' => 'pt-PT',
2485 + 'qu' => 'qu',
2486 + 'qu-BO' => 'qu-BO',
2487 + 'qu-EC' => 'qu-EC',
2488 + 'qu-PE' => 'qu-PE',
2489 + 'rm' => 'rm',
2490 + 'rn' => 'rn',
2491 + 'ro' => 'ro',
2492 + 'ru' => 'ru',
2493 + 'rw' => 'rw',
2494 + 'sa' => 'sa',
2495 + 'sb' => 'sb',
2496 + 'sc' => 'sc',
2497 + 'sd' => 'sd',
2498 + 'se' => 'se',
2499 + 'se-FI' => 'se-FI',
2500 + 'se-NO' => 'se-NO',
2501 + 'se-SE' => 'se-SE',
2502 + 'sg' => 'sg',
2503 + 'sh' => 'sh',
2504 + 'si' => 'si',
2505 + 'sk' => 'sk',
2506 + 'sl' => 'sl',
2507 + 'sm' => 'sm',
2508 + 'sn' => 'sn',
2509 + 'so' => 'so',
2510 + 'sq' => 'sq',
2511 + 'sr' => 'sr',
2512 + 'sr-BA' => 'sr-BA',
2513 + 'sr-SP' => 'sr-SP',
2514 + 'ss' => 'ss',
2515 + 'st' => 'st',
2516 + 'su' => 'su',
2517 + 'sv' => 'sv',
2518 + 'sv-FI' => 'sv-FI',
2519 + 'sv-SE' => 'sv-SE',
2520 + 'sw' => 'sw',
2521 + 'sx' => 'sx',
2522 + 'syr' => 'syr',
2523 + 'ta' => 'ta',
2524 + 'te' => 'te',
2525 + 'tg' => 'tg',
2526 + 'th' => 'th',
2527 + 'ti' => 'ti',
2528 + 'tk' => 'tk',
2529 + 'tl' => 'tl',
2530 + 'tn' => 'tn',
2531 + 'to' => 'to',
2532 + 'tr' => 'tr',
2533 + 'ts' => 'ts',
2534 + 'tt' => 'tt',
2535 + 'tw' => 'tw',
2536 + 'ty' => 'ty',
2537 + 'ug' => 'ug',
2538 + 'uk' => 'uk',
2539 + 'ur' => 'ur',
2540 + 'us' => 'us',
2541 + 'uz' => 'uz',
2542 + 've' => 've',
2543 + 'vi' => 'vi',
2544 + 'vo' => 'vo',
2545 + 'wa' => 'wa',
2546 + 'wo' => 'wo',
2547 + 'xh' => 'xh',
2548 + 'yi' => 'yi',
2549 + 'yo' => 'yo',
2550 + 'za' => 'za',
2551 + 'zh' => 'zh',
2552 + 'zh-CN' => 'zh-CN',
2553 + 'zh-HK' => 'zh-HK',
2554 + 'zh-MO' => 'zh-MO',
2555 + 'zh-SG' => 'zh-SG',
2556 + 'zh-TW' => 'zh-TW',
2557 + 'zu' => 'zu',
2558 + );
2559 + }
2560 +
2561 + // load metaboxes
1947 2562 public function load_metaboxes() {
1948 -
1949 2563 add_meta_box(
1950 - 'e2pdf_templates_save', __('Save', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
2564 + 'e2pdf_templates_save', __('Preset', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_save')
1951 2565 );
1952 2566 add_meta_box(
1953 2567 'e2pdf_templates_builder', __('PDF Builder', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_builder')
1954 2568 );
@@ -1956,13 +2570,10 @@
1956 2570 'e2pdf_templates_settings', __('Settings', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_settings')
1957 2571 );
1958 2572 }
1959 2573
1960 - /**
1961 - * Load javascript on template edit/create action
1962 - */
2574 + // load scripts
1963 2575 public function load_scripts() {
1964 -
1965 2576 wp_enqueue_script('postbox');
1966 2577 wp_enqueue_script('jquery-ui-droppable');
1967 2578 wp_enqueue_script('jquery-ui-resizable');
1968 2579 wp_enqueue_script('jquery-ui-selectable');
@@ -1971,15 +2582,13 @@
1971 2582 wp_enqueue_script('wp-color-picker');
1972 2583 wp_enqueue_media();
1973 2584 }
1974 2585
1975 - /**
1976 - * Load styles on template edit/create action
1977 - */
2586 + // load styles
1978 2587 public function load_styles($ext = false) {
1979 - wp_enqueue_style('plugin_name-admin-ui-css', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css', false, false, false);
2588 + $version = get_option('e2pdf_debug', '0') === '1' ? strtotime('now') : $this->helper->get('version');
2589 + wp_enqueue_style('css/e2pdf.jquery-ui', plugins_url('css/jquery-ui.css', $this->helper->get('plugin_file_path')), false, $version, false);
1980 2590 wp_enqueue_style('wp-color-picker');
1981 -
1982 2591 if ($ext) {
1983 2592 $extension = new Model_E2pdf_Extension();
1984 2593 if ($extension->load($ext)) {
1985 2594 $styles = $extension->styles();
@@ -1984,12 +2593,11 @@
1984 2593 if ($extension->load($ext)) {
1985 2594 $styles = $extension->styles();
1986 2595 if ($styles && is_array($styles)) {
1987 2596 foreach ($styles as $key => $value) {
1988 - wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, false, false);
2597 + wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, $version, false);
1989 2598 }
1990 2599 }
1991 2600 }
1992 2601 }
1993 2602 }
1994 -
1995 2603 }