PluginProbe ʕ •ᴥ•ʔ
Elementor Website Builder – more than just a page builder / 3.23.3
Elementor Website Builder – more than just a page builder v3.23.3
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 4.0.6 4.0.5 4.0.4 4.0.3 3.22.0-dev1 4.0.0-beta3 3.22.0-dev2 4.0.0-beta4 3.22.0-dev3 4.0.0-beta5 3.22.0-dev4 4.0.0-dev1 3.22.0-dev5 4.0.0-dev2 3.22.0-dev6 4.0.0-dev3 3.22.1 4.0.0-dev4 3.22.2 4.0.0-dev5 3.22.3 4.0.1 3.23.0 4.0.2 3.23.0-beta1 3.23.0-beta2 3.23.0-beta3 3.23.0-beta4 3.23.0-beta5 3.23.0-beta6 3.23.0-dev1 3.23.0-dev2 3.23.0-dev3 3.23.0-dev4 3.23.0-dev5 3.23.0-dev6 3.23.1 3.23.2 3.23.3 3.23.4 3.24.0 3.24.0-beta1 3.24.0-beta2 3.24.0-beta3 3.24.0-dev1 3.24.0-dev2 3.24.0-dev3 3.24.1 3.24.2 3.24.3 3.24.4 3.24.5 3.24.6 3.24.7 3.24.8 3.25.0 3.25.0-beta1 3.25.0-beta2 3.25.0-beta3 3.25.0-dev1 3.25.0-dev2 3.25.0-dev3 3.25.1 3.25.10 3.25.11 3.25.2 3.25.3 3.25.4 3.25.5 3.25.6 3.25.7 3.25.8 3.25.9 3.26.0 3.26.0-beta1 3.26.0-beta2 3.26.0-beta3 3.26.0-beta4 3.26.0-beta5 3.26.0-dev1 3.26.0-dev2 3.26.0-dev3 3.26.0-dev4 3.26.0-dev5 3.26.1 3.26.2 3.26.3 3.26.4 3.26.5 3.27.0 3.27.0-beta1 3.27.0-beta2 3.27.0-dev1 3.27.0-dev2 3.27.1 3.27.2 3.27.3 3.27.4 3.27.5 3.27.6 3.27.7 3.28.0 3.28.0-beta1 3.28.0-beta2 3.28.0-beta3 3.28.0-dev1 3.28.0-dev2 3.28.0-dev3 3.28.1 3.28.2 3.28.3 3.28.4 3.29.0 3.29.0-beta1 trunk 3.29.0-beta2 3.0.0 3.29.0-beta3 3.0.1 3.29.0-beta4 3.0.10 3.29.0-dev1 3.0.11 3.29.0-dev2 3.0.12 3.29.0-dev3 3.0.13 3.29.0-dev4 3.0.14 3.29.1 3.0.15 3.29.2 3.0.16 3.3.0 3.0.2 3.3.1 3.0.3 3.30.0 3.0.4 3.30.0-beta1 3.0.5 3.30.0-beta2 3.0.6 3.30.0-beta3 3.0.7 3.30.0-dev1 3.0.8 3.30.0-dev2 3.0.8.1 3.30.0-dev3 3.0.9 3.30.1 3.1.0 3.30.2 3.1.0-beta1 3.30.3 3.1.0-beta2 3.30.4 3.1.0-beta3 3.31.0 3.1.0-beta4 3.31.0-beta1 3.1.0-dev1 3.31.0-beta2 3.1.0-dev2 3.31.0-dev1 3.1.0-dev3 3.31.0-dev2 3.1.1 3.31.1 3.1.2 3.31.2 3.1.3 3.31.3 3.1.4 3.31.4 3.10.0 3.31.5 3.10.0-dev1 3.32.0 3.10.1 3.32.0-beta1 3.10.2 3.32.0-beta2 3.11.0 3.32.0-beta3 3.11.0-beta1 3.32.0-dev1 3.11.0-beta2 3.32.0-dev2 3.11.0-beta3 3.32.0-dev3 3.11.0-dev1 3.32.1 3.11.0-dev2 3.32.2 3.11.0-dev3 3.32.3 3.11.1 3.32.4 3.11.2 3.32.5 3.11.3 3.33.0 3.11.4 3.33.0-beta1 3.11.5 3.33.0-beta2 3.12.0 3.33.0-beta3 3.12.1 3.33.0-beta4 3.12.2 3.33.0-dev1 3.13.0 3.33.0-dev2 3.13.0-beta1 3.33.0-dev3 3.13.0-beta2 3.33.0-dev4 3.13.0-beta3 3.33.1 3.13.0-dev3 3.33.2 3.13.0-dev4 3.33.3 3.13.1 3.33.4 3.13.2 3.33.5 3.13.3 3.33.6 3.13.4 3.34.0 3.14.0 3.34.0-beta1 3.14.0-beta1 3.34.0-beta2 3.14.0-beta2 3.34.0-beta3 3.14.0-beta3 3.34.0-dev1 3.14.0-beta4 3.34.0-dev2 3.14.0-beta5 3.34.1 3.14.1 3.34.2 3.15.0 3.34.3 3.15.1 3.34.4 3.15.2 3.35.0 3.15.3 3.35.0-beta1 3.16.0 3.35.0-beta2 3.16.0-beta3 3.35.0-beta3 3.16.0-beta4 3.35.0-beta4 3.16.0-dev1 3.35.0-dev1 3.16.0-dev2 3.35.0-dev2 3.16.1 3.35.0-dev3 3.16.2 3.35.0-dev4 3.16.3 3.35.1 3.16.4 3.35.2 3.16.5 3.35.3 3.16.6 3.35.4 3.17.0 3.35.5 3.17.0-dev2 3.35.6 3.17.0-dev3 3.35.7 3.17.0-dev4 3.35.8 3.17.1 3.35.9 3.17.2 3.4.0 3.17.3 3.4.0-dev7 3.18.0 3.4.0-dev8 3.18.0-beta1 3.4.0-dev9 3.18.0-beta2 3.4.1 3.18.0-beta3 3.4.2 3.18.0-beta4 3.4.3 3.18.0-dev1 3.4.4 3.18.1 3.4.5 3.18.2 3.4.6 3.18.3 3.4.7 3.19.0 3.4.8 3.19.0-beta1 3.5.0 3.19.0-beta2 3.5.0-beta1 3.19.0-beta3 3.5.0-beta2 3.19.0-beta4 3.5.0-beta3 3.19.0-beta5 3.5.0-beta4 3.19.0-beta6 3.5.0-beta5 3.19.0-dev1 3.5.0-beta7 3.19.0-dev2 3.5.0-beta8 3.19.0-dev3 3.5.0-dev8 3.19.0-dev4 3.5.0-dev9 3.19.0-dev5 3.5.1 3.19.0-dev6 3.5.2 3.19.1 3.5.3 3.19.2 3.5.4 3.19.3 3.5.5 3.19.4 3.5.6 3.2.0 3.6.0 3.2.1 3.6.0-beta1 3.2.2 3.6.0-beta2 3.2.3 3.6.0-beta3 3.2.4 3.6.0-beta4 3.2.5 3.6.0-beta5 3.20.0 3.6.0-dev1 3.20.0-beta1 3.6.0-dev10 3.20.0-beta2 3.6.1 3.20.0-beta3 3.6.2 3.20.0-beta4 3.6.3 3.20.0-dev1 3.6.4 3.20.0-dev2 3.6.5 3.20.0-dev3 3.6.6 3.20.0-dev4 3.6.7 3.20.1 3.6.8 3.20.2 3.7.0 3.20.3 3.7.0-beta1 3.20.4 3.7.0-beta2 3.21.0 3.7.0-beta3 3.21.0-beta1 3.7.0-beta4 3.21.0-beta2 3.7.0-dev1 3.21.0-beta3 3.7.1 3.21.0-dev1 3.7.2 3.21.0-dev2 3.7.3 3.21.0-dev3 3.7.4 3.21.1 3.7.5 3.21.2 3.7.6 3.21.3 3.7.7 3.21.4 3.7.8 3.21.5 3.8.0 3.21.6 3.8.0-beta1 3.21.7 3.8.0-beta2 3.21.8 3.8.0-beta3 3.22.0 3.8.1 3.22.0-beta1 3.9.0 3.22.0-beta2 3.9.1 3.22.0-beta3 3.9.2 3.22.0-beta4 4.0.0 3.22.0-beta5 4.0.0-beta1 3.22.0-beta6 4.0.0-beta2
elementor / includes / api.php
elementor / includes Last commit date
admin-templates 3 years ago base 2 years ago controls 1 year ago editor-templates 1 year ago elements 2 years ago interfaces 1 year ago libraries 3 years ago managers 1 year ago settings 1 year ago template-library 1 year ago widgets 1 year ago api.php 2 years ago autoloader.php 1 year ago beta-testers.php 3 years ago compatibility.php 3 years ago conditions.php 3 years ago db.php 2 years ago embed.php 1 year ago fonts.php 1 year ago frontend.php 1 year ago heartbeat.php 3 years ago maintenance-mode.php 2 years ago maintenance.php 3 years ago plugin.php 2 years ago preview.php 2 years ago rollback.php 3 years ago shapes.php 1 year ago stylesheet.php 3 years ago tracker.php 2 years ago user.php 2 years ago utils.php 2 years ago
api.php
302 lines
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 const TRANSIENT_KEY_PREFIX = 'elementor_remote_info_api_data_';
31
32
33 /**
34 * API info URL.
35 *
36 * Holds the URL of the info API.
37 *
38 * @access public
39 * @static
40 *
41 * @var string API info URL.
42 */
43 public static $api_info_url = 'https://my.elementor.com/api/v1/info/';
44
45 /**
46 * API feedback URL.
47 *
48 * Holds the URL of the feedback API.
49 *
50 * @access private
51 * @static
52 *
53 * @var string API feedback URL.
54 */
55 private static $api_feedback_url = 'https://my.elementor.com/api/v1/feedback/';
56
57 /**
58 * Get info data.
59 *
60 * This function notifies the user of upgrade notices, new templates and contributors.
61 *
62 * @since 2.0.0
63 * @access private
64 * @static
65 *
66 * @param bool $force_update Optional. Whether to force the data retrieval or
67 * not. Default is false.
68 *
69 * @return array|false Info data, or false.
70 */
71 private static function get_info_data( $force_update = false ) {
72 $cache_key = self::TRANSIENT_KEY_PREFIX . ELEMENTOR_VERSION;
73
74 $info_data = get_transient( $cache_key );
75
76 if ( $force_update || false === $info_data ) {
77 $timeout = ( $force_update ) ? 25 : 8;
78
79 $response = wp_remote_get( self::$api_info_url, [
80 'timeout' => $timeout,
81 'body' => [
82 // Which API version is used.
83 'api_version' => ELEMENTOR_VERSION,
84 // Which language to return.
85 'site_lang' => get_bloginfo( 'language' ),
86 ],
87 ] );
88
89 if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) {
90 set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
91
92 return false;
93 }
94
95 $info_data = json_decode( wp_remote_retrieve_body( $response ), true );
96
97 if ( empty( $info_data ) || ! is_array( $info_data ) ) {
98 set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
99
100 return false;
101 }
102
103 if ( isset( $info_data['library'] ) ) {
104 update_option( self::LIBRARY_OPTION_KEY, $info_data['library'], 'no' );
105
106 unset( $info_data['library'] );
107 }
108
109 if ( isset( $info_data['feed'] ) ) {
110 update_option( self::FEED_OPTION_KEY, $info_data['feed'], 'no' );
111
112 unset( $info_data['feed'] );
113 }
114
115 set_transient( $cache_key, $info_data, 12 * HOUR_IN_SECONDS );
116 }
117
118 return $info_data;
119 }
120
121 /**
122 * Get upgrade notice.
123 *
124 * Retrieve the upgrade notice if one exists, or false otherwise.
125 *
126 * @since 1.0.0
127 * @access public
128 * @static
129 *
130 * @return array|false Upgrade notice, or false none exist.
131 */
132 public static function get_upgrade_notice() {
133 $data = self::get_info_data();
134
135 if ( empty( $data['upgrade_notice'] ) ) {
136 return false;
137 }
138
139 return $data['upgrade_notice'];
140 }
141
142 public static function get_admin_notice() {
143 $data = self::get_info_data();
144 if ( empty( $data['admin_notice'] ) ) {
145 return false;
146 }
147 return $data['admin_notice'];
148 }
149
150 public static function get_canary_deployment_info( $force = false ) {
151 $data = self::get_info_data( $force );
152
153 if ( empty( $data['canary_deployment'] ) ) {
154 return false;
155 }
156
157 return $data['canary_deployment'];
158 }
159
160 public static function get_promotion_widgets() {
161 $data = self::get_info_data();
162
163 if ( ! isset( $data['pro_widgets'] ) ) {
164 $data['pro_widgets'] = [];
165 }
166
167 return $data['pro_widgets'];
168 }
169
170 /**
171 * Get templates data.
172 *
173 * Retrieve the templates data from a remote server.
174 *
175 * @since 2.0.0
176 * @access public
177 * @static
178 *
179 * @param bool $force_update Optional. Whether to force the data update or
180 * not. Default is false.
181 *
182 * @return array The templates data.
183 */
184 public static function get_library_data( $force_update = false ) {
185 self::get_info_data( $force_update );
186
187 $library_data = get_option( self::LIBRARY_OPTION_KEY );
188
189 if ( empty( $library_data ) ) {
190 return [];
191 }
192
193 return $library_data;
194 }
195
196 /**
197 * Get feed data.
198 *
199 * Retrieve the feed info data from remote elementor server.
200 *
201 * @since 1.9.0
202 * @access public
203 * @static
204 *
205 * @param bool $force_update Optional. Whether to force the data update or
206 * not. Default is false.
207 *
208 * @return array Feed data.
209 */
210 public static function get_feed_data( $force_update = false ) {
211 self::get_info_data( $force_update );
212
213 $feed = get_option( self::FEED_OPTION_KEY );
214
215 if ( empty( $feed ) ) {
216 return [];
217 }
218
219 return $feed;
220 }
221
222 /**
223 * Get template content.
224 *
225 * Retrieve the templates content received from a remote server.
226 *
227 * @since 1.0.0
228 * @access public
229 * @static
230 *
231 * @param int $template_id The template ID.
232 *
233 * @return object|\WP_Error The template content.
234 */
235 public static function get_template_content( $template_id ) {
236 /** @var Library $library */
237 $library = Plugin::$instance->common->get_component( 'connect' )->get_app( 'library' );
238
239 return $library->get_template_content( $template_id );
240 }
241
242 /**
243 * Send Feedback.
244 *
245 * Fires a request to Elementor server with the feedback data.
246 *
247 * @since 1.0.0
248 * @access public
249 * @static
250 *
251 * @param string $feedback_key Feedback key.
252 * @param string $feedback_text Feedback text.
253 *
254 * @return array The response of the request.
255 */
256 public static function send_feedback( $feedback_key, $feedback_text ) {
257 return wp_remote_post( self::$api_feedback_url, [
258 'timeout' => 30,
259 'body' => [
260 'api_version' => ELEMENTOR_VERSION,
261 'site_lang' => get_bloginfo( 'language' ),
262 'feedback_key' => $feedback_key,
263 'feedback' => $feedback_text,
264 ],
265 ] );
266 }
267
268 /**
269 * Ajax reset API data.
270 *
271 * Reset Elementor library API data using an ajax call.
272 *
273 * @since 1.0.0
274 * @access public
275 * @static
276 */
277 public static function ajax_reset_api_data() {
278 check_ajax_referer( 'elementor_reset_library', '_nonce' );
279
280 if ( ! current_user_can( 'manage_options' ) ) {
281 wp_send_json_error( 'Permission denied' );
282 }
283
284 self::get_info_data( true );
285
286 wp_send_json_success();
287 }
288
289 /**
290 * Init.
291 *
292 * Initialize Elementor API.
293 *
294 * @since 1.0.0
295 * @access public
296 * @static
297 */
298 public static function init() {
299 add_action( 'wp_ajax_elementor_reset_library', [ __CLASS__, 'ajax_reset_api_data' ] );
300 }
301 }
302