Uname: Linux premium294.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
Software: LiteSpeed
PHP version: 8.1.32 [ PHP INFO ] PHP os: Linux
Server Ip: 104.21.80.1
Your Ip: 216.73.216.223
User: mjbynoyq (1574) | Group: mjbynoyq (1570)
Safe Mode: OFF
Disable Function:
NONE

name : entity.php
<?php

abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
	const COMPILER_BROWSER = 'browser';
	const COMPILER_EXTERNAL = 'server';

	const BRIZY_DATA_VERSION_KEY = 'brizy_data_version';
	const BRIZY_DEPENDENCIES_KEY = 'brizy_dependencies';

	/**
	 * @var string
	 */
	protected $uid;


	/**
	 * @var string
	 */
	protected $title;

	/**
	 * @var int
	 */
	protected $wp_post_id;

	/**
	 * @var WP_Post
	 */
	protected $wp_post = null;

	/**
	 * @var int
	 */
	protected $dataVersion = null;

	/**
	 * @var array
	 */
	protected $dependencies = [];

	/**
	 * @var null
	 */
	protected $compiler = self::COMPILER_EXTERNAL;

	/**
	 * Brizy_Editor_Entity constructor.
	 */
	public function __construct( $postId ) {
		if ( ! is_numeric( $postId ) ) {
			throw new Exception( 'Invalid post id provided' );
		}

		Brizy_Editor::checkIfPostTypeIsSupported( $postId );

		$this->setWpPostId( $postId );

		$this->loadInstanceData();

		$this->dependencies = get_post_meta( $this->getWpPostId(), self::BRIZY_DEPENDENCIES_KEY, true );
	}

	/**
	 * @return bool
	 */
	public function can_edit_posts() {
		return current_user_can( 'edit_posts' );
	}

	/**
	 * @return bool
	 */
	static public function canEditPosts() {
		return current_user_can( 'edit_posts' );
	}

	static public function get( $postId, $uid = null ) {
		$type = get_post_type( $postId );

		switch ( $type ) {

			case Brizy_Admin_Blocks_Main::CP_GLOBAL:
			case Brizy_Admin_Blocks_Main::CP_SAVED:
				return Brizy_Editor_Block::get( $postId, $uid );

			default:
			case 'page':
			case 'post':
			case Brizy_Admin_Popups_Main::CP_POPUP:
				return Brizy_Editor_Post::get( $postId, $uid );
		}
	}


	/**
	 * @return bool
	 */
	public function uses_editor() {
		return self::isBrizyEnabled( $this->getWpPostId() );
	}

	/**
	 * @return bool
	 */
	static public function isBrizyEnabled( $post ) {

		if ( $post instanceof WP_Post ) {
			$post = $post->ID;
		}

		return (bool) get_post_meta( $post, Brizy_Editor_Constants::BRIZY_ENABLED, true );
	}

	/**
	 * @param $value
	 *
	 * @return $this
	 * @throws Brizy_Editor_Exceptions_AccessDenied
	 */
	public function set_uses_editor( $value ) {
		self::setBrizyEnabled( $this->getWpPostId(), $value );

		return $this;
	}

	/**
	 * @return bool
	 */
	static public function setBrizyEnabled( $post, $value ) {

		if ( ! self::canEditPosts() ) {
			throw new Brizy_Editor_Exceptions_AccessDenied( 'Current user cannot edit page' );
		}

		if ( $post instanceof WP_Post ) {
			$post = $post->ID;
		}

		update_post_meta( $post, Brizy_Editor_Constants::BRIZY_ENABLED, (int) $value );
	}

	/**
	 * @return string
	 */
	static public function getEditUrl( $post ) {

		if ( $post instanceof WP_Post ) {
			$post = $post->ID;
		}

		if ( $parent_post_id = wp_is_post_revision( $post ) ) {
			$post = $parent_post_id;
		}

		return add_query_arg(
			[
				'action' => 'in-front-editor',
				'post'   => $post
			],
			admin_url( 'post.php' )
		);
	}

	/**
	 * @param $postId
	 *
	 * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed
	 * @throws Exception
	 */
	public function duplicateTo( $postId ) {
		// check post types
		if ( get_post_type( $postId ) !== $this->getWpPost()->post_type ) {
			throw new Exception( 'Cannot duplicate post. Invalid target post type' );
		}

		if ( ! $this->uses_editor() ) {
			throw new Exception( 'The source post is not using Brizy.' );
		}

		// copy current date the the new post
		$newPost = self::get( $postId );

		if ( $newPost->uses_editor() ) {
			throw new Exception( 'Target post is using Brizy.' );
		}

		$newPost->set_needs_compile( true );
		$newPost->set_uses_editor( true );
		$newPost->setDataVersion( 1 );
		$newPost->createUid();

		return $newPost;
	}


	/**
	 * Will return the key on witch the object data will be saved in storage
	 *
	 * @return mixed
	 */
	abstract protected function getObjectKey();

	/**
	 * Load all object data
	 */
	abstract protected function loadInstanceData();

	/**
	 * @return mixed
	 */
	abstract public function createResponse( $fields = array(), $context=Brizy_Editor_Editor_Editor::EDITOR_CONTEXT );

	/**
	 * Save post data and and trigger post update
	 *
	 * @return mixed
	 */
	abstract public function savePost();

	/**
	 * This will save ro create an autosave object the the data from entity
	 * Also before saving the data version will be checked
	 *
	 * @return $this
	 * @throws Exception
	 */
	public function save( $autosave = 0 ) {

		// check entity versions before saving.
		if ( (int) $autosave === 0 ) {
			$this->saveDataVersion();

			update_post_meta( $this->getWpPostId(), self::BRIZY_DEPENDENCIES_KEY, $this->dependencies );
		}

		$this->createUid();

		return $this;
	}

	/**
	 * This will take all values from entity and save them to database
	 */
	public function saveStorage() {
		$value = $this->convertToOptionValue();
		$this->getStorage()->set( $this->getObjectKey(), $value );
	}


	/**
	 * @return Brizy_Editor_Post[]
	 * @throws Brizy_Editor_Exceptions_NotFound
	 * @throws Brizy_Editor_Exceptions_UnsupportedPostType
	 */
	public static function get_all_brizy_post_ids() {
		global $wpdb;
		$posts = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT p.ID FROM {$wpdb->postmeta} pm 
					   JOIN {$wpdb->posts} p ON p.ID=pm.post_id and p.post_type <> 'revision'  and p.post_type<>'attachment' and p.post_status='publish'
					   WHERE pm.meta_key = %s ",
				Brizy_Editor_Storage_Post::META_KEY
			), ARRAY_A
		);

		return array_column( $posts, 'ID' );
	}

	/**
	 * @return int
	 */
	public function getWpPostId() {
		return $this->wp_post_id;
	}

	/**
	 * @param int $wp_post_id
	 *
	 * @return Brizy_Editor_Entity
	 */
	public function setWpPostId( $wp_post_id ) {
		$this->wp_post_id = $wp_post_id;

		return $this;
	}

	/**
	 * Return the post parent id
	 *
	 * @return int
	 */
	public function getWpPostParentId() {
		return $this->getWpPost()->post_parent ?: $this->getWpPostId();
	}

	/**
	 * @return WP_Post
	 */
	public function getWpPost() {
		return $this->wp_post ?: ( $this->wp_post = get_post( $this->getWpPostId() ) );
	}

	/**
	 * @return null
	 */
	public function get_compiler() {
		return $this->compiler;
	}

	/**
	 * @param null $compiler
	 */
	public function set_compiler( $compiler ) {
		if ( in_array( $compiler, [ self::COMPILER_BROWSER, self::COMPILER_EXTERNAL ] ) ) {
			$this->compiler = $compiler;

			return $this;
		}

		throw new \Exception( 'Invalid compiler type provided.' );
	}

	/**
	 * @return $this
	 */
	protected function saveDataVersion() {
		$version = $this->getCurrentDataVersion();

		if ( $this->dataVersion !== $version + 1 ) {
			Brizy_Logger::instance()->critical(
				'Unable to save entity. The data version is wrong.',
				[
					'post_id'        => $this->getWpPostId(),
					'currentVersion' => $version,
					'newVersion'     => $this->dataVersion,
				]
			);
			throw new Brizy_Editor_Exceptions_DataVersionMismatch( 'Unable to save entity. The data version is wrong.' );
		}

		update_post_meta( $this->getWpPostId(), self::BRIZY_DATA_VERSION_KEY, $this->dataVersion );

		return $this;
	}

	/**
	 * @return int
	 */
	public function getCurrentDataVersion() {
		return (int) ( get_post_meta( $this->getWpPostId(), self::BRIZY_DATA_VERSION_KEY, true ) ?: 0 );
	}


	/**
	 * @param $dataVersion
	 *
	 * @return $this
	 */
	public function setDataVersion( $dataVersion ) {
		$this->dataVersion = (int) $dataVersion;

		return $this;
	}

	/**
	 * @return string
	 */
	public function getUid() {
		return $this->uid;
	}

	public function getTitle() {
		return $this->getWpPost()->post_title;
	}

	public function setTitle( $title ) {
		$this->getWpPost()->post_title = $title;

		return $this;
	}

	/**
	 * Return an instance of Brizy_Editor_Storage_Abstract that will store the object data
	 *
	 * @return Brizy_Editor_Storage_Post
	 */
	protected function getStorage() {
		return Brizy_Editor_Storage_Post::instance( $this->wp_post_id );
	}

	/**
	 * @return mixed|string
	 */
	protected function createUid() {
		$WPPost  = $this->getWpPost();
		$post_id = $WPPost->post_type != 'revision' ? $this->getWpPostId() : $WPPost->post_parent;

		if ( $uid = $this->getUid() ) {
			$uid = get_post_meta( $post_id, 'brizy_post_uid', true );
			if ( ! $uid ) {
				update_post_meta( $post_id, 'brizy_post_uid', $this->getUid() );
			}

			return $uid;
		}

		$uid = get_post_meta( $post_id, 'brizy_post_uid', true );

		if ( ! $uid ) {
			$uid = md5( $post_id . time() );
			update_post_meta( $post_id, 'brizy_post_uid', $uid );
		}

		return $this->uid = $uid;
	}

	/**
	 * @return array
	 */
	public function getDependencies() {
		return $this->dependencies;
	}

	/**
	 * @param array $dependencies
	 *
	 * @return Brizy_Editor_Entity
	 */
	public function setDependencies( $dependencies ) {
		$this->dependencies = $dependencies;

		return $this;
	}

}
© 2025 XylotrechusZ