PluginProbe
Code Engine – PHP Snippets, AI Functions & Automation for WordPress / 0.4.2
Code Engine – PHP Snippets, AI Functions & Automation for WordPress v0.4.2
0.5.7 0.5.6 0.5.5 0.5.4 0.5.3 0.5.2 0.5.1 0.5.0 0.4.9 0.4.8 0.4.7 0.4.6 trunk 0.0.1 0.0.2 0.2.8 0.2.9 0.3.0 0.3.1 0.3.2 0.3.3 0.3.4 0.3.5 0.3.6 0.3.7 All 33 releases
← All changes | classes/core.php +39 -28 0.3.70.4.2 View file →
@@ -20,9 +20,9 @@
20 20 public function __construct() {
21 21 global $mwcode;
22 22
23 23 $this->site_url = get_site_url();
24 - $this->is_rest = MeowCommon_Helpers::is_rest();
24 + $this->is_rest = MeowKit_MWCODE_Helpers::is_rest();
25 25 $this->is_cli = defined( 'WP_CLI' ) && WP_CLI;
26 26
27 27 // Snippets
28 28 $snippet = new Meow_MWCODE_Modules_Snippet( $this );
@@ -39,10 +39,10 @@
39 39 }
40 40
41 41 function init() {
42 42 // Initialize the licenser for Pro version
43 - if ( class_exists( 'MeowCommonPro_Licenser' ) ) {
44 - $this->licenser = new MeowCommonPro_Licenser( MWCODE_PREFIX, MWCODE_ENTRY, MWCODE_DOMAIN, MWCODE_ITEM_ID, MWCODE_VERSION );
43 + if ( class_exists( 'MeowKitPro_MWCODE_Licenser' ) ) {
44 + $this->licenser = new MeowKitPro_MWCODE_Licenser( MWCODE_PREFIX, MWCODE_ENTRY, MWCODE_DOMAIN, MWCODE_ITEM_ID, MWCODE_VERSION );
45 45 }
46 46
47 47 // Part of the core, settings and stuff
48 48 $this->admin = new Meow_MWCODE_Admin( $this );
@@ -110,8 +110,11 @@
110 110 "api_token" => md5( time() . rand() ),
111 111
112 112 //MCP
113 113 "mcp_support" => false,
114 +
115 + //MAINTENANCE
116 + "clean_uninstall" => false,
114 117 ];
115 118 }
116 119
117 120 function get_all_options( ) {
@@ -125,19 +128,15 @@
125 128 return $options;
126 129 }
127 130
128 131 function update_options( $options ) {
129 - $current_options = get_option($this->option_name);
130 132
131 - if ($current_options === $options) {
132 - // $this->log('💾 The options are already the expected value.');
133 - } else {
134 - if ( !update_option( $this->option_name, $options, false ) ) {
135 - $this->log( '💾 There was an issue updating the options.' );
136 - }
133 + $options = $this->sanitize_options( $options );
134 +
135 + if ( !update_option( $this->option_name, $options, false ) ) {
136 + $this->log( '💾 There was an issue updating the options.' );
137 137 }
138 -
139 - $options = $this->sanitize_options( $options );
138 +
140 139 return $options;
141 140 }
142 141
143 142 function update_option( $option, $value ) {
@@ -180,12 +179,8 @@
180 179 // Note: We don't disable MCP support here anymore
181 180 // It will be checked at runtime in the MCP class
182 181 }
183 182
184 - if ( $options_modified ) {
185 - update_option( $this->option_name, $options, false );
186 - }
187 -
188 183 return $options;
189 184 }
190 185
191 186 private function updateAIEngineStatus( &$options ) {
@@ -285,16 +280,16 @@
285 280 $value = array_map( 'trim', $value );
286 281 }
287 282
288 283 if ( $type === 'array' ) {
289 - $value = json_encode( $value );
290 - $value = str_replace( '\\', '', $value );
284 + // Convert to PHP array format instead of JSON
285 + $value = var_export( $value, true );
291 286 }
292 287
293 288 return [ $name, $value ];
294 289 }
295 290
296 - function run_non_fn_snippet( $id, $code = null, $test = false ) {
291 + function run_non_fn_snippet( $id, $code = null, $test = false, $prefix = '' ) {
297 292 // Retrieve the snippet code from the provided code or via the snippet ID.
298 293 if ( $code ) {
299 294 $snippet = [ 'code' => $code ];
300 295 } else {
@@ -301,13 +296,17 @@
301 296 $snippet = $this->get_snippet( $id );
302 297 }
303 298
304 299 // Remove any PHP opening tag.
305 - $snippet['code'] = preg_replace( '/<\?php/', '', $snippet['code'], 1 );
300 + $snippet['code'] = $this->snippet->sanitize_code( $snippet['code'] );
306 301
307 302 if ( $test ) {
308 303 $snippet['code'] = preg_replace( '/echo\s+(.+?);/s', 'echo $1 . "\n";', $snippet['code'] );
309 304 }
305 +
306 + if( $prefix ) {
307 + $snippet['code'] = $prefix . "\n" . $snippet['code'];
308 + }
310 309
311 310 $error = null;
312 311 $output = null;
313 312
@@ -441,13 +440,14 @@
441 440 if ( $index < count( $params['args'] ) - 1 ) {
442 441 $params['code'] .= ', ';
443 442 }
444 443 }
444 +
445 445 $params['code'] .= ");\necho print_r(\$mwcode_result, true);";
446 446
447 447 $error = null;
448 448 $output = null;
449 -
449 +
450 450 try {
451 451 ob_start();
452 452 eval( $params['code'] );
453 453 $output = ob_get_clean();
@@ -597,9 +597,9 @@
597 597 $blocked = false;
598 598 //$blocked = true;
599 599 }
600 600 // Block REST requests that aren't whitelisted
601 - elseif ( MeowCommon_Helpers::is_rest() && !Meow_MWCODE_Core::is_white_listed_rest() ) {
601 + elseif ( MeowKit_MWCODE_Helpers::is_rest() && !Meow_MWCODE_Core::is_white_listed_rest() ) {
602 602 $blocked = true;
603 603 }
604 604
605 605 if ( empty( $this->snippet ) ) {
@@ -630,9 +630,9 @@
630 630 return;
631 631 }
632 632
633 633 $snippets = array_map( function ( $snippet ) use ( $blocked ) {
634 - $snippet['code'] = preg_replace( '/<\?php/', '', $snippet['code'], 1 );
634 + $snippet['code'] = $this->snippet->sanitize_code( $snippet['code'] );
635 635 $snippet['blocked'] = $blocked;
636 636
637 637 // If the snippet must be executed only in the frontend, we bypass the block
638 638 if ( !is_admin() && $snippet['scope'] === 'frontend' ) {
@@ -648,16 +648,26 @@
648 648
649 649 #endregion
650 650
651 651 #region Shortcodes
652 + function separate_mwcode_atts( $atts ) {
652 653
654 + if( array_key_exists( 'id', $atts ) ) unset( $atts['id'] );
655 + if( array_key_exists( 'target', $atts ) ) unset( $atts['target'] );
656 + if( array_key_exists( 'code', $atts ) ) unset( $atts['code'] );
657 +
658 + return $atts;
659 + }
660 +
653 661 function content_shortcode( $atts ) {
654 662
663 + $user_atts = $this->separate_mwcode_atts( $atts );
664 +
655 665 $atts = shortcode_atts( array(
656 - 'id' => null,
657 - 'target' => null,
658 - 'code' => null,
659 - ), $atts );
666 + 'id' => null,
667 + 'target' => null, // js or php
668 + 'code' => null, // For Guttenberg block usage
669 + ), $atts, 'code-engine' );
660 670
661 671 $id = $atts['id'];
662 672 $target = $atts['target'];
663 673 $code = $atts['code'];
@@ -740,9 +750,10 @@
740 750 $output = '<script>' . $snippet['code'] . '</script>';
741 751 }
742 752
743 753 if ( $is_content_php ) {
744 - $output = $this->run_non_fn_snippet( $id );
754 + $prefix = "\$mwcode_atts = unserialize( '" . serialize( $user_atts ) . "' );";
755 + $output = $this->run_non_fn_snippet( $id, null, false, $prefix );
745 756 }
746 757
747 758 return $output;
748 759 }