/** * Send an event to the notifications of a user * * @param IEvent $event * @return null */ public function receive(IEvent $event) { $selfAction = $event->getAffectedUser() === $event->getAuthor(); $streamSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'stream', $event->getType()); $emailSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'email', $event->getType()); $emailSetting = $emailSetting ? $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'batchtime') : false; $types = $this->data->getNotificationTypes($this->l10nFactory->get('activity')); $typeData = $types[$event->getType()]; // User is not the author or wants to see their own actions $createStream = !$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'self'); // User can not control the setting $createStream = $createStream || is_array($typeData) && isset($typeData['methods']) && !in_array(IExtension::METHOD_STREAM, $typeData['methods']); // Add activity to stream if ($streamSetting && $createStream) { $this->data->send($event); } // User is not the author or wants to see their own actions $createEmail = !$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'selfemail'); // User can not control the setting $createEmail = $createEmail || is_array($typeData) && isset($typeData['methods']) && !in_array(IExtension::METHOD_MAIL, $typeData['methods']); // Add activity to mail queue if ($emailSetting && $createEmail) { $latestSend = $event->getTimestamp() + $emailSetting; $this->data->storeMail($event, $latestSend); } }
/** * Get a list with enabled notification types for a user * * @param string $user Name of the user * @param string $method Should be one of 'stream' or 'email' * @return array */ public function getNotificationTypes($user, $method) { $l = Util::getL10N('activity'); $types = $this->data->getNotificationTypes($l); $notificationTypes = array(); foreach ($types as $type => $desc) { if ($this->getUserSetting($user, $method, $type)) { $notificationTypes[] = $type; } } return $notificationTypes; }
/** * @NoAdminRequired * @NoCSRFRequired * * @return TemplateResponse */ public function displayPanel() { $types = $this->data->getNotificationTypes($this->l10n); $activities = array(); foreach ($types as $type => $desc) { $activities[$type] = array('desc' => $desc, 'email' => $this->userSettings->getUserSetting($this->user, 'email', $type), 'stream' => $this->userSettings->getUserSetting($this->user, 'stream', $type)); } $settingBatchTime = UserSettings::EMAIL_SEND_HOURLY; if ($this->userSettings->getUserSetting($this->user, 'setting', 'batchtime') == 3600 * 24 * 7) { $settingBatchTime = UserSettings::EMAIL_SEND_WEEKLY; } else { if ($this->userSettings->getUserSetting($this->user, 'setting', 'batchtime') == 3600 * 24) { $settingBatchTime = UserSettings::EMAIL_SEND_DAILY; } } return new TemplateResponse('activity', 'personal', ['activities' => $activities, 'activity_email' => $this->config->getUserValue($this->user, 'settings', 'email', ''), 'setting_batchtime' => $settingBatchTime, 'notify_self' => $this->userSettings->getUserSetting($this->user, 'setting', 'self'), 'notify_selfemail' => $this->userSettings->getUserSetting($this->user, 'setting', 'selfemail')], ''); }
/** * @NoAdminRequired * @NoCSRFRequired * * @return TemplateResponse */ public function displayPanel() { $types = $this->data->getNotificationTypes($this->l10n); $activities = array(); foreach ($types as $type => $desc) { if (is_array($desc)) { $methods = isset($desc['methods']) ? $desc['methods'] : [IExtension::METHOD_STREAM, IExtension::METHOD_MAIL]; $desc = isset($desc['desc']) ? $desc['desc'] : ''; } else { $methods = [IExtension::METHOD_STREAM, IExtension::METHOD_MAIL]; } $activities[$type] = array('desc' => $desc, IExtension::METHOD_MAIL => $this->userSettings->getUserSetting($this->user, 'email', $type), IExtension::METHOD_STREAM => $this->userSettings->getUserSetting($this->user, 'stream', $type), 'methods' => $methods); } $settingBatchTime = UserSettings::EMAIL_SEND_HOURLY; $currentSetting = (int) $this->userSettings->getUserSetting($this->user, 'setting', 'batchtime'); if ($currentSetting === 3600 * 24 * 7) { $settingBatchTime = UserSettings::EMAIL_SEND_WEEKLY; } else { if ($currentSetting === 3600 * 24) { $settingBatchTime = UserSettings::EMAIL_SEND_DAILY; } } return new TemplateResponse('activity', 'personal', ['activities' => $activities, 'activity_email' => $this->config->getUserValue($this->user, 'settings', 'email', ''), 'setting_batchtime' => $settingBatchTime, 'notify_self' => $this->userSettings->getUserSetting($this->user, 'setting', 'self'), 'notify_selfemail' => $this->userSettings->getUserSetting($this->user, 'setting', 'selfemail'), 'methods' => [IExtension::METHOD_MAIL => $this->l10n->t('Mail'), IExtension::METHOD_STREAM => $this->l10n->t('Stream')]], ''); }
/** * @dataProvider dataGetNotificationTypes * @param string $typeKey */ public function testGetNotificationTypes($typeKey) { $this->assertArrayHasKey($typeKey, $this->data->getNotificationTypes($this->activityLanguage)); // Check cached version aswell $this->assertArrayHasKey($typeKey, $this->data->getNotificationTypes($this->activityLanguage)); }
/** * Get a list with enabled notification types for a user * * @param string $user Name of the user * @param string $method Should be one of 'stream' or 'email' * @return array */ public static function getNotificationTypes($user, $method) { $l = \OC_L10N::get('activity'); $data = new Data(\OC::$server->getActivityManager()); $types = $data->getNotificationTypes($l); $notificationTypes = array(); foreach ($types as $type => $desc) { if (self::getUserSetting($user, $method, $type)) { $notificationTypes[] = $type; } } return $notificationTypes; }