activity/lib/usersettings.php

184 строки
5.1 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\Config;
/**
* Class UserSettings
*
* @package OCA\Activity
*/
class UserSettings
{
const EMAIL_SEND_HOURLY = 0;
const EMAIL_SEND_DAILY = 1;
const EMAIL_SEND_WEEKLY = 2;
2014-06-04 15:02:45 +04:00
/**
* 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 or 'batchtime'
* @return string|int
*/
public static function getUserSetting($user, $method, $type) {
return Config::getUserValue(
$user,
'activity',
'notify_' . $method . '_' . $type,
self::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 or 'batchtime'
* @return string|int
*/
public static function getDefaultSetting($method, $type) {
if ($method == 'setting' && $type == 'batchtime') {
return 3600;
}
2014-06-04 15:02:45 +04:00
$settings = self::getDefaultTypes($method);
return in_array($type, $settings);
}
2014-06-04 15:02:45 +04:00
/**
* Get the default selection of types for a method
*
* @param string $method Should be one of 'stream' or 'email'
* @return array Array of strings
*/
public static function getDefaultTypes($method) {
$settings = array();
switch ($method) {
case 'stream':
$settings[] = Data::TYPE_SHARE_CREATED;
$settings[] = Data::TYPE_SHARE_CHANGED;
$settings[] = Data::TYPE_SHARE_DELETED;
// $settings[] = Data::TYPE_SHARE_RESHARED;
//
// $settings[] = Data::TYPE_SHARE_DOWNLOADED;
case 'email':
$settings[] = Data::TYPE_SHARED;
// $settings[] = Data::TYPE_SHARE_EXPIRED;
// $settings[] = Data::TYPE_SHARE_UNSHARED;
//
// $settings[] = Data::TYPE_SHARE_UPLOADED;
//
// $settings[] = Data::TYPE_STORAGE_QUOTA_90;
// $settings[] = Data::TYPE_STORAGE_FAILURE;
}
return $settings;
}
/**
2014-06-04 15:02:45 +04:00
* Get a query condition with the list of type the user selected
*
* @param string $user Name of the user
2014-06-04 15:02:45 +04:00
* @param string $method Should be one of 'stream' or 'email'
* @param string $filter Further filter the activities
* @return string Part of the SQL query limiting the activities
*/
2014-06-04 15:02:45 +04:00
public static function getNotificationTypeQuery($user, $method, $filter) {
$l = \OC_L10N::get('activity');
$types = Data::getNotificationTypes($l);
$userActivities = array();
foreach ($types as $type => $desc) {
if (self::getUserSetting($user, $method, $type)) {
$userActivities[] = $type;
}
}
$userActivities = Data::filterNotificationTypes($userActivities, $filter);
// We don't want to display any activities
if (empty($userActivities)) {
return '1 = 0';
}
return "`type` IN ('" . implode("','", $userActivities) . "')";
}
/**
* 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 static function filterUsersBySetting($users, $method, $type) {
if (empty($users) || !is_array($users)) {
return array();
}
$preferences = new \OC\Preferences(\OC_DB::getConnection());
$filteredUsers = array();
$potentialUsers = $preferences->getValueForUsers('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 = $preferences->getValueForUsers('activity', 'notify_setting_batchtime', array_keys($filteredUsers));
foreach ($potentialUsers as $user => $value) {
$filteredUsers[$user] = $value;
}
}
if (!empty($users)) {
// If the setting is enabled by default,
// we add all users that didn't set the preference yet.
if (UserSettings::getDefaultSetting($method, $type)) {
foreach ($users as $user) {
if ($method == 'stream') {
$filteredUsers[$user] = true;
} else {
$filteredUsers[$user] = self::getDefaultSetting('setting', 'batchtime');
}
}
}
}
return $filteredUsers;
}
}