X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fspecials%2FSpecialNewimages.php;h=0a653e73704fd64802db5f4f54ef76e11d155504;hp=5fa0a735a4df72f640c689c02e3d8a5dfd05f0dc;hb=7ececd89751310a7d46310b10ca80d5a0aa77528;hpb=849dda251d4d7117a211514ef022ae3f191cf895 diff --git a/includes/specials/SpecialNewimages.php b/includes/specials/SpecialNewimages.php index 5fa0a735a4..0a653e7370 100644 --- a/includes/specials/SpecialNewimages.php +++ b/includes/specials/SpecialNewimages.php @@ -25,13 +25,20 @@ class SpecialNewFiles extends IncludableSpecialPage { /** @var FormOptions */ protected $opts; + /** @var string[] */ + protected $mediaTypes; + public function __construct() { parent::__construct( 'Newimages' ); } public function execute( $par ) { + $context = new DerivativeContext( $this->getContext() ); + $this->setHeaders(); $this->outputHeader(); + $mimeAnalyzer = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer(); + $this->mediaTypes = $mimeAnalyzer->getMediaTypes(); $out = $this->getOutput(); $this->addHelpLink( 'Help:New images' ); @@ -41,7 +48,9 @@ class SpecialNewFiles extends IncludableSpecialPage { $opts->add( 'like', '' ); $opts->add( 'user', '' ); $opts->add( 'showbots', false ); + $opts->add( 'newbies', false ); $opts->add( 'hidepatrolled', false ); + $opts->add( 'mediatype', $this->mediaTypes ); $opts->add( 'limit', 50 ); $opts->add( 'offset', '' ); $opts->add( 'start', '' ); @@ -64,6 +73,23 @@ class SpecialNewFiles extends IncludableSpecialPage { $opts->setValue( 'start', $start, true ); $opts->setValue( 'end', $end, true ); + + // also swap values in request object, which is used by HTMLForm + // to pre-populate the fields with the previous input + $request = $context->getRequest(); + $context->setRequest( new DerivativeRequest( + $request, + [ 'start' => $start, 'end' => $end ] + $request->getValues(), + $request->wasPosted() + ) ); + } + + // if all media types have been selected, wipe out the array to prevent + // the pointless IN(...) query condition (which would have no effect + // because every possible type has been selected) + $missingMediaTypes = array_diff( $this->mediaTypes, $opts->getValue( 'mediatype' ) ); + if ( empty( $missingMediaTypes ) ) { + $opts->setValue( 'mediatype', [] ); } $opts->validateIntBounds( 'limit', 0, 500 ); @@ -72,10 +98,10 @@ class SpecialNewFiles extends IncludableSpecialPage { if ( !$this->including() ) { $this->setTopText(); - $this->buildForm(); + $this->buildForm( $context ); } - $pager = new NewFilesPager( $this->getContext(), $opts ); + $pager = new NewFilesPager( $context, $opts ); $out->addHTML( $pager->getBody() ); if ( !$this->including() ) { @@ -83,7 +109,19 @@ class SpecialNewFiles extends IncludableSpecialPage { } } - protected function buildForm() { + protected function buildForm( IContextSource $context ) { + $mediaTypesText = array_map( function ( $type ) { + // mediastatistics-header-unknown, mediastatistics-header-bitmap, + // mediastatistics-header-drawing, mediastatistics-header-audio, + // mediastatistics-header-video, mediastatistics-header-multimedia, + // mediastatistics-header-office, mediastatistics-header-text, + // mediastatistics-header-executable, mediastatistics-header-archive, + // mediastatistics-header-3d, + return $this->msg( 'mediastatistics-header-' . strtolower( $type ) )->text(); + }, $this->mediaTypes ); + $mediaTypesOptions = array_combine( $mediaTypesText, $this->mediaTypes ); + ksort( $mediaTypesOptions ); + $formDescriptor = [ 'like' => [ 'type' => 'text', @@ -97,6 +135,12 @@ class SpecialNewFiles extends IncludableSpecialPage { 'name' => 'user', ], + 'newbies' => [ + 'type' => 'check', + 'label-message' => 'newimages-newbies', + 'name' => 'newbies', + ], + 'showbots' => [ 'type' => 'check', 'label-message' => 'newimages-showbots', @@ -109,6 +153,16 @@ class SpecialNewFiles extends IncludableSpecialPage { 'name' => 'hidepatrolled', ], + 'mediatype' => [ + 'type' => 'multiselect', + 'dropdown' => true, + 'flatlist' => true, + 'name' => 'mediatype', + 'label-message' => 'newimages-mediatype', + 'options' => $mediaTypesOptions, + 'default' => $this->mediaTypes, + ], + 'limit' => [ 'type' => 'hidden', 'default' => $this->opts->getValue( 'limit' ), @@ -142,14 +196,14 @@ class SpecialNewFiles extends IncludableSpecialPage { unset( $formDescriptor['hidepatrolled'] ); } - HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ) + HTMLForm::factory( 'ooui', $formDescriptor, $context ) + // For the 'multiselect' field values to be preserved on submit + ->setFormIdentifier( 'specialnewimages' ) ->setWrapperLegendMsg( 'newimages-legend' ) ->setSubmitTextMsg( 'ilsubmit' ) ->setMethod( 'get' ) ->prepareForm() ->displayForm( false ); - - $this->getOutput()->addModules( 'mediawiki.special.newFiles' ); } protected function getGroupName() {