本文整理汇总了PHP中Revision::newFromArchiveRow方法的典型用法代码示例。如果您正苦于以下问题:PHP Revision::newFromArchiveRow方法的具体用法?PHP Revision::newFromArchiveRow怎么用?PHP Revision::newFromArchiveRow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Revision
的用法示例。
在下文中一共展示了Revision::newFromArchiveRow方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: deletedLink
/**
* Look up a special:Undelete link to the given deleted revision id,
* as a workaround for being unable to load deleted diffs in currently.
*
* @param int $id revision ID
* @return mixed URL or false
*/
function deletedLink($id)
{
global $wgUser;
if ($wgUser->isAllowed('deletedhistory')) {
$dbr = wfGetDB(DB_SLAVE);
$row = $dbr->selectRow('archive', '*', array('ar_rev_id' => $id), __METHOD__);
if ($row) {
$rev = Revision::newFromArchiveRow($row);
$title = Title::makeTitleSafe($row->ar_namespace, $row->ar_title);
return SpecialPage::getTitleFor('Undelete')->getFullURL(array('target' => $title->getPrefixedText(), 'timestamp' => $rev->getTimestamp()));
}
}
return false;
}
示例2: formatRevisionRow
protected function formatRevisionRow($row, $earliestLiveTime, $remaining)
{
$rev = Revision::newFromArchiveRow($row, array('title' => $this->mTargetObj));
$revTextSize = '';
$ts = wfTimestamp(TS_MW, $row->ar_timestamp);
// Build checkboxen...
if ($this->mAllowed) {
if ($this->mInvert) {
if (in_array($ts, $this->mTargetTimestamp)) {
$checkBox = Xml::check("ts{$ts}");
} else {
$checkBox = Xml::check("ts{$ts}", true);
}
} else {
$checkBox = Xml::check("ts{$ts}");
}
} else {
$checkBox = '';
}
// Build page & diff links...
$user = $this->getUser();
if ($this->mCanView) {
$titleObj = $this->getPageTitle();
# Last link
if (!$rev->userCan(Revision::DELETED_TEXT, $this->getUser())) {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
} elseif ($remaining > 0 || $earliestLiveTime && $ts > $earliestLiveTime) {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = Linker::linkKnown($titleObj, $this->msg('diff')->escaped(), array(), array('target' => $this->mTargetObj->getPrefixedText(), 'timestamp' => $ts, 'diff' => 'prev'));
} else {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = $this->msg('diff')->escaped();
}
} else {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
}
// User links
$userLink = Linker::revUserTools($rev);
// Minor edit
$minor = $rev->isMinor() ? ChangesList::flag('minor') : '';
// Revision text size
$size = $row->ar_len;
if (!is_null($size)) {
$revTextSize = Linker::formatRevisionSize($size);
}
// Edit summary
$comment = Linker::revComment($rev);
// Tags
$attribs = array();
list($tagSummary, $classes) = ChangeTags::formatSummaryRow($row->ts_tags, 'deletedhistory');
if ($classes) {
$attribs['class'] = implode(' ', $classes);
}
// Revision delete links
$revdlink = Linker::getRevDeleteLink($user, $rev, $this->mTargetObj);
$revisionRow = $this->msg('undelete-revision-row')->rawParams($checkBox, $revdlink, $last, $pageLink, $userLink, $minor, $revTextSize, $comment, $tagSummary)->escaped();
return Xml::tags('li', $attribs, $revisionRow) . "\n";
}
示例3: __construct
public function __construct($list, $row)
{
RevDel_Item::__construct($list, $row);
$this->revision = Revision::newFromArchiveRow($row, array('page' => $this->list->title->getArticleID()));
}
示例4: run
//.........这里部分代码省略.........
}
if (!is_null($params['user'])) {
$this->addWhereFld('ar_user_text', $params['user']);
} elseif (!is_null($params['excludeuser'])) {
$this->addWhere('ar_user_text != ' . $db->addQuotes($params['excludeuser']));
}
if (!is_null($params['user']) || !is_null($params['excludeuser'])) {
// Paranoia: avoid brute force searches (bug 17342)
// (shouldn't be able to get here without 'deletedhistory', but
// check it again just in case)
if (!$user->isAllowed('deletedhistory')) {
$bitmask = Revision::DELETED_USER;
} elseif (!$user->isAllowedAny('suppressrevision', 'viewsuppressed')) {
$bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
} else {
$bitmask = 0;
}
if ($bitmask) {
$this->addWhere($db->bitAnd('ar_deleted', $bitmask) . " != {$bitmask}");
}
}
if (!is_null($params['continue'])) {
$cont = explode('|', $params['continue']);
$op = $dir == 'newer' ? '>' : '<';
if ($revCount !== 0) {
$this->dieContinueUsageIf(count($cont) != 2);
$rev = intval($cont[0]);
$this->dieContinueUsageIf(strval($rev) !== $cont[0]);
$ar_id = (int) $cont[1];
$this->dieContinueUsageIf(strval($ar_id) !== $cont[1]);
$this->addWhere("ar_rev_id {$op} {$rev} OR " . "(ar_rev_id = {$rev} AND " . "ar_id {$op}= {$ar_id})");
} else {
$this->dieContinueUsageIf(count($cont) != 4);
$ns = intval($cont[0]);
$this->dieContinueUsageIf(strval($ns) !== $cont[0]);
$title = $db->addQuotes($cont[1]);
$ts = $db->addQuotes($db->timestamp($cont[2]));
$ar_id = (int) $cont[3];
$this->dieContinueUsageIf(strval($ar_id) !== $cont[3]);
$this->addWhere("ar_namespace {$op} {$ns} OR " . "(ar_namespace = {$ns} AND " . "(ar_title {$op} {$title} OR " . "(ar_title = {$title} AND " . "(ar_timestamp {$op} {$ts} OR " . "(ar_timestamp = {$ts} AND " . "ar_id {$op}= {$ar_id})))))");
}
}
$this->addOption('LIMIT', $this->limit + 1);
if ($revCount !== 0) {
// Sort by ar_rev_id when querying by ar_rev_id
$this->addWhereRange('ar_rev_id', $dir, null, null);
} else {
// Sort by ns and title in the same order as timestamp for efficiency
// But only when not already unique in the query
if (count($pageMap) > 1) {
$this->addWhereRange('ar_namespace', $dir, null, null);
}
$oneTitle = key(reset($pageMap));
foreach ($pageMap as $pages) {
if (count($pages) > 1 || key($pages) !== $oneTitle) {
$this->addWhereRange('ar_title', $dir, null, null);
break;
}
}
$this->addTimestampWhereRange('ar_timestamp', $dir, $params['start'], $params['end']);
}
// Include in ORDER BY for uniqueness
$this->addWhereRange('ar_id', $dir, null, null);
$res = $this->select(__METHOD__);
$count = 0;
$generated = array();
foreach ($res as $row) {
if (++$count > $this->limit) {
// We've had enough
$this->setContinueEnumParameter('continue', $revCount ? "{$row->ar_rev_id}|{$row->ar_id}" : "{$row->ar_namespace}|{$row->ar_title}|{$row->ar_timestamp}|{$row->ar_id}");
break;
}
if ($resultPageSet !== null) {
$generated[] = $row->ar_rev_id;
} else {
if (!isset($pageMap[$row->ar_namespace][$row->ar_title])) {
// Was it converted?
$title = Title::makeTitle($row->ar_namespace, $row->ar_title);
$converted = $pageSet->getConvertedTitles();
if ($title && isset($converted[$title->getPrefixedText()])) {
$title = Title::newFromText($converted[$title->getPrefixedText()]);
if ($title && isset($pageMap[$title->getNamespace()][$title->getDBkey()])) {
$pageMap[$row->ar_namespace][$row->ar_title] = $pageMap[$title->getNamespace()][$title->getDBkey()];
}
}
}
if (!isset($pageMap[$row->ar_namespace][$row->ar_title])) {
ApiBase::dieDebug("Found row in archive (ar_id={$row->ar_id}) that didn't " . "get processed by ApiPageSet");
}
$fit = $this->addPageSubItem($pageMap[$row->ar_namespace][$row->ar_title], $this->extractRevisionInfo(Revision::newFromArchiveRow($row), $row), 'rev');
if (!$fit) {
$this->setContinueEnumParameter('continue', $revCount ? "{$row->ar_rev_id}|{$row->ar_id}" : "{$row->ar_namespace}|{$row->ar_title}|{$row->ar_timestamp}|{$row->ar_id}");
break;
}
}
}
if ($resultPageSet !== null) {
$resultPageSet->populateFromRevisionIDs($generated);
}
}
示例5: run
//.........这里部分代码省略.........
$this->dieContinueUsageIf(strval($ar_id) !== $cont[3]);
$this->addWhere("ar_namespace {$op} {$ns} OR " . "(ar_namespace = {$ns} AND " . "(ar_title {$op} {$title} OR " . "(ar_title = {$title} AND " . "(ar_timestamp {$op} {$ts} OR " . "(ar_timestamp = {$ts} AND " . "ar_id {$op}= {$ar_id})))))");
} else {
$this->dieContinueUsageIf(count($cont) != 2);
$ts = $db->addQuotes($db->timestamp($cont[0]));
$ar_id = (int) $cont[1];
$this->dieContinueUsageIf(strval($ar_id) !== $cont[1]);
$this->addWhere("ar_timestamp {$op} {$ts} OR " . "(ar_timestamp = {$ts} AND " . "ar_id {$op}= {$ar_id})");
}
}
$this->addOption('LIMIT', $this->limit + 1);
$sort = $dir == 'newer' ? '' : ' DESC';
$orderby = [];
if ($optimizeGenerateTitles) {
// Targeting index name_title_timestamp
if ($params['namespace'] === null || count(array_unique($params['namespace'])) > 1) {
$orderby[] = "ar_namespace {$sort}";
}
$orderby[] = "ar_title {$sort}";
} elseif ($mode == 'all') {
// Targeting index name_title_timestamp
if ($params['namespace'] === null || count(array_unique($params['namespace'])) > 1) {
$orderby[] = "ar_namespace {$sort}";
}
$orderby[] = "ar_title {$sort}";
$orderby[] = "ar_timestamp {$sort}";
$orderby[] = "ar_id {$sort}";
} else {
// Targeting index usertext_timestamp
// 'user' is always constant.
$orderby[] = "ar_timestamp {$sort}";
$orderby[] = "ar_id {$sort}";
}
$this->addOption('ORDER BY', $orderby);
$res = $this->select(__METHOD__);
$pageMap = [];
// Maps ns&title to array index
$count = 0;
$nextIndex = 0;
$generated = [];
foreach ($res as $row) {
if (++$count > $this->limit) {
// We've had enough
if ($optimizeGenerateTitles) {
$this->setContinueEnumParameter('continue', "{$row->ar_namespace}|{$row->ar_title}");
} elseif ($mode == 'all') {
$this->setContinueEnumParameter('continue', "{$row->ar_namespace}|{$row->ar_title}|{$row->ar_timestamp}|{$row->ar_id}");
} else {
$this->setContinueEnumParameter('continue', "{$row->ar_timestamp}|{$row->ar_id}");
}
break;
}
// Miser mode namespace check
if ($miser_ns !== null && !in_array($row->ar_namespace, $miser_ns)) {
continue;
}
if ($resultPageSet !== null) {
if ($params['generatetitles']) {
$key = "{$row->ar_namespace}:{$row->ar_title}";
if (!isset($generated[$key])) {
$generated[$key] = Title::makeTitle($row->ar_namespace, $row->ar_title);
}
} else {
$generated[] = $row->ar_rev_id;
}
} else {
$revision = Revision::newFromArchiveRow($row);
$rev = $this->extractRevisionInfo($revision, $row);
if (!isset($pageMap[$row->ar_namespace][$row->ar_title])) {
$index = $nextIndex++;
$pageMap[$row->ar_namespace][$row->ar_title] = $index;
$title = $revision->getTitle();
$a = ['pageid' => $title->getArticleID(), 'revisions' => [$rev]];
ApiResult::setIndexedTagName($a['revisions'], 'rev');
ApiQueryBase::addTitleInfo($a, $title);
$fit = $result->addValue(['query', $this->getModuleName()], $index, $a);
} else {
$index = $pageMap[$row->ar_namespace][$row->ar_title];
$fit = $result->addValue(['query', $this->getModuleName(), $index, 'revisions'], null, $rev);
}
if (!$fit) {
if ($mode == 'all') {
$this->setContinueEnumParameter('continue', "{$row->ar_namespace}|{$row->ar_title}|{$row->ar_timestamp}|{$row->ar_id}");
} else {
$this->setContinueEnumParameter('continue', "{$row->ar_timestamp}|{$row->ar_id}");
}
break;
}
}
}
if ($resultPageSet !== null) {
if ($params['generatetitles']) {
$resultPageSet->populateFromTitles($generated);
} else {
$resultPageSet->populateFromRevisionIDs($generated);
}
} else {
$result->addIndexedTagName(['query', $this->getModuleName()], 'page');
}
}
示例6: formatRow
/**
* Generates each row in the contributions list.
*
* @todo This would probably look a lot nicer in a table.
* @param stdClass $row
* @return string
*/
function formatRow($row)
{
$ret = '';
$classes = [];
/*
* There may be more than just revision rows. To make sure that we'll only be processing
* revisions here, let's _try_ to build a revision out of our row (without displaying
* notices though) and then trying to grab data from the built object. If we succeed,
* we're definitely dealing with revision data and we may proceed, if not, we'll leave it
* to extensions to subscribe to the hook to parse the row.
*/
MediaWiki\suppressWarnings();
try {
$rev = Revision::newFromArchiveRow($row);
$validRevision = (bool) $rev->getId();
} catch (Exception $e) {
$validRevision = false;
}
MediaWiki\restoreWarnings();
if ($validRevision) {
$ret = $this->formatRevisionRow($row);
}
// Let extensions add data
Hooks::run('DeletedContributionsLineEnding', [$this, &$ret, $row, &$classes]);
if ($classes === [] && $ret === '') {
wfDebug("Dropping Special:DeletedContribution row that could not be formatted\n");
$ret = "<!-- Could not format Special:DeletedContribution row. -->\n";
} else {
$ret = Html::rawElement('li', ['class' => $classes], $ret) . "\n";
}
return $ret;
}
示例7: testNewFromArchiveRow
/**
* @covers Revision::newFromArchiveRow
*/
public function testNewFromArchiveRow()
{
$page = $this->createPage('RevisionStorageTest_testNewFromArchiveRow', 'Lorem Ipsum', CONTENT_MODEL_WIKITEXT);
$orig = $page->getRevision();
$page->doDeleteArticle('test Revision::newFromArchiveRow');
$dbr = wfGetDB(DB_SLAVE);
$res = $dbr->select('archive', '*', ['ar_rev_id' => $orig->getId()]);
$this->assertTrue(is_object($res), 'query failed');
$row = $res->fetchObject();
$res->free();
$rev = Revision::newFromArchiveRow($row);
$this->assertRevEquals($orig, $rev);
}
示例8: upgradeLegacyArchiveRow
/**
* @param $row
* @return bool
*/
protected function upgradeLegacyArchiveRow($row)
{
$db = $this->getDB(DB_MASTER);
$rev = Revision::newFromArchiveRow($row);
$text = $rev->getRawText();
if (!is_string($text)) {
# This should not happen, but sometimes does (bug 20757)
$this->output("Text of revision with timestamp {$row->ar_timestamp} unavailable!\n");
return false;
} else {
# Archive table as no PK, but (NS,title,time) should be near unique.
# Any duplicates on those should also have duplicated text anyway.
$db->update('archive', array('ar_sha1' => Revision::base36Sha1($text)), array('ar_namespace' => $row->ar_namespace, 'ar_title' => $row->ar_title, 'ar_timestamp' => $row->ar_timestamp, 'ar_len' => $row->ar_len), __METHOD__);
return true;
}
}
示例9: formatRevisionRow
private function formatRevisionRow($row, $earliestLiveTime, $remaining)
{
$rev = Revision::newFromArchiveRow($row, array('page' => $this->mTargetObj->getArticleId()));
$stxt = '';
$ts = wfTimestamp(TS_MW, $row->ar_timestamp);
// Build checkboxen...
if ($this->mAllowed) {
if ($this->mInvert) {
if (in_array($ts, $this->mTargetTimestamp)) {
$checkBox = Xml::check("ts{$ts}");
} else {
$checkBox = Xml::check("ts{$ts}", true);
}
} else {
$checkBox = Xml::check("ts{$ts}");
}
} else {
$checkBox = '';
}
$user = $this->getUser();
// Build page & diff links...
if ($this->mCanView) {
$titleObj = $this->getTitle();
# Last link
if (!$rev->userCan(Revision::DELETED_TEXT, $this->getUser())) {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
} elseif ($remaining > 0 || $earliestLiveTime && $ts > $earliestLiveTime) {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = Linker::linkKnown($titleObj, $this->msg('diff')->escaped(), array(), array('target' => $this->mTargetObj->getPrefixedText(), 'timestamp' => $ts, 'diff' => 'prev'));
} else {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = $this->msg('diff')->escaped();
}
} else {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
}
// User links
$userLink = Linker::revUserTools($rev);
// Revision text size
$size = $row->ar_len;
if (!is_null($size)) {
$stxt = Linker::formatRevisionSize($size);
}
// Edit summary
$comment = Linker::revComment($rev);
// Revision delete links
$revdlink = Linker::getRevDeleteLink($user, $rev, $this->mTargetObj);
return "<li>{$checkBox} {$revdlink} ({$last}) {$pageLink} . . {$userLink} {$stxt} {$comment}</li>";
}
示例10: upgradeRow
/**
* @param $row
* @param string $table
* @param string $idCol
* @param string $prefix
* @return bool
*/
protected function upgradeRow($row, $table, $idCol, $prefix)
{
$db = $this->getDB(DB_MASTER);
$rev = $table === 'archive' ? Revision::newFromArchiveRow($row) : new Revision($row);
$content = $rev->getContent();
if (!$content) {
# This should not happen, but sometimes does (bug 20757)
$id = $row->{$idCol};
$this->output("Content of {$table} {$id} unavailable!\n");
return false;
}
# Update the row...
$db->update($table, array("{$prefix}_len" => $content->getSize()), array($idCol => $row->{$idCol}), __METHOD__);
return true;
}
示例11: deletedLink
/**
* Look up a special:Undelete link to the given deleted revision id,
* as a workaround for being unable to load deleted diffs in currently.
*
* @param int $id Revision ID
*
* @return string|bool Link HTML or false
*/
public function deletedLink($id)
{
if ($this->getUser()->isAllowed('deletedhistory')) {
$dbr = wfGetDB(DB_REPLICA);
$row = $dbr->selectRow('archive', '*', ['ar_rev_id' => $id], __METHOD__);
if ($row) {
$rev = Revision::newFromArchiveRow($row);
$title = Title::makeTitleSafe($row->ar_namespace, $row->ar_title);
return SpecialPage::getTitleFor('Undelete')->getFullURL(['target' => $title->getPrefixedText(), 'timestamp' => $rev->getTimestamp()]);
}
}
return false;
}
示例12: formatRevisionRow
private function formatRevisionRow($row, $earliestLiveTime, $remaining, $sk)
{
global $wgUser, $wgLang;
$rev = Revision::newFromArchiveRow($row, array('page' => $this->mTargetObj->getArticleId()));
$stxt = '';
$ts = wfTimestamp(TS_MW, $row->ar_timestamp);
// Build checkboxen...
if ($this->mAllowed) {
if ($this->mInvert) {
if (in_array($ts, $this->mTargetTimestamp)) {
$checkBox = Xml::check("ts{$ts}");
} else {
$checkBox = Xml::check("ts{$ts}", true);
}
} else {
$checkBox = Xml::check("ts{$ts}");
}
} else {
$checkBox = '';
}
// Build page & diff links...
if ($this->mCanView) {
$titleObj = SpecialPage::getTitleFor("Undelete");
# Last link
if (!$rev->userCan(Revision::DELETED_TEXT)) {
$pageLink = htmlspecialchars($wgLang->timeanddate($ts, true));
$last = wfMsgHtml('diff');
} else {
if ($remaining > 0 || $earliestLiveTime && $ts > $earliestLiveTime) {
$pageLink = $this->getPageLink($rev, $titleObj, $ts, $sk);
$last = $sk->linkKnown($titleObj, wfMsgHtml('diff'), array(), array('target' => $this->mTargetObj->getPrefixedText(), 'timestamp' => $ts, 'diff' => 'prev'));
} else {
$pageLink = $this->getPageLink($rev, $titleObj, $ts, $sk);
$last = wfMsgHtml('diff');
}
}
} else {
$pageLink = htmlspecialchars($wgLang->timeanddate($ts, true));
$last = wfMsgHtml('diff');
}
// User links
$userLink = $sk->revUserTools($rev);
// Revision text size
if (!is_null($size = $row->ar_len)) {
$stxt = $sk->formatRevisionSize($size);
}
// Edit summary
$comment = $sk->revComment($rev);
// Revision delete links
$canHide = $wgUser->isAllowed('deleterevision');
if ($canHide || $rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) {
if (!$rev->userCan(Revision::DELETED_RESTRICTED)) {
$revdlink = $sk->revDeleteLinkDisabled($canHide);
// revision was hidden from sysops
} else {
$query = array('type' => 'archive', 'target' => $this->mTargetObj->getPrefixedDBkey(), 'ids' => $ts);
$revdlink = $sk->revDeleteLink($query, $rev->isDeleted(Revision::DELETED_RESTRICTED), $canHide);
}
} else {
$revdlink = '';
}
return "<li>{$checkBox} {$revdlink} ({$last}) {$pageLink} . . {$userLink} {$stxt} {$comment}</li>";
}