2016-11-30 13:38:49 +03:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
|
|
|
|
*
|
2017-11-06 17:56:42 +03:00
|
|
|
* @author Joas Schilling <coding@schilljs.com>
|
|
|
|
*
|
2016-11-30 13:38:49 +03:00
|
|
|
* @license GNU AGPL version 3 or any later version
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program 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 Affero General Public License
|
2019-12-03 21:57:53 +03:00
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2016-11-30 13:38:49 +03:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace OCA\DAV\CalDAV\Activity\Provider;
|
|
|
|
|
2017-10-16 19:31:43 +03:00
|
|
|
use OCA\DAV\CalDAV\CalDavBackend;
|
2016-11-30 13:38:49 +03:00
|
|
|
use OCP\Activity\IEvent;
|
|
|
|
use OCP\Activity\IProvider;
|
2018-01-24 15:54:49 +03:00
|
|
|
use OCP\IGroup;
|
|
|
|
use OCP\IGroupManager;
|
2017-10-16 19:31:43 +03:00
|
|
|
use OCP\IL10N;
|
2016-11-30 13:38:49 +03:00
|
|
|
use OCP\IUser;
|
|
|
|
use OCP\IUserManager;
|
|
|
|
|
|
|
|
abstract class Base implements IProvider {
|
|
|
|
|
|
|
|
/** @var IUserManager */
|
|
|
|
protected $userManager;
|
|
|
|
|
2018-01-24 15:54:49 +03:00
|
|
|
/** @var string[] */
|
|
|
|
protected $userDisplayNames = [];
|
|
|
|
|
|
|
|
/** @var IGroupManager */
|
|
|
|
protected $groupManager;
|
|
|
|
|
|
|
|
/** @var string[] */
|
|
|
|
protected $groupDisplayNames = [];
|
2016-11-30 13:38:49 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param IUserManager $userManager
|
2018-01-24 15:54:49 +03:00
|
|
|
* @param IGroupManager $groupManager
|
2016-11-30 13:38:49 +03:00
|
|
|
*/
|
2018-01-24 15:54:49 +03:00
|
|
|
public function __construct(IUserManager $userManager, IGroupManager $groupManager) {
|
2016-11-30 13:38:49 +03:00
|
|
|
$this->userManager = $userManager;
|
2018-01-24 15:54:49 +03:00
|
|
|
$this->groupManager = $groupManager;
|
2016-11-30 13:38:49 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param IEvent $event
|
|
|
|
* @param string $subject
|
|
|
|
* @param array $parameters
|
|
|
|
*/
|
|
|
|
protected function setSubjects(IEvent $event, $subject, array $parameters) {
|
|
|
|
$placeholders = $replacements = [];
|
|
|
|
foreach ($parameters as $placeholder => $parameter) {
|
|
|
|
$placeholders[] = '{' . $placeholder . '}';
|
|
|
|
$replacements[] = $parameter['name'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
|
|
|
|
->setRichSubject($subject, $parameters);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param array $eventData
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function generateObjectParameter($eventData) {
|
2016-11-30 14:04:19 +03:00
|
|
|
if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
|
2016-11-30 13:38:49 +03:00
|
|
|
throw new \InvalidArgumentException();
|
2017-10-16 19:31:43 +03:00
|
|
|
}
|
2016-11-30 13:38:49 +03:00
|
|
|
|
|
|
|
return [
|
|
|
|
'type' => 'calendar-event',
|
|
|
|
'id' => $eventData['id'],
|
|
|
|
'name' => $eventData['name'],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2017-10-16 19:31:43 +03:00
|
|
|
/**
|
|
|
|
* @param array $data
|
|
|
|
* @param IL10N $l
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function generateCalendarParameter($data, IL10N $l) {
|
|
|
|
if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
|
|
|
|
$data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
|
|
|
|
return [
|
|
|
|
'type' => 'calendar',
|
|
|
|
'id' => $data['id'],
|
|
|
|
'name' => $l->t('Personal'),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
|
|
'type' => 'calendar',
|
|
|
|
'id' => $data['id'],
|
|
|
|
'name' => $data['name'],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2016-11-30 13:38:49 +03:00
|
|
|
/**
|
|
|
|
* @param int $id
|
|
|
|
* @param string $name
|
|
|
|
* @return array
|
|
|
|
*/
|
2017-10-16 19:31:43 +03:00
|
|
|
protected function generateLegacyCalendarParameter($id, $name) {
|
2016-11-30 13:38:49 +03:00
|
|
|
return [
|
|
|
|
'type' => 'calendar',
|
|
|
|
'id' => $id,
|
|
|
|
'name' => $name,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $uid
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function generateUserParameter($uid) {
|
2018-01-24 15:54:49 +03:00
|
|
|
if (!isset($this->userDisplayNames[$uid])) {
|
|
|
|
$this->userDisplayNames[$uid] = $this->getUserDisplayName($uid);
|
2016-11-30 13:38:49 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
|
|
'type' => 'user',
|
|
|
|
'id' => $uid,
|
2018-01-24 15:54:49 +03:00
|
|
|
'name' => $this->userDisplayNames[$uid],
|
2016-11-30 13:38:49 +03:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $uid
|
|
|
|
* @return string
|
|
|
|
*/
|
2018-01-24 15:54:49 +03:00
|
|
|
protected function getUserDisplayName($uid) {
|
2016-11-30 13:38:49 +03:00
|
|
|
$user = $this->userManager->get($uid);
|
|
|
|
if ($user instanceof IUser) {
|
|
|
|
return $user->getDisplayName();
|
|
|
|
}
|
2018-01-24 15:54:49 +03:00
|
|
|
return $uid;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $gid
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function generateGroupParameter($gid) {
|
|
|
|
if (!isset($this->groupDisplayNames[$gid])) {
|
|
|
|
$this->groupDisplayNames[$gid] = $this->getGroupDisplayName($gid);
|
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
2018-11-23 14:38:24 +03:00
|
|
|
'type' => 'user-group',
|
2018-01-24 15:54:49 +03:00
|
|
|
'id' => $gid,
|
|
|
|
'name' => $this->groupDisplayNames[$gid],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $gid
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
protected function getGroupDisplayName($gid) {
|
|
|
|
$group = $this->groupManager->get($gid);
|
|
|
|
if ($group instanceof IGroup) {
|
|
|
|
return $group->getDisplayName();
|
|
|
|
}
|
|
|
|
return $gid;
|
2016-11-30 13:38:49 +03:00
|
|
|
}
|
|
|
|
}
|