/lib/files/mount/manager.php
PHP | 120 lines | 69 code | 11 blank | 40 comment | 8 complexity | 9c571ce4567439da7e60fc97c8365556 MD5 | raw file
Possible License(s): AGPL-3.0, AGPL-1.0, MPL-2.0-no-copyleft-exception
- <?php
- /**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
- namespace OC\Files\Mount;
- use \OC\Files\Filesystem;
- class Manager {
- /**
- * @var Mount[]
- */
- private $mounts = array();
- /**
- * @param Mount $mount
- */
- public function addMount($mount) {
- $this->mounts[$mount->getMountPoint()] = $mount;
- }
- /**
- * Find the mount for $path
- *
- * @param $path
- * @return Mount
- */
- public function find($path) {
- \OC_Util::setupFS();
- $path = $this->formatPath($path);
- if (isset($this->mounts[$path])) {
- return $this->mounts[$path];
- }
- \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path));
- $foundMountPoint = '';
- $mountPoints = array_keys($this->mounts);
- foreach ($mountPoints as $mountpoint) {
- if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) {
- $foundMountPoint = $mountpoint;
- }
- }
- if (isset($this->mounts[$foundMountPoint])) {
- return $this->mounts[$foundMountPoint];
- } else {
- return null;
- }
- }
- /**
- * Find all mounts in $path
- *
- * @param $path
- * @return Mount[]
- */
- public function findIn($path) {
- \OC_Util::setupFS();
- $path = $this->formatPath($path);
- $result = array();
- $pathLength = strlen($path);
- $mountPoints = array_keys($this->mounts);
- foreach ($mountPoints as $mountPoint) {
- if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) {
- $result[] = $this->mounts[$mountPoint];
- }
- }
- return $result;
- }
- public function clear() {
- $this->mounts = array();
- }
- /**
- * Find mounts by storage id
- *
- * @param string $id
- * @return Mount[]
- */
- public function findByStorageId($id) {
- \OC_Util::setupFS();
- if (strlen($id) > 64) {
- $id = md5($id);
- }
- $result = array();
- foreach ($this->mounts as $mount) {
- if ($mount->getStorageId() === $id) {
- $result[] = $mount;
- }
- }
- return $result;
- }
- /**
- * Find mounts by numeric storage id
- *
- * @param string $id
- * @return Mount
- */
- public function findByNumericId($id) {
- $storageId = \OC\Files\Cache\Storage::getStorageId($id);
- return $this->findByStorageId($storageId);
- }
- /**
- * @param string $path
- * @return string
- */
- private function formatPath($path) {
- $path = Filesystem::normalizePath($path);
- if (strlen($path) > 1) {
- $path .= '/';
- }
- return $path;
- }
- }