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

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