From 835f36cb09c9eb13e7475ba49c89802e50b8eec9 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Tue, 8 Oct 2013 16:43:23 +0200 Subject: [PATCH 1/7] find users which are in the same group --- core/ajax/share.php | 2 +- lib/private/group.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/ajax/share.php b/core/ajax/share.php index 1166ea3198..dbad8f2e97 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -293,7 +293,7 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo while ($count < 15 && count($users) == $limit) { $limit = 15 - $count; if ($sharePolicy == 'groups_only') { - $users = OC_Group::DisplayNamesInGroups($groups, $_GET['search'], $limit, $offset); + $users = OC_Group::DisplayNamesInGroups($usergroups, $_GET['search'], $limit, $offset); } else { $users = OC_User::getDisplayNames($_GET['search'], $limit, $offset); } diff --git a/lib/private/group.php b/lib/private/group.php index ba93dc129a..9144ef683b 100644 --- a/lib/private/group.php +++ b/lib/private/group.php @@ -265,7 +265,7 @@ class OC_Group { public static function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) { $group = self::getManager()->get($gid); if ($group) { - $users = $group->searchDisplayName($search . $limit, $offset); + $users = $group->searchDisplayName($search, $limit, $offset); $displayNames = array(); foreach ($users as $user) { $displayNames[] = $user->getDisplayName(); From 6f3c49dabbc046f5a160565467a2735f3264d7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 8 Oct 2013 21:52:54 +0200 Subject: [PATCH 2/7] fixing php 5.3 compatibility PHP Fatal error: Can't inherit abstract function OCP\ISession::set() (previously declared abstract in OC\Session\Session) --- lib/private/session/session.php | 35 ++++----------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/lib/private/session/session.php b/lib/private/session/session.php index c55001ecca..fe160faa26 100644 --- a/lib/private/session/session.php +++ b/lib/private/session/session.php @@ -8,7 +8,10 @@ namespace OC\Session; -abstract class Session implements \ArrayAccess, \OCP\ISession { +use OCP\ISession; + +abstract class Session implements \ArrayAccess, ISession { + /** * $name serves as a namespace for the session keys * @@ -16,36 +19,6 @@ abstract class Session implements \ArrayAccess, \OCP\ISession { */ abstract public function __construct($name); - /** - * @param string $key - * @param mixed $value - */ - abstract public function set($key, $value); - - /** - * @param string $key - * @return mixed should return null if $key does not exist - */ - abstract public function get($key); - - /** - * @param string $key - * @return bool - */ - abstract public function exists($key); - - /** - * should not throw any errors if $key does not exist - * - * @param string $key - */ - abstract public function remove($key); - - /** - * removes all entries within the cache namespace - */ - abstract public function clear(); - /** * @param mixed $offset * @return bool From 51b581a84d6cb8e984605551599b7c37e7ff1386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 8 Oct 2013 23:00:41 +0200 Subject: [PATCH 3/7] php 5.3 compatibility for \OC\Files\Storage --- lib/private/files/storage/storage.php | 279 -------------------------- 1 file changed, 279 deletions(-) diff --git a/lib/private/files/storage/storage.php b/lib/private/files/storage/storage.php index b673bb9a32..5be90f2475 100644 --- a/lib/private/files/storage/storage.php +++ b/lib/private/files/storage/storage.php @@ -14,278 +14,6 @@ namespace OC\Files\Storage; * All paths passed to the storage are relative to the storage and should NOT have a leading slash. */ interface Storage extends \OCP\Files\Storage { - /** - * $parameters is a free form array with the configuration options needed to construct the storage - * - * @param array $parameters - */ - public function __construct($parameters); - - /** - * Get the identifier for the storage, - * the returned id should be the same for every storage object that is created with the same parameters - * and two storage objects with the same id should refer to two storages that display the same files. - * - * @return string - */ - public function getId(); - - /** - * see http://php.net/manual/en/function.mkdir.php - * - * @param string $path - * @return bool - */ - public function mkdir($path); - - /** - * see http://php.net/manual/en/function.rmdir.php - * - * @param string $path - * @return bool - */ - public function rmdir($path); - - /** - * see http://php.net/manual/en/function.opendir.php - * - * @param string $path - * @return resource - */ - public function opendir($path); - - /** - * see http://php.net/manual/en/function.is_dir.php - * - * @param string $path - * @return bool - */ - public function is_dir($path); - - /** - * see http://php.net/manual/en/function.is_file.php - * - * @param string $path - * @return bool - */ - public function is_file($path); - - /** - * see http://php.net/manual/en/function.stat.php - * only the following keys are required in the result: size and mtime - * - * @param string $path - * @return array - */ - public function stat($path); - - /** - * see http://php.net/manual/en/function.filetype.php - * - * @param string $path - * @return bool - */ - public function filetype($path); - - /** - * see http://php.net/manual/en/function.filesize.php - * The result for filesize when called on a folder is required to be 0 - * - * @param string $path - * @return int - */ - public function filesize($path); - - /** - * check if a file can be created in $path - * - * @param string $path - * @return bool - */ - public function isCreatable($path); - - /** - * check if a file can be read - * - * @param string $path - * @return bool - */ - public function isReadable($path); - - /** - * check if a file can be written to - * - * @param string $path - * @return bool - */ - public function isUpdatable($path); - - /** - * check if a file can be deleted - * - * @param string $path - * @return bool - */ - public function isDeletable($path); - - /** - * check if a file can be shared - * - * @param string $path - * @return bool - */ - public function isSharable($path); - - /** - * get the full permissions of a path. - * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php - * - * @param string $path - * @return int - */ - public function getPermissions($path); - - /** - * see http://php.net/manual/en/function.file_exists.php - * - * @param string $path - * @return bool - */ - public function file_exists($path); - - /** - * see http://php.net/manual/en/function.filemtime.php - * - * @param string $path - * @return int - */ - public function filemtime($path); - - /** - * see http://php.net/manual/en/function.file_get_contents.php - * - * @param string $path - * @return string - */ - public function file_get_contents($path); - - /** - * see http://php.net/manual/en/function.file_put_contents.php - * - * @param string $path - * @param string $data - * @return bool - */ - public function file_put_contents($path, $data); - - /** - * see http://php.net/manual/en/function.unlink.php - * - * @param string $path - * @return bool - */ - public function unlink($path); - - /** - * see http://php.net/manual/en/function.rename.php - * - * @param string $path1 - * @param string $path2 - * @return bool - */ - public function rename($path1, $path2); - - /** - * see http://php.net/manual/en/function.copy.php - * - * @param string $path1 - * @param string $path2 - * @return bool - */ - public function copy($path1, $path2); - - /** - * see http://php.net/manual/en/function.fopen.php - * - * @param string $path - * @param string $mode - * @return resource - */ - public function fopen($path, $mode); - - /** - * get the mimetype for a file or folder - * The mimetype for a folder is required to be "httpd/unix-directory" - * - * @param string $path - * @return string - */ - public function getMimeType($path); - - /** - * see http://php.net/manual/en/function.hash.php - * - * @param string $type - * @param string $path - * @param bool $raw - * @return string - */ - public function hash($type, $path, $raw = false); - - /** - * see http://php.net/manual/en/function.free_space.php - * - * @param string $path - * @return int - */ - public function free_space($path); - - /** - * search for occurrences of $query in file names - * - * @param string $query - * @return array - */ - public function search($query); - - /** - * see http://php.net/manual/en/function.touch.php - * If the backend does not support the operation, false should be returned - * - * @param string $path - * @param int $mtime - * @return bool - */ - public function touch($path, $mtime = null); - - /** - * get the path to a local version of the file. - * The local version of the file can be temporary and doesn't have to be persistent across requests - * - * @param string $path - * @return string - */ - public function getLocalFile($path); - - /** - * get the path to a local version of the folder. - * The local version of the folder can be temporary and doesn't have to be persistent across requests - * - * @param string $path - * @return string - */ - public function getLocalFolder($path); - /** - * check if a file or folder has been updated since $time - * - * @param string $path - * @param int $time - * @return bool - * - * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed. - * returning true for other changes in the folder is optional - */ - public function hasUpdated($path, $time); /** * get a cache instance for the storage @@ -333,11 +61,4 @@ interface Storage extends \OCP\Files\Storage { */ public function getStorageCache(); - /** - * get the ETag for a file or folder - * - * @param string $path - * @return string - */ - public function getETag($path); } From 8a06f2e12882a883e1aaae41e7450d17cf746946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 8 Oct 2013 23:05:19 +0200 Subject: [PATCH 4/7] php 5.3 compatibility for Test_Files_Sharing_Api --- apps/files_sharing/tests/api.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php index c55c186f08..63df0dd7dc 100644 --- a/apps/files_sharing/tests/api.php +++ b/apps/files_sharing/tests/api.php @@ -295,7 +295,8 @@ class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase { $result = Share\Api::getShare($params); $this->assertEquals(404, $result->getStatusCode()); - $this->assertEquals('share doesn\'t exist', $result->getMeta()['message']); + $meta = $result->getMeta(); + $this->assertEquals('share doesn\'t exist', $meta['message']); } @@ -351,7 +352,8 @@ class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase { $result = Share\Api::updateShare($params); - $this->assertTrue($result->succeeded(), $result->getMeta()['message']); + $meta = $result->getMeta(); + $this->assertTrue($result->succeeded(), $meta['message']); $items = \OCP\Share::getItemShared('file', $userShare['file_source']); From 7bd5352509e9d2dd51bded32144719bd83296fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 8 Oct 2013 23:14:08 +0200 Subject: [PATCH 5/7] php 5.3 compatibility for \OC\AppFramework\DependencyInjection\DIContainer --- lib/private/appframework/dependencyinjection/dicontainer.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php index 3755d45fa0..e62b72fd97 100644 --- a/lib/private/appframework/dependencyinjection/dicontainer.php +++ b/lib/private/appframework/dependencyinjection/dicontainer.php @@ -89,11 +89,12 @@ class DIContainer extends SimpleContainer implements IAppContainer{ return new SecurityMiddleware($c['API'], $c['Request']); }); - $this['MiddlewareDispatcher'] = $this->share(function($c){ + $middleWares = $this->middleWares; + $this['MiddlewareDispatcher'] = $this->share(function($c) use ($middleWares) { $dispatcher = new MiddlewareDispatcher(); $dispatcher->registerMiddleware($c['SecurityMiddleware']); - foreach($this->middleWares as $middleWare) { + foreach($middleWares as $middleWare) { $dispatcher->registerMiddleware($middleWare); } From 27738fc4f5c80d5aaf0f1af6bd8bff99872d0c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Oct 2013 15:35:09 +0200 Subject: [PATCH 6/7] due to internal implementations touch will always be successful - $mtime will be stored in the cache from desktop client perspective it is necessary to set the mtime under every condition --- lib/private/connector/sabre/node.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php index fa27abb381..c38e9f8637 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -147,12 +147,6 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr * Even if the modification time is set to a custom value the access time is set to now. */ public function touch($mtime) { - - // touch is only allowed if the update privilege is granted - if (!\OC\Files\Filesystem::isUpdatable($this->path)) { - throw new \Sabre_DAV_Exception_Forbidden(); - } - \OC\Files\Filesystem::touch($this->path, $mtime); } From 38c563dcdcfc46742a55be3b9b84a37512e203d3 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 9 Oct 2013 20:34:18 +0200 Subject: [PATCH 7/7] don't trigger the create hooks when if the file already exists for file_put_contents --- lib/private/files/view.php | 3 ++- tests/lib/files/view.php | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/private/files/view.php b/lib/private/files/view.php index aa08a5f7cc..f74b595c8d 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -324,7 +324,8 @@ class View { return false; } } else { - return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data); + $hooks = ($this->file_exists($path)) ? array('write') : array('create', 'write'); + return $this->basicOperation('file_put_contents', $path, $hooks, $data); } } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 3043f132b7..a5107c351f 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -391,4 +391,29 @@ class View extends \PHPUnit_Framework_TestCase { $this->storages[] = $storage; return $storage; } + + private $createHookPath; + + function dummyCreateHook($params) { + $this->createHookPath = $params['path']; + } + + public function testEditNoCreateHook() { + $storage1 = $this->getTestStorage(); + $storage2 = $this->getTestStorage(); + $defaultRoot = \OC\Files\Filesystem::getRoot(); + \OC\Files\Filesystem::mount($storage1, array(), '/'); + \OC\Files\Filesystem::mount($storage2, array(), $defaultRoot); + \OC_Hook::connect('OC_Filesystem', 'post_create', $this, 'dummyCreateHook'); + + $view = new \OC\Files\View($defaultRoot); + $this->hookPath = null; + + $view->file_put_contents('/asd.txt', 'foo'); + $this->assertEquals('/asd.txt', $this->createHookPath); + $this->createHookPath = null; + + $view->file_put_contents('/asd.txt', 'foo'); + $this->assertNull($this->createHookPath); + } }