prepare_template( $data ); } if ( ! empty( $templates ) ) { set_transient( self::LIBRARY_PREPARED_KEY, $templates, DAY_IN_SECONDS ); } } } return $templates ? $templates : []; } public function get_tags() { $library_data = self::get_library_data(); return ( ! empty( $library_data['tags'] ) ? $library_data['tags'] : [] ); } private function get_placeholder( $alt = '' ) { return sprintf( '%s', esc_url( ELEMENTOR_ASSETS_URL . 'images/placeholder.png' ), esc_attr( $alt ) ); } /** * Prepare template items to match model * * @param array $data * * @return array */ private function prepare_template( $data ) { return [ 'template_id' => $data['id'], 'title' => $data['name'], 'type' => $data['type'], 'thumbnail' => $data['thumbnail'] ? $data['thumbnail_html'] : $this->get_placeholder( $data['name'] ), 'date' => $data['date'], 'tags' => $data['tags'], 'favorite' => false, 'views' => $data['views'], 'downloads' => $data['downloads'], 'categories' => $data['categories'], 'isPro' => $data['is_pro'], 'url' => $data['_links']['preview'][0]['href'], 'download' => $data['_links']['download'][0]['href'], ]; } /** * Get library data from remote source and cache * * @param boolean $force_update * * @return false|array */ private static function request_library_data( $force_update = false ) { $data = get_option( self::LIBRARY_CACHE_KEY ); if ( $force_update || false === $data ) { $timeout = ( $force_update ) ? 25 : 8; delete_transient( self::LIBRARY_PREPARED_KEY ); $response = absp_remote_get( self::API_TEMPLATES_INFO_URL, [ 'timeout' => $timeout ] ); if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) { update_option( self::LIBRARY_CACHE_KEY, [] ); return false; } $data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $data ) || ! is_array( $data ) ) { update_option( self::LIBRARY_CACHE_KEY, [] ); return false; } $data['updated_at'] = time(); update_option( self::LIBRARY_CACHE_KEY, $data, 'no' ); } return $data; } /** * Get library data * * @param boolean $force_update * * @return array */ public static function get_library_data( $force_update = false ) { self::request_library_data( $force_update ); $data = get_option( self::LIBRARY_CACHE_KEY ); if ( ! isset( $data['updated_at'] ) || $data['updated_at'] + self::LIBRARY_CACHE_TTL > time() ) { self::request_library_data( true ); } if ( empty( $data ) ) { return []; } return $data; } /** * Get remote template. * * Retrieve a single remote template from Elementor.com servers. * * @param int $template_id The template ID. * * @return array Remote template. */ public function get_item( $template_id ) { $templates = $this->get_items(); return $templates[ $template_id ]; } public static function request_template_data( $template_id ) { if ( empty( $template_id ) ) { return false; } $body = [ 'home_url' => trailingslashit( home_url() ), 'version' => ABSOLUTE_ADDONS_VERSION, ]; if ( absp_has_pro() ) { $body['has_pro'] = 1; $body['pro_version'] = ABSOLUTE_ADDONS_PRO_VERSION; $body['signature'] = absolute_addons_pro_signature(); } $response = absp_remote_get( str_replace( '#ID#', $template_id, self::API_TEMPLATE_DATA_URL ), [ 'body' => $body, 'timeout' => 25, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout ] ); $data = wp_remote_retrieve_body( $response ); return $data ? json_decode( $data, true ) : false; } /** * Get remote template data. * * Retrieve the data of a single remote template from Elementor.com servers. * * @return array|WP_Error Remote Template data. * @throws Exception */ public function get_data( array $args, $context = 'display' ) { $data = self::request_template_data( $args['template_id'] ); if ( ! is_array( $data ) || empty( $data ) || empty( $data['content'] ) ) { throw new Exception( __( 'Template does not have any content', 'absolute-addons' ) ); } $data['content'] = $this->replace_elements_ids( $data['content'] ); $data['content'] = $this->process_export_import_content( $data['content'], 'on_import' ); $post_id = $args['editor_post_id']; $document = ElementorPlug::instance()->documents->get( $post_id ); if ( $document ) { $data['content'] = $document->get_elements_raw_data( $data['content'], true ); } return $data; } } // End of file class-base-widget.php.