You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
3.9 KiB
173 lines
3.9 KiB
<?php |
|
/** |
|
* @copyright Copyright (c) 2016, ownCloud, Inc. |
|
* |
|
* @author Joas Schilling <coding@schilljs.com> |
|
* @author Thomas Müller <thomas.mueller@tmit.eu> |
|
* @author Vincent Petry <pvince81@owncloud.com> |
|
* |
|
* @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\SystemTag; |
|
|
|
use Sabre\DAV\Exception\Forbidden; |
|
use Sabre\DAV\Exception\MethodNotAllowed; |
|
use Sabre\DAV\Exception\NotFound; |
|
use Sabre\DAV\ICollection; |
|
use OCP\SystemTag\ISystemTagManager; |
|
use OCP\SystemTag\ISystemTagObjectMapper; |
|
use OCP\IUserSession; |
|
use OCP\IGroupManager; |
|
|
|
/** |
|
* Collection containing object ids by object type |
|
*/ |
|
class SystemTagsObjectTypeCollection implements ICollection { |
|
|
|
/** |
|
* @var string |
|
*/ |
|
private $objectType; |
|
|
|
/** |
|
* @var ISystemTagManager |
|
*/ |
|
private $tagManager; |
|
|
|
/** |
|
* @var ISystemTagObjectMapper |
|
*/ |
|
private $tagMapper; |
|
|
|
/** |
|
* @var IGroupManager |
|
*/ |
|
private $groupManager; |
|
|
|
/** |
|
* @var IUserSession |
|
*/ |
|
private $userSession; |
|
|
|
/** |
|
* @var \Closure |
|
**/ |
|
protected $childExistsFunction; |
|
|
|
/** |
|
* Constructor |
|
* |
|
* @param string $objectType object type |
|
* @param ISystemTagManager $tagManager |
|
* @param ISystemTagObjectMapper $tagMapper |
|
* @param IUserSession $userSession |
|
* @param IGroupManager $groupManager |
|
* @param \Closure $childExistsFunction |
|
*/ |
|
public function __construct( |
|
$objectType, |
|
ISystemTagManager $tagManager, |
|
ISystemTagObjectMapper $tagMapper, |
|
IUserSession $userSession, |
|
IGroupManager $groupManager, |
|
\Closure $childExistsFunction |
|
) { |
|
$this->tagManager = $tagManager; |
|
$this->tagMapper = $tagMapper; |
|
$this->objectType = $objectType; |
|
$this->userSession = $userSession; |
|
$this->groupManager = $groupManager; |
|
$this->childExistsFunction = $childExistsFunction; |
|
} |
|
|
|
/** |
|
* @param string $name |
|
* @param resource|string $data Initial payload |
|
* @return null|string |
|
* @throws Forbidden |
|
*/ |
|
function createFile($name, $data = null) { |
|
throw new Forbidden('Permission denied to create nodes'); |
|
} |
|
|
|
/** |
|
* @param string $name |
|
* @throws Forbidden |
|
*/ |
|
function createDirectory($name) { |
|
throw new Forbidden('Permission denied to create collections'); |
|
} |
|
|
|
/** |
|
* @param string $objectId |
|
* @return SystemTagsObjectMappingCollection |
|
* @throws NotFound |
|
*/ |
|
function getChild($objectId) { |
|
// make sure the object exists and is reachable |
|
if(!$this->childExists($objectId)) { |
|
throw new NotFound('Entity does not exist or is not available'); |
|
} |
|
return new SystemTagsObjectMappingCollection( |
|
$objectId, |
|
$this->objectType, |
|
$this->userSession->getUser(), |
|
$this->tagManager, |
|
$this->tagMapper |
|
); |
|
} |
|
|
|
function getChildren() { |
|
// do not list object ids |
|
throw new MethodNotAllowed(); |
|
} |
|
|
|
/** |
|
* Checks if a child-node with the specified name exists |
|
* |
|
* @param string $name |
|
* @return bool |
|
*/ |
|
function childExists($name) { |
|
return call_user_func($this->childExistsFunction, $name); |
|
} |
|
|
|
function delete() { |
|
throw new Forbidden('Permission denied to delete this collection'); |
|
} |
|
|
|
function getName() { |
|
return $this->objectType; |
|
} |
|
|
|
/** |
|
* @param string $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; |
|
} |
|
}
|
|
|