PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.51
E2Pdf – Export Pdf Tool for WordPress v1.32.51
1.32.51 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 All 73 releases
← All changes | classes/controller/frontend/e2pdf-download.php +321 -55 1.00.001.32.51 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Controller
5 - *
6 - * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
8 - * @version 1
9 - * @link https://e2pdf.com
10 - * @since 0.00.01
4 + * File: /controller/frontend/e2pdf-download.php
5 + *
6 + * @package E2Pdf
7 + * @license GPLv3
8 + * @link https://e2pdf.com
11 9 */
12 10 if (!defined('ABSPATH')) {
13 11 die('Access denied.');
14 12 }
@@ -14,91 +12,359 @@
14 12 }
15 13
16 14 class Controller_Frontend_E2pdf_Download extends Helper_E2pdf_View {
17 15
18 - /**
19 - * Frontend download action
20 - *
21 - * @url page=e2pdf-download&uid=$uid
22 - */
16 + // url: page=e2pdf-download&uid=$uid
23 17 public function index_action() {
24 18 global $wp_query;
25 19
26 - $download = false;
27 - $uid = $this->get->get('uid');
20 + $uid = false;
21 + if ($this->get->get('uid')) {
22 + $uid = $this->get->get('uid');
23 + } elseif (get_query_var('uid')) {
24 + $uid = get_query_var('uid');
25 + }
28 26
27 + do_action('e2pdf_controller_frontend_e2pdf_pre_download', $this);
28 +
29 29 $entry = new Model_E2pdf_Entry();
30 + if ($uid && $entry->load_by_uid($uid)) {
30 31
31 - if ($entry->load_by_uid($uid)) {
32 + $template = new Model_E2pdf_Template();
33 + if ($entry->get_data('file_id') || $entry->get_data('pdf') || $entry->get_data('attachment_id')) {
34 + $downloadable = false;
35 + if ($entry->get_data('file_id')) {
36 + $stream = (new Model_E2pdf_Gdrive())->download($entry->get_data('file_id'));
37 + $pdf = is_array($stream) && isset($stream['name']) ? $stream['name'] : '';
38 + if ($pdf) {
39 + $downloadable = true;
40 + }
41 + } else {
42 + $pdf = $entry->get_data('pdf') ? $entry->get_data('pdf') : get_attached_file($entry->get_data('attachment_id'));
43 + $downloadable = file_exists($pdf) && $this->helper->load('filter')->is_downloadable($pdf);
44 + }
32 45
33 - $uid_params = $entry->get('entry');
46 + $downloadable = apply_filters('e2pdf_pdf_downloadable', $downloadable, $uid, $entry->get('entry'));
47 + if ($downloadable) {
48 + $disposition = 'attachment';
49 + if ($entry->get_data('inline')) {
50 + $disposition = 'inline';
51 + }
52 + $ext = pathinfo($pdf, PATHINFO_EXTENSION);
53 + if ($entry->get_data('name')) {
54 + $download_name = $entry->get_data('name');
55 + } else {
56 + $download_name = basename($pdf, '.' . $ext);
57 + }
58 + $download_name = apply_filters('e2pdf_controller_frontend_e2pdf_download_name', $download_name, $entry->get('uid'), $entry->get('entry'));
59 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended
60 + if ($disposition == 'inline' && !isset($_GET['v'])) {
61 + if (get_option('e2pdf_download_inline_chrome_ios_fix', '0') == '1' && $this->helper->load('server')->isIOS() && $this->helper->load('server')->isChrome()) {
62 + $url_data = [
63 + 'page' => 'e2pdf-download',
64 + 'uid' => $uid,
65 + 'download_name' => rawurlencode($download_name . '.' . (strtolower($ext) == 'jpg' ? 'jpg' : 'pdf')),
66 + 'v' => $this->helper->get('version'),
67 + ];
68 + $url = $this->helper->get_frontend_pdf_url(
69 + $url_data, false,
70 + [
71 + 'e2pdf_model_shortcode_site_url',
72 + 'e2pdf_model_shortcode_e2pdf_redirect_site_url',
73 + ]
74 + );
75 + // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
76 + wp_redirect($url);
77 + exit;
78 + } elseif (get_option('e2pdf_download_inline_fallback_viewer', '0') == '1' && !$this->helper->load('server')->isViewerSupported() && strtolower($ext) == 'pdf') {
79 + $url_data = [
80 + 'page' => 'e2pdf-download',
81 + 'uid' => $uid,
82 + 'v' => $this->helper->get('version'),
83 + ];
84 + $url = $this->helper->get_frontend_pdf_url(
85 + $url_data, false,
86 + [
87 + 'e2pdf_model_shortcode_site_url',
88 + 'e2pdf_model_shortcode_e2pdf_redirect_site_url',
89 + ]
90 + );
91 + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.urlencode_urlencode
92 + $file = urlencode($url);
93 + $classes = [
94 + 'e2pdf-hide-print',
95 + 'e2pdf-hide-editor',
96 + 'e2pdf-hide-secondary-toolbar',
97 + ];
98 + $viewer_url = add_query_arg(
99 + [
100 + 'class' => implode(';', $classes),
101 + 'file' => $file,
102 + ],
103 + plugins_url('assets/pdf.js/web/viewer.html', $this->helper->get('plugin_file_path'))
104 + );
105 + // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
106 + wp_redirect($viewer_url);
107 + exit;
108 + }
109 + }
34 110
35 - $template = new Model_E2pdf_Template();
36 - if (isset($uid_params['template_id']) && isset($uid_params['dataset']) && $template->load($uid_params['template_id'])) {
111 + if ($entry->get_data('file_id')) {
112 + $file = $stream['file'];
113 + } else {
114 + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
115 + $file = file_get_contents($pdf);
116 + }
117 + $this->download_response(strtolower($ext), $file, $download_name, $disposition);
118 + if (has_action('e2pdf_controller_frontend_e2pdf_download_success')) {
119 + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
120 + do_action('e2pdf_controller_frontend_e2pdf_download_success', $uid, $entry->get('entry'), base64_encode($file));
121 + }
122 + exit;
123 + }
124 + } elseif ($entry->get_data('template_id') && ($entry->get_data('dataset') || $entry->get_data('dataset2')) && $template->load($entry->get_data('template_id'))) {
37 125
38 - $extension = new Model_E2pdf_Extension();
39 - $extension->load($template->get('extension'));
40 - $extension->set('item', $template->get('item'));
41 - $extension->set('dataset', $uid_params['dataset']);
126 + $template->extension()->set('entry', $entry);
42 127
43 - if (isset($uid_params['flatten'])) {
44 - $template->set('flatten', $uid_params['flatten']);
128 + if ($entry->get_data('dataset') !== false) {
129 + $template->extension()->set('dataset', $entry->get_data('dataset'));
45 130 }
46 131
47 - if (isset($uid_params['format'])) {
48 - $template->set('format', $uid_params['format']);
132 + if ($entry->get_data('dataset2') !== false) {
133 + $template->extension()->set('dataset2', $entry->get_data('dataset2'));
49 134 }
50 135
51 - if (isset($uid_params['password'])) {
52 - $template->set('password', $extension->render($uid_params['password']));
136 + if ($entry->get_data('user_id') !== false) {
137 + $template->extension()->set('user_id', $entry->get_data('user_id'));
53 138 }
54 139
55 - if (isset($uid_params['name'])) {
56 - $template->set('name', $uid_params['name']);
140 + if ($entry->get_data('wc_order_id') !== false) {
141 + $template->extension()->set('wc_order_id', $entry->get_data('wc_order_id'));
57 142 }
58 143
59 - if ($extension->verify()) {
60 - $template->fill($uid_params['dataset'], $uid);
144 + if ($entry->get_data('wc_product_item_id') !== false) {
145 + $template->extension()->set('wc_product_item_id', $entry->get_data('wc_product_item_id'));
146 + }
61 147
62 - $request = $template->render();
148 + if ($entry->get_data('storing_engine') !== false) {
149 + $template->extension()->set('storing_engine', $entry->get_data('storing_engine'));
150 + }
63 151
152 + if ($entry->get_data('args') !== false) {
153 + $template->extension()->set('args', $entry->get_data('args'));
154 + }
155 +
156 + $downloadable = apply_filters('e2pdf_pdf_downloadable', true, $uid, $entry->get('entry'));
157 + if ($downloadable && $template->extension()->verify()) {
158 + if ($template->get('actions')) {
159 + $model_e2pdf_action = new Model_E2pdf_Action();
160 + $model_e2pdf_action->load($template->extension());
161 + $actions = $model_e2pdf_action->process_global_actions($template->get('actions'));
162 + foreach ($actions as $action) {
163 + if (isset($action['action'])) {
164 + switch (true) {
165 + case $action['action'] == 'disable_access_by_url' && isset($action['success']):
166 + case $action['action'] == 'enable_access_by_url' && !isset($action['success']):
167 + $error_message = '';
168 + if (!empty($action['error_message'])) {
169 + $error_message = $template->extension()->render($action['error_message']);
170 + }
171 + $error_message = $error_message ? $error_message : __('Access Denied!', 'e2pdf');
172 + if (isset($_SERVER['HTTP_X_E2PDF_REQUEST'])) {
173 + $response = [
174 + 'error' => $error_message,
175 + ];
176 + $this->json_response_ajax($response, 403);
177 + } else {
178 + wp_die($error_message, '', ['exit' => true]);
179 + }
180 + break;
181 + case $action['action'] == 'redirect_access_by_url' && isset($action['success']):
182 + $redirect_url = '';
183 + if (!empty($action['redirect_url'])) {
184 + $redirect_url = $template->extension()->render($action['redirect_url']);
185 + }
186 + if ($redirect_url) {
187 + $redirect_url = apply_filters('e2pdf_download_redirect_access_by_url', esc_url_raw($redirect_url), $entry);
188 + if (isset($_SERVER['HTTP_X_E2PDF_REQUEST'])) {
189 + $response = [
190 + 'redirect_url' => $redirect_url,
191 + 'redirect_error_message' => !empty($action['redirect_error_message']) ? str_replace('%s', $redirect_url, $action['redirect_error_message']) : 'Access denied. Please, click <a href="' . $redirect_url . '" target="_blank">here</a> for more details...',
192 + ];
193 + $this->json_response_ajax($response, 303);
194 + } else {
195 + // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
196 + wp_redirect($redirect_url);
197 + exit;
198 + }
199 + }
200 + break;
201 + default:
202 + break;
203 + }
204 + }
205 + }
206 + }
207 +
208 + if ($entry->get_data('flatten') !== false) {
209 + $template->set('flatten', $entry->get_data('flatten'));
210 + }
211 +
212 + if ($entry->get_data('format') !== false) {
213 + $template->set('format', $entry->get_data('format'));
214 + }
215 +
216 + if ($entry->get_data('password') !== false) {
217 + $template->set('password', $entry->get_data('password'));
218 + } else {
219 + $template->set('password', $template->extension()->render($template->get('password')));
220 + }
221 +
222 + if ($entry->get_data('dpdf') !== false) {
223 + $template->set('dpdf', $entry->get_data('dpdf'));
224 + } else {
225 + $template->set('dpdf', $template->extension()->render($template->get('dpdf')));
226 + }
227 +
228 + if ($entry->get_data('owner_password') !== false) {
229 + $template->set('owner_password', $entry->get_data('owner_password'));
230 + } else {
231 + $template->set('owner_password', $template->extension()->render($template->get('owner_password')));
232 + }
233 +
234 + if ($entry->get_data('meta_title') !== false) {
235 + $template->set('meta_title', $entry->get_data('meta_title'));
236 + } else {
237 + $template->set('meta_title', $template->extension()->render($template->get('meta_title')));
238 + }
239 +
240 + if ($entry->get_data('meta_subject') !== false) {
241 + $template->set('meta_subject', $entry->get_data('meta_subject'));
242 + } else {
243 + $template->set('meta_subject', $template->extension()->render($template->get('meta_subject')));
244 + }
245 +
246 + if ($entry->get_data('meta_author') !== false) {
247 + $template->set('meta_author', $entry->get_data('meta_author'));
248 + } else {
249 + $template->set('meta_author', $template->extension()->render($template->get('meta_author')));
250 + }
251 +
252 + if ($entry->get_data('meta_keywords') !== false) {
253 + $template->set('meta_keywords', $entry->get_data('meta_keywords'));
254 + } else {
255 + $template->set('meta_keywords', $template->extension()->render($template->get('meta_keywords')));
256 + }
257 +
258 + if ($entry->get_data('name') !== false) {
259 + $template->set('name', $entry->get_data('name'));
260 + } else {
261 + $template->set(
262 + 'name',
263 + $template->extension()->render(
264 + $this->helper->load('translator')->pre_translate($template->get('name'), $template->get('ID'), 'name', 'template')
265 + )
266 + );
267 + }
268 + if (!$template->get('name')) {
269 + $template->set(
270 + 'name',
271 + $template->extension()->render(
272 + $this->helper->load('translator')->pre_translate($template->get('title'), $template->get('ID'), 'title', 'template')
273 + )
274 + );
275 + }
276 + if (!$template->get('name')) {
277 + $template->set(__('(no title)', 'e2pdf'));
278 + }
279 +
64 280 $disposition = 'attachment';
65 - if (isset($uid_params['inline'])) {
66 - if ($uid_params['inline']) {
281 + if ($entry->get_data('inline') !== false) {
282 + if ($entry->get_data('inline')) {
67 283 $disposition = 'inline';
68 284 }
69 - } else {
70 - if ($template->get('inline')) {
71 - $disposition = 'inline';
285 + } elseif ($template->get('inline')) {
286 + $disposition = 'inline';
287 + }
288 +
289 + /* Bug-fix with on the Chrome + iOS PDF inline download */
290 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended
291 + if ($disposition == 'inline' && !isset($_GET['v'])) {
292 + if (get_option('e2pdf_download_inline_chrome_ios_fix', '0') == '1' && $this->helper->load('server')->isIOS() && $this->helper->load('server')->isChrome()) {
293 + $download_name = apply_filters('e2pdf_controller_frontend_e2pdf_download_name', $template->get('name'), $entry->get('uid'), $entry->get('entry'));
294 + $url_data = [
295 + 'page' => 'e2pdf-download',
296 + 'uid' => $uid,
297 + 'download_name' => rawurlencode($download_name . '.' . ($template->get('format') == 'jpg' ? 'jpg' : 'pdf')),
298 + 'v' => $this->helper->get('version'),
299 + ];
300 + $url = $this->helper->get_frontend_pdf_url(
301 + $url_data, false,
302 + [
303 + 'e2pdf_model_shortcode_site_url',
304 + 'e2pdf_model_shortcode_e2pdf_redirect_site_url',
305 + ]
306 + );
307 + // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
308 + wp_redirect($url);
309 + exit;
310 + } elseif (get_option('e2pdf_download_inline_fallback_viewer', '0') == '1' && !$this->helper->load('server')->isViewerSupported() && $template->get('format') == 'pdf') {
311 + $download_name = apply_filters('e2pdf_controller_frontend_e2pdf_download_name', $template->get('name'), $entry->get('uid'), $entry->get('entry'));
312 + $url_data = [
313 + 'page' => 'e2pdf-download',
314 + 'uid' => $uid,
315 + 'v' => $this->helper->get('version'),
316 + ];
317 + $url = $this->helper->get_frontend_pdf_url(
318 + $url_data, false,
319 + [
320 + 'e2pdf_model_shortcode_site_url',
321 + 'e2pdf_model_shortcode_e2pdf_redirect_site_url',
322 + ]
323 + );
324 + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.urlencode_urlencode
325 + $file = urlencode($url);
326 +
327 + $classes = [
328 + 'e2pdf-hide-print',
329 + 'e2pdf-hide-editor',
330 + 'e2pdf-hide-secondary-toolbar',
331 + ];
332 +
333 + $viewer_url = add_query_arg(
334 + [
335 + 'class' => implode(';', $classes),
336 + 'file' => $file,
337 + ],
338 + plugins_url('assets/pdf.js/web/viewer.html', $this->helper->get('plugin_file_path'))
339 + );
340 + // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
341 + wp_redirect($viewer_url);
342 + exit;
72 343 }
73 344 }
74 345
346 + $template->fill();
347 + $request = $template->render();
75 348 if (isset($request['error'])) {
76 349 wp_die($request['error']);
77 350 } elseif ($request['file'] === '') {
78 351 wp_die(__('Something went wrong!', 'e2pdf'));
79 352 } else {
80 -
81 - /*
82 - * Pdf count increase
83 - * @since 0.01.33
84 - */
85 353 $entry->set('pdf_num', $entry->get('pdf_num') + 1);
86 354 $entry->save();
87 -
88 - $download = true;
89 - $name = $extension->render($template->get_filename());
90 - $file = $request['file'];
91 - $this->download_response('pdf', $file, $name, $disposition);
355 + $download_name = apply_filters('e2pdf_controller_frontend_e2pdf_download_name', $template->get('name'), $entry->get('uid'), $entry->get('entry'));
356 + $this->download_response($template->get('format'), $request['file'], $download_name, $disposition);
357 + if (has_action('e2pdf_controller_frontend_e2pdf_download_success')) {
358 + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
359 + do_action('e2pdf_controller_frontend_e2pdf_download_success', $uid, $entry->get('entry'), base64_encode($request['file']));
360 + }
361 + exit;
92 362 }
93 363 }
94 364 }
95 365 }
96 -
97 - if (!$download) {
98 - $wp_query->set_404();
99 - status_header(404);
100 - nocache_headers();
101 - }
366 + $wp_query->set_404();
367 + status_header(404);
368 + nocache_headers();
102 369 }
103 -
104 370 }