/var/www/html/wp-content/plugins/elementor/app/modules/import-export/runners/import/templates.php


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;
    }
}