FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
elementor
/
app
/
modules
/
import-export-customization
/
runners
/
import
Edit File: templates.php
<?php namespace Elementor\App\Modules\ImportExportCustomization\Runners\Import; use Elementor\App\Modules\ImportExportCustomization\Utils as ImportExportUtils; use Elementor\Plugin; use Elementor\TemplateLibrary\Source_Local; use Elementor\Utils; use Elementor\Modules\Library\Documents\Library_Document; class Templates extends Import_Runner_Base { private $import_session_id; private $import_session_metadata = []; public static function get_name(): string { return 'templates'; } public function should_import( array $data ) { return ( Utils::has_pro() && isset( $data['include'] ) && in_array( 'templates', $data['include'], true ) && ! empty( $data['extracted_directory_path'] ) && ! empty( $data['manifest']['templates'] ) ); } public function import( array $data, array $imported_data ) { $customization = $data['customization']['templates'] ?? null; if ( $customization ) { return $this->import_with_customization( $data, $imported_data, $customization ); } return $this->import_all( $data, $imported_data ); } private function import_with_customization( array $data, array $imported_data, array $customization ) { $result = apply_filters( 'elementor/import-export-customization/import/templates/customization', null, $data, $imported_data, $customization, $this ); if ( is_array( $result ) ) { return $result; } return $this->import_all( $data, $imported_data ); } private function import_all( array $data, array $imported_data ) { $template_types = array_keys( Plugin::$instance->documents->get_document_types( [ 'is_editable' => true, 'show_in_library' => true, 'export_group' => Library_Document::EXPORT_GROUP, ] ) ); $result = $this->process_templates_import( $data, $template_types ); /** * Filter the templates import result to allow 3rd parties to add their own imported templates. * * @param array $result The import result structure with 'templates' key containing succeed/failed/succeed_summary. * @param array $data The full import data. * @param array|null $customization The customization settings for templates. * @param object $runner The runner instance. */ $customization = $data['customization']['templates'] ?? null; $result = apply_filters( 'elementor/import-export-customization/import/templates_result', $result, $data, $customization, $this ); return $result; } public function process_templates_import( array $data, array $template_types ) { $this->import_session_id = $data['session_id']; $path = $data['extracted_directory_path'] . 'templates/'; $templates = $data['manifest']['templates']; $result['templates'] = [ 'succeed' => [], 'failed' => [], 'succeed_summary' => [], ]; foreach ( $templates as $id => $template_settings ) { if ( ! empty( $template_types ) && ! in_array( $template_settings['doc_type'], $template_types, true ) ) { continue; } try { $template_data = ImportExportUtils::read_json_file( $path . $id ); $import = $this->import_template( $id, $template_settings, $template_data ); $result['templates']['succeed'][ $id ] = $import; $result['templates']['succeed_summary'][ $template_settings['doc_type'] ] = ( $result['templates']['succeed_summary'][ $template_settings['doc_type'] ] ?? 0 ) + 1; } catch ( \Exception $error ) { $result['templates']['failed'][ $id ] = $error->getMessage(); } } return $result; } public function import_template( $id, array $template_settings, array $template_data ) { $doc_type = $template_settings['doc_type']; $new_document = Plugin::$instance->documents->create( $doc_type, [ 'post_title' => $template_settings['title'], 'post_type' => Source_Local::CPT, 'post_status' => 'publish', ] ); if ( is_wp_error( $new_document ) ) { throw new \Exception( esc_html( $new_document->get_error_message() ) ); } $template_data['import_settings'] = $template_settings; $template_data['id'] = $id; $new_attachment_callback = function( $attachment_id ) { $this->set_session_post_meta( $attachment_id, $this->import_session_id ); }; add_filter( 'elementor/template_library/import_images/new_attachment', $new_attachment_callback ); $new_document->import( $template_data ); remove_filter( 'elementor/template_library/import_images/new_attachment', $new_attachment_callback ); $document_id = $new_document->get_main_id(); $this->set_session_post_meta( $document_id, $this->import_session_id ); return $document_id; } public function get_import_session_metadata(): array { return $this->import_session_metadata; } public function add_import_session_metadata( $key, $metadata ) { $this->import_session_metadata[ $key ] = $metadata; } }
Save
Back