本文整理汇总了PHP中Revision::selectFields方法的典型用法代码示例。如果您正苦于以下问题:PHP Revision::selectFields方法的具体用法?PHP Revision::selectFields怎么用?PHP Revision::selectFields使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Revision
的用法示例。
在下文中一共展示了Revision::selectFields方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: populateSearchIndex
/**
* Populates the search index with content from all pages
*/
protected function populateSearchIndex()
{
$res = $this->db->select('page', 'MAX(page_id) AS count');
$s = $this->db->fetchObject($res);
$count = $s->count;
$this->output("Rebuilding index fields for {$count} pages...\n");
$n = 0;
$fields = array_merge(Revision::selectPageFields(), Revision::selectFields(), Revision::selectTextFields());
while ($n < $count) {
if ($n) {
$this->output($n . "\n");
}
$end = $n + self::RTI_CHUNK_SIZE - 1;
$res = $this->db->select(['page', 'revision', 'text'], $fields, ["page_id BETWEEN {$n} AND {$end}", 'page_latest = rev_id', 'rev_text_id = old_id'], __METHOD__);
foreach ($res as $s) {
try {
$title = Title::makeTitle($s->page_namespace, $s->page_title);
$rev = new Revision($s);
$content = $rev->getContent();
$u = new SearchUpdate($s->page_id, $title, $content);
$u->doUpdate();
} catch (MWContentSerializationException $ex) {
$this->output("Failed to deserialize content of revision {$s->rev_id} of page " . "`" . $title->getPrefixedDBkey() . "`!\n");
}
}
$n += self::RTI_CHUNK_SIZE;
}
}
示例2: doQuery
/**
* @param IDatabase $db
* @return mixed
*/
public function doQuery($db)
{
$ids = array_map('intval', $this->ids);
$queryInfo = ['tables' => ['revision', 'user'], 'fields' => array_merge(Revision::selectFields(), Revision::selectUserFields()), 'conds' => ['rev_page' => $this->title->getArticleID(), 'rev_id' => $ids], 'options' => ['ORDER BY' => 'rev_id DESC'], 'join_conds' => ['page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond()]];
ChangeTags::modifyDisplayQuery($queryInfo['tables'], $queryInfo['fields'], $queryInfo['conds'], $queryInfo['join_conds'], $queryInfo['options'], '');
$live = $db->select($queryInfo['tables'], $queryInfo['fields'], $queryInfo['conds'], __METHOD__, $queryInfo['options'], $queryInfo['join_conds']);
if ($live->numRows() >= count($ids)) {
// All requested revisions are live, keeps things simple!
return $live;
}
$archiveQueryInfo = ['tables' => ['archive'], 'fields' => Revision::selectArchiveFields(), 'conds' => ['ar_rev_id' => $ids], 'options' => ['ORDER BY' => 'ar_rev_id DESC'], 'join_conds' => []];
ChangeTags::modifyDisplayQuery($archiveQueryInfo['tables'], $archiveQueryInfo['fields'], $archiveQueryInfo['conds'], $archiveQueryInfo['join_conds'], $archiveQueryInfo['options'], '');
// Check if any requested revisions are available fully deleted.
$archived = $db->select($archiveQueryInfo['tables'], $archiveQueryInfo['fields'], $archiveQueryInfo['conds'], __METHOD__, $archiveQueryInfo['options'], $archiveQueryInfo['join_conds']);
if ($archived->numRows() == 0) {
return $live;
} elseif ($live->numRows() == 0) {
return $archived;
} else {
// Combine the two! Whee
$rows = [];
foreach ($live as $row) {
$rows[$row->rev_id] = $row;
}
foreach ($archived as $row) {
$rows[$row->ar_rev_id] = $row;
}
krsort($rows);
return new FakeResultWrapper(array_values($rows));
}
}
示例3: doQuery
/**
* @param $db DatabaseBase
* @return mixed
*/
public function doQuery($db)
{
$ids = array_map('intval', $this->ids);
$live = $db->select(array('revision', 'page', 'user'), array_merge(Revision::selectFields(), Revision::selectUserFields()), array('rev_page' => $this->title->getArticleID(), 'rev_id' => $ids), __METHOD__, array('ORDER BY' => 'rev_id DESC'), array('page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond()));
if ($live->numRows() >= count($ids)) {
// All requested revisions are live, keeps things simple!
return $live;
}
// Check if any requested revisions are available fully deleted.
$archived = $db->select(array('archive'), '*', array('ar_rev_id' => $ids), __METHOD__, array('ORDER BY' => 'ar_rev_id DESC'));
if ($archived->numRows() == 0) {
return $live;
} elseif ($live->numRows() == 0) {
return $archived;
} else {
// Combine the two! Whee
$rows = array();
foreach ($live as $row) {
$rows[$row->rev_id] = $row;
}
foreach ($archived as $row) {
$rows[$row->ar_rev_id] = $row;
}
krsort($rows);
return new FakeResultWrapper(array_values($rows));
}
}
示例4: getQueryInfo
function getQueryInfo()
{
$conds = $this->mConds;
$conds['rev_page'] = $this->articleID;
$conds[] = "rev_timestamp < " . $this->mDb->addQuotes($this->maxTimestamp);
return ['tables' => ['revision', 'page', 'user'], 'fields' => array_merge(Revision::selectFields(), Revision::selectUserFields()), 'conds' => $conds, 'join_conds' => ['page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond()]];
}
示例5: doQuery
/**
* @param IDatabase $db
* @return mixed
*/
public function doQuery($db)
{
$ids = array_map('intval', $this->ids);
$queryInfo = array('tables' => array('revision', 'user'), 'fields' => array_merge(Revision::selectFields(), Revision::selectUserFields()), 'conds' => array('rev_page' => $this->title->getArticleID(), 'rev_id' => $ids), 'options' => array('ORDER BY' => 'rev_id DESC'), 'join_conds' => array('page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond()));
ChangeTags::modifyDisplayQuery($queryInfo['tables'], $queryInfo['fields'], $queryInfo['conds'], $queryInfo['join_conds'], $queryInfo['options'], '');
return $db->select($queryInfo['tables'], $queryInfo['fields'], $queryInfo['conds'], __METHOD__, $queryInfo['options'], $queryInfo['join_conds']);
}
示例6: testSelectFields
/**
* @covers Revision::selectFields
*/
public function testSelectFields()
{
$fields = Revision::selectFields();
$this->assertTrue(in_array('rev_id', $fields), 'missing rev_id in list of fields');
$this->assertTrue(in_array('rev_page', $fields), 'missing rev_page in list of fields');
$this->assertTrue(in_array('rev_timestamp', $fields), 'missing rev_timestamp in list of fields');
$this->assertTrue(in_array('rev_user', $fields), 'missing rev_user in list of fields');
$this->assertFalse(in_array('rev_content_model', $fields), 'missing rev_content_model in list of fields');
$this->assertFalse(in_array('rev_content_format', $fields), 'missing rev_content_format in list of fields');
}
示例7: execute
public function execute()
{
$db = wfGetDB(DB_MASTER);
if (!$db->tableExists('revision')) {
$this->error("revision table does not exist", true);
}
$this->output("Populating rev_len column\n");
$start = $db->selectField('revision', 'MIN(rev_id)', false, __FUNCTION__);
$end = $db->selectField('revision', 'MAX(rev_id)', false, __FUNCTION__);
if (is_null($start) || is_null($end)) {
$this->output("...revision table seems to be empty.\n");
$db->insert('updatelog', array('ul_key' => 'populate rev_len'), __METHOD__, 'IGNORE');
return;
}
# Do remaining chunks
$blockStart = intval($start);
$blockEnd = intval($start) + $this->mBatchSize - 1;
$count = 0;
$missing = 0;
while ($blockStart <= $end) {
$this->output("...doing rev_id from {$blockStart} to {$blockEnd}\n");
$res = $db->select('revision', Revision::selectFields(), array("rev_id >= {$blockStart}", "rev_id <= {$blockEnd}", "rev_len IS NULL"), __METHOD__);
# Go through and update rev_len from these rows.
foreach ($res as $row) {
$rev = new Revision($row);
$text = $rev->getRawText();
if (!is_string($text)) {
# This should not happen, but sometimes does (bug 20757)
$this->output("Text of revision {$row->rev_id} unavailable!\n");
$missing++;
} else {
# Update the row...
$db->update('revision', array('rev_len' => strlen($text)), array('rev_id' => $row->rev_id), __METHOD__);
$count++;
}
}
$blockStart += $this->mBatchSize;
$blockEnd += $this->mBatchSize;
wfWaitForSlaves(5);
}
$logged = $db->insert('updatelog', array('ul_key' => 'populate rev_len'), __METHOD__, 'IGNORE');
if ($logged) {
$this->output("rev_len population complete ... {$count} rows changed ({$missing} missing)\n");
return true;
} else {
$this->output("Could not insert rev_len population row.\n");
return false;
}
}
示例8: doDBUpdates
public function doDBUpdates()
{
$db = $this->getDB(DB_MASTER);
if (!$db->tableExists('revision')) {
$this->error("revision table does not exist", true);
} else {
if (!$db->fieldExists('revision', 'rev_sha1', __METHOD__)) {
$this->output("rev_sha1 column does not exist\n\n", true);
return false;
}
}
$this->output("Populating rev_len column\n");
$start = $db->selectField('revision', 'MIN(rev_id)', false, __METHOD__);
$end = $db->selectField('revision', 'MAX(rev_id)', false, __METHOD__);
if (!$start || !$end) {
$this->output("...revision table seems to be empty.\n");
return true;
}
# Do remaining chunks
$blockStart = intval($start);
$blockEnd = intval($start) + $this->mBatchSize - 1;
$count = 0;
$missing = 0;
$fields = Revision::selectFields();
while ($blockStart <= $end) {
$this->output("...doing rev_id from {$blockStart} to {$blockEnd}\n");
$res = $db->select('revision', $fields, array("rev_id >= {$blockStart}", "rev_id <= {$blockEnd}", "rev_len IS NULL"), __METHOD__);
# Go through and update rev_len from these rows.
foreach ($res as $row) {
$rev = new Revision($row);
$content = $rev->getContent();
if (!$content) {
# This should not happen, but sometimes does (bug 20757)
$this->output("Content of revision {$row->rev_id} unavailable!\n");
$missing++;
} else {
# Update the row...
$db->update('revision', array('rev_len' => $content->getSize()), array('rev_id' => $row->rev_id), __METHOD__);
$count++;
}
}
$blockStart += $this->mBatchSize;
$blockEnd += $this->mBatchSize;
wfWaitForSlaves();
}
$this->output("rev_len population complete ... {$count} rows changed ({$missing} missing)\n");
return true;
}
示例9: execute
public function execute()
{
global $wgUser;
$dbr = wfGetDB(DB_SLAVE);
$ret = $dbr->select(array('flaggedpages', 'revision', 'page'), array_merge(Revision::selectFields(), array($dbr->tableName('page') . '.*')), array('fp_pending_since IS NOT NULL', 'page_id = fp_page_id', 'rev_page = fp_page_id', 'rev_timestamp >= fp_pending_since'), __METHOD__, array('ORDER BY' => 'fp_pending_since DESC'));
foreach ($ret as $row) {
$title = Title::newFromRow($row);
$article = new Article($title);
$rev = new Revision($row);
// Trigger cache regeneration
$start = microtime(true);
FRInclusionCache::getRevIncludes($article, $rev, $wgUser, 'regen');
$elapsed = intval((microtime(true) - $start) * 1000);
$this->cachePendingRevsLog($title->getPrefixedDBkey() . " rev:" . $rev->getId() . " {$elapsed}ms");
}
}
示例10: run
public function run()
{
$page = WikiPage::newFromID($this->params['pageId'], WikiPage::READ_LATEST);
if (!$page) {
$this->setLastError("Could not find page #{$this->params['pageId']}");
return false;
// deleted?
}
$dbw = wfGetDB(DB_MASTER);
// Use a named lock so that jobs for this page see each others' changes
$lockKey = "CategoryMembershipUpdates:{$page->getId()}";
$scopedLock = $dbw->getScopedLockAndFlush($lockKey, __METHOD__, 10);
if (!$scopedLock) {
$this->setLastError("Could not acquire lock '{$lockKey}'");
return false;
}
$dbr = wfGetDB(DB_SLAVE, ['recentchanges']);
// Wait till the slave is caught up so that jobs for this page see each others' changes
if (!wfGetLB()->safeWaitForMasterPos($dbr)) {
$this->setLastError("Timed out while waiting for slave to catch up");
return false;
}
// Clear any stale REPEATABLE-READ snapshot
$dbr->commit(__METHOD__, 'flush');
$cutoffUnix = wfTimestamp(TS_UNIX, $this->params['revTimestamp']);
// Using ENQUEUE_FUDGE_SEC handles jobs inserted out of revision order due to the delay
// between COMMIT and actual enqueueing of the CategoryMembershipChangeJob job.
$cutoffUnix -= self::ENQUEUE_FUDGE_SEC;
// Get the newest revision that has a SRC_CATEGORIZE row...
$row = $dbr->selectRow(['revision', 'recentchanges'], ['rev_timestamp', 'rev_id'], ['rev_page' => $page->getId(), 'rev_timestamp >= ' . $dbr->addQuotes($dbr->timestamp($cutoffUnix))], __METHOD__, ['ORDER BY' => 'rev_timestamp DESC, rev_id DESC'], ['recentchanges' => ['INNER JOIN', ['rc_this_oldid = rev_id', 'rc_source' => RecentChange::SRC_CATEGORIZE, 'rc_cur_id = rev_page', 'rc_timestamp >= rev_timestamp']]]);
// Only consider revisions newer than any such revision
if ($row) {
$cutoffUnix = wfTimestamp(TS_UNIX, $row->rev_timestamp);
$lastRevId = (int) $row->rev_id;
} else {
$lastRevId = 0;
}
// Find revisions to this page made around and after this revision which lack category
// notifications in recent changes. This lets jobs pick up were the last one left off.
$encCutoff = $dbr->addQuotes($dbr->timestamp($cutoffUnix));
$res = $dbr->select('revision', Revision::selectFields(), ['rev_page' => $page->getId(), "rev_timestamp > {$encCutoff}" . " OR (rev_timestamp = {$encCutoff} AND rev_id > {$lastRevId})"], __METHOD__, ['ORDER BY' => 'rev_timestamp ASC, rev_id ASC']);
// Apply all category updates in revision timestamp order
foreach ($res as $row) {
$this->notifyUpdatesForRevision($page, Revision::newFromRow($row));
}
return true;
}
示例11: run
public function run()
{
$page = WikiPage::newFromID($this->params['pageId'], WikiPage::READ_LATEST);
if (!$page) {
$this->setLastError("Could not find page #{$this->params['pageId']}");
return false;
// deleted?
}
$dbw = wfGetDB(DB_MASTER);
// Use a named lock so that jobs for this page see each others' changes
$fname = __METHOD__;
$lockKey = "CategoryMembershipUpdates:{$page->getId()}";
if (!$dbw->lock($lockKey, $fname, 10)) {
$this->setLastError("Could not acquire lock '{$lockKey}'");
return false;
}
$unlocker = new ScopedCallback(function () use($dbw, $lockKey, $fname) {
$dbw->unlock($lockKey, $fname);
});
// Sanity: clear any DB transaction snapshot
$dbw->commit(__METHOD__, 'flush');
$cutoffUnix = wfTimestamp(TS_UNIX, $this->params['revTimestamp']);
// Using ENQUEUE_FUDGE_SEC handles jobs inserted out of revision order due to the delay
// between COMMIT and actual enqueueing of the CategoryMembershipChangeJob job.
$cutoffUnix -= self::ENQUEUE_FUDGE_SEC;
// Get the newest revision that has a SRC_CATEGORIZE row...
$row = $dbw->selectRow(array('revision', 'recentchanges'), array('rev_timestamp', 'rev_id'), array('rev_page' => $page->getId(), 'rev_timestamp >= ' . $dbw->addQuotes($dbw->timestamp($cutoffUnix))), __METHOD__, array('ORDER BY' => 'rev_timestamp DESC, rev_id DESC'), array('recentchanges' => array('INNER JOIN', array('rc_this_oldid = rev_id', 'rc_source' => RecentChange::SRC_CATEGORIZE, 'rc_cur_id = rev_page', 'rc_timestamp >= rev_timestamp'))));
// Only consider revisions newer than any such revision
if ($row) {
$cutoffUnix = wfTimestamp(TS_UNIX, $row->rev_timestamp);
$lastRevId = (int) $row->rev_id;
} else {
$lastRevId = 0;
}
// Find revisions to this page made around and after this revision which lack category
// notifications in recent changes. This lets jobs pick up were the last one left off.
$encCutoff = $dbw->addQuotes($dbw->timestamp($cutoffUnix));
$res = $dbw->select('revision', Revision::selectFields(), array('rev_page' => $page->getId(), "rev_timestamp > {$encCutoff}" . " OR (rev_timestamp = {$encCutoff} AND rev_id > {$lastRevId})"), __METHOD__, array('ORDER BY' => 'rev_timestamp ASC, rev_id ASC'));
// Apply all category updates in revision timestamp order
foreach ($res as $row) {
$this->notifyUpdatesForRevision($page, Revision::newFromRow($row));
}
ScopedCallback::consume($unlocker);
return true;
}
示例12: doDBUpdates
public function doDBUpdates()
{
$db = $this->getDB(DB_MASTER);
if (!$db->tableExists('revision')) {
$this->error("revision table does not exist", true);
} elseif (!$db->tableExists('archive')) {
$this->error("archive table does not exist", true);
} elseif (!$db->fieldExists('revision', 'rev_len', __METHOD__)) {
$this->output("rev_len column does not exist\n\n", true);
return false;
}
$this->output("Populating rev_len column\n");
$rev = $this->doLenUpdates('revision', 'rev_id', 'rev', Revision::selectFields());
$this->output("Populating ar_len column\n");
$ar = $this->doLenUpdates('archive', 'ar_id', 'ar', Revision::selectArchiveFields());
$this->output("rev_len and ar_len population complete [{$rev} revision rows, {$ar} archive rows].\n");
return true;
}
示例13: EditOwn
function EditOwn($title, $user, $action, &$result)
{
static $cache = array();
global $wgEditOwnExcludedNamespaces, $wgEditOwnActions;
if (!is_array($wgEditOwnExcludedNamespaces)) {
// Prevent PHP from whining
$wgEditOwnExcludedNamespaces = array();
}
if (!in_array($action, $wgEditOwnActions) || $user->isAllowed('editall') || in_array($title->getNamespace(), $wgEditOwnExcludedNamespaces)) {
$result = null;
return true;
}
if (isset($cache[$user->getName()][$title->getArticleId()])) {
$result = $cache[$user->getName()][$title->getArticleId()];
return is_null($result);
}
if (!$title->exists()) {
// Creation is allowed
$cache[$user->getName()][$title->getArticleId()] = null;
$result = null;
return true;
}
// Since there's no easy way to get the first revision,
// we'll just do a DB query
$dbr = wfGetDb(DB_SLAVE);
$res = $dbr->select('revision', Revision::selectFields(), array('rev_page' => $title->getArticleId()), __METHOD__, array('ORDER BY' => 'rev_timestamp', 'LIMIT' => 1));
$row = $dbr->fetchObject($res);
if (!$row) {
// Title with no revs, weird... allow creation
$cache[$user->getName()][$title->getArticleId()] = null;
$result = null;
return true;
}
$rev = new Revision($row);
if ($user->getName() == $rev->getRawUserText()) {
$cache[$user->getName()][$title->getArticleId()] = null;
$result = null;
return true;
}
$cache[$user->getName()][$title->getArticleId()] = false;
$result = false;
return false;
}
示例14: doQuery
/**
* @param IDatabase $db
* @return mixed
*/
public function doQuery($db)
{
$conds = ['rev_page' => $this->title->getArticleID()];
if ($this->ids !== null) {
$conds['rev_id'] = array_map('intval', $this->ids);
}
return $db->select(['revision', 'page', 'user'], array_merge(Revision::selectFields(), Revision::selectUserFields()), $conds, __METHOD__, ['ORDER BY' => 'rev_id DESC'], ['page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond()]);
}
示例15: doDeleteArticleReal
/**
* Back-end article deletion
* Deletes the article with database consistency, writes logs, purges caches
*
* @since 1.19
*
* @param string $reason Delete reason for deletion log
* @param bool $suppress Suppress all revisions and log the deletion in
* the suppression log instead of the deletion log
* @param int $u1 Unused
* @param bool $u2 Unused
* @param array|string &$error Array of errors to append to
* @param User $user The deleting user
* @param array $tags Tags to apply to the deletion action
* @return Status Status object; if successful, $status->value is the log_id of the
* deletion log entry. If the page couldn't be deleted because it wasn't
* found, $status is a non-fatal 'cannotdelete' error
*/
public function doDeleteArticleReal($reason, $suppress = false, $u1 = null, $u2 = null, &$error = '', User $user = null, $tags = [])
{
global $wgUser, $wgContentHandlerUseDB;
wfDebug(__METHOD__ . "\n");
$status = Status::newGood();
if ($this->mTitle->getDBkey() === '') {
$status->error('cannotdelete', wfEscapeWikiText($this->getTitle()->getPrefixedText()));
return $status;
}
$user = is_null($user) ? $wgUser : $user;
if (!Hooks::run('ArticleDelete', [&$this, &$user, &$reason, &$error, &$status, $suppress])) {
if ($status->isOK()) {
// Hook aborted but didn't set a fatal status
$status->fatal('delete-hook-aborted');
}
return $status;
}
$dbw = wfGetDB(DB_MASTER);
$dbw->startAtomic(__METHOD__);
$this->loadPageData(self::READ_LATEST);
$id = $this->getId();
// T98706: lock the page from various other updates but avoid using
// WikiPage::READ_LOCKING as that will carry over the FOR UPDATE to
// the revisions queries (which also JOIN on user). Only lock the page
// row and CAS check on page_latest to see if the trx snapshot matches.
$lockedLatest = $this->lockAndGetLatest();
if ($id == 0 || $this->getLatest() != $lockedLatest) {
$dbw->endAtomic(__METHOD__);
// Page not there or trx snapshot is stale
$status->error('cannotdelete', wfEscapeWikiText($this->getTitle()->getPrefixedText()));
return $status;
}
// Given the lock above, we can be confident in the title and page ID values
$namespace = $this->getTitle()->getNamespace();
$dbKey = $this->getTitle()->getDBkey();
// At this point we are now comitted to returning an OK
// status unless some DB query error or other exception comes up.
// This way callers don't have to call rollback() if $status is bad
// unless they actually try to catch exceptions (which is rare).
// we need to remember the old content so we can use it to generate all deletion updates.
$revision = $this->getRevision();
try {
$content = $this->getContent(Revision::RAW);
} catch (Exception $ex) {
wfLogWarning(__METHOD__ . ': failed to load content during deletion! ' . $ex->getMessage());
$content = null;
}
$fields = Revision::selectFields();
$bitfield = false;
// Bitfields to further suppress the content
if ($suppress) {
$bitfield = Revision::SUPPRESSED_ALL;
$fields = array_diff($fields, ['rev_deleted']);
}
// For now, shunt the revision data into the archive table.
// Text is *not* removed from the text table; bulk storage
// is left intact to avoid breaking block-compression or
// immutable storage schemes.
// In the future, we may keep revisions and mark them with
// the rev_deleted field, which is reserved for this purpose.
// Get all of the page revisions
$res = $dbw->select('revision', $fields, ['rev_page' => $id], __METHOD__, 'FOR UPDATE');
// Build their equivalent archive rows
$rowsInsert = [];
foreach ($res as $row) {
$rowInsert = ['ar_namespace' => $namespace, 'ar_title' => $dbKey, 'ar_comment' => $row->rev_comment, 'ar_user' => $row->rev_user, 'ar_user_text' => $row->rev_user_text, 'ar_timestamp' => $row->rev_timestamp, 'ar_minor_edit' => $row->rev_minor_edit, 'ar_rev_id' => $row->rev_id, 'ar_parent_id' => $row->rev_parent_id, 'ar_text_id' => $row->rev_text_id, 'ar_text' => '', 'ar_flags' => '', 'ar_len' => $row->rev_len, 'ar_page_id' => $id, 'ar_deleted' => $suppress ? $bitfield : $row->rev_deleted, 'ar_sha1' => $row->rev_sha1];
if ($wgContentHandlerUseDB) {
$rowInsert['ar_content_model'] = $row->rev_content_model;
$rowInsert['ar_content_format'] = $row->rev_content_format;
}
$rowsInsert[] = $rowInsert;
}
// Copy them into the archive table
$dbw->insert('archive', $rowsInsert, __METHOD__);
// Save this so we can pass it to the ArticleDeleteComplete hook.
$archivedRevisionCount = $dbw->affectedRows();
// Clone the title and wikiPage, so we have the information we need when
// we log and run the ArticleDeleteComplete hook.
$logTitle = clone $this->mTitle;
$wikiPageBeforeDelete = clone $this;
// Now that it's safely backed up, delete it
$dbw->delete('page', ['page_id' => $id], __METHOD__);
//.........这里部分代码省略.........