mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-18 10:52:27 +00:00
7619a76877
Change-Id: I5bf398cdb76a577543f6526ac1bee4a73897103d
92 lines
2.5 KiB
PHP
92 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\Notifications\Formatters;
|
|
|
|
use InvalidArgumentException;
|
|
use UnexpectedValueException;
|
|
|
|
class EchoIcon {
|
|
|
|
/**
|
|
* @param string $icon Name of icon as registered in BeforeCreateEchoEvent hook
|
|
* @param string $dir either 'ltr' or 'rtl'
|
|
* @return string
|
|
*/
|
|
public static function getUrl( $icon, $dir ) {
|
|
global $wgEchoNotificationIcons, $wgExtensionAssetsPath;
|
|
if ( !isset( $wgEchoNotificationIcons[$icon] ) ) {
|
|
throw new InvalidArgumentException( "The $icon icon is not registered" );
|
|
}
|
|
|
|
$iconInfo = $wgEchoNotificationIcons[$icon];
|
|
$needsPrefixing = true;
|
|
|
|
// Now we need to check it has a valid url/path
|
|
if ( isset( $iconInfo['url'] ) && $iconInfo['url'] ) {
|
|
$iconUrl = $iconInfo['url'];
|
|
$needsPrefixing = false;
|
|
} elseif ( isset( $iconInfo['path'] ) && $iconInfo['path'] ) {
|
|
$iconUrl = $iconInfo['path'];
|
|
} else {
|
|
// Fallback to hardcoded 'placeholder'. This is used if someone
|
|
// doesn't configure the 'site' icon for example.
|
|
$icon = 'placeholder';
|
|
$iconUrl = $wgEchoNotificationIcons['placeholder']['path'];
|
|
}
|
|
|
|
// Might be an array with different icons for ltr/rtl
|
|
if ( is_array( $iconUrl ) ) {
|
|
if ( !isset( $iconUrl[$dir] ) ) {
|
|
throw new UnexpectedValueException( "Icon type $icon doesn't have an icon for $dir directionality" );
|
|
}
|
|
|
|
$iconUrl = $iconUrl[$dir];
|
|
}
|
|
|
|
// And if it was a 'path', stick the assets path in front
|
|
if ( $needsPrefixing ) {
|
|
$iconUrl = "$wgExtensionAssetsPath/$iconUrl";
|
|
}
|
|
|
|
return $iconUrl;
|
|
}
|
|
|
|
/**
|
|
* Get a link to a rasterized version of the icon
|
|
*
|
|
* @param string $icon Icon name
|
|
* @param string $lang
|
|
* @return string URL to the rasterized version of the icon
|
|
*/
|
|
public static function getRasterizedUrl( $icon, $lang ) {
|
|
global $wgEchoNotificationIcons;
|
|
if ( !isset( $wgEchoNotificationIcons[$icon] ) ) {
|
|
throw new InvalidArgumentException( "The $icon icon is not registered" );
|
|
}
|
|
|
|
$url = $wgEchoNotificationIcons[ $icon ][ 'url' ] ?? null;
|
|
|
|
// If the defined URL is explicitly false, use placeholder
|
|
if ( $url === false ) {
|
|
$icon = 'placeholder';
|
|
}
|
|
|
|
// If the URL is null or false call the resource loader
|
|
// rasterizing module
|
|
if ( $url === false || $url === null ) {
|
|
$iconUrl = wfScript( 'load' ) . '?' . wfArrayToCgi( [
|
|
'modules' => 'ext.echo.emailicons',
|
|
'image' => $icon,
|
|
'lang' => $lang,
|
|
'format' => 'rasterized'
|
|
] );
|
|
} else {
|
|
// For icons that are defined by URL
|
|
$iconUrl = $wgEchoNotificationIcons[ $icon ][ 'url' ];
|
|
}
|
|
|
|
return $iconUrl;
|
|
}
|
|
|
|
}
|