/** * Обновляет топик * * @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; }
/** * Обновляет топик * * @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; }
/** * Обновляет топик * * @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; }