/** * Get collapsible diff-to-stable html to add to the review notice as needed * @param FlaggedRevision $srev, stable version * @param bool $quality, revision is quality * @return string, the html line (either "" or "<diff toggle><diff div>") */ protected function getTopDiffToggle(FlaggedRevision $srev, $quality) { $reqUser = $this->getUser(); $this->load(); if (!$reqUser->getBoolOption('flaggedrevsviewdiffs')) { return false; // nothing to do here } # Diff should only show for the draft $oldid = $this->getOldIDFromRequest(); $latest = $this->article->getLatest(); if ($oldid && $oldid != $latest) { return false; // not viewing the draft } $revsSince = $this->article->getPendingRevCount(); if (!$revsSince) { return false; // no pending changes } $title = $this->article->getTitle(); // convenience # Review status of left diff revision... $leftNote = $quality ? 'revreview-hist-quality' : 'revreview-hist-basic'; $lClass = FlaggedRevsXML::getQualityColor((int) $quality); $leftNote = "<span class='{$lClass}'>[" . wfMsgHtml($leftNote) . "]</span>"; # Review status of right diff revision... $rClass = FlaggedRevsXML::getQualityColor(false); $rightNote = "<span class='{$rClass}'>[" . wfMsgHtml('revreview-hist-pending') . "]</span>"; # Get the actual body of the diff... $diffEngine = new DifferenceEngine($title, $srev->getRevId(), $latest); $diffBody = $diffEngine->getDiffBody(); if (strlen($diffBody) > 0) { $nEdits = $revsSince - 1; // full diff-to-stable, no need for query if ($nEdits) { $limit = 100; $nUsers = $title->countAuthorsBetween($srev->getRevId(), $latest, $limit); $multiNotice = DifferenceEngine::intermediateEditsMsg($nEdits, $nUsers, $limit); } else { $multiNotice = ''; } $diffEngine->showDiffStyle(); // add CSS $this->isDiffFromStable = true; // alter default review form tags return FlaggedRevsXML::diffToggle() . "<div id='mw-fr-stablediff'>\n" . self::getFormattedDiff($diffBody, $multiNotice, $leftNote, $rightNote) . "</div>\n"; } return ''; }