/** * Добавляет топик * * @param ModuleTopic_EntityTopic $oTopic Объект топика * @return ModuleTopic_EntityTopic|bool */ public function AddTopic(ModuleTopic_EntityTopic $oTopic) { if (!$oTopic->getDatePublish()) { $oTopic->setDatePublish($oTopic->getDateAdd()); } if ($sId = $this->oMapperTopic->AddTopic($oTopic)) { $oTopic->setId($sId); 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); } } /** * Обновляем дополнительные поля * Здесь важный момент - перед сохранением топика всегда нужно вызывать валидацию полей $this->Property_ValidateEntityPropertiesCheck($oTopic); * т.к. она подготавливает данные полей для сохранений * Валидация вызывается автоматически при вызове $oTopic->_Validate(); */ $this->Property_UpdatePropertiesValue($oTopic->getPropertiesObject(), $oTopic); //чистим зависимые кеши $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_new', "topic_update_user_{$oTopic->getUserId()}", "topic_new_blog_{$oTopic->getBlogId()}")); return $oTopic; } return false; }