Вход Регистрация
Файл: InstantSocial/uploud/components/blogs/model.php
Строк: 659
<?php
/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.9                                //
//                        http://www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2011                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

class 
cms_model_blogs{

    function 
__construct(){
        
$this->inDB cmsDatabase::getInstance();
    }

    public function 
install(){

        return 
true;

    }

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

   //
   // этот метод вызывается компонентом comments при создании нового комментария
   //
   // метод должен вернуть массив содержащий ссылку и заголовок поста, к которому
   // добавляется комментарий
   //
   
public function getCommentTarget($target$target_id) {

        
$result = array();

        switch(
$target){

            case 
'blog'$sql "SELECT p.title as title,
                                        p.seolink as seolink,
                                        b.seolink as bloglink
                                 FROM cms_blog_posts p
                                 LEFT JOIN cms_blogs b ON b.id = p.blog_id
                                 WHERE p.id=
{$target_id}
                                 LIMIT 1"
;
                         
$res $this->inDB->query($sql);
                         if (!
$this->inDB->num_rows($res)){ return false; }
                         
$post $this->inDB->fetch_assoc($res);
                         
$result['link']  = $this->getPostURL(null$post['bloglink'], $post['seolink']);
                         
$result['title'] = $post['title'];
                         break;

        }

        return (
$result $result false);

    }

/* ==================================================================================================== */
/* ==================================================================================================== */
   //
   // этот метод вызывается компонентом comments при создании нового комментария
   //
   // метод должен вернуть 0 или 1
   //
   
public function getVisibility($target$target_id) {

        
$is_hidden 0;

        switch(
$target){

            case 
'blog'
                        
// получаем массив поста
                        
$post $this->inDB->get_fields('cms_blog_posts'"id='$target_id'"'blog_id, allow_who, published');
                        if(
$post['allow_who'] != 'all' || !$post['published']) { $is_hidden 1; }
                        
// получаем массив блога
                        
$blog $this->getBlog($post['blog_id']);
                        if(
$blog['owner'] == 'user'){
                            if(
$blog['allow_who'] != 'all') { $is_hidden 1; }
                        } elseif (
$blog['owner'] == 'club'){
                            
$clubtype $this->inDB->get_field('cms_clubs'"id='{$blog['user_id']}'"'clubtype');
                            if(
$clubtype == 'private') { $is_hidden 1; }
                        }
                        break;

        }

        return 
$is_hidden;

    }
/* ==================================================================================================== */
/* ==================================================================================================== */

    // 
    // этот метод является хуком и вызывается при изменении рейтинга объекта blogpost
    // см. таблицу cms_rating_targets
    //
    
public function updateRatingHook($target$item_id$points) {

        if (
$target != 'blogpost' || !$item_id || abs($points)!=1) { return false; }

        
$sql "UPDATE cms_blogs b, cms_blog_posts p
                SET b.rating = b.rating + (
{$points})
                WHERE p.blog_id = b.id AND p.id = 
{$item_id}";

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

        return 
true;

    }

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

    
public function getBlog($id){

        
$sql "SELECT *
                FROM cms_blogs
                WHERE id = '
$id'
                LIMIT 1"
;
        
$result $this->inDB->query($sql);

        
$blog $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;
        
$blog cmsCore::callEvent('GET_BLOG'$blog);
        
$blog['pubdate'] = cmsCore::dateFormat($blog['pubdate']);

        return 
$blog;

    }

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

    
public function getUserBlogId($user_id){

        
$blog_id $this->inDB->get_field('cms_blogs'"user_id={$user_id} AND owner='user'""id");

        return 
$blog_id $blog_id false;

    }

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

    
public function getBlogByLink($seolink){

        
$sql "SELECT *
                FROM cms_blogs
                WHERE seolink = '
$seolink'
                LIMIT 1"
;
        
$result $this->inDB->query($sql);

        if (
$this->inDB->num_rows($result)) {
            
$blog $this->inDB->fetch_assoc($result);    
            
$blog cmsCore::callEvent('GET_BLOG'$blog);
            
$blog['pubdate'] = cmsCore::dateFormat($blog['pubdate']);            
        }

        return 
$blog;

    }

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

    
public function getPostSeoLink($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}'".$where1);

        if (
$is_exists) { $seolink .= '-' $post['id']; }

        return 
$seolink;

    }

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

    
public function getBlogSeoLink($blog){

        if (
$blog['owner'] == 'user'){
            
$seolink cmsCore::strToURL($blog['title']);
        }

        if (
$blog['owner'] == 'club'){
            
$club    $this->inDB->get_field('cms_clubs'"id = {$blog['user_id']}"'title');
            
$seolink cmsCore::strToURL($club);
        }

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

        
$is_exists $this->inDB->rows_count('cms_blogs'"seolink='{$seolink}'".$where1);
        if (
$is_exists) { $seolink .= '-' $blog['id']; }

        
//Обновляем пути всех постов этого блога
        
$sql "SELECT id, title FROM cms_blog_posts WHERE blog_id = {$blog['id']}";

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

        if (
$this->inDB->num_rows($result)){

            while(
$post $this->inDB->fetch_assoc($result)){

                
$post_seolink $this->getPostSeoLink(array('id'=>$post['id'], 'title'=>$post['title']));

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

            }

        }

        return 
$seolink;

    }

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

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

        
$regex      '/[(cut=)s*(.*?)]/i';
        
$matches    = array();
        
preg_match_all$regex$post_content$matchesPREG_SET_ORDER );

        if (
is_array($matches)){

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

            
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*(.*?)]/i';
        
$matches    = array();
        
preg_match_all$regex$post_content$matchesPREG_SET_ORDER );

        if (
is_array($matches)){

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

            
parse_str$elm[0], $args );
            
            
$cut .= '[cut='.$args['cut'].'...]';

        }

        return 
$cut;

    }

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

    
public function getPostURL($menuid$bloglink$seolink){

        
$url '/blogs/'.$bloglink.'/'.$seolink.'.html';

        return 
$url;

    }

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

    
public function getBlogURL($menuid$bloglink$page=1$cat_id=0){

        
$cat_section  = ($cat_id >'/cat-'.$cat_id   '');
        
$page_section = ($page   >'/page-'.$page    '');

        
$url '/blogs/'.$bloglink.$cat_section.$page_section;

        return 
$url;

    }

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

    
public function addBlog($item){

        if (!
$item['forall']) { $item['forall'] = 0; }
        if (!
$item['owner']) { $item['owner'] = 'user'; }

        
$item['seolink'] = '';

        
$item       cmsCore::callEvent('ADD_BLOG'$item);
        
        
$sql        "INSERT INTO cms_blogs (user_id, title, pubdate, allow_who, ownertype, premod, forall, owner, seolink)
                       VALUES ('
{$item['user_id']}', '{$item['title']}', NOW(), '{$item['allow_who']}', '{$item['ownertype']}', 0,
                               
{$item['forall']}, '{$item['owner']}', '{$item['seolink']}')";
        
        
$result     $this->inDB->query($sql);
        
$blog_id    $this->inDB->get_last_id('cms_blogs');

        if (
$blog_id){
            
            
$item['id'] = $blog_id;
            
$item['seolink'] = $this->getBlogSeoLink($item);

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

        }

        return 
$blog_id $blog_id false;
        
    }

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

    
public function updateBlogAuthors($id$authors){

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

        
$authors cmsCore::callEvent('UPDATE_BLOG_AUTHORS'$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 updateBlog($id$item$update_seo_link 0){

        if (!
$item['forall']) { $item['forall'] = 0; }
        if (!
$item['owner']) { $item['owner'] = 'user'; }
        
        
$item['id']         = $id;
        
        if (
$update_seo_link){
            
$item['seolink']    = $this->getBlogSeoLink($item);
            
$seo_sql ', seolink = "'.$item['seolink'].'"';
        }

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

        
//Сохраняем настройки блога
        
$sql "UPDATE cms_blogs
                SET title='
{$item['title']}',
                    allow_who='
{$item['allow_who']}',
                    showcats=
{$item['showcats']},
                    ownertype='
{$item['ownertype']}',
                    premod=
{$item['premod']},
                    forall=
{$item['forall']},
                    owner='
{$item['owner']}'{$seo_sql}
                WHERE id = '
$id'";

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

        if (
$update_seo_link){
            
//обновляем ссылки меню
            
$menuid $this->inDB->get_field('cms_menu'"linktype='blog' AND linkid={$id}"'id');
            if (
$menuid){
                
$inCore     cmsCore::getInstance();
                
$menulink   $inCore->getMenuLink('blog'$id$menuid);
                
$this->inDB->query("UPDATE cms_menu SET link='{$menulink}' WHERE id={$menuid}");
            }
    
            
//обновляем ссылки на комментарии постов блога
            
$comments_sql "UPDATE cms_comments c,
                                    cms_blog_posts p,
                                    cms_blogs b
                             SET c.target_link = CONCAT('/blogs/', b.seolink, '/', p.seolink, '.html')
                             WHERE b.id = 
{$id} AND
                                   p.blog_id = b.id AND
                                   c.target = 'blog' AND c.target_id = p.id"
;
    
            
$this->inDB->query($comments_sql);
        }

        return 
$item['seolink'] ? $item['seolink'] : true;
        
    }

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

    
public function getSingleBlogsCount(){
        return 
$this->inDB->rows_count('cms_blogs'"ownertype='single' AND owner='user'");
    }

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

    
public function getMultiBlogsCount(){
        return 
$this->inDB->rows_count('cms_blogs'"ownertype='multi' AND owner='user'");
    }

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

    
public function getClubsBlogsCount(){
        return 
$this->inDB->rows_count('cms_blogs'"owner='club'");
    }

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

    
public function getBlogs($ownertype$page$perpage){
        
$list = array();

        
//Формируем запрос
        
$sql "SELECT u.id, b. * , u.id AS uid, u.nickname AS author, u.login as author_login, 
                       COUNT(p.id) as records,
                       b.rating AS points
                FROM cms_blogs b
                LEFT JOIN cms_users u ON u.id = b.user_id
                LEFT JOIN cms_blog_posts p ON p.blog_id = b.id "
;

        
//Добавляем к запросу ограничение по типу хозяина (пользователи или клубы)
        
if ($ownertype!='all') { 
            
$sql .= "WHERE ownertype='$ownertype' AND owner='user'n";
        } else {
            
$sql .= "WHERE 1=1 ";
        }

        
$sql .= "GROUP BY b.id
                 ORDER BY rating DESC"
;
        
// если передали страницу и кол-во страниц, то добавляем LIMIT
        
if ($page && $perpage) { $sql .= " LIMIT ".(($page-1)*$perpage).", $perpage"; }

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

        while(
$blog $this->inDB->fetch_assoc($result)){
            
$blog['pubdate'] = cmsCore::dateFormat($blog['pubdate']);
            
$list[] = $blog;
        }

        return 
$list cmsCore::callEvent('GET_BLOGS'$list) : false;
    }

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

    
public function getPostsCount($blog_id$category_id$owner){

        if (
$category_id != -1){
            
$cat_sql "AND p.cat_id = {$category_id}";
        } else {
            
$cat_sql '';
        }

        
$sql "SELECT p.id
                FROM cms_blogs b
                LEFT JOIN cms_blog_posts p ON p.blog_id = b.id
                WHERE b.id = '
$blog_id' AND p.published = 1 AND b.owner = '$owner{$cat_sql}
                "
;
        
$result $this->inDB->query($sql);
        return 
$this->inDB->num_rows($result);
    }

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

    
public function getPosts($blog_id$page=0$perpage=0$category_id=0$owner='user'){
        
$list = array();

        if (
$category_id != -1){
            
$cat_sql "AND p.cat_id = {$category_id}";
        } else {
            
$cat_sql '';
        }

        
//Получаем записи, относящиеся к нужной странице блога
        
$sql "SELECT p.*, 
                       IFNULL(r.total_rating, 0) as points, u.nickname as author, u.id as author_id
                FROM cms_blogs b
                LEFT JOIN cms_blog_posts p ON p.blog_id = b.id
                LEFT JOIN cms_ratings_total r ON r.item_id=p.id AND r.target='blogpost'
                LEFT JOIN cms_users u ON u.id = p.user_id
                WHERE b.id = 
$blog_id AND p.published = 1 AND b.owner = '$owner{$cat_sql}
                ORDER BY p.pubdate DESC"
;

        if (
$page && $perpage) { $sql .= " LIMIT ".(($page-1)*$perpage).", $perpage"; }

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

        if (
$this->inDB->num_rows($result)){
            while(
$post $this->inDB->fetch_assoc($result)){
                
$post['fpubdate'] = cmsCore::dateFormat($post['pubdate']);
                
$list[] = $post;
            }
        }

        return 
$list ?  cmsCore::callEvent('GET_POSTS'$list) : false;
    }

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

    
public function getPost($post_id){

    
$sql "SELECT p.*,
                   u.nickname as author,
                   u.login as author_login, 
                   u.id as author_id,
                   b.seolink as bloglink,
                   p.seolink as postlink
            FROM cms_blog_posts p
            LEFT JOIN cms_blogs b ON b.id = p.blog_id
            LEFT JOIN cms_users u ON u.id = p.user_id
            WHERE p.id = 
$post_id LIMIT 1";

        
$result $this->inDB->query($sql);
        
$post   $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;

        if (
$post){  $post cmsCore::callEvent('GET_POST'$post); }

        return 
$post;
    }

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

    
public function getPostByLink($bloglink$seolink){

    
$sql "SELECT p.*,
                   u.nickname as author,
                   u.id as author_id, 
                   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 = p.user_id
            LEFT JOIN cms_blogs b ON b.id = p.blog_id AND b.seolink = '
$bloglink'
            WHERE p.seolink = '
$seolink'
            LIMIT 1"
;

        
$result $this->inDB->query($sql);
        
$post   $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;

        if (
$post){ 
            
$post cmsCore::callEvent('GET_POST'$post);
            
$post['fpubdate'] = cmsCore::dateFormat($post['pubdate']);
            
$post['feditdate'] = cmsCore::dateFormat($post['edit_date']);
        }

        return 
$post;
    }

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

    
public function getLatestPosts($page=1$perpage=20){
        
$list = array();

        
$sql "SELECT p.*, p.pubdate as fpubdate,
                       IFNULL(r.total_rating, 0) as points,
                       u.nickname as author, u.id as author_id, u.login,
                       b.allow_who blog_allow_who,
                       b.seolink bloglink,
                       b.title blog_title,
                       b.owner owner,
                       c.title as club_title,
                       c.clubtype as club_type
                FROM cms_blog_posts p
                LEFT JOIN cms_users u ON u.id = p.user_id                
                LEFT JOIN cms_blogs b ON b.id = p.blog_id
                LEFT JOIN cms_clubs c ON c.id = b.user_id
                LEFT JOIN cms_ratings_total r ON r.item_id=p.id AND r.target='blogpost'
                WHERE p.published = 1
                ORDER BY p.pubdate DESC
                LIMIT "
.(($page-1)*$perpage).", $perpage";

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

        if (
$this->inDB->num_rows($result)){
            while(
$post $this->inDB->fetch_assoc($result)){
                if (
$post['owner']=='club'){
                    
$post['blog_title'] = $post['club_title'];
                    if (
$post['club_type']=='private') { $post['content_html'] = ''; }
                }
                
$list[] = $post;
            }
        }

        return 
$list ?  cmsCore::callEvent('GET_LATEST_POSTS'$list) : false;
    }

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

    
public function getBestPosts($page=1$perpage=20){
        
$list = array();

        
$sql "SELECT  p.*,
                        IFNULL(r.total_rating, 0) as points,
                        u.nickname as author,
                        u.id as author_id,
                        b.allow_who blog_allow_who,
                        b.seolink bloglink,
                        b.owner
                FROM cms_blog_posts p
                LEFT JOIN cms_users u ON u.id = p.user_id                
                LEFT JOIN cms_blogs b ON b.id = p.blog_id
                LEFT JOIN cms_ratings_total r ON r.item_id=p.id AND r.target='blogpost'
                WHERE p.published = 1 AND DATEDIFF(NOW(), p.pubdate) <= 7 AND b.owner = 'user'
                ORDER BY points DESC
                LIMIT "
.(($page-1)*$perpage).", $perpage";

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

        if (
$this->inDB->num_rows($result)){
            while(
$post $this->inDB->fetch_assoc($result)){
                
$list[] = $post;
            }
        }

        return 
$list ?  cmsCore::callEvent('GET_BEST_POSTS'$list) : false;
    }

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

    
public function getBlogCategory($cat_id){
        
$sql    "SELECT * FROM cms_blog_cats WHERE id = $cat_id";
        
$result $this->inDB->query($sql);
        
$cat    $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;
        if (
$cat) { $cat cmsCore::callEvent('GET_BLOG_CAT'$cat); }
        return 
$cat;
    }

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

    
public function getModerationCount($blog_id){
        if (!
$blog_id) { return false; }
        return 
$this->inDB->rows_count('cms_blog_posts''blog_id='.$blog_id.' AND published = 0');
    }

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

    
public function getLatestCount($user_id 0$is_admin 0){

        
$sql "SELECT p.user_id, b.allow_who
                FROM cms_blog_posts p
                LEFT JOIN cms_blogs b ON b.id = p.blog_id
                WHERE p.published = 1"
;

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

        if (
$this->inDB->num_rows($result)){

            while(
$post $this->inDB->fetch_assoc($result)){

                
$can_view = ($post['allow_who'] == 'all' || ($post['allow_who'] == 'friends' && usrIsFriends($post['user_id'], $user_id)) || $post['user_id']==$user_id || $is_admin);

                if (
$can_view){
                    
$posts[] = $post;
                }

            }
        }

        return 
sizeof($posts);
    }

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

    
public function getBestCount($user_id 0$is_admin 0){

        
$sql "SELECT p.user_id, b.allow_who
                FROM cms_blog_posts p
                LEFT JOIN cms_blogs b ON b.id = p.blog_id
                WHERE p.published = 1 AND DATEDIFF(NOW(), p.pubdate) <= 7
                "
;
        
$result $this->inDB->query($sql);

        if (
$this->inDB->num_rows($result)){

            while(
$post $this->inDB->fetch_assoc($result)){

                
$can_view = ($post['allow_who'] == 'all' || ($post['allow_who'] == 'friends' && usrIsFriends($post['user_id'], $user_id)) || $post['user_id']==$user_id || $is_admin);

                if (
$can_view){
                    
$posts[] = $post;
                }

            }
        }

        return 
sizeof($posts);
    }

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

    
public function getModerationPosts($blog_id){

        
$list = array();

        
$sql "SELECT p.*, u.nickname as author, u.id as author_id,
                       b.seolink as bloglink,
                       u.login as author_login
                FROM cms_blog_posts p
                INNER JOIN cms_blogs b ON b.id = p.blog_id AND b.id = '
$blog_id'
                LEFT JOIN cms_users u ON u.id = p.user_id
                WHERE p.published = 0
                ORDER BY p.pubdate DESC"
;
        
$result  $this->inDB->query($sql);

        if (
$this->inDB->num_rows($result)){
            while(
$post $this->inDB->fetch_assoc($result)){
                
$list[] = $post;
            }
        }

        return 
$list ?  cmsCore::callEvent('GET_MODER_POSTS'$list) : false;

    }

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

    
public function getBlogAuthors($blog_id){

        
$list = array();

        
//Получаем список авторов
        
$sql "SELECT a.*, 
                       p.imageurl as imageurl,
                       u.nickname as nickname,
                       u.id as user_id,
                       u.login as user_login
                FROM cms_blog_authors a
                LEFT JOIN cms_user_profiles p ON p.user_id=a.user_id
                LEFT JOIN cms_users u ON p.user_id=u.id
                WHERE a.blog_id = 
{$blog_id}
                ORDER BY u.nickname ASC"
;

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

        if (
$this->inDB->num_rows($result)){
            while(
$author $this->inDB->fetch_assoc($result)){
                
$list[] = $author;
            }
        }

        return 
$list ?  cmsCore::callEvent('GET_BLOG_AUTHORS'$item) : false;

    }

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

    
public function isUserAuthor($blog_id$user_id){
        return 
$this->inDB->get_field('cms_blog_authors''blog_id='.$blog_id.' AND user_id='.$user_id'id');
    }

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

    
public function isUserBlogAuthor($blog_id$post_id$blog_user_id){
        
        
$inUser cmsUser::getInstance();

        
$blog_id_sql $this->inDB->get_field('cms_blog_posts'"id='$post_id'"'blog_id');
        
        
$this_blog_post = ($blog_id_sql == $blog_id) ? true false;
        
        
$is_my_blog = ($blog_user_id == $inUser->id) ? true false;

        return (
$this_blog_post && $is_my_blog) ? true false;
    }

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

    
public function isUserPostAuthor($post_id$user_id){
        return 
$this->inDB->get_field('cms_blog_posts''id='.$post_id.' AND user_id='.$user_id'id');
    }

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

    
public function getClubBlogMinKarma($club_id){
        return 
$this->inDB->get_field('cms_clubs''id='.$club_id'blog_min_karma');
    }

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

    
public function addPost($item){

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

        
$item['seolink'] = '';

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

        
$sql "INSERT INTO cms_blog_posts (user_id, cat_id, blog_id, pubdate, title, feel, music,
                            content, content_html, allow_who, edit_times, edit_date, published, seolink, comments)
                VALUES ('
{$item['user_id']}', '{$item['cat_id']}', '{$item['id']}', NOW(),
                        '
{$item['title']}', '{$item['feel']}', '{$item['music']}', '{$item['content']}', '{$item['content_html']}',
                        '
{$item['allow_who']}', 0, NOW(), '{$item['published']}', '{$item['seolink']}', '{$item['comments']}')";
        
        
$result $this->inDB->query($sql);

        
$post_id $this->inDB->get_last_id('cms_blog_posts');

        
cmsInsertTags($item['tags'], 'blogpost'$post_id);

        if (
$post_id){

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

            
$this->inDB->query("UPDATE cms_blog_posts SET seolink='{$item['seolink']}' WHERE id = '{$post_id}'");
            
            if (
$item['published'] && $item['ballow_who'] == 'all') {
                
cmsCore::callEvent('ADD_POST_DONE'$item);
            }
        }

        return 
$post_id $post_id false;
        
    }

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

    
public function addBlogCategory($item){
        
$item cmsCore::callEvent('ADD_BLOG_CAT'$item);
        
$sql "INSERT INTO cms_blog_cats (blog_id, title)
                VALUES ('
{$item['id']}', '{$item['title']}')";

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

        
$cat_id $this->inDB->get_last_id('cms_blog_cats');

        return 
$cat_id $cat_id false;
    }

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

    
public function updatePost($post_id$item$update_seo_link 0){

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

        
$item['id']         = $post_id;
        
$seo_sql '';
        if (
$update_seo_link){
        
$item['seolink']    = $this->getPostSeoLink($item);
            
$seo_sql ', seolink = "'.$item['seolink'].'"';
        }

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

        
$sql "UPDATE cms_blog_posts
                SET cat_id=
{$item['cat_id']},
                    title='
{$item['title']}',
                    feel='
{$item['feel']}',
                    music='
{$item['music']}',
                    content='
{$item['content']}',
                    content_html='
{$item['content_html']}',
                    allow_who='
{$item['allow_who']}',
                    edit_times = edit_times+1,
                    edit_date = NOW()
{$seo_sql},
                    comments = '
{$item['comments']}'
                WHERE id = 
$post_id";
        
        
$result $this->inDB->query($sql);

        
cmsInsertTags($item['tags'], 'blogpost'$post_id);

        return 
true;
        
    }

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

    
public function updateBlogCategory($cat_id$item){
        
$item cmsCore::callEvent('UPDATE_BLOG_CAT'$item);
        
$sql "UPDATE cms_blog_cats
                SET title='
{$item['title']}'
                WHERE id = 
$cat_id";
        
$result $this->inDB->query($sql);

        return 
true;
    }

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

    
public function deletePost($post_id){

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

        
$inCore cmsCore::getInstance();
        
$inCore->loadLib('tags');
        
$inCore->loadLib('karma');

        
$sql "SELECT p.blog_id as blog_id,
                       r.total_rating as rating
                FROM   cms_blog_posts p, cms_ratings_total r
                WHERE  r.item_id = 
{$post_id} AND r.target='blogpost'
                LIMIT 1"
;

        
$res $this->inDB->query($sql);
        if (
$this->inDB->num_rows($res)){
            
$post $this->inDB->fetch_assoc($res);
            
$this->inDB->query("UPDATE cms_blogs SET rating = rating - ({$post['rating']}) WHERE id = '{$post['blog_id']}'");
        }

        
$this->inDB->query("DELETE FROM cms_blog_posts WHERE id = $post_id");
        
$this->inDB->query("DELETE FROM cms_tags WHERE target='blogpost' AND item_id = '$post_id'");

        
$inCore->deleteRatings('blogpost'$post_id);
        
$inCore->deleteComments('blog'$post_id);

        
cmsClearTags('blogpost'$post_id);

        
$inCore->deleteUploadImages($post_id'blog');
        
cmsActions::removeObjectLog('add_post'$post_id);

    }

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

    
public function publishPost($post_id$flag=1){

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

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

    
public function deleteBlog($blog_id){
        
cmsCore::callEvent('DELETE_BLOG'$blog_id);
        
$inCore cmsCore::getInstance();
        
$posts $this->inDB->get_table('cms_blog_posts''blog_id = '.$blog_id);

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

        
$this->inDB->query("DELETE FROM cms_blog_posts WHERE blog_id = $blog_id");
        
$this->inDB->query("DELETE FROM cms_blogs WHERE id = $blog_id");
        
cmsActions::removeObjectLog('add_blog'$blog_id);

        return 
true;
    }

    public function 
deleteBlogs($id_list) {
        foreach(
$id_list as $key=>$id){
            
$this->deleteBlog($id);
        }
        return 
true;
    }

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

    
public function deleteBlogCategory($cat_id){
        
cmsCore::callEvent('DELETE_BLOG_CAT'$cat_id);
        
$inCore cmsCore::getInstance();
        
$posts $this->inDB->get_table('cms_blog_posts''cat_id = '.$cat_id);
        foreach(
$posts as $key=>$post){
            
$this->deletePost($post['id']);
        }
        
$this->inDB->query("DELETE FROM cms_blog_cats WHERE id = $cat_id");
        return 
true;
    }

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

}
Онлайн: 2
Реклама