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