• Resolved pixluser

    (@pixluser)


    I’ve a got crash with oxygen builder too, and this plugin (using the last version). It’s more or less stick to listing blog articles in a templates. But don’t know more.

    Here is the codeblock inside my template that create the crash :

    It’s for filtering duplicate blog posts.

    <?php
    	
    	$displayed_posts = []; // Create empty array for our post IDs
    
    	 // For every post link found, add the ID of post to our array
    	 add_filter('post_link', 'track_displayed_posts'); 
             function track_displayed_posts($url) {
               global $displayed_posts; 
               $displayed_posts[] = get_the_ID(); // add ID of posts in loops
               return $url;
         }
    
    	 // Filter the queries to exclude posts with these IDs
    	 add_action('pre_get_posts','remove_already_displayed_posts');
             function remove_already_displayed_posts($query) {
            
              global $displayed_posts;
           
              $displayed_posts[] = get_the_ID(); // Include the current post ID also
           
               $query->set('post__not_in', $displayed_posts); // Exclude this IDs from query
         }
    
    ?>

    and

    <?php
    	
        remove_filter('post_link', 'track_displayed_posts'); 
        remove_action('pre_get_posts','remove_already_displayed_posts');
    	
    ?>

    It crash revisions listing part of a templates by creating a fatal error (when we select a template before editing it), and also, it breaks the oxygen builder tool, when we edit a template.

    I’m also using UsersWP but know if it’s related.

    • This topic was modified 1 year, 6 months ago by pixluser.
    • This topic was modified 1 year, 6 months ago by pixluser.
    • This topic was modified 1 year, 6 months ago by pixluser.
    • This topic was modified 1 year, 6 months ago by pixluser.
Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Contributor Gary Jones

    (@garyj)

    What’s the fatal error?

    What versions of WP/CAP/Oxygen Builder are you using?

    Thread Starter pixluser

    (@pixluser)

    A critical error has occurred on this site. Please check your site administration email inbox for more information. Learn more about debugging WordPress.

    In a template page of oxygen builder.
    Using all the last versions :
    Oxygen Version 4.7
    Co authors plus Version 3.5.15
    WordPress 6.3.1

    I’ve got a working demo displaying the problem (I must send you private logins)

    Maybe it’s related to this email, but can’t be sure :

    Détails de l’erreur
    ======================
    Une erreur de type E_COMPILE_ERROR a été causée dans la ligne 7 du fichier /home/hart4801/test.com/wp-content/plugins/oxygen/component-framework/components/classes/code-block.class.php(133) : eval()'d code. Message d’erreur : Cannot redeclare track_displayed_posts() (previously declared in /home/hart4801/test.com/wp-content/plugins/oxygen/component-framework/components/classes/code-block.class.php(133) : eval()'d code:7)
    • This reply was modified 1 year, 6 months ago by pixluser.
    • This reply was modified 1 year, 6 months ago by pixluser.
    • This reply was modified 1 year, 6 months ago by pixluser.
    Plugin Contributor Gary Jones

    (@garyj)

    I’ll need to know the actual fatal error from the logs to be able to pin anything down.

    Thread Starter pixluser

    (@pixluser)

    Détails de l’erreur
    ======================
    Une erreur de type E_COMPILE_ERROR a été causée dans la ligne 7 du fichier /home/hart4801/test.com/wp-content/plugins/oxygen/component-framework/components/classes/code-block.class.php(133) : eval()'d code. Message d’erreur : Cannot redeclare track_displayed_posts() (previously declared in /home/hart4801/test/wp-content/plugins/oxygen/component-framework/components/classes/code-block.class.php(133) : eval()'d code:7)

    I don’t know if the error received by email is related to the plugin. Because I don’t see nothing into the debug.log.

    • This reply was modified 1 year, 6 months ago by pixluser.
    • This reply was modified 1 year, 6 months ago by pixluser.
    • This reply was modified 1 year, 6 months ago by pixluser.
    Thread Starter pixluser

    (@pixluser)

    Without the plugin Co-Authors Plus I’ve got no errors :
    No errors listed on the template page. And no bug while editing with oxygen builder. (white page)

    • This reply was modified 1 year, 6 months ago by pixluser.
    • This reply was modified 1 year, 6 months ago by pixluser.
    Thread Starter pixluser

    (@pixluser)

    Here is the error displayed into the template of oxygen.

    Plugin Contributor Gary Jones

    (@garyj)

    The fatal error is complaining that track_displayed_posts() is being defined twice. There is no function by that name in Co-Authors Plus.

    Can you please share the contents of the file code-block.class.php? My guess is that perhaps Oxygen has got track_displayed_posts() function nested inside another function (legit code, but ill-advised) that is now being called more than once with CAP enabled.

    Thread Starter pixluser

    (@pixluser)

    <?php 
    
    Class CT_Code_Block extends CT_Component {
    
    	var $shortcode_options;
    	var $shortcode_atts;
    
    	function __construct( $options ) {
    
    		// run initialization
    		$this->init( $options );
    		
    		// add shortcodes
    		add_shortcode( $this->options['tag'], array( $this, 'add_shortcode' ) );
    		add_oxygen_element( $this->options['tag'], array( $this, 'add_shortcode' ) );
    
    		// output code
    		add_action( "wp_footer", array( $this, 'output_code' ), 100 );
    		add_action( "oxygen_inner_content_footer", array( $this, 'output_code' ), 100 );
    
    		add_filter( 'template_include', array( $this, 'ct_code_block_single_template'), 100 );
    
    		// woocommerce specific
    		if(isset( $_REQUEST['action'], $_REQUEST['post_id'] ) && stripslashes($_REQUEST['action']) == 'ct_exec_code') {
    			// do not redirect shop page when its a builder preview
    			add_action( 'wp', array( $this, 'ct_code_remove_template_redirect'));
    		}
    
    		// add specific options
    		add_action("ct_toolbar_component_settings", array( $this, "code_block_settings") );
    	}
    
    	function ct_code_remove_template_redirect() {
    		global $wp_filter;
    		if(isset($wp_filter['template_redirect']['10']['wc_template_redirect'])) {
    			unset($wp_filter['template_redirect']['10']['wc_template_redirect']);
    			//echo "WooCommerce Shop page is essentially a redirect to Products Archive.";
    		}
    
    	}
    
    	/**
    	 * This function hijacks the template to return special template that renders the code results
    	 * for the ct_code_block element to load the content into the builder for preview.
    	 * 
    	 * @since 0.4.0
    	 * @author gagan goraya
    	 */
    	
    	function ct_code_block_single_template( $template ) {
    
    		$new_template = '';
    
    		if(isset($_REQUEST['action']) && stripslashes($_REQUEST['action']) == 'ct_exec_code') {
    			$nonce  	= $_REQUEST['nonce'];
    			$post_id 	= intval( $_REQUEST['post_id'] );
    			
    			// check nonce
    			if ( ! wp_verify_nonce( $nonce, 'oxygen-nonce-' . $post_id ) ) {
    			    // This nonce is not valid.
    			    die( 'Security check' );
    			}
    			
    			if ( file_exists(dirname(dirname( __FILE__)) . '/layouts/' . 'code-block.php') ) {
    				$new_template = dirname(dirname( __FILE__)) . '/layouts/' . 'code-block.php';
    			}
    		}
    
    		if ( '' != $new_template ) {
    				return $new_template ;
    			}
    
    		return $template;
    	}
    
    
    	/**
    	 * Add a [ct_code_block] shortcode to WordPress
    	 *
    	 * @since 0.3.1
    	 */
    
    	function add_shortcode( $atts, $content, $name ) {
    		if ( ! $this->validate_shortcode( $atts, $content, $name ) ) {
    			return '';
    		}
    
    		$options = $this->set_options( $atts );
    		$id = $options['id'];
    		
    		// save to instance
    		$this->shortcode_options[$id] = $options;
    
    		// save to instance
    		$this->shortcode_atts[$id] = $atts;
    
    		// don't run code during CSS caching
    		global $oxygen_vsb_css_caching_active;
    		if ( isset( $oxygen_vsb_css_caching_active ) && $oxygen_vsb_css_caching_active === true ) {			
    			return "";
    		}
    
    		// lets base64_decode all the code types, if they are not coming from the
    		if (!oxygen_doing_oxygen_elements()) {
    			if(isset(json_decode($atts['ct_options'])->original)) {
    				if(isset(json_decode($atts['ct_options'])->original->{'code-php'}) ) {
    					$options['code_php'] = 	base64_decode($options['code_php']);
    				}
    			}
    		}
    		else {
    			$this->shortcode_atts[$id]["json"] = true;
    		}
    
    		//$code_php = htmlspecialchars_decode($options['code_php'], ENT_QUOTES);
    		
    		$code_php = $options['code_php'];
    
    		ob_start();
    
    		if ( isset($options['unwrap']) && $options['unwrap'] == 'true' ) {
    			// don't output
    		}
    		else {
    			?><<?php echo esc_attr($options['tag']) ?> id="<?php echo esc_attr($options['selector']); ?>" class="<?php echo esc_attr($options['classes']); ?>" <?php do_action("oxygen_vsb_component_attr", $options, $this->options['tag']); ?>><?php 
    		}
    
    		// make sure errors are shown
    		$error_reporting = error_reporting(E_ERROR | E_WARNING | E_PARSE);
    		$display_errors = ini_get('display_errors');
    		ini_set('display_errors', 1); 
    		
    		eval(' ?>'.$code_php.'<?php ');
    
    		// set errors params back
    		ini_set('display_errors', $display_errors); 
    		error_reporting($error_reporting);
    
    		if ( isset($options['unwrap']) && $options['unwrap'] == 'true' ) {
    			// don't output
    		}
    		else {
    			?></<?php echo esc_attr($options['tag']) ?>><?php
    		}
    		
    		return ob_get_clean();
    	}
    
    
    	/**
    	 * Echo custom JS/CSS code added by user
    	 *
    	 * @since 0.3.1
    	 */
    
    	function output_code() {
    
    		if ( is_array( $this->shortcode_options ) ) {
    
    			$all_code_js = array();
    			$all_code_css = array();
    
    			foreach ( $this->shortcode_options as $component_id => $options ) {
    				
    				$component_id = esc_attr( $component_id );
    				
    				$selector 	= esc_attr( $options['selector'] );
    
    				$atts = $this->shortcode_atts[$component_id];
    				
    				// lets base64_decode all the code types, if they are not coming from the default
    				if (!isset($atts["json"])) {	
    					if(isset(json_decode($atts['ct_options'])->original)) {
    						if(isset(json_decode($atts['ct_options'])->original->{'code-js'}) ) {
    							$options['code_js'] = 	base64_decode($options['code_js']);
    						}
    						if(isset(json_decode($atts['ct_options'])->original->{'code-css'}) ) {
    							$options['code_css'] = 	base64_decode($options['code_css']);
    						}
    					}
    				}
    
    				$code_js 	= $options['code_js'];
    				$code_js 	= str_replace("%%ELEMENT_ID%%", $selector, $code_js);
    
    				if (!in_array($code_js, $all_code_js) && trim($code_js) !== "") {
    
    					$all_code_js[] = $code_js;
    
    					echo "<script type=\"text/javascript\" id=\"ct_code_block_js_{$component_id}\">";
    					echo $code_js;
    					echo "</script>\r\n";
    				}
    
    				$code_css 	= $options['code_css'];
    				$code_css 	= str_replace("%%ELEMENT_ID%%", $selector, $code_css);
    				$code_css 	= preg_replace_callback(
    					            "/color\(\d+\)/",
    					            "oxygen_vsb_parce_global_colors_callback",
    					            $code_css);
    
    				if (!in_array($code_css, $all_code_css) && trim($code_css) !== "") {
    					
    					$all_code_css[] = $code_css;
    
    					echo "<style type=\"text/css\" id=\"ct_code_block_css_{$component_id}\">";
    					echo $code_css;
    					echo "</style>\r\n";
    				}
    			}
    		}
    	}
    
    
    	/**
    	 * Output settings
    	 *
    	 * @since 2.0
    	 * @author Ilya K. 
    	 */
    
    	function code_block_settings() { 
    		
    		if (!oxygen_vsb_current_user_can_full_access()) {
    			return;
    		}
    		
    		?>
    
    		<div class="oxygen-sidebar-flex-panel"
    			ng-show="isActiveName('ct_code_block')">
    						
    			<div class="oxygen-sidebar-advanced-subtab" 
    				ng-click="showAllStylesFunc(); styleTabAdvance=true; switchTab('advanced', 'code-php')" ng-class="{'oxygen-active' : isShowTab('advanced','code-php')}">
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/css.svg">
    				PHP &amp; HTML
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/open-section.svg">
    			</div>
    	
    			<div class="oxygen-sidebar-advanced-subtab" 
    				ng-click="showAllStylesFunc(); styleTabAdvance=true; switchTab('advanced', 'code-css')" ng-class="{'oxygen-active' : isShowTab('advanced','code-css')}">
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/css.svg">
    				CSS
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/open-section.svg">
    			</div>
    			
    			<div class="oxygen-sidebar-advanced-subtab" 
    				ng-click="showAllStylesFunc(); styleTabAdvance=true; switchTab('advanced', 'code-js')" ng-class="{'oxygen-active' : isShowTab('advanced','code-js')}">
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/js.svg">
    				JavaScript
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/open-section.svg">
    			</div>
    
    			<div class="oxygen-sidebar-advanced-subtab" 
    				ng-click="showAllStylesFunc(); styleTabAdvance=true; switchTab('advanced', 'code-mixed'); toggleSidebar()" ng-class="{'oxygen-active' : isShowTab('advanced','code-mixed')}">
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/toolbar-icons/settings-icon.svg">
    				Mixed Code View
    				<img src="<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/advanced/open-section.svg">
    			</div>
    
    		</div>
    
    	<?php }
    
    }
    
    
    // Create instance
    global $oxygen_vsb_components;
    $oxygen_vsb_components['code_block'] = new CT_Code_Block( array( 
    			'name' 		=> 'Code Block',
    			'tag' 		=> 'ct_code_block',
    			'params' 	=> array(
    					array(
    						"type" 			=> "textfield",
    						"param_name" 	=> "code-php",
    						"value" 		=> "<?php\r\n  echo \"hello world!\";\r\n?>",
    						"hidden"		=> true,
    						"css" 			=> false,
    					),
    					array(
    						"type" 			=> "textfield",
    						"param_name" 	=> "code-js",
    						"value" 		=> "",
    						"hidden"		=> true,
    						"css" 			=> false,
    					),
    					array(
    						"type" 			=> "textfield",
    						"param_name" 	=> "code-css",
    						"value" 		=> "",
    						"hidden"		=> true,
    						"css" 			=> false,
    					),
    					array(
    						"type" 			=> "checkbox",
    						"heading" 		=> __("Unwrap Code Block PHP"),
    						"param_name" 	=> "unwrap",
    						"value" 		=> "false",
    						"true_value" 	=> "true",
    						"false_value" 	=> "false",
    						"description"	=> __("Unwrapping Code Block PHP will result in ID assigned styles not applying to the Code Block on the front-end.","oxygen")
    					),
    					array(
    						"type" 			=> "tag",
    						"heading" 		=> __("Tag", "oxygen"),
    						"param_name" 	=> "tag",
    						"value" 		=> array (
    											"div" => "DIV",
    											"p" => "P",
    											"h1" => "H1",
    											"h2" => "H2",
    											"h3" => "H3",
    											"h4" => "H4",
    											"h5" => "H5",
    											"h6" => "H6",
    											"section" 	=> "section",
    											"footer" 	=> "footer",
    											"header" 	=> "header",
    											"article" 	=> "article",
    											"main" 		=> "main",
    											"figcaption"=> "figcaption",
    											"time" 		=> "time",
    											"summary" 	=> "summary",
    											"details" 	=> "details",
    											"aside" 	=> "aside",
    											"figure" 	=> "figure",
    											"hgroup" 	=> "hgroup",
    											"mark" 		=> "mark",
    											"nav" 		=> "nav",
    										),
    						"css" 			=> false,
    						"condition" 	=> "unwrap=false"
    					),
    				)
    			)
    		);

    Here is the file, but there is not this function.

    Thread Starter pixluser

    (@pixluser)

    The strange thing is that’s all thoses codes were functioning for some years in production (on a old php 7.4 and with an old wordpress maybe).

    Plugin Contributor Gary Jones

    (@garyj)

    Thanks. Line 133 seems to be:

    eval(' ?>'.$code_php.'<?php ');

    The code_php comes from a [ct_code_block] attribute. Reading your OP again, I see that track_displayed_posts() is a custom function, so somehow, this saved bit of PHP is being called twice.

    This may be better aimed at the Oxygen developers, because they’ll need to add in defensive code so the same bit of code does not run twice.

    Alternatively, move your code snippet into a proper plugin or theme file, outside of Oxygen, so it only runs once and isn’t stored in the database.

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘Crash with wp 6.3 and oxygen builder’ is closed to new replies.