X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fspecials%2FSpecialMIMEsearch.php;h=52cb30a1bcdc43a9b61c9ef8f2fafd4e29475a14;hp=15696bcbd855038810ba5757263d796a378fe489;hb=c584722cc2e3d33edae58d46c2149063b3fc6d72;hpb=ae15d1df13099dd23c73e49520f1c1ae1a54ec45 diff --git a/includes/specials/SpecialMIMEsearch.php b/includes/specials/SpecialMIMEsearch.php index 15696bcbd8..52cb30a1bc 100644 --- a/includes/specials/SpecialMIMEsearch.php +++ b/includes/specials/SpecialMIMEsearch.php @@ -111,7 +111,8 @@ class MIMEsearchPage extends QueryPage { function getPageHeader() { $formDescriptor = [ 'mime' => [ - 'type' => 'text', + 'type' => 'combobox', + 'options' => $this->getSuggestionsForTypes(), 'name' => 'mime', 'label-message' => 'mimetype', 'required' => true, @@ -127,6 +128,33 @@ class MIMEsearchPage extends QueryPage { ->displayForm( false ); } + protected function getSuggestionsForTypes() { + $dbr = wfGetDB( DB_REPLICA ); + $lastMajor = null; + $suggestions = []; + $result = $dbr->select( + [ 'image' ], + // We ignore img_media_type, but using it in the query is needed for MySQL to choose a + // sensible execution plan + [ 'img_media_type', 'img_major_mime', 'img_minor_mime' ], + [], + __METHOD__, + [ 'GROUP BY' => [ 'img_media_type', 'img_major_mime', 'img_minor_mime' ] ] + ); + foreach ( $result as $row ) { + $major = $row->img_major_mime; + $minor = $row->img_minor_mime; + $suggestions[ "$major/$minor" ] = "$major/$minor"; + if ( $lastMajor === $major ) { + // If there are at least two with the same major mime type, also include the wildcard + $suggestions[ "$major/*" ] = "$major/*"; + } + $lastMajor = $major; + } + ksort( $suggestions ); + return $suggestions; + } + public function execute( $par ) { $this->mime = $par ? $par : $this->getRequest()->getText( 'mime' ); $this->mime = trim( $this->mime );