MediaWiki  master
SpecialNewFiles.php
Go to the documentation of this file.
1 <?php
25 
28  protected $opts;
29 
31  protected $mediaTypes;
32 
33  public function __construct() {
34  parent::__construct( 'Newimages' );
35  }
36 
37  public function execute( $par ) {
38  $context = new DerivativeContext( $this->getContext() );
39 
40  $this->setHeaders();
41  $this->outputHeader();
42  $mimeAnalyzer = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
43  $this->mediaTypes = $mimeAnalyzer->getMediaTypes();
44 
45  $out = $this->getOutput();
46  $this->addHelpLink( 'Help:New images' );
47 
48  $opts = new FormOptions();
49 
50  $opts->add( 'like', '' );
51  $opts->add( 'user', '' );
52  $opts->add( 'showbots', false );
53  $opts->add( 'hidepatrolled', false );
54  $opts->add( 'mediatype', $this->mediaTypes );
55  $opts->add( 'limit', 50 );
56  $opts->add( 'offset', '' );
57  $opts->add( 'start', '' );
58  $opts->add( 'end', '' );
59 
61 
62  if ( $par !== null ) {
63  $opts->setValue( is_numeric( $par ) ? 'limit' : 'like', $par );
64  }
65 
66  // If start date comes after end date chronologically, swap them.
67  // They are swapped in the interface by JS.
68  $start = $opts->getValue( 'start' );
69  $end = $opts->getValue( 'end' );
70  if ( $start !== '' && $end !== '' && $start > $end ) {
71  $temp = $end;
72  $end = $start;
73  $start = $temp;
74 
75  $opts->setValue( 'start', $start, true );
76  $opts->setValue( 'end', $end, true );
77 
78  // also swap values in request object, which is used by HTMLForm
79  // to pre-populate the fields with the previous input
80  $request = $context->getRequest();
81  $context->setRequest( new DerivativeRequest(
82  $request,
83  [ 'start' => $start, 'end' => $end ] + $request->getValues(),
84  $request->wasPosted()
85  ) );
86  }
87 
88  // if all media types have been selected, wipe out the array to prevent
89  // the pointless IN(...) query condition (which would have no effect
90  // because every possible type has been selected)
91  $missingMediaTypes = array_diff( $this->mediaTypes, $opts->getValue( 'mediatype' ) );
92  if ( empty( $missingMediaTypes ) ) {
93  $opts->setValue( 'mediatype', [] );
94  }
95 
96  $opts->validateIntBounds( 'limit', 0, 500 );
97 
98  $this->opts = $opts;
99 
100  if ( !$this->including() ) {
101  $this->setTopText();
102  $this->buildForm( $context );
103  }
104 
105  $pager = new NewFilesPager( $context, $opts, $this->getLinkRenderer() );
106 
107  $out->addHTML( $pager->getBody() );
108  if ( !$this->including() ) {
109  $out->addHTML( $pager->getNavigationBar() );
110  }
111  }
112 
113  protected function buildForm( IContextSource $context ) {
114  $mediaTypesText = array_map( function ( $type ) {
115  // mediastatistics-header-unknown, mediastatistics-header-bitmap,
116  // mediastatistics-header-drawing, mediastatistics-header-audio,
117  // mediastatistics-header-video, mediastatistics-header-multimedia,
118  // mediastatistics-header-office, mediastatistics-header-text,
119  // mediastatistics-header-executable, mediastatistics-header-archive,
120  // mediastatistics-header-3d,
121  return $this->msg( 'mediastatistics-header-' . strtolower( $type ) )->text();
122  }, $this->mediaTypes );
123  $mediaTypesOptions = array_combine( $mediaTypesText, $this->mediaTypes );
124  ksort( $mediaTypesOptions );
125 
126  $formDescriptor = [
127  'like' => [
128  'type' => 'text',
129  'label-message' => 'newimages-label',
130  'name' => 'like',
131  ],
132 
133  'user' => [
134  'class' => 'HTMLUserTextField',
135  'label-message' => 'newimages-user',
136  'name' => 'user',
137  ],
138 
139  'showbots' => [
140  'type' => 'check',
141  'label-message' => 'newimages-showbots',
142  'name' => 'showbots',
143  ],
144 
145  'hidepatrolled' => [
146  'type' => 'check',
147  'label-message' => 'newimages-hidepatrolled',
148  'name' => 'hidepatrolled',
149  ],
150 
151  'mediatype' => [
152  'type' => 'multiselect',
153  'flatlist' => true,
154  'name' => 'mediatype',
155  'label-message' => 'newimages-mediatype',
156  'options' => $mediaTypesOptions,
157  'default' => $this->mediaTypes,
158  ],
159 
160  'limit' => [
161  'type' => 'hidden',
162  'default' => $this->opts->getValue( 'limit' ),
163  'name' => 'limit',
164  ],
165 
166  'offset' => [
167  'type' => 'hidden',
168  'default' => $this->opts->getValue( 'offset' ),
169  'name' => 'offset',
170  ],
171 
172  'start' => [
173  'type' => 'date',
174  'label-message' => 'date-range-from',
175  'name' => 'start',
176  ],
177 
178  'end' => [
179  'type' => 'date',
180  'label-message' => 'date-range-to',
181  'name' => 'end',
182  ],
183  ];
184 
185  if ( $this->getConfig()->get( 'MiserMode' ) ) {
186  unset( $formDescriptor['like'] );
187  }
188 
189  if ( !$this->getUser()->useFilePatrol() ) {
190  unset( $formDescriptor['hidepatrolled'] );
191  }
192 
193  HTMLForm::factory( 'ooui', $formDescriptor, $context )
194  // For the 'multiselect' field values to be preserved on submit
195  ->setFormIdentifier( 'specialnewimages' )
196  ->setWrapperLegendMsg( 'newimages-legend' )
197  ->setSubmitTextMsg( 'ilsubmit' )
198  ->setMethod( 'get' )
199  ->prepareForm()
200  ->displayForm( false );
201  }
202 
203  protected function getGroupName() {
204  return 'changes';
205  }
206 
210  function setTopText() {
211  $message = $this->msg( 'newimagestext' )->inContentLanguage();
212  if ( !$message->isDisabled() ) {
213  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
214  $this->getOutput()->addWikiTextAsContent(
215  Html::rawElement( 'div',
216  [
217 
218  'lang' => $contLang->getHtmlCode(),
219  'dir' => $contLang->getDir()
220  ],
221  "\n" . $message->plain() . "\n"
222  )
223  );
224  }
225  }
226 }
SpecialNewFiles\buildForm
buildForm(IContextSource $context)
Definition: SpecialNewFiles.php:113
DerivativeRequest
Similar to FauxRequest, but only fakes URL parameters and method (POST or GET) and use the base reque...
Definition: DerivativeRequest.php:34
SpecialPage\msg
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:792
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:719
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:130
FormOptions\getValue
getValue( $name)
Get the value for the given option name.
Definition: FormOptions.php:182
SpecialNewFiles\$mediaTypes
string[] $mediaTypes
Definition: SpecialNewFiles.php:31
SpecialNewFiles
Definition: SpecialNewFiles.php:26
IncludableSpecialPage
Shortcut to construct an includable special page.
Definition: IncludableSpecialPage.php:29
FormOptions\validateIntBounds
validateIntBounds( $name, $min, $max)
Definition: FormOptions.php:255
FormOptions\fetchValuesFromRequest
fetchValuesFromRequest(WebRequest $r, $optionKeys=null)
Fetch values for all options (or selected options) from the given WebRequest, making them available f...
Definition: FormOptions.php:346
SpecialNewFiles\setTopText
setTopText()
Send the text to be displayed above the options.
Definition: SpecialNewFiles.php:210
MediaWiki\MediaWikiServices\getInstance
static getInstance()
Returns the global default instance of the top level service locator.
Definition: MediaWikiServices.php:161
FormOptions\add
add( $name, $default, $type=self::AUTO)
Add an option to be handled by this FormOptions instance.
Definition: FormOptions.php:83
SpecialPage\addHelpLink
addHelpLink( $to, $overrideBaseUrl=false)
Adds help link with an icon via page indicators.
Definition: SpecialPage.php:828
DerivativeContext
An IContextSource implementation which will inherit context from another source but allow individual ...
Definition: DerivativeContext.php:30
SpecialPage\getConfig
getConfig()
Shortcut to get main config object.
Definition: SpecialPage.php:758
SpecialPage\setHeaders
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
Definition: SpecialPage.php:537
SpecialPage\getUser
getUser()
Shortcut to get the User executing this instance.
Definition: SpecialPage.php:729
SpecialPage\getContext
getContext()
Gets the context this SpecialPage is executed in.
Definition: SpecialPage.php:692
FormOptions\setValue
setValue( $name, $value, $force=false)
Use to set the value of an option.
Definition: FormOptions.php:165
SpecialNewFiles\$opts
FormOptions $opts
Definition: SpecialNewFiles.php:28
SpecialPage\getRequest
getRequest()
Get the WebRequest being used for this instance.
Definition: SpecialPage.php:709
SpecialNewFiles\__construct
__construct()
Definition: SpecialNewFiles.php:33
SpecialNewFiles\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialNewFiles.php:203
IContextSource
Interface for objects which can provide a MediaWiki context on request.
Definition: IContextSource.php:53
$context
$context
Definition: load.php:40
SpecialPage\getLinkRenderer
getLinkRenderer()
Definition: SpecialPage.php:904
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition: FormOptions.php:35
SpecialNewFiles\execute
execute( $par)
Default execute method Checks user permissions.
Definition: SpecialNewFiles.php:37
NewFilesPager
Definition: NewFilesPager.php:28
HTMLForm\factory
static factory( $displayFormat,... $arguments)
Construct a HTMLForm object for given display type.
Definition: HTMLForm.php:307
SpecialPage\outputHeader
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
Definition: SpecialPage.php:639
SpecialPage\including
including( $x=null)
Whether the special page is being evaluated via transclusion.
Definition: SpecialPage.php:230
$type
$type
Definition: testCompression.php:50