зеркало из https://github.com/nextcloud/activity.git
172 строки
4.4 KiB
PHP
172 строки
4.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* ownCloud - Activity App
|
|
*
|
|
* @author Joas Schilling
|
|
* @copyright 2014 Joas Schilling nickvergessen@owncloud.com
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
* License as published by the Free Software Foundation; either
|
|
* version 3 of the License, or any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
namespace OCA\Activity;
|
|
|
|
use OCP\Activity\IManager;
|
|
use OCP\IConfig;
|
|
use OCP\Util;
|
|
|
|
/**
|
|
* Class UserSettings
|
|
*
|
|
* @package OCA\Activity
|
|
*/
|
|
class UserSettings {
|
|
/** @var IManager */
|
|
protected $manager;
|
|
|
|
/** @var IConfig */
|
|
protected $config;
|
|
|
|
/** @var Data */
|
|
protected $data;
|
|
|
|
const EMAIL_SEND_HOURLY = 0;
|
|
const EMAIL_SEND_DAILY = 1;
|
|
const EMAIL_SEND_WEEKLY = 2;
|
|
|
|
/**
|
|
* @param IManager $manager
|
|
* @param IConfig $config
|
|
* @param Data $data
|
|
*/
|
|
public function __construct(IManager $manager, IConfig $config, Data $data) {
|
|
$this->manager = $manager;
|
|
$this->config = $config;
|
|
$this->data = $data;
|
|
}
|
|
|
|
/**
|
|
* Get a setting for a user
|
|
*
|
|
* Falls back to some good default values if the user does not have a preference
|
|
*
|
|
* @param string $user
|
|
* @param string $method Should be one of 'stream', 'email' or 'setting'
|
|
* @param string $type One of the activity types, 'batchtime' or 'self'
|
|
* @return mixed
|
|
*/
|
|
public function getUserSetting($user, $method, $type) {
|
|
return $this->config->getUserValue(
|
|
$user,
|
|
'activity',
|
|
'notify_' . $method . '_' . $type,
|
|
$this->getDefaultSetting($method, $type)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get a good default setting for a preference
|
|
*
|
|
* @param string $method Should be one of 'stream', 'email' or 'setting'
|
|
* @param string $type One of the activity types, 'batchtime', 'self' or 'selfemail'
|
|
* @return bool|int
|
|
*/
|
|
public function getDefaultSetting($method, $type) {
|
|
if ($method === 'setting') {
|
|
if ($type === 'batchtime') {
|
|
return 3600;
|
|
} else if ($type === 'self') {
|
|
return true;
|
|
} else if ($type === 'selfemail') {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$settings = $this->manager->getDefaultTypes($method);
|
|
return in_array($type, $settings);
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|