C:\xampp\htdocs\landing\wp-content\plugins\penci-pennews-amp\includes\class-amp-content.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php

require_once( PENCI_AMP_DIR'/includes/utils/class-amp-dom-utils.php' );
require_once( 
PENCI_AMP_DIR'/includes/sanitizers/class-amp-base-sanitizer.php' );
require_once( 
PENCI_AMP_DIR'/includes/embeds/class-amp-base-embed-handler.php' );

class 
Penci_AMP_Content {
    private 
$content;
    private 
$penci_amp_content '';
    private 
$penci_amp_scripts = array();
    private 
$penci_amp_styles = array();
    private 
$args = array();
    private 
$embed_handler_classes = array();
    private 
$sanitizer_classes = array();

    public function 
__construct$content$embed_handler_classes$sanitizer_classes$args = array() ) {
        
$this->content $content;
        
$this->args $args;
        
$this->embed_handler_classes $embed_handler_classes;
        
$this->sanitizer_classes $sanitizer_classes;

        
$this->transform();
    }

    public function 
get_penci_amp_content() {
        return 
$this->penci_amp_content;
    }

    public function 
get_penci_amp_scripts() {
        return 
$this->penci_amp_scripts;
    }

    public function 
get_penci_amp_styles() {
        return 
$this->penci_amp_styles;
    }

    private function 
transform() {
        
$content $this->content;

        
// First, embeds + the_content filter
        
$embed_handlers $this->register_embed_handlers();
        
$content apply_filters'the_content'$content );
        
$this->unregister_embed_handlers$embed_handlers );

        
// Then, sanitize to strip and/or convert non-amp content
        
$content $this->sanitize$content );

        
$this->penci_amp_content $content;
    }

    private function 
add_scripts$scripts ) {
        
$this->penci_amp_scripts array_merge$this->penci_amp_scripts$scripts );
    }

    private function 
add_styles$styles ) {
        
$this->penci_amp_styles array_merge$this->penci_amp_styles$styles );
    }

    private function 
register_embed_handlers() {
        
$embed_handlers = array();

        foreach ( 
$this->embed_handler_classes as $embed_handler_class => $args ) {
            
$embed_handler = new $embed_handler_classarray_merge$this->args$args ) );

            if ( ! 
is_subclass_of$embed_handler'Penci_AMP_Base_Embed_Handler' ) ) {
                
_doing_it_wrong__METHOD__sprintfesc_html__'Embed Handler (%s) must extend `AMP_Embed_Handler`''penci-amp' ), $embed_handler_class ), '0.1' );
                continue;
            }

            
$embed_handler->register_embed();
            
$embed_handlers[] = $embed_handler;
        }

        return 
$embed_handlers;
    }

    private function 
unregister_embed_handlers$embed_handlers ) {
        foreach ( 
$embed_handlers as $embed_handler ) {
             
$this->add_scripts$embed_handler->get_scripts() );
             
$embed_handler->unregister_embed();
        }
    }

    private function 
sanitize$content ) {
        list( 
$sanitized_content$scripts$styles ) = Penci_AMP_Content_Sanitizer::sanitize$content$this->sanitizer_classes$this->args );

        
$this->add_scripts$scripts );
        
$this->add_styles$styles );

        return 
$sanitized_content;
    }
}

class 
Penci_AMP_Content_Sanitizer {
    public static function 
sanitize$content$sanitizer_classes$global_args = array() ) {
        
$scripts = array();
        
$styles = array();
        
$dom AMP_DOM_Utils::get_dom_from_content$content );

        foreach ( 
$sanitizer_classes as $sanitizer_class => $args ) {
            if ( ! 
class_exists$sanitizer_class ) ) {
                
_doing_it_wrong__METHOD__sprintfesc_html__'Sanitizer (%s) class does not exist''penci-amp' ), esc_html$sanitizer_class ) ), '0.4.1' );
                continue;
            }

            
$sanitizer = new $sanitizer_class$domarray_merge$global_args$args ) );

            if ( ! 
is_subclass_of$sanitizer'Penci_AMP_Base_Sanitizer' ) ) {
                
_doing_it_wrong__METHOD__sprintfesc_html__'Sanitizer (%s) must extend `Penci_AMP_Base_Sanitizer`''penci-amp' ), esc_html$sanitizer_class ) ), '0.1' );
                continue;
            }

            
$sanitizer->sanitize();

            
$scripts array_merge$scripts$sanitizer->get_scripts() );
            
$styles array_merge$styles$sanitizer->get_styles() );
        }

        
$sanitized_content AMP_DOM_Utils::get_content_from_dom$dom );

        return array( 
$sanitized_content$scripts$styles );
    }
}
x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586