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/model/e2pdf-api.php +149 -83 1.08.001.32.49 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Api Model
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: /model/e2pdf-api.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,36 +12,54 @@
14 12 }
15 13
16 14 class Model_E2pdf_Api extends Model_E2pdf_Model {
17 15
18 - protected $api = NULL;
16 + protected $api;
19 17
20 - function __construct() {
18 + public function __construct() {
21 19 parent::__construct();
20 + $this->api = new stdClass();
22 21 }
23 22
24 - /**
25 - * Submit API Request to Remote Server
26 - *
27 - * @param string $key - Return Value by Key
28 - *
29 - * @return mixed
30 - */
31 - public function request($key = false) {
32 - if ($this->api->action) {
23 + // request
24 + public function request($key = false, $api_server = false) {
33 25
34 - $data = array(
35 - 'api_url' => site_url(),
36 - 'api_license_key' => $this->get_license(),
37 - 'api_processor' => get_option('e2pdf_processor') ? get_option('e2pdf_processor') : 0,
38 - );
26 + $api_action = $this->get('action');
27 + if ($api_action) {
39 28
40 - $api_server = apply_filters('e2pdf_api_server', 'api.e2pdf.com');
41 - $request_url = 'https://' . $api_server . '/' . $this->api->action;
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 + }
42 33
43 - $timeout = get_option('e2pdf_connection_timeout') === false ? 300 : get_option('e2pdf_connection_timeout');
34 + // fix for upgrade via dashboard -> updates
35 + if ($api_action == 'update/info' && !method_exists($this->helper, 'get_site_url')) {
36 + return [];
37 + }
44 38
45 - $ch = curl_init($request_url);
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());
46 62 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
47 63 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
48 64 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
49 65 if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
@@ -48,49 +64,81 @@
48 64 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
49 65 if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
50 66 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
51 67 }
52 - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
68 + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int) get_option('e2pdf_connection_timeout', '300'));
53 69
54 - if (!empty($this->api->data)) {
55 - $data = array_merge($data, $this->api->data);
70 + if (defined('E2PDF_API_PROXY')) {
71 + curl_setopt($ch, CURLOPT_PROXY, E2PDF_API_PROXY);
56 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 + }
57 94
58 - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
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 + }
59 103
60 104 $json = curl_exec($ch);
61 105 $curl_errno = curl_errno($ch);
62 106 $curl_error = curl_error($ch);
107 + $curl_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
108 + $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
63 109 curl_close($ch);
110 + // phpcs:enable
64 111
65 112 if ($curl_errno > 0) {
66 - $response['error'] = "[{$curl_errno}] {$curl_error}";
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 + }
67 124 } else {
68 -
69 - if (($this->api->action === 'template/build' || $this->api->action === 'template/parse') && get_option('e2pdf_developer')) {
70 - $model_e2pdf_options = new Model_E2pdf_Options();
71 - if (in_array($this->helper->get_ip(), $model_e2pdf_options->get_option('e2pdf_developer_ips'))) {
72 - $data = array(
73 - 'request_url' => $request_url,
74 - 'data' => $data,
75 - 'response' => $json
76 - );
77 - var_dump("<PRE>");
78 - var_dump($data);
79 - die();
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']);
80 133 }
81 134 }
82 -
83 - $result = json_decode($json, true);
84 - $response = $result['response'];
85 -
86 -
87 - if (($this->api->action === 'common/activate' || $this->api->action === 'license/update') && isset($response['license_key'])) {
88 - update_option('e2pdf_license', $response['license_key']);
89 - }
90 -
91 135 if (empty($response)) {
92 - $response['error'] = __("Something went wrong!", "e2pdf");
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 + }
93 141 }
94 142 }
95 143
96 144 if ($key) {
@@ -99,8 +147,22 @@
99 147 } else {
100 148 return false;
101 149 }
102 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 + }
103 165 return $response;
104 166 }
105 167 }
106 168 return false;
@@ -105,25 +167,38 @@
105 167 }
106 168 return false;
107 169 }
108 170
109 - /**
110 - * Remove API Request options
111 - */
112 - public function flush() {
113 - $this->api = null;
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;
114 197 }
115 198
116 - /**
117 - * Set options for API Request
118 - *
119 - * @param string $key - Key
120 - * @param mixed $value - Value
121 - */
199 + // set
122 200 public function set($key, $value = false) {
123 - if (!$this->api) {
124 - $this->api = new stdClass();
125 - }
126 201 if (is_array($key)) {
127 202 foreach ($key as $attr => $value) {
128 203 $this->api->$attr = $value;
129 204 }
@@ -129,25 +204,16 @@
129 204 }
130 205 } else {
131 206 $this->api->$key = $value;
132 207 }
208 + return $this;
133 209 }
134 210
135 - /**
136 - * Get License
137 - *
138 - * @return string - License Key
139 - */
140 - public function get_license() {
141 - return get_option('e2pdf_license');
211 + public function get($key) {
212 + return property_exists($this->api, $key) ? $this->api->$key : null;
142 213 }
143 214
144 - /**
145 - * Get Domain
146 - *
147 - * @return string - Domain
148 - */
149 - public function get_domain() {
150 - return site_url();
215 + // get license
216 + public function get_license() {
217 + return get_option('e2pdf_license', false);
151 218 }
152 -
153 219 }