1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
<?php
namespace Elementor\App\Modules\ImportExport\Runners\Import;
use Elementor\App\Modules\ImportExport\Utils as ImportExportUtils; use Elementor\Plugin; use Elementor\TemplateLibrary\Source_Local; use Elementor\Utils;
class Templates extends Import_Runner_Base { private $import_session_id;
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 ) { $this->import_session_id = $data['session_id'];
$path = $data['extracted_directory_path'] . 'templates/'; $templates = $data['manifest']['templates'];
$result['templates'] = [ 'succeed' => [], 'failed' => [], ];
foreach ( $templates as $id => $template_settings ) { try { $template_data = ImportExportUtils::read_json_file( $path . $id ); $import = $this->import_template( $id, $template_settings, $template_data );
$result['templates']['succeed'][ $id ] = $import; } catch ( \Exception $error ) { $result['templates']['failed'][ $id ] = $error->getMessage(); } }
return $result; }
private 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( $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; } }
|