PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.8.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.8.2
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 2 years ago helpers.php 1 year ago issues.php 2 years ago news.php 3 years ago ratings.php 1 year ago releases.txt 2 years ago rest.php 2 years ago
helpers.php
259 lines
1 <?php
2
3 if ( !class_exists( 'MeowCommon_Helpers' ) ) {
4
5 class MeowCommon_Helpers {
6
7 //public static $version = MeowCommon_Admin::version;
8 private static $startTimes = array();
9 private static $startQueries = array();
10
11 static function is_divi_builder() {
12 return isset( $_GET['et_fb'] ) && $_GET['et_fb'] === '1';
13 }
14
15 static function is_beaver_builder() {
16 return isset( $_GET['fl_builder'] );
17 }
18
19 static function is_cornerstone_builder() {
20 return isset( $_GET['cs-render'] ) && $_GET['cs-render'] === '1';
21 }
22
23 static function is_pagebuilder_request() {
24 return self::is_divi_builder() || self::is_cornerstone_builder() || self::is_beaver_builder();
25 }
26
27 static function is_asynchronous_request() {
28 return self::is_ajax_request() || self::is_woocommerce_ajax_request() || self::is_rest();
29 }
30
31 static function is_ajax_request() {
32 return wp_doing_ajax();
33 }
34
35 static function is_woocommerce_ajax_request() {
36 return !empty( $_GET['wc-ajax'] );
37 }
38
39 // This function makes sure that only the allowed HTML element names,
40 // attribute names, attribute values, and HTML entities will occur in the given text string.
41 static function wp_kses( $html ) {
42 return wp_kses( $html, array(
43 'style' => array(),
44 'script' => array(),
45 'div' => array(
46 'class' => array(),
47 'data-rating-date' => array(),
48 'style' => array(),
49 ),
50 'img' => array(
51 'src' => array(),
52 'decoding' => array(),
53 'class' => array(),
54 'style' => array(),
55 ),
56 'p' => array(
57 'style' => array(),
58 ),
59 'h2' => array(
60 'class' => array(),
61 ),
62 'br' => array(),
63 'label' => array(),
64 'b' => array(),
65 'small' => array(),
66 'a' => array(
67 'href' => array(),
68 'target' => array(),
69 'class' => array(),
70 'style' => array(),
71 ),
72 'form' => array(
73 'method' => array(),
74 'action' => array(),
75 'class' => array(),
76 'style' => array(),
77 ),
78 'input' => array(
79 'type' => array(),
80 'checked' => array(),
81 'name' => array(),
82 'value' => array(),
83 'id' => array(),
84 'class' => array(),
85 ),
86 ) );
87 }
88
89 // Diff between two strings
90 static function diff( $first, $second ) {
91 $first = explode( ' ', $first );
92 $second = explode( ' ', $second );
93 $diff = array_diff( $first, $second );
94 return implode( ' ', $diff );
95 }
96
97 // Originally created by matzeeable, modified by jordymeow
98 static function is_rest() {
99
100 // WP_REST_Request init.
101 $is_rest_request = defined('REST_REQUEST') && REST_REQUEST;
102 if ( $is_rest_request ) {
103 MeowCommon_Rest::init_once();
104 return true;
105 }
106
107 // Plain permalinks.
108 $prefix = rest_get_url_prefix();
109 $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix , 0 ) === 0;
110 if ( $request_contains_rest) {
111 MeowCommon_Rest::init_once();
112 return true;
113 }
114
115 // It can happen that WP_Rewrite is not yet initialized, so better to do it.
116 global $wp_rewrite;
117 if ( $wp_rewrite === null ) {
118 $wp_rewrite = new WP_Rewrite();
119 }
120 $rest_url = wp_parse_url( trailingslashit( get_rest_url() ) );
121 $current_url = wp_parse_url( add_query_arg( array() ) );
122 if ( !$rest_url || !$current_url )
123 return false;
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 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 static function php_error_logs() {
150 $errorpath = ini_get( 'error_log' );
151 $output_lines = array();
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, array( 'date' => $date, 'type' => $type, 'content' => $line ) );
210 $previous_line = $line;
211 }
212 }
213 }
214 catch ( OutOfBoundsException $e ) {
215 error_log( $e->getMessage() );
216 return array();
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 static function timer_start( $timerName = 'default' ) {
238 MeowCommon_Helpers::$startQueries[ $timerName ] = get_num_queries();
239 MeowCommon_Helpers::$startTimes[ $timerName ] = microtime( true );
240 }
241
242 static function timer_elapsed( $timerName = 'default' ) {
243 return microtime( true ) - MeowCommon_Helpers::$startTimes[ $timerName ];
244 }
245
246 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