diff options
Diffstat (limited to 'www/wiki/includes/content/FileContentHandler.php')
-rw-r--r-- | www/wiki/includes/content/FileContentHandler.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/www/wiki/includes/content/FileContentHandler.php b/www/wiki/includes/content/FileContentHandler.php new file mode 100644 index 00000000..3028dfda --- /dev/null +++ b/www/wiki/includes/content/FileContentHandler.php @@ -0,0 +1,65 @@ +<?php + +/** + * Content handler for File: files + * TODO: this handler s not used directly now, + * but instead manually called by WikitextHandler. + * This should be fixed in the future. + */ +class FileContentHandler extends WikitextContentHandler { + + public function getFieldsForSearchIndex( SearchEngine $engine ) { + $fields['file_media_type'] = + $engine->makeSearchFieldMapping( 'file_media_type', SearchIndexField::INDEX_TYPE_KEYWORD ); + $fields['file_media_type']->setFlag( SearchIndexField::FLAG_CASEFOLD ); + $fields['file_mime'] = + $engine->makeSearchFieldMapping( 'file_mime', SearchIndexField::INDEX_TYPE_SHORT_TEXT ); + $fields['file_mime']->setFlag( SearchIndexField::FLAG_CASEFOLD ); + $fields['file_size'] = + $engine->makeSearchFieldMapping( 'file_size', SearchIndexField::INDEX_TYPE_INTEGER ); + $fields['file_width'] = + $engine->makeSearchFieldMapping( 'file_width', SearchIndexField::INDEX_TYPE_INTEGER ); + $fields['file_height'] = + $engine->makeSearchFieldMapping( 'file_height', SearchIndexField::INDEX_TYPE_INTEGER ); + $fields['file_bits'] = + $engine->makeSearchFieldMapping( 'file_bits', SearchIndexField::INDEX_TYPE_INTEGER ); + $fields['file_resolution'] = + $engine->makeSearchFieldMapping( 'file_resolution', SearchIndexField::INDEX_TYPE_INTEGER ); + $fields['file_text'] = + $engine->makeSearchFieldMapping( 'file_text', SearchIndexField::INDEX_TYPE_TEXT ); + return $fields; + } + + public function getDataForSearchIndex( + WikiPage $page, + ParserOutput $parserOutput, + SearchEngine $engine + ) { + $fields = []; + + $title = $page->getTitle(); + if ( NS_FILE != $title->getNamespace() ) { + return []; + } + $file = wfLocalFile( $title ); + if ( !$file || !$file->exists() ) { + return []; + } + + $handler = $file->getHandler(); + if ( $handler ) { + $fields['file_text'] = $handler->getEntireText( $file ); + } + $fields['file_media_type'] = $file->getMediaType(); + $fields['file_mime'] = $file->getMimeType(); + $fields['file_size'] = $file->getSize(); + $fields['file_width'] = $file->getWidth(); + $fields['file_height'] = $file->getHeight(); + $fields['file_bits'] = $file->getBitDepth(); + $fields['file_resolution'] = + (int)floor( sqrt( $fields['file_width'] * $fields['file_height'] ) ); + + return $fields; + } + +} |