File "class-observer.php"

Full path: /home/dora/public_html/wp-content/plugins/wp-grid-builder-bricks/includes/class-observer.php
File size: 2.33 KB
MIME-type: --
Charset: utf-8

<?php
/**
 * Observer
 *
 * @package   WP Grid Builder - Bricks
 * @author    Loïc Blascos
 * @copyright 2019-2022 Loïc Blascos
 */

namespace WP_Grid_Builder_Bricks\Includes;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Observer
 *
 * @class WP_Grid_Builder_Bricks\Includes\Observer
 * @since 1.0.0
 */
class Observer {

	/**
	 * Holds Bricks element to handle
	 *
	 * @since 1.0.0
	 * @access protected
	 * @var boolean|object
	 */
	protected $handled = false;

	/**
	 * Constructor
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function __construct() {

		add_action( 'bricks/element/render', [ $this, 'before_render' ], 10, 2 );
		add_action( 'bricks/element/render', [ $this, 'after_render' ], 9, 2 );
		add_filter( 'bricks/frontend/render_data', [ $this, 'after_content' ] );

	}

	/**
	 * Before to render element
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @param boolean $render  Whether to render element.
	 * @param array   $element Holds element to render.
	 * @return boolean
	 */
	public function before_render( $render, $element ) {

		if ( bricks_is_builder() && ! wpgb_doing_ajax() ) {
			return $render;
		}

		if ( empty( $element->name ) ) {
			return $render;
		}

		if ( $this->maybe_handle( $element->name, $element ) ) {
			$this->handled = $element;
		}

		return $render;

	}

	/**
	 * After to render previous element
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @param boolean $render  Whether to render element.
	 * @param array   $element  Holds element to render.
	 * @return boolean
	 */
	public function after_render( $render, $element ) {

		if ( bricks_is_builder() && ! wpgb_doing_ajax() ) {
			return $render;
		}

		if ( empty( $this->handled ) || $element->id === $this->handled->id ) {
			return $render;
		}

		if ( $this->maybe_render( $this->handled->name, $this->handled ) ) {
			$this->handled = false;
		}

		return $render;

	}

	/**
	 * After to render page content
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @param string $content Rendered content.
	 * @return string
	 */
	public function after_content( $content ) {

		if ( bricks_is_builder() && ! wpgb_doing_ajax() ) {
			return $content;
		}

		if ( empty( $this->handled ) ) {
			return $content;
		}

		if ( $this->maybe_render( $this->handled->name, $this->handled ) ) {
			$this->handled = false;
		}

		return $content;

	}
}