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 / model / e2pdf-api.php

e2pdf-api.php in E2Pdf – Export Pdf Tool for WordPress trunk, at classes/model/e2pdf-api.php

220 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /model/e2pdf-api.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 Model_E2pdf_Api extends Model_E2pdf_Model {
15
16 protected $api;
17
18 public function __construct() {
19 parent::__construct();
20 $this->api = new stdClass();
21 }
22
23 // request
24 public function request($key = false, $api_server = false) {
25
26 $api_action = $this->get('action');
27 if ($api_action) {
28
29 // fix for upgrade via dashboard -> updates
30 if (method_exists($this->helper, 'set_time_limit')) {
31 $this->helper->set_time_limit((int) get_option('e2pdf_request_timeout', '420'));
32 }
33
34 // fix for upgrade via dashboard -> updates
35 if ($api_action == 'update/info' && !method_exists($this->helper, 'get_site_url')) {
36 return [];
37 }
38
39 $api_protocol = get_option('e2pdf_api_protocol', '0');
40 $api_processor = get_option('e2pdf_debug', '0') && get_option('e2pdf_processor', '0') ? get_option('e2pdf_processor', '0') : '0';
41 if ($api_processor == '2') {
42 $api_version = '1.16.19';
43 } else {
44 $api_version = '1.32.39';
45 }
46
47 $data = [
48 'api_url' => $this->helper->get_site_url(),
49 'api_license_key' => $this->get_license(),
50 'api_processor' => apply_filters('e2pdf_api_processor', $api_processor),
51 'api_version' => apply_filters('e2pdf_api_version', $api_version),
52 'api_protocol' => $api_protocol,
53 ];
54 if (!$api_server) {
55 $api_server = $this->get_api_server();
56 }
57 $request_url = 'https://' . $api_server . '/' . $api_action;
58
59 // phpcs:disable WordPress.WP.AlternativeFunctions
60 $ch = apply_filters('e2pdf_api_connection', curl_init($request_url));
61 curl_setopt($ch, CURLOPT_USERAGENT, $this->helper->get_site_url());
62 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
63 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
64 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
65 if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
66 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
67 }
68 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int) get_option('e2pdf_connection_timeout', '300'));
69
70 if (defined('E2PDF_API_PROXY')) {
71 curl_setopt($ch, CURLOPT_PROXY, E2PDF_API_PROXY);
72 }
73 if (defined('E2PDF_API_PROXYPORT')) {
74 curl_setopt($ch, CURLOPT_PROXYPORT, E2PDF_API_PROXYPORT);
75 }
76 if (defined('E2PDF_API_PROXYUSERPWD')) {
77 curl_setopt($ch, CURLOPT_PROXYUSERPWD, E2PDF_API_PROXYUSERPWD);
78 }
79 if (defined('E2PDF_API_PROXYTYPE')) {
80 curl_setopt($ch, CURLOPT_PROXYTYPE, E2PDF_API_PROXYTYPE);
81 }
82 if (defined('E2PDF_API_PROXYAUTH')) {
83 curl_setopt($ch, CURLOPT_PROXYAUTH, E2PDF_API_PROXYAUTH);
84 }
85 if (class_exists('CURLFile')) {
86 if (defined('CURLOPT_SAFE_UPLOAD')) {
87 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
88 }
89 } else {
90 if (defined('CURLOPT_SAFE_UPLOAD')) {
91 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
92 }
93 }
94
95 if (!empty($this->get('data'))) {
96 $data = array_merge($data, $this->get('data'));
97 }
98 if ($api_action === 'template/upload2') {
99 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
100 } else {
101 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
102 }
103
104 $json = curl_exec($ch);
105 $curl_errno = curl_errno($ch);
106 $curl_error = curl_error($ch);
107 $curl_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
108 $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
109 curl_close($ch);
110 // phpcs:enable
111
112 if ($curl_errno > 0) {
113 if ($this->get_api_server() === $this->get_api_server($api_server)) {
114 $response['error'] = '[' . $curl_errno . '] ' . $curl_error;
115 } else {
116 return $this->request($key, $this->get_api_server($api_server));
117 }
118 } elseif ($curl_code < 200 || $curl_code >= 300) {
119 if ($this->get_api_server() === $this->get_api_server($api_server)) {
120 $response['error'] = '[' . $curl_code . ']';
121 } else {
122 return $this->request($key, $this->get_api_server($api_server));
123 }
124 } else {
125 if ($api_protocol == '1' && strpos($curl_type, 'application/octet-stream') !== false) {
126 $response['file'] = $json;
127 } else {
128 $result = json_decode($json, true);
129 $response = isset($result['response']) ? $result['response'] : null;
130 if (!empty($response['file'])) {
131 // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
132 $response['file'] = base64_decode($response['file']);
133 }
134 }
135 if (empty($response)) {
136 if ($this->get_api_server() === $this->get_api_server($api_server)) {
137 $response['error'] = __('Something went wrong!', 'e2pdf');
138 } else {
139 return $this->request($key, $this->get_api_server($api_server));
140 }
141 }
142 }
143
144 if ($key) {
145 if (isset($response[$key])) {
146 return $response[$key];
147 } else {
148 return false;
149 }
150 } else {
151 if ($api_action == 'template/build' || ($api_action == 'license/info' && $this->get('reload') === false)) {
152 if (isset($response['error']) && $response['error'] == 'Site Url Not Found. Please try to "Reactivate" plugin.') {
153 $license = $this->helper->load('license');
154 if ($license && method_exists($license, 'reactivate') && $license->reactivate()) {
155 return $this->request($key, $api_server);
156 }
157 }
158 if (isset($response['error']) && $response['error'] == 'License Key does not match this site. Please correct License Key to continue usage.') {
159 $license = $this->helper->load('license');
160 if ($license && method_exists($license, 'restore') && $license->restore()) {
161 return $this->request($key, $api_server);
162 }
163 }
164 }
165 return $response;
166 }
167 }
168 return false;
169 }
170
171 public function get_api_server($api_server = false) {
172 if (!$api_server) {
173 if (defined('E2PDF_API_SERVER')) {
174 $api_server = E2PDF_API_SERVER;
175 } else {
176 $api_server = apply_filters('e2pdf_api', get_option('e2pdf_api', 'api.e2pdf.com'));
177 }
178 return $api_server;
179 }
180 switch ($api_server) {
181 case 'api.e2pdf.com':
182 $api_server = 'api2.e2pdf.com';
183 break;
184 case 'api2.e2pdf.com':
185 $api_server = 'api3.e2pdf.com';
186 break;
187 case 'api3.e2pdf.com':
188 $api_server = 'api4.e2pdf.com';
189 break;
190 case 'api4.e2pdf.com':
191 $api_server = 'api.e2pdf.com';
192 break;
193 default:
194 break;
195 }
196 return $api_server;
197 }
198
199 // set
200 public function set($key, $value = false) {
201 if (is_array($key)) {
202 foreach ($key as $attr => $value) {
203 $this->api->$attr = $value;
204 }
205 } else {
206 $this->api->$key = $value;
207 }
208 return $this;
209 }
210
211 public function get($key) {
212 return property_exists($this->api, $key) ? $this->api->$key : null;
213 }
214
215 // get license
216 public function get_license() {
217 return get_option('e2pdf_license', false);
218 }
219 }
220