PluginProbe
E2Pdf – Export Pdf Tool for WordPress / trunk
E2Pdf – Export Pdf Tool for WordPress vtrunk
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 1.08.09 All 71 releases
e2pdf / classes / controller / frontend / e2pdf-download.php

e2pdf-download.php in E2Pdf – Export Pdf Tool for WordPress trunk, at classes/controller/frontend/e2pdf-download.php

371 lines 20.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /controller/frontend/e2pdf-download.php
5 *
6 * @package E2Pdf
7 * @license GPLv3
8 * @link https://e2pdf.com
9 */
10 if (!defined('ABSPATH')) {
11 die('Access denied.');
12 }
13
14 class Controller_Frontend_E2pdf_Download extends Helper_E2pdf_View {
15
16 // url: page=e2pdf-download&uid=$uid
17 public function index_action() {
18 global $wp_query;
19
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 }
26
27 do_action('e2pdf_controller_frontend_e2pdf_pre_download', $this);
28
29 $entry = new Model_E2pdf_Entry();
30 if ($uid && $entry->load_by_uid($uid)) {
31
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 }
45
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 }
110
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'))) {
125
126 $template->extension()->set('entry', $entry);
127
128 if ($entry->get_data('dataset') !== false) {
129 $template->extension()->set('dataset', $entry->get_data('dataset'));
130 }
131
132 if ($entry->get_data('dataset2') !== false) {
133 $template->extension()->set('dataset2', $entry->get_data('dataset2'));
134 }
135
136 if ($entry->get_data('user_id') !== false) {
137 $template->extension()->set('user_id', $entry->get_data('user_id'));
138 }
139
140 if ($entry->get_data('wc_order_id') !== false) {
141 $template->extension()->set('wc_order_id', $entry->get_data('wc_order_id'));
142 }
143
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 }
147
148 if ($entry->get_data('storing_engine') !== false) {
149 $template->extension()->set('storing_engine', $entry->get_data('storing_engine'));
150 }
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
280 $disposition = 'attachment';
281 if ($entry->get_data('inline') !== false) {
282 if ($entry->get_data('inline')) {
283 $disposition = 'inline';
284 }
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;
343 }
344 }
345
346 $template->fill();
347 $request = $template->render();
348 if (isset($request['error'])) {
349 wp_die($request['error']);
350 } elseif ($request['file'] === '') {
351 wp_die(__('Something went wrong!', 'e2pdf'));
352 } else {
353 $entry->set('pdf_num', $entry->get('pdf_num') + 1);
354 $entry->save();
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;
362 }
363 }
364 }
365 }
366 $wp_query->set_404();
367 status_header(404);
368 nocache_headers();
369 }
370 }
371