diff options
author | Joas Schilling <coding@schilljs.com> | 2016-10-13 15:34:26 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2016-11-03 12:07:59 +0100 |
commit | 52dd27892b80ab91d0776c45d05d8447ac24b76e (patch) | |
tree | 56457a3d0eb6119bbe200413557bcb6d76a7329a | |
parent | d3e8463de28197de2d4d61c35906b020ec85b432 (diff) | |
download | nextcloud-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.php | 6 | ||||
-rw-r--r-- | apps/dav/lib/AppInfo/Application.php | 57 | ||||
-rw-r--r-- | apps/dav/lib/CalDAV/Activity/Backend.php | 143 | ||||
-rw-r--r-- | apps/dav/lib/CalDAV/CalDavBackend.php | 93 | ||||
-rw-r--r-- | apps/dav/lib/Command/CreateCalendar.php | 5 | ||||
-rw-r--r-- | apps/dav/lib/RootCollection.php | 5 | ||||
-rw-r--r-- | apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php | 16 | ||||
-rw-r--r-- | apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php | 41 |
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(); |