File: FileContentHandler.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (83 lines) | stat: -rw-r--r-- 2,747 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php

namespace MediaWiki\Content;

use MediaWiki\MediaWikiServices;
use MediaWiki\Parser\ParserOutput;
use MediaWiki\Revision\RevisionRecord;
use SearchEngine;
use SearchIndexField;
use WikiPage;

/**
 * Content handler for File: files
 * TODO: this handler is 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 = [];
		$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,
		?RevisionRecord $revision = null
	) {
		$fields = [];

		$title = $page->getTitle();
		if ( NS_FILE != $title->getNamespace() ) {
			return [];
		}
		$file = MediaWikiServices::getInstance()->getRepoGroup()->getLocalRepo()
			->newFile( $title );
		if ( !$file || !$file->exists() ) {
			return [];
		}

		$handler = $file->getHandler();
		if ( $handler ) {
			$fileText = $handler->getEntireText( $file );
			if ( $fileText !== false ) {
				$fields['file_text'] = $fileText;
			}
		}
		$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;
	}

}

/** @deprecated class alias since 1.43 */
class_alias( FileContentHandler::class, 'FileContentHandler' );