/** * Allows user to announce or unannounce a discussion. * * If the discussion isn't announced, this announces it. * If it is already announced, this unannounces it. * Announced discussions stay at the top of the discussions * list regardless of how long ago the last comment was. * * @since 2.0.0 * @access public * * @param int $DiscussionID Unique discussion ID. * @param string $TransientKey Single-use hash to prove intent. */ public function Announce($DiscussionID = '', $Target = '') { $Discussion = $this->DiscussionModel->GetID($DiscussionID); if (!$Discussion) { throw NotFoundException('Discussion'); } $this->Permission('Vanilla.Discussions.Announce', TRUE, 'Category', $Discussion->PermissionCategoryID); if ($this->Form->IsPostBack()) { // Save the property. $CacheKeys = array($this->DiscussionModel->GetAnnouncementCacheKey(), $this->DiscussionModel->GetAnnouncementCacheKey(val('CategoryID', $Discussion))); $this->DiscussionModel->SQL->Cache($CacheKeys); $this->DiscussionModel->SetProperty($DiscussionID, 'Announce', (int) $this->Form->GetFormValue('Announce', 0)); if ($Target) { $this->RedirectUrl = Url($Target); } } else { if (!$Discussion->Announce) { $Discussion->Announce = 2; } $this->Form->SetData($Discussion); } $Discussion = (array) $Discussion; $Category = CategoryModel::Categories($Discussion['CategoryID']); $this->SetData('Discussion', $Discussion); $this->SetData('Category', $Category); $this->Title(T('Announce')); $this->Render(); }