mediawiki-extensions-PageIm.../ApiQueryPageImages.php

129 lines
3.8 KiB
PHP
Raw Normal View History

2012-03-01 17:37:16 +00:00
<?php
class ApiQueryPageImages extends ApiQueryBase {
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 ) ) {
$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'];
$limit = $params['limit'];
2012-03-01 17:37:16 +00:00
$this->addTables( 'page_props' );
$this->addFields( array( 'pp_page', 'pp_propname', 'pp_value' ) );
$this->addWhere( array( 'pp_page' => array_keys( $titles ), 'pp_propname' => 'page_image' ) );
2012-03-05 21:36:43 +00:00
if ( isset( $params['continue'] ) ) {
// is_numeric() accepts floats, so...
if ( intval( $params['continue'] ) == $params['continue'] ) {
$this->addWhere( 'pp_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' );
}
}
$this->addOption( 'ORDER BY', 'pp_page' );
$this->addOption( 'LIMIT', $limit + 1 );
2012-03-01 19:44:37 +00:00
wfProfileIn( __METHOD__ . '-select' );
2012-03-01 17:37:16 +00:00
$res = $this->select( __METHOD__ );
wfProfileOut( __METHOD__ . '-select' );
wfProfileIn( __METHOD__ . '-results' );
$count = 0;
2012-03-01 17:37:16 +00:00
foreach ( $res as $row ) {
$pageId = $row->pp_page;
if ( ++$count > $limit ) {
$this->setContinueEnumParameter( 'continue', $pageId );
echo 'break';
break;
}
$vals = array();
if ( isset( $prop['thumbnail'] ) ) {
$file = wfFindFile( $row->pp_value );
2012-03-01 17:37:16 +00:00
if ( $file ) {
$thumb = $file->transform( array( 'width' => $size, 'height' => $size ) );
if ( $thumb ) {
$vals['thumbnail'] = array(
'source' => wfExpandUrl( $thumb->getUrl(), PROTO_CURRENT ),
2012-03-01 17:37:16 +00:00
'width' => $thumb->getWidth(),
'height' => $thumb->getHeight(),
);
}
}
}
if ( isset( $prop['name'] ) ) {
$vals['pageimage'] = $row->pp_value;
}
$fit = $this->getResult()->addValue( array( 'query', 'pages' ), $pageId, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', $pageId );
break;
}
2012-03-01 17:37:16 +00:00
}
wfProfileOut( __METHOD__ . '-results' );
wfProfileOut( __METHOD__ );
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(
ApiBase::PARAM_TYPE => array( 'thumbnail', 'name' ),
2012-03-01 17:37:16 +00:00
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'thumbnail|name',
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 => 50,
ApiBase::PARAM_MAX2 => 100,
2012-03-05 21:36:43 +00:00
),
'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',
' name - image title'
2012-03-01 19:55:02 +00:00
),
'thumbsize' => 'Thumbnail width',
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 '';
2012-03-01 17:37:16 +00:00
}
}