PortableInfobox/services/PortableInfoboxDataService.class.php

67 lines
1.6 KiB
PHP
Raw Normal View History

2015-06-09 10:14:00 +00:00
<?php
class PortableInfoboxDataService {
const IMAGE_FIELD_TYPE = 'image';
const INFOBOXES_PROPERTY_NAME = 'infoboxes';
2015-06-09 10:14:00 +00:00
/**
* @var Title $title
*/
protected $title;
protected function __construct( $title ) {
$this->title = $title;
}
public static function newFromTitle( $title ) {
return new PortableInfoboxDataService( $title );
}
public static function newFromPageID( $pageid ) {
return new PortableInfoboxDataService( Title::newFromID( $pageid ) );
}
/**
* Returns infobox data
*
* @return array in format [ 'data' => [], 'sources' => [] ] or [] will be returned
*/
public function getData() {
if ( $this->title && $this->title->exists() ) {
$parserOutput = Article::newFromTitle( $this->title, RequestContext::getMain() )
2015-06-09 10:14:00 +00:00
//on empty parser cache this should be regenerated, see WikiPage.php:2996
->getParserOutput();
$data = $parserOutput ?
$parserOutput->getProperty( self::INFOBOXES_PROPERTY_NAME )
: false;
//return empty [] to prevent false on non existing infobox data
return $data ? $data : [ ];
2015-06-09 10:14:00 +00:00
}
return [ ];
2015-06-09 10:14:00 +00:00
}
2015-06-09 12:31:04 +00:00
/**
* Get image list from infobox data
*
2015-06-09 12:31:04 +00:00
* @return array
*/
public function getImages() {
$images = [ ];
foreach ( $this->getData() as $infobox ) {
2015-07-01 13:03:54 +00:00
// ensure data array exists
$data = is_array( $infobox[ 'data' ] ) ? $infobox[ 'data' ] : [ ];
foreach ( $data as $field ) {
if ( $field[ 'type' ] == self::IMAGE_FIELD_TYPE && isset( $field[ 'data' ] ) && !empty( $field[ 'data' ][ 'key' ] ) ) {
$images[ $field[ 'data' ][ 'key' ] ] = true;
2015-06-09 10:14:00 +00:00
}
}
}
2015-06-09 10:14:00 +00:00
return array_keys( $images );
}
}