예제 #1
0
 /**
  * Обновляет топик
  *
  * @param ModuleTopic_EntityTopic $oTopic Объект топика
  * @return bool
  */
 public function UpdateTopic(ModuleTopic_EntityTopic $oTopic)
 {
     /**
      * Получаем топик ДО изменения
      */
     $oTopicOld = $this->GetTopicById($oTopic->getId());
     $oTopic->setDateEdit(date("Y-m-d H:i:s"));
     if ($this->oMapperTopic->UpdateTopic($oTopic)) {
         /**
          * Если топик изменил видимость(publish) или локацию (BlogId) или список тегов
          */
         if ($oTopic->getPublish() != $oTopicOld->getPublish() || $oTopic->getBlogId() != $oTopicOld->getBlogId() || $oTopic->getTags() != $oTopicOld->getTags()) {
             /**
              * Обновляем теги
              */
             $this->DeleteTopicTagsByTopicId($oTopic->getId());
             if ($oTopic->getPublish() and $oTopic->getTags()) {
                 $aTags = explode(',', $oTopic->getTags());
                 foreach ($aTags as $sTag) {
                     $oTag = Engine::GetEntity('Topic_TopicTag');
                     $oTag->setTopicId($oTopic->getId());
                     $oTag->setUserId($oTopic->getUserId());
                     $oTag->setBlogId($oTopic->getBlogId());
                     $oTag->setText($sTag);
                     $this->AddTopicTag($oTag);
                 }
             }
         }
         if ($oTopic->getPublish() != $oTopicOld->getPublish()) {
             /**
              * Обновляем избранное
              */
             $this->SetFavouriteTopicPublish($oTopic->getId(), $oTopic->getPublish());
             /**
              * Удаляем комментарий топика из прямого эфира
              */
             if ($oTopic->getPublish() == 0) {
                 $this->Comment_DeleteCommentOnlineByTargetId($oTopic->getId(), 'topic');
             }
             /**
              * Изменяем видимость комментов
              */
             $this->Comment_SetCommentsPublish($oTopic->getId(), 'topic', $oTopic->getPublish());
         }
         /**
          * Смена главного блога
          */
         if ($oTopic->getBlogId() != $oTopicOld->getBlogId()) {
             // меняем target parent у комментов
             $this->Comment_MoveTargetParent($oTopicOld->getBlogId(), 'topic', $oTopic->getBlogId());
             // меняем target parent у комментов в прямом эфире
             $this->Comment_MoveTargetParentOnline($oTopicOld->getBlogId(), 'topic', $oTopic->getBlogId());
         }
         /**
          * Обновляем дополнительные поля
          * Здесь важный момент - перед сохранением топика всегда нужно вызывать валидацию полей $this->Property_ValidateEntityPropertiesCheck($oTopic);
          * т.к. она подготавливает данные полей для сохранений
          * Валидация вызывается автоматически при вызове $oTopic->_Validate();
          */
         $this->Property_UpdatePropertiesValue($oTopic->getPropertiesObject(), $oTopic);
         //чистим зависимые кеши
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update', "topic_update_user_{$oTopic->getUserId()}"));
         $this->Cache_Delete("topic_{$oTopic->getId()}");
         return true;
     }
     return false;
 }
예제 #2
0
 /**
  * Обновляет топик
  *
  * @param ModuleTopic_EntityTopic $oTopic    Объект топика
  *
  * @return bool
  */
 public function UpdateTopic($oTopic)
 {
     // * Получаем топик ДО изменения
     $oTopicOld = $this->GetTopicById($oTopic->getId());
     $oTopic->setDateEdit(F::Now());
     if ($this->oMapper->UpdateTopic($oTopic)) {
         // * Если топик изменил видимость (publish) или локацию (BlogId) или список тегов
         if ($oTopicOld && ($oTopic->getPublish() != $oTopicOld->getPublish() || $oTopic->getBlogId() != $oTopicOld->getBlogId() || $oTopic->getTags() != $oTopicOld->getTags())) {
             // * Обновляем теги
             $this->DeleteTopicTagsByTopicId($oTopic->getId());
             if ($oTopic->getPublish() && $oTopic->getTags()) {
                 $aTags = explode(',', $oTopic->getTags());
                 foreach ($aTags as $sTag) {
                     /** @var ModuleTopic_EntityTopicTag $oTag */
                     $oTag = E::GetEntity('Topic_TopicTag');
                     $oTag->setTopicId($oTopic->getId());
                     $oTag->setUserId($oTopic->getUserId());
                     $oTag->setBlogId($oTopic->getBlogId());
                     $oTag->setText($sTag);
                     $this->AddTopicTag($oTag);
                 }
             }
         }
         if ($oTopicOld && $oTopic->getPublish() != $oTopicOld->getPublish()) {
             // * Обновляем избранное
             $this->SetFavouriteTopicPublish($oTopic->getId(), $oTopic->getPublish());
             // * Удаляем комментарий топика из прямого эфира
             if ($oTopic->getPublish() == 0) {
                 E::ModuleComment()->DeleteCommentOnlineByTargetId($oTopic->getId(), 'topic');
             }
             // * Изменяем видимость комментов
             E::ModuleComment()->SetCommentsPublish($oTopic->getId(), 'topic', $oTopic->getPublish());
         }
         if (R::GetAction() == 'content') {
             $this->processTopicFields($oTopic, 'update');
         }
         $this->UpdateMresources($oTopic);
         // чистим зависимые кеши
         E::ModuleCache()->CleanByTags(array('topic_update', "topic_update_user_{$oTopic->getUserId()}"));
         E::ModuleCache()->Delete("topic_{$oTopic->getId()}");
         return true;
     }
     return false;
 }
예제 #3
0
 /**
  * Обновляет топик
  *
  * @param ModuleTopic_EntityTopic $oTopic	Объект топика
  * @return bool
  */
 public function UpdateTopic(ModuleTopic_EntityTopic $oTopic)
 {
     /**
      * Получаем топик ДО изменения
      */
     $oTopicOld = $this->GetTopicById($oTopic->getId());
     $oTopic->setDateEdit(date("Y-m-d H:i:s"));
     if ($this->oMapperTopic->UpdateTopic($oTopic)) {
         /**
          * Если топик изменил видимость(publish) или локацию (BlogId) или список тегов
          */
         if ($oTopic->getPublish() != $oTopicOld->getPublish() || $oTopic->getBlogId() != $oTopicOld->getBlogId() || $oTopic->getTags() != $oTopicOld->getTags()) {
             /**
              * Обновляем теги
              */
             $this->DeleteTopicTagsByTopicId($oTopic->getId());
             if ($oTopic->getPublish() and $oTopic->getTags()) {
                 $aTags = explode(',', $oTopic->getTags());
                 foreach ($aTags as $sTag) {
                     $oTag = Engine::GetEntity('Topic_TopicTag');
                     $oTag->setTopicId($oTopic->getId());
                     $oTag->setUserId($oTopic->getUserId());
                     $oTag->setBlogId($oTopic->getBlogId());
                     $oTag->setText($sTag);
                     $this->AddTopicTag($oTag);
                 }
             }
         }
         if ($oTopic->getPublish() != $oTopicOld->getPublish()) {
             /**
              * Обновляем избранное
              */
             $this->SetFavouriteTopicPublish($oTopic->getId(), $oTopic->getPublish());
             /**
              * Удаляем комментарий топика из прямого эфира
              */
             if ($oTopic->getPublish() == 0) {
                 $this->Comment_DeleteCommentOnlineByTargetId($oTopic->getId(), 'topic');
             }
             /**
              * Изменяем видимость комментов
              */
             $this->Comment_SetCommentsPublish($oTopic->getId(), 'topic', $oTopic->getPublish());
         }
         //чистим зависимые кеши
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update', "topic_update_user_{$oTopic->getUserId()}"));
         $this->Cache_Delete("topic_{$oTopic->getId()}");
         return true;
     }
     return false;
 }