]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/api/ApiQueryStashImageInfo.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / api / ApiQueryStashImageInfo.php
index 691ac3086f0fb75d53838479ac52919c166aa2a7..1924ca0339a86092329fb0a2e05b29274e12d73b 100644 (file)
  */
 class ApiQueryStashImageInfo extends ApiQueryImageInfo {
 
-       public function __construct( $query, $moduleName ) {
+       public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'sii' );
        }
 
        public function execute() {
+               if ( !$this->getUser()->isLoggedIn() ) {
+                       $this->dieWithError( 'apierror-mustbeloggedin-uploadstash', 'notloggedin' );
+               }
+
                $params = $this->extractRequestParams();
                $modulePrefix = $this->getModulePrefix();
 
                $prop = array_flip( $params['prop'] );
 
                $scale = $this->getScale( $params );
-               
+
                $result = $this->getResult();
-               
+
+               $this->requireAtLeastOneParameter( $params, 'filekey', 'sessionkey' );
+
+               // Alias sessionkey to filekey, but give an existing filekey precedence.
+               if ( !$params['filekey'] && $params['sessionkey'] ) {
+                       $params['filekey'] = $params['sessionkey'];
+               }
+
                try {
-                       $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
-               
-                       foreach ( $params['sessionkey'] as $sessionkey ) {      
-                               $file = $stash->getFile( $sessionkey );
-                               $imageInfo = self::getInfo( $file, $prop, $result, $scale );
-                               $result->addValue( array( 'query', $this->getModuleName() ), null, $imageInfo );
-                               $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $modulePrefix );
+                       $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
+
+                       foreach ( $params['filekey'] as $filekey ) {
+                               $file = $stash->getFile( $filekey );
+                               $finalThumbParam = $this->mergeThumbParams( $file, $scale, $params['urlparam'] );
+                               $imageInfo = ApiQueryImageInfo::getInfo( $file, $prop, $result, $finalThumbParam );
+                               $result->addValue( [ 'query', $this->getModuleName() ], null, $imageInfo );
+                               $result->addIndexedTagName( [ 'query', $this->getModuleName() ], $modulePrefix );
                        }
-
-               } catch ( UploadStashNotAvailableException $e ) {
-                       $this->dieUsage( "Session not available: " . $e->getMessage(), "nosession" );
+               // @todo Update exception handling here to understand current getFile exceptions
                } catch ( UploadStashFileNotFoundException $e ) {
-                       $this->dieUsage( "File not found: " . $e->getMessage(), "invalidsessiondata" );
+                       $this->dieWithException( $e, [ 'wrap' => 'apierror-stashedfilenotfound' ] );
                } catch ( UploadStashBadPathException $e ) {
-                       $this->dieUsage( "Bad path: " . $e->getMessage(), "invalidsessiondata" );
-               }       
-
-       }
-
-       /**
-        * Returns all valid parameters to siiprop
-        */
-       public static function getPropertyNames() {
-               return array(
-                       'timestamp',
-                       'url',
-                       'size',
-                       'dimensions', // For backwards compatibility with Allimages
-                       'sha1',
-                       'mime',
-                       'thumbmime',
-                       'metadata',
-                       'bitdepth',
-               );
+                       $this->dieWithException( $e, [ 'wrap' => 'apierror-stashpathinvalid' ] );
+               }
        }
 
+       private $propertyFilter = [
+               'user', 'userid', 'comment', 'parsedcomment',
+               'mediatype', 'archivename', 'uploadwarning',
+       ];
 
        public function getAllowedParams() {
-               return array(
-                       'sessionkey' => array( 
+               return [
+                       'filekey' => [
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_REQUIRED => true,
-                               ApiBase::PARAM_DFLT => null
-                       ),
-                       'prop' => array(
+                       ],
+                       'sessionkey' => [
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ],
+                       'prop' => [
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'timestamp|url',
-                               ApiBase::PARAM_TYPE => self::getPropertyNames()
-                       ),
-                       'urlwidth' => array(
+                               ApiBase::PARAM_TYPE => self::getPropertyNames( $this->propertyFilter ),
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop',
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => self::getPropertyMessages( $this->propertyFilter )
+                       ],
+                       'urlwidth' => [
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
-                       ),
-                       'urlheight' => array(
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => [
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ],
+                       ],
+                       'urlheight' => [
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
-                       )
-               );
-       }
-
-       /**
-        * Return the API documentation for the parameters.
-        * @return {Array} parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               return array(
-                       'prop' => array(
-                               'What image information to get:',
-                               ' timestamp    - Adds timestamp for the uploaded version',
-                               ' url          - Gives URL to the image and the description page',
-                               ' size         - Adds the size of the image in bytes and the height and width',
-                               ' dimensions   - Alias for size',
-                               ' sha1         - Adds sha1 hash for the image',
-                               ' mime         - Adds MIME of the image',
-                               ' thumbmime    - Adss MIME of the image thumbnail (requires url)',
-                               ' metadata     - Lists EXIF metadata for the version of the image',
-                               ' bitdepth     - Adds the bit depth of the version',
-                       ),
-                       'sessionkey' => 'Session key that identifies a previous upload that was stashed temporarily.',
-                       'urlwidth' => "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                       'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth"
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information for stashed images';
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
+                       ],
+                       'urlparam' => [
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_DFLT => '',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
+                       ],
+               ];
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'siiurlwidth', 'info' => 'siiurlheight cannot be used without iiurlwidth' ),
-               ) );
+       protected function getExamplesMessages() {
+               return [
+                       'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+                               => 'apihelp-query+stashimageinfo-example-simple',
+                       'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+                               'siiurlwidth=120&siiprop=url'
+                               => 'apihelp-query+stashimageinfo-example-params',
+               ];
        }
 
-       protected function getExamples() {
-               return array(
-                       'api.php?action=query&prop=stashimageinfo&siisessionkey=124sd34rsdf567',
-                       'api.php?action=query&prop=stashimageinfo&siisessionkey=b34edoe3|bceffd4&siiurlwidth=120&siiprop=url',
-               );
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Stashimageinfo';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
-
 }
-