mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-12 07:55:53 +00:00
ce7a46f7ed
Provides a basic push notifier implementation. Since the push service is not yet in place, all it does for now is log debug output when a notification is to be sent. To register the push notifier, add the following configuration to LocalSettings.php: $wgEchoNotifiers['push'] = [ 'EchoPush\\PushNotifier', 'notifyWithPush' ]; $wgDefaultNotifyTypeAvailability['push'] = true; $wgNotifyTypeAvailabilityByCategory['system']['push'] = false; $wgNotifyTypeAvailabilityByCategory['system-noemail']['push'] = false; We'll register the notifier in configuration for now, rather than hard-coding the default in extension.json, in order to have control over when and where it rolls out (beta vs. prod, as well as which wikis). Since the push notifier implementation depends on jobs being processed by the job queue, I also recommend adding the following configuration setting to ensure that all pending jobs are processed at the end of each web request: // ensure all pending jobs are processed when a web request completes $wgJobRunRate = PHP_INT_MAX; Bug: T252899 Change-Id: Ie7f222443045d30620ff297b006104ef18a074a8
33 lines
855 B
PHP
33 lines
855 B
PHP
<?php
|
|
|
|
namespace EchoPush;
|
|
|
|
use CentralIdLookup;
|
|
use EchoEvent;
|
|
use JobQueueGroup;
|
|
use User;
|
|
|
|
class PushNotifier {
|
|
|
|
/**
|
|
* Submits a notification derived from an Echo event to each push notifications service
|
|
* subscription found for a user, via a configured service handler implementation
|
|
* @param User $user
|
|
* @param EchoEvent $event
|
|
*/
|
|
public static function notifyWithPush( User $user, EchoEvent $event ): void {
|
|
JobQueueGroup::singleton()->push( self::createJobForUser( $user ) );
|
|
}
|
|
|
|
/**
|
|
* @param User $user
|
|
* @return NotificationRequestJob
|
|
*/
|
|
private static function createJobForUser( User $user ): NotificationRequestJob {
|
|
$centralId = CentralIdLookup::factory()->centralIdFromLocalUser( $user );
|
|
$params = [ 'centralId' => $centralId ];
|
|
return new NotificationRequestJob( 'EchoPushNotificationRequest', $params );
|
|
}
|
|
|
|
}
|