Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/editor/ |
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/editor/entity.php |
<?php abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable { const BRIZY_DATA_VERSION_KEY = 'brizy_data_version'; /** * @var string */ protected $uid; /** * @var int */ protected $wp_post_id; /** * @var WP_Post */ protected $wp_post = null; /** * @var int */ protected $dataVersion = null; /** * 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(); } static public function get($postId) { $type = get_post_type($postId); switch ($type) { case 'page': case 'post': case Brizy_Admin_Popups_Main::CP_POPUP: return Brizy_Editor_Post::get($postId); case Brizy_Admin_Blocks_Main::CP_GLOBAL: case Brizy_Admin_Blocks_Main::CP_SAVED: return Brizy_Editor_Block::get($postId); } } /** * @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()); /** * 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(); } $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 ) ); return array_map( function ($o) { return (int)$o->ID; }, $posts ); } /** * @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 $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; } /** * 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; } }