mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-01 10:56:44 +00:00
10a99b016b
When a presentation model is specified for an event type, check if the class actually exist before trying to use it. Logs to debug when the class is not specified or doesn't exist. This is useful for extensions that get undeployed (looking at you, OpenStackManager). Their notifications cannot really render since the code to render them is not available anymore. This make them simply go away and the notification counts get updated shortly after because unrenderable notifications are marked as deleted. Bug: T195253 Change-Id: I6335204942002bba3e73887ab81e55a27b4e181a
72 lines
1.7 KiB
PHP
72 lines
1.7 KiB
PHP
<?php
|
|
use MediaWiki\Logger\LoggerFactory;
|
|
|
|
/**
|
|
* Abstract class that each "formatter" should implement.
|
|
*
|
|
* A formatter is an output type, example formatters would be:
|
|
* * Special:Notifications
|
|
* * HTML email
|
|
* * plaintext email
|
|
*
|
|
* The formatter does not maintain any state except for the
|
|
* arguments passed in the constructor (user and language)
|
|
*/
|
|
abstract class EchoEventFormatter {
|
|
public function __construct( User $user, Language $language ) {
|
|
$this->user = $user;
|
|
$this->language = $language;
|
|
}
|
|
|
|
/**
|
|
* Equivalent to IContextSource::msg for the current
|
|
* language
|
|
*
|
|
* @return Message
|
|
*/
|
|
protected function msg( /* ,,, */ ) {
|
|
/**
|
|
* @var Message $msg
|
|
*/
|
|
$msg = wfMessage( ...func_get_args() );
|
|
$msg->inLanguage( $this->language );
|
|
|
|
return $msg;
|
|
}
|
|
|
|
/**
|
|
* @param EchoEvent $event
|
|
* @return string|array|bool Output format depends on implementation, false if it cannot be formatted
|
|
*/
|
|
final public function format( EchoEvent $event ) {
|
|
// Deleted events should have been filtered out before getting there.
|
|
// This is just to be sure.
|
|
if ( $event->isDeleted() ) {
|
|
return false;
|
|
}
|
|
|
|
if ( !EchoEventPresentationModel::supportsPresentationModel( $event->getType() ) ) {
|
|
LoggerFactory::getInstance( 'Echo' )->debug(
|
|
"No presentation model found for event type \"{type}\"",
|
|
[
|
|
'type' => $event->getType(),
|
|
]
|
|
);
|
|
return false;
|
|
}
|
|
|
|
$model = EchoEventPresentationModel::factory( $event, $this->language, $this->user );
|
|
if ( !$model->canRender() ) {
|
|
return false;
|
|
}
|
|
|
|
return $this->formatModel( $model );
|
|
}
|
|
|
|
/**
|
|
* @param EchoEventPresentationModel $model
|
|
* @return string|array
|
|
*/
|
|
abstract protected function formatModel( EchoEventPresentationModel $model );
|
|
}
|