ModuleBlog

Package modules.blog
Inheritance class ModuleBlog » Module » LsObject
Since 1.0
Source Code /classes/modules/blog/Blog.class.php
Модуль для работы с блогами

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
oMapperBlog ModuleBlog_MapperBlog Объект маппера ModuleBlog
oUserCurrent ModuleUser_EntityUser|null Объект текущего пользователя ModuleBlog

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBlog() Добавляет блог ModuleBlog
AddRelationBlogUser() Добавляет отношение юзера к блогу, по сути присоединяет к блогу ModuleBlog
CreatePersonalBlog() Создаёт персональный блог ModuleBlog
DeleteBlog() Удаляет блог ModuleBlog
DeleteBlogAvatar() Удаляет аватар блога с сервера ModuleBlog
DeleteRelationBlogUser() Удалет отношение юзера к блогу, по сути отключает от блога ModuleBlog
GetAccessibleBlogsByUser() Получаем массив блогов, которые являются открытыми для пользователя ModuleBlog
GetBlogById() Получить блог по айдишнику(номеру) ModuleBlog
GetBlogByTitle() Получить блог по названию ModuleBlog
GetBlogByUrl() Получить блог по УРЛу ModuleBlog
GetBlogItemsByArrayId() Алиас для корректной работы ORM ModuleBlog
GetBlogUserByBlogIdAndUserId() Состоит ли юзер в конкретном блоге ModuleBlog
GetBlogUsersByArrayBlog() Получить список отношений блог-юзер по списку айдишников ModuleBlog
GetBlogUsersByArrayBlogSolid() Получить список отношений блог-юзер по списку айдишников используя общий кеш ModuleBlog
GetBlogUsersByBlogId() Получает список пользователей блога. ModuleBlog
GetBlogUsersByUserId() Получает отношения юзера к блогам(состоит в блоге или нет) ModuleBlog
GetBlogs() Получает список всех НЕ персональных блогов ModuleBlog
GetBlogsAdditionalData() Получает дополнительные данные(объекты) для блогов по их ID ModuleBlog
GetBlogsAllowByUser() Получает список блогов в которые может постить юзер ModuleBlog
GetBlogsByArrayId() Возвращает список блогов по ID ModuleBlog
GetBlogsByArrayIdSolid() Возвращает список блогов по ID, но используя единый кеш ModuleBlog
GetBlogsByFilter() Возвращает список блогов по фильтру ModuleBlog
GetBlogsByOwnerId() Получает список блогов по хозяину ModuleBlog
GetBlogsRating() Получает список блогов по рейтингу ModuleBlog
GetBlogsRatingJoin() Список подключенных блогов по рейтингу ModuleBlog
GetBlogsRatingSelf() Список своих блогов по рейтингу ModuleBlog
GetInaccessibleBlogsByUser() Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя ModuleBlog
GetPersonalBlogByUserId() Получить персональный блог юзера ModuleBlog
Init() Инициализация ModuleBlog
RecalculateCountTopic() Пересчет количества топиков в блогах ModuleBlog
RecalculateCountTopicByBlogId() Пересчет количества топиков в конкретном блоге ModuleBlog
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateBlog() Обновляет блог ModuleBlog
UpdateRelationBlogUser() Обновляет отношения пользователя с блогом ModuleBlog
UploadBlogAvatar() Загружает аватар в блог ModuleBlog
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

Property Details

oMapperBlog property
protected ModuleBlog_MapperBlog $oMapperBlog;

Объект маппера

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Объект текущего пользователя

Method Details

AddBlog() method
public ModuleBlog_EntityBlog|bool AddBlog(ModuleBlog_EntityBlog $oBlog)
$oBlog ModuleBlog_EntityBlog Блог
{return} ModuleBlog_EntityBlog|bool
Source Code: /classes/modules/blog/Blog.class.php#305 (show)
public function AddBlog(ModuleBlog_EntityBlog $oBlog) {
    if (
$sId=$this->oMapperBlog->AddBlog($oBlog)) {
        
$oBlog->setId($sId);
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_new'));
        return 
$oBlog;
    }
    return 
false;
}

Добавляет блог

AddRelationBlogUser() method
public bool AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
$oBlogUser ModuleBlog_EntityBlogUser Объект связи(отношения) блога с пользователем
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#337 (show)
public function AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
    if (
$this->oMapperBlog->AddRelationBlogUser($oBlogUser)) {
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
        
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
        return 
true;
    }
    return 
false;
}

Добавляет отношение юзера к блогу, по сути присоединяет к блогу

CreatePersonalBlog() method
public ModuleBlog_EntityBlog|bool CreatePersonalBlog(ModuleUser_EntityUser $oUser)
$oUser ModuleUser_EntityUser Пользователь
{return} ModuleBlog_EntityBlog|bool
Source Code: /classes/modules/blog/Blog.class.php#287 (show)
public function CreatePersonalBlog(ModuleUser_EntityUser $oUser) {
    
$oBlog=Engine::GetEntity('Blog');
    
$oBlog->setOwnerId($oUser->getId());
    
$oBlog->setTitle($this->Lang_Get('blogs_personal_title').' '.$oUser->getLogin());
    
$oBlog->setType('personal');
    
$oBlog->setDescription($this->Lang_Get('blogs_personal_description'));
    
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
    
$oBlog->setLimitRatingTopic(-1000);
    
$oBlog->setUrl(null);
    
$oBlog->setAvatar(null);
    return 
$this->AddBlog($oBlog);
}

Создаёт персональный блог

DeleteBlog() method
public bool DeleteBlog(int $iBlogId)
$iBlogId int ID блога
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#755 (show)
public function DeleteBlog($iBlogId) {
    if(
$iBlogId instanceof ModuleBlog_EntityBlog){
        
$iBlogId $iBlogId->getId();
    }
    
/**
     * Получаем идентификаторы топиков блога. Удаляем топики блога.
     * При удалении топиков удаляются комментарии к ним и голоса.
     */
    
$aTopicIds $this->Topic_GetTopicsByBlogId($iBlogId);
    
/**
     * Если блог не удален, возвращаем false
     */
    
if(!$this->oMapperBlog->DeleteBlog($iBlogId)) { return false; }
    
/**
     * Чистим кеш
     */
    
$this->Cache_Clean(
        
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
        array(
            
"blog_update""blog_relation_change_blog_{$iBlogId}",
            
"topic_update""comment_online_update_topic""comment_update"
        
)
    );
    
$this->Cache_Delete("blog_{$iBlogId}");

    if(
is_array($aTopicIds) and count($aTopicIds)) {
        
/**
         * Удаляем топики
         */
        
foreach ($aTopicIds as $iTopicId) {
            
$this->Cache_Delete("topic_{$iTopicId}");
            if(
Config::Get('db.tables.engine')=="InnoDB") {
                
$this->Topic_DeleteTopicAdditionalData($iTopicId);
            } else {
                
$this->Topic_DeleteTopic($iTopicId);
            }
        }

    }
    
/**
     * Удаляем связи пользователей блога.
     */
    
if(Config::Get('db.tables.engine')!="InnoDB"){
        
$this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId);
    }
    
/**
     * Удаляем голосование за блог
     */
    
$this->Vote_DeleteVoteByTarget($iBlogId'blog');
    return 
true;
}

Удаляет блог

DeleteBlogAvatar() method
public void DeleteBlogAvatar(ModuleBlog_EntityBlog $oBlog)
$oBlog ModuleBlog_EntityBlog Блог
Source Code: /classes/modules/blog/Blog.class.php#870 (show)
public function DeleteBlogAvatar($oBlog) {
    
/**
     * Если аватар есть, удаляем его и его рейсайзы
     */
    
if($oBlog->getAvatar()) {
        
$aSize=array_merge(Config::Get('module.blog.avatar_size'),array(48));
        foreach (
$aSize as $iSize) {
            
$this->Image_RemoveFile($this->Image_GetServerPath($oBlog->getAvatarPath($iSize)));
        }
    }
}

Удаляет аватар блога с сервера

DeleteRelationBlogUser() method
public bool DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
$oBlogUser ModuleBlog_EntityBlogUser Объект связи(отношения) блога с пользователем
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#351 (show)
public function DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
    if (
$this->oMapperBlog->DeleteRelationBlogUser($oBlogUser)) {
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
        
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
        return 
true;
    }
    return 
false;
}

Удалет отношение юзера к блогу, по сути отключает от блога

GetAccessibleBlogsByUser() method
public array GetAccessibleBlogsByUser(ModuleUser_EntityUser $oUser)
$oUser ModuleUser_EntityUser Объект пользователя
{return} array
Source Code: /classes/modules/blog/Blog.class.php#693 (show)
public function GetAccessibleBlogsByUser($oUser) {
    if (
$oUser->isAdministrator()) {
        return 
$this->GetBlogs(true);
    }
    if (
false === ($aOpenBlogsUser $this->Cache_Get("blog_accessible_user_{$oUser->getId()}"))) {
        
/**
         * Заносим блоги, созданные пользователем
         */
        
$aOpenBlogsUser=$this->GetBlogsByOwnerId($oUser->getId(),true);
        
/**
         * Добавляем блоги, в которых состоит пользователь
         * (читателем, модератором, или администратором)
         */
        
$aOpenBlogsUser=array_merge($aOpenBlogsUser,$this->GetBlogUsersByUserId($oUser->getId(),null,true));
        
$this->Cache_Set($aOpenBlogsUser"blog_accessible_user_{$oUser->getId()}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
    }
    return 
$aOpenBlogsUser;
}

Получаем массив блогов, которые являются открытыми для пользователя

GetBlogById() method
public ModuleBlog_EntityBlog|null GetBlogById(int $sBlogId)
$sBlogId int ID блога
{return} ModuleBlog_EntityBlog|null
Source Code: /classes/modules/blog/Blog.class.php#239 (show)
public function GetBlogById($sBlogId) {
    if (!
is_numeric($sBlogId)) {
        return 
null;
    }
    
$aBlogs=$this->GetBlogsAdditionalData($sBlogId);
    if (isset(
$aBlogs[$sBlogId])) {
        return 
$aBlogs[$sBlogId];
    }
    return 
null;
}

Получить блог по айдишнику(номеру)

GetBlogByTitle() method
public ModuleBlog_EntityBlog|null GetBlogByTitle(string $sTitle)
$sTitle string Название блога
{return} ModuleBlog_EntityBlog|null
Source Code: /classes/modules/blog/Blog.class.php#271 (show)
public function GetBlogByTitle($sTitle) {
    if (
false === ($id $this->Cache_Get("blog_title_{$sTitle}"))) {
        if (
$id $this->oMapperBlog->GetBlogByTitle($sTitle)) {
            
$this->Cache_Set($id"blog_title_{$sTitle}", array("blog_update_{$id}",'blog_new'), 60*60*24*2);
        } else {
            
$this->Cache_Set(null"blog_title_{$sTitle}", array('blog_update','blog_new'), 60*60);
        }
    }
    return 
$this->GetBlogById($id);
}

Получить блог по названию

GetBlogByUrl() method
public ModuleBlog_EntityBlog|null GetBlogByUrl(string $sBlogUrl)
$sBlogUrl string URL блога
{return} ModuleBlog_EntityBlog|null
Source Code: /classes/modules/blog/Blog.class.php#255 (show)
public function GetBlogByUrl($sBlogUrl) {
    if (
false === ($id $this->Cache_Get("blog_url_{$sBlogUrl}"))) {
        if (
$id $this->oMapperBlog->GetBlogByUrl($sBlogUrl)) {
            
$this->Cache_Set($id"blog_url_{$sBlogUrl}", array("blog_update_{$id}"), 60*60*24*2);
        } else {
            
$this->Cache_Set(null"blog_url_{$sBlogUrl}", array('blog_update','blog_new'), 60*60);
        }
    }
    return 
$this->GetBlogById($id);
}

Получить блог по УРЛу

GetBlogItemsByArrayId() method
public array GetBlogItemsByArrayId(array $aBlogId)
$aBlogId array Список ID блогов
{return} array
Source Code: /classes/modules/blog/Blog.class.php#909 (show)
public function GetBlogItemsByArrayId($aBlogId) {
    return 
$this->GetBlogsByArrayId($aBlogId);
}

Алиас для корректной работы ORM

GetBlogUserByBlogIdAndUserId() method
public ModuleBlog_EntityBlogUser|null GetBlogUserByBlogIdAndUserId(int $sBlogId, int $sUserId)
$sBlogId int ID блога
$sUserId int ID пользователя
{return} ModuleBlog_EntityBlogUser|null
Source Code: /classes/modules/blog/Blog.class.php#500 (show)
public function GetBlogUserByBlogIdAndUserId($sBlogId,$sUserId) {
    if (
$aBlogUser=$this->GetBlogUsersByArrayBlog($sBlogId,$sUserId)) {
        if (isset(
$aBlogUser[$sBlogId])) {
            return 
$aBlogUser[$sBlogId];
        }
    }
    return 
null;
}

Состоит ли юзер в конкретном блоге

GetBlogUsersByArrayBlog() method
public array GetBlogUsersByArrayBlog(array $aBlogId, int $sUserId)
$aBlogId array Список ID блогов
$sUserId int ID пользователя
{return} array
Source Code: /classes/modules/blog/Blog.class.php#515 (show)
public function GetBlogUsersByArrayBlog($aBlogId,$sUserId) {
    if (!
$aBlogId) {
        return array();
    }
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetBlogUsersByArrayBlogSolid($aBlogId,$sUserId);
    }
    if (!
is_array($aBlogId)) {
        
$aBlogId=array($aBlogId);
    }
    
$aBlogId=array_unique($aBlogId);
    
$aBlogUsers=array();
    
$aBlogIdNotNeedQuery=array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_relation_user_','_'.$sUserId);
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey ) {
            if (
array_key_exists($sKey,$data)) {
                if (
$data[$sKey]) {
                    
$aBlogUsers[$data[$sKey]->getBlogId()]=$data[$sKey];
                } else {
                    
$aBlogIdNotNeedQuery[]=$sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких блогов не было в кеше и делаем запрос в БД
     */
    
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogUsers));
    
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
    
$aBlogIdNeedStore=$aBlogIdNeedQuery;
    if (
$data $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogIdNeedQuery,$sUserId)) {
        foreach (
$data as $oBlogUser) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aBlogUsers[$oBlogUser->getBlogId()]=$oBlogUser;
            
$this->Cache_Set($oBlogUser"blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}", array(), 60*60*24*4);
            
$aBlogIdNeedStore=array_diff($aBlogIdNeedStore,array($oBlogUser->getBlogId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aBlogIdNeedStore as $sId) {
        
$this->Cache_Set(null"blog_relation_user_{$sId}_{$sUserId}", array(), 60*60*24*4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aBlogUsers=func_array_sort_by_keys($aBlogUsers,$aBlogId);
    return 
$aBlogUsers;
}

Получить список отношений блог-юзер по списку айдишников

GetBlogUsersByArrayBlogSolid() method
public array GetBlogUsersByArrayBlogSolid(array $aBlogId, int $sUserId)
$aBlogId array Список ID блогов
$sUserId int ID пользователя
{return} array
Source Code: /classes/modules/blog/Blog.class.php#581 (show)
public function GetBlogUsersByArrayBlogSolid($aBlogId,$sUserId) {
    if (!
is_array($aBlogId)) {
        
$aBlogId=array($aBlogId);
    }
    
$aBlogId=array_unique($aBlogId);
    
$aBlogUsers=array();
    
$s=join(',',$aBlogId);
    if (
false === ($data $this->Cache_Get("blog_relation_user_{$sUserId}_id_{$s}"))) {
        
$data $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogId,$sUserId);
        foreach (
$data as $oBlogUser) {
            
$aBlogUsers[$oBlogUser->getBlogId()]=$oBlogUser;
        }
        
$this->Cache_Set($aBlogUsers"blog_relation_user_{$sUserId}_id_{$s}", array("blog_update""blog_relation_change_{$sUserId}"), 60*60*24*1);
        return 
$aBlogUsers;
    }
    return 
$data;
}

Получить список отношений блог-юзер по списку айдишников используя общий кеш

GetBlogUsersByBlogId() method
public array GetBlogUsersByBlogId(int $sBlogId, int|null $iRole=NULL, int $iPage=1, int $iPerPage=100)
$sBlogId int ID блога
$iRole int|null Роль пользователей в блоге
$iPage int Номер текущей страницы
$iPerPage int Количество элементов на одну страницу
{return} array
Source Code: /classes/modules/blog/Blog.class.php#402 (show)
public function GetBlogUsersByBlogId($sBlogId,$iRole=null,$iPage=1,$iPerPage=100) {
    
$aFilter=array(
        
'blog_id'=> $sBlogId,
    );
    if(
$iRole!==null) {
        
$aFilter['user_role']=$iRole;
    }
    
$s=serialize($aFilter);
    if (
false === ($data $this->Cache_Get("blog_relation_user_by_filter_{$s}_{$iPage}_{$iPerPage}"))) {
        
$data = array('collection'=>$this->oMapperBlog->GetBlogUsers($aFilter,$iCount,$iPage,$iPerPage),'count'=>$iCount);
        
$this->Cache_Set($data"blog_relation_user_by_filter_{$s}_{$iPage}_{$iPerPage}", array("blog_relation_change_blog_{$sBlogId}"), 60*60*24*3);
    }
    
/**
     * Достаем дополнительные данные, для этого формируем список юзеров и делаем мульти-запрос
     */
    
if ($data['collection']) {
        
$aUserId=array();
        foreach (
$data['collection'] as $oBlogUser) {
            
$aUserId[]=$oBlogUser->getUserId();
        }
        
$aUsers=$this->User_GetUsersAdditionalData($aUserId);
        
$aBlogs=$this->Blog_GetBlogsAdditionalData($sBlogId);

        
$aResults=array();
        foreach (
$data['collection'] as $oBlogUser) {
            if (isset(
$aUsers[$oBlogUser->getUserId()])) {
                
$oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]);
            } else {
                
$oBlogUser->setUser(null);
            }
            if (isset(
$aBlogs[$oBlogUser->getBlogId()])) {
                
$oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]);
            } else {
                
$oBlogUser->setBlog(null);
            }
            
$aResults[$oBlogUser->getUserId()]=$oBlogUser;
        }
        
$data['collection']=$aResults;
    }
    return 
$data;
}

Получает список пользователей блога. Если роль не указана, то считаем что поиск производиться по положительным значениям (статусом выше GUEST).

GetBlogUsersByUserId() method
public array GetBlogUsersByUserId(int $sUserId, int|null $iRole=NULL, bool $bReturnIdOnly=false)
$sUserId int ID пользователя
$iRole int|null Роль пользователя в блоге
$bReturnIdOnly bool Возвращать только ID блогов или полные объекты
{return} array
Source Code: /classes/modules/blog/Blog.class.php#451 (show)
public function GetBlogUsersByUserId($sUserId,$iRole=null,$bReturnIdOnly=false) {
    
$aFilter=array(
        
'user_id'=> $sUserId
    
);
    if(
$iRole!==null) {
        
$aFilter['user_role']=$iRole;
    }
    
$s=serialize($aFilter);
    if (
false === ($data $this->Cache_Get("blog_relation_user_by_filter_$s"))) {
        
$data $this->oMapperBlog->GetBlogUsers($aFilter);
        
$this->Cache_Set($data"blog_relation_user_by_filter_$s", array("blog_update""blog_relation_change_{$sUserId}"), 60*60*24*3);
    }
    
/**
     * Достаем дополнительные данные, для этого формируем список блогов и делаем мульти-запрос
     */
    
$aBlogId=array();
    if (
$data) {
        foreach (
$data as $oBlogUser) {
            
$aBlogId[]=$oBlogUser->getBlogId();
        }
        
/**
         * Если указано возвращать полные объекты
         */
        
if(!$bReturnIdOnly) {
            
$aUsers=$this->User_GetUsersAdditionalData($sUserId);
            
$aBlogs=$this->Blog_GetBlogsAdditionalData($aBlogId);
            foreach (
$data as $oBlogUser) {
                if (isset(
$aUsers[$oBlogUser->getUserId()])) {
                    
$oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]);
                } else {
                    
$oBlogUser->setUser(null);
                }
                if (isset(
$aBlogs[$oBlogUser->getBlogId()])) {
                    
$oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]);
                } else {
                    
$oBlogUser->setBlog(null);
                }
            }
        }
    }
    return (
$bReturnIdOnly) ? $aBlogId $data;
}

Получает отношения юзера к блогам(состоит в блоге или нет)

GetBlogs() method
public array GetBlogs(bool $bReturnIdOnly=false)
$bReturnIdOnly bool Возвращать только ID блогов или полные объекты
{return} array
Source Code: /classes/modules/blog/Blog.class.php#382 (show)
public function GetBlogs($bReturnIdOnly=false) {
    
$data=$this->oMapperBlog->GetBlogs();
    
/**
     * Возвращаем только иденитификаторы
     */
    
if($bReturnIdOnly) return $data;

    
$data=$this->GetBlogsAdditionalData($data);
    return 
$data;
}

Получает список всех НЕ персональных блогов

GetBlogsAdditionalData() method
public array GetBlogsAdditionalData(array $aBlogId, array $aAllowData=NULL, array $aOrder=NULL)
$aBlogId array Список ID блогов
$aAllowData array Список типов дополнительных данных, которые нужно получить для блогов
$aOrder array Порядок сортировки
{return} array
Source Code: /classes/modules/blog/Blog.class.php#74 (show)
public function GetBlogsAdditionalData($aBlogId,$aAllowData=null,$aOrder=null) {
    if (
is_null($aAllowData)) {
        
$aAllowData=array('vote','owner'=>array(),'relation_user');
    }
    
func_array_simpleflip($aAllowData);
    if (!
is_array($aBlogId)) {
        
$aBlogId=array($aBlogId);
    }
    
/**
     * Получаем блоги
     */
    
$aBlogs=$this->GetBlogsByArrayId($aBlogId,$aOrder);
    
/**
     * Формируем ID дополнительных данных, которые нужно получить
     */
    
$aUserId=array();
    foreach (
$aBlogs as $oBlog) {
        if (isset(
$aAllowData['owner'])) {
            
$aUserId[]=$oBlog->getOwnerId();
        }
    }
    
/**
     * Получаем дополнительные данные
     */
    
$aBlogUsers=array();
    
$aBlogsVote=array();
    
$aUsers=isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId,$aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId);
    if (isset(
$aAllowData['relation_user']) and $this->oUserCurrent) {
        
$aBlogUsers=$this->GetBlogUsersByArrayBlog($aBlogId,$this->oUserCurrent->getId());
    }
    if (isset(
$aAllowData['vote']) and $this->oUserCurrent) {
        
$aBlogsVote=$this->Vote_GetVoteByArray($aBlogId,'blog',$this->oUserCurrent->getId());
    }
    
/**
     * Добавляем данные к результату - списку блогов
     */
    
foreach ($aBlogs as $oBlog) {
        if (isset(
$aUsers[$oBlog->getOwnerId()])) {
            
$oBlog->setOwner($aUsers[$oBlog->getOwnerId()]);
        } else {
            
$oBlog->setOwner(null); // или $oBlog->setOwner(new ModuleUser_EntityUser());
        
}
        if (isset(
$aBlogUsers[$oBlog->getId()])) {
            
$oBlog->setUserIsJoin(true);
            
$oBlog->setUserIsAdministrator($aBlogUsers[$oBlog->getId()]->getIsAdministrator());
            
$oBlog->setUserIsModerator($aBlogUsers[$oBlog->getId()]->getIsModerator());
        } else {
            
$oBlog->setUserIsJoin(false);
            
$oBlog->setUserIsAdministrator(false);
            
$oBlog->setUserIsModerator(false);
        }
        if (isset(
$aBlogsVote[$oBlog->getId()])) {
            
$oBlog->setVote($aBlogsVote[$oBlog->getId()]);
        } else {
            
$oBlog->setVote(null);
        }
    }
    return 
$aBlogs;
}

Получает дополнительные данные(объекты) для блогов по их ID

GetBlogsAllowByUser() method
public array GetBlogsAllowByUser(ModuleUser_EntityUser $oUser)
$oUser ModuleUser_EntityUser Объект пользователя
{return} array
Source Code: /classes/modules/blog/Blog.class.php#672 (show)
public function GetBlogsAllowByUser($oUser) {
    if (
$oUser->isAdministrator()) {
        return 
$this->GetBlogs();
    } else {
        
$aAllowBlogsUser=$this->GetBlogsByOwnerId($oUser->getId());
        
$aBlogUsers=$this->GetBlogUsersByUserId($oUser->getId());
        foreach (
$aBlogUsers as $oBlogUser) {
            
$oBlog=$oBlogUser->getBlog();
            if (
$this->ACL_CanAddTopic($oUser,$oBlog) or $oBlogUser->getIsAdministrator() or $oBlogUser->getIsModerator()) {
                
$aAllowBlogsUser[$oBlog->getId()]=$oBlog;
            }
        }
        return     
$aAllowBlogsUser;
    }
}

Получает список блогов в которые может постить юзер

GetBlogsByArrayId() method
public array GetBlogsByArrayId(array $aBlogId, array|null $aOrder=NULL)
$aBlogId array Список ID блогов
$aOrder array|null Порядок сортировки
{return} array
Source Code: /classes/modules/blog/Blog.class.php#140 (show)
public function GetBlogsByArrayId($aBlogId,$aOrder=null) {
    if (!
$aBlogId) {
        return array();
    }
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetBlogsByArrayIdSolid($aBlogId,$aOrder);
    }
    if (!
is_array($aBlogId)) {
        
$aBlogId=array($aBlogId);
    }
    
$aBlogId=array_unique($aBlogId);
    
$aBlogs=array();
    
$aBlogIdNotNeedQuery=array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_');
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey ) {
            if (
array_key_exists($sKey,$data)) {
                if (
$data[$sKey]) {
                    
$aBlogs[$data[$sKey]->getId()]=$data[$sKey];
                } else {
                    
$aBlogIdNotNeedQuery[]=$sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких блогов не было в кеше и делаем запрос в БД
     */
    
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogs));
    
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
    
$aBlogIdNeedStore=$aBlogIdNeedQuery;
    if (
$data $this->oMapperBlog->GetBlogsByArrayId($aBlogIdNeedQuery)) {
        foreach (
$data as $oBlog) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aBlogs[$oBlog->getId()]=$oBlog;
            
$this->Cache_Set($oBlog"blog_{$oBlog->getId()}", array(), 60*60*24*4);
            
$aBlogIdNeedStore=array_diff($aBlogIdNeedStore,array($oBlog->getId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aBlogIdNeedStore as $sId) {
        
$this->Cache_Set(null"blog_{$sId}", array(), 60*60*24*4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aBlogs=func_array_sort_by_keys($aBlogs,$aBlogId);
    return 
$aBlogs;
}

Возвращает список блогов по ID

GetBlogsByArrayIdSolid() method
public array GetBlogsByArrayIdSolid(array $aBlogId, array|null $aOrder=NULL)
$aBlogId array Список ID блогов
$aOrder array|null Сортировка блогов
{return} array
Source Code: /classes/modules/blog/Blog.class.php#206 (show)
public function GetBlogsByArrayIdSolid($aBlogId,$aOrder=null) {
    if (!
is_array($aBlogId)) {
        
$aBlogId=array($aBlogId);
    }
    
$aBlogId=array_unique($aBlogId);
    
$aBlogs=array();
    
$s=join(',',$aBlogId);
    if (
false === ($data $this->Cache_Get("blog_id_{$s}"))) {
        
$data $this->oMapperBlog->GetBlogsByArrayId($aBlogId,$aOrder);
        foreach (
$data as $oBlog) {
            
$aBlogs[$oBlog->getId()]=$oBlog;
        }
        
$this->Cache_Set($aBlogs"blog_id_{$s}", array("blog_update"), 60*60*24*1);
        return 
$aBlogs;
    }
    return 
$data;
}

Возвращает список блогов по ID, но используя единый кеш

GetBlogsByFilter() method
public array('collection'=>array,'count'=>int) GetBlogsByFilter(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage, array $aAllowData=NULL)
$aFilter array Фильтр выборки блогов
$aOrder array Сортировка блогов
$iCurrPage int Номер текущей страницы
$iPerPage int Количество элементов на одну страницу
$aAllowData array Список типов данных, которые нужно подтянуть к списку блогов
{return} array('collection'=>array,'count'=>int)
Source Code: /classes/modules/blog/Blog.class.php#619 (show)
public function GetBlogsByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=null) {
    if (
is_null($aAllowData)) {
        
$aAllowData=array('owner'=>array(),'relation_user');
    }
    
$sKey="blog_filter_".serialize($aFilter).serialize($aOrder)."_{$iCurrPage}_{$iPerPage}";
    if (
false === ($data $this->Cache_Get($sKey))) {
        
$data = array('collection'=>$this->oMapperBlog->GetBlogsByFilter($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
        
$this->Cache_Set($data$sKey, array("blog_update","blog_new"), 60*60*24*2);
    }
    
$data['collection']=$this->GetBlogsAdditionalData($data['collection'],$aAllowData);
    return 
$data;
}

Возвращает список блогов по фильтру

GetBlogsByOwnerId() method
public array GetBlogsByOwnerId(int $sUserId, bool $bReturnIdOnly=false)
$sUserId int ID пользователя
$bReturnIdOnly bool Возвращать только ID блогов или полные объекты
{return} array
Source Code: /classes/modules/blog/Blog.class.php#366 (show)
public function GetBlogsByOwnerId($sUserId,$bReturnIdOnly=false) {
    
$data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);
    
/**
     * Возвращаем только иденитификаторы
     */
    
if($bReturnIdOnly) return $data;

    
$data=$this->GetBlogsAdditionalData($data);
    return 
$data;
}

Получает список блогов по хозяину

GetBlogsRating() method
public array('collection'=>array,'count'=>int) GetBlogsRating(int $iCurrPage, int $iPerPage)
$iCurrPage int Номер текущей страницы
$iPerPage int Количество элементов на одну страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /classes/modules/blog/Blog.class.php#638 (show)
public function GetBlogsRating($iCurrPage,$iPerPage) {
    return 
$this->GetBlogsByFilter(array('exclude_type'=>'personal'),array('blog_rating'=>'desc'),$iCurrPage,$iPerPage);
}

Получает список блогов по рейтингу

GetBlogsRatingJoin() method
public array GetBlogsRatingJoin(int $sUserId, int $iLimit)
$sUserId int ID пользователя
$iLimit int Ограничение на количество в ответе
{return} array
Source Code: /classes/modules/blog/Blog.class.php#648 (show)
public function GetBlogsRatingJoin($sUserId,$iLimit) {
    if (
false === ($data $this->Cache_Get("blog_rating_join_{$sUserId}_{$iLimit}"))) {
        
$data $this->oMapperBlog->GetBlogsRatingJoin($sUserId,$iLimit);
        
$this->Cache_Set($data"blog_rating_join_{$sUserId}_{$iLimit}", array('blog_update',"blog_relation_change_{$sUserId}"), 60*60*24);
    }
    return 
$data;
}

Список подключенных блогов по рейтингу

GetBlogsRatingSelf() method
public array GetBlogsRatingSelf(int $sUserId, int $iLimit)
$sUserId int ID пользователя
$iLimit int Ограничение на количество в ответе
{return} array
Source Code: /classes/modules/blog/Blog.class.php#662 (show)
public function GetBlogsRatingSelf($sUserId,$iLimit) {
    
$aResult=$this->GetBlogsByFilter(array('exclude_type'=>'personal','user_owner_id'=>$sUserId),array('blog_rating'=>'desc'),1,$iLimit);
    return 
$aResult['collection'];
}

Список своих блогов по рейтингу

GetInaccessibleBlogsByUser() method
public array GetInaccessibleBlogsByUser(ModuleUser_EntityUser|null $oUser=NULL)
$oUser ModuleUser_EntityUser|null Пользователь
{return} array
Source Code: /classes/modules/blog/Blog.class.php#717 (show)
public function GetInaccessibleBlogsByUser($oUser=null) {
    if (
$oUser&&$oUser->isAdministrator()) {
        return array();
    }
    
$sUserId=$oUser $oUser->getId() : 'quest';
    if (
false === ($aCloseBlogs $this->Cache_Get("blog_inaccessible_user_{$sUserId}"))) {
        
$aCloseBlogs $this->oMapperBlog->GetCloseBlogs();

        if(
$oUser) {
            
/**
             * Получаем массив идентификаторов блогов,
             * которые являются откытыми для данного пользователя
             */
            
$aOpenBlogs=$this->GetBlogUsersByUserId($oUser->getId(),null,true);
            
/**
             * Получаем закрытые блоги, где пользователь является автором
             */
            
$aOwnerBlogs=$this->GetBlogsByFilter(array('type'=>'close','user_owner_id'=>$oUser->getId()),array(),1,100,array());
            
$aOwnerBlogs=array_keys($aOwnerBlogs['collection']);
            
$aCloseBlogs=array_diff($aCloseBlogs,$aOpenBlogs,$aOwnerBlogs);
        }
        
/**
         * Сохраняем в кеш
         */
        
if ($oUser) {
            
$this->Cache_Set($aCloseBlogs"blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
        } else {
            
$this->Cache_Set($aCloseBlogs"blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update'), 60*60*24*3);
        }
    }
    return 
$aCloseBlogs;
}

Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя

GetPersonalBlogByUserId() method
public ModuleBlog_EntityBlog GetPersonalBlogByUserId(int $sUserId)
$sUserId int ID пользователя
{return} ModuleBlog_EntityBlog
Source Code: /classes/modules/blog/Blog.class.php#229 (show)
public function GetPersonalBlogByUserId($sUserId) {
    
$id=$this->oMapperBlog->GetPersonalBlogByUserId($sUserId);
    return 
$this->GetBlogById($id);
}

Получить персональный блог юзера

Init() method
public void Init()
Source Code: /classes/modules/blog/Blog.class.php#62 (show)
public function Init() {
    
$this->oMapperBlog=Engine::GetMapper(__CLASS__);
    
$this->oUserCurrent=$this->User_GetUserCurrent();
}

Инициализация

RecalculateCountTopic() method
public bool RecalculateCountTopic()
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#886 (show)
public function RecalculateCountTopic() {
    
//чистим зависимые кеши
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update'));
    return 
$this->oMapperBlog->RecalculateCountTopic();
}

Пересчет количества топиков в блогах

RecalculateCountTopicByBlogId() method
public bool RecalculateCountTopicByBlogId(int $iBlogId)
$iBlogId int ID блога
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#897 (show)
public function RecalculateCountTopicByBlogId($iBlogId) {
    
//чистим зависимые кеши
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$iBlogId}"));
    
$this->Cache_Delete("blog_{$iBlogId}");
    return 
$this->oMapperBlog->RecalculateCountTopic($iBlogId);
}

Пересчет количества топиков в конкретном блоге

UpdateBlog() method
public ModuleBlog_EntityBlog|bool UpdateBlog(ModuleBlog_EntityBlog $oBlog)
$oBlog ModuleBlog_EntityBlog Блог
{return} ModuleBlog_EntityBlog|bool
Source Code: /classes/modules/blog/Blog.class.php#320 (show)
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog) {
    
$oBlog->setDateEdit(date("Y-m-d H:i:s"));
    
$res=$this->oMapperBlog->UpdateBlog($oBlog);
    if (
$res) {
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$oBlog->getId()}","topic_update"));
        
$this->Cache_Delete("blog_{$oBlog->getId()}");
        return 
true;
    }
    return 
false;
}

Обновляет блог

UpdateRelationBlogUser() method
public bool UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
$oBlogUser ModuleBlog_EntityBlogUser Объект отновшения
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#604 (show)
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
    
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
    return 
$this->oMapperBlog->UpdateRelationBlogUser($oBlogUser);
}

Обновляет отношения пользователя с блогом

UploadBlogAvatar() method
public bool UploadBlogAvatar(array $aFile, ModuleBlog_EntityBlog $oBlog)
$aFile array Массив $_FILES при загрузке аватара
$oBlog ModuleBlog_EntityBlog Блог
{return} bool
Source Code: /classes/modules/blog/Blog.class.php#813 (show)
public function UploadBlogAvatar($aFile,$oBlog) {
    if(!
is_array($aFile) || !isset($aFile['tmp_name'])) {
        return 
false;
    }

    
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
    if (!
move_uploaded_file($aFile['tmp_name'],$sFileTmp)) {
        return 
false;
    }

    
$sPath=$this->Image_GetIdDir($oBlog->getOwnerId());
    
$aParams=$this->Image_BuildParams('avatar');

    
$oImage=$this->Image_CreateImageObject($sFileTmp);
    
/**
     * Если объект изображения не создан,
     * возвращаем ошибку
     */
    
if($sError=$oImage->get_last_error()) {
        
// Вывод сообщения об ошибки, произошедшей при создании объекта изображения
        // $this->Message_AddError($sError,$this->Lang_Get('error'));
        
@unlink($sFileTmp);
        return 
false;
    }
    
/**
     * Срезаем квадрат
     */
    
$oImage $this->Image_CropSquare($oImage);

    
$aSize=Config::Get('module.blog.avatar_size');
    
rsort($aSize,SORT_NUMERIC);
    
$sSizeBig=array_shift($aSize);
    if (
$oImage && $sFileAvatar=$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_{$sSizeBig}x{$sSizeBig}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$sSizeBig,$sSizeBig,false,$aParams,$oImage)) {
        foreach (
$aSize as $iSize) {
            if (
$iSize==0) {
                
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),null,null,false,$aParams,$oImage);
            } else {
                
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_{$iSize}x{$iSize}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$iSize,$iSize,false,$aParams,$oImage);
            }
        }
        @
unlink($sFileTmp);
        
/**
         * Если все нормально, возвращаем расширение загруженного аватара
         */
        
return $this->Image_GetWebPath($sFileAvatar);
    }
    @
unlink($sFileTmp);
    
/**
     * В случае ошибки, возвращаем false
     */
    
return false;
}

Загружает аватар в блог