summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-10-13 15:34:26 +0200
committerJoas Schilling <coding@schilljs.com>2016-11-03 12:07:59 +0100
commit52dd27892b80ab91d0776c45d05d8447ac24b76e (patch)
tree56457a3d0eb6119bbe200413557bcb6d76a7329a
parentd3e8463de28197de2d4d61c35906b020ec85b432 (diff)
downloadnextcloud-server-52dd27892b80ab91d0776c45d05d8447ac24b76e.tar.gz
nextcloud-server-52dd27892b80ab91d0776c45d05d8447ac24b76e.zip
Use the event dispatcher
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--apps/dav/appinfo/v1/caldav.php6
-rw-r--r--apps/dav/lib/AppInfo/Application.php57
-rw-r--r--apps/dav/lib/CalDAV/Activity/Backend.php143
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php93
-rw-r--r--apps/dav/lib/Command/CreateCalendar.php5
-rw-r--r--apps/dav/lib/RootCollection.php5
-rw-r--r--apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php16
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php41
8 files changed, 189 insertions, 177 deletions
diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php
index ecd6a171235..9f12a92f4cd 100644
--- a/apps/dav/appinfo/v1/caldav.php
+++ b/apps/dav/appinfo/v1/caldav.php
@@ -48,10 +48,8 @@ $principalBackend = new Principal(
$db = \OC::$server->getDatabaseConnection();
$userManager = \OC::$server->getUserManager();
$random = \OC::$server->getSecureRandom();
-$groupManager = \OC::$server->getGroupManager();
-$activityManager = \OC::$server->getActivityManager();
-$userSession = \OC::$server->getUserSession();
-$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $groupManager, $random, $activityManager, $userSession);
+$dispatcher = \OC::$server->getEventDispatcher();
+$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher);
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 32483e8fd8e..c777f5e5a35 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -24,6 +24,7 @@
*/
namespace OCA\DAV\AppInfo;
+use OCA\DAV\CalDAV\Activity\Backend;
use OCA\DAV\CalDAV\Activity\Extension;
use OCA\DAV\CalDAV\BirthdayService;
use OCA\DAV\Capabilities;
@@ -90,6 +91,62 @@ class Application extends App {
}
});
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function(GenericEvent $event) {
+ /** @var Backend $backend */
+ $backend = $this->getContainer()->query(Backend::class);
+ $backend->onCalendarAdd(
+ $event->getArgument('calendarData')
+ );
+ });
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function(GenericEvent $event) {
+ /** @var Backend $backend */
+ $backend = $this->getContainer()->query(Backend::class);
+ $backend->onCalendarUpdate(
+ $event->getArgument('calendarData'),
+ $event->getArgument('shares'),
+ $event->getArgument('propertyMutations')
+ );
+ });
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function(GenericEvent $event) {
+ /** @var Backend $backend */
+ $backend = $this->getContainer()->query(Backend::class);
+ $backend->onCalendarDelete(
+ $event->getArgument('calendarData'),
+ $event->getArgument('shares')
+ );
+ });
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function(GenericEvent $event) {
+ /** @var Backend $backend */
+ $backend = $this->getContainer()->query(Backend::class);
+ $backend->onCalendarUpdateShares(
+ $event->getArgument('calendarData'),
+ $event->getArgument('shares'),
+ $event->getArgument('add'),
+ $event->getArgument('remove')
+ );
+ });
+
+ $listener = function(GenericEvent $event, $eventName) {
+ /** @var Backend $backend */
+ $backend = $this->getContainer()->query(Backend::class);
+
+ $subject = Extension::SUBJECT_OBJECT_ADD;
+ if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject') {
+ $subject = Extension::SUBJECT_OBJECT_UPDATE;
+ } else if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject') {
+ $subject = Extension::SUBJECT_OBJECT_DELETE;
+ }
+ $backend->onTouchCalendarObject(
+ $subject,
+ $event->getArgument('calendarData'),
+ $event->getArgument('shares'),
+ $event->getArgument('objectData')
+ );
+ };
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', $listener);
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', $listener);
+ $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', $listener);
+
$aM = $this->getContainer()->getServer()->getActivityManager();
$aM->registerExtension(function() {
return $this->getContainer()->query(Extension::class);
diff --git a/apps/dav/lib/CalDAV/Activity/Backend.php b/apps/dav/lib/CalDAV/Activity/Backend.php
index 1c1637cd562..6cf09f6de46 100644
--- a/apps/dav/lib/CalDAV/Activity/Backend.php
+++ b/apps/dav/lib/CalDAV/Activity/Backend.php
@@ -22,8 +22,6 @@
namespace OCA\DAV\CalDAV\Activity;
-use OCA\DAV\CalDAV\CalDavBackend;
-use OCA\DAV\CalDAV\Calendar;
use OCP\Activity\IEvent;
use OCP\Activity\IManager as IActivityManager;
use OCP\IGroup;
@@ -39,9 +37,6 @@ use Sabre\VObject\Reader;
*/
class Backend {
- /** @var CalDavBackend */
- protected $calDavBackend;
-
/** @var IActivityManager */
protected $activityManager;
@@ -52,13 +47,11 @@ class Backend {
protected $userSession;
/**
- * @param CalDavBackend $calDavBackend
* @param IActivityManager $activityManager
* @param IGroupManager $groupManager
* @param IUserSession $userSession
*/
- public function __construct(CalDavBackend $calDavBackend, IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) {
- $this->calDavBackend = $calDavBackend;
+ public function __construct(IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) {
$this->activityManager = $activityManager;
$this->groupManager = $groupManager;
$this->userSession = $userSession;
@@ -67,46 +60,47 @@ class Backend {
/**
* Creates activities when a calendar was creates
*
- * @param int $calendarId
- * @param array $properties
+ * @param array $calendarData
*/
- public function addCalendar($calendarId, array $properties) {
- $this->triggerCalendarActivity(Extension::SUBJECT_ADD, $calendarId, $properties);
+ public function onCalendarAdd(array $calendarData) {
+ $this->triggerCalendarActivity(Extension::SUBJECT_ADD, $calendarData);
}
/**
* Creates activities when a calendar was updated
*
- * @param int $calendarId
+ * @param array $calendarData
+ * @param array $shares
* @param array $properties
*/
- public function updateCalendar($calendarId, array $properties) {
- $this->triggerCalendarActivity(Extension::SUBJECT_UPDATE, $calendarId, $properties);
+ public function onCalendarUpdate(array $calendarData, array $shares, array $properties) {
+ $this->triggerCalendarActivity(Extension::SUBJECT_UPDATE, $calendarData, $shares, $properties);
}
/**
* Creates activities when a calendar was deleted
*
- * @param int $calendarId
+ * @param array $calendarData
+ * @param array $shares
*/
- public function deleteCalendar($calendarId) {
- $this->triggerCalendarActivity(Extension::SUBJECT_DELETE, $calendarId);
+ public function onCalendarDelete(array $calendarData, array $shares) {
+ $this->triggerCalendarActivity(Extension::SUBJECT_DELETE, $calendarData, $shares);
}
/**
* Creates activities for all related users when a calendar was touched
*
* @param string $action
- * @param int $calendarId
+ * @param array $calendarData
+ * @param array $shares
* @param array $changedProperties
*/
- protected function triggerCalendarActivity($action, $calendarId, array $changedProperties = []) {
- $properties = $this->calDavBackend->getCalendarById($calendarId);
- if (!isset($properties['principaluri'])) {
+ protected function triggerCalendarActivity($action, array $calendarData, array $shares = [], array $changedProperties = []) {
+ if (!isset($calendarData['principaluri'])) {
return;
}
- $principal = explode('/', $properties['principaluri']);
+ $principal = explode('/', $calendarData['principaluri']);
$owner = $principal[2];
$currentUser = $this->userSession->getUser();
@@ -118,7 +112,7 @@ class Backend {
$event = $this->activityManager->generateEvent();
$event->setApp('dav')
- ->setObject(Extension::CALENDAR, $calendarId)
+ ->setObject(Extension::CALENDAR, $calendarData['id'])
->setType(Extension::CALENDAR)
->setAuthor($currentUser);
@@ -127,10 +121,10 @@ class Backend {
'{http://apple.com/ns/ical/}calendar-color'
], array_keys($changedProperties));
- if ($action === Extension::SUBJECT_UPDATE && empty($changedVisibleInformation)) {
+ if (empty($shares) || ($action === Extension::SUBJECT_UPDATE && empty($changedVisibleInformation))) {
$users = [$owner];
} else {
- $users = $this->getUsersForCalendar($calendarId);
+ $users = $this->getUsersForShares($shares);
$users[] = $owner;
}
@@ -140,7 +134,7 @@ class Backend {
$user === $currentUser ? $action . '_self' : $action,
[
$currentUser,
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
]
);
$this->activityManager->publish($event);
@@ -150,16 +144,13 @@ class Backend {
/**
* Creates activities for all related users when a calendar was (un-)shared
*
- * @param Calendar $calendar
+ * @param array $calendarData
+ * @param array $shares
* @param array $add
* @param array $remove
*/
- public function updateCalendarShares(Calendar $calendar, array $add, array $remove) {
- $calendarId = $calendar->getResourceId();
- $shares = $this->calDavBackend->getShares($calendarId);
-
- $properties = $this->calDavBackend->getCalendarById($calendarId);
- $principal = explode('/', $properties['principaluri']);
+ public function onCalendarUpdateShares(array $calendarData, array $shares, array $add, array $remove) {
+ $principal = explode('/', $calendarData['principaluri']);
$owner = $principal[2];
$currentUser = $this->userSession->getUser();
@@ -171,7 +162,7 @@ class Backend {
$event = $this->activityManager->generateEvent();
$event->setApp('dav')
- ->setObject(Extension::CALENDAR, $calendarId)
+ ->setObject(Extension::CALENDAR, $calendarData['id'])
->setType(Extension::CALENDAR)
->setAuthor($currentUser);
@@ -187,7 +178,7 @@ class Backend {
$this->triggerActivityUser(
$principal[2],
$event,
- $properties,
+ $calendarData,
Extension::SUBJECT_UNSHARE_USER,
Extension::SUBJECT_DELETE . '_self'
);
@@ -195,7 +186,7 @@ class Backend {
if ($owner !== $principal[2]) {
$parameters = [
$principal[2],
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
];
if ($owner === $event->getAuthor()) {
@@ -216,11 +207,11 @@ class Backend {
$this->activityManager->publish($event);
}
} else if ($principal[1] === 'groups') {
- $this->triggerActivityGroup($principal[2], $event, $properties, Extension::SUBJECT_UNSHARE_USER);
+ $this->triggerActivityGroup($principal[2], $event, $calendarData, Extension::SUBJECT_UNSHARE_USER);
$parameters = [
$principal[2],
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
];
if ($owner === $event->getAuthor()) {
@@ -253,12 +244,12 @@ class Backend {
$principal = explode('/', $parts[1]);
if ($principal[1] === 'users') {
- $this->triggerActivityUser($principal[2], $event, $properties, Extension::SUBJECT_SHARE_USER);
+ $this->triggerActivityUser($principal[2], $event, $calendarData, Extension::SUBJECT_SHARE_USER);
if ($owner !== $principal[2]) {
$parameters = [
$principal[2],
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
];
if ($owner === $event->getAuthor()) {
@@ -277,11 +268,11 @@ class Backend {
$this->activityManager->publish($event);
}
} else if ($principal[1] === 'groups') {
- $this->triggerActivityGroup($principal[2], $event, $properties, Extension::SUBJECT_SHARE_USER);
+ $this->triggerActivityGroup($principal[2], $event, $calendarData, Extension::SUBJECT_SHARE_USER);
$parameters = [
$principal[2],
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
];
if ($owner === $event->getAuthor()) {
@@ -363,49 +354,19 @@ class Backend {
}
/**
- * Creates activities when a calendar object was created
- *
- * @param int $calendarId
- * @param string $objectUri
- */
- public function addCalendarObject($calendarId, $objectUri) {
- $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_ADD, $calendarId, $objectUri);
- }
-
- /**
- * Creates activities when a calendar object was updated
- *
- * @param int $calendarId
- * @param string $objectUri
- */
- public function updateCalendarObject($calendarId, $objectUri) {
- $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_UPDATE, $calendarId, $objectUri);
- }
-
- /**
- * Creates activities when a calendar object was deleted
- *
- * @param int $calendarId
- * @param string $objectUri
- */
- public function deleteCalendarObject($calendarId, $objectUri) {
- $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_DELETE, $calendarId, $objectUri);
- }
-
- /**
- * Creates activities for all related users when a calendar was touched
+ * Creates activities when a calendar object was created/updated/deleted
*
* @param string $action
- * @param int $calendarId
- * @param string $objectUri
+ * @param array $calendarData
+ * @param array $shares
+ * @param array $objectData
*/
- protected function triggerCalendarObjectActivity($action, $calendarId, $objectUri) {
- $properties = $this->calDavBackend->getCalendarById($calendarId);
- if (!isset($properties['principaluri'])) {
+ public function onTouchCalendarObject($action, array $calendarData, array $shares, array $objectData) {
+ if (!isset($calendarData['principaluri'])) {
return;
}
- $principal = explode('/', $properties['principaluri']);
+ $principal = explode('/', $calendarData['principaluri']);
$owner = $principal[2];
$currentUser = $this->userSession->getUser();
@@ -415,7 +376,7 @@ class Backend {
$currentUser = $owner;
}
- $object = $this->getObjectNameAndType($calendarId, $objectUri);
+ $object = $this->getObjectNameAndType($objectData);
$action = $action . '_' . $object['type'];
if ($object['type'] === 'todo' && strpos($action, Extension::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'COMPLETED') {
@@ -426,11 +387,11 @@ class Backend {
$event = $this->activityManager->generateEvent();
$event->setApp('dav')
- ->setObject(Extension::CALENDAR, $calendarId)
+ ->setObject(Extension::CALENDAR, $calendarData['id'])
->setType($object['type'] === 'event' ? Extension::CALENDAR_EVENT : Extension::CALENDAR_TODO)
->setAuthor($currentUser);
- $users = $this->getUsersForCalendar($calendarId);
+ $users = $this->getUsersForShares($shares);
$users[] = $owner;
foreach ($users as $user) {
@@ -439,7 +400,7 @@ class Backend {
$user === $currentUser ? $action . '_self' : $action,
[
$currentUser,
- $properties['{DAV:}displayname'],
+ $calendarData['{DAV:}displayname'],
$object['name'],
]
);
@@ -448,14 +409,11 @@ class Backend {
}
/**
- * @param int $calendarId
- * @param string $objectUri
+ * @param array $objectData
* @return string[]|bool
*/
- protected function getObjectNameAndType($calendarId, $objectUri) {
- $data = $this->calDavBackend->getCalendarObject($calendarId, $objectUri);
-
- $vObject = Reader::read($data['calendardata']);
+ protected function getObjectNameAndType(array $objectData) {
+ $vObject = Reader::read($objectData['calendardata']);
$component = $componentType = null;
foreach($vObject->getComponents() as $component) {
if (in_array($component->name, ['VEVENT', 'VTODO'])) {
@@ -478,12 +436,11 @@ class Backend {
/**
* Get all users that have access to a given calendar
*
- * @param int $calendarId
+ * @param array $shares
* @return string[]
*/
- protected function getUsersForCalendar($calendarId) {
+ protected function getUsersForShares(array $shares) {
$users = $groups = [];
- $shares = $this->calDavBackend->getShares($calendarId);
foreach ($shares as $share) {
$prinical = explode('/', $share['{http://owncloud.org/ns}principal']);
if ($prinical[1] === 'users') {
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 660114e462a..fb608c2009d 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -26,16 +26,12 @@
namespace OCA\DAV\CalDAV;
use OCA\DAV\DAV\Sharing\IShareable;
-use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend;
-use OCP\Activity\IManager as IActivityManager;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCA\DAV\Connector\Sabre\Principal;
use OCA\DAV\DAV\Sharing\Backend;
use OCP\IDBConnection;
-use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
-use OCP\IUserSession;
use OCP\Security\ISecureRandom;
use Sabre\CalDAV\Backend\AbstractBackend;
use Sabre\CalDAV\Backend\SchedulingSupport;
@@ -52,6 +48,8 @@ use Sabre\HTTP\URLUtil;
use Sabre\VObject\DateTimeParser;
use Sabre\VObject\Reader;
use Sabre\VObject\Recur\EventIterator;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Class CalDavBackend
@@ -131,8 +129,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
/** @var ISecureRandom */
private $random;
- /** @var ActivityBackend */
- private $activityBackend;
+ /** @var EventDispatcherInterface */
+ private $dispatcher;
/**
* CalDavBackend constructor.
@@ -140,25 +138,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param IDBConnection $db
* @param Principal $principalBackend
* @param IUserManager $userManager
- * @param IGroupManager $groupManager
* @param ISecureRandom $random
- * @param IActivityManager $activityManager
- * @param IUserSession $userSession
+ * @param EventDispatcherInterface $dispatcher
*/
public function __construct(IDBConnection $db,
Principal $principalBackend,
IUserManager $userManager,
- IGroupManager $groupManager,
ISecureRandom $random,
- IActivityManager $activityManager,
- IUserSession $userSession) {
+ EventDispatcherInterface $dispatcher) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->userManager = $userManager;
- $this->userManager = $groupManager;
$this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar');
- $this->activityBackend = new ActivityBackend($this, $activityManager, $groupManager, $userSession);
$this->random = $random;
+ $this->dispatcher = $dispatcher;
}
/**
@@ -623,7 +616,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$query->execute();
$calendarId = $query->getLastInsertId();
- $this->activityBackend->addCalendar($calendarId, $values);
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::createCalendar',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ ]));
return $calendarId;
}
@@ -673,7 +671,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$this->addChange($calendarId, "", 2);
- $this->activityBackend->updateCalendar($calendarId, $mutations);
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::updateCalendar',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ 'propertyMutations' => $mutations,
+ ]));
return true;
});
@@ -686,7 +691,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return void
*/
function deleteCalendar($calendarId) {
- $this->activityBackend->deleteCalendar($calendarId);
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ ]));
$stmt = $this->db->prepare('DELETE FROM `*PREFIX*calendarobjects` WHERE `calendarid` = ?');
$stmt->execute([$calendarId]);
@@ -892,7 +903,15 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
])
->execute();
- $this->activityBackend->addCalendarObject($calendarId, $objectUri);
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ 'objectData' => $this->getCalendarObject($calendarId, $objectUri),
+ ]
+ ));
$this->addChange($calendarId, $objectUri, 1);
return '"' . $extraData['etag'] . '"';
@@ -934,7 +953,18 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->andWhere($query->expr()->eq('uri', $query->createNamedParameter($objectUri)))
->execute();
- $this->activityBackend->updateCalendarObject($calendarId, $objectUri);
+ $data = $this->getCalendarObject($calendarId, $objectUri);
+ if (is_array($data)) {
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ 'objectData' => $data,
+ ]
+ ));
+ }
$this->addChange($calendarId, $objectUri, 2);
return '"' . $extraData['etag'] . '"';
@@ -967,7 +997,18 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return void
*/
function deleteCalendarObject($calendarId, $objectUri) {
- $this->activityBackend->deleteCalendarObject($calendarId, $objectUri);
+ $data = $this->getCalendarObject($calendarId, $objectUri);
+ if (is_array($data)) {
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ 'objectData' => $data,
+ ]
+ ));
+ }
$stmt = $this->db->prepare('DELETE FROM `*PREFIX*calendarobjects` WHERE `calendarid` = ? AND `uri` = ?');
$stmt->execute([$calendarId, $objectUri]);
@@ -1668,8 +1709,16 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param array $remove
*/
public function updateShares($shareable, $add, $remove) {
- /** @var Calendar $shareable */
- $this->activityBackend->updateCalendarShares($shareable, $add, $remove);
+ $calendarId = $shareable->getResourceId();
+ $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateShares', new GenericEvent(
+ '\OCA\DAV\CalDAV\CalDavBackend::updateShares',
+ [
+ 'calendarId' => $calendarId,
+ 'calendarData' => $this->getCalendarById($calendarId),
+ 'shares' => $this->getShares($calendarId),
+ 'add' => $add,
+ 'remove' => $remove,
+ ]));
$this->sharingBackend->updateShares($shareable, $add, $remove);
}
diff --git a/apps/dav/lib/Command/CreateCalendar.php b/apps/dav/lib/Command/CreateCalendar.php
index 6fea6082443..24990352fab 100644
--- a/apps/dav/lib/Command/CreateCalendar.php
+++ b/apps/dav/lib/Command/CreateCalendar.php
@@ -76,11 +76,10 @@ class CreateCalendar extends Command {
$this->groupManager
);
$random = \OC::$server->getSecureRandom();
- $activityManager = \OC::$server->getActivityManager();
- $userSession = \OC::$server->getUserSession();
+ $dispatcher = \OC::$server->getEventDispatcher();
$name = $input->getArgument('name');
- $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $this->groupManager, $random, $activityManager, $userSession);
+ $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $random, $dispatcher);
$caldav->createCalendar("principals/users/$user", $name, []);
}
}
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php
index 38b4ec795d2..478f0929c20 100644
--- a/apps/dav/lib/RootCollection.php
+++ b/apps/dav/lib/RootCollection.php
@@ -41,9 +41,6 @@ class RootCollection extends SimpleCollection {
$config = \OC::$server->getConfig();
$random = \OC::$server->getSecureRandom();
$userManager = \OC::$server->getUserManager();
- $groupManager = \OC::$server->getGroupManager();
- $activityManager = \OC::$server->getActivityManager();
- $userSession = \OC::$server->getUserSession();
$db = \OC::$server->getDatabaseConnection();
$dispatcher = \OC::$server->getEventDispatcher();
$userPrincipalBackend = new Principal(
@@ -65,7 +62,7 @@ class RootCollection extends SimpleCollection {
$systemPrincipals->disableListing = $disableListing;
$filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users');
$filesCollection->disableListing = $disableListing;
- $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $random, $activityManager, $userSession);
+ $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $random, $dispatcher);
$calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users');
$calendarRoot->disableListing = $disableListing;
$publicCalendarRoot = new PublicCalendarRoot($caldavBackend);
diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
index a674c65c286..7d2e033e0b1 100644
--- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
@@ -22,15 +22,12 @@
namespace OCA\DAV\Tests\unit\CalDAV;
-use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\Connector\Sabre\Principal;
-use OCP\Activity\IManager as IActivityManager;
-use OCP\IGroupManager;
use OCP\IUserManager;
-use OCP\IUserSession;
use OCP\Security\ISecureRandom;
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Test\TestCase;
/**
@@ -49,8 +46,6 @@ abstract class AbstractCalDavBackendTest extends TestCase {
protected $principal;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
- /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */
- protected $activityBackend;
/** @var ISecureRandom */
private $random;
@@ -63,9 +58,7 @@ abstract class AbstractCalDavBackendTest extends TestCase {
parent::setUp();
$this->userManager = $this->createMock(IUserManager::class);
- $groupManager = $this->createMock(IGroupManager::class);
- $activityManager = $this->createMock(IActivityManager::class);
- $userSession = $this->createMock(IUserSession::class);
+ $dispatcher = $this->createMock(EventDispatcherInterface::class);
$this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
->disableOriginalConstructor()
->setMethods(['getPrincipalByPath', 'getGroupMembership'])
@@ -80,10 +73,7 @@ abstract class AbstractCalDavBackendTest extends TestCase {
$db = \OC::$server->getDatabaseConnection();
$this->random = \OC::$server->getSecureRandom();
- $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $groupManager, $this->random, $activityManager, $userSession);
-
- $this->activityBackend = $this->createMock(ActivityBackend::class);
- $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]);
+ $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->random, $dispatcher);
$this->cleanUpBackend();
}
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
index c3a3d783e18..59fa4747a93 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
@@ -2,17 +2,14 @@
namespace OCA\DAV\Tests\unit\CalDAV;
-use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend;
use OCA\DAV\CalDAV\Calendar;
use OCA\DAV\Connector\Sabre\Principal;
-use OCP\Activity\IManager as IActivityManager;
-use OCP\IGroupManager;
use OCP\IL10N;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\PublicCalendarRoot;
use OCP\IUserManager;
-use OCP\IUserSession;
use OCP\Security\ISecureRandom;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Test\TestCase;
/**
@@ -35,14 +32,6 @@ class PublicCalendarRootTest extends TestCase {
private $principal;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
- /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
- protected $groupManager;
- /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */
- protected $activityManager;
- /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
- protected $userSession;
- /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */
- protected $activityBackend;
/** @var ISecureRandom */
private $random;
@@ -53,24 +42,17 @@ class PublicCalendarRootTest extends TestCase {
$db = \OC::$server->getDatabaseConnection();
$this->principal = $this->createMock('OCA\DAV\Connector\Sabre\Principal');
$this->userManager = $this->createMock(IUserManager::class);
- $groupManager = $this->createMock(IGroupManager::class);
- $activityManager = $this->createMock(IActivityManager::class);
- $userSession = $this->createMock(IUserSession::class);
$this->random = \OC::$server->getSecureRandom();
+ $dispatcher = $this->createMock(EventDispatcherInterface::class);
$this->backend = new CalDavBackend(
$db,
$this->principal,
$this->userManager,
- $groupManager,
$this->random,
- $activityManager,
- $userSession
+ $dispatcher
);
- $this->activityBackend = $this->createMock(ActivityBackend::class);
- $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]);
-
$this->publicCalendarRoot = new PublicCalendarRoot($this->backend);
$this->l10n = $this->getMockBuilder('\OCP\IL10N')
@@ -95,14 +77,6 @@ class PublicCalendarRootTest extends TestCase {
}
public function testGetChild() {
- $this->activityBackend->expects($this->exactly(1))
- ->method('addCalendar');
- $this->activityBackend->expects($this->never())
- ->method('updateCalendar');
- $this->activityBackend->expects($this->never())
- ->method('deleteCalendar');
- $this->activityBackend->expects($this->never())
- ->method('updateCalendarShares');
$calendar = $this->createPublicCalendar();
@@ -117,15 +91,6 @@ class PublicCalendarRootTest extends TestCase {
}
public function testGetChildren() {
- $this->activityBackend->expects($this->exactly(1))
- ->method('addCalendar');
- $this->activityBackend->expects($this->never())
- ->method('updateCalendar');
- $this->activityBackend->expects($this->never())
- ->method('deleteCalendar');
- $this->activityBackend->expects($this->never())
- ->method('updateCalendarShares');
-
$this->createPublicCalendar();
$publicCalendars = $this->backend->getPublicCalendars();