landing-klikaset/wp-content/plugins/unlimited-elements-for-elem.../provider/provider_layout.class.php

586 lines
13 KiB
PHP

<?php
/**
* @package Unlimited Elements
* @author unlimited-elements.com
* @copyright (C) 2012 Unite CMS, All Rights Reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
* */
defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
class UniteCreatorLayout extends UniteCreatorLayoutWork{
private $post;
private $metaData;
/**
* construct the layout
*/
public function __construct(){
parent::__construct();
}
/**
* init by post object
*/
public function initByPost($post){
UniteFunctionsUC::validateNotEmpty($post," post object");
$postID = $post->ID;
$title = $post->post_title;
$name = $post->post_name;
$postType = $post->post_type;
$this->post = $post;
//init extra params
if(empty($this->extraParams))
$this->extraParams = array();
$this->extraParams["post_type"] = $postType;
//get layout type
$layoutType = "";
$params = null;
if($postType == GlobalsProviderUC::POST_TYPE_LAYOUT){
$layoutType = GlobalsUnlimitedElements::ADDONSTYPE_ELEMENTOR_TEMPLATE;
/*
$layoutType = get_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_TYPE, true);
if(empty($layoutType) || is_string($layoutType) == false)
$layoutType = "";
*/
}
/*
$layoutData = get_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_DATA);
//support legacy
if($postType == "uc_layout" && empty($layoutData)){
$layoutData = get_post_meta($postID, "layout_data");
if(empty($layoutData))
$layoutData = get_post_meta($postID, "blox_layout_data");
}
$this->metaData = $layoutData;
if(!empty($layoutData) && is_array($layoutData))
$layoutData = $layoutData[0];
*/
//get params
$params = get_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_PARAMS, true);
$layoutData = "";
$catID = get_post_meta($postID, GlobalsProviderUC::META_KEY_CATID, true);
if(empty($catID))
$catID = 0;
if(!empty($params) && is_array($params))
$params = $params[0];
$record = array();
$record["ordering"] = 0;
$record["title"] = $title;
$record["layout_data"] = $layoutData;
$record["layout_type"] = $layoutType;
$record["name"] = $name;
$record["params"] = $params;
$record["id"] = $postID;
$record["catid"] = $catID;
$this->initByRecord($record);
}
/**
* init by post id
*/
public function initByID($id){
if($id === "current_post"){
$id = null;
$post = get_post();
if(empty($post))
UniteFunctionsUC::throwError("Current post not found");
$this->id = $post->ID;
}else{
$id = (int)$id;
if(empty($id))
UniteFunctionsUC::throwError("Empty layout ID");
$post = @get_post($id);
if(empty($post))
UniteFunctionsUC::throwError("layout with id: $id not found");
$this->id = $id;
}
$this->initByPost($post);
}
/**
* update layout in db
*/
public function createLayoutInDB($arrInsert, $arrParams = array()){
UniteFunctionsUC::validateNotEmpty($this->objLayoutType, "layout type object");
//set post type
$postType = $this->objLayoutType->postType;
if(empty($postType)){
if($this->objLayoutType->isBasicType == true)
$postType = UniteFunctionsUC::getVal($arrParams, "post_type");
else
$postType = GlobalsProviderUC::POST_TYPE_LAYOUT; //basic type - false (blox type)
}
if(empty($postType))
UniteFunctionsUC::throwError("You must specify post type for import layout");
$title = UniteFunctionsUC::getVal($arrInsert, "title");
$name = UniteFunctionsUC::getVal($arrInsert, "name");
//for non blox layouts - take name from post title
if($postType != GlobalsProviderUC::POST_TYPE_LAYOUT)
$name = sanitize_title($title);
$layoutData = UniteFunctionsUC::getVal($arrInsert, "layout_data");
$catID = UniteFunctionsUC::getVal($arrInsert, "catid");
$parentID = UniteFunctionsUC::getVal($arrParams, "parent_id");
if(is_numeric($parentID) == false)
$parentID = null;
$arrPost = array();
$arrPost["post_title"] = $title;
$arrPost["post_name"] = $name;
$arrPost["post_content"] = "unlimited elements layout";
$arrPost["post_type"] = $postType;
$arrPost["post_status"] = "publish";
$maxOrder = UniteFunctionsWPUC::getMaxMenuOrder($postType, $parentID);
$arrPost["menu_order"] = $maxOrder+1;
if(!empty($parentID)){
$arrPost["post_parent"] = $parentID;
}
$postID = wp_insert_post($arrPost);
if(!empty($catID))
add_post_meta($postID, GlobalsProviderUC::META_KEY_CATID, $catID);
return($postID);
//update blox page related
/*
if($this->objLayoutType->isBloxPage == false)
return($postID);
add_post_meta($postID, GlobalsProviderUC::META_KEY_BLOX_PAGE, "true");
if(!empty($layoutData))
add_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_DATA, $layoutData);
//add layout type meta
if($postType == GlobalsProviderUC::POST_TYPE_LAYOUT){
add_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_TYPE, $this->objLayoutType->typeNameDistinct);
if(!empty($catID))
add_post_meta($postID, GlobalsProviderUC::META_KEY_CATID, $catID);
}
//update page template
if($this->objLayoutType->defaultBlankTemplate == true)
UniteFunctionsWPUC::updatePageTemplateAttribute($postID, GlobalsProviderUC::PAGE_TEMPLATE_LANDING_PAGE);
return($postID);
*/
}
/**
* update layout in db
*/
public function updateLayoutInDB($arrUpdate){
$postID = $this->id;
//update post
$title = UniteFunctionsUC::getVal($arrUpdate, "title");
if($title == "Auto Draft")
UniteFunctionsUC::throwError("Please change the title, 'Auto Draft' is a bad title :), <br><br> The page will be published when you save");
$arrUpdatePost = array();
//update title if needed
if(array_key_exists("title", $arrUpdate))
$arrUpdatePost["post_title"] = $arrUpdate["title"];
$postStatus = $this->post->post_status;
if($postStatus == "auto-draft"){
$arrUpdatePost["post_status"] = "draft";
//set import title
$importTitle = UniteFunctionsUC::getVal($arrUpdate, "import_title");
if(empty($importTitle)){
$importTitle = $this->getNewLayoutTitle();
}
$arrUpdatePost["post_title"] = $importTitle;
}
//update post name (if title updated)
if(isset($arrUpdatePost["post_title"])){
$postName = $this->post->post_name;
if(empty($postName))
$arrUpdatePost["post_name"] = sanitize_title($arrUpdatePost["post_title"]);
}
//update post
if(!empty($arrUpdatePost)){
$arrUpdatePost["ID"] = $postID;
$success = wp_update_post($arrUpdatePost);
if($success == 0)
UniteFunctionsUC::throwError("Unable to update page");
}
// --- update layout params (if exists)
if(array_key_exists("params", $arrUpdate)){
$params = UniteFunctionsUC::getVal($arrUpdate, "params");
update_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_PARAMS, $params);
}
// --- update layout data (if exists)
if(array_key_exists("layout_data", $arrUpdate)){
$layoutData = $arrUpdate["layout_data"];
update_post_meta($postID, GlobalsProviderUC::META_KEY_BLOX_PAGE, "true");
$updated = update_post_meta($postID, GlobalsProviderUC::META_KEY_LAYOUT_DATA, $layoutData);
//small validation
if($updated == false){
$oldData = $this->getRawLayoutData();
if($oldData != $layoutData)
UniteFunctionsUC::throwError("Unable to update page layout data");
}
//update post content with stripped html
$layoutHtml = HelperUC::outputLayout($postID, true);
$layoutHtml = UniteFunctionsUC::getPrettyHtml($layoutHtml);
$arrUpdateContent = array();
$arrUpdateContent["ID"] = $postID;
$arrUpdateContent["post_content"] = $layoutHtml;
wp_update_post($arrUpdateContent);
}
}
/**
* delete layout
*/
public function delete(){
$this->validateInited();
wp_delete_post($this->id, true);
delete_metadata("post", $this->id, GlobalsProviderUC::META_KEY_BLOX_PAGE);
delete_metadata("post", $this->id, GlobalsProviderUC::META_KEY_LAYOUT_DATA);
delete_metadata("post", $this->id, GlobalsProviderUC::META_KEY_CATID);
delete_metadata("post", $this->id, GlobalsProviderUC::META_KEY_LAYOUT_TYPE);
}
/**
* get parent id
*/
public function getParentID(){
$this->validateInited();
$parentID = $this->post->post_parent;
return($parentID);
}
/**
* get revision
*/
public function getLastRevision(){
$this->validateInited();
$arrRevisions = wp_get_post_revisions($this->id);
if(empty($arrRevisions))
return(null);
$firstRevision = array_shift($arrRevisions);
if(empty($firstRevision))
UniteFunctionsUC::throwError("Failed to get template revision");
$revisionID = $firstRevision->ID;
return($revisionID);
}
/**
* check if layout exists by title
*/
protected function isLayoutExistsByTitle($title, $layoutType){
$isExists = UniteFunctionsWPUC::isPostExistsByTitle($title);
return($isExists);
}
/**
* get post layout base name
*/
private function getPostBaseName($postID){
if(empty($postID))
return(null);
$post = get_post($postID);
if(empty($post))
return(null);
$postTitle = $post->post_title;
$postName = $post->post_name;
if(empty($postTitle))
return($postName);
$baseName = HelperUC::convertTitleToAlias($postTitle);
return($baseName);
}
/**
* get new layout name
*/
protected function getNewLayoutName($title, $importParams){
$parentID = UniteFunctionsUC::getVal($importParams, "parent_id");
//get base name
$baseName = null;
if(!empty($parentID))
$baseName = $this->getPostBaseName($parentID);
$name = $this->generateName($title, null, $baseName);
return($name);
}
/**
* get export layout name
*/
public function getExportLayoutName(){
$this->validateInited();
$parentID = $this->post->post_parent;
$prefix = "template";
$layoutName = $prefix;
if(!empty($parentID))
$layoutName .= "_". $this->getPostBaseName($parentID);
$layoutName .= "_".$this->getPostBaseName($this->id);
$layoutName = HelperUC::convertTitleToHandle($layoutName);
return($layoutName);
}
/**
* check if layout exists by title
*/
protected function isLayoutExistsByName($name, $layoutType){
$isExists = UniteFunctionsWPUC::isPostNameExists($name);
return($isExists);
}
/**
* generate addon with content
*/
public function generateHtmlAddonContentForLayout($postContent){
$objAddons = new UniteCreatorAddons();
$isExists = $objAddons->isAddonExistsByName("html_editor");
if($isExists == false)
return(null);
$objAddon = new UniteCreatorAddon();
$objAddon->initByName("html_editor");
$arrContent = array();
$arrContent["editor"] = $postContent;
$objAddon->setParamsValues($arrContent);
$arrAddonContent = $objAddon->getDataForLayoutGrid();
return($arrAddonContent);
}
/**
* check content for new layout
* if there is no saved content, put content from post content box
*/
public function checkNewPostLayoutContent(){
$this->validateInited();
//check meta data
if(!empty($this->metaData))
return(false);
//get post content
$postContent = $this->post->post_content;
$postContent = trim($postContent);
if(empty($postContent))
return(false);
//generate addon data
$arrAddonContent = $this->generateHtmlAddonContentForLayout($postContent);
if(empty($arrAddonContent))
return(false);
//add row to empty layout with the addon data
$this->addRowWithHtmlAddon($arrAddonContent);
}
/**
* check if the post is group
* if it has children in it
*/
public function isGroup(){
$this->validateInited();
$arrChildren = UniteFunctionsWPUC::getPostChildren($this->post);
if(!empty($arrChildren))
return(true);
return(false);
}
/**
* get edit layout url
*/
public function getUrlEditPost(){
$this->validateInited();
$urlEdit = get_edit_post_link($this->id);
return($urlEdit);
}
/**
* get edit layout url
*/
public function getUrlViewPost(){
$this->validateInited();
$urlView = get_permalink($this->id);
return($urlView);
}
/**
* get page image
*/
public function getPreviewImage($getThumb = false){
$this->validateInited();
$attachmentID = UniteFunctionsWPUC::getFeaturedImageID($this->id);
$urlPreview = null;
if(!empty($attachmentID)){
if($getThumb == true)
$urlPreview = UniteFunctionsWPUC::getUrlAttachmentImage($attachmentID, UniteFunctionsWPUC::THUMB_MEDIUM);
else
$urlPreview = UniteFunctionsWPUC::getUrlAttachmentImage($attachmentID);
}
return($urlPreview);
}
/**
* get default image preview
*/
public function getDefaultPreviewImage(){
$typeName = $this->objLayoutType->typeName;
$urlPreview = HelperUC::getDefaultPreviewImage($typeName);
return($urlPreview);
}
}