]> source.dussan.org Git - nextcloud-server.git/commitdiff
find correct source file and owner of shared files
authorBjörn Schießle <schiessle@owncloud.com>
Tue, 6 Nov 2012 13:38:34 +0000 (14:38 +0100)
committerBjörn Schießle <schiessle@owncloud.com>
Thu, 8 Nov 2012 14:18:10 +0000 (15:18 +0100)
lib/connector/sabre/node.php

index 01a4bd141a6a6a7b044dd7792d1c931de1c2a718..a740fe6cac1d086d64633aeb687538759147431e 100644 (file)
@@ -149,37 +149,27 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
         */
        public function updateProperties($properties) {
                // get source path of shared files
-               if (!strncmp($this->path, '/Shared/', 8)) {
-                       $source = OC_Filestorage_Shared::getSourcePath(str_replace('/Shared/', '', $this->path));
-                       $parts = explode('/', $source, 4);
-                       $user =  $parts[1];
-                       $path = '/'.$parts[3];
-               } else {
-                       $user = OC_User::getUser();
-                       $path = $this->path;
-               }
-               
+               $source = self::getFileSource($this->path);
+
                $existing = $this->getProperties(array());
                foreach($properties as $propertyName => $propertyValue) {
                        // If it was null, we need to delete the property
                        if (is_null($propertyValue)) {
                                if(array_key_exists( $propertyName, $existing )) {
                                        $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
-                                       $query->execute( array( $user, $path, $propertyName ));
+                                       $query->execute( array( $source['user'], $source['path'], $propertyName ));
                                }
                        }
                        else {
                                if( strcmp( $propertyName, self::LASTMODIFIED_PROPERTYNAME) === 0 ) {
-                                       error_log("propertyName: " . $propertyName);
                                        $this->touch($propertyValue);
                                } else {
-                                       error_log("update/insert property: user: $user; path: $path");
                                        if(!array_key_exists( $propertyName, $existing )) {
                                                $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
-                                               $query->execute( array( $user, $path, $propertyName, $propertyValue ));
+                                               $query->execute( array( $source['user'], $source['path'], $propertyName, $propertyValue ));
                                        } else {
                                                $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
-                                               $query->execute( array( $propertyValue, $user, $path, $propertyName ));
+                                               $query->execute( array( $propertyValue, $source['user'], $source['path'], $propertyName ));
                                        }
                                }
                        }
@@ -249,18 +239,11 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
                        return null;
                }
                
-               if (!strncmp($path, '/Shared/', 8)) {\r
-                       $source = OC_Filestorage_Shared::getSourcePath(str_replace('/Shared/', '', $path));\r
-                       $parts = explode('/', $source, 4);\r
-                       $user =  $parts[1];\r
-                       $path = '/'.$parts[3];\r
-               } else {\r
-                       $user = OC_User::getUser();\r
-               }
-               
+               $source = self::getFileSource($path);
+                       
                $etag = '"'.$tag.'"';
                $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
-               $query->execute( array( $user, $path, self::GETETAG_PROPERTYNAME, $etag ));
+               $query->execute( array( $source['user'], $source['path'], self::GETETAG_PROPERTYNAME, $etag ));
                return $etag;
        }
 
@@ -270,7 +253,10 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
         */
        static public function removeETagPropertyForPath($path) {
                // remove tags from this and parent paths
-               //TODO Shared Files?!?
+               
+               $source = self::getFileSource($path);
+               $path = $source['path'];
+               
                $paths = array();
                while ($path != '/' && $path != '.' && $path != '' && $path != '\\') {
                        $paths[] = $path;
@@ -286,7 +272,19 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
                        .' AND `propertyname` = ?'
                        .' AND `propertypath` IN ('.$path_placeholders.')'
                        );
-               $vals = array( OC_User::getUser(), self::GETETAG_PROPERTYNAME );
+               $vals = array( $source['user'], self::GETETAG_PROPERTYNAME );
                $query->execute(array_merge( $vals, $paths ));
        }
+       
+       private function getFileSource($path) {
+               if ( OC_App::isEnabled('files_sharing') &&  !strncmp($path, '/Shared/', 8)) {\r
+                       $source = OC_Files_Sharing_Util::getSourcePath(str_replace('/Shared/', '', $path));\r
+                       $parts = explode('/', $source, 4);\r
+                       $user =  $parts[1];\r
+                       $path = '/'.$parts[3];\r
+               } else {\r
+                       $user = OC_User::getUser();\r
+               }
+               return(array('user' => $user, 'path' => $path));
+       }
 }