<?php
/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.10                               //
//                        http://www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2012                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

class cmsBlogs {

    private static $instance;
    public $owner;

	private $targets = array('tags'=>'blogpost',
							 'rating'=>'blogpost',
							 'comments'=>'blog',
							 'actions_post'=>'add_post',
							 'actions_blog'=>'add_blog');

// ============================================================================ //
// ============================================================================ //

	private function __construct(){
        $this->inDB = cmsDatabase::getInstance();
		cmsCore::loadLanguage('components/blogs');
		cmsCore::loadLib('tags');
		cmsCore::loadLib('karma');
    }

    private function __clone() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    /**
     * Устанавливает таргеты
     * @param array $targets
     * @return bool
     */
    public function setTargets($targets=array()) {
		$this->targets = $targets;
        return true;
    }

    public function getTarget($target='') {
		return isset($this->targets[$target]) ? $this->targets[$target] : '';
    }
/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает категории блога
     * @param int $blog_id
     * @return array $cats
     */
    public function getBlogCats($blog_id){

		$sql = "SELECT cat.*, IFNULL(COUNT(p.id), 0) as post_count
				FROM cms_blog_cats cat
				LEFT JOIN cms_blog_posts p ON p.cat_id = cat.id AND p.published = 1
				WHERE cat.blog_id = '$blog_id'
				GROUP BY cat.id";

		$result = $this->inDB->query($sql);

		if(!$this->inDB->num_rows($result)){ return false; }

        $cats = array();

		while($cat = $this->inDB->fetch_assoc($result)){
			$cats[] = $cat;
		}

        return cmsCore::callEvent('GET_BLOG_CATS', $cats);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает категорию блога
     * @param int $cat_id
     * @return array $cat
     */
    public function getBlogCategory($cat_id){

		$cat = $this->inDB->get_fields('cms_blog_cats', "id = '$cat_id'", '*');

        return $cat ? cmsCore::callEvent('GET_BLOG_CAT', $cat) : false;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Добавляет категорию блога
     * @param array $item
     * @return int
     */
    public function addBlogCategory($item){

        return $this->inDB->insert('cms_blog_cats', cmsCore::callEvent('ADD_BLOG_CAT', $item));;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Обновляет данные категории блога
     * @param int $cat_id
     * @param array $item
     * @return bool
     */
    public function updateBlogCategory($cat_id, $item){

        return $this->inDB->update('cms_blog_cats', cmsCore::callEvent('UPDATE_BLOG_CAT', $item), $cat_id);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Удаляет категорию
     * @param int $cat_id
     * @return bool
     */
    public function deleteBlogCategory($cat_id){

        cmsCore::callEvent('DELETE_BLOG_CAT', $cat_id);

		$this->inDB->query("UPDATE cms_blog_posts SET cat_id=0 WHERE cat_id = '{$cat_id}'");

        return $this->inDB->delete('cms_blog_cats', "id = '$cat_id'", 1);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает массив авторов блога
     * @param int $blog_id
     * @return array $authors
     */
	public function getBlogAuthors($blog_id){

		$authors = array();

		$rs = $this->inDB->query("SELECT user_id FROM cms_blog_authors WHERE blog_id = '{$blog_id}'");

		if ($this->inDB->num_rows($rs)){
			while ($u = $this->inDB->fetch_assoc($rs)){
				$authors[] = $u['user_id'];
			}
		}

		return cmsCore::callEvent('GET_BLOG_AUTHORS', $authors);

	}

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает массив навигационными постами
     * @param int $post_id
     * @return array $navigation
     */
	public function getPostNavigation($post_id, $blog_id, $ownerModel, $blog_link){

		$blog_where = isset($blog_id) ? "AND blog_id = '$blog_id'" : '';

		$navigation = array();

		$navigation['next'] = $this->inDB->get_fields('cms_blog_posts', "id < '$post_id' {$blog_where}", 'seolink, title', "id DESC");
		if($navigation['next']){
			$navigation['next']['url'] = $ownerModel->getPostURL($blog_link, $navigation['next']['seolink']);
		}

		$navigation['prev'] = $this->inDB->get_fields('cms_blog_posts', "id > '$post_id' {$blog_where}", 'seolink, title', "id ASC");
		if($navigation['prev']){
			$navigation['prev']['url'] = $ownerModel->getPostURL($blog_link, $navigation['prev']['seolink']);
		}

		return $navigation;

	}

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает блог по ссылке или по id
     * @param int or string $id_or_link
     * @return array $blog
     */
    public function getBlog($id_or_link=0){

		if(is_numeric($id_or_link)){
			$where = "id = '$id_or_link'";
		} else {
			$where = "seolink = '$id_or_link'";
		}

		return $this->getBlogItem($where);

    }

    /**
     * Возвращает блог по user_id
     * @param int $user_id
     * @return array $blog
     */
    public function getBlogByUserId($user_id){

		return $this->getBlogItem("user_id = '$user_id'");

    }

    /**
     * Возвращает блог по запросу
     * @param str $where
     * @return array $blog
     */
    private function getBlogItem($where){

		if(isset($this->owner)) { $where .= " AND owner = '{$this->owner}'"; }

		$blog = $this->inDB->get_fields('cms_blogs', $where, '*');
		if(!$blog) { return false; }

		$blog['pubdate'] = cmsCore::dateFormat($blog['pubdate']);

		return cmsCore::callEvent('GET_BLOG', $blog);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Получает количество блогов по условиям
     * @return int
     */
    public function getBlogsCount(){

		$pub_where = (isset($this->owner) ? "b.owner = '{$this->owner}'" : '1=1');

        $sql = "SELECT 1
                FROM cms_blogs b
				{$this->inDB->join}
                WHERE {$pub_where}
                      {$this->inDB->where}\n";

		$result = $this->inDB->query($sql);

		return $this->inDB->num_rows($result);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает блоги
     * @param obj $ownerModel
     * @return array $blogs
     */
    public function getBlogs($ownerModel){

		$pub_where = (isset($this->owner) ? "b.owner = '{$this->owner}'" : '1=1');

        $sql = "SELECT b.*, COUNT(p.id) as records,
                       u.nickname, u.login {$this->inDB->select}
                FROM cms_blogs b
                LEFT JOIN cms_blog_posts p ON p.blog_id = b.id
				LEFT JOIN cms_users u ON u.id = b.user_id
				{$this->inDB->join}
                WHERE {$pub_where}
				      {$this->inDB->where}
                GROUP BY b.id
                {$this->inDB->order_by}\n";

        if ($this->inDB->limit){
            $sql .= "LIMIT {$this->inDB->limit}";
        }

		$result = $this->inDB->query($sql);

		$this->inDB->resetConditions();

		if(!$this->inDB->num_rows($result)){ return false; }

        $blogs = array();

        while($blog = $this->inDB->fetch_assoc($result)){
			$blog['pubdate'] = cmsCore::dateFormat($blog['pubdate']);
			$blog['url']     = $ownerModel->getBlogURL($blog['seolink']);
            $blogs[] = $blog;
        }

        return cmsCore::callEvent('GET_BLOGS', $blogs);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Генерирует ссылку на пост в блоге
     * @param array $post
     * @return str $seolink
     */
    public function generatePostSeoLink($post){

        $seolink = cmsCore::strToURL($post['title']);

        if (@$post['id']){
            $where = ' AND id<>'.$post['id'];
        } else {
            $where = '';
        }

        $is_exists = $this->inDB->rows_count('cms_blog_posts', "seolink='{$seolink}'".$where, 1);

        if ($is_exists) { $seolink .= '-' .(@$post['id'] ? $post['id'] : date("d-i")); }

        return $seolink;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Генерирует ссылку на блог
     * @param array $blog
     * @return str $seolink
     */
    public function generateBlogSeoLink($blog){

        $seolink = cmsCore::strToURL($blog['title']);

        if (@$blog['id']){
            $where = ' AND id<>'.$blog['id'];
        } else {
            $where = '';
        }

        $is_exists = $this->inDB->rows_count('cms_blogs', "seolink='{$seolink}'".$where, 1);
        if ($is_exists) { $seolink .= '-' . (@$blog['id'] ? $blog['id'] : date("d-i")); }

        return $seolink;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает количество постов, ожидающих модерации
     * @param int $blog_id
     * @return int
     */
    public function getModerationCount($blog_id=0){

		$where = $blog_id ? "blog_id = '{$blog_id}'" : '1=1';

        return $this->inDB->rows_count('cms_blog_posts', "{$where} AND published = 0");

    }
/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Добавляет блог
     * @param array $item
     * @return int $blog_id
     */
    public function addBlog($item){

        $item['id'] = $this->inDB->insert('cms_blogs', cmsCore::callEvent('ADD_BLOG', $item));

        if ($item['id']){

            $item['seolink'] = $this->generateBlogSeoLink($item);

            $this->inDB->query("UPDATE cms_blogs SET seolink='{$item['seolink']}' WHERE id = '{$item['id']}'");

        }

        return $item['id'] ? $item['id'] : false;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Обновляет данные блога
     * @param int $id
     * @param array $item
     * @param bool $update_seo_link
     * @return str $seolink
     */
    public function updateBlog($id, $item, $update_seo_link = false){

        $item['id'] = $id;

		if ($update_seo_link){
        	$item['seolink'] = $this->generateBlogSeoLink($item);
		}

        $item = cmsCore::callEvent('UPDATE_BLOG', $item);

        $this->inDB->update('cms_blogs', $item, $id);

        return @$item['seolink'] ? $item['seolink'] : false;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Удаляет блог
     * @param int $blog_id
     * @return bool
     */
    public function deleteBlog($blog_id){

        cmsCore::callEvent('DELETE_BLOG', $blog_id);

		// удаляем сам блог
        $this->inDB->query("DELETE FROM cms_blogs WHERE id = '$blog_id'");
		cmsActions::removeObjectLog($this->getTarget('actions_blog'), $blog_id);

		// удаляем посты в нем
        $posts = $this->inDB->get_table('cms_blog_posts', "blog_id = '$blog_id'", 'id');
		if(!$posts) { return true; }

        foreach($posts as $post){
             $this->deletePost($post['id']);
        }

        return true;

    }

    public function deleteBlogs($id_list){

		if(!$id_list || !is_array($id_list)) { return false; }

        foreach($id_list as $key=>$id){
            $this->deleteBlog($id);
        }

        return true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Обновляет авторов блога
     * @param int $id
     * @param array $authors
     * @return bool
     */
    public function updateBlogAuthors($id, $authors){

        //Удаляем прежний набор авторов
        $this->inDB->query("DELETE FROM cms_blog_authors WHERE blog_id = '$id'");

        $authors = cmsCore::callEvent('UPDATE_BLOG_AUTHORS', $authors);

		if($authors){
			foreach ($authors as $key=>$author_id){
				$author_id = (int)$author_id;
				$sql = "INSERT INTO cms_blog_authors (user_id, blog_id, description, startdate)
						VALUES ('$author_id', '$id', '', NOW())";
				$this->inDB->query($sql);
			}
		}

        return true;

    }

// ============================================================================ //
// ============================================================================ //
    /**
     * Условия выборки
     */
    public function whereOwnerIs($owner){
        $this->inDB->where("b.owner = '$owner'");
        return;
    }

    public function whereNotPublished(){
        $this->inDB->where("p.published = 0");
        return;
    }

    public function whereOnlyPublic(){
        $this->inDB->where("b.allow_who = 'all'");
		$this->inDB->where("p.allow_who = 'all'");
        return;
    }

    public function whereBlogIs($blog_id){
        $this->inDB->where("p.blog_id = '{$blog_id}'");
        return;
    }

    public function whereCatIs($cat_id){
        $this->inDB->where("p.cat_id = '{$cat_id}'");
        return;
    }

    public function whereBlogUserIs($user_id){
        $this->inDB->where("b.user_id = '{$user_id}'");
        return;
    }

    public function whereOwnerTypeIs($ownertype){
        $this->inDB->where("b.ownertype = '{$ownertype}'");
        return;
    }

    public function ratingGreaterThan($rating){
        $this->inDB->where("p.rating > '$rating'");
        return;
    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Получает посты по условиям
     * @param bool $show_all
     * @param obj $ownerModel
     * @return array $posts
     */
    public function getPosts($show_all = false, $ownerModel, $is_short = false){

		$pub_where = ($show_all ? '1=1' : 'p.published = 1');

		if(isset($this->owner)) { $pub_where .= " AND b.owner = '{$this->owner}'"; }

        $sql = "SELECT p.*,
                       u.nickname as author, u.login, u.is_deleted,
                       b.allow_who as blog_allow_who,
                       b.seolink as bloglink,
                       b.title as blog_title,
                       b.owner as owner {$this->inDB->select}
                FROM cms_blog_posts p
				INNER JOIN cms_blogs b ON b.id = p.blog_id
				LEFT JOIN cms_users u ON u.id = p.user_id
				{$this->inDB->join}
                WHERE {$pub_where}
				      {$this->inDB->where}
                {$this->inDB->group_by}
                {$this->inDB->order_by}\n";

        if ($this->inDB->limit){
            $sql .= "LIMIT {$this->inDB->limit}";
        }

		$result = $this->inDB->query($sql);

		$this->inDB->resetConditions();

		if(!$this->inDB->num_rows($result)){ return false; }

        $posts = array();

		while($post = $this->inDB->fetch_assoc($result)){
			$post['fpubdate'] = cmsCore::dateFormat($post['pubdate']);
			$post['url']      = $ownerModel->getPostURL($post['bloglink'], $post['seolink']);
			$post['blog_url'] = $ownerModel->getBlogURL($post['bloglink']);
			//Разбиваем текст поста на 2 части по тегу [cut=...] и оставляем только первую из них
			if (mb_strstr($post['content_html'], '[cut')){
				$post['content_html'] = $this->getPostShort($post['content_html'], $post['url']);
			}
			if(!$is_short){
				$post['tagline'] = cmsTagLine($this->getTarget('tags'), $post['id']);
			}
			// если захотим получать аватар владельца
			if(isset($post['imageurl'])){
				$post['author_avatar'] = cmsUser::getUserAvatarUrl($post['user_id'], 'small', $post['imageurl'], $post['is_deleted']);
			}
			$posts[] = $post;
		}

        return cmsCore::callEvent('GET_POSTS', $posts);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Получает количество постов по условиям
     * @param bool $show_all
     * @return int
     */
    public function getPostsCount($show_all = false){

        $pub_where = ($show_all ? '1=1' : 'p.published = 1');

		if(isset($this->owner)) { $pub_where .= " AND b.owner = '{$this->owner}'"; }

        $sql = "SELECT 1
                FROM cms_blog_posts p
				INNER JOIN cms_blogs b ON b.id = p.blog_id
				{$this->inDB->join}
                WHERE {$pub_where}
                      {$this->inDB->where}
                {$this->inDB->group_by}\n";

		$result = $this->inDB->query($sql);

		return $this->inDB->num_rows($result);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    public function getUserBlogId($user_id){

		if(isset($this->owner)) { $where = " AND owner = '{$this->owner}'"; }

        return $this->inDB->get_field('cms_blogs', "user_id = '{$user_id}' {$where}", "id");

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * проверяет, может ли пользователь писать в блог
     * @param array $blog
     * @param int $user_id
     * @return int
     */
    public function isUserBlogWriter($blog, $user_id){

		cmsCore::callEvent('IS_BLOG_WRITER', $blog);

		// в персональные блоги может писать только автор
		if($blog['ownertype']=='single'){ return false; }

		if($blog['ownertype']=='multi' && $blog['forall']) { return true; }

        return $this->inDB->get_field('cms_blog_authors', "blog_id='{$blog['id']}' AND user_id='{$user_id}'", 'id');

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Возвращает блог по ссылке или по id
     * @param int or string $id_or_link
     * @return array $blog
     */
    public function getPost($id_or_link=0){

		if(is_numeric($id_or_link)){
			$where = "p.id = '$id_or_link'";
		} else {
			$where = "p.seolink = '$id_or_link'";
		}

		$sql = "SELECT p.*,
					   u.nickname as author_nickname,
					   u.login as author_login,
					   up.imageurl as author_image,
					   u.is_deleted as author_deleted
				FROM cms_blog_posts p
				LEFT JOIN cms_users u ON u.id = p.user_id
				LEFT JOIN cms_user_profiles up ON up.user_id = u.id
				WHERE {$where} LIMIT 1";

		$result = $this->inDB->query($sql);

		if(!$this->inDB->num_rows($result)){ return false; }

		global $_LANG;

		$post = $this->inDB->fetch_assoc($result);

		$post['feditdate'] = cmsCore::dateFormat($post['edit_date']);
		$post['fpubdate']  = cmsCore::dateDiffNow($post['pubdate']).' '.$_LANG['BACK'].' ('.cmsCore::dateFormat($post['pubdate']).')';
		//Убираем тег [cut]
		$post['content_html']  = preg_replace('/\[(cut=)\s*(.*?)\]/ui', '', $post['content_html']);
		$post['author_avatar'] = cmsUser::getUserAvatarUrl($post['user_id'], 'small', $post['author_image'], $post['author_deleted']);

		return cmsCore::callEvent('GET_POST', $post);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Добавляет пост в блоге
     * @param array $item
     * @return array $post_id, $seolink
     */
    public function addPost($item){

        $item = cmsCore::callEvent('ADD_POST', $item);

        //парсим bb-код перед записью в базу
		// Парсим по отдельности части текста, если есть тег [cut
        if (mb_strstr($item['content'], '[cut')){
            $msg_to    = $this->getPostShort($item['content']);
			$msg_to    = cmsCore::parseSmiles($msg_to, true);
			$msg_after = $this->getPostShort($item['content'], false, true);
			$msg_after = cmsCore::parseSmiles($msg_after, true);
			$cut       = $this->getPostCut($item['content']);
			$item['content_html'] = $msg_to . $cut . $msg_after;
        } else {
        	$item['content_html']   = cmsCore::parseSmiles($item['content'], true);
		}
		// Экранируем специальные символы
        $item['content']      = $this->inDB->escape_string($item['content']);
        $item['content_html'] = $this->inDB->escape_string($item['content_html']);

		$post_id = $this->inDB->insert('cms_blog_posts', $item);

		if(!$post_id) { return false; }

        cmsInsertTags($item['tags'], $this->getTarget('tags'), $post_id);

		$item['id']      = $post_id;
		$item['seolink'] = $this->generatePostSeoLink($item);

		$this->inDB->query("UPDATE cms_blog_posts SET seolink='{$item['seolink']}' WHERE id = '{$post_id}'");

		if ($item['published']){
			cmsUser::checkAwards($item['user_id']);
		}

		cmsCore::setIdUploadImage('post', $post_id);

        return array('id'=>$post_id, 'seolink'=>$item['seolink']);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Обновляет пост в блоге
     * @param int $post_id
     * @param array $item
     * @param bool $update_seo_link
     * @return bool
     */
    public function updatePost($post_id, $item, $update_seo_link = false){

        $item['id'] = $post_id;

        $item = cmsCore::callEvent('UPDATE_POST', $item);

		if ($update_seo_link){
        	$item['seolink'] = $this->generatePostSeoLink($item);
		}

        if (mb_strstr($item['content'], '[cut')){
            $msg_to    = $this->getPostShort($item['content']);
			$msg_to    = cmsCore::parseSmiles($msg_to, true);
			$msg_after = $this->getPostShort($item['content'], false, true);
			$msg_after = cmsCore::parseSmiles($msg_after, true);
			$cut       = $this->getPostCut($item['content']);
			$item['content_html'] = $msg_to . $cut . $msg_after;
        } else {
        	$item['content_html'] = cmsCore::parseSmiles($item['content'], true);
		}

        $item['content']      = $this->inDB->escape_string($item['content']);
        $item['content_html'] = $this->inDB->escape_string($item['content_html']);

        $this->inDB->update('cms_blog_posts', $item, $post_id);

        cmsInsertTags($item['tags'], $this->getTarget('tags'), $post_id);

        return isset($item['seolink']) ? $item['seolink'] : true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Удаляет пост в блоге
     * @param int $post_id
     * @return bool
     */
    public function deletePost($post_id){

        cmsCore::callEvent('DELETE_POST', $post_id);

		$post = $this->getPost($post_id);
		if (!$post){ return false; }

		// пересчитываем рейтинг блога
		$this->inDB->query("UPDATE cms_blogs SET rating = rating - ({$post['rating']}) WHERE id = '{$post['blog_id']}'");

        $this->inDB->delete('cms_blog_posts', "id = '$post_id'", 1);

        cmsCore::deleteRatings($this->getTarget('rating'), $post_id);
        cmsCore::deleteComments($this->getTarget('comments'), $post_id);

        cmsClearTags($this->getTarget('tags'), $post_id);

        cmsCore::deleteUploadImages($post_id, 'post');
		cmsActions::removeObjectLog($this->getTarget('actions_post'), $post_id);

		return true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
    /**
     * Публикует пост в блоге
     * @param int $post_id
     * @param int $flag
     * @return bool
     */
    public function publishPost($post_id, $flag=1){

        return $this->inDB->query("UPDATE cms_blog_posts SET published = $flag WHERE id = '$post_id'");

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
   public static function updateCommentsCount($target, $target_id) {

		$inDB = cmsDatabase::getInstance();

		// получаем данные о записи
		$post = $inDB->get_fields('cms_blog_posts', "id='$target_id'", 'id, blog_id');
		if(!$post) { return false; }

		// обновляем количество комментов для поста
		$pc_count = cmsCore::getCommentsCount($target, $post['id']);
		$inDB->query("UPDATE cms_blog_posts SET comments_count = '{$pc_count}' WHERE id = '{$post['id']}'");

		// обновляем общее количество комментов к постам в блоге
		$sql = "SELECT IFNULL(SUM(comments_count), 0) AS blog_comments_count
				FROM cms_blog_posts
				WHERE blog_id = '{$post['blog_id']}' GROUP BY blog_id";

		$result = $inDB->query($sql);

		if ($inDB->num_rows($result)){
			$com = $inDB->fetch_assoc($result);
			$inDB->query("UPDATE cms_blogs SET comments_count = '{$com['blog_comments_count']}' WHERE id = '{$post['blog_id']}'");
		}

        return true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    public function getPostShort($post_content, $post_url = false, $is_after = false){

        $regex      = '/\[(cut=)\s*(.*?)\]/ui';
        $matches    = array();
        preg_match_all( $regex, $post_content, $matches, PREG_SET_ORDER );

        if (is_array($matches)){

            $elm        = $matches[0];
            $elm[0]     = str_replace('[', '', $elm[0]);
            $elm[0]     = str_replace(']', '', $elm[0]);

            mb_parse_str( $elm[0], $args );

            $cut_title  = $args['cut'];

            $pages  = preg_split( $regex, $post_content );

            if ($pages) { $post_content = $is_after ? $pages[1] : $pages[0]; }

			if ($post_url && !$is_after) {
            $post_content .= '<div class="blog_cut_link">
                                    <a href="'.$post_url.'">'.$cut_title.'</a>
                              </div>';
			}

        }

        return $post_content;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    public function getPostCut($post_content){

        $regex      = '/\[(cut=)\s*(.*?)\]/ui';
        $matches    = array();
        preg_match_all( $regex, $post_content, $matches, PREG_SET_ORDER );

        if (is_array($matches)){

            $elm        = $matches[0];
            $elm[0]     = str_replace('[', '', $elm[0]);
            $elm[0]     = str_replace(']', '', $elm[0]);

            mb_parse_str( $elm[0], $args );

			$cut .= '[cut='.$args['cut'].'...]';

        }

        return $cut;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

}
?>
