2012-03-01 17:37:16 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class ApiQueryPageImages extends ApiQueryBase {
|
2012-03-05 21:36:43 +00:00
|
|
|
|
2012-03-01 17:37:16 +00:00
|
|
|
public function __construct( $query, $moduleName ) {
|
|
|
|
parent::__construct( $query, $moduleName, 'pi' );
|
|
|
|
}
|
|
|
|
|
|
|
|
public function execute() {
|
|
|
|
wfProfileIn( __METHOD__ );
|
|
|
|
$titles = $this->getPageSet()->getGoodTitles();
|
|
|
|
if ( count( $titles ) == 0 ) {
|
|
|
|
wfProfileOut( __METHOD__ );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$params = $this->extractRequestParams();
|
|
|
|
$prop = array_flip( $params['prop'] );
|
2012-03-05 21:36:43 +00:00
|
|
|
if ( !count( $prop ) ) {
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->dieUsage( 'No properties selected', '_noprop' );
|
2012-03-05 21:36:43 +00:00
|
|
|
}
|
2012-03-01 17:37:16 +00:00
|
|
|
$size = $params['thumbsize'];
|
2012-05-08 21:42:07 +00:00
|
|
|
$limit = $params['limit'];
|
2012-03-01 17:37:16 +00:00
|
|
|
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->addTables( 'page_images' );
|
|
|
|
$this->addFields( array( 'pi_page' ) );
|
|
|
|
$propMapping = array( 'thumbnail' => 'pi_thumbnail', 'imagecount' => 'pi_images', 'totalscore' => 'pi_total_score' );
|
2012-03-01 17:37:16 +00:00
|
|
|
foreach ( $propMapping as $apiName => $dbName ) {
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->addFieldsIf( $dbName, isset( $prop[$apiName] ) );
|
2012-03-01 17:37:16 +00:00
|
|
|
}
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->addWhere( array( 'pi_page' => array_keys( $titles ) ) );
|
2012-03-05 21:36:43 +00:00
|
|
|
if ( isset( $params['continue'] ) ) {
|
|
|
|
// is_numeric() accepts floats, so...
|
|
|
|
if ( preg_match( '/^\d+$/', $params['continue'] ) ) {
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->addWhere( 'pi_page >= ' . intval( $params['continue'] ) );
|
2012-03-05 21:36:43 +00:00
|
|
|
} else {
|
|
|
|
$this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query' , '_badcontinue' );
|
|
|
|
}
|
|
|
|
}
|
2012-05-08 21:42:07 +00:00
|
|
|
$this->addOption( 'ORDER BY', 'pi_page' );
|
|
|
|
$this->addOption( 'LIMIT', $limit + 1 );
|
2012-03-01 19:44:37 +00:00
|
|
|
|
2012-03-01 17:37:16 +00:00
|
|
|
$res = $this->select( __METHOD__ );
|
|
|
|
foreach ( $res as $row ) {
|
2012-05-08 21:42:07 +00:00
|
|
|
$vals = array();
|
|
|
|
if ( isset( $prop['thumbnail'] ) ) {
|
|
|
|
$file = wfFindFile( $row->pi_thumbnail );
|
2012-03-01 17:37:16 +00:00
|
|
|
if ( $file ) {
|
|
|
|
$thumb = $file->transform( array( 'width' => $size, 'height' => $size ) );
|
|
|
|
if ( $thumb ) {
|
2012-05-08 21:42:07 +00:00
|
|
|
$vals['thumbnail'] = array(
|
2012-03-08 14:01:00 +00:00
|
|
|
'source' => wfExpandUrl( $thumb->getUrl(), PROTO_CURRENT ),
|
2012-03-01 17:37:16 +00:00
|
|
|
'width' => $thumb->getWidth(),
|
|
|
|
'height' => $thumb->getHeight(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-05-08 21:42:07 +00:00
|
|
|
if ( isset( $prop['imagecount'] ) ) {
|
|
|
|
$vals['imagecount'] = $row->pi_images;
|
|
|
|
}
|
|
|
|
if ( isset( $prop['totalscore'] ) ) {
|
|
|
|
$vals['totalscore'] = $row->pi_total_score;
|
|
|
|
}
|
|
|
|
$fit = $this->getResult()->addValue( array( 'query', 'pages' ), $row->pi_page, $vals );
|
|
|
|
if ( !$fit ) {
|
|
|
|
$this->setContinueEnumParameter( 'continue', $row->pi_page );
|
|
|
|
}
|
2012-03-01 17:37:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-05 21:36:43 +00:00
|
|
|
public function getDescription() {
|
|
|
|
return 'Returns information about images on the page such as thumbnail and presence of photos.';
|
|
|
|
}
|
|
|
|
|
2012-03-01 17:37:16 +00:00
|
|
|
public function getAllowedParams() {
|
|
|
|
return array(
|
|
|
|
'prop' => array(
|
2012-05-08 21:42:07 +00:00
|
|
|
ApiBase::PARAM_TYPE => array( 'thumbnail', 'imagecount', 'totalscore' ),
|
2012-03-01 17:37:16 +00:00
|
|
|
ApiBase::PARAM_ISMULTI => true,
|
2012-05-08 21:42:07 +00:00
|
|
|
ApiBase::PARAM_DFLT => 'thumbnail',
|
2012-03-01 17:37:16 +00:00
|
|
|
),
|
|
|
|
'thumbsize' => array(
|
|
|
|
ApiBase::PARAM_TYPE => 'integer',
|
|
|
|
APiBase::PARAM_DFLT => 50,
|
|
|
|
),
|
2012-03-05 21:36:43 +00:00
|
|
|
'limit' => array(
|
|
|
|
ApiBase::PARAM_DFLT => 1,
|
|
|
|
ApiBase::PARAM_TYPE => 'limit',
|
|
|
|
ApiBase::PARAM_MIN => 1,
|
|
|
|
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
|
|
|
|
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
|
|
|
|
),
|
|
|
|
'continue' => array(
|
|
|
|
ApiBase::PARAM_TYPE => 'integer',
|
|
|
|
),
|
2012-03-01 17:37:16 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-03-01 19:55:02 +00:00
|
|
|
public function getParamDescription() {
|
|
|
|
return array(
|
|
|
|
'prop' => array( 'What information to return',
|
|
|
|
' thumbnail - URL and dimensions of image associated with page, if any',
|
2012-05-08 21:42:07 +00:00
|
|
|
' imagecount - Number of distinct illustrations on page',
|
|
|
|
' totalscore - Sum of image scores',
|
2012-03-01 19:55:02 +00:00
|
|
|
),
|
|
|
|
'thumbsize' => 'Width of thumbnail image',
|
2012-03-05 21:36:43 +00:00
|
|
|
'limit' => 'Properties of how many pages to return',
|
|
|
|
'continue' => 'When more results are available, use this to continue',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPossibleErrors() {
|
|
|
|
return array_merge( parent::getPossibleErrors(), array(
|
|
|
|
array( 'code' => '_noprop', 'info' => 'At least one prop should be specified' ),
|
|
|
|
array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
|
|
|
|
)
|
2012-03-01 19:55:02 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-03-01 17:37:16 +00:00
|
|
|
public function getVersion() {
|
|
|
|
return '$Id$';
|
|
|
|
}
|
|
|
|
}
|