PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.9.1
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.9.1
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / common / helpers.php
ai-engine / common Last commit date
admin.php 1 year ago helpers.php 1 year ago issues.php 1 year ago news.php 11 months ago ratings.php 1 year ago releases.txt 2 years ago rest.php 1 year ago
helpers.php
259 lines
1 <?php
2
3 if ( !class_exists( 'MeowCommon_Helpers' ) ) {
4
5 class MeowCommon_Helpers {
6 //public static $version = MeowCommon_Admin::version;
7 private static $startTimes = [];
8 private static $startQueries = [];
9
10 public static function is_divi_builder() {
11 return isset( $_GET['et_fb'] ) && $_GET['et_fb'] === '1';
12 }
13
14 public static function is_beaver_builder() {
15 return isset( $_GET['fl_builder'] );
16 }
17
18 public static function is_cornerstone_builder() {
19 return isset( $_GET['cs-render'] ) && $_GET['cs-render'] === '1';
20 }
21
22 public static function is_pagebuilder_request() {
23 return self::is_divi_builder() || self::is_cornerstone_builder() || self::is_beaver_builder();
24 }
25
26 public static function is_asynchronous_request() {
27 return self::is_ajax_request() || self::is_woocommerce_ajax_request() || self::is_rest();
28 }
29
30 public static function is_ajax_request() {
31 return wp_doing_ajax();
32 }
33
34 public static function is_woocommerce_ajax_request() {
35 return !empty( $_GET['wc-ajax'] );
36 }
37
38 // This function makes sure that only the allowed HTML element names,
39 // attribute names, attribute values, and HTML entities will occur in the given text string.
40 public static function wp_kses( $html ) {
41 return wp_kses( $html, [
42 'style' => [],
43 'script' => [],
44 'div' => [
45 'class' => [],
46 'data-rating-date' => [],
47 'style' => [],
48 ],
49 'img' => [
50 'src' => [],
51 'decoding' => [],
52 'class' => [],
53 'style' => [],
54 ],
55 'p' => [
56 'style' => [],
57 ],
58 'h2' => [
59 'class' => [],
60 ],
61 'br' => [],
62 'label' => [],
63 'b' => [],
64 'small' => [],
65 'a' => [
66 'href' => [],
67 'target' => [],
68 'class' => [],
69 'style' => [],
70 ],
71 'form' => [
72 'method' => [],
73 'action' => [],
74 'class' => [],
75 'style' => [],
76 ],
77 'input' => [
78 'type' => [],
79 'checked' => [],
80 'name' => [],
81 'value' => [],
82 'id' => [],
83 'class' => [],
84 ],
85 ] );
86 }
87
88 // Diff between two strings
89 public static function diff( $first, $second ) {
90 $first = explode( ' ', $first );
91 $second = explode( ' ', $second );
92 $diff = array_diff( $first, $second );
93 return implode( ' ', $diff );
94 }
95
96 // Originally created by matzeeable, modified by jordymeow
97 public static function is_rest() {
98
99 // WP_REST_Request init.
100 $is_rest_request = defined( 'REST_REQUEST' ) && REST_REQUEST;
101 if ( $is_rest_request ) {
102 MeowCommon_Rest::init_once();
103 return true;
104 }
105
106 // Plain permalinks.
107 $prefix = rest_get_url_prefix();
108 $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 ) === 0;
109 if ( $request_contains_rest ) {
110 MeowCommon_Rest::init_once();
111 return true;
112 }
113
114 // It can happen that WP_Rewrite is not yet initialized, so better to do it.
115 global $wp_rewrite;
116 if ( $wp_rewrite === null ) {
117 $wp_rewrite = new WP_Rewrite();
118 }
119 $rest_url = wp_parse_url( trailingslashit( get_rest_url() ) );
120 $current_url = wp_parse_url( add_query_arg( [] ) );
121 if ( !$rest_url || !$current_url ) {
122 return false;
123 }
124
125 // URL Path begins with wp-json.
126 if ( !empty( $current_url['path'] ) && !empty( $rest_url['path'] ) ) {
127 $request_contains_rest = strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
128 if ( $request_contains_rest ) {
129 MeowCommon_Rest::init_once();
130 return true;
131 }
132 }
133
134 return false;
135 }
136
137 public static function test_error( $error = 'timeout', $diceSides = 1 ) {
138 if ( mt_rand( 1, $diceSides ) === 1 ) {
139 if ( $error === 'timeout' ) {
140 header( 'HTTP/1.0 408 Request Timeout' );
141 die();
142 }
143 else {
144 trigger_error( 'Error', E_USER_ERROR );
145 }
146 }
147 }
148
149 public static function php_error_logs() {
150 $errorpath = ini_get( 'error_log' );
151 $output_lines = [];
152 if ( !empty( $errorpath ) && file_exists( $errorpath ) ) {
153 try {
154 $file = new SplFileObject( $errorpath, 'r' );
155 $file->seek( PHP_INT_MAX );
156 $last_line = $file->key();
157 $iterator = new LimitIterator( $file, $last_line > 3500 ? $last_line - 3500 : 0, $last_line );
158 $lines = iterator_to_array( $iterator );
159 $previous_line = null;
160 foreach ( $lines as $line ) {
161
162 // Parse the date
163 $date = '';
164 try {
165 $dateArr = [];
166 preg_match( '~^\[(.*?)\]~', $line, $dateArr );
167 if ( isset( $dateArr[0] ) ) {
168 $line = str_replace( $dateArr[0], '', $line );
169 $line = trim( $line );
170 $date = new DateTime( $dateArr[1] );
171 $date = get_date_from_gmt( $date->format( 'Y-m-d H:i:s' ), 'Y-m-d H:i:s' );
172 }
173 else {
174 continue;
175 }
176 }
177 catch ( Exception $e ) {
178 continue;
179 }
180
181 // Parse the error
182 $type = '';
183 if ( preg_match( '/PHP Fatal error/', $line ) ) {
184 $line = trim( str_replace( 'PHP Fatal error:', '', $line ) );
185 $type = 'fatal';
186 }
187 else if ( preg_match( '/PHP Warning/', $line ) ) {
188 $line = trim( str_replace( 'PHP Warning:', '', $line ) );
189 $type = 'warning';
190 }
191 else if ( preg_match( '/PHP Notice/', $line ) ) {
192 $line = trim( str_replace( 'PHP Notice:', '', $line ) );
193 $type = 'notice';
194 }
195 else if ( preg_match( '/PHP Parse error/', $line ) ) {
196 $line = trim( str_replace( 'PHP Parse error:', '', $line ) );
197 $type = 'parse';
198 }
199 else if ( preg_match( '/PHP Exception/', $line ) ) {
200 $line = trim( str_replace( 'PHP Exception:', '', $line ) );
201 $type = 'exception';
202 }
203 else {
204 continue;
205 }
206
207 // Skip the error if is the same as before.
208 if ( $line !== $previous_line ) {
209 array_push( $output_lines, [ 'date' => $date, 'type' => $type, 'content' => $line ] );
210 $previous_line = $line;
211 }
212 }
213 }
214 catch ( OutOfBoundsException $e ) {
215 error_log( $e->getMessage() );
216 return [];
217 }
218 }
219 return $output_lines;
220
221 // else {
222 // $output_lines = array_reverse( $output_lines );
223 // $html = '';
224 // $previous = '';
225 // foreach ( $output_lines as $line ) {
226 // // Let's avoid similar errors, since it's not useful. We should also make this better
227 // // and not only theck this depending on tie.
228 // if ( preg_replace( '/\[.*\] PHP/', '', $previous ) !== preg_replace( '/\[.*\] PHP/', '', $line ) ) {
229 // $html .= $line;
230 // $previous = $line;
231 // }
232 // }
233 // return $html;
234 // }
235 }
236
237 public static function timer_start( $timerName = 'default' ) {
238 MeowCommon_Helpers::$startQueries[ $timerName ] = get_num_queries();
239 MeowCommon_Helpers::$startTimes[ $timerName ] = microtime( true );
240 }
241
242 public static function timer_elapsed( $timerName = 'default' ) {
243 return microtime( true ) - MeowCommon_Helpers::$startTimes[ $timerName ];
244 }
245
246 public static function timer_log_elapsed( $timerName = 'default' ) {
247 $elapsed = MeowCommon_Helpers::timer_elapsed( $timerName );
248 $queries = get_num_queries() - MeowCommon_Helpers::$startQueries[ $timerName ];
249 error_log( $timerName . ': ' . $elapsed . 'ms (' . $queries . ' queries)' );
250 }
251 }
252
253 // Asked by WP Security Team to remove this.
254
255 // if ( MeowCommon_Helpers::is_rest() ) {
256 // ini_set( 'display_errors', 0 );
257 // }
258 }
259