summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-02-24 13:23:44 +0100
committerJoas Schilling <nickvergessen@owncloud.com>2016-05-23 09:03:48 +0200
commitc9fda848411d3369d39201a4ebcf8505fb70adce (patch)
tree55a2a7a4a5a83cdef579910d04ad2665d41d4fd3 /apps
parent3a8e537946363dcbcfe07ead5e8979aef5fafcd9 (diff)
downloadnextcloud-server-c9fda848411d3369d39201a4ebcf8505fb70adce.tar.gz
nextcloud-server-c9fda848411d3369d39201a4ebcf8505fb70adce.zip
Make the root collection neutral so it does not only work for files
Diffstat (limited to 'apps')
-rw-r--r--apps/comments/appinfo/app.php7
-rw-r--r--apps/dav/lib/Comments/EntityTypeCollection.php17
-rw-r--r--apps/dav/lib/Comments/RootCollection.php51
-rw-r--r--apps/dav/lib/RootCollection.php2
4 files changed, 47 insertions, 30 deletions
diff --git a/apps/comments/appinfo/app.php b/apps/comments/appinfo/app.php
index cd1ccb2d7d3..b060a5db1ca 100644
--- a/apps/comments/appinfo/app.php
+++ b/apps/comments/appinfo/app.php
@@ -51,3 +51,10 @@ $managerListener = function(\OCP\Comments\CommentsEvent $event) use ($activityMa
};
$eventDispatcher->addListener(\OCP\Comments\CommentsEvent::EVENT_ADD, $managerListener);
+
+$eventDispatcher->addListener(\OCP\Comments\CommentsEntityEvent::EVENT_ENTITY, function(\OCP\Comments\CommentsEntityEvent $event) {
+ $event->addEntityCollection('files', function($name) {
+ $nodes = \OC::$server->getUserFolder()->getById(intval($name));
+ return !empty($nodes);
+ });
+});
diff --git a/apps/dav/lib/Comments/EntityTypeCollection.php b/apps/dav/lib/Comments/EntityTypeCollection.php
index 0466982e4f2..66fdb7f8de6 100644
--- a/apps/dav/lib/Comments/EntityTypeCollection.php
+++ b/apps/dav/lib/Comments/EntityTypeCollection.php
@@ -44,21 +44,27 @@ class EntityTypeCollection extends RootCollection {
/** @var ILogger */
protected $logger;
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var \Closure */
+ protected $childExistsFunction;
+
/**
* @param string $name
* @param ICommentsManager $commentsManager
- * @param Folder $fileRoot
* @param IUserManager $userManager
* @param IUserSession $userSession
* @param ILogger $logger
+ * @param \Closure $childExistsFunction
*/
public function __construct(
$name,
ICommentsManager $commentsManager,
- Folder $fileRoot,
IUserManager $userManager,
IUserSession $userSession,
- ILogger $logger
+ ILogger $logger,
+ \Closure $childExistsFunction
) {
$name = trim($name);
if(empty($name) || !is_string($name)) {
@@ -66,10 +72,10 @@ class EntityTypeCollection extends RootCollection {
}
$this->name = $name;
$this->commentsManager = $commentsManager;
- $this->fileRoot = $fileRoot;
$this->logger = $logger;
$this->userManager = $userManager;
$this->userSession = $userSession;
+ $this->childExistsFunction = $childExistsFunction;
}
/**
@@ -113,8 +119,7 @@ class EntityTypeCollection extends RootCollection {
* @return bool
*/
function childExists($name) {
- $nodes = $this->fileRoot->getById(intval($name));
- return !empty($nodes);
+ return call_user_func($this->childExistsFunction, $name);
}
}
diff --git a/apps/dav/lib/Comments/RootCollection.php b/apps/dav/lib/Comments/RootCollection.php
index cda666f7162..b02532b0674 100644
--- a/apps/dav/lib/Comments/RootCollection.php
+++ b/apps/dav/lib/Comments/RootCollection.php
@@ -21,8 +21,8 @@
namespace OCA\DAV\Comments;
+use OCP\Comments\CommentsEntityEvent;
use OCP\Comments\ICommentsManager;
-use OCP\Files\IRootFolder;
use OCP\ILogger;
use OCP\IUserManager;
use OCP\IUserSession;
@@ -30,11 +30,12 @@ use Sabre\DAV\Exception\NotAuthenticated;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\ICollection;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class RootCollection implements ICollection {
- /** @var EntityTypeCollection[] */
- private $entityTypeCollections = [];
+ /** @var EntityTypeCollection[]|null */
+ private $entityTypeCollections;
/** @var ICommentsManager */
protected $commentsManager;
@@ -47,34 +48,32 @@ class RootCollection implements ICollection {
/** @var IUserManager */
protected $userManager;
- /**
- * @var IUserSession
- */
+
+ /** @var IUserSession */
protected $userSession;
- /**
- * @var IRootFolder
- */
- protected $rootFolder;
+
+ /** @var EventDispatcherInterface */
+ protected $dispatcher;
/**
* @param ICommentsManager $commentsManager
* @param IUserManager $userManager
* @param IUserSession $userSession
- * @param IRootFolder $rootFolder
+ * @param EventDispatcherInterface $dispatcher
* @param ILogger $logger
*/
public function __construct(
ICommentsManager $commentsManager,
IUserManager $userManager,
IUserSession $userSession,
- IRootFolder $rootFolder,
+ EventDispatcherInterface $dispatcher,
ILogger $logger)
{
$this->commentsManager = $commentsManager;
$this->logger = $logger;
$this->userManager = $userManager;
$this->userSession = $userSession;
- $this->rootFolder = $rootFolder;
+ $this->dispatcher = $dispatcher;
}
/**
@@ -85,22 +84,28 @@ class RootCollection implements ICollection {
* @throws NotAuthenticated
*/
protected function initCollections() {
- if(!empty($this->entityTypeCollections)) {
+ if($this->entityTypeCollections !== null) {
return;
}
$user = $this->userSession->getUser();
if(is_null($user)) {
throw new NotAuthenticated();
}
- $userFolder = $this->rootFolder->getUserFolder($user->getUID());
- $this->entityTypeCollections['files'] = new EntityTypeCollection(
- 'files',
- $this->commentsManager,
- $userFolder,
- $this->userManager,
- $this->userSession,
- $this->logger
- );
+
+ $event = new CommentsEntityEvent(CommentsEntityEvent::EVENT_ENTITY);
+ $this->dispatcher->dispatch(CommentsEntityEvent::EVENT_ENTITY, $event);
+
+ $this->entityTypeCollections = [];
+ foreach ($event->getEntityCollections() as $entity => $entityExistsFunction) {
+ $this->entityTypeCollections[$entity] = new EntityTypeCollection(
+ $entity,
+ $this->commentsManager,
+ $this->userManager,
+ $this->userSession,
+ $this->logger,
+ $entityExistsFunction
+ );
+ }
}
/**
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php
index b6e1747e990..f18bfaf496d 100644
--- a/apps/dav/lib/RootCollection.php
+++ b/apps/dav/lib/RootCollection.php
@@ -77,7 +77,7 @@ class RootCollection extends SimpleCollection {
\OC::$server->getCommentsManager(),
\OC::$server->getUserManager(),
\OC::$server->getUserSession(),
- \OC::$server->getRootFolder(),
+ \OC::$server->getEventDispatcher(),
\OC::$server->getLogger()
);