public static function onArticleViewHeader(&$article) { global $wgOut, $wgLang; if ($article->mTitle->getNamespace() == NS_DELETION) { $dqi = DeleteQueueItem::newFromDiscussion($article); if (!$dqi->isQueued()) { break; } $wgOut->addWikiMsg('deletequeue-deletediscuss-discussionpage', $dqi->getArticle()->mTitle->getPrefixedText(), count($dqi->getEndorsements()), count($dqi->getObjections())); } $dqi = DeleteQueueItem::newFromArticle($article); if (!($queue = $dqi->getQueue())) { return true; } $options = array("deletequeue-page-{$queue}"); $options[] = $dqi->getReason(); $expiry = wfTimestamp(TS_UNIX, $dqi->getExpiry()); $options[] = $wgLang->timeanddate($expiry); $options[] = $wgLang->date($expiry); $options[] = $wgLang->time($expiry); if ($queue == 'deletediscuss') { $options[] = $dqi->getDiscussionPage()->mTitle->getPrefixedText(); } call_user_func_array(array($wgOut, 'addWikiMsg'), $options); return true; }
function formatRow($row) { static $sk = null; if (is_null($sk)) { global $wgUser; $sk = $wgUser->getSkin(); } $a = Article::newFromID($row->dq_page); $t = $a->mTitle; $dqi = DeleteQueueItem::newFromArticle($a); $dqi->loadFromRow($row); $queue = $dqi->getQueue(); global $wgLang; if ($dqi->getQueue() == 'deletediscuss') { $discusspage = $sk->makeKnownLinkObj($dqi->getDiscussionPage()->mTitle); } else { $discusspage = ''; } if ($row->dq_expiry > $row->dq_timestamp) { $expirestr = $wgLang->timeanddate($row->dq_expiry); } else { $expirestr = ''; } $tr = ''; $tr .= Xml::tags('td', null, $sk->makeKnownLinkObj($t, $t->getPrefixedText())); $tr .= Xml::element('td', null, wfMsg("deletequeue-queue-{$queue}")); $tr .= Xml::tags('td', null, $sk->makeKnownLinkObj($t, $dqi->formatVoteCount(), 'action=delviewvotes')); $tr .= Xml::element('td', null, $expirestr); $tr .= Xml::tags('td', null, $discusspage); return Xml::tags('tr', null, $tr) . "\n"; }
/** * Process the 'delvote' action. * @param Article $article The article to endorse/object to deletion of. */ public function process($article) { global $wgRequest, $wgOut, $wgUser; $errs = $article->mTitle->getUserPermissionsErrors('deletequeue-vote', $wgUser); if (count($errs) > 0) { $wgOut->showPermissionsErrorPage($errs); return; } $dqi = DeleteQueueItem::newFromArticle($article); $wgOut->setPageTitle(wfMsg('deletequeue-vote-title', $article->mTitle->getPrefixedText())); // Load form data $token = $wgRequest->getVal('wpEditToken'); $action = $wgRequest->getVal('wpVote'); $comments = $wgRequest->getText('wpComments'); if ($wgUser->matchEditToken($token) && in_array($action, array('endorse', 'object'))) { $dqi->addVote($action, $comments); if ($action == 'object' && $dqi->getQueue() == 'prod') { $dbw = wfGetDB(DB_MASTER); $dbw->begin(); $dqi->setQueue('deletediscuss', $dqi->getReason()); $lp = new LogPage('delete'); $lp->addEntry('requeue', $article->mTitle, $comments, array(wfMsgForContent('deletequeue-queue-prod'), wfMsgForContent("deletequeue-queue-deletediscuss"))); $dbw->commit(); $wgOut->addWikiMsg('deletequeue-vote-requeued', wfMsgNoTrans('deletequeue-queue-deletediscuss')); } else { $wgOut->addWikiMsg("deletequeue-vote-success-{$action}"); } return; } $wgOut->addWikiMsg('deletequeue-vote-text', $article->mTitle->getPrefixedText(), $dqi->getReason()); // Add main form. $fields = array(); $options = Xml::tags('p', null, Xml::radioLabel(wfMsg('deletequeue-vote-endorse'), 'wpVote', 'endorse', 'mw-deletequeue-vote-endorse')); $options .= Xml::tags('p', null, Xml::radioLabel(wfMsg('deletequeue-vote-object'), 'wpVote', 'object', 'mw-deletequeue-vote-object')); $fields['deletequeue-vote-action'] = $options; $fields['deletequeue-vote-reason'] = Xml::input('wpComments', 45, $comments); $article_id = $article->getId(); $title = $this->getTitle("vote/{$article_id}"); $form = Xml::buildForm($fields, 'deletequeue-vote-submit') . Html::Hidden('wpEditToken', $wgUser->editToken()) . Html::Hidden('title', $title->getPrefixedText()); $form = Xml::tags('form', array('action' => $title->getLocalURL(), 'method' => 'POST'), $form); $form = Xml::fieldset(wfMsg('deletequeue-vote-legend'), $form); $wgOut->addHTML($form); }
/** * Determines which queues can be sent to in review. * @return Array First element is a simple list of ENABLED queues, second is a list, key is queue name, value is a message explaining why (already passed through wfMsg). Queues in neither are not displayed. */ public function availableActions($user = null) { $article = $this->mArticle; $dqi = DeleteQueueItem::newFromArticle($article); $queue = $dqi->getQueue(); if ($user === null) { global $wgUser; $user = $wgUser; } $enabled = array(); $disabled = array(); $userRoles = $dqi->getUserRoles($user); $descriptiveRoles = array_map(array('DeleteQueueItem', 'getRoleDescription'), $userRoles); $descriptiveRolesText = implode(", ", $descriptiveRoles); $enabled[] = 'endorse'; $enabled[] = 'object'; // Speedy deletion if ($queue == 'speedy') { // All are unlocked if user is authed. $enabled = array('delete', 'requeue-prod', 'requeue-deletediscuss', 'dequeue'); } elseif ($queue == 'prod') { // Escalation by anybody $enabled[] = 'requeue-deletediscuss'; $enabled[] = 'dequeue'; $expiry = $dqi->getExpiry(); $hasExpired = time() > $expiry ? true : false; // Handling of 'delete' if (!$hasExpired) { // Hasn't expired yet, don't let them delete it. $disabled['delete'] = wfMsgExt('deletequeue-actiondisabled-notexpired', array('parseinline')); } elseif (count($userRoles)) { // Tell them they're involved. $disabled['delete'] = wfMsgExt('deletequeue-actiondisabled-involved', array('parseinline'), array($descriptiveRolesText)); } else { // Allow uninvolved admins to delete expired prods $enabled[] = 'delete'; } } elseif ($queue == 'deletediscuss') { $expiry = $dqi->getExpiry(); $hasExpired = time() > $expiry ? true : false; if (!$hasExpired) { // Hasn't expired yet, don't let them delete it. $disabled['delete'] = wfMsgExt('deletequeue-actiondisabled-notexpired', array('parseinline')); } elseif (count($userRoles)) { // Tell them they're involved. $disabled['delete'] = wfMsgExt('deletequeue-actiondisabled-involved', array('parseinline'), array($descriptiveRolesText)); } else { // An uninvolved admin wants to delete an expired proposed deletion. $enabled[] = 'delete'; } $enabled[] = 'dequeue'; } return array($enabled, $disabled); }
/** * Attempt to submit the propose deletion form. * @param $article Article object. * @param $action The action (speedynom, prod, etc) * @return Boolean Whether or not the submission was successful. */ public function trySubmit($article, $queue) { global $wgUser, $wgOut, $wgRequest; $token = $wgRequest->getText('wpEditToken'); if (!$wgUser->matchEditToken($token)) { return false; } // Import form data. $reason1 = $wgRequest->getText('wpReason'); $reason2 = $wgRequest->getText('wpExtra'); $reason = DeleteQueueInterface::formatReason($reason1, $reason2); // Allow hooks to terminate $error = ''; if (!wfRunHooks('AbortDeleteQueueNominate', array($wgUser, $article, $queue, $reason, &$error))) { $wgOut->addWikitext($error); return false; } // Transaction $dbw = wfGetDB(DB_MASTER); $dbw->begin(); // Set in database. $dqi = DeleteQueueItem::newFromArticle($article); if ($dqi->getQueue()) { $dbw->rollback(); $wgOut->addWikiMsg('deletequeue-nom-alreadyqueued'); return false; } $dqi->setQueue($queue, $reason); $dqi->addRole('nominator'); $log = new LogPage('delete'); $log->addEntry("nominate", $article->mTitle, $reason, wfMsgNoTrans('deletequeue-queue-' . $queue)); $dbw->commit(); $wgOut->redirect($article->mTitle->getLocalUrl()); return true; }