/**
  * 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();
 }