2014-06-04 14:51:17 +04:00
|
|
|
<?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) {
|
2014-06-04 14:51:17 +04:00
|
|
|
if ($method == 'setting' && $type == 'batchtime') {
|
|
|
|
return 3600;
|
|
|
|
}
|
|
|
|
|
2014-06-04 15:02:45 +04:00
|
|
|
$settings = self::getDefaultTypes($method);
|
2014-06-04 14:51:17 +04:00
|
|
|
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) {
|
2014-06-04 14:51:17 +04:00
|
|
|
$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
|
|
|
|
*
|
2014-06-04 14:51:17 +04:00
|
|
|
* @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'
|
2014-06-04 14:51:17 +04:00
|
|
|
* @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) {
|
2014-06-04 14:51:17 +04:00
|
|
|
$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) . "')";
|
|
|
|
}
|
2014-06-04 15:04:30 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
2014-06-04 14:51:17 +04:00
|
|
|
}
|