PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.58
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.58
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
img 3 years ago admin.php 3 years ago helpers.php 3 years ago issues.php 3 years ago news.php 3 years ago ratings.php 3 years ago releases.txt 3 years ago rest.php 3 years ago
helpers.php
255 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_cornerstone_builder() {
16 return isset( $_GET['cs-render'] ) && $_GET['cs-render'] === '1';
17 }
18
19 static function is_pagebuilder_request() {
20 return self::is_divi_builder() || self::is_cornerstone_builder();
21 }
22
23 static function is_asynchronous_request() {
24 return self::is_ajax_request() || self::is_woocommerce_ajax_request() || self::is_rest();
25 }
26
27 static function is_ajax_request() {
28 return wp_doing_ajax();
29 }
30
31 static function is_woocommerce_ajax_request() {
32 return !empty( $_GET['wc-ajax'] );
33 }
34
35 // This function makes sure that only the allowed HTML element names,
36 // attribute names, attribute values, and HTML entities will occur in the given text string.
37 static function wp_kses( $html ) {
38 return wp_kses( $html, array(
39 'style' => array(),
40 'script' => array(),
41 'div' => array(
42 'class' => array(),
43 'data-rating-date' => array(),
44 'style' => array(),
45 ),
46 'img' => array(
47 'src' => array(),
48 'decoding' => array(),
49 'class' => array(),
50 'style' => array(),
51 ),
52 'p' => array(
53 'style' => array(),
54 ),
55 'h2' => array(
56 'class' => array(),
57 ),
58 'br' => array(),
59 'label' => array(),
60 'b' => array(),
61 'small' => array(),
62 'a' => array(
63 'href' => array(),
64 'target' => array(),
65 'class' => array(),
66 'style' => array(),
67 ),
68 'form' => array(
69 'method' => array(),
70 'action' => array(),
71 'class' => array(),
72 'style' => array(),
73 ),
74 'input' => array(
75 'type' => array(),
76 'checked' => array(),
77 'name' => array(),
78 'value' => array(),
79 'id' => array(),
80 'class' => array(),
81 ),
82 ) );
83 }
84
85 // Diff between two strings
86 static function diff( $first, $second ) {
87 $first = explode( ' ', $first );
88 $second = explode( ' ', $second );
89 $diff = array_diff( $first, $second );
90 return implode( ' ', $diff );
91 }
92
93 // Originally created by matzeeable, modified by jordymeow
94 static function is_rest() {
95
96 // WP_REST_Request init.
97 $is_rest_request = defined('REST_REQUEST') && REST_REQUEST;
98 if ( $is_rest_request ) {
99 MeowCommon_Rest::init_once();
100 return true;
101 }
102
103 // Plain permalinks.
104 $prefix = rest_get_url_prefix();
105 $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix , 0 ) === 0;
106 if ( $request_contains_rest) {
107 MeowCommon_Rest::init_once();
108 return true;
109 }
110
111 // It can happen that WP_Rewrite is not yet initialized, so better to do it.
112 global $wp_rewrite;
113 if ( $wp_rewrite === null ) {
114 $wp_rewrite = new WP_Rewrite();
115 }
116 $rest_url = wp_parse_url( trailingslashit( rest_url() ) );
117 $current_url = wp_parse_url( add_query_arg( array() ) );
118 if ( !$rest_url || !$current_url )
119 return false;
120
121 // URL Path begins with wp-json.
122 if ( !empty( $current_url['path'] ) && !empty( $rest_url['path'] ) ) {
123 $request_contains_rest = strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
124 if ( $request_contains_rest) {
125 MeowCommon_Rest::init_once();
126 return true;
127 }
128 }
129
130 return false;
131 }
132
133 static function test_error( $error = 'timeout', $diceSides = 1 ) {
134 if ( rand( 1, $diceSides ) === 1 ) {
135 if ( $error === 'timeout' ) {
136 header("HTTP/1.0 408 Request Timeout");
137 die();
138 }
139 else {
140 trigger_error( "Error", E_USER_ERROR);
141 }
142 }
143 }
144
145 static function php_error_logs() {
146 $errorpath = ini_get( 'error_log' );
147 $output_lines = array();
148 if ( !empty( $errorpath ) && file_exists( $errorpath ) ) {
149 try {
150 $file = new SplFileObject( $errorpath, 'r' );
151 $file->seek( PHP_INT_MAX );
152 $last_line = $file->key();
153 $iterator = new LimitIterator( $file, $last_line > 3500 ? $last_line - 3500 : 0, $last_line );
154 $lines = iterator_to_array( $iterator );
155 $previous_line = null;
156 foreach ( $lines as $line ) {
157
158 // Parse the date
159 $date = '';
160 try {
161 $dateArr = [];
162 preg_match( '~^\[(.*?)\]~', $line, $dateArr );
163 if ( isset( $dateArr[0] ) ) {
164 $line = str_replace( $dateArr[0], '', $line );
165 $line = trim( $line );
166 $date = new DateTime( $dateArr[1] );
167 $date = get_date_from_gmt( $date->format('Y-m-d H:i:s'), 'Y-m-d H:i:s' );
168 }
169 else {
170 continue;
171 }
172 }
173 catch ( Exception $e ) {
174 continue;
175 }
176
177 // Parse the error
178 $type = '';
179 if ( preg_match( '/PHP Fatal error/', $line ) ) {
180 $line = trim( str_replace( 'PHP Fatal error:', '', $line ) );
181 $type = 'fatal';
182 }
183 else if ( preg_match( '/PHP Warning/', $line ) ) {
184 $line = trim( str_replace( 'PHP Warning:', '', $line ) );
185 $type = 'warning';
186 }
187 else if ( preg_match( '/PHP Notice/', $line ) ) {
188 $line = trim( str_replace( 'PHP Notice:', '', $line ) );
189 $type = 'notice';
190 }
191 else if ( preg_match( '/PHP Parse error/', $line ) ) {
192 $line = trim( str_replace( 'PHP Parse error:', '', $line ) );
193 $type = 'parse';
194 }
195 else if ( preg_match( '/PHP Exception/', $line ) ) {
196 $line = trim( str_replace( 'PHP Exception:', '', $line ) );
197 $type = 'exception';
198 }
199 else {
200 continue;
201 }
202
203 // Skip the error if is the same as before.
204 if ( $line !== $previous_line ) {
205 array_push( $output_lines, array( 'date' => $date, 'type' => $type, 'content' => $line ) );
206 $previous_line = $line;
207 }
208 }
209 }
210 catch ( OutOfBoundsException $e ) {
211 error_log( $e->getMessage() );
212 return array();
213 }
214 }
215 return $output_lines;
216
217 // else {
218 // $output_lines = array_reverse( $output_lines );
219 // $html = '';
220 // $previous = '';
221 // foreach ( $output_lines as $line ) {
222 // // Let's avoid similar errors, since it's not useful. We should also make this better
223 // // and not only theck this depending on tie.
224 // if ( preg_replace( '/\[.*\] PHP/', '', $previous ) !== preg_replace( '/\[.*\] PHP/', '', $line ) ) {
225 // $html .= $line;
226 // $previous = $line;
227 // }
228 // }
229 // return $html;
230 // }
231 }
232
233 static function timer_start( $timerName = 'default' ) {
234 MeowCommon_Helpers::$startQueries[ $timerName ] = get_num_queries();
235 MeowCommon_Helpers::$startTimes[ $timerName ] = microtime( true );
236 }
237
238 static function timer_elapsed( $timerName = 'default' ) {
239 return microtime( true ) - MeowCommon_Helpers::$startTimes[ $timerName ];
240 }
241
242 static function timer_log_elapsed( $timerName = 'default' ) {
243 $elapsed = MeowCommon_Helpers::timer_elapsed( $timerName );
244 $queries = get_num_queries() - MeowCommon_Helpers::$startQueries[ $timerName ];
245 error_log( $timerName . ": " . $elapsed . "ms (" . $queries . " queries)" );
246 }
247 }
248
249 // Asked by WP Security Team to remove this.
250
251 // if ( MeowCommon_Helpers::is_rest() ) {
252 // ini_set( 'display_errors', 0 );
253 // }
254 }
255