PluginProbe
WP Coder – Insert & Manage Code Snippets / 3.3
WP Coder – Insert & Manage Code Snippets v3.3
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 3.3, at classes/Publisher/EnqueueScript.php

152 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
26 add_filter( 'script_loader_tag', [ __CLASS__, 'add_attribute' ], 20, 2 );
27 }
28
29 public static function add_attribute( $tag, $handle ) {
30 $scripts = self::get_all_scripts();
31
32 if ( ! empty( $scripts[ $handle ] ) ) {
33 return str_replace( ' src', ' ' . $scripts[ $handle ] . ' src', $tag );
34 }
35
36 return $tag;
37 }
38
39 public static function inline( $result ): void {
40
41 if ( is_admin() ) {
42 return;
43 }
44
45 $param = maybe_unserialize( $result->param );
46 $js = wp_specialchars_decode( $result->js_code, ENT_QUOTES );
47
48 if ( empty( $param['inline_js'] ) ) {
49 return;
50 }
51
52 if ( empty( $js ) ) {
53 return;
54 }
55
56
57 $minified = ! empty( $param['minified_js'] ) ? $param['minified_js'] : 'obfuscate';
58
59 if ( $minified === 'obfuscate' ) {
60 $packer = new Obfuscator( $js, 'Normal', true, false );
61 $js = $packer->pack();
62 }
63 if ( $minified === 'minify' ) {
64 $packer = new Obfuscator( $js, 'None', true, false );
65 $js = $packer->pack();
66 }
67
68 $slug = WPCoder::SLUG . '-js-' . $result->id . '-inline';
69 echo '<script id="' . esc_attr( $slug ) . '">' . $js . '</script>';
70 }
71
72 private static function include_script( $result, $param ): void {
73 $url = FolderManager::get_js_url( $result );
74 $time = ! empty( $param['time'] ) ? $param['time'] : time();
75 $dependency = ! empty( $param['jquery_dependency'] ) ? [] : [ 'jquery' ];
76 wp_enqueue_script( WPCoder::SLUG . '-script-' . $result->id, $url, $dependency,
77 WPCoder::info('version') . '_' . $time, true );
78 }
79
80 private static function include_scripts( $result ): void {
81 $scripts = self::get_scripts( $result );
82 if ( empty( $scripts ) ) {
83 return;
84 }
85
86 foreach ( $scripts as $script ) {
87 wp_enqueue_script( $script['slug'], $script['url'], [], $script['ver'], true );
88 }
89 }
90
91 private static function get_scripts( $result ): array {
92 $scripts = [];
93
94 $param = maybe_unserialize( $result->param );
95
96 $count = ! empty( $param['include'] ) ? count( $param['include'] ) : 0;
97 $time = ! empty( $param['time'] ) ? $param['time'] : time();
98
99 if ( $count < 1 ) {
100 return $scripts;
101 }
102
103 for ( $i = 0; $i < $count; $i ++ ) {
104 if ( $param['include'][ $i ] === 'js' && ! empty( $param['include_file'][ $i ] ) ) {
105 $scripts[] = [
106 'url' => $param['include_file'][ $i ],
107 'slug' => WPCoder::SLUG . '-' . $result->id . '-js-' . $i,
108 'ver' => WPCoder::info('version') . '_' . $time,
109 ];
110 }
111 }
112
113 return $scripts;
114 }
115
116 private static function get_all_scripts(): array {
117 $scripts = [];
118
119 $results = DBManager::get_all_data();
120
121 if ( empty( $results ) ) {
122 return $scripts;
123 }
124
125 foreach ( $results as $result ) {
126 $id = $result->id;
127 $param = maybe_unserialize( $result->param );
128
129 if ( ! empty( $param['js_attributes'] ) && ! empty( $result->js_code ) ) {
130 $scripts[ WPCoder::SLUG . '-script-' . $id ] = $param['js_attributes'];
131 }
132
133
134 $count = ! empty( $param['include'] ) ? count( $param['include'] ) : 0;
135
136 if ( $count < 1 ) {
137 continue;
138 }
139
140 for ( $i = 0; $i < $count; $i ++ ) {
141 if ( $param['include'][ $i ] === 'js' && ! empty( $param['include_file'][ $i ] ) ) {
142 $attr = ! empty( $param['file_js_att'][ $i ] ) ? $param['file_js_att'][ $i ] : '';
143
144 $scripts[ WPCoder::SLUG . '-' . $id . '-js-' . $i ] = $attr;
145 }
146 }
147 }
148
149 return $scripts;
150 }
151
152 }