2015-08-20 12:06:01 +00:00
|
|
|
<?php
|
|
|
|
|
2019-12-18 17:59:23 +00:00
|
|
|
use MediaWiki\MediaWikiServices;
|
|
|
|
|
2021-09-12 16:42:37 +00:00
|
|
|
class ApiQueryAllInfoboxes extends ApiQueryBase {
|
2015-08-20 12:06:01 +00:00
|
|
|
|
2021-09-10 02:52:19 +00:00
|
|
|
private const CACHE_TTL = 86400;
|
2021-09-12 16:42:37 +00:00
|
|
|
|
2021-09-10 02:52:19 +00:00
|
|
|
public const MCACHE_KEY = 'allinfoboxes-list';
|
2015-08-20 13:14:23 +00:00
|
|
|
|
2021-12-15 23:19:47 +00:00
|
|
|
/**
|
|
|
|
* @param ApiQuery $query
|
|
|
|
* @param string $moduleName
|
|
|
|
*/
|
|
|
|
public function __construct( ApiQuery $query, $moduleName ) {
|
|
|
|
parent::__construct( $query, $moduleName, 'api' );
|
|
|
|
}
|
|
|
|
|
2015-08-20 12:06:01 +00:00
|
|
|
public function execute() {
|
2018-08-05 11:06:26 +00:00
|
|
|
$db = $this->getDB();
|
|
|
|
$res = $this->getResult();
|
2019-12-18 17:59:23 +00:00
|
|
|
$cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
|
2018-08-06 12:27:25 +00:00
|
|
|
$cachekey = $cache->makeKey( self::MCACHE_KEY );
|
2018-08-05 11:06:26 +00:00
|
|
|
|
|
|
|
$data = $cache->getWithSetCallback( $cachekey, self::CACHE_TTL, function () use ( $db ) {
|
|
|
|
$out = [];
|
|
|
|
|
2021-12-16 21:13:54 +00:00
|
|
|
$res = ( new AllInfoboxesQueryPage() )->doQuery();
|
2021-09-10 02:52:19 +00:00
|
|
|
foreach ( $res as $row ) {
|
2018-08-05 11:06:26 +00:00
|
|
|
$out[] = [
|
2018-08-06 13:16:36 +00:00
|
|
|
'pageid' => $row->value,
|
|
|
|
'title' => $row->title,
|
|
|
|
'label' => $this->createLabel( $row->title ),
|
|
|
|
'ns' => $row->namespace
|
2018-08-05 11:06:26 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $out;
|
2015-08-20 12:06:01 +00:00
|
|
|
} );
|
|
|
|
|
|
|
|
foreach ( $data as $id => $infobox ) {
|
2018-08-05 11:06:26 +00:00
|
|
|
$res->addValue( [ 'query', 'allinfoboxes' ], null, $infobox );
|
2015-08-20 12:06:01 +00:00
|
|
|
}
|
2018-08-05 11:06:26 +00:00
|
|
|
$res->addIndexedTagName( [ 'query', 'allinfoboxes' ], 'i' );
|
2015-08-20 12:06:01 +00:00
|
|
|
}
|
|
|
|
|
2015-09-10 14:29:46 +00:00
|
|
|
/**
|
2018-10-02 07:41:19 +00:00
|
|
|
* As a infobox template label we want to return a nice, clean text, without e.g. '_' signs
|
2015-09-10 14:29:46 +00:00
|
|
|
* @param $text infobox template title
|
2018-10-02 07:41:19 +00:00
|
|
|
* @return string
|
2015-09-10 14:29:46 +00:00
|
|
|
*/
|
|
|
|
private function createLabel( $text ) {
|
2018-08-16 09:25:53 +00:00
|
|
|
$title = Title::newFromText( $text, NS_TEMPLATE );
|
2015-09-10 14:29:46 +00:00
|
|
|
|
|
|
|
if ( $title ) {
|
|
|
|
return $title->getText();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $text;
|
|
|
|
}
|
2015-08-20 12:06:01 +00:00
|
|
|
}
|