/var/www/html/wp-content/plugins/elementor/includes/template-library/data/endpoints/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
88
89
90
91
<?php
namespace Elementor\Includes\TemplateLibrary\Data\Endpoints;

use 
Elementor\Data\V2\Base\Endpoint;
use 
Elementor\Plugin;
use 
Elementor\TemplateLibrary\Source_Local;

if ( ! 
defined'ABSPATH' ) ) {
    exit; 
// Exit if accessed directly.
}

class 
Templates extends Endpoint {

    protected function 
register() {
        
parent::register();

        
$document_types Plugin::$instance->documents->get_document_types( [
            
'show_in_library' => true,
        ] );

        
$this->register_route''\WP_REST_Server::CREATABLE, [
            
'is_multi' => true,
            
'title' => [
                
'required' => false,
                
'type' => 'string',
                
'description' => 'The title of the document',
            ],
            
'type' => [
                
'required' => true,
                
'description' => 'The document type.',
                
'type' => 'string',
                
'enum' => array_keys$document_types ),
            ],
            
'content' => [
                
'required' => false,
                
'description' => 'Elementor data object',
                
'type' => 'object',
            ],
        ] );
    }

    public function 
get_name() {
        return 
'templates';
    }

    public function 
get_format() {
        return 
'template-library/templates';
    }

    public function 
get_items$request ) {
        return 
$this->reorder_categoriesPlugin::$instance->templates_manager->get_library_data( [ 'filter_sources' => [ $request->get_param'source' ) ] ] ) );
    }

    
/**
     * Move the '404 page' category to the end of the list
     *
     * @param array $library_data
     * @return array
     */
    
private function reorder_categories( array $library_data ): array {
        
$not_found_category '404 page';

        
$key array_search$not_found_category$library_data['config']['block']['categories'] );
        if ( 
false === $key ) {
            return 
$library_data;
        }

        
array_splice$library_data['config']['block']['categories'], $key);
        
$library_data['config']['block']['categories'][] = $not_found_category;

        return 
$library_data;
    }

    public function 
create_items$request ) {
        
/** @var Source_Local $source */
        
$source Plugin::$instance->templates_manager->get_source'local' );

        
$result $source->save_item( [
            
'title' => $request->get_param'title' ),
            
'type' => $request->get_param'type' ),
            
'content' => $request->get_param'content' ),
            
'page_settings' => $request->get_param'page_settings' ),
        ] );

        if ( 
is_wp_error$result ) ) {
            return 
$result;
        }

        return 
$source->get_item$result );
    }
}