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( $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 ); } // @todo Update exception handling here to understand current getFile exceptions } catch ( UploadStashFileNotFoundException $e ) { $this->dieWithException( $e, [ 'wrap' => 'apierror-stashedfilenotfound' ] ); } catch ( UploadStashBadPathException $e ) { $this->dieWithException( $e, [ 'wrap' => 'apierror-stashpathinvalid' ] ); } } private static $propertyFilter = [ 'user', 'userid', 'comment', 'parsedcomment', 'mediatype', 'archivename', 'uploadwarning', ]; /** * Returns all possible parameters to siiprop * * @param array|null $filter List of properties to filter out * @return array */ public static function getPropertyNames( $filter = null ) { if ( $filter === null ) { $filter = self::$propertyFilter; } return parent::getPropertyNames( $filter ); } /** * Returns messages for all possible parameters to siiprop * * @param array|null $filter List of properties to filter out * @return array */ public static function getPropertyMessages( $filter = null ) { if ( $filter === null ) { $filter = self::$propertyFilter; } return parent::getPropertyMessages( $filter ); } public function getAllowedParams() { return [ 'filekey' => [ ApiBase::PARAM_ISMULTI => true, ], 'sessionkey' => [ ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_DEPRECATED => true, ], 'prop' => [ ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_DFLT => 'timestamp|url', ApiBase::PARAM_TYPE => self::getPropertyNames(), ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop', ApiBase::PARAM_HELP_MSG_PER_VALUE => self::getPropertyMessages() ], 'urlwidth' => [ ApiBase::PARAM_TYPE => 'integer', 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, 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', ], ]; } 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', ]; } public function getHelpUrls() { return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Stashimageinfo'; } }