Пример #1
0
 /**
  * Удаляет блог
  *
  * @param   int|array $aBlogsId   ID блога|массив ID блогов
  *
  * @return  bool
  */
 public function DeleteBlog($aBlogsId)
 {
     // Получаем массив ID, если передан объект или массив объектов
     $aBlogsId = $this->_entitiesId($aBlogsId);
     if ($aBlogsId) {
         // * Получаем идентификаторы топиков блога. Удаляем топики блога.
         // * При удалении топиков удаляются комментарии к ним и голоса.
         $aTopicsId = E::ModuleTopic()->GetTopicsByBlogId($aBlogsId);
         // * Если блог не удален, возвращаем false
         if (!$this->oMapper->DeleteBlog($aBlogsId)) {
             return false;
         }
         if ($aTopicsId) {
             // * Удаляем топики
             E::ModuleTopic()->DeleteTopics($aTopicsId);
         }
         // * Удаляем связи пользователей блога.
         $this->oMapper->DeleteBlogUsersByBlogId($aBlogsId);
         // * Удаляем голосование за блог
         E::ModuleVote()->DeleteVoteByTarget($aBlogsId, 'blog');
         // * Чистим кеш
         E::ModuleCache()->CleanByTags(array('blog_update', 'topic_update', 'comment_online_update_topic', 'comment_update'));
         foreach ($aBlogsId as $nBlogId) {
             E::ModuleCache()->CleanByTags(array("blog_relation_change_blog_{$nBlogId}"));
             E::ModuleCache()->Delete("blog_{$nBlogId}");
         }
     }
     return true;
 }
Пример #2
0
 /**
  * Удаляет блог
  *
  * @param  int $iBlogId	ID блога
  * @return bool
  */
 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;
 }
Пример #3
0
 /**
  * Удаляет блог
  *
  * @param  int $iBlogId ID блога
  * @return bool
  */
 public function DeleteBlog($iBlogId)
 {
     if ($iBlogId instanceof ModuleBlog_EntityBlog) {
         $oBlog = $iBlogId;
         $iBlogId = $oBlog->getId();
     } else {
         $oBlog = $this->Blog_GetBlogById($iBlogId);
     }
     /**
      * Получаем идентификаторы топиков блога. Удаляем топики блога.
      * При удалении топиков удаляются комментарии к ним, голоса и т.п.
      */
     $iPage = 1;
     while ($aTopicsRes = $this->Topic_GetTopicsByBlogId($iBlogId, $iPage, 100, array(), false) and $aTopicsRes['collection']) {
         /**
          * Удаляем топики
          */
         foreach ($aTopicsRes['collection'] as $oTopic) {
             $aBlogsCurrent = $oTopic->getBlogIds();
             /**
              * Удалять нужно только те топики, где текущий блог является единственным, у остальных просто удаляем связь
              */
             if (count($aBlogsCurrent) == 1) {
                 $this->Topic_DeleteTopic($oTopic);
             } else {
                 array_splice($aBlogsCurrent, array_search($oBlog->getId(), $aBlogsCurrent), 1);
                 /**
                  * Устанавливаем новые связи с блогами
                  */
                 foreach ($aBlogsCurrent as $i => $iBlogCurrent) {
                     $sMethodSet = 'setBlogId' . ($i == 0 ? '' : $i + 1);
                     call_user_func(array($oTopic, $sMethodSet), $iBlogCurrent);
                 }
                 for ($i = $i + 2; $i <= 10; $i++) {
                     $sMethodSet = 'setBlogId' . $i;
                     call_user_func(array($oTopic, $sMethodSet), null);
                 }
                 $this->Topic_UpdateTopic($oTopic);
             }
         }
         $iPage++;
     }
     /**
      * Если блог не удален, возвращаем 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}");
     /**
      * Удаляем аватар
      */
     $this->DeleteBlogAvatar($oBlog);
     /**
      * Удаляем связи пользователей блога.
      */
     $this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId);
     /**
      * Удаляем голосование за блог
      */
     $this->Vote_DeleteVoteByTarget($iBlogId, 'blog');
     /**
      * Удаляем медиа данные
      */
     $this->Media_RemoveTarget('blog', $iBlogId, true);
     /**
      * Обновляем категорию блога
      */
     $oBlog->category->CallbackAfterDelete();
     return true;
 }