本文整理汇总了PHP中ApiPageSet::populateFromRevisionIDs方法的典型用法代码示例。如果您正苦于以下问题:PHP ApiPageSet::populateFromRevisionIDs方法的具体用法?PHP ApiPageSet::populateFromRevisionIDs怎么用?PHP ApiPageSet::populateFromRevisionIDs使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ApiPageSet
的用法示例。
在下文中一共展示了ApiPageSet::populateFromRevisionIDs方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: run
//.........这里部分代码省略.........
}
if ($params['user'] !== null) {
$id = User::idFromName($params['user']);
if ($id) {
$this->addWhereFld('rev_user', $id);
} else {
$this->addWhereFld('rev_user_text', $params['user']);
}
} elseif ($params['excludeuser'] !== null) {
$id = User::idFromName($params['excludeuser']);
if ($id) {
$this->addWhere('rev_user != ' . $id);
} else {
$this->addWhere('rev_user_text != ' . $db->addQuotes($params['excludeuser']));
}
}
if ($params['user'] !== null || $params['excludeuser'] !== null) {
// Paranoia: avoid brute force searches (bug 17342)
if (!$this->getUser()->isAllowed('deletedhistory')) {
$bitmask = Revision::DELETED_USER;
} elseif (!$this->getUser()->isAllowedAny('suppressrevision', 'viewsuppressed')) {
$bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
} else {
$bitmask = 0;
}
if ($bitmask) {
$this->addWhere($db->bitAnd('rev_deleted', $bitmask) . " != {$bitmask}");
}
}
$dir = $params['dir'];
if ($params['continue'] !== null) {
$op = $dir == 'newer' ? '>' : '<';
$cont = explode('|', $params['continue']);
$this->dieContinueUsageIf(count($cont) != 2);
$ts = $db->addQuotes($db->timestamp($cont[0]));
$rev_id = (int) $cont[1];
$this->dieContinueUsageIf(strval($rev_id) !== $cont[1]);
$this->addWhere("rev_timestamp {$op} {$ts} OR " . "(rev_timestamp = {$ts} AND " . "rev_id {$op}= {$rev_id})");
}
$this->addOption('LIMIT', $this->limit + 1);
$sort = $dir == 'newer' ? '' : ' DESC';
$orderby = array();
// Targeting index rev_timestamp, user_timestamp, or usertext_timestamp
// But 'user' is always constant for the latter two, so it doesn't matter here.
$orderby[] = "rev_timestamp {$sort}";
$orderby[] = "rev_id {$sort}";
$this->addOption('ORDER BY', $orderby);
$res = $this->select(__METHOD__);
$pageMap = array();
// Maps rev_page to array index
$count = 0;
$nextIndex = 0;
$generated = array();
foreach ($res as $row) {
if (++$count > $this->limit) {
// We've had enough
$this->setContinueEnumParameter('continue', "{$row->rev_timestamp}|{$row->rev_id}");
break;
}
// Miser mode namespace check
if ($miser_ns !== null && !in_array($row->page_namespace, $miser_ns)) {
continue;
}
if ($resultPageSet !== null) {
if ($params['generatetitles']) {
$generated[$row->rev_page] = $row->rev_page;
} else {
$generated[] = $row->rev_id;
}
} else {
$revision = Revision::newFromRow($row);
$rev = $this->extractRevisionInfo($revision, $row);
if (!isset($pageMap[$row->rev_page])) {
$index = $nextIndex++;
$pageMap[$row->rev_page] = $index;
$title = $revision->getTitle();
$a = array('pageid' => $title->getArticleID(), 'revisions' => array($rev));
ApiResult::setIndexedTagName($a['revisions'], 'rev');
ApiQueryBase::addTitleInfo($a, $title);
$fit = $result->addValue(array('query', $this->getModuleName()), $index, $a);
} else {
$index = $pageMap[$row->rev_page];
$fit = $result->addValue(array('query', $this->getModuleName(), $index, 'revisions'), null, $rev);
}
if (!$fit) {
$this->setContinueEnumParameter('continue', "{$row->rev_timestamp}|{$row->rev_id}");
break;
}
}
}
if ($resultPageSet !== null) {
if ($params['generatetitles']) {
$resultPageSet->populateFromPageIDs($generated);
} else {
$resultPageSet->populateFromRevisionIDs($generated);
}
} else {
$result->addIndexedTagName(array('query', $this->getModuleName()), 'page');
}
}
示例2: run
//.........这里部分代码省略.........
// There is only one ID, use it
$ids = array_keys($pageSet->getGoodTitles());
$this->addWhereFld('rev_page', reset($ids));
if (!is_null($params['user'])) {
$this->addWhereFld('rev_user_text', $params['user']);
} elseif (!is_null($params['excludeuser'])) {
$this->addWhere('rev_user_text != ' . $db->addQuotes($params['excludeuser']));
}
if (!is_null($params['user']) || !is_null($params['excludeuser'])) {
// Paranoia: avoid brute force searches (bug 17342)
if (!$this->getUser()->isAllowed('deletedhistory')) {
$bitmask = Revision::DELETED_USER;
} elseif (!$this->getUser()->isAllowedAny('suppressrevision', 'viewsuppressed')) {
$bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
} else {
$bitmask = 0;
}
if ($bitmask) {
$this->addWhere($db->bitAnd('rev_deleted', $bitmask) . " != {$bitmask}");
}
}
} elseif ($revCount > 0) {
$revs = $pageSet->getLiveRevisionIDs();
// Get all revision IDs
$this->addWhereFld('rev_id', array_keys($revs));
if (!is_null($params['continue'])) {
$this->addWhere('rev_id >= ' . intval($params['continue']));
}
$this->addOption('ORDER BY', 'rev_id');
} elseif ($pageCount > 0) {
$titles = $pageSet->getGoodTitles();
// When working in multi-page non-enumeration mode,
// limit to the latest revision only
$this->addWhere('page_latest=rev_id');
// Get all page IDs
$this->addWhereFld('page_id', array_keys($titles));
// Every time someone relies on equality propagation, god kills a kitten :)
$this->addWhereFld('rev_page', array_keys($titles));
if (!is_null($params['continue'])) {
$cont = explode('|', $params['continue']);
$this->dieContinueUsageIf(count($cont) != 2);
$pageid = intval($cont[0]);
$revid = intval($cont[1]);
$this->addWhere("rev_page > {$pageid} OR " . "(rev_page = {$pageid} AND " . "rev_id >= {$revid})");
}
$this->addOption('ORDER BY', array('rev_page', 'rev_id'));
} else {
ApiBase::dieDebug(__METHOD__, 'param validation?');
}
$this->addOption('LIMIT', $this->limit + 1);
$count = 0;
$generated = array();
$res = $this->select(__METHOD__);
foreach ($res as $row) {
if (++$count > $this->limit) {
// We've reached the one extra which shows that there are
// additional pages to be had. Stop here...
if ($enumRevMode) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} elseif ($revCount > 0) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} else {
$this->setContinueEnumParameter('continue', intval($row->rev_page) . '|' . intval($row->rev_id));
}
break;
}
if ($resultPageSet !== null) {
$generated[] = $row->rev_id;
} else {
$revision = new Revision($row);
$rev = $this->extractRevisionInfo($revision, $row);
if ($this->token !== null) {
$title = $revision->getTitle();
$tokenFunctions = $this->getTokenFunctions();
foreach ($this->token as $t) {
$val = call_user_func($tokenFunctions[$t], $title->getArticleID(), $title, $revision);
if ($val === false) {
$this->setWarning("Action '{$t}' is not allowed for the current user");
} else {
$rev[$t . 'token'] = $val;
}
}
}
$fit = $this->addPageSubItem($row->rev_page, $rev, 'rev');
if (!$fit) {
if ($enumRevMode) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} elseif ($revCount > 0) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} else {
$this->setContinueEnumParameter('continue', intval($row->rev_page) . '|' . intval($row->rev_id));
}
break;
}
}
}
if ($resultPageSet !== null) {
$resultPageSet->populateFromRevisionIDs($generated);
}
}
示例3: 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);
}
}
示例4: 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');
}
}
示例5: run
//.........这里部分代码省略.........
$this->addWhere('rev_user != ' . $user->getId());
} else {
$this->addWhere('rev_user_text != ' . $db->addQuotes($params['excludeuser']));
}
}
if ($params['user'] !== null || $params['excludeuser'] !== null) {
// Paranoia: avoid brute force searches (bug 17342)
if (!$this->getUser()->isAllowed('deletedhistory')) {
$bitmask = Revision::DELETED_USER;
} elseif (!$this->getUser()->isAllowedAny('suppressrevision', 'viewsuppressed')) {
$bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
} else {
$bitmask = 0;
}
if ($bitmask) {
$this->addWhere($db->bitAnd('rev_deleted', $bitmask) . " != {$bitmask}");
}
}
} elseif ($revCount > 0) {
// Always targets the PRIMARY index
$revs = $pageSet->getLiveRevisionIDs();
// Get all revision IDs
$this->addWhereFld('rev_id', array_keys($revs));
if ($params['continue'] !== null) {
$this->addWhere('rev_id >= ' . intval($params['continue']));
}
$this->addOption('ORDER BY', 'rev_id');
} elseif ($pageCount > 0) {
// Always targets the rev_page_id index
$titles = $pageSet->getGoodTitles();
// When working in multi-page non-enumeration mode,
// limit to the latest revision only
$this->addWhere('page_latest=rev_id');
// Get all page IDs
$this->addWhereFld('page_id', array_keys($titles));
// Every time someone relies on equality propagation, god kills a kitten :)
$this->addWhereFld('rev_page', array_keys($titles));
if ($params['continue'] !== null) {
$cont = explode('|', $params['continue']);
$this->dieContinueUsageIf(count($cont) != 2);
$pageid = intval($cont[0]);
$revid = intval($cont[1]);
$this->addWhere("rev_page > {$pageid} OR " . "(rev_page = {$pageid} AND " . "rev_id >= {$revid})");
}
$this->addOption('ORDER BY', ['rev_page', 'rev_id']);
} else {
ApiBase::dieDebug(__METHOD__, 'param validation?');
}
$this->addOption('LIMIT', $this->limit + 1);
$count = 0;
$generated = [];
$hookData = [];
$res = $this->select(__METHOD__, [], $hookData);
foreach ($res as $row) {
if (++$count > $this->limit) {
// We've reached the one extra which shows that there are
// additional pages to be had. Stop here...
if ($enumRevMode) {
$this->setContinueEnumParameter('continue', $row->rev_timestamp . '|' . intval($row->rev_id));
} elseif ($revCount > 0) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} else {
$this->setContinueEnumParameter('continue', intval($row->rev_page) . '|' . intval($row->rev_id));
}
break;
}
if ($resultPageSet !== null) {
$generated[] = $row->rev_id;
} else {
$revision = new Revision($row);
$rev = $this->extractRevisionInfo($revision, $row);
if ($this->token !== null) {
$title = $revision->getTitle();
$tokenFunctions = $this->getTokenFunctions();
foreach ($this->token as $t) {
$val = call_user_func($tokenFunctions[$t], $title->getArticleID(), $title, $revision);
if ($val === false) {
$this->setWarning("Action '{$t}' is not allowed for the current user");
} else {
$rev[$t . 'token'] = $val;
}
}
}
$fit = $this->processRow($row, $rev, $hookData) && $this->addPageSubItem($row->rev_page, $rev, 'rev');
if (!$fit) {
if ($enumRevMode) {
$this->setContinueEnumParameter('continue', $row->rev_timestamp . '|' . intval($row->rev_id));
} elseif ($revCount > 0) {
$this->setContinueEnumParameter('continue', intval($row->rev_id));
} else {
$this->setContinueEnumParameter('continue', intval($row->rev_page) . '|' . intval($row->rev_id));
}
break;
}
}
}
if ($resultPageSet !== null) {
$resultPageSet->populateFromRevisionIDs($generated);
}
}