public function execute() { $params = $this->extractRequestParams(); $prop = array_flip($params['prop']); $pageIds = $this->getPageSet()->getAllTitlesByNamespace(); if (!empty($pageIds[NS_FILE])) { # Create a query and set parameters $pageIds = $pageIds[NS_FILE]; $query = new GlobalUsageQuery(array_keys($pageIds)); if (!is_null($params['continue'])) { if (!$query->setOffset($params['continue'])) { $this->dieUsage('Invalid continue parameter', 'badcontinue'); } } $query->setLimit($params['limit']); $query->filterLocal($params['filterlocal']); # Execute the query $query->execute(); # Create the result $apiResult = $this->getResult(); foreach ($query->getResult() as $image => $wikis) { $pageId = intval($pageIds[$image]); foreach ($wikis as $wiki => $result) { foreach ($result as $item) { if ($item['namespace']) { $title = "{$item['namespace']}:{$item['title']}"; } else { $title = $item['title']; } $result = array('title' => $title, 'wiki' => WikiMap::getWikiName($wiki)); if (isset($prop['url'])) { $result['url'] = WikiMap::getForeignUrl($item['wiki'], $title); } if (isset($prop['pageid'])) { $result['pageid'] = $item['id']; } if (isset($prop['namespace'])) { $result['ns'] = $item['namespace_id']; } $fit = $apiResult->addValue(array('query', 'pages', $pageId, 'globalusage'), null, $result); if (!$fit) { $continue = "{$item['image']}|{$item['wiki']}|{$item['id']}"; $this->setIndexedTagName(); $this->setContinueEnumParameter('continue', $continue); return; } } } } $this->setIndexedTagName(); if ($query->hasMore()) { $this->setContinueEnumParameter('continue', $query->getContinueString()); } } }
/** * Get an executed query for use on image pages * * @param Title $title File to query for * @return GlobalUsageQuery Query object, already executed */ private static function getImagePageQuery($title) { $name = $title->getDBkey(); if (!isset(self::$queryCache[$name])) { $query = new GlobalUsageQuery($title); $query->filterLocal(); $query->execute(); self::$queryCache[$name] = $query; // Limit cache size to 100 if (count(self::$queryCache) > 100) { array_shift(self::$queryCache); } } return self::$queryCache[$name]; }
/** * Creates as queryer and executes it based on $wgRequest */ private function showResult() { global $wgRequest; $query = new GlobalUsageQuery($this->target); // Extract params from $wgRequest if ($wgRequest->getText('from')) { $query->setOffset($wgRequest->getText('from')); } elseif ($wgRequest->getText('to')) { $query->setOffset($wgRequest->getText('to'), true); } $query->setLimit($wgRequest->getInt('limit', 50)); $query->filterLocal($this->filterLocal); // Perform query $query->execute(); // Show result global $wgOut; // Don't show form element if there is no data if ($query->count() == 0) { $wgOut->addWikiMsg('globalusage-no-results', $this->target->getPrefixedText()); return; } $navbar = $this->getNavBar($query); $targetName = $this->target->getText(); // Top navbar $wgOut->addHtml($navbar); $wgOut->addHtml('<div id="mw-globalusage-result">'); foreach ($query->getSingleImageResult() as $wiki => $result) { $wgOut->addHtml('<h2>' . wfMsgExt('globalusage-on-wiki', 'parseinline', $targetName, WikiMap::getWikiName($wiki)) . "</h2><ul>\n"); foreach ($result as $item) { $wgOut->addHtml("\t<li>" . self::formatItem($item) . "</li>\n"); } $wgOut->addHtml("</ul>\n"); } $wgOut->addHtml('</div>'); // Bottom navbar $wgOut->addHtml($navbar); }
$db = wfGetDB(DB_SLAVE); $conds = array('img_media_type' => 'VIDEO', 'img_minor_mime' => $provider); if (!empty($keyword)) { $conds[] = 'lower(img_name) ' . $db->buildLike($keyword, $db->anyString()); } do { $conds[] = 'img_name > ' . $db->addQuotes($lastTitle); $result = $db->select(array('image'), array('*'), $conds, __METHOD__, array('LIMIT' => $limit)); $cnt = 1; $subTotal = $result->numRows(); while ($row = $db->fetchRow($result)) { $videoTitle = $row['img_name']; echo "\n[Total: {$total} ({$cnt} of {$subTotal})] Video: {$videoTitle}\n"; // add URLs of pages where they are embedded for each video title $query = new GlobalUsageQuery($videoTitle); $query->execute(); $globalUsages = $query->getSingleImageResult(); if (empty($globalUsages)) { $video = array($videoTitle, ''); writeToFile($video); } else { foreach ($globalUsages as $wiki => $articles) { echo "\tGlobalUsages: Wiki: {$wiki}\n"; foreach ($articles as $article) { echo "\t\tArticle: Namespace:{$article['namespace']}, Name:{$article['title']}\n"; $url = rtrim(WikiFactory::DBtoURL($article['wiki']), '/'); $title = Title::newFromText($article['title'], $article['namespace_id']); if ($title instanceof Title) { $url .= $title->getLocalURL(); echo "\t\t\tURL: {$url}\n"; }