/**
  * Generate a "deletion nomination" form.
  * @param $article Article object to nominate.
  */
 public function buildForm($article, $queue)
 {
     global $wgOut, $wgScript, $wgUser, $wgRequest;
     // Check for submission
     if ($this->trySubmit($article, $queue)) {
         return;
     }
     $wgOut->setPageTitle(wfMsg("deletequeue-{$queue}-title", $article->mTitle->getPrefixedText()));
     $wgOut->addWikiMsg("deletequeue-{$queue}-text", $article->mTitle->getPrefixedText());
     // Build deletion form.
     $fields = array();
     $fields['deletequeue-delnom-reason'] = Xml::listDropDown('wpReason', DeleteQueueInterface::getReasonList($queue), wfMsg("deletequeue-delnom-otherreason"));
     $fields['deletequeue-delnom-extra'] = Xml::input('wpExtra', 45);
     $article_id = $article->getId();
     $title = $this->getTitle("nominate/{$article_id}/{$queue}");
     $form = Xml::buildForm($fields, "deletequeue-delnom-submit");
     $form .= Html::Hidden('title', $title->getPrefixedText());
     $form .= Html::Hidden('queue', $queue);
     $form .= Html::Hidden('wpEditToken', $wgUser->editToken());
     $form = Xml::tags('form', array('action' => $title->getLocalUrl(), 'method' => 'POST'), $form);
     $wgOut->addHTML($form);
 }
 /**
  * Process the "Review Speedy" action
  * @param $article Article object being reviewed
  */
 public function show($params)
 {
     global $wgOut, $wgScript, $wgUser, $wgRequest;
     list($action, $case_id) = $params;
     $dqi = DeleteQueueItem::newFromId($case_id);
     $article = $this->mArticle = $dqi->getArticle();
     $queue = $dqi->getQueue();
     if (!$queue) {
         // ...
         $wgOut->addWikiMsg('deletequeue-notqueued');
         return;
     }
     // Check permissions
     $editErrors = $article->mTitle->getUserPermissionsErrors('edit', $wgUser);
     $nomErrors = $article->mTitle->getUserPermissionsErrors("{$queue}-review", $wgUser);
     if (count(array_merge($editErrors, $nomErrors))) {
         // Permissions errors.
         if (count($editErrors)) {
             $editError = $wgOut->formatPermissionsErrorMessage($editErrors, 'edit');
             $nomErrors[] = array('deletequeue-permissions-noedit', $editError);
         }
         $wgOut->showPermissionsErrorPage($nomErrors, "{$queue}-review");
         return;
     }
     list($enabledActions, $disabledActions) = $this->availableActions();
     $haveRequeueOption = false;
     $shownActions = array_merge(array_keys($disabledActions), $enabledActions);
     foreach ($shownActions as $val) {
         if (strpos($val, 'requeue') == 0) {
             $haveRequeueOption = true;
         }
     }
     if (($error = $this->submit($article)) === true) {
         $wgOut->setPageTitle(wfMsg("deletequeue-review-success-title"));
         $wgOut->addWikiMsg("deletequeue-review-success");
         return;
     }
     $wgOut->setPageTitle(wfMsg("deletequeue-review{$queue}-title", $article->mTitle->getPrefixedText()));
     $discussionPage = $queue == 'deletediscuss' ? $dqi->getDiscussionPage()->mTitle->getPrefixedText() : null;
     $wgOut->addWikiMsg("deletequeue-review{$queue}-text", $article->mTitle->getPrefixedText(), $discussionPage);
     // Cautions if there's an objection
     if (count($dqi->mVotesObject) > 0) {
         $wgOut->addWikiMsg("deletequeue-review-objections", count($dqi->mVotesObject));
     }
     if ($error) {
         $wgOut->addHTML('<p>' . $error . '</p>');
     }
     // Details of nomination
     $wgOut->addHTML(Xml::openElement('fieldset') . Xml::element('legend', array(), wfMsg('deletequeue-review-original')));
     $wgOut->addWikitext($dqi->getReason());
     $wgOut->addHTML(Xml::closeElement('fieldset'));
     $output = '';
     // Give the user options
     $option_selection = '';
     // // Action radio buttons
     // Accept the nomination as-is
     $accept = Xml::radioLabel(wfMsg('deletequeue-review-delete'), 'wpSpeedyAction', 'delete', 'mw-review-accept');
     $option_selection .= $this->getActionOrError('delete', $accept, null, Xml::tags('li', array(), '$1'));
     // Accept nomination, but with a different reasoning.
     $change_option = Xml::radioLabel(wfMsg('deletequeue-review-change'), 'wpSpeedyAction', 'change', 'mw-review-change');
     $change_fields = array();
     $change_fields['deletequeue-review-newreason'] = Xml::listDropDown('wpSpeedyNewReason', DeleteQueueInterface::getReasonList($queue), wfMsg('deletequeue-delnom-otherreason'));
     $change_fields['deletequeue-review-newextra'] = Xml::input('wpSpeedyNewExtra', 45, '');
     $change_option .= Xml::buildForm($change_fields);
     $option_selection .= $this->getActionOrError('delete', $change_option, wfMsgExt('deletequeue-review-change', array('parseinline')), Xml::tags('li', array(), '$1'));
     // Reject nomination, queue into a different deletion queue.
     if ($haveRequeueOption) {
         $requeue_option = Xml::radioLabel(wfMsg('deletequeue-review-requeue'), 'wpSpeedyAction', 'requeue', 'mw-review-requeue');
         $new_queues = array('prod', 'deletediscuss');
         $requeue_queues = '';
         foreach ($new_queues as $option) {
             $this_queue = Xml::radioLabel(wfMsg("deletequeue-queue-{$option}"), 'wpSpeedyRequeue', $option, "mw-review-requeue-{$option}");
             $disabledMsg = wfMsgExt("deletequeue-requeuedisabled", array('parseinline'), array(wfMsgNoTrans("deletequeue-queue-{$option}")));
             $requeue_queues .= $this->getActionOrError("requeue-{$option}", $this_queue, $disabledMsg, Xml::tags('li', array(), '$1'));
         }
         $requeue_option .= Xml::tags('ul', array(), $requeue_queues);
         $requeue_fields = array();
         $requeue_fields['deletequeue-review-newreason'] = Xml::listDropDown('wpSpeedyNewReason', DeleteQueueInterface::getReasonList('generic'), wfMsg("deletequeue-delnom-otherreason"));
         $requeue_fields['deletequeue-review-newextra'] = Xml::input('wpSpeedyNewExtra', 45, '');
         $requeue_option .= Xml::buildForm($requeue_fields);
         $option_selection .= Xml::tags('li', array(), $requeue_option);
     }
     // Reject nomination outright.
     $dq = Xml::radioLabel(wfMsg('deletequeue-review-dequeue'), 'wpSpeedyAction', 'dequeue', 'mw-review-dequeue');
     $option_selection .= $this->getActionOrError('dequeue', $dq, null, Xml::tags('li', array(), '$1'));
     // // Convert to a list.
     $option_selection = Xml::tags('ul', array(), $option_selection);
     $option_selection = Xml::fieldset(wfMsg('deletequeue-review-action'), $option_selection);
     $output .= $option_selection;
     // Reason etc.
     $fields = array('deletequeue-review-reason' => Xml::input('wpReason', 45, null));
     $output .= Xml::buildForm($fields, 'deletequeue-review-submit');
     // Form stuff
     $output .= Html::Hidden('title', $this->getTitle("case/" . $dqi->getCaseID() . "/review"));
     $output .= Html::Hidden('wpEditToken', $wgUser->editToken());
     $output = Xml::tags('form', array('action' => $article->mTitle->getLocalURL(), 'method' => 'POST'), $output);
     $wgOut->addHTML($output);
 }