summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/Comments/RootCollection.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dav/lib/Comments/RootCollection.php')
-rw-r--r--apps/dav/lib/Comments/RootCollection.php205
1 files changed, 205 insertions, 0 deletions
diff --git a/apps/dav/lib/Comments/RootCollection.php b/apps/dav/lib/Comments/RootCollection.php
new file mode 100644
index 00000000000..cda666f7162
--- /dev/null
+++ b/apps/dav/lib/Comments/RootCollection.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * @author Arthur Schiwon <blizzz@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\DAV\Comments;
+
+use OCP\Comments\ICommentsManager;
+use OCP\Files\IRootFolder;
+use OCP\ILogger;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use Sabre\DAV\Exception\NotAuthenticated;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\ICollection;
+
+class RootCollection implements ICollection {
+
+ /** @var EntityTypeCollection[] */
+ private $entityTypeCollections = [];
+
+ /** @var ICommentsManager */
+ protected $commentsManager;
+
+ /** @var string */
+ protected $name = 'comments';
+
+ /** @var ILogger */
+ protected $logger;
+
+ /** @var IUserManager */
+ protected $userManager;
+ /**
+ * @var IUserSession
+ */
+ protected $userSession;
+ /**
+ * @var IRootFolder
+ */
+ protected $rootFolder;
+
+ /**
+ * @param ICommentsManager $commentsManager
+ * @param IUserManager $userManager
+ * @param IUserSession $userSession
+ * @param IRootFolder $rootFolder
+ * @param ILogger $logger
+ */
+ public function __construct(
+ ICommentsManager $commentsManager,
+ IUserManager $userManager,
+ IUserSession $userSession,
+ IRootFolder $rootFolder,
+ ILogger $logger)
+ {
+ $this->commentsManager = $commentsManager;
+ $this->logger = $logger;
+ $this->userManager = $userManager;
+ $this->userSession = $userSession;
+ $this->rootFolder = $rootFolder;
+ }
+
+ /**
+ * initializes the collection. At this point of time, we need the logged in
+ * user. Since it is not the case when the instance is created, we cannot
+ * have this in the constructor.
+ *
+ * @throws NotAuthenticated
+ */
+ protected function initCollections() {
+ if(!empty($this->entityTypeCollections)) {
+ 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
+ );
+ }
+
+ /**
+ * Creates a new file in the directory
+ *
+ * @param string $name Name of the file
+ * @param resource|string $data Initial payload
+ * @return null|string
+ * @throws Forbidden
+ */
+ function createFile($name, $data = null) {
+ throw new Forbidden('Cannot create comments by id');
+ }
+
+ /**
+ * Creates a new subdirectory
+ *
+ * @param string $name
+ * @throws Forbidden
+ */
+ function createDirectory($name) {
+ throw new Forbidden('Permission denied to create collections');
+ }
+
+ /**
+ * Returns a specific child node, referenced by its name
+ *
+ * This method must throw Sabre\DAV\Exception\NotFound if the node does not
+ * exist.
+ *
+ * @param string $name
+ * @return \Sabre\DAV\INode
+ * @throws NotFound
+ */
+ function getChild($name) {
+ $this->initCollections();
+ if(isset($this->entityTypeCollections[$name])) {
+ return $this->entityTypeCollections[$name];
+ }
+ throw new NotFound('Entity type "' . $name . '" not found."');
+ }
+
+ /**
+ * Returns an array with all the child nodes
+ *
+ * @return \Sabre\DAV\INode[]
+ */
+ function getChildren() {
+ $this->initCollections();
+ return $this->entityTypeCollections;
+ }
+
+ /**
+ * Checks if a child-node with the specified name exists
+ *
+ * @param string $name
+ * @return bool
+ */
+ function childExists($name) {
+ $this->initCollections();
+ return isset($this->entityTypeCollections[$name]);
+ }
+
+ /**
+ * Deleted the current node
+ *
+ * @throws Forbidden
+ */
+ function delete() {
+ throw new Forbidden('Permission denied to delete this collection');
+ }
+
+ /**
+ * Returns the name of the node.
+ *
+ * This is used to generate the url.
+ *
+ * @return string
+ */
+ function getName() {
+ return $this->name;
+ }
+
+ /**
+ * Renames the node
+ *
+ * @param string $name The new name
+ * @throws Forbidden
+ */
+ function setName($name) {
+ throw new Forbidden('Permission denied to rename this collection');
+ }
+
+ /**
+ * Returns the last modification time, as a unix timestamp
+ *
+ * @return int
+ */
+ function getLastModified() {
+ return null;
+ }
+}