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);
 }
Exemplo n.º 2
0
 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 .= "&#160;<span class='fr-marker-{$levelmarker}'><strong>" . wfMsgHtml("revreview-{$quality}") . "</strong>: <span class='fr-text-value'>{$encValueText}&#160;</span>&#160;" . "</span>\n";
         }
     }
     if ($prettyBox) {
         $tag .= '</table>';
     }
     return $tag;
 }
Exemplo n.º 5
0
 /**
  * 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;
 }
Exemplo n.º 6
0
 /**
  * @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 .= "&#160;<span class='fr-marker-{$levelmarker}'><strong>" . wfMessage("revreview-{$quality}")->escaped() . "</strong>: <span class='fr-text-value'>{$encValueText}&#160;</span>&#160;" . "</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('&#160;&#160;&#160;', $items);
 }