Browse Source
Merge pull request #8416 from owncloud/sharing_keep_mount_points_visible
Merge pull request #8416 from owncloud/sharing_keep_mount_points_visible
[sharing] move the mount point up if the parent folder no longer existsremotes/origin/ldap_group_count
10 changed files with 432 additions and 78 deletions
-
3apps/files_sharing/appinfo/app.php
-
22apps/files_sharing/lib/helper.php
-
69apps/files_sharing/lib/proxy.php
-
11apps/files_sharing/lib/share/file.php
-
113apps/files_sharing/lib/sharedstorage.php
-
9apps/files_sharing/lib/updater.php
-
98apps/files_sharing/tests/proxy.php
-
46apps/files_sharing/tests/sharedstorage.php
-
128apps/files_sharing/tests/updater.php
-
11lib/private/files/mount/mount.php
@ -0,0 +1,69 @@ |
|||
<?php |
|||
/** |
|||
* ownCloud |
|||
* |
|||
* @author Bjoern Schiessle |
|||
* @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com> |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
* License as published by the Free Software Foundation; either |
|||
* version 3 of the License, or any later version. |
|||
* |
|||
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCA\Files\Share; |
|||
|
|||
class Proxy extends \OC_FileProxy { |
|||
|
|||
/** |
|||
* check if the deleted folder contains share mount points and move them |
|||
* up to the parent |
|||
* |
|||
* @param string $path |
|||
*/ |
|||
public function preUnlink($path) { |
|||
$this->moveMountPointsUp($path); |
|||
} |
|||
|
|||
/** |
|||
* check if the deleted folder contains share mount points and move them |
|||
* up to the parent |
|||
* |
|||
* @param string $path |
|||
*/ |
|||
public function preRmdir($path) { |
|||
$this->moveMountPointsUp($path); |
|||
} |
|||
|
|||
/** |
|||
* move share mount points up to the parent |
|||
* |
|||
* @param string $path |
|||
*/ |
|||
private function moveMountPointsUp($path) { |
|||
$view = new \OC\Files\View('/'); |
|||
|
|||
// find share mount points within $path and move them up to the parent folder
|
|||
// before we delete $path
|
|||
$mountManager = \OC\Files\Filesystem::getMountManager(); |
|||
$mountedShares = $mountManager->findIn($path); |
|||
foreach ($mountedShares as $mount) { |
|||
if ($mount->getStorage() instanceof \OC\Files\Storage\Shared) { |
|||
$mountPoint = $mount->getMountPoint(); |
|||
$mountPointName = $mount->getMountPointName(); |
|||
$target = \OCA\Files_Sharing\Helper::generateUniqueTarget(dirname($path) . '/' . $mountPointName, array(), $view); |
|||
$view->rename($mountPoint, $target); |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,98 @@ |
|||
<?php |
|||
/** |
|||
* ownCloud |
|||
* |
|||
* @author Bjoern Schiessle |
|||
* @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com> |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
* License as published by the Free Software Foundation; either |
|||
* version 3 of the License, or any later version. |
|||
* |
|||
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
require_once __DIR__ . '/base.php'; |
|||
|
|||
use OCA\Files\Share; |
|||
|
|||
/** |
|||
* Class Test_Files_Sharing_Api |
|||
*/ |
|||
class Test_Files_Sharing_Api extends Test_Files_Sharing_Base { |
|||
|
|||
const TEST_FOLDER_NAME = '/folder_share_api_test'; |
|||
|
|||
private static $tempStorage; |
|||
|
|||
function setUp() { |
|||
parent::setUp(); |
|||
|
|||
// load proxies
|
|||
OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php'; |
|||
OC_FileProxy::register(new OCA\Files\Share\Proxy()); |
|||
|
|||
$this->folder = self::TEST_FOLDER_NAME; |
|||
$this->subfolder = '/subfolder_share_api_test'; |
|||
$this->subsubfolder = '/subsubfolder_share_api_test'; |
|||
|
|||
$this->filename = '/share-api-test'; |
|||
|
|||
// save file with content
|
|||
$this->view->file_put_contents($this->filename, $this->data); |
|||
$this->view->mkdir($this->folder); |
|||
$this->view->mkdir($this->folder . $this->subfolder); |
|||
$this->view->mkdir($this->folder . $this->subfolder . $this->subsubfolder); |
|||
$this->view->file_put_contents($this->folder.$this->filename, $this->data); |
|||
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data); |
|||
} |
|||
|
|||
function tearDown() { |
|||
$this->view->unlink($this->filename); |
|||
$this->view->deleteAll($this->folder); |
|||
|
|||
self::$tempStorage = null; |
|||
|
|||
parent::tearDown(); |
|||
} |
|||
|
|||
/** |
|||
* @medium |
|||
*/ |
|||
function testpreUnlink() { |
|||
|
|||
$fileInfo1 = \OC\Files\Filesystem::getFileInfo($this->filename); |
|||
$fileInfo2 = \OC\Files\Filesystem::getFileInfo($this->folder); |
|||
|
|||
$result = \OCP\Share::shareItem('file', $fileInfo1->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31); |
|||
$this->assertTrue($result); |
|||
|
|||
$result = \OCP\Share::shareItem('folder', $fileInfo2->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31); |
|||
$this->assertTrue($result); |
|||
|
|||
self::loginHelper(self::TEST_FILES_SHARING_API_USER2); |
|||
|
|||
// move shared folder to 'localDir' and rename it, so that it uses the same
|
|||
// name as the shared file
|
|||
\OC\Files\Filesystem::mkdir('localDir'); |
|||
$result = \OC\Files\Filesystem::rename($this->folder, '/localDir/' . $this->filename); |
|||
$this->assertTrue($result); |
|||
|
|||
\OC\Files\Filesystem::unlink('localDir'); |
|||
|
|||
self::loginHelper(self::TEST_FILES_SHARING_API_USER2); |
|||
|
|||
// after we deleted 'localDir' the share should be moved up to the root and be
|
|||
// renamed to "filename (2)"
|
|||
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename)); |
|||
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename . ' (2)' )); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue