Manual:Hooks/UploadVerifyFile
UploadVerifyFile | |
---|---|
Available from version 1.17.0 Called when a file is uploaded, to allow extra file verification to take place | |
Define function: | public static function onUploadVerifyFile( $upload, $mime, &$error ) { ... }
|
Attach hook: | In extension.json:
{
"Hooks": {
"UploadVerifyFile": "MediaWiki\\Extension\\MyExtension\\Hooks::onUploadVerifyFile"
}
}
|
Called from: | File(s): UploadBase.php Function(s): UploadBase::verifyFile() |
Interface: | UploadVerifyFileHook.php |
For more information about attaching hooks, see Manual:Hooks .
For examples of extensions using this hook, see Category:UploadVerifyFile extensions.
Details
edit$upload
: an instance of UploadBase, with all info about the upload.$mime
: the uploaded file's mime type, as detected by MediaWiki. Handlers will typically only apply for specific mime types.&$error
: output true if the file is valid. Otherwise, an indexed array representing the problem with the file, where the first element is the message key and the remaining elements are used as parameters to the message.
Example
editLimit image size and dimensions for regular images, but bypass that size on webm videos. Note that this code doesn't override the wiki's predefined max upload size. Users with the custom uploadlimit-exempt
right will bypass the checks done in this hook.
$wgHooks['UploadVerifyUpload'][] = function( UploadBase $upload, User $user, $props, $comment, $pageText, &$error ) {
$maxWidth = 1024;
$maxHeight = 1024;
$maxSizeKB = 600;
if ( !$props ) {
$mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
$props = $mwProps->getPropsFromPath( $upload->getTempPath(), true );
}
$title = $upload->getTitle();
if ( !$props || !$title ) {
return;
}
// UPGRADE: Pre 1.34: Use $user->isAllowed( 'uploadlimit-exempt' )
if ( $user && MediaWiki\MediaWikiServices::getInstance()->getPermissionManager()->userHasRight( $user, 'uploadlimit-exempt' ) ) {
# Skip verification for users with uploadlimit-exempt right
return;
}
if ( preg_match( '/.webm$/i', $title->getText() ) ) {
# Skip verification for webm videos
return;
}
if ( $props['width'] > $maxWidth || $props['height'] > $maxHeight ) {
wfDebugLog( 'xxx-uploadlimit', sprintf( '[dimensions] triggered by %s. Actual dimensions: %s x %s. %s', $user->getName(), $props['width'], $props['height'], $title->getText() ) );
$error = new ApiMessage( [ 'custom-uploadlimit-dimensions', "$maxWidth x $maxHeight px" ], 'custom-uploadlimit-dimensions' );
} elseif ( $props['size'] > $maxSizeKB * 1024 ) {
wfDebugLog( 'xxx-uploadlimit', sprintf( '[size] triggered by %s. Actual size: %s. %s', $user->getName(), $props['size'], $title->getText() ) );
$error = new ApiMessage( [ 'custom-uploadlimit-size', "$maxSizeKB KB" ], 'custom-uploadlimit-size' );
}
};