/** * Send an email to {$limit} users * * @param int $limit Number of users we want to send an email to * @param int $sendTime The latest send time * @return int Number of users we sent an email to */ protected function runStep($limit, $sendTime) { // Get all users which should receive an email $affectedUsers = $this->mqHandler->getAffectedUsers($limit, $sendTime); if (empty($affectedUsers)) { // No users found to notify, mission abort return 0; } $userLanguages = $this->config->getUserValueForUsers('core', 'lang', $affectedUsers); $userTimezones = $this->config->getUserValueForUsers('core', 'timezone', $affectedUsers); $userEmails = $this->config->getUserValueForUsers('settings', 'email', $affectedUsers); // Send Email $default_lang = $this->config->getSystemValue('default_language', 'en'); $defaultTimeZone = date_default_timezone_get(); foreach ($affectedUsers as $user) { if (empty($userEmails[$user])) { // The user did not setup an email address // So we will not send an email :( $this->logger->debug("Couldn't send notification email to user '" . $user . "' (email address isn't set for that user)", ['app' => 'activity']); continue; } $language = !empty($userLanguages[$user]) ? $userLanguages[$user] : $default_lang; $timezone = !empty($userTimezones[$user]) ? $userTimezones[$user] : $defaultTimeZone; $this->mqHandler->sendEmailToUser($user, $userEmails[$user], $language, $timezone, $sendTime); } // Delete all entries we dealt with $this->mqHandler->deleteSentItems($affectedUsers, $sendTime); return sizeof($affectedUsers); }
/** * Send an email to {$limit} users * * @param int $limit Number of users we want to send an email to * @return int Number of users we sent an email to */ protected function runStep($limit) { // We don't use time() but "time() - 1" here, so we don't run into // runtime issues later and delete emails, which were created in the // same second, but were not collected for the emails. $sendTime = time() - 1; // Get all users which should receive an email $affectedUsers = $this->mqHandler->getAffectedUsers($limit, $sendTime); if (empty($affectedUsers)) { // No users found to notify, mission abort return 0; } $userLanguages = $this->config->getUserValueForUsers('core', 'lang', $affectedUsers); $userTimezones = $this->config->getUserValueForUsers('core', 'timezone', $affectedUsers); $userEmails = $this->config->getUserValueForUsers('settings', 'email', $affectedUsers); // Get all items for these users $mailData = $this->mqHandler->getItemsForUsers($affectedUsers, $sendTime); // Send Email $default_lang = $this->config->getSystemValue('default_language', 'en'); $defaultTimeZone = date_default_timezone_get(); foreach ($mailData as $user => $data) { if (empty($userEmails[$user])) { // The user did not setup an email address // So we will not send an email :( $this->logger->debug("Couldn't send notification email to user '" . $user . "' (email address isn't set for that user)", ['app' => 'activity']); continue; } $language = !empty($userLanguages[$user]) ? $userLanguages[$user] : $default_lang; $timezone = !empty($userTimezones[$user]) ? $userTimezones[$user] : $defaultTimeZone; $this->mqHandler->sendEmailToUser($user, $userEmails[$user], $language, $timezone, $data); } // Delete all entries we dealt with $this->mqHandler->deleteSentItems($affectedUsers, $sendTime); return sizeof($affectedUsers); }
/** * Filters the given user array by their notification setting * * @param array $users * @param string $method * @param string $type * @return array Returns a "username => b:true" Map for method = stream * Returns a "username => i:batchtime" Map for method = email */ public function filterUsersBySetting($users, $method, $type) { if (empty($users) || !is_array($users)) { return array(); } $filteredUsers = array(); $potentialUsers = $this->config->getUserValueForUsers('activity', 'notify_' . $method . '_' . $type, $users); foreach ($potentialUsers as $user => $value) { if ($value) { $filteredUsers[$user] = true; } unset($users[array_search($user, $users)]); } // Get the batch time setting from the database if ($method === 'email') { $potentialUsers = $this->config->getUserValueForUsers('activity', 'notify_setting_batchtime', array_keys($filteredUsers)); foreach ($potentialUsers as $user => $value) { $filteredUsers[$user] = $value; } } if (empty($users)) { return $filteredUsers; } // If the setting is enabled by default, // we add all users that didn't set the preference yet. if ($this->getDefaultSetting($method, $type)) { foreach ($users as $user) { if ($method === 'stream') { $filteredUsers[$user] = true; } else { $filteredUsers[$user] = $this->getDefaultSetting('setting', 'batchtime'); } } } return $filteredUsers; }
/** * Gets the preference for an array of users * @param string $app * @param string $key * @param array $users * @return array Mapped values: userid => value * @deprecated use getUserValueForUsers of \OCP\IConfig instead */ public function getValueForUsers($app, $key, $users) { return $this->config->getUserValueForUsers($app, $key, $users); }