2015-06-10 09:28:33 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
2015-06-16 09:00:39 +00:00
|
|
|
class ApiQueryPortableInfobox extends ApiQueryBase {
|
2015-06-10 09:28:33 +00:00
|
|
|
|
|
|
|
public function __construct( $query, $moduleName ) {
|
|
|
|
parent::__construct( $query, $moduleName, 'ib' );
|
|
|
|
}
|
|
|
|
|
|
|
|
public function execute() {
|
2015-06-11 16:08:51 +00:00
|
|
|
$this->runOnPageSet( $this->getPageSet() );
|
2015-06-10 09:28:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function getVersion() {
|
|
|
|
return __CLASS__ . '$Id$';
|
|
|
|
}
|
|
|
|
|
2015-06-11 16:08:51 +00:00
|
|
|
protected function runOnPageSet( ApiPageSet $pageSet ) {
|
2015-08-19 20:00:27 +00:00
|
|
|
$articles = $pageSet->getGoodTitles();
|
2015-08-18 11:29:51 +00:00
|
|
|
|
2015-08-20 14:45:46 +00:00
|
|
|
foreach ( $articles as $id => $articleTitle ) {
|
2015-08-19 20:00:27 +00:00
|
|
|
$parsedInfoboxes = PortableInfoboxDataService::newFromTitle( $articleTitle )->getData();
|
2015-08-18 11:29:51 +00:00
|
|
|
|
2015-08-19 20:00:27 +00:00
|
|
|
if ( is_array( $parsedInfoboxes ) && count( $parsedInfoboxes ) ) {
|
2015-06-11 16:08:51 +00:00
|
|
|
$inf = [ ];
|
2015-08-18 18:38:06 +00:00
|
|
|
foreach ( array_keys( $parsedInfoboxes ) as $k => $v ) {
|
2015-06-11 16:08:51 +00:00
|
|
|
$inf[ $k ] = [ ];
|
|
|
|
}
|
|
|
|
$pageSet->getResult()->setIndexedTagName( $inf, 'infobox' );
|
|
|
|
$pageSet->getResult()->addValue( [ 'query', 'pages', $id ], 'infoboxes', $inf );
|
2015-08-18 11:29:51 +00:00
|
|
|
foreach ( $parsedInfoboxes as $count => $infobox ) {
|
2016-04-07 09:27:59 +00:00
|
|
|
$sl = isset( $infobox[ 'sourcelabels' ] ) ?
|
|
|
|
$infobox[ 'sourcelabels' ] :
|
|
|
|
$this->sourceLabelsFallback( $infobox, $articleTitle );
|
|
|
|
|
2015-06-11 16:08:51 +00:00
|
|
|
$pageSet->getResult()->addValue( [ 'query', 'pages', $id, 'infoboxes', $count ], 'id', $count );
|
2016-12-09 09:59:03 +00:00
|
|
|
|
2016-04-07 10:24:18 +00:00
|
|
|
$pageSet->getResult()->setIndexedTagName( $sl, "sourcelabels" );
|
2016-04-01 11:07:30 +00:00
|
|
|
$pageSet->getResult()->addValue(
|
|
|
|
[ 'query', 'pages', $id, 'infoboxes', $count ], 'sourcelabels', $sl
|
|
|
|
);
|
2016-12-07 18:02:00 +00:00
|
|
|
|
|
|
|
if ( isset( $infobox[ 'sourcetypes' ] ) ) {
|
|
|
|
$pageSet->getResult()->addValue(
|
|
|
|
[ 'query', 'pages', $id, 'infoboxes', $count ], 'sourcetypes', $infobox[ 'sourcetypes' ]
|
|
|
|
);
|
|
|
|
}
|
2015-06-11 16:08:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-06-10 09:28:33 +00:00
|
|
|
}
|
2016-04-07 09:27:59 +00:00
|
|
|
|
2016-04-07 09:29:26 +00:00
|
|
|
/**
|
|
|
|
* We still have old infobox sources in page properties, so we need this fallback.
|
|
|
|
* Monitor kibana and remove it after logs stop appear
|
|
|
|
*
|
|
|
|
* @param $infobox
|
|
|
|
* @param $title
|
|
|
|
* @return array
|
|
|
|
*/
|
2016-04-07 09:27:59 +00:00
|
|
|
private function sourceLabelsFallback( $infobox, $title ) {
|
|
|
|
global $wgCityId;
|
|
|
|
|
|
|
|
Wikia\Logger\WikiaLogger::instance()->info( 'Portable Infobox ApiQuery sourcelabels fallback' );
|
|
|
|
|
|
|
|
$task = new Wikia\Tasks\Tasks\RefreshLinksForTitleTask();
|
2016-12-09 09:59:03 +00:00
|
|
|
$task->setTitle( $title );
|
2016-04-07 09:27:59 +00:00
|
|
|
$task->title( $title );
|
|
|
|
$task->call( 'refresh' );
|
|
|
|
$task->wikiId( $wgCityId );
|
|
|
|
$task->queue();
|
|
|
|
|
|
|
|
return $infobox[ 'sources' ] ? array_fill_keys( $infobox[ 'sources' ], '' ) : [ ];
|
|
|
|
}
|
2015-06-10 09:28:33 +00:00
|
|
|
}
|