/** * When an user makes a null-edit we sometimes want to review it... * (a) Null undo or rollback * (b) Null edit with review box checked * Note: called after edit ops are finished */ public static function maybeNullEditReview(Page $article, $user, $text, $s, $m, $a, $b, $flags, $rev, &$status, $baseId) { global $wgRequest; # Revision must *be* null (null edit). We also need the user who made the edit. if (!$user || $rev !== null) { return true; } # Rollback/undo or box checked $reviewEdit = $wgRequest->getCheck('wpReviewEdit'); if (!$baseId && !$reviewEdit) { return true; // short-circuit } $fa = FlaggableWikiPage::getTitleInstance($article->getTitle()); $fa->loadPageData('fromdbmaster'); if (!$fa->isReviewable()) { return true; // page is not reviewable } $title = $article->getTitle(); // convenience # Get the current revision ID $rev = Revision::newFromTitle($title, false, Revision::READ_LATEST); if (!$rev) { return true; // wtf? } $flags = null; # Is this a rollback/undo that didn't change anything? if ($baseId > 0) { $frev = FlaggedRevision::newFromTitle($title, $baseId); // base rev of null edit $pRev = Revision::newFromId($rev->getParentId()); // current rev parent $revIsNull = $pRev && $pRev->getTextId() == $rev->getTextId(); # Was the edit that we tried to revert to reviewed? # We avoid auto-reviewing null edits to avoid confusion (bug 28476). if ($frev && !$revIsNull) { # Review this revision of the page... $ok = FlaggedRevs::autoReviewEdit($article, $user, $rev, $flags); if ($ok) { FlaggedRevs::markRevisionPatrolled($rev); // reviewed -> patrolled FlaggedRevs::extraHTMLCacheUpdate($title); return true; } } } # Get edit timestamp, it must exist. $editTimestamp = $wgRequest->getVal('wpEdittime'); # Is the page checked off to be reviewed? if ($editTimestamp && $reviewEdit && $title->userCan('review')) { # Check wpEdittime against current revision's time. # If an edit was auto-merged in between, review only up to what # was the current rev when this user started editing the page. if ($rev->getTimestamp() != $editTimestamp) { $dbw = wfGetDB(DB_MASTER); $rev = Revision::loadFromTimestamp($dbw, $title, $editTimestamp); if (!$rev) { return true; // deleted? } } # Review this revision of the page... $ok = FlaggedRevs::autoReviewEdit($article, $user, $rev, $flags, false); if ($ok) { FlaggedRevs::markRevisionPatrolled($rev); // reviewed -> patrolled FlaggedRevs::extraHTMLCacheUpdate($title); } } return true; }