]> source.dussan.org Git - nextcloud-server.git/commitdiff
Cache: provide a function to get the permissions of all files in a folder with one...
authorRobin Appelman <icewind@owncloud.com>
Wed, 29 May 2013 13:25:42 +0000 (15:25 +0200)
committerRobin Appelman <icewind@owncloud.com>
Wed, 29 May 2013 13:25:42 +0000 (15:25 +0200)
lib/files/cache/permissions.php
lib/files/view.php

index faa5ff5eacc4a5ee938a1d71b12d582c803c2f8a..73473142c74ad346dbe976926ccfe40e478c40ed 100644 (file)
@@ -85,6 +85,25 @@ class Permissions {
                return $filePermissions;
        }
 
+       /**
+        * get the permissions for all files in a folder
+        *
+        * @param int $parentId
+        * @return int[]
+        */
+       public function getDirectoryPermissions($parentId) {
+               $query = \OC_DB::prepare('SELECT `*PREFIX*permissions`.`fileid`, `permissions`
+                       FROM  `*PREFIX*permissions` INNER JOIN  `*PREFIX*filecache` ON  `*PREFIX*permissions`.fileid =  `*PREFIX*filecache`.fileid
+                       WHERE  `*PREFIX*filecache`.parent = ?');
+
+               $result = $query->execute(array($parentId));
+               $filePermissions = array();
+               while ($row = $result->fetchRow()) {
+                       $filePermissions[$row['fileid']] = $row['permissions'];
+               }
+               return $filePermissions;
+       }
+
        /**
         * remove the permissions for a file
         *
index 8e7727d335c873486473cad20cf8b6154676917a..ffe0e155c6c128b0c498d663f544aa6c2da78d9c 100644 (file)
@@ -267,7 +267,7 @@ class View {
                        $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
                        if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data)
                                and Filesystem::isValidPath($path)
-                               and ! Filesystem::isFileBlacklisted($path)
+                                       and !Filesystem::isFileBlacklisted($path)
                        ) {
                                $path = $this->getRelativePath($absolutePath);
                                $exists = $this->file_exists($path);
@@ -344,7 +344,7 @@ class View {
                        \OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2)
                        and Filesystem::isValidPath($path2)
                        and Filesystem::isValidPath($path1)
-                       and ! Filesystem::isFileBlacklisted($path2)
+                       and !Filesystem::isFileBlacklisted($path2)
                ) {
                        $path1 = $this->getRelativePath($absolutePath1);
                        $path2 = $this->getRelativePath($absolutePath2);
@@ -371,7 +371,7 @@ class View {
                                        list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2);
                                        if ($storage) {
                                                $result = $storage->rename($internalPath1, $internalPath2);
-                        \OC_FileProxy::runPostProxies('rename', $absolutePath1, $absolutePath2);
+                                               \OC_FileProxy::runPostProxies('rename', $absolutePath1, $absolutePath2);
                                        } else {
                                                $result = false;
                                        }
@@ -418,7 +418,7 @@ class View {
                        \OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2)
                        and Filesystem::isValidPath($path2)
                        and Filesystem::isValidPath($path1)
-                       and ! Filesystem::isFileBlacklisted($path2)
+                       and !Filesystem::isFileBlacklisted($path2)
                ) {
                        $path1 = $this->getRelativePath($absolutePath1);
                        $path2 = $this->getRelativePath($absolutePath2);
@@ -632,7 +632,7 @@ class View {
                $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
                if (\OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam)
                        and Filesystem::isValidPath($path)
-                       and ! Filesystem::isFileBlacklisted($path)
+                               and !Filesystem::isFileBlacklisted($path)
                ) {
                        $path = $this->getRelativePath($absolutePath);
                        if ($path == null) {
@@ -760,7 +760,7 @@ class View {
                        }
                }
 
-        $data = \OC_FileProxy::runPostProxies('getFileInfo', $path, $data);
+               $data = \OC_FileProxy::runPostProxies('getFileInfo', $path, $data);
 
                return $data;
        }
@@ -797,18 +797,18 @@ class View {
                        }
 
                        $files = $cache->getFolderContents($internalPath); //TODO: mimetype_filter
+                       $permissions = $permissionsCache->getDirectoryPermissions($cache->getId($internalPath));
 
                        $ids = array();
                        foreach ($files as $i => $file) {
                                $files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
                                $ids[] = $file['fileid'];
 
-                               $permissions = $permissionsCache->get($file['fileid'], $user);
-                               if ($permissions === -1) {
-                                       $permissions = $storage->getPermissions($file['path']);
-                                       $permissionsCache->set($file['fileid'], $user, $permissions);
+                               if (!isset($permissions[$file['fileid']])) {
+                                       $permissions[$file['fileid']] = $storage->getPermissions($file['path']);
+                                       $permissionsCache->set($file['fileid'], $user, $permissions[$file['fileid']]);
                                }
-                               $files[$i]['permissions'] = $permissions;
+                               $files[$i]['permissions'] = $permissions[$file['fileid']];
                        }
 
                        //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders