public function setDim($tag, $value) { if (!in_array($tag, FlaggedRevs::getTags())) { throw new MWException("FlaggedRevs tag {$tag} does not exist.\n"); } $this->trySet($this->dims[$tag], (int) $value); }
public function getParamDescription() { $desc = array('revid' => 'The revision ID for which to set the flags', 'token' => 'An edit token retrieved through prop=info', 'comment' => 'Comment for the review (optional)', 'unapprove' => 'If set, revision will be unapproved rather than approved.'); if (!FlaggedRevs::binaryFlagging()) { foreach (FlaggedRevs::getTags() as $flagname) { $desc['flag_' . $flagname] = "Set the flag ''{$flagname}'' to the specified value"; } } return $desc; }
public static function AjaxReview() { global $wgUser, $wgOut, $wgRequest; $args = func_get_args(); if (wfReadOnly()) { return '<err#>' . wfMsgExt('revreview-failed', 'parseinline') . wfMsgExt('revreview-submission-invalid', 'parseinline'); } $tags = FlaggedRevs::getTags(); // Make review interface object $form = new RevisionReviewForm($wgUser); $title = null; // target page $editToken = ''; // edit token // Each ajax url argument is of the form param|val. // This means that there is no ugly order dependance. foreach ($args as $arg) { $set = explode('|', $arg, 2); if (count($set) != 2) { return '<err#>' . wfMsgExt('revreview-failed', 'parseinline') . wfMsgExt('revreview-submission-invalid', 'parseinline'); } list($par, $val) = $set; switch ($par) { case "target": $title = Title::newFromURL($val); break; case "oldid": $form->setOldId($val); break; case "refid": $form->setRefId($val); break; case "validatedParams": $form->setValidatedParams($val); break; case "templateParams": $form->setTemplateParams($val); break; case "imageParams": $form->setFileParams($val); break; case "fileVersion": $form->setFileVersion($val); break; case "wpApprove": $form->setApprove($val); break; case "wpUnapprove": $form->setUnapprove($val); break; case "wpReject": $form->setReject($val); break; case "wpReason": $form->setComment($val); break; case "changetime": $form->setLastChangeTime($val); break; case "wpEditToken": $editToken = $val; break; default: $p = preg_replace('/^wp/', '', $par); // kill any "wp" prefix if (in_array($p, $tags)) { $form->setDim($p, $val); } break; } } # Valid target title? if (!$title) { return '<err#>' . wfMsgExt('notargettext', 'parseinline'); } $form->setPage($title); $form->setSessionKey($wgRequest->getSessionData('wsFlaggedRevsKey')); $status = $form->ready(); // all params loaded # Check session via user token if (!$wgUser->matchEditToken($editToken)) { return '<err#>' . wfMsgExt('sessionfailure', 'parseinline'); } # Basic permission checks... $permErrors = $title->getUserPermissionsErrors('review', $wgUser, false); if (!$permErrors) { $permErrors = $title->getUserPermissionsErrors('edit', $wgUser, false); } if ($permErrors) { return '<err#>' . $wgOut->parse($wgOut->formatPermissionsErrorMessage($permErrors, 'review')); } # Try submission... $status = $form->submit(); # Success... if ($status === true) { # Sent new lastChangeTime TS to client for later submissions... $changeTime = $form->getNewLastChangeTime(); if ($form->getAction() === 'approve') { // approve return "<suc#><lct#{$changeTime}>"; } elseif ($form->getAction() === 'unapprove') { // de-approve return "<suc#><lct#{$changeTime}>"; } elseif ($form->getAction() === 'reject') { // revert return "<suc#><lct#{$changeTime}>"; } # Failure... } else { return '<err#>' . wfMsgExt('revreview-failed', 'parse') . '<p>' . wfMsgHtml($status) . '</p>'; } }
/** * @param array $flags * @param bool $prettybox * @param string $css, class to wrap box in * @return string * Generates a review box/tag */ public static function addTagRatings($flags, $prettyBox = false, $css = '') { $tag = ''; if ($prettyBox) { $tag .= "<table id='mw-fr-revisionratings-box' align='center' class='{$css}' cellpadding='0'>"; } foreach (FlaggedRevs::getTags() as $quality) { $level = isset($flags[$quality]) ? $flags[$quality] : 0; $encValueText = wfMsgHtml("revreview-{$quality}-{$level}"); $level = $flags[$quality]; $levelmarker = $level * 20 + 20; if ($prettyBox) { $tag .= "<tr><td class='fr-text' valign='middle'>" . wfMsgHtml("revreview-{$quality}") . "</td><td class='fr-value{$levelmarker}' valign='middle'>" . $encValueText . "</td></tr>\n"; } else { $tag .= " <span class='fr-marker-{$levelmarker}'><strong>" . wfMsgHtml("revreview-{$quality}") . "</strong>: <span class='fr-text-value'>{$encValueText} </span> " . "</span>\n"; } } if ($prettyBox) { $tag .= '</table>'; } return $tag; }
/** * Get flags for a revision * @param string $tags * @return array */ public static function expandRevisionTags($tags) { $flags = array(); foreach (FlaggedRevs::getTags() as $tag) { $flags[$tag] = 0; // init all flags values to zero } $tags = str_replace('\\n', "\n", $tags); // B/C, old broken rows // Tag string format is <tag:val\ntag:val\n...> $tags = explode("\n", $tags); foreach ($tags as $tuple) { $set = explode(':', $tuple, 2); if (count($set) == 2) { list($tag, $value) = $set; $value = max(0, (int) $value); // validate # Add only currently recognized tags if (isset($flags[$tag])) { $levels = FlaggedRevs::getTagLevels($tag); # If a level was removed, default to the highest... $flags[$tag] = min($value, count($levels) - 1); } } } return $flags; }
/** * @param array $flags * @param bool $prettyBox * @param string $css, class to wrap box in * @return string * Generates a review box/tag */ public static function addTagRatings($flags, $prettyBox = false, $css = '') { $tag = ''; if ($prettyBox) { $tag .= "<table id='mw-fr-revisionratings-box' align='center' class='{$css}' cellpadding='0'>"; } foreach (FlaggedRevs::getTags() as $quality) { // Give grep a chance to find the usages: // revreview-accuracy-0, revreview-accuracy-1, revreview-accuracy-2, revreview-accuracy-3, revreview-accuracy-4, // revreview-depth-0, revreview-depth-1, revreview-depth-2, revreview-depth-3, revreview-depth-4, // revreview-style-0, revreview-style-1, revreview-style-2, revreview-style-3, revreview-style-4 $level = isset($flags[$quality]) ? $flags[$quality] : 0; $encValueText = wfMessage("revreview-{$quality}-{$level}")->escaped(); $level = $flags[$quality]; $levelmarker = $level * 20 + 20; if ($prettyBox) { // Give grep a chance to find the usages: // revreview-accuracy, revreview-depth, revreview-style $tag .= "<tr><td class='fr-text' valign='middle'>" . wfMessage("revreview-{$quality}")->escaped() . "</td><td class='fr-value{$levelmarker}' valign='middle'>" . $encValueText . "</td></tr>\n"; } else { // Give grep a chance to find the usages: // revreview-accuracy, revreview-depth, revreview-style $tag .= " <span class='fr-marker-{$levelmarker}'><strong>" . wfMessage("revreview-{$quality}")->escaped() . "</strong>: <span class='fr-text-value'>{$encValueText} </span> " . "</span>\n"; } } if ($prettyBox) { $tag .= '</table>'; } return $tag; }
/** * @param User $user * @param array $flags, selected flags * @param bool $disabled, form disabled * @param bool $reviewed, rev already reviewed * @return string * Generates a main tag inputs (checkboxes/radios/selects) for review form */ protected static function ratingInputs($user, $flags, $disabled, $reviewed) { # Get all available tags for this page/user list($labels, $minLevels) = self::ratingFormTags($user, $flags); if ($labels === false) { $disabled = true; // a tag is unsettable } # If there are no tags, make one checkbox to approve/unapprove if (FlaggedRevs::binaryFlagging()) { return ''; } $items = array(); # Build rating form... if ($disabled) { // Display the value for each tag as text foreach (FlaggedRevs::getTags() as $quality) { $selected = isset($flags[$quality]) ? $flags[$quality] : 0; $items[] = FlaggedRevs::getTagMsg($quality) . ": " . FlaggedRevs::getTagValueMsg($quality, $selected); } } else { $size = count($labels, 1) - count($labels); foreach ($labels as $quality => $levels) { $item = ''; $numLevels = count($levels); $minLevel = $minLevels[$quality]; # Determine the level selected by default if (!empty($flags[$quality]) && isset($levels[$flags[$quality]])) { $selected = $flags[$quality]; // valid non-zero value } else { $selected = $minLevel; } # Show label as needed if (!FlaggedRevs::binaryFlagging()) { $item .= Xml::tags('label', array('for' => "wp{$quality}"), FlaggedRevs::getTagMsg($quality)) . ":\n"; } # If the sum of qualities of all flags is above 6, use drop down boxes. # 6 is an arbitrary value choosen according to screen space and usability. if ($size > 6) { $attribs = array('name' => "wp{$quality}", 'id' => "wp{$quality}"); $item .= Xml::openElement('select', $attribs) . "\n"; foreach ($levels as $i => $name) { $optionClass = array('class' => "fr-rating-option-{$i}"); $item .= Xml::option(FlaggedRevs::getTagMsg($name), $i, $i == $selected, $optionClass) . "\n"; } $item .= Xml::closeElement('select') . "\n"; # If there are more than two levels, current user gets radio buttons } elseif ($numLevels > 2) { foreach ($levels as $i => $name) { $attribs = array('class' => "fr-rating-option-{$i}"); $item .= Xml::radioLabel(FlaggedRevs::getTagMsg($name), "wp{$quality}", $i, "wp{$quality}" . $i, $i == $selected, $attribs) . "\n"; } # Otherwise make checkboxes (two levels available for current user) } elseif ($numLevels == 2) { $i = $minLevel; $attribs = array('class' => "fr-rating-option-{$i}"); $attribs = $attribs + array('value' => $i); $item .= Xml::checkLabel(wfMessage('revreview-' . $levels[$i])->text(), "wp{$quality}", "wp{$quality}", $selected == $i, $attribs) . "\n"; } $items[] = $item; } } return implode('   ', $items); }