/var/www/html/wp-content/plugins/elementor/modules/content-sanitizer/module.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
<?php

namespace Elementor\Modules\ContentSanitizer;

use 
Elementor\Core\Base\Module as BaseModule;
use 
Elementor\Plugin;

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

class 
Module extends BaseModule {

    const 
WIDGET_TO_SANITIZE 'heading';

    public function 
__construct() {
        
parent::__construct();

        
add_filter'elementor/document/save/data', [ $this'sanitize_content' ], 10);
    }

    public function 
get_name() {
        return 
'content-sanitizer';
    }

    public function 
sanitize_content$data$document ) : array {
        if ( 
current_user_can'manage_options' ) || empty( $data['elements'] ) ) {
            return 
$data;
        }

        if ( ! 
$this->is_widget_present$data ) ) {
            return 
$data;
        }

        return 
Plugin::$instance->db->iterate_data$data, function ( $element ) {
            if ( 
$this->is_target_widget$element ) ) {
                
$element['settings']['title'] = Plugin::$instance->widgets_manager->get_widget_typesself::WIDGET_TO_SANITIZE )->sanitize$element['settings']['title'] );
            }

            return 
$element;
        });
    }

    private function 
is_target_widget$element ) {
        return 
self::WIDGET_TO_SANITIZE === $element['widgetType'];
    }

    private function 
is_widget_present( array $elements ): bool {
        
$json wp_json_encode$elements );

        return 
false !== strpos$json'"widgetType":"' self::WIDGET_TO_SANITIZE '"' );
    }
}