PluginProbe
Elementor Website Builder – more than just a page builder / 3.4.2
Elementor Website Builder – more than just a page builder v3.4.2
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / includes / api.php

api.php in Elementor Website Builder – more than just a page builder 3.4.2, at includes/api.php

295 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor;
3
4 use Elementor\Core\Common\Modules\Connect\Apps\Library;
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit; // Exit if accessed directly.
8 }
9
10 /**
11 * Elementor API.
12 *
13 * Elementor API handler class is responsible for communicating with Elementor
14 * remote servers retrieving templates data and to send uninstall feedback.
15 *
16 * @since 1.0.0
17 */
18 class Api {
19
20 /**
21 * Elementor library option key.
22 */
23 const LIBRARY_OPTION_KEY = 'elementor_remote_info_library';
24
25 /**
26 * Elementor feed option key.
27 */
28 const FEED_OPTION_KEY = 'elementor_remote_info_feed_data';
29
30 /**
31 * API info URL.
32 *
33 * Holds the URL of the info API.
34 *
35 * @access public
36 * @static
37 *
38 * @var string API info URL.
39 */
40 public static $api_info_url = 'https://my.elementor.com/api/v1/info/';
41
42 /**
43 * API feedback URL.
44 *
45 * Holds the URL of the feedback API.
46 *
47 * @access private
48 * @static
49 *
50 * @var string API feedback URL.
51 */
52 private static $api_feedback_url = 'https://my.elementor.com/api/v1/feedback/';
53
54 /**
55 * Get info data.
56 *
57 * This function notifies the user of upgrade notices, new templates and contributors.
58 *
59 * @since 2.0.0
60 * @access private
61 * @static
62 *
63 * @param bool $force_update Optional. Whether to force the data retrieval or
64 * not. Default is false.
65 *
66 * @return array|false Info data, or false.
67 */
68 private static function get_info_data( $force_update = false ) {
69 $cache_key = 'elementor_remote_info_api_data_' . ELEMENTOR_VERSION;
70
71 $info_data = get_transient( $cache_key );
72
73 if ( $force_update || false === $info_data ) {
74 $timeout = ( $force_update ) ? 25 : 8;
75
76 $response = wp_remote_get( self::$api_info_url, [
77 'timeout' => $timeout,
78 'body' => [
79 // Which API version is used.
80 'api_version' => ELEMENTOR_VERSION,
81 // Which language to return.
82 'site_lang' => get_bloginfo( 'language' ),
83 ],
84 ] );
85
86 if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) {
87 set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
88
89 return false;
90 }
91
92 $info_data = json_decode( wp_remote_retrieve_body( $response ), true );
93
94 if ( empty( $info_data ) || ! is_array( $info_data ) ) {
95 set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
96
97 return false;
98 }
99
100 if ( isset( $info_data['library'] ) ) {
101 update_option( self::LIBRARY_OPTION_KEY, $info_data['library'], 'no' );
102
103 unset( $info_data['library'] );
104 }
105
106 if ( isset( $info_data['feed'] ) ) {
107 update_option( self::FEED_OPTION_KEY, $info_data['feed'], 'no' );
108
109 unset( $info_data['feed'] );
110 }
111
112 set_transient( $cache_key, $info_data, 12 * HOUR_IN_SECONDS );
113 }
114
115 return $info_data;
116 }
117
118 /**
119 * Get upgrade notice.
120 *
121 * Retrieve the upgrade notice if one exists, or false otherwise.
122 *
123 * @since 1.0.0
124 * @access public
125 * @static
126 *
127 * @return array|false Upgrade notice, or false none exist.
128 */
129 public static function get_upgrade_notice() {
130 $data = self::get_info_data();
131
132 if ( empty( $data['upgrade_notice'] ) ) {
133 return false;
134 }
135
136 return $data['upgrade_notice'];
137 }
138
139 public static function get_admin_notice() {
140 $data = self::get_info_data();
141 if ( empty( $data['admin_notice'] ) ) {
142 return false;
143 }
144 return $data['admin_notice'];
145 }
146
147 public static function get_canary_deployment_info( $force = false ) {
148 $data = self::get_info_data( $force );
149
150 if ( empty( $data['canary_deployment'] ) ) {
151 return false;
152 }
153
154 return $data['canary_deployment'];
155 }
156
157 public static function get_promotion_widgets() {
158 $data = self::get_info_data();
159
160 if ( ! isset( $data['pro_widgets'] ) ) {
161 $data['pro_widgets'] = [];
162 }
163
164 return $data['pro_widgets'];
165 }
166
167 /**
168 * Get templates data.
169 *
170 * Retrieve the templates data from a remote server.
171 *
172 * @since 2.0.0
173 * @access public
174 * @static
175 *
176 * @param bool $force_update Optional. Whether to force the data update or
177 * not. Default is false.
178 *
179 * @return array The templates data.
180 */
181 public static function get_library_data( $force_update = false ) {
182 self::get_info_data( $force_update );
183
184 $library_data = get_option( self::LIBRARY_OPTION_KEY );
185
186 if ( empty( $library_data ) ) {
187 return [];
188 }
189
190 return $library_data;
191 }
192
193 /**
194 * Get feed data.
195 *
196 * Retrieve the feed info data from remote elementor server.
197 *
198 * @since 1.9.0
199 * @access public
200 * @static
201 *
202 * @param bool $force_update Optional. Whether to force the data update or
203 * not. Default is false.
204 *
205 * @return array Feed data.
206 */
207 public static function get_feed_data( $force_update = false ) {
208 self::get_info_data( $force_update );
209
210 $feed = get_option( self::FEED_OPTION_KEY );
211
212 if ( empty( $feed ) ) {
213 return [];
214 }
215
216 return $feed;
217 }
218
219 /**
220 * Get template content.
221 *
222 * Retrieve the templates content received from a remote server.
223 *
224 * @since 1.0.0
225 * @access public
226 * @static
227 *
228 * @param int $template_id The template ID.
229 *
230 * @return object|\WP_Error The template content.
231 */
232 public static function get_template_content( $template_id ) {
233 /** @var Library $library */
234 $library = Plugin::$instance->common->get_component( 'connect' )->get_app( 'library' );
235
236 return $library->get_template_content( $template_id );
237 }
238
239 /**
240 * Send Feedback.
241 *
242 * Fires a request to Elementor server with the feedback data.
243 *
244 * @since 1.0.0
245 * @access public
246 * @static
247 *
248 * @param string $feedback_key Feedback key.
249 * @param string $feedback_text Feedback text.
250 *
251 * @return array The response of the request.
252 */
253 public static function send_feedback( $feedback_key, $feedback_text ) {
254 return wp_remote_post( self::$api_feedback_url, [
255 'timeout' => 30,
256 'body' => [
257 'api_version' => ELEMENTOR_VERSION,
258 'site_lang' => get_bloginfo( 'language' ),
259 'feedback_key' => $feedback_key,
260 'feedback' => $feedback_text,
261 ],
262 ] );
263 }
264
265 /**
266 * Ajax reset API data.
267 *
268 * Reset Elementor library API data using an ajax call.
269 *
270 * @since 1.0.0
271 * @access public
272 * @static
273 */
274 public static function ajax_reset_api_data() {
275 check_ajax_referer( 'elementor_reset_library', '_nonce' );
276
277 self::get_info_data( true );
278
279 wp_send_json_success();
280 }
281
282 /**
283 * Init.
284 *
285 * Initialize Elementor API.
286 *
287 * @since 1.0.0
288 * @access public
289 * @static
290 */
291 public static function init() {
292 add_action( 'wp_ajax_elementor_reset_library', [ __CLASS__, 'ajax_reset_api_data' ] );
293 }
294 }
295