PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.4.9
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.4.9
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 ratings.php 3 years ago releases.txt 3 years ago rest.php 3 years ago
helpers.php
197 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 // Originally created by matzeeable, modified by jordymeow
36 static function is_rest() {
37
38 // WP_REST_Request init.
39 $is_rest_request = defined('REST_REQUEST') && REST_REQUEST;
40 if ( $is_rest_request ) {
41 MeowCommon_Rest::init_once();
42 return true;
43 }
44
45 // Plain permalinks.
46 $prefix = rest_get_url_prefix();
47 $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix , 0 ) === 0;
48 if ( $request_contains_rest) {
49 MeowCommon_Rest::init_once();
50 return true;
51 }
52
53 // It can happen that WP_Rewrite is not yet initialized, so better to do it.
54 global $wp_rewrite;
55 if ( $wp_rewrite === null ) {
56 $wp_rewrite = new WP_Rewrite();
57 }
58 $rest_url = wp_parse_url( trailingslashit( rest_url() ) );
59 $current_url = wp_parse_url( add_query_arg( array() ) );
60 if ( !$rest_url || !$current_url )
61 return false;
62
63 // URL Path begins with wp-json.
64 if ( !empty( $current_url['path'] ) && !empty( $rest_url['path'] ) ) {
65 $request_contains_rest = strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
66 if ( $request_contains_rest) {
67 MeowCommon_Rest::init_once();
68 return true;
69 }
70 }
71
72 return false;
73 }
74
75 static function test_error( $error = 'timeout', $diceSides = 1 ) {
76 if ( rand( 1, $diceSides ) === 1 ) {
77 if ( $error === 'timeout' ) {
78 header("HTTP/1.0 408 Request Timeout");
79 die();
80 }
81 else {
82 trigger_error( "Error", E_USER_ERROR);
83 }
84 }
85 }
86
87 static function php_error_logs() {
88 $errorpath = ini_get( 'error_log' );
89 $output_lines = array();
90 if ( !empty( $errorpath ) && file_exists( $errorpath ) ) {
91 try {
92 $file = new SplFileObject( $errorpath, 'r' );
93 $file->seek( PHP_INT_MAX );
94 $last_line = $file->key();
95 $iterator = new LimitIterator( $file, $last_line > 3500 ? $last_line - 3500 : 0, $last_line );
96 $lines = iterator_to_array( $iterator );
97 $previous_line = null;
98 foreach ( $lines as $line ) {
99
100 // Parse the date
101 $date = '';
102 try {
103 $dateArr = [];
104 preg_match( '~^\[(.*?)\]~', $line, $dateArr );
105 if ( isset( $dateArr[0] ) ) {
106 $line = str_replace( $dateArr[0], '', $line );
107 $line = trim( $line );
108 $date = new DateTime( $dateArr[1] );
109 $date = get_date_from_gmt( $date->format('Y-m-d H:i:s'), 'Y-m-d H:i:s' );
110 }
111 else {
112 continue;
113 }
114 }
115 catch ( Exception $e ) {
116 continue;
117 }
118
119 // Parse the error
120 $type = '';
121 if ( preg_match( '/PHP Fatal error/', $line ) ) {
122 $line = trim( str_replace( 'PHP Fatal error:', '', $line ) );
123 $type = 'fatal';
124 }
125 else if ( preg_match( '/PHP Warning/', $line ) ) {
126 $line = trim( str_replace( 'PHP Warning:', '', $line ) );
127 $type = 'warning';
128 }
129 else if ( preg_match( '/PHP Notice/', $line ) ) {
130 $line = trim( str_replace( 'PHP Notice:', '', $line ) );
131 $type = 'notice';
132 }
133 else if ( preg_match( '/PHP Parse error/', $line ) ) {
134 $line = trim( str_replace( 'PHP Parse error:', '', $line ) );
135 $type = 'parse';
136 }
137 else if ( preg_match( '/PHP Exception/', $line ) ) {
138 $line = trim( str_replace( 'PHP Exception:', '', $line ) );
139 $type = 'exception';
140 }
141 else {
142 continue;
143 }
144
145 // Skip the error if is the same as before.
146 if ( $line !== $previous_line ) {
147 array_push( $output_lines, array( 'date' => $date, 'type' => $type, 'content' => $line ) );
148 $previous_line = $line;
149 }
150 }
151 }
152 catch ( OutOfBoundsException $e ) {
153 error_log( $e->getMessage() );
154 return array();
155 }
156 }
157 return $output_lines;
158
159 // else {
160 // $output_lines = array_reverse( $output_lines );
161 // $html = '';
162 // $previous = '';
163 // foreach ( $output_lines as $line ) {
164 // // Let's avoid similar errors, since it's not useful. We should also make this better
165 // // and not only theck this depending on tie.
166 // if ( preg_replace( '/\[.*\] PHP/', '', $previous ) !== preg_replace( '/\[.*\] PHP/', '', $line ) ) {
167 // $html .= $line;
168 // $previous = $line;
169 // }
170 // }
171 // return $html;
172 // }
173 }
174
175 static function timer_start( $timerName = 'default' ) {
176 MeowCommon_Helpers::$startQueries[ $timerName ] = get_num_queries();
177 MeowCommon_Helpers::$startTimes[ $timerName ] = microtime( true );
178 }
179
180 static function timer_elapsed( $timerName = 'default' ) {
181 return microtime( true ) - MeowCommon_Helpers::$startTimes[ $timerName ];
182 }
183
184 static function timer_log_elapsed( $timerName = 'default' ) {
185 $elapsed = MeowCommon_Helpers::timer_elapsed( $timerName );
186 $queries = get_num_queries() - MeowCommon_Helpers::$startQueries[ $timerName ];
187 error_log( $timerName . ": " . $elapsed . "ms (" . $queries . " queries)" );
188 }
189 }
190
191 // Asked by WP Security Team to remove this.
192
193 // if ( MeowCommon_Helpers::is_rest() ) {
194 // ini_set( 'display_errors', 0 );
195 // }
196 }
197