balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

remote.php (5664B)


      1 <?php
      2 namespace Elementor\TemplateLibrary;
      3 
      4 use Elementor\Api;
      5 use Elementor\Plugin;
      6 
      7 if ( ! defined( 'ABSPATH' ) ) {
      8 	exit; // Exit if accessed directly.
      9 }
     10 
     11 /**
     12  * Elementor template library remote source.
     13  *
     14  * Elementor template library remote source handler class is responsible for
     15  * handling remote templates from Elementor.com servers.
     16  *
     17  * @since 1.0.0
     18  */
     19 class Source_Remote extends Source_Base {
     20 
     21 	/**
     22 	 * Get remote template ID.
     23 	 *
     24 	 * Retrieve the remote template ID.
     25 	 *
     26 	 * @since 1.0.0
     27 	 * @access public
     28 	 *
     29 	 * @return string The remote template ID.
     30 	 */
     31 	public function get_id() {
     32 		return 'remote';
     33 	}
     34 
     35 	/**
     36 	 * Get remote template title.
     37 	 *
     38 	 * Retrieve the remote template title.
     39 	 *
     40 	 * @since 1.0.0
     41 	 * @access public
     42 	 *
     43 	 * @return string The remote template title.
     44 	 */
     45 	public function get_title() {
     46 		return esc_html__( 'Remote', 'elementor' );
     47 	}
     48 
     49 	/**
     50 	 * Register remote template data.
     51 	 *
     52 	 * Used to register custom template data like a post type, a taxonomy or any
     53 	 * other data.
     54 	 *
     55 	 * @since 1.0.0
     56 	 * @access public
     57 	 */
     58 	public function register_data() {}
     59 
     60 	/**
     61 	 * Get remote templates.
     62 	 *
     63 	 * Retrieve remote templates from Elementor.com servers.
     64 	 *
     65 	 * @since 1.0.0
     66 	 * @access public
     67 	 *
     68 	 * @param array $args Optional. Nou used in remote source.
     69 	 *
     70 	 * @return array Remote templates.
     71 	 */
     72 	public function get_items( $args = [] ) {
     73 		$library_data = Api::get_library_data();
     74 
     75 		$templates = [];
     76 
     77 		if ( ! empty( $library_data['templates'] ) ) {
     78 			foreach ( $library_data['templates'] as $template_data ) {
     79 				$templates[] = $this->prepare_template( $template_data );
     80 			}
     81 		}
     82 
     83 		return $templates;
     84 	}
     85 
     86 	/**
     87 	 * Get remote template.
     88 	 *
     89 	 * Retrieve a single remote template from Elementor.com servers.
     90 	 *
     91 	 * @since 1.0.0
     92 	 * @access public
     93 	 *
     94 	 * @param int $template_id The template ID.
     95 	 *
     96 	 * @return array Remote template.
     97 	 */
     98 	public function get_item( $template_id ) {
     99 		$templates = $this->get_items();
    100 
    101 		return $templates[ $template_id ];
    102 	}
    103 
    104 	/**
    105 	 * Save remote template.
    106 	 *
    107 	 * Remote template from Elementor.com servers cannot be saved on the
    108 	 * database as they are retrieved from remote servers.
    109 	 *
    110 	 * @since 1.0.0
    111 	 * @access public
    112 	 *
    113 	 * @param array $template_data Remote template data.
    114 	 *
    115 	 * @return \WP_Error
    116 	 */
    117 	public function save_item( $template_data ) {
    118 		return new \WP_Error( 'invalid_request', 'Cannot save template to a remote source' );
    119 	}
    120 
    121 	/**
    122 	 * Update remote template.
    123 	 *
    124 	 * Remote template from Elementor.com servers cannot be updated on the
    125 	 * database as they are retrieved from remote servers.
    126 	 *
    127 	 * @since 1.0.0
    128 	 * @access public
    129 	 *
    130 	 * @param array $new_data New template data.
    131 	 *
    132 	 * @return \WP_Error
    133 	 */
    134 	public function update_item( $new_data ) {
    135 		return new \WP_Error( 'invalid_request', 'Cannot update template to a remote source' );
    136 	}
    137 
    138 	/**
    139 	 * Delete remote template.
    140 	 *
    141 	 * Remote template from Elementor.com servers cannot be deleted from the
    142 	 * database as they are retrieved from remote servers.
    143 	 *
    144 	 * @since 1.0.0
    145 	 * @access public
    146 	 *
    147 	 * @param int $template_id The template ID.
    148 	 *
    149 	 * @return \WP_Error
    150 	 */
    151 	public function delete_template( $template_id ) {
    152 		return new \WP_Error( 'invalid_request', 'Cannot delete template from a remote source' );
    153 	}
    154 
    155 	/**
    156 	 * Export remote template.
    157 	 *
    158 	 * Remote template from Elementor.com servers cannot be exported from the
    159 	 * database as they are retrieved from remote servers.
    160 	 *
    161 	 * @since 1.0.0
    162 	 * @access public
    163 	 *
    164 	 * @param int $template_id The template ID.
    165 	 *
    166 	 * @return \WP_Error
    167 	 */
    168 	public function export_template( $template_id ) {
    169 		return new \WP_Error( 'invalid_request', 'Cannot export template from a remote source' );
    170 	}
    171 
    172 	/**
    173 	 * Get remote template data.
    174 	 *
    175 	 * Retrieve the data of a single remote template from Elementor.com servers.
    176 	 *
    177 	 * @since 1.5.0
    178 	 * @access public
    179 	 *
    180 	 * @param array  $args    Custom template arguments.
    181 	 * @param string $context Optional. The context. Default is `display`.
    182 	 *
    183 	 * @return array|\WP_Error Remote Template data.
    184 	 */
    185 	public function get_data( array $args, $context = 'display' ) {
    186 		$data = Api::get_template_content( $args['template_id'] );
    187 
    188 		if ( is_wp_error( $data ) ) {
    189 			return $data;
    190 		}
    191 
    192 		// BC.
    193 		$data = (array) $data;
    194 
    195 		$data['content'] = $this->replace_elements_ids( $data['content'] );
    196 		$data['content'] = $this->process_export_import_content( $data['content'], 'on_import' );
    197 
    198 		$post_id = $args['editor_post_id'];
    199 		$document = Plugin::$instance->documents->get( $post_id );
    200 		if ( $document ) {
    201 			$data['content'] = $document->get_elements_raw_data( $data['content'], true );
    202 		}
    203 
    204 		return $data;
    205 	}
    206 
    207 	/**
    208 	 * @since 2.2.0
    209 	 * @access private
    210 	 */
    211 	private function prepare_template( array $template_data ) {
    212 		$favorite_templates = $this->get_user_meta( 'favorites' );
    213 
    214 		return [
    215 			'template_id' => $template_data['id'],
    216 			'source' => $this->get_id(),
    217 			'type' => $template_data['type'],
    218 			'subtype' => $template_data['subtype'],
    219 			'title' => $template_data['title'],
    220 			'thumbnail' => $template_data['thumbnail'],
    221 			'date' => $template_data['tmpl_created'],
    222 			'author' => $template_data['author'],
    223 			'tags' => json_decode( $template_data['tags'] ),
    224 			'isPro' => ( '1' === $template_data['is_pro'] ),
    225 			'accessLevel' => $template_data['access_level'],
    226 			'popularityIndex' => (int) $template_data['popularity_index'],
    227 			'trendIndex' => (int) $template_data['trend_index'],
    228 			'hasPageSettings' => ( '1' === $template_data['has_page_settings'] ),
    229 			'url' => $template_data['url'],
    230 			'favorite' => ! empty( $favorite_templates[ $template_data['id'] ] ),
    231 		];
    232 	}
    233 }