$timeout, 'body' => [ // Which API version is used. 'api_version' => ELEMENTOR_VERSION, // Which language to return. 'site_lang' => get_bloginfo( 'language' ), ], ] ); if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) { set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS ); return false; } $info_data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $info_data ) || ! is_array( $info_data ) ) { set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS ); return false; } if ( isset( $info_data['library'] ) ) { update_option( self::LIBRARY_OPTION_KEY, $info_data['library'], 'no' ); unset( $info_data['library'] ); } if ( isset( $info_data['feed'] ) ) { update_option( self::FEED_OPTION_KEY, $info_data['feed'], 'no' ); unset( $info_data['feed'] ); } set_transient( $cache_key, $info_data, 12 * HOUR_IN_SECONDS ); } return $info_data; } /** * Get upgrade notice. * * Retrieve the upgrade notice if one exists, or false otherwise. * * @since 1.0.0 * @access public * @static * * @return array|false Upgrade notice, or false none exist. */ public static function get_upgrade_notice() { $data = self::get_info_data(); if ( empty( $data['upgrade_notice'] ) ) { return false; } return $data['upgrade_notice']; } public static function get_admin_notice() { $data = self::get_info_data(); if ( empty( $data['admin_notice'] ) ) { return false; } return $data['admin_notice']; } public static function get_canary_deployment_info( $force = false ) { $data = self::get_info_data( $force ); if ( empty( $data['canary_deployment'] ) ) { return false; } return $data['canary_deployment']; } public static function get_promotion_widgets() { $data = self::get_info_data(); if ( ! isset( $data['pro_widgets'] ) ) { $data['pro_widgets'] = []; } return $data['pro_widgets']; } /** * Get templates data. * * Retrieve the templates data from a remote server. * * @since 2.0.0 * @access public * @static * * @param bool $force_update Optional. Whether to force the data update or * not. Default is false. * * @return array The templates data. */ public static function get_library_data( $force_update = false ) { self::get_info_data( $force_update ); $library_data = get_option( self::LIBRARY_OPTION_KEY ); if ( empty( $library_data ) ) { return []; } return $library_data; } /** * Get feed data. * * Retrieve the feed info data from remote elementor server. * * @since 1.9.0 * @access public * @static * * @param bool $force_update Optional. Whether to force the data update or * not. Default is false. * * @return array Feed data. */ public static function get_feed_data( $force_update = false ) { self::get_info_data( $force_update ); $feed = get_option( self::FEED_OPTION_KEY ); if ( empty( $feed ) ) { return []; } return $feed; } /** * Get template content. * * Retrieve the templates content received from a remote server. * * @since 1.0.0 * @access public * @static * * @param int $template_id The template ID. * * @return object|\WP_Error The template content. */ public static function get_template_content( $template_id ) { /** @var Library $library */ $library = Plugin::$instance->common->get_component( 'connect' )->get_app( 'library' ); return $library->get_template_content( $template_id ); } /** * Send Feedback. * * Fires a request to Elementor server with the feedback data. * * @since 1.0.0 * @access public * @static * * @param string $feedback_key Feedback key. * @param string $feedback_text Feedback text. * * @return array The response of the request. */ public static function send_feedback( $feedback_key, $feedback_text ) { return wp_remote_post( self::$api_feedback_url, [ 'timeout' => 30, 'body' => [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'feedback_key' => $feedback_key, 'feedback' => $feedback_text, ], ] ); } /** * Ajax reset API data. * * Reset Elementor library API data using an ajax call. * * @since 1.0.0 * @access public * @static */ public static function ajax_reset_api_data() { check_ajax_referer( 'elementor_reset_library', '_nonce' ); self::get_info_data( true ); wp_send_json_success(); } /** * Init. * * Initialize Elementor API. * * @since 1.0.0 * @access public * @static */ public static function init() { add_action( 'wp_ajax_elementor_reset_library', [ __CLASS__, 'ajax_reset_api_data' ] ); } }