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 +1895 -1291 1.06.021.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,28 +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 88 $pages = $template->get('pages');
87 - foreach ($pages as $page_key => $page_value) {
88 - if (isset($page_value['elements'])) {
89 - foreach ($page_value['elements'] as $element_key => $element_value) {
90 - if (isset($element_value['type']) && $element_value['type'] == 'e2pdf-image') {
91 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
92 - $pages[$page_key]['elements'][$element_key]['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
93 -
94 - if (isset($pages[$page_key]['elements'][$element_key]['properties']['dimension'])) {
95 - unset($pages[$page_key]['elements'][$element_key]['properties']['dimension']);
96 - }
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;
97 164 }
98 165 }
99 166 }
100 167 }
@@ -106,23 +173,23 @@
106 173 if (isset($request['error'])) {
107 174 $this->add_notification('error', $request['error']);
108 175 $this->render('blocks', 'notifications');
109 176 } else {
110 - $filename = $template->get_filename();
111 - $file = $request['file'];
112 - $this->download_response('pdf', $file, $filename);
177 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline');
178 + exit;
113 179 }
114 180 } else {
115 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
181 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
116 182 $this->render('blocks', 'notifications');
117 183 }
118 184 } else {
119 - $location = $this->helper->get_url(
120 - array(
121 - 'page' => 'e2pdf',
185 + $this->redirect(
186 + $this->helper->get_url(
187 + [
188 + 'page' => 'e2pdf',
189 + ]
122 190 )
123 191 );
124 - $this->redirect($location);
125 192 }
126 193 }
127 194
128 195 /**
@@ -128,15 +195,12 @@
128 195 /**
129 196 * @url admin.php?page=e2pdf-templates&action=preview
130 197 */
131 198 public function preview_action() {
132 -
133 199 $preview = array();
134 -
135 200 if ($this->post->get('preview')) {
136 201 $preview = json_decode(stripslashes($this->post->get('preview')), true);
137 202 }
138 -
139 203 if (empty($preview)) {
140 204 $this->close_tab_response();
141 205 } else {
142 206 $data = $preview;
@@ -141,162 +205,146 @@
141 205 } else {
142 206 $data = $preview;
143 207 $pages = $preview['pages'];
144 208 unset($preview['pages']);
145 -
146 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
147 -
148 - $template = new Model_E2pdf_Template();
149 - foreach ($data as $key => $value) {
150 - $template->set($key, $value);
151 - }
152 -
153 - $preview_pages = array();
154 - foreach ($pages as $page_key => $page_value) {
155 - $page = new Model_E2pdf_Page();
156 - foreach ($page_value as $page_value_key => $page_value_value) {
157 - $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);
158 213 }
159 - $page->set('page_id', $page_key);
214 + $template->set('uid', $template->get('uid', true));
215 + $template->set('activated', $template->get('activated', true));
160 216
161 - $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);
162 224
163 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
164 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
165 -
166 - foreach ($page_value['elements'] as $element_key => $element_value) {
167 - $element = new Model_E2pdf_Element();
168 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
169 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
170 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
171 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
172 - if (isset($element_value['properties']['dimension'])) {
173 - 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;
174 300 }
175 301 }
176 - }
177 302
178 - foreach ($element_value as $element_value_key => $element_value_value) {
179 - $element->set($element_value_key, $element_value_value);
180 - }
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 + }
181 307
182 - if (!$element_value['properties']) {
183 - $element_properties = array();
184 - } else {
185 - $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();
186 315 }
187 316
188 - $element->set('properties', $element_properties);
189 - $elements[] = $element->get_element();
317 + $new_page->set('elements', $elements);
318 + $preview_pages[] = $new_page->get_page();
190 319 }
191 320
192 - $page->set('elements', $elements);
193 - $preview_pages[] = $page->get_page();
194 - }
321 + $template->set('pages', $preview_pages);
322 + $template->load_fonts();
195 323
196 - $template->set('pages', $preview_pages);
197 - $request = $template->render(true);
198 -
199 - if (isset($request['error'])) {
200 - $this->add_notification('error', $request['error']);
201 - $this->render('blocks', 'notifications');
202 - } else {
203 - $filename = $template->get_filename();
204 - $file = $request['file'];
205 - $this->download_response('pdf', $file, $filename);
206 - }
207 - }
208 - }
209 -
210 - /**
211 - * @url admin.php?page=e2pdf-templates&action=convert&type=php
212 - */
213 - public function convert_action() {
214 - $preview = array();
215 -
216 - if ($this->post->get('preview')) {
217 - $preview = json_decode(stripslashes($this->post->get('preview')), true);
218 - }
219 -
220 - if (empty($preview)) {
221 - $this->close_tab_response();
222 - } else {
223 - $data = $preview;
224 - $pages = $preview['pages'];
225 - unset($preview['pages']);
226 -
227 - $this->check_nonce($preview['_nonce'], 'e2pdf_post');
228 -
229 - $template = new Model_E2pdf_Template();
230 - foreach ($data as $key => $value) {
231 - $template->set($key, $value);
232 - }
233 -
234 - $preview_pages = array();
235 - foreach ($pages as $page_key => $page_value) {
236 - $page = new Model_E2pdf_Page();
237 - foreach ($page_value as $page_value_key => $page_value_value) {
238 - $page->set($page_value_key, $page_value_value);
239 - }
240 - $page->set('page_id', $page_key);
241 -
242 - $elements = array();
243 -
244 - $this->helper->load('sort')->uasort($page_value['elements'], "sort_by_elementid");
245 - $this->helper->load('sort')->stable_uasort($page_value['elements'], "sort_by_zindex");
246 -
247 - foreach ($page_value['elements'] as $element_key => $element_value) {
248 - $element = new Model_E2pdf_Element();
249 - $esig = isset($element_value['properties']['esig']) && $element_value['properties']['esig'] ? true : false;
250 - if (isset($element_value['type']) && ($element_value['type'] == 'e2pdf-image' || ($element_value['type'] == 'e2pdf-signature' && !$esig))) {
251 - if (!$this->helper->load('image')->get_image($element_value['value'])) {
252 - $element_value['value'] = plugins_url('', $this->helper->get('plugin_file_path')) . "/img/upload.png";
253 - if (isset($element_value['properties']['dimension'])) {
254 - unset($element_value['properties']['dimension']);
255 - }
256 - }
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;
257 333 }
258 -
259 - foreach ($element_value as $element_value_key => $element_value_value) {
260 - $element->set($element_value_key, $element_value_value);
261 - }
262 -
263 - if (!$element_value['properties']) {
264 - $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');
265 339 } else {
266 - $element_properties = $element_value['properties'];
340 + $this->download_response($template->get('format'), $request['file'], $template->get_name(), 'inline', false, true);
341 + exit;
267 342 }
268 -
269 - $element->set('properties', $element_properties);
270 - $elements[] = $element->get_element();
271 343 }
272 -
273 - $page->set('elements', $elements);
274 - $preview_pages[] = $page->get_page();
275 - }
276 -
277 - $template->set('pages', $preview_pages);
278 -
279 - $allowed_types = array(
280 - 'php'
281 - );
282 -
283 - if (!in_array($this->get->get('type'), $allowed_types)) {
284 - $type = 'php';
285 344 } else {
286 - $type = $this->get->get('type');
345 + wp_die($this->message('wp_verify_nonce_error'));
287 346 }
288 -
289 - $request = $template->convert(true, $type);
290 -
291 - if (isset($request['error'])) {
292 - $this->add_notification('error', $request['error']);
293 - $this->render('blocks', 'notifications');
294 - } else {
295 - $filename = 'template';
296 - $file = $request['file'];
297 - $this->download_response($type, $file, $filename);
298 - }
299 347 }
300 348 }
301 349
302 350 /**
@@ -302,14 +350,12 @@
302 350 /**
303 351 * @url admin.php?page=e2pdf-templates&action=create
304 352 */
305 353 public function create_action() {
306 -
307 354 $template = new Model_E2pdf_Template();
308 355 $this->load_metaboxes();
309 356 $this->load_scripts();
310 357 $this->load_styles();
311 -
312 358 $this->view('license', $this->helper->get('license'));
313 359 $this->view('template', $template);
314 360 }
315 361
@@ -318,9 +364,17 @@
318 364 */
319 365 public function edit_action() {
320 366 if ($this->get->get('id')) {
321 367 $template = new Model_E2pdf_Template();
322 - 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 + }
323 377 $this->view('license', $this->helper->get('license'));
324 378 $this->view('template', $template);
325 379 $this->load_metaboxes();
326 380 $this->load_scripts();
@@ -325,18 +379,19 @@
325 379 $this->load_metaboxes();
326 380 $this->load_scripts();
327 381 $this->load_styles($template->get('extension'));
328 382 } else {
329 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
383 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
330 384 $this->render('blocks', 'notifications');
331 385 }
332 386 } else {
333 - $location = $this->helper->get_url(
334 - array(
335 - 'page' => 'e2pdf-templates',
387 + $this->redirect(
388 + $this->helper->get_url(
389 + [
390 + 'page' => 'e2pdf-templates',
391 + ]
336 392 )
337 393 );
338 - $this->redirect($location);
339 394 }
340 395 }
341 396
342 397 /**
@@ -342,23 +397,29 @@
342 397 /**
343 398 * @url admin.php?page=e2pdf-templates&action=trash&id=$id
344 399 */
345 400 public function trash_action() {
346 -
347 - if ($this->get->get('id')) {
348 - $this->trash_template($this->get->get('id'));
349 - $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'));
350 409 }
351 - $location = $this->helper->get_url(
352 - array(
353 - 'page' => 'e2pdf-templates',
354 - 'status' => $this->get->get('status'),
355 - 'orderby' => $this->get->get('orderby'),
356 - 'order' => $this->get->get('order'),
357 - '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 + ]
358 420 )
359 421 );
360 - $this->redirect($location);
361 422 }
362 423
363 424 /**
364 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
@@ -363,24 +424,29 @@
363 424 /**
364 425 * @url admin.php?page=e2pdf-templates&action=restore&id=$id&status=$status
365 426 */
366 427 public function restore_action() {
367 -
368 - if ($this->get->get('id')) {
369 - $this->restore_template($this->get->get('id'));
370 - $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'));
371 436 }
372 -
373 - $location = $this->helper->get_url(
374 - array(
375 - 'page' => 'e2pdf-templates',
376 - 'status' => $this->get->get('status'),
377 - 'orderby' => $this->get->get('orderby'),
378 - 'order' => $this->get->get('order'),
379 - '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 + ]
380 447 )
381 448 );
382 - $this->redirect($location);
383 449 }
384 450
385 451 /**
386 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
@@ -385,23 +451,30 @@
385 451 /**
386 452 * @url admin.php?page=e2pdf-templates&action=delete&id=$id&status=$status
387 453 */
388 454 public function delete_action() {
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'));
463 + }
389 464
390 - if ($this->get->get('id')) {
391 - $this->delete_template($this->get->get('id'));
392 - $this->add_notification('update', __('Template deleted', 'e2pdf'));
393 - }
394 - $location = $this->helper->get_url(
395 - array(
396 - 'page' => 'e2pdf-templates',
397 - 'status' => $this->get->get('status'),
398 - 'orderby' => $this->get->get('orderby'),
399 - 'order' => $this->get->get('order'),
400 - '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 + ]
401 475 )
402 476 );
403 - $this->redirect($location);
404 477 }
405 478
406 479 /**
407 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
@@ -406,23 +479,29 @@
406 479 /**
407 480 * @url admin.php?page=e2pdf-templates&action=duplicate&id=$id
408 481 */
409 482 public function duplicate_action() {
410 -
411 - if ($this->get->get('id')) {
412 - $this->duplicate_template($this->get->get('id'));
413 - $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'));
414 491 }
415 - $location = $this->helper->get_url(
416 - array(
417 - 'page' => 'e2pdf-templates',
418 - 'status' => $this->get->get('status'),
419 - 'orderby' => $this->get->get('orderby'),
420 - 'order' => $this->get->get('order'),
421 - '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 + ]
422 502 )
423 503 );
424 - $this->redirect($location);
425 504 }
426 505
427 506 /**
428 507 * @url admin.php?page=e2pdf-templates&action=import
@@ -427,228 +506,430 @@
427 506 /**
428 507 * @url admin.php?page=e2pdf-templates&action=import
429 508 */
430 509 public function import_action() {
510 + if ($this->post->get('_wpnonce')) {
431 511
432 - 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 + }
433 515
434 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
435 - $errors = array();
436 - $allowed_ext = array(
437 - 'xml'
438 - );
439 -
440 - $import = $this->files->get('template');
441 - $name = $import['name'];
442 - $tmp = $import['tmp_name'];
443 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
444 -
445 - if (!$tmp) {
446 - $this->add_notification('error', __('Please choose template to upload', 'e2pdf'));
447 - } else if ($import['error']) {
448 - $this->add_notification('error', $import['error']);
449 - } elseif (!in_array($ext, $allowed_ext)) {
450 - $this->add_notification('error', __('Incorrect file extension', 'e2pdf'));
451 - } elseif ($import['type'] != 'text/xml') {
452 - $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']);
453 519 } else {
454 -
520 + $errors = [];
455 521 $options = $this->post->get('options');
456 -
457 - $xml = simplexml_load_file($import['tmp_name'], "SimpleXMLElement", LIBXML_PARSEHUGE);
458 -
459 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
460 -
461 - foreach ($pages as $page_key => $page) {
462 - if (isset($page['elements']) && !empty($page['elements'])) {
463 - foreach ($page['elements'] as $element_key => $element) {
464 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
465 - if ($options['images']) {
466 - $image = base64_decode($element['base64']);
467 - $file_name = basename($element['value']);
468 - $upload_file = wp_upload_bits($file_name, null, $image);
469 - if (!$upload_file['error']) {
470 - $wp_filetype = wp_check_filetype($file_name, null);
471 - $attachment = array(
472 - 'post_mime_type' => $wp_filetype['type'],
473 - 'post_parent' => 0,
474 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
475 - 'post_content' => '',
476 - 'post_status' => 'inherit'
477 - );
478 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
479 - if (!is_wp_error($attachment_id)) {
480 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
481 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
482 - wp_update_attachment_metadata($attachment_id, $attachment_data);
483 - $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 + }
484 553 }
554 + unset($pages[$page_key]['elements'][$element_key]['base64']);
485 555 }
486 556 }
487 - unset($pages[$page_key]['elements'][$element_key]['base64']);
488 557 }
489 558 }
490 559 }
491 - }
492 560
493 - $template = new Model_E2pdf_Template();
494 - if ($options['overwrite']) {
495 - $template->load((String) $xml->template->ID);
496 - }
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 + }
497 597
498 - $template->set('title', (String) $xml->template->title);
499 - $template->set('flatten', (String) $xml->template->flatten);
500 - $template->set('format', (String) $xml->template->format);
501 - $template->set('compression', (String) $xml->template->compression);
502 - $template->set('appearance', (String) $xml->template->appearance);
503 - $template->set('width', (String) $xml->template->width);
504 - $template->set('height', (String) $xml->template->height);
505 - $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 + }
506 604
507 - if (!$options['overwrite']) {
508 - $template->set('item', "");
509 - }
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 + }
510 613
511 - $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 + }
512 649
513 - if ($xml->source) {
514 - if ((String) $xml->source == 'fpro2pdf') {
515 - $template->set('item', (String) $xml->template->item);
516 - $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);
517 653 }
518 - }
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 + }
519 725
520 - $template->set('inline', (String) $xml->template->inline);
521 - $template->set('auto', (String) $xml->template->auto);
522 - $template->set('font', (String) $xml->template->font);
523 - $template->set('font_size', (String) $xml->template->font_size);
524 - $template->set('font_color', (String) $xml->template->font_color);
525 - $template->set('line_height', (String) $xml->template->line_height);
526 - $template->set('fonts', stripslashes_deep(unserialize(base64_decode((String) $xml->template->fonts))));
527 -
528 - $extension = new Model_E2pdf_Extension();
529 - $extension->load($template->get('extension'));
530 -
531 - if ($options['item'] && $xml->item && !$fpro2pdf_backup) {
532 - $template->set('item', (String) $xml->template->item);
533 - $extension->set('item', $template->get('item'));
534 - if ($updated_item = $extension->import($xml->item, (String) $xml->template->item, $options)) {
535 - if (is_array($updated_item) && array_key_exists('errors', $updated_item)) {
536 - $errors = array_merge($errors, $updated_item['errors']);
537 - } else {
538 - $template->set('item', $updated_item);
539 - $extension->set('item', $updated_item);
540 - }
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);
541 744 }
542 - }
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 + );
543 765
544 - $pages = apply_filters('e2pdf_controller_templates_import_pages', $pages, $options, $xml, $template, $extension);
545 - $dataset_title = apply_filters('e2pdf_controller_templates_import_dataset_title', (String) $xml->template->dataset_title, $options, $xml, $template, $extension);
546 - $button_title = apply_filters('e2pdf_controller_templates_import_button_title', (String) $xml->template->button_title, $options, $xml, $template, $extension);
547 - $name = apply_filters('e2pdf_controller_templates_import_name', (String) $xml->template->name, $options, $xml, $template, $extension);
548 - $password = apply_filters('e2pdf_controller_templates_import_password', (String) $xml->template->password, $options, $xml, $template, $extension);
549 - $meta_title = apply_filters('e2pdf_controller_templates_import_meta_title', (String) $xml->template->meta_title, $options, $xml, $template, $extension);
550 - $meta_subject = apply_filters('e2pdf_controller_templates_import_meta_subject', (String) $xml->template->meta_subject, $options, $xml, $template, $extension);
551 - $meta_author = apply_filters('e2pdf_controller_templates_import_meta_author', (String) $xml->template->meta_author, $options, $xml, $template, $extension);
552 - $meta_keywords = apply_filters('e2pdf_controller_templates_import_meta_keywords', (String) $xml->template->meta_keywords, $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();
553 769
554 - $template->set('pages', $pages);
555 - $template->set('dataset_title', $dataset_title);
556 - $template->set('button_title', $button_title);
557 - $template->set('name', $name);
558 - $template->set('password', $password);
559 - $template->set('meta_title', $meta_title);
560 - $template->set('meta_subject', $meta_subject);
561 - $template->set('meta_author', $meta_author);
562 - $template->set('meta_keywords', $meta_keywords);
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;
563 775
564 - if ($options['fonts'] && $xml->fonts) {
565 - $model_e2pdf_font = new Model_E2pdf_Font();
566 - $fonts = $model_e2pdf_font->get_fonts();
776 + if ($title == 'Noto Sans' && $name == 'NotoSans-Regular.ttf') {
777 + $title = 'Noto Sans Regular';
778 + }
567 779
568 - if ($xml->fonts) {
569 - foreach ($xml->fonts->children() as $key => $font) {
570 - $title = (String) $font->title;
571 - $name = (String) $font->name;
572 - $value = (String) $font->value;
573 -
574 - $exist = array_search($title, $fonts);
575 - if (!$exist) {
576 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
577 - $f_name = $name;
578 - } else {
579 - $i = 0;
580 - do {
581 - $f_name = $i . '_' . $name;
582 - $i++;
583 - } 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 + }
584 795 }
585 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
586 796 }
587 797 }
588 798 }
589 - }
590 799
591 - if ($xml->pdf && $xml->pdf->source) {
800 + if ($xml->pdf && $xml->pdf->source) {
592 801
593 - $pdf_name = md5(time());
594 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
595 - $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/';
596 805
597 - $this->helper->create_dir($pdf_dir);
598 - $this->helper->create_dir($pdf_images_dir);
806 + $this->helper->create_dir($pdf_dir);
807 + $this->helper->create_dir($pdf_images_dir);
599 808
600 - $pdf_source = (String) $xml->pdf->source;
601 - 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);
602 811
603 - if ($xml->pdf->images) {
604 - foreach ($xml->pdf->images->children() as $key => $image) {
605 - $page_id = (String) $image->page_id;
606 - $image_source = (String) $image->source;
607 - 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 + }
608 818 }
819 + $template->set('pdf', $pdf_name);
609 820 }
610 - $template->set('pdf', $pdf_name);
611 - }
612 821
613 - if (empty($errors)) {
614 - $template->save(true);
615 -
616 - if ($options['item'] && (String) $xml->template->item != $template->get('item') && $template->get('ID') != (String) $xml->template->ID) {
617 - $extension->after_import((String) $xml->template->ID, $template->get('ID'));
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 + }
618 855 }
619 -
620 - $this->add_notification('update', __('Template imported successfully', 'e2pdf'));
621 - } else {
622 - foreach ($errors as $key => $error) {
623 - $this->add_notification('error', __($error, 'e2pdf'));
624 - }
625 856 }
626 -
627 - unlink($import['tmp_name']);
857 + if (is_file($file['tmp_name'])) {
858 + unlink($file['tmp_name']);
859 + }
628 860 }
629 861 }
630 862
631 863 $this->view('import_disabled', false);
632 -
633 864 if (!$this->helper->load('xml')->check()) {
634 - $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'));
635 866 $this->view('import_disabled', true);
636 867 }
637 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 +
638 886 $options = array(
639 - '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(
640 929 'name' => __('Template Options', 'e2pdf'),
641 930 'options' => array(
642 931 array(
643 - 'name' => __('Overwrite template by ID', 'e2pdf'),
644 - 'key' => 'options[overwrite]',
645 - 'value' => '0',
646 - 'default_value' => '0',
647 - 'type' => 'checkbox',
648 - 'placeholder' => '',
649 - ),
650 - array(
651 932 'name' => __('Import Images', 'e2pdf'),
652 933 'key' => 'options[images]',
653 934 'value' => '1',
654 935 'default_value' => '0',
@@ -661,16 +942,16 @@
661 942 'value' => '1',
662 943 'default_value' => '0',
663 944 'type' => 'checkbox',
664 945 'placeholder' => '',
665 - )
666 - )
946 + ),
947 + ),
667 948 ),
668 949 'item' => array(
669 - 'name' => __('Item Options', 'e2pdf'),
950 + 'name' => __('Connection Options', 'e2pdf'),
670 951 'options' => array(
671 952 array(
672 - 'name' => __('Import Item', 'e2pdf'),
953 + 'name' => __('Import Connection', 'e2pdf'),
673 954 'key' => 'options[item]',
674 955 'value' => '0',
675 956 'default_value' => '0',
676 957 'type' => 'checkbox',
@@ -675,143 +956,216 @@
675 956 'default_value' => '0',
676 957 'type' => 'checkbox',
677 958 'placeholder' => '',
678 959 'class' => 'e2pdf-collapse',
679 - 'data-collapse' => 'e2pdf-import-extension-option'
960 + 'data-collapse' => 'e2pdf-import-extension-option',
680 961 ),
681 - )
682 - )
962 + ),
963 + ),
683 964 );
684 965
685 966 $options = apply_filters('e2pdf_controller_templates_import_options', $options);
686 967 $this->view('options', $options);
968 + $this->view('upload_max_filesize', $this->helper->load('files')->get_upload_max_filesize());
687 969 }
688 970
689 971 /**
690 972 * @url admin.php?page=e2pdf-templates&action=backup&id=$id
691 973 */
692 - public function backup_action() {
693 -
694 - if ($this->post->get()) {
695 -
696 - $this->check_nonce($this->post->get('_nonce'), 'e2pdf_post');
697 -
698 - if ($this->helper->load('xml')->check()) {
699 -
700 - $options = $this->post->get('options');
701 - $xml = $this->helper->load('xml')->create('backup');
702 -
703 - $template = new Model_E2pdf_Template();
704 - if ($template->load($this->post->get('id'))) {
705 -
706 - if ($template->get('title') != '') {
707 - $filename = $template->get('title') . "." . date('Y-m-d.H-i-s') . ".e2pdf";
708 - } else {
709 - $filename = date('Y-m-d.H-i-s') . ".e2pdf";
710 - }
711 -
712 - $pages = $template->get('pages');
713 - if ($options['images']) {
714 - foreach ($pages as $page_key => $page) {
715 - if (isset($page['elements']) && !empty($page['elements'])) {
716 - foreach ($page['elements'] as $element_key => $element) {
717 - if ($element['type'] === 'e2pdf-image') {
718 - $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 + }
719 1003 }
720 1004 }
721 1005 }
722 1006 }
723 - }
724 1007
725 - $pages = apply_filters('e2pdf_controller_templates_backup_pages', $pages, $options, $template, $template->extension());
726 - $dataset_title = apply_filters('e2pdf_controller_templates_backup_dataset_title', $template->get('dataset_title'), $options, $template, $template->extension());
727 - $button_title = apply_filters('e2pdf_controller_templates_backup_button_title', $template->get('button_title'), $options, $template, $template->extension());
728 - $name = apply_filters('e2pdf_controller_templates_backup_name', $template->get('name'), $options, $template, $template->extension());
729 - $password = apply_filters('e2pdf_controller_templates_backup_password', $template->get('password'), $options, $template, $template->extension());
730 - $meta_title = apply_filters('e2pdf_controller_templates_backup_meta_title', $template->get('meta_title'), $options, $template, $template->extension());
731 - $meta_subject = apply_filters('e2pdf_controller_templates_backup_meta_subject', $template->get('meta_subject'), $options, $template, $template->extension());
732 - $meta_author = apply_filters('e2pdf_controller_templates_backup_meta_author', $template->get('meta_author'), $options, $template, $template->extension());
733 - $meta_keywords = apply_filters('e2pdf_controller_templates_backup_meta_keywords', $template->get('meta_keywords'), $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'));
734 1013
735 - // build xml
736 - $xml->addChildCData('version', $this->helper->get('version'));
737 - $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 + );
738 1125
739 - $options_xml = $xml->addChild('options');
740 - foreach ($options as $option_key => $option) {
741 - $options_xml->addChildCData($option_key, $option);
742 - }
743 -
744 - $template_xml = $xml->addChild('template');
745 - $template_xml->addChildCData('ID', $template->get('ID'));
746 - $template_xml->addChildCData('title', $template->get('title'));
747 - $template_xml->addChildCData('created_at', $template->get('created_at'));
748 - $template_xml->addChildCData('updated_at', $template->get('updated_at'));
749 - $template_xml->addChildCData('flatten', $template->get('flatten'));
750 - $template_xml->addChildCData('format', $template->get('format'));
751 - $template_xml->addChildCData('compression', $template->get('compression'));
752 - $template_xml->addChildCData('appearance', $template->get('appearance'));
753 - $template_xml->addChildCData('width', $template->get('width'));
754 - $template_xml->addChildCData('height', $template->get('height'));
755 - $template_xml->addChildCData('extension', $template->get('extension'));
756 - $template_xml->addChildCData('item', $template->get('item'));
757 - $template_xml->addChildCData('dataset_title', $dataset_title);
758 - $template_xml->addChildCData('button_title', $button_title);
759 - $template_xml->addChildCData('inline', $template->get('inline'));
760 - $template_xml->addChildCData('auto', $template->get('auto'));
761 - $template_xml->addChildCData('name', $name);
762 - $template_xml->addChildCData('password', $password);
763 - $template_xml->addChildCData('meta_title', $meta_title);
764 - $template_xml->addChildCData('meta_subject', $meta_subject);
765 - $template_xml->addChildCData('meta_author', $meta_author);
766 - $template_xml->addChildCData('meta_keywords', $meta_keywords);
767 - $template_xml->addChildCData('font', $template->get('font'));
768 - $template_xml->addChildCData('font_size', $template->get('font_size'));
769 - $template_xml->addChildCData('font_color', $template->get('font_color'));
770 - $template_xml->addChildCData('line_height', $template->get('line_height'));
771 - $template_xml->addChildCData('fonts', base64_encode(serialize($template->get('fonts'))));
772 - $template_xml->addChildCData('pages', base64_encode(serialize($pages)));
773 -
774 -//include pdf
775 - if ($template->get('pdf')) {
776 - $pdf_xml = $xml->addChild('pdf');
777 - $pdf_xml->addChildCData('source', base64_encode(file_get_contents($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")));
778 - $pdf_xml_images = $pdf_xml->addChild('images');
779 - foreach ($template->get('pages') as $key => $page) {
780 - $pdf_xml_image = $pdf_xml_images->addChild('image');
781 - $pdf_xml_image->addChildCData('page_id', $page['page_id']);
782 - $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 + }
783 1136 }
784 - }
785 1137
786 -//include fonts
787 - if ($options['fonts']) {
788 - $fonts_xml = $xml->addChild('fonts');
789 - if ($template->get('fonts')) {
790 - $model_e2pdf_font = new Model_E2pdf_Font();
791 - foreach ($template->get('fonts') as $key => $value) {
792 - $font = $fonts_xml->addChild('font');
793 - $font->addChildCData('title', $value);
794 - $font->addChildCData('name', $key);
795 - $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 + }
796 1149 }
797 1150 }
798 - }
799 1151
800 -//include item
801 - if ($options['item']) {
802 - if ($template->extension()->method('backup')) {
803 - $item = $xml->addChild('item');
804 - $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 + }
805 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');
806 1164 }
807 -
808 - $file = $this->helper->load('xml')->get_xml();
809 - $this->download_response('xml', $file, $filename);
810 - } else {
811 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
812 - $this->render('blocks', 'notifications');
813 1165 }
1166 + } else {
1167 + wp_die($this->message('wp_verify_nonce_error'));
814 1168 }
815 1169 }
816 1170
817 1171 $this->view('export_disabled', false);
@@ -816,9 +1170,9 @@
816 1170
817 1171 $this->view('export_disabled', false);
818 1172
819 1173 if (!$this->helper->load('xml')->check()) {
820 - $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'));
821 1175 $this->view('export_disabled', true);
822 1176 }
823 1177
824 1178 $template = new Model_E2pdf_Template();
@@ -830,15 +1184,15 @@
830 1184 'common' => array(
831 1185 'name' => __('Options', 'e2pdf'),
832 1186 'options' => array(
833 1187 array(
834 - 'name' => __('Include Item', 'e2pdf'),
1188 + 'name' => __('Include Connection', 'e2pdf'),
835 1189 'key' => 'options[item]',
836 - 'value' => $template->extension()->method('backup') ? 1 : 0,
1190 + 'value' => $template->extension()->method('backup') ? '1' : '0',
837 1191 'default_value' => 0,
838 1192 'type' => 'checkbox',
839 1193 'placeholder' => '',
840 - 'disabled' => $template->extension()->method('backup') ? false : 'disabled'
1194 + 'disabled' => $template->extension()->method('backup') ? false : 'disabled',
841 1195 ),
842 1196 array(
843 1197 'name' => __('Include Images', 'e2pdf'),
844 1198 'key' => 'options[images]',
@@ -853,760 +1207,795 @@
853 1207 'value' => 1,
854 1208 'default_value' => 0,
855 1209 'type' => 'checkbox',
856 1210 'placeholder' => '',
857 - )
858 - )
859 - )
1211 + ),
1212 + ),
1213 + ),
860 1214 );
861 1215
862 1216 $options = apply_filters('e2pdf_controller_templates_backup_options', $options, $template, $template->extension());
863 1217 $this->view('options', $options);
864 1218 } else {
865 - $this->add_notification('error', __("Template can't be loaded", 'e2pdf'));
1219 + $this->add_notification('error', __('Something went wrong!', 'e2pdf'));
866 1220 $this->render('blocks', 'notifications');
867 1221 }
868 1222 }
869 1223
1224 + // screen action
870 1225 public function screen_action() {
871 - if ($this->post->get()) {
872 - $this->check_nonce($this->post->get('screenoptionnonce'), 'screen-options-nonce');
873 - $option = $this->post->get('wp_screen_options');
874 - if (is_array($option) && isset($option['option']) && isset($option['value']) && $option['value']) {
875 - 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);
876 1231 }
877 1232 }
878 - $location = $this->helper->get_url(
879 - array(
880 - 'page' => 'e2pdf-templates',
1233 + $this->redirect(
1234 + $this->helper->get_url(
1235 + [
1236 + 'page' => 'e2pdf-templates',
1237 + ]
881 1238 )
882 1239 );
883 - $this->redirect($location);
884 1240 }
885 1241
886 - /**
887 - * Save template via ajax
888 - * action: wp_ajax_e2pdf_save_form
889 - * function: e2pdf_save_form
890 - *
891 - * @return json
892 - */
1242 + // ajax save form
893 1243 public function ajax_save_form() {
894 1244 global $wpdb;
895 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
896 -
897 - $data = json_decode($this->post->get('data'), true);
898 -
899 - $template = new Model_E2pdf_Template();
900 - if (isset($data['ID'])) {
901 - $template->load($data['ID']);
902 - if ($template->get('pdf') && $template->get('pdf') !== $data['pdf']) {
903 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
904 - $this->helper->delete_dir($old_pdf_path);
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']);
905 1250 }
906 - }
907 -
908 - foreach ($data as $key => $value) {
909 - $template->set($key, $value);
910 - }
911 - $template_id = $template->save(true);
912 -
913 - if (!$template_id) {
914 - if ($wpdb->last_error) {
915 - $response = array(
916 - 'error' => $wpdb->last_error
917 - );
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 + }
918 1274 } else {
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 + }
919 1287 $response = array(
920 - 'error' => __("Something went wrong!", "e2pdf")
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 + ),
921 1296 );
922 1297 }
923 1298 } else {
924 - if (isset($data['item']) && $data['item'] == '-1' && $template_id) {
925 - $template->load($template_id);
926 - if ($template->extension()->method('auto_form')) {
927 - $template = $template->extension()->auto_form($template, $data);
928 - } else {
929 - $template->set('item', '');
930 - }
931 - $template->save(true);
932 - }
933 -
934 - if ($template->get('activated')) {
935 - $this->activate_template($template->get('ID'));
936 - } elseif (!$template->get('activated')) {
937 - $this->deactivate_template($template->get('ID'));
938 - }
939 -
940 - $response = array(
941 - 'redirect' => $this->helper->get_url(array(
942 - 'page' => 'e2pdf-templates',
943 - 'action' => 'edit',
944 - 'id' => $template->get('ID'))
945 - )
946 - );
947 -
948 - $this->add_notification('update', __('Template saved successfully', 'e2pdf'));
1299 + $response['error'] = $this->message('wp_verify_nonce_error');
949 1300 }
950 -
951 1301 $this->json_response($response);
952 1302 }
953 1303
954 1304 public function ajax_get_styles() {
955 1305
956 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
957 - $data = $this->post->get('data');
958 -
959 - $extension = new Model_E2pdf_Extension();
960 - if ($extension->load($data)) {
961 - $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 + );
962 1318 } else {
963 - $content = array();
1319 + $response['error'] = $this->message('wp_verify_nonce_error');
964 1320 }
965 - $response = array(
966 - 'content' => $content,
967 - );
968 1321 $this->json_response($response);
969 1322 }
970 1323
971 - /**
972 - * Get extensions via ajax
973 - * action: wp_ajax_e2pdf_extension
974 - * function: e2pdf_extension
975 - *
976 - * @return json
977 - */
1324 + // ajax extension
978 1325 public function ajax_extension() {
979 -
980 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
981 - $data = $this->post->get('data');
982 -
983 - $extension = new Model_E2pdf_Extension();
984 -
985 - $content = array();
986 - if ($extension->load($data)) {
987 - $content = $extension->items();
988 -
989 - if ($extension->method('auto_form')) {
990 - $select = new stdClass();
991 - $select->id = '-1';
992 - $select->url = 'javascript:void(0);';
993 - $select->name = __("Auto Form from PDF", "e2pdf");
994 -
995 - 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 + }
996 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');
997 1357 }
998 -
999 - $select = new stdClass();
1000 - $select->id = '';
1001 - $select->url = 'javascript:void(0);';
1002 - $select->name = __("--- Select ---", "e2pdf");
1003 -
1004 - array_unshift($content, $select);
1005 -
1006 - $response = array(
1007 - 'content' => $content,
1008 - );
1009 1358 $this->json_response($response);
1010 1359 }
1011 1360
1012 - /**
1013 - * Get extensions via ajax
1014 - * action: wp_ajax_e2pdf_extension
1015 - * function: e2pdf_extension
1016 - *
1017 - * @return json
1018 - */
1361 + // ajax visual mapper
1019 1362 public function ajax_visual_mapper() {
1020 -
1021 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1022 -
1023 - $data = $this->post->get('data');
1024 -
1025 - $item = isset($data['item']) ? $data['item'] : '';
1026 -
1027 - $extension = new Model_E2pdf_Extension();
1028 - $extension->load($data['extension']);
1029 - $extension->set('item', $item);
1030 -
1031 - if ($visual_mapper = $extension->visual_mapper()) {
1032 - $response = array(
1033 - 'content' => $visual_mapper
1034 - );
1035 - } elseif (!$item) {
1036 - $response = array(
1037 - 'content' => __("You must set Item to use <strong>Visual Mapper</strong>", "e2pdf"),
1038 - );
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 + }
1039 1389 } else {
1040 - $response = array(
1041 - 'content' => __("Sorry, this extension doesn't support <strong>Visual Mapper</strong>", "e2pdf"),
1042 - );
1390 + $response['error'] = $this->message('wp_verify_nonce_error');
1043 1391 }
1044 -
1045 1392 $this->json_response($response);
1046 1393 }
1047 1394
1048 - /**
1049 - * Upload Template via Ajax
1050 - * action: wp_ajax_e2pdf_upload
1051 - * function: e2pdf_upload
1052 - *
1053 - * @return json
1054 - */
1395 + // ajax upload
1055 1396 public function ajax_upload() {
1056 1397
1057 - $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 + }
1058 1405
1059 1406 $data = $this->post->get();
1060 -
1061 1407 $post_extension = $data['extension'];
1062 1408 $item = isset($data['item']) ? $data['item'] : '';
1063 1409 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1064 -
1065 1410 $font = isset($data['font']) ? $data['font'] : false;
1066 1411 $font_size = isset($data['font_size']) ? $data['font_size'] : false;
1067 1412 $line_height = isset($data['line_height']) ? $data['line_height'] : false;
1068 - $activated = isset($data['activated']) ? $data['activated'] : 0;
1069 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';
1070 1416
1071 - $allowed_ext = array(
1072 - 'pdf'
1073 - );
1074 -
1075 - $pdf = $this->files->get('pdf');
1076 -
1077 - $name = strtolower($pdf['name']);
1078 - $tmp = $pdf['tmp_name'];
1079 - $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
1080 -
1081 - if ($pdf['error']) {
1082 - $error = $pdf['error'];
1083 - } elseif (!in_array($ext, $allowed_ext)) {
1084 - $error = __('Incorrect file extension', 'e2pdf');
1085 - } elseif ($pdf['type'] != 'application/pdf') {
1086 - $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 + );
1087 1424 }
1088 1425
1089 - if ($error) {
1090 - $response = array(
1091 - 'error' => $error,
1092 - );
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;
1093 1429 } else {
1430 + $upload = base64_encode(file_get_contents($file['tmp_name']));
1431 + }
1094 1432
1095 - $model_e2pdf_api = new Model_E2pdf_Api();
1096 - $model_e2pdf_api->set(array(
1097 - 'action' => 'template/upload',
1098 - 'data' => array(
1099 - 'title' => $name,
1100 - '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 + ),
1101 1441 )
1102 - ));
1103 - $request = $model_e2pdf_api->request();
1442 + );
1443 + $request = $model_e2pdf_api->request();
1104 1444
1105 - if (!isset($request['error'])) {
1445 + if (isset($request['error'])) {
1446 + $this->json_response(
1447 + [
1448 + 'error' => $request['error'],
1449 + ]
1450 + );
1451 + }
1106 1452
1107 - $extension = new Model_E2pdf_Extension();
1108 - if ($post_extension) {
1109 - $extension->load($post_extension);
1110 - if ($item && $item != '-1') {
1111 - $extension->set('item', $item);
1112 - }
1113 - }
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 + }
1114 1460
1115 - $pdf_name = md5(time());
1116 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1117 - $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);
1118 1466
1119 - $this->helper->create_dir($pdf_dir);
1120 - $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 + }
1121 1474
1122 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1123 -
1124 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1125 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
1126 -
1127 - if (is_array($pages) && !empty($pages)) {
1128 - foreach ($pages as $page_key => $page) {
1129 -
1130 - $pages[$page_key]['page_id'] = $page_key;
1131 -
1132 - if (isset($page['properties']['background'])) {
1133 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1134 - unset($pages[$page_key]['properties']['background']);
1135 - }
1136 -
1137 - if (isset($page['elements']) && !empty($page['elements'])) {
1138 - foreach ($page['elements'] as $element_key => $element) {
1139 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1140 -
1141 - $image = base64_decode($element['base64']);
1142 - $file_name = basename($element['value']);
1143 -
1144 -//exif_imagetype
1145 - if (!$file_name) {
1146 - $ext = $this->helper->load('image')->get_image_extension($image);
1147 - if ($ext) {
1148 - $file_name = md5(mktime()) . "." . $ext;
1149 - }
1150 - }
1151 -
1152 - if ($file_name) {
1153 - $upload_file = wp_upload_bits($file_name, null, $image);
1154 - if (!$upload_file['error']) {
1155 - $wp_filetype = wp_check_filetype($file_name, null);
1156 - $attachment = array(
1157 - 'post_mime_type' => $wp_filetype['type'],
1158 - 'post_parent' => 0,
1159 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1160 - 'post_content' => '',
1161 - 'post_status' => 'inherit'
1162 - );
1163 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1164 - if (!is_wp_error($attachment_id)) {
1165 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1166 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1167 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1168 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1169 - }
1170 - }
1171 -
1172 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1173 - } else {
1174 - unset($pages[$page_key]['elements'][$element_key]);
1175 - }
1176 - } elseif (isset($element['name']) && $element['name']) {
1177 - $el_value = $extension->auto_map($element['name']);
1178 - if ($el_value !== false) {
1179 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1180 - }
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);
1181 1512 }
1182 - }
1513 + break;
1514 + default:
1515 + break;
1183 1516 }
1184 1517 }
1518 + }
1185 1519
1186 - $this->helper->load('sort')->stable_uasort($pages, "sort_by_pageid");
1187 -
1188 - $template = new Model_E2pdf_Template();
1189 -
1190 - if ($template_id) {
1191 - $template->load($template_id);
1192 - if ($template->get('pdf')) {
1193 - $old_pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1194 - $this->helper->delete_dir($old_pdf_path);
1195 - }
1196 - $template->set('title', $title);
1197 - $template->set('pages', $pages);
1198 - $template->set('pdf', $pdf_name);
1199 - $template->set('width', (String) $xml->template->width);
1200 - $template->set('height', (String) $xml->template->height);
1201 - $template->set('extension', $post_extension);
1202 - $template->set('item', $item);
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 - } else {
1207 - $template->set('title', $title);
1208 - $template->set('flatten', (String) $xml->template->flatten);
1209 - $template->set('format', (String) $xml->template->format);
1210 - $template->set('compression', (String) $xml->template->compression);
1211 - $template->set('appearance', (String) $xml->template->appearance);
1212 - $template->set('width', (String) $xml->template->width);
1213 - $template->set('height', (String) $xml->template->height);
1214 - $template->set('extension', $post_extension);
1215 - $template->set('item', $item);
1216 - $template->set('dataset_title', "");
1217 - $template->set('button_title', "");
1218 - $template->set('inline', "");
1219 - $template->set('auto', "");
1220 - $template->set('name', "");
1221 - $template->set('password', "");
1222 - $template->set('meta_title', (String) $xml->template->meta_title);
1223 - $template->set('meta_subject', (String) $xml->template->meta_subject);
1224 - $template->set('meta_author', (String) $xml->template->meta_author);
1225 - $template->set('meta_keywords', (String) $xml->template->meta_keywords);
1226 - $template->set('font', $font ? $font : (String) $xml->template->font);
1227 - $template->set('font_size', $font_size ? $font_size : (String) $xml->template->font_size);
1228 - $template->set('line_height', $line_height ? $line_height : (String) $xml->template->font_size);
1229 - $template->set('font_color', (String) $xml->template->font_color);
1230 - $template->set('pages', $pages);
1231 - $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);
1232 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 + }
1233 1552
1234 - if ($xml->fonts) {
1553 + if (empty($pages) || !is_array($pages)) {
1554 + throw new Exception(__('Failed to parse PDF pages', 'e2pdf'));
1555 + }
1235 1556
1236 - $model_e2pdf_font = new Model_E2pdf_Font();
1237 - $fonts = $model_e2pdf_font->get_fonts();
1557 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1238 1558
1239 - foreach ($xml->fonts->children() as $key => $font) {
1240 - $font_title = (String) $font->title;
1241 - $name = (String) $font->name;
1242 - $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);
1243 1608
1244 - $exist = array_search($font_title, $fonts);
1245 - if (!$exist) {
1246 - if (!file_exists($this->helper->get('fonts_dir') . $name)) {
1247 - $f_name = $name;
1248 - } else {
1249 - $i = 0;
1250 - do {
1251 - $f_name = $i . '_' . $name;
1252 - $i++;
1253 - } while (file_exists($this->helper->get('fonts_dir') . $f_name));
1254 - }
1255 - file_put_contents($this->helper->get('fonts_dir') . $f_name, base64_decode($value));
1256 - }
1257 - }
1258 - }
1259 - $template->save(true);
1609 + if ($item == '-1' && $extension->method('auto_form')) {
1610 + $template = $extension->auto_form($template, $data);
1611 + $template->save(true);
1612 + }
1260 1613
1261 - if ($item == '-1' && $extension->method('auto_form')) {
1262 - $template = $extension->auto_form($template, $data);
1263 - $template->save(true);
1264 - }
1614 + if (!$template_id) {
1615 + $template->activate();
1616 + }
1265 1617
1266 - if ($activated && !$template->get('activated')) {
1267 - $this->activate_template($template->get('ID'));
1268 - } elseif (!$activated && $template->get('activated')) {
1269 - $this->deactivate_template($template->get('ID'));
1270 - }
1271 -
1272 - $response = array(
1273 - 'redirect' => $this->helper->get_url(array(
1274 - 'page' => 'e2pdf-templates',
1275 - 'action' => 'edit',
1276 - 'id' => $template->get('ID'))
1277 - )
1278 - );
1279 - } else {
1280 - $this->helper->delete_dir($pdf_dir);
1281 - $response = array(
1282 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1283 - );
1284 - }
1285 - } else {
1286 - $response = array(
1287 - 'error' => $request['error'],
1288 - );
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);
1289 1632 }
1633 + $this->json_response(
1634 + [
1635 + 'error' => $ex->getMessage(),
1636 + ]
1637 + );
1290 1638 }
1291 -
1292 - $this->json_response($response);
1293 1639 }
1294 1640
1295 - /**
1296 - * Upload Template via Ajax
1297 - * action: wp_ajax_e2pdf_upload
1298 - * function: e2pdf_upload
1299 - *
1300 - * @return json
1301 - */
1641 + // ajax reupload
1302 1642 public function ajax_reupload() {
1303 1643
1304 - $error = false;
1305 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
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 + }
1651 +
1306 1652 $data = $this->post->get();
1307 -
1308 1653 $new = isset($data['new']) ? $data['new'] : array();
1309 1654 $flush = isset($data['flush']) ? $data['flush'] : array();
1310 1655 $positions = isset($data['positions']) ? $data['positions'] : array();
1311 1656 $template_id = isset($data['template_id']) && $data['template_id'] ? $data['template_id'] : false;
1312 -
1313 1657 if (!$template_id) {
1314 1658 return false;
1315 1659 }
1316 1660
1317 - $allowed_ext = array(
1318 - 'pdf'
1319 - );
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 + }
1320 1669
1321 - $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 + }
1322 1676
1323 - $name = strtolower($pdf['name']);
1324 - $tmp = $pdf['tmp_name'];
1325 - $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();
1326 1688
1327 - if ($pdf['error']) {
1328 - $error = $pdf['error'];
1329 - } elseif (!in_array($ext, $allowed_ext)) {
1330 - $error = __('Incorrect file extension', 'e2pdf');
1331 - } elseif ($pdf['type'] != 'application/pdf') {
1332 - $error = __('Incompatible type', 'e2pdf');
1689 + if (isset($request['error'])) {
1690 + $this->json_response(
1691 + [
1692 + 'error' => $request['error'],
1693 + ]
1694 + );
1333 1695 }
1334 1696
1335 - if ($error) {
1336 - $response = array(
1337 - '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 + ]
1338 1703 );
1339 - } else {
1704 + }
1340 1705
1341 - $model_e2pdf_api = new Model_E2pdf_Api();
1342 - $model_e2pdf_api->set(array(
1343 - 'action' => 'template/upload',
1344 - 'data' => array(
1345 - 'title' => $name,
1346 - 'pdf' => base64_encode(file_get_contents($pdf['tmp_name']))
1347 - )
1348 - ));
1349 - $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 + }
1350 1711
1351 - if (!isset($request['error'])) {
1352 - $template = new Model_E2pdf_Template();
1353 - if ($template->load($template_id)) {
1354 - if ($template->get('pdf')) {
1355 - $extension = new Model_E2pdf_Extension();
1356 - if ($template->get('extension') && $template->get('item')) {
1357 - $extension->load($template->get('extension'));
1358 - $extension->set('item', $template->get('item'));
1359 - }
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);
1360 1717
1361 - $xml = simplexml_load_string(base64_decode($request['file']), "SimpleXMLElement", LIBXML_PARSEHUGE);
1362 - $pages = stripslashes_deep(unserialize(base64_decode((String) $xml->template->pages)));
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 + }
1363 1725
1364 - foreach ($pages as $page_key => $page) {
1365 - $pages[$page_key]['page_id'] = $page_key;
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'];
1366 1739 }
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));
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 + }
1367 1791
1368 - $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 + }
1369 1795
1370 - $model_e2pdf_element = new Model_E2pdf_Element();
1371 - $last_element_id = $model_e2pdf_element->get_last_element_id($template_id);
1796 + $this->helper->load('sort')->stable_uasort($pages, 'sort_by_pageid');
1372 1797
1373 - $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');
1374 1801
1375 - foreach ($positions as $pos_key => $pos_page) {
1376 - if (!in_array($pos_key, $flush)) {
1377 - if (!isset($pages[$pos_page])) {
1378 - $error = sprintf(__("Position of %s page incorrect", 'e2pdf'), $pos_key);
1379 - } elseif ($pages[$pos_page]['properties']['width'] < $original_pages[$pos_key]['properties']['width']) {
1380 - $error = sprintf(__("Width of PDF Page %s can't be less width of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1381 - } elseif ($pages[$pos_page]['properties']['height'] < $original_pages[$pos_key]['properties']['height']) {
1382 - $error = sprintf(__("Height of PDF Page %s can't be less height of Template Page %s", 'e2pdf'), $pos_page, $pos_key);
1383 - }
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);
1384 1815 }
1385 - }
1386 -
1387 - if (!$error) {
1388 -
1389 - $pdf_name = md5(time());
1390 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1391 - $pdf_images_dir = $pdf_dir . "images/";
1392 -
1393 - $this->helper->create_dir($pdf_dir);
1394 - $this->helper->create_dir($pdf_images_dir);
1395 -
1396 - move_uploaded_file($pdf['tmp_name'], $pdf_dir . $pdf_name . ".pdf");
1397 -
1398 - if (is_array($pages) && !empty($pages)) {
1399 - foreach ($pages as $page_key => $page) {
1400 -
1401 - if (isset($page['properties']['background'])) {
1402 - file_put_contents($pdf_images_dir . $page_key . ".png", base64_decode($page['properties']['background']));
1403 - unset($pages[$page_key]['properties']['background']);
1404 - }
1405 -
1406 - if (isset($page['elements']) && !empty($page['elements'])) {
1407 - foreach ($page['elements'] as $element_key => $element) {
1408 -
1409 - $last_element_id++;
1410 - $pages[$page_key]['elements'][$element_key]['element_id'] = $last_element_id;
1411 -
1412 - if ($element['type'] === 'e2pdf-image' && isset($element['base64']) && $element['base64']) {
1413 -
1414 - $image = base64_decode($element['base64']);
1415 - $file_name = basename($element['value']);
1416 -
1417 -//exif_imagetype
1418 - if (!$file_name) {
1419 - $ext = $this->helper->load('image')->get_image_extension($image);
1420 - if ($ext) {
1421 - $file_name = md5(mktime()) . "." . $ext;
1422 - }
1423 - }
1424 -
1425 - if ($file_name) {
1426 - $upload_file = wp_upload_bits($file_name, null, $image);
1427 - if (!$upload_file['error']) {
1428 - $wp_filetype = wp_check_filetype($file_name, null);
1429 - $attachment = array(
1430 - 'post_mime_type' => $wp_filetype['type'],
1431 - 'post_parent' => 0,
1432 - 'post_title' => preg_replace('/\.[^.]+$/', '', $file_name),
1433 - 'post_content' => '',
1434 - 'post_status' => 'inherit'
1435 - );
1436 - $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], 0);
1437 - if (!is_wp_error($attachment_id)) {
1438 - require_once(ABSPATH . "wp-admin" . '/includes/image.php');
1439 - $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
1440 - wp_update_attachment_metadata($attachment_id, $attachment_data);
1441 - $pages[$page_key]['elements'][$element_key]['value'] = $upload_file['url'];
1442 - }
1443 - }
1444 - unset($pages[$page_key]['elements'][$element_key]['base64']);
1445 - } else {
1446 - unset($pages[$page_key]['elements'][$element_key]);
1447 - }
1448 - } elseif (isset($element['name']) && $element['name']) {
1449 - $el_value = $extension->auto_map($element['name']);
1450 - if ($el_value !== false) {
1451 - $pages[$page_key]['elements'][$element_key]['value'] = $el_value;
1452 - }
1453 - }
1454 - }
1455 - }
1456 -
1457 - foreach ($positions as $pos_key => $pos_page) {
1458 - if ($pos_page == $page_key) {
1459 - if (in_array($pos_key, $new)) {
1460 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1461 - $elements = $original_pages[$pos_key]['elements'];
1462 - $pages[$page_key]['elements'] = array_merge($pages[$page_key]['elements'], $elements);
1463 - }
1464 - } else {
1465 - if (isset($original_pages[$pos_key]['elements']) && !in_array($pos_key, $flush)) {
1466 - $elements = $original_pages[$pos_key]['elements'];
1467 - $pages[$page_key]['elements'] = $elements;
1468 - } else {
1469 - $pages[$page_key]['elements'] = array();
1470 - }
1471 - }
1472 - }
1473 - }
1474 - }
1475 -
1476 - $pdf_path = $this->helper->get('pdf_dir') . $template->get('pdf') . "/";
1477 - $this->helper->delete_dir($pdf_path);
1478 -
1479 - $template->set('pdf', $pdf_name);
1480 - $template->set('pages', $pages);
1481 - $template->save(true);
1482 -
1483 - $response = array(
1484 - 'redirect' => $this->helper->get_url(array(
1485 - 'page' => 'e2pdf-templates',
1486 - 'action' => 'edit',
1487 - 'id' => $template->get('ID'))
1488 - )
1489 - );
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;
1490 1820 } else {
1491 - $this->helper->delete_dir($pdf_dir);
1492 - $response = array(
1493 - 'error' => __("PDF can't be parsed", 'e2pdf'),
1494 - );
1821 + $pages[$page_key]['elements'] = array();
1495 1822 }
1496 - } else {
1497 - $response = array(
1498 - 'error' => $error,
1499 - );
1500 1823 }
1824 + if (isset($original_pages[$pos_key]['actions'])) {
1825 + $pages[$page_key]['actions'] = $original_pages[$pos_key]['actions'];
1826 + }
1501 1827 }
1502 1828 }
1503 - } else {
1504 - $response = array(
1505 - 'error' => $request['error'],
1506 - );
1507 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 + );
1508 1855 }
1509 -
1510 - $this->json_response($response);
1511 1856 }
1512 1857
1513 - /**
1514 - * Auto Generation of Template
1515 - * action: wp_ajax_e2pdf_auto
1516 - * function: e2pdf_auto
1517 - *
1518 - * @return json
1519 - */
1858 + // ajax auto
1520 1859 public function ajax_auto() {
1521 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1522 - $data = $this->post->get('data');
1860 + if (wp_verify_nonce($this->get->get('_wpnonce'), 'e2pdf_templates')) {
1861 + $data = $this->post->get('data');
1523 1862
1524 - $extension = $data['extension'];
1525 - $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';
1526 1869
1527 - if (!$extension || !$item) {
1528 - return;
1529 - }
1870 + if (!$extension || !$item) {
1871 + return;
1872 + }
1530 1873
1531 - $model_e2pdf_extension = new Model_E2pdf_Extension();
1532 - $model_e2pdf_extension->load($extension);
1533 - $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);
1534 1881
1535 - if (method_exists($model_e2pdf_extension->extension(), 'auto')) {
1536 - $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 + );
1537 1891 } else {
1538 - $content = array();
1892 + $response['error'] = $this->message('wp_verify_nonce_error');
1539 1893 }
1540 -
1541 - $response = array(
1542 - 'content' => $content,
1543 - );
1544 1894 $this->json_response($response);
1545 1895 }
1546 1896
1897 + // ajax activate template
1547 1898 public function ajax_activate_template() {
1548 -
1549 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1550 - $data = $this->post->get('data');
1551 -
1552 - $id = $data['id'];
1553 -
1554 - if (!$id) {
1555 - return;
1556 - }
1557 -
1558 - $request = $this->activate_template($id);
1559 - if (isset($request['error'])) {
1560 - $response = array(
1561 - 'error' => $request['error'],
1562 - );
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 + }
1563 1915 } else {
1564 - $response = array(
1565 - 'content' => true,
1566 - );
1916 + $response['error'] = $this->message('wp_verify_nonce_error');
1567 1917 }
1568 -
1569 -
1570 1918 $this->json_response($response);
1571 1919 }
1572 1920
1921 + // ajax deactivaate template
1573 1922 public function ajax_deactivate_template() {
1574 - $this->check_nonce($this->get->get('_nonce'), 'e2pdf_ajax');
1575 - $data = $this->post->get('data');
1576 -
1577 - $id = $data['id'];
1578 -
1579 - if (!$id) {
1580 - 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');
1581 1941 }
1942 + $this->json_response($response);
1943 + }
1582 1944
1583 - $request = $this->deactivate_template($id);
1584 - if (isset($request['error'])) {
1585 - $response = array(
1586 - '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 + )
1587 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 + }
1588 1985 } else {
1589 - $response = array(
1590 - 'content' => true,
1591 - );
1986 + $response['error'] = $this->message('wp_verify_nonce_error');
1592 1987 }
1593 1988 $this->json_response($response);
1594 1989 }
1595 1990
1596 - /**
1597 - * Move template to trash
1598 - *
1599 - * @param int $id - ID of template
1600 - */
1991 + // trash template
1601 1992 public function trash_template($id = false) {
1602 -
1603 1993 $id = (int) $id;
1604 -
1605 1994 $template = new Model_E2pdf_Template();
1606 - if ($id && $template->load($id)) {
1995 + if ($id && $template->load($id, false)) {
1607 1996 $template->set('trash', '1');
1608 - $template->save();
1997 + $template->update(array('trash'));
1609 1998 $this->deactivate_template($template->get('ID'));
1610 1999 return true;
1611 2000 }
1612 2001 return false;
@@ -1611,17 +2000,11 @@
1611 2000 }
1612 2001 return false;
1613 2002 }
1614 2003
1615 - /**
1616 - * Delete template
1617 - *
1618 - * @param int $id - ID of template
1619 - */
2004 + // delete template
1620 2005 public function delete_template($id = false) {
1621 -
1622 2006 $id = (int) $id;
1623 -
1624 2007 $template = new Model_E2pdf_Template();
1625 2008 if ($id && $template->load($id)) {
1626 2009 $this->deactivate_template($template->get('ID'));
1627 2010 $template->delete();
@@ -1629,31 +2012,21 @@
1629 2012 }
1630 2013 return false;
1631 2014 }
1632 2015
1633 - /**
1634 - * Restore template
1635 - *
1636 - * @param int $id - ID of template
1637 - */
2016 + // restore template
1638 2017 public function restore_template($id = false) {
1639 -
1640 2018 $id = (int) $id;
1641 -
1642 2019 $template = new Model_E2pdf_Template();
1643 - if ($id && $template->load($id)) {
2020 + if ($id && $template->load($id, false)) {
1644 2021 $template->set('trash', '0');
1645 - $template->save();
2022 + $template->update(array('trash'));
1646 2023 return true;
1647 2024 }
1648 2025 return false;
1649 2026 }
1650 2027
1651 - /**
1652 - * Duplicate template
1653 - *
1654 - * @param int $id - ID of template
1655 - */
2028 + // duplicate template
1656 2029 public function duplicate_template($id = false) {
1657 2030
1658 2031 $id = (int) $id;
1659 2032
@@ -1658,28 +2031,27 @@
1658 2031 $id = (int) $id;
1659 2032
1660 2033 $template = new Model_E2pdf_Template();
1661 2034 if ($id && $template->load($id)) {
1662 - $title = $template->get('title') . " " . __('(Copy)', 'e2pdf');
2035 + $title = $template->get('title') . ' ' . __('(Copy)', 'e2pdf');
1663 2036 $template->set('ID', false);
2037 + $template->set('title', $title);
1664 2038 $template->set('uid', '');
1665 - $template->set('title', $title);
1666 2039 $template->set('activated', '0');
1667 -
1668 2040 if ($template->get('pdf')) {
1669 2041 $pdf_name = md5(time());
1670 - $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . "/";
1671 - $pdf_images_dir = $pdf_dir . "images/";
2042 + $pdf_dir = $this->helper->get('pdf_dir') . $pdf_name . '/';
2043 + $pdf_images_dir = $pdf_dir . 'images/';
1672 2044
1673 2045 $this->helper->create_dir($pdf_dir);
1674 2046 $this->helper->create_dir($pdf_images_dir);
1675 2047
1676 - if (file_exists($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf")) {
1677 - $images = glob($this->helper->get('pdf_dir') . $template->get('pdf') . "/images/*");
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/*');
1678 2050 foreach ($images as $image) {
1679 2051 copy($image, $pdf_images_dir . pathinfo($image, PATHINFO_BASENAME));
1680 2052 }
1681 - copy($this->helper->get('pdf_dir') . $template->get('pdf') . "/" . $template->get('pdf') . ".pdf", $this->helper->get('pdf_dir') . $pdf_name . "/" . $pdf_name . ".pdf");
2053 + copy($this->helper->get('pdf_dir') . $template->get('pdf') . '/' . $template->get('pdf') . '.pdf', $this->helper->get('pdf_dir') . $pdf_name . '/' . $pdf_name . '.pdf');
1682 2054 $template->set('pdf', $pdf_name);
1683 2055 }
1684 2056 }
1685 2057 $template->save(true);
@@ -1687,84 +2059,39 @@
1687 2059 }
1688 2060 return false;
1689 2061 }
1690 2062
1691 - /**
1692 - * Activate template
1693 - *
1694 - * @param int $id - ID of template
1695 - */
2063 + // activate template
1696 2064 public function activate_template($id = false) {
1697 -
1698 2065 $id = (int) $id;
1699 -
1700 2066 $template = new Model_E2pdf_Template();
1701 - if ($id && $template->load($id)) {
1702 - $model_e2pdf_api = new Model_E2pdf_Api();
1703 - $model_e2pdf_api->set(array(
1704 - 'action' => 'template/activate',
1705 - 'data' => array(
1706 - 'template_id' => $template->get('ID'),
1707 - 'template_uid' => $template->get('uid'),
1708 - 'template_title' => $template->get('title')
1709 - )
1710 - ));
1711 - $request = $model_e2pdf_api->request();
1712 -
1713 - if (!isset($request['error'])) {
1714 - $template->set('activated', 1);
1715 - $template->set('uid', $request['template_uid']);
1716 - $template->save();
1717 - }
1718 -
1719 - return $request;
2067 + if ($id && $template->load($id, false)) {
2068 + return $template->activate();
2069 + } else {
2070 + return array(
2071 + 'error' => __('Something went wrong!', 'e2pdf'),
2072 + );
1720 2073 }
1721 - return false;
1722 2074 }
1723 2075
1724 - /**
1725 - * Deactivate template
1726 - *
1727 - * @param int $id - ID of template
1728 - */
2076 + // deactivate template
1729 2077 public function deactivate_template($id = false) {
1730 -
1731 2078 $id = (int) $id;
1732 -
1733 2079 $template = new Model_E2pdf_Template();
1734 - if ($id && $template->load($id)) {
1735 - $model_e2pdf_api = new Model_E2pdf_Api();
1736 - $model_e2pdf_api->set(array(
1737 - 'action' => 'template/deactivate',
1738 - 'data' => array(
1739 - 'template_id' => $template->get('ID'),
1740 - 'template_uid' => $template->get('uid'),
1741 - )
1742 - ));
1743 - $request = $model_e2pdf_api->request();
1744 -
1745 - if (!isset($request['error'])) {
1746 - $template->set('activated', 0);
1747 - $template->set('uid', '');
1748 - $template->save();
1749 - }
1750 - return $request;
2080 + if ($id && $template->load($id, false)) {
2081 + return $template->deactivate();
2082 + } else {
2083 + return array(
2084 + 'error' => __('Something went wrong!', 'e2pdf'),
2085 + );
1751 2086 }
1752 - return false;
1753 2087 }
1754 2088
1755 - /**
1756 - * Get templates list
1757 - *
1758 - * @param array() $filters - Array of filter/order conditions
1759 - * @param bool $count - Return number of templates
1760 - *
1761 - * @return mixed - IF $count - int ELSE array()
1762 - */
2089 + // get templates list
1763 2090 public function get_templates_list($filters = array(), $count = false) {
1764 2091 global $wpdb;
2092 +
1765 2093 $model_e2pdf_template = new Model_E2pdf_Template();
1766 -
1767 2094 $condition = array();
1768 2095 if (isset($filters['status']) && $filters['status'] == 'trash') {
1769 2096 $condition = array(
1770 2097 'trash' => array(
@@ -1769,10 +2096,10 @@
1769 2096 $condition = array(
1770 2097 'trash' => array(
1771 2098 'condition' => '=',
1772 2099 'value' => '1',
1773 - 'type' => '%d'
1774 - )
2100 + 'type' => '%d',
2101 + ),
1775 2102 );
1776 2103 } else {
1777 2104 $condition = array(
1778 2105 'trash' => array(
@@ -1777,10 +2104,10 @@
1777 2104 $condition = array(
1778 2105 'trash' => array(
1779 2106 'condition' => '<>',
1780 2107 'value' => '1',
1781 - 'type' => '%d'
1782 - )
2108 + 'type' => '%d',
2109 + ),
1783 2110 );
1784 2111 }
1785 2112
1786 2113 if (isset($filters['s']) && $filters['s']) {
@@ -1786,17 +2113,27 @@
1786 2113 if (isset($filters['s']) && $filters['s']) {
1787 2114 $condition['title'] = array(
1788 2115 'condition' => 'LIKE',
1789 2116 'value' => '%%' . $filters['s'] . '%%',
1790 - '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 + ),
1791 2127 );
1792 2128 }
1793 2129
1794 2130 $order_condition = array();
1795 - 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'])) {
1796 2133 $order_condition = array(
1797 2134 'orderby' => $filters['orderby'],
1798 - 'order' => $filters['order'],
2135 + 'order' => $filters['order'] == 'asc' ? 'asc' : 'desc',
1799 2136 );
1800 2137 } else {
1801 2138 $order_condition = array(
1802 2139 'orderby' => 'id',
@@ -1807,13 +2144,12 @@
1807 2144 $limit_condition = array();
1808 2145 if (!$count) {
1809 2146 $paged = isset($filters['paged']) && $filters['paged'] ? $filters['paged'] : '0';
1810 2147 $paged = (int) $paged <= 0 ? 1 : (int) $paged;
1811 - $per_page = get_option('e2pdf_templates_screen_per_page') ? get_option('e2pdf_templates_screen_per_page') : '20';
1812 -
2148 + $per_page = (int) get_option('e2pdf_templates_screen_per_page', '20');
1813 2149 $limit_condition = array(
1814 - 'limit' => $per_page,
1815 - 'offset' => (int) ($paged - 1) * $per_page
2150 + 'limit' => (int) $per_page,
2151 + 'offset' => (int) ($paged - 1) * $per_page,
1816 2152 );
1817 2153 }
1818 2154
1819 2155 $where = $this->helper->load('db')->prepare_where($condition);
@@ -1818,11 +2154,11 @@
1818 2154
1819 2155 $where = $this->helper->load('db')->prepare_where($condition);
1820 2156 $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1821 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']));
1822 2160
1823 - $tpls = $wpdb->get_results($wpdb->prepare("SELECT `ID` FROM " . $model_e2pdf_template->get_table() . $where['sql'] . $orderby . $limit . "", $where['filter']));
1824 -
1825 2161 if ($count) {
1826 2162 return count($tpls);
1827 2163 }
1828 2164
@@ -1831,32 +2167,30 @@
1831 2167 $template = new Model_E2pdf_Template();
1832 2168 $template->load($tpl->ID, false);
1833 2169 if (is_array($this->helper->get('license')->get('activated_templates'))) {
1834 2170 if ($template->get('activated') && !in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1835 - $this->deactivate_template($template->get('ID'));
2171 + $template->deactivate();
1836 2172 } elseif (!$template->get('activated') && in_array($template->get('uid'), $this->helper->get('license')->get('activated_templates'))) {
1837 - $this->activate_template($template->get('ID'));
2173 + $template->activate();
1838 2174 }
1839 2175 }
1840 -
1841 2176 $templates[] = $template;
1842 2177 }
1843 -
1844 2178 return $templates;
1845 2179 }
1846 2180
1847 - /**
1848 - * Get paper sizes list
1849 - *
1850 - * @return array() - Sizes list
1851 - */
2181 + // get sizes list
1852 2182 public function get_sizes_list($size = false, $attr = false) {
1853 2183
1854 2184 $sizes = array(
1855 - 'A4' => array(
2185 + 'A4 (PORTRAIT)' => array(
1856 2186 'width' => '595',
1857 2187 'height' => '842',
1858 2188 ),
2189 + 'A4 (LANDSCAPE)' => array(
2190 + 'width' => '842',
2191 + 'height' => '595',
2192 + ),
1859 2193 'LETTER' => array(
1860 2194 'width' => '612',
1861 2195 'height' => '792',
1862 2196 ),
@@ -1891,15 +2225,10 @@
1891 2225 return false;
1892 2226 }
1893 2227 }
1894 2228
1895 - /**
1896 - * Get fonts list
1897 - *
1898 - * @return array() - Fonts list
1899 - */
2229 + // get fonts
1900 2230 public function get_fonts($with_path = false) {
1901 -
1902 2231 $model_e2pdf_font = new Model_E2pdf_Font();
1903 2232 $fonts = $model_e2pdf_font->get_fonts();
1904 2233
1905 2234 if ($with_path) {
@@ -1908,9 +2237,9 @@
1908 2237 'key' => $value,
1909 2238 'subfield' => array(
1910 2239 'path' => $key,
1911 2240 ),
1912 - 'value' => $value
2241 + 'value' => $value,
1913 2242 );
1914 2243 }
1915 2244 }
1916 2245
@@ -1916,43 +2245,324 @@
1916 2245
1917 2246 return $fonts;
1918 2247 }
1919 2248
1920 - /**
1921 - * Get font sizes list
1922 - *
1923 - * @return array() - Font sizes list
1924 - */
2249 + // get font sizes
1925 2250 public function get_font_sizes() {
1926 -
2251 + $max_font_size = apply_filters('e2pdf_controller_templates_max_font_size', 512);
1927 2252 $sizes = array();
1928 - for ($i = 1; $i <= 72; $i++) {
1929 - $sizes[$i] = $i . 'px';
2253 + for ($i = 1; $i <= $max_font_size; $i++) {
2254 + $sizes[$i] = $i;
1930 2255 }
1931 2256 return $sizes;
1932 2257 }
1933 2258
1934 - /**
1935 - * Get line heights list
1936 - *
1937 - * @return array() - Line heights list
1938 - */
2259 + // get line heights
1939 2260 public function get_line_heights() {
1940 2261
2262 + $max_line_height = apply_filters('e2pdf_controller_templates_max_line_height', 512);
1941 2263 $line_heights = array();
1942 - for ($i = 1; $i <= 512; $i++) {
1943 - $line_heights[$i] = $i . 'px';
2264 + for ($i = 1; $i <= $max_line_height; $i++) {
2265 + $line_heights[$i] = $i;
1944 2266 }
1945 2267 return $line_heights;
1946 2268 }
1947 2269
1948 - /**
1949 - * Load metaboxes on template edit/create action
1950 - */
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
1951 2562 public function load_metaboxes() {
1952 -
1953 2563 add_meta_box(
1954 - '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')
1955 2565 );
1956 2566 add_meta_box(
1957 2567 'e2pdf_templates_builder', __('PDF Builder', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_builder')
1958 2568 );
@@ -1960,13 +2570,10 @@
1960 2570 'e2pdf_templates_settings', __('Settings', 'e2pdf'), array($this, 'render_metabox'), null, 'side', 'default', array('tpl' => 'e2pdf_templates_settings')
1961 2571 );
1962 2572 }
1963 2573
1964 - /**
1965 - * Load javascript on template edit/create action
1966 - */
2574 + // load scripts
1967 2575 public function load_scripts() {
1968 -
1969 2576 wp_enqueue_script('postbox');
1970 2577 wp_enqueue_script('jquery-ui-droppable');
1971 2578 wp_enqueue_script('jquery-ui-resizable');
1972 2579 wp_enqueue_script('jquery-ui-selectable');
@@ -1975,15 +2582,13 @@
1975 2582 wp_enqueue_script('wp-color-picker');
1976 2583 wp_enqueue_media();
1977 2584 }
1978 2585
1979 - /**
1980 - * Load styles on template edit/create action
1981 - */
2586 + // load styles
1982 2587 public function load_styles($ext = false) {
1983 - 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);
1984 2590 wp_enqueue_style('wp-color-picker');
1985 -
1986 2591 if ($ext) {
1987 2592 $extension = new Model_E2pdf_Extension();
1988 2593 if ($extension->load($ext)) {
1989 2594 $styles = $extension->styles();
@@ -1988,12 +2593,11 @@
1988 2593 if ($extension->load($ext)) {
1989 2594 $styles = $extension->styles();
1990 2595 if ($styles && is_array($styles)) {
1991 2596 foreach ($styles as $key => $value) {
1992 - wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, false, false);
2597 + wp_enqueue_style('e2pdf-dynamic-style-' . $key, $value, false, $version, false);
1993 2598 }
1994 2599 }
1995 2600 }
1996 2601 }
1997 2602 }
1998 -
1999 2603 }