7 use Elgg\Traits\Loggable;
69 if (!is_a(
$handler, NotificationEventHandler::class,
true)) {
73 if (!isset($this->events[
$type])) {
74 $this->events[
$type] = [];
114 if (empty($this->events[
$type])) {
115 unset($this->events[
$type]);
163 if (!$this->isRegisteredMethod(
$name)) {
167 unset($this->methods[
$name]);
188 return in_array($method, $this->methods);
201 $object_type =
$object->getType();
202 $object_subtype =
$object->getSubtype();
209 $registered = $this->isRegisteredEvent($object_type, $object_subtype,
$action);
216 $registered = (bool) $this->elgg_events->triggerResults(
'enqueue',
'notification',
$params, $registered);
223 $this->elgg_events->trigger(
'enqueue',
'notifications',
$object);
236 $handler = NotificationEventHandler::class;
256 $delivery_matrix = [];
260 while (time() < $stopTime) {
262 $event = $this->queue->dequeue();
275 $this->elgg_events->trigger(
'dequeue',
'notifications', $event->
getObject());
277 $handler = $this->getNotificationHandler($event);
280 $delivery_matrix[$event->getDescription()] = $handler->send();
282 }
catch (\Throwable $t) {
283 $this->getLogger()->error($t);
287 return $matrix ? $delivery_matrix :
$count;
328 if (empty($this->methods)) {
332 $params[
'recipients'] = array_filter($recipients,
function($e) {
if(! $user||! $user->canDelete()) $name
$params
Saves global plugin settings.
return[ 'admin/delete_admin_notices'=>['access'=> 'admin'], 'admin/menu/save'=>['access'=> 'admin'], 'admin/plugins/activate'=>['access'=> 'admin'], 'admin/plugins/activate_all'=>['access'=> 'admin'], 'admin/plugins/deactivate'=>['access'=> 'admin'], 'admin/plugins/deactivate_all'=>['access'=> 'admin'], 'admin/plugins/set_priority'=>['access'=> 'admin'], 'admin/security/security_txt'=>['access'=> 'admin'], 'admin/security/settings'=>['access'=> 'admin'], 'admin/security/regenerate_site_secret'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['access'=> 'admin'], 'admin/site/flush_cache'=>['access'=> 'admin'], 'admin/site/icons'=>['access'=> 'admin'], 'admin/site/set_maintenance_mode'=>['access'=> 'admin'], 'admin/site/set_robots'=>['access'=> 'admin'], 'admin/site/theme'=>['access'=> 'admin'], 'admin/site/unlock_upgrade'=>['access'=> 'admin'], 'admin/site/settings'=>['access'=> 'admin'], 'admin/upgrade'=>['access'=> 'admin'], 'admin/upgrade/reset'=>['access'=> 'admin'], 'admin/user/ban'=>['access'=> 'admin'], 'admin/user/bulk/ban'=>['access'=> 'admin'], 'admin/user/bulk/delete'=>['access'=> 'admin'], 'admin/user/bulk/unban'=>['access'=> 'admin'], 'admin/user/bulk/validate'=>['access'=> 'admin'], 'admin/user/change_email'=>['access'=> 'admin'], 'admin/user/delete'=>['access'=> 'admin'], 'admin/user/login_as'=>['access'=> 'admin'], 'admin/user/logout_as'=>[], 'admin/user/makeadmin'=>['access'=> 'admin'], 'admin/user/resetpassword'=>['access'=> 'admin'], 'admin/user/removeadmin'=>['access'=> 'admin'], 'admin/user/unban'=>['access'=> 'admin'], 'admin/user/validate'=>['access'=> 'admin'], 'annotation/delete'=>[], 'avatar/upload'=>[], 'comment/save'=>[], 'diagnostics/download'=>['access'=> 'admin'], 'entity/chooserestoredestination'=>[], 'entity/delete'=>[], 'entity/mute'=>[], 'entity/restore'=>[], 'entity/subscribe'=>[], 'entity/trash'=>[], 'entity/unmute'=>[], 'entity/unsubscribe'=>[], 'login'=>['access'=> 'logged_out'], 'logout'=>[], 'notifications/mute'=>['access'=> 'public'], 'plugins/settings/remove'=>['access'=> 'admin'], 'plugins/settings/save'=>['access'=> 'admin'], 'plugins/usersettings/save'=>[], 'register'=>['access'=> 'logged_out', 'middleware'=>[\Elgg\Router\Middleware\RegistrationAllowedGatekeeper::class,],], 'river/delete'=>[], 'settings/notifications'=>[], 'settings/notifications/subscriptions'=>[], 'user/changepassword'=>['access'=> 'public'], 'user/requestnewpassword'=>['access'=> 'public'], 'useradd'=>['access'=> 'admin'], 'usersettings/save'=>[], 'widgets/add'=>[], 'widgets/delete'=>[], 'widgets/move'=>[], 'widgets/save'=>[],]
A generic class that contains shared code among \ElggExtender, \ElggEntity, and \ElggRelationship.
Exception thrown if an argument is not of the expected type.
Notification Event Handler for instant notifications.
Instant notification event.
Notification Event Handler handles preparation of a notification.
enqueueEvent(string $action, \ElggData $object, ?\ElggEntity $actor=null)
Add a notification event to the queue.
sendInstantNotifications(\ElggEntity $sender, array $recipients=[], array $params=[])
Notify a user via their preferences.
isRegisteredEvent(string $type, string $subtype, string $action)
Check if a notification event is registered.
unregisterMethod(string $name)
Unregister a delivery method for notifications.
getEvents()
Return the notification events.
getNotificationHandler(NotificationEvent $event)
Returns notification event handler based on event.
registerEvent(string $type, string $subtype, array $actions=[], string $handler=NotificationEventHandler::class)
Register a notification event.
__construct(Queue $queue, \ElggSession $session, EventsService $elgg_events)
Constructor.
isRegisteredMethod(string $method)
Check if a notification method is registed.
registerMethod(string $name)
Register a delivery method for notifications.
processQueue($stopTime, $matrix=false)
Pull notification events from queue until stop time is reached.
unregisterEvent(string $type, string $subtype, array $actions=[])
Unregister a notification event.
getMethods()
Returns registered delivery methods for notifications.
const ELGG_IGNORE_ACCESS
elgg_call() flags
if($email instanceof \Elgg\Email) $object
elgg_call(int $flags, Closure $closure)
Calls a callable autowiring the arguments using public DI services and applying logic based on flags.
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Notification event interface.
getActor()
Get the actor of the event.
getAction()
Get the name of the action.
getObject()
Get the object of the event.
catch(\Elgg\Exceptions\PluginException $e)
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.
elgg_get_logged_in_user_entity()
Return the current logged in user, or null if no user is logged in.
if(! $menu instanceof \Elgg\Menu\PreparedMenu) $actions