PluginProbe
WP Coder – Insert & Manage Code Snippets / trunk
WP Coder – Insert & Manage Code Snippets vtrunk
4.5.1 1.1 2.3.1 2.3.2 2.4.1 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1 3.1.1 3.2 3.2.1 3.3 3.4 3.5 3.5.1 All 39 releases
wp-coder / classes / Publisher / EnqueueScript.php

EnqueueScript.php in WP Coder – Insert & Manage Code Snippets trunk, at classes/Publisher/EnqueueScript.php

153 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPCoder\Publisher;
4
5 defined( 'ABSPATH' ) || exit;
6
7 use WPCoder\Dashboard\DBManager;
8 use WPCoder\Dashboard\FolderManager;
9 use WPCoder\Optimization\Obfuscator;
10 use WPCoder\WPCoder;
11
12 class EnqueueScript {
13
14 public static function init( $result ): void {
15 $param = maybe_unserialize( $result->param );
16 $js = wp_specialchars_decode( $result->js_code, ENT_QUOTES );
17
18 self::include_scripts( $result );
19
20 if ( ! empty( $js ) && empty( $param['inline_js'] ) ) {
21 self::include_script( $result, $param );
22 }
23
24
25 add_filter( 'script_loader_tag', [ __CLASS__, 'add_attribute' ], 20, 2 );
26 }
27
28 public static function add_attribute( $tag, $handle ) {
29 $scripts = self::get_all_scripts();
30
31 if ( ! empty( $scripts[ $handle ] ) ) {
32 return str_replace( ' src', ' ' . $scripts[ $handle ] . ' src', $tag );
33 }
34
35 return $tag;
36 }
37
38 public static function inline( $result ): void {
39
40 if ( is_admin() ) {
41 return;
42 }
43
44 $param = maybe_unserialize( $result->param );
45 $js = wp_specialchars_decode( $result->js_code, ENT_QUOTES );
46
47 if ( empty( $param['inline_js'] ) ) {
48 return;
49 }
50
51 if ( empty( $js ) ) {
52 return;
53 }
54
55
56 $minified = ! empty( $param['minified_js'] ) ? $param['minified_js'] : 'obfuscate';
57
58 if ( $minified === 'obfuscate' ) {
59 $packer = new Obfuscator( $js, 'Normal', true, false );
60 $js = $packer->pack();
61 }
62 if ( $minified === 'minify' ) {
63 $packer = new Obfuscator( $js, 'None', true, false );
64 $js = $packer->pack();
65 }
66
67 $slug = WPCoder::SLUG . '-js-' . $result->id . '-inline';
68 // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
69 echo '<script id="' . esc_attr( $slug ) . '">' . $js . '</script>';
70 // phpcs:enable
71 }
72
73 private static function include_script( $result, $param ): void {
74 $url = FolderManager::get_js_url( $result );
75 $time = ! empty( $param['time'] ) ? $param['time'] : time();
76 $dependency = ! empty( $param['jquery_dependency'] ) ? [] : [ 'jquery' ];
77 wp_enqueue_script( WPCoder::SLUG . '-script-' . $result->id, $url, $dependency,
78 WPCoder::info( 'version' ) . '_' . $time, true );
79 }
80
81 private static function include_scripts( $result ): void {
82 $scripts = self::get_scripts( $result );
83 if ( empty( $scripts ) ) {
84 return;
85 }
86
87 foreach ( $scripts as $script ) {
88 wp_enqueue_script( $script['slug'], $script['url'], [], $script['ver'], true );
89 }
90 }
91
92 private static function get_scripts( $result ): array {
93 $scripts = [];
94
95 $param = maybe_unserialize( $result->param );
96
97 $count = ! empty( $param['include'] ) ? count( $param['include'] ) : 0;
98 $time = ! empty( $param['time'] ) ? $param['time'] : time();
99
100 if ( $count < 1 ) {
101 return $scripts;
102 }
103
104 for ( $i = 0; $i < $count; $i ++ ) {
105 if ( $param['include'][ $i ] === 'js' && ! empty( $param['include_file'][ $i ] ) ) {
106 $scripts[] = [
107 'url' => $param['include_file'][ $i ],
108 'slug' => WPCoder::SLUG . '-' . $result->id . '-js-' . $i,
109 'ver' => WPCoder::info( 'version' ) . '_' . $time,
110 ];
111 }
112 }
113
114 return $scripts;
115 }
116
117 private static function get_all_scripts(): array {
118 $scripts = [];
119
120 $results = DBManager::get_all_data();
121
122 if ( empty( $results ) ) {
123 return $scripts;
124 }
125
126 foreach ( $results as $result ) {
127 $id = $result->id;
128 $param = maybe_unserialize( $result->param );
129
130 if ( ! empty( $param['js_attributes'] ) && ! empty( $result->js_code ) ) {
131 $scripts[ WPCoder::SLUG . '-script-' . $id ] = $param['js_attributes'];
132 }
133
134
135 $count = ! empty( $param['include'] ) ? count( $param['include'] ) : 0;
136
137 if ( $count < 1 ) {
138 continue;
139 }
140
141 for ( $i = 0; $i < $count; $i ++ ) {
142 if ( $param['include'][ $i ] === 'js' && ! empty( $param['include_file'][ $i ] ) ) {
143 $attr = ! empty( $param['file_js_att'][ $i ] ) ? $param['file_js_att'][ $i ] : '';
144
145 $scripts[ WPCoder::SLUG . '-' . $id . '-js-' . $i ] = $attr;
146 }
147 }
148 }
149
150 return $scripts;
151 }
152
153 }