uid = $uid; } parent::__construct( $postId ); // create the uid if the editor is enabled for this post if ( $this->uses_editor() ) { $this->createUid(); } } /** * @param $apost * * @return Brizy_Editor_Post|mixed * @throws Exception */ public static function get( $apost, $uid = null ) { $wp_post_id = $apost; if ( $apost instanceof WP_Post ) { $wp_post_id = $apost->ID; } if ( isset( self::$instance[ $wp_post_id ] ) ) { return self::$instance[ $wp_post_id ]; } return self::$instance[ $wp_post_id ] = new self( $wp_post_id, $uid ); } /** * @param $postId * * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed * @throws Exception */ public function duplicateTo( $postId ) { $newPost = parent::duplicateTo( $postId ); // copy current data to new post $newPost->set_template( $this->get_template() ); $storage = $this->getStorage(); $newStorage = $newPost->getStorage(); $newStorage->loadStorage( $storage->get_storage() ); $newPost->loadInstanceData(); $newPost->saveStorage(); return $newPost; } /** * Clear all cached instances; */ public static function cleanClassCache() { self::$instance = array(); } /** * @return string */ public function serialize() { $get_object_vars = get_object_vars( $this ); unset( $get_object_vars['wp_post_id'] ); unset( $get_object_vars['wp_post'] ); unset( $get_object_vars['api_page'] ); unset( $get_object_vars['store_assets'] ); unset( $get_object_vars['assets'] ); return serialize( $get_object_vars ); } /** * @param $data */ public function unserialize( $data ) { parent::unserialize( $data ); // TODO: Change the autogenerated stub } public function createResponse( $fields = array() ) { $p_id = (int) $this->getWpPostId(); $the_title = get_the_title( $p_id ); $global = array( 'title' => $the_title, 'slug' => sanitize_title( $the_title ), 'data' => $this->get_editor_data(), 'id' => $p_id, 'is_index' => false, 'template' => get_page_template_slug( $p_id ), 'status' => get_post_status( $p_id ), 'url' => get_the_permalink( $p_id ), 'dataVersion' => $this->getCurrentDataVersion() ); return $global; } public function convertToOptionValue() { return array( 'compiled_html' => $this->get_encoded_compiled_html(), 'compiled_scripts' => $this->getCompiledScripts(), 'compiled_styles' => $this->getCompiledStyles(), 'compiled_html_body' => $this->get_compiled_html_body(), 'compiled_html_head' => $this->get_compiled_html_head(), 'editor_version' => $this->editor_version, 'compiler_version' => $this->compiler_version, 'plugin_version' => $this->plugin_version, 'pro_plugin_version' => $this->pro_plugin_version, 'editor_data' => $this->editor_data, Brizy_Editor_Constants::USES_BRIZY => $this->uses_editor() ); } /** * Mark all brizy post that needs compile */ public static function mark_all_for_compilation() { global $wpdb; $wpdb->update( $wpdb->postmeta, array( 'meta_value' => 1 ), array( 'meta_key' => self::BRIZY_POST_NEEDS_COMPILE_KEY ) ); } public function savePost( $createRevision = false ) { $postarr = [ 'ID' => $this->getWpPostId(), 'post_content' => $this->getPostContent( $createRevision ) ]; $this->deleteOldAutosaves( $this->getWpPostId() ); if ( $createRevision ) { $post_type_object = get_post_type_object( $this->getWpPost()->post_type ); if ( current_user_can( $post_type_object->cap->publish_posts ) ) { $postarr['post_status'] = $this->getWpPost()->post_status; } } else { remove_action( 'post_updated', 'wp_save_post_revision' ); } wp_update_post( $postarr ); $this->createUid(); } private function getPostContent( $noFilters ) { $post = $this->getWpPost(); $emptyContent = '
'; $versionTime = ''; $excluded = [ Brizy_Admin_Blocks_Main::CP_GLOBAL, Brizy_Admin_Blocks_Main::CP_SAVED, Brizy_Admin_Templates::CP_TEMPLATE, Brizy_Admin_Popups_Main::CP_POPUP ]; if ( in_array( $post->post_type, $excluded ) ) { return $emptyContent . $versionTime; } if ( $noFilters ) { $content = $post->post_content; } else { $context = new Brizy_Content_Context( Brizy_Editor_Project::get(), null, $post, null ); $placeholderProvider = new Brizy_Content_PlaceholderWpProvider( $context ); $context->setProvider( $placeholderProvider ); $extractor = new \BrizyPlaceholders\Extractor( $placeholderProvider ); list( $placeholders, $placeholderInstances, $content ) = $extractor->extract( $this->get_compiled_page()->getPageContent() ); $replacer = new \BrizyPlaceholders\Replacer( $placeholderProvider ); $content = $replacer->replaceWithExtractedData( $placeholders, $placeholderInstances, $content, $context ); $content = $extractor->stripPlaceholders( $content ); $content = apply_filters( 'brizy_content', $content, Brizy_Editor_Project::get(), $post ); } $content = strpos( $content, 'brz-root__container' ) ? preg_replace( '//', '', $content ) : $emptyContent; return $content . $versionTime; } /** * @param int $autosave * * @return bool|Brizy_Editor_Entity */ public function save( $autosave = 0 ) { parent::save( $autosave ); if ( $autosave == 0 ) { $this->saveStorage(); } else { $this->auto_save_post( $this->getWpPost(), function ( $autosaveObject ) { $autosavePost = $this->populateAutoSavedData( $autosaveObject ); $autosavePost->saveStorage(); } ); } return true; } /** * @return bool * @throws Brizy_Editor_Exceptions_ServiceUnavailable * @throws Exception */ public function compile_page() { Brizy_Logger::instance()->notice( 'Compile page', array( $this ) ); $compiledData = Brizy_Editor_User::get()->compile_page( Brizy_Editor_Project::get(), $this ); $compiledData['pageHtml'] = Brizy_SiteUrlReplacer::hideSiteUrl( $compiledData['pageHtml'] ); foreach ( $compiledData['pageScripts'] as $i => $set ) { //pro || free foreach ( $set as $k => $scripts ) { // groups if ( $k == 'libsSelectors' ) { continue; } if ( $k == 'main' ) { if ( isset( $compiledData['pageScripts'][ $i ][ $k ]['content']['url'] ) ) { $compiledData['pageScripts'][ $i ][ $k ]['content']['url'] = Brizy_SiteUrlReplacer::hideSiteUrl( $compiledData['pageScripts'][ $i ][ $k ]['content']['url'] ); continue; } } foreach ( $scripts as $l => $script ) { if ( isset( $compiledData['pageScripts'][ $i ][ $k ][ $l ]['content']['url'] ) ) { $compiledData['pageScripts'][ $i ][ $k ][ $l ]['content']['url'] = Brizy_SiteUrlReplacer::hideSiteUrl( $script['content']['url'] ); } } } } foreach ( $compiledData['pageStyles'] as $i => $set ) { foreach ( $set as $k => $styles ) { if ( $k == 'libsSelectors' ) { continue; } if ( $k == 'main' ) { if ( isset( $compiledData['pageStyles'][ $i ][ $k ]['content']['url'] ) ) { $compiledData['pageStyles'][ $i ][ $k ]['content']['url'] = Brizy_SiteUrlReplacer::hideSiteUrl( $compiledData['pageStyles'][ $i ][ $k ]['content']['url'] ); } continue; } foreach ( $styles as $l => $style ) { if ( isset( $compiledData['pageStyles'][ $i ][ $k ][ $l ]['content']['url'] ) ) { $compiledData['pageStyles'][ $i ][ $k ][ $l ]['content']['url'] = Brizy_SiteUrlReplacer::hideSiteUrl( $style['content']['url'] ); } } } } $this->set_compiled_html( $compiledData['pageHtml'] ); $this->set_compiled_html_head( null ); $this->set_compiled_html_body( null ); $this->set_needs_compile( false ); $this->set_compiler_version( BRIZY_EDITOR_VERSION ); $this->set_plugin_version( BRIZY_VERSION ); $this->set_pro_plugin_version( defined( 'BRIZY_PRO_VERSION' ) ? BRIZY_PRO_VERSION : null ); $this->setCompiledScripts( $compiledData['pageScripts'] ); $this->setCompiledStyles( $compiledData['pageStyles'] ); return true; } /** * @return string */ public function get_compiled_html() { return $this->compiled_html; } /** * @param string $compiled_html * * @return Brizy_Editor_Post */ public function set_compiled_html( $compiled_html ) { $this->compiled_html = $compiled_html; return $this; } /** * @return array */ public function getCompiledScripts() { return $this->compiled_scripts; } /** * @param array $compiled_scripts * * @return Brizy_Editor_Post */ public function setCompiledScripts( $compiled_scripts ) { $this->compiled_scripts = $compiled_scripts; return $this; } /** * @return array */ public function getCompiledStyles() { return $this->compiled_styles; } /** * @param array $compiled_styles * * @return Brizy_Editor_Post */ public function setCompiledStyles( $compiled_styles ) { $this->compiled_styles = $compiled_styles; return $this; } /** * @param $compiled_html * * @return $this */ public function set_encoded_compiled_html( $compiled_html ) { if ( ( $decodedData = base64_decode( $compiled_html, true ) ) !== false ) { $this->set_compiled_html( $decodedData ); } else { $this->set_compiled_html( $compiled_html ); } return $this; } /** * @return string */ public function get_encoded_compiled_html() { return base64_encode( $this->get_compiled_html() ); } /** * @return string * @deprecated use get_compiled_html */ public function get_compiled_html_body() { return $this->compiled_html_body; } /** * @return string * @deprecated use get_compiled_html */ public function get_compiled_html_head() { return $this->compiled_html_head; } /** * @param $html * * @return $this * @deprecated use set_compiled_html * */ public function set_compiled_html_body( $html ) { $this->compiled_html_body = $html; return $this; } /** * @param $html * * @return $this * @deprecated use set_compiled_html * */ public function set_compiled_html_head( $html ) { // remove all title and meta tags. $this->compiled_html_head = $html; return $this; } /** * @return string */ public function get_editor_data() { if ( ( $decodedData = base64_decode( $this->editor_data, true ) ) !== false ) { return $decodedData; } return $this->editor_data; } /** * @param $content * * @return $this */ public function set_editor_data( $content ) { if ( base64_decode( $content, true ) !== false ) { $this->editor_data = $content; } else { $this->editor_data = base64_encode( $content ); } return $this; } /** * @return $this * @throws Brizy_Editor_Exceptions_AccessDenied */ public function enable_editor() { if ( ! $this->can_edit_posts() ) { throw new Brizy_Editor_Exceptions_AccessDenied( 'Current user cannot edit page' ); } $this->set_uses_editor( true ); return $this; } /** * @return $this * @throws Brizy_Editor_Exceptions_AccessDenied */ public function disable_editor() { if ( ! $this->can_edit_posts() ) { throw new Brizy_Editor_Exceptions_AccessDenied( 'Current user cannot edit page' ); } $this->set_uses_editor( false ); return $this; } /** * @param string $editor_version */ public function set_editor_version( $editor_version ) { $this->editor_version = $editor_version; update_metadata( 'post', $this->getWpPostId(), self::BRIZY_POST_EDITOR_VERSION, $editor_version ); } /** * @param string $compiler_version */ public function set_compiler_version( $compiler_version ) { $this->compiler_version = $compiler_version; update_metadata( 'post', $this->getWpPostId(), self::BRIZY_POST_COMPILER_VERSION, $compiler_version ); } /** * @param string $plugin_version */ public function set_plugin_version( $plugin_version ) { $this->plugin_version = $plugin_version; update_metadata( 'post', $this->getWpPostId(), self::BRIZY_POST_PLUGIN_VERSION, $plugin_version ); } /** * @param $v * * @return $this */ public function set_needs_compile( $v ) { $this->needs_compile = (bool) $v; update_metadata( 'post', $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY, (bool) $v ); return $this; } /** * @return bool */ public function get_needs_compile() { return $this->needs_compile; } /** * @return Brizy_Editor_CompiledHtml */ public function get_compiled_page() { if ( isset( self::$compiled_page[ $this->getWpPostId() ] ) ) { return self::$compiled_page[ $this->getWpPostId() ]; } return self::$compiled_page[ $this->getWpPostId() ] = new Brizy_Editor_CompiledHtml( $this->get_compiled_html() ); } public function isCompiledWithCurrentVersion() { $proVersion = defined( 'BRIZY_PRO_VERSION' ) ? BRIZY_PRO_VERSION : null; return $this->get_compiler_version() === BRIZY_EDITOR_VERSION && $this->get_pro_plugin_version() === $proVersion && $this->plugin_version===BRIZY_VERSION; } /** * @return array */ public function get_templates() { $type = get_post_type( $this->getWpPostId() ); $templates = array( array( 'id' => '', 'title' => __( 'Default', 'brizy' ) ) ); foreach ( wp_get_theme()->get_page_templates( null, $type ) as $key => $title ) { $templates[] = [ 'id' => $key, 'title' => $title ]; } return apply_filters( "brizy:$type:templates", $templates ); } /** * @param string $aTemplate * * @return $this */ public function set_template( $aTemplate ) { $aTemplate = apply_filters( 'brizy_post_template', $aTemplate ); if ( $aTemplate == '' ) { delete_post_meta( $this->getWpPostId(), '_wp_page_template' ); } else { update_post_meta( $this->getWpPostId(), '_wp_page_template', $aTemplate ); } return $this; } /** * @return mixed */ public function get_template() { return get_post_meta( $this->getWpPostId(), '_wp_page_template', true ); } /** * @return string */ public function get_compiler_version() { return $this->compiler_version; } /** * @return string */ public function get_pro_plugin_version() { return $this->pro_plugin_version; } /** * @param string $pro_plugin_version * * @return Brizy_Editor_Post */ public function set_pro_plugin_version( $pro_plugin_version ) { $this->pro_plugin_version = $pro_plugin_version; return $this; } /** * @return string */ public function get_editor_version() { return $this->editor_version; } /** * @return string * @deprecated Use getEditUrl() */ public function edit_url() { return self::getEditUrl( $this->getWpPostId() ); } /** * Will return the key on witch the object data will be saved in storage * * @return mixed */ protected function getObjectKey() { return self::BRIZY_POST; } /** * Load all object data */ protected function loadInstanceData() { // get the storage values $storage = $this->getStorage(); //$storageData = $storage->get_storage(); $storage_post = $storage->get( $this->getObjectKey(), false ); // check for deprecated forms of posts if ( $storage_post instanceof self ) { $this->set_editor_data( $storage_post->editor_data ); $this->set_needs_compile( true ); $this->save(); } else if ( is_array( $storage_post ) ) { if ( isset( $storage_post['compiled_html'] ) ) { $this->set_encoded_compiled_html( $storage_post['compiled_html'] ); } if ( isset( $storage_post['compiled_scripts'] ) ) { $this->setCompiledScripts( $storage_post['compiled_scripts'] ); } if ( isset( $storage_post['compiled_styles'] ) ) { $this->setCompiledStyles( $storage_post['compiled_styles'] ); } $proVersion = defined( 'BRIZY_PRO_VERSION' ) ? BRIZY_PRO_VERSION : null; $data_needs_compile = isset( $storage_post['needs_compile'] ) ? $storage_post['needs_compile'] : true; $this->set_editor_data( $storage_post['editor_data'] ); $this->set_needs_compile( metadata_exists( 'post', $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY ) ? (bool) get_post_meta( $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY, true ) : $data_needs_compile ); $this->set_editor_version( isset( $storage_post['editor_version'] ) ? $storage_post['editor_version'] : BRIZY_EDITOR_VERSION ); $this->set_compiler_version( isset( $storage_post['compiler_version'] ) ? $storage_post['compiler_version'] : BRIZY_EDITOR_VERSION ); $this->set_plugin_version( isset( $storage_post['plugin_version'] ) ? $storage_post['plugin_version'] : null ); $this->set_pro_plugin_version( isset( $storage_post['pro_plugin_version'] ) ? $storage_post['pro_plugin_version'] : null ); $this->compiled_html_head = isset( $storage_post['compiled_html_head'] ) ? $storage_post['compiled_html_head'] : null; $this->compiled_html_body = isset( $storage_post['compiled_html_body'] ) ? $storage_post['compiled_html_body'] : null; } } /** * @param self $autosave * * @return mixed */ protected function populateAutoSavedData( $autosave ) { $autosave->set_template( $this->get_template() ); $autosave->set_editor_data( $this->get_editor_data() ); $autosave->set_editor_version( $this->get_editor_version() ); $autosave->set_needs_compile( true ); return $autosave; } public static function get_post_list( $searchTerm, $postType, $excludePostType = array(), $offset = 0, $limit = 20 ) { global $wp_post_types, $wpdb; $searchQuery = ''; $postLabel = $wp_post_types[ $postType ]->label; // not sure iw we will have this case :D if ( is_array( $excludePostType ) && in_array( $postType, $excludePostType ) ) { return []; } if ( $searchTerm ) { $searchQuery = " AND post_title LIKE %s"; } $postStatus = $postType == 'attachment' ? "'inherit'" : "'publish','pending','draft','future','private'"; $query = <<