diff options
author | Klaas Freitag <freitag@owncloud.com> | 2012-02-10 14:30:38 +0400 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2012-03-12 18:49:32 +0400 |
commit | 71e71b75eeb7ac0719df149ecb2b34d3312b2490 (patch) | |
tree | ad23c19bc603c487dc64b19b14b1771491101019 /lib | |
parent | 686590bd3a510efc0cf2752a3d0fd48d536f787d (diff) |
Cherrypick: Added the ability to change a files mtime via webdavs propset.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/connector/sabre/node.php | 30 | ||||
-rw-r--r-- | lib/filestorage/local.php | 10 | ||||
-rw-r--r-- | lib/filesystem.php | 3 |
3 files changed, 36 insertions, 7 deletions
diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php index ace572a1ee3..b8b675c1203 100644 --- a/lib/connector/sabre/node.php +++ b/lib/connector/sabre/node.php @@ -92,6 +92,19 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr } + /** + * sets the last modification time of the file (mtime) to the value given + * in the second parameter or to now if the second param is empty. + * Even if the modification time is set to a custom value the access time is set to now. + */ + public function setLastModifiedTime($mtime) { + OC_Filesystem::setFileMtime($this->path, $mtime); + } + + public function endsWith( $str, $sub ) { + return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub ); + } + /** * Updates properties on this node, * @@ -110,13 +123,16 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr } } else { - if(!array_key_exists( $propertyName, $existing )){ - $query = OC_DB::prepare( 'INSERT INTO *PREFIX*properties (userid,propertypath,propertyname,propertyvalue) VALUES(?,?,?,?)' ); - $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue )); - } - else{ - $query = OC_DB::prepare( 'UPDATE *PREFIX*properties SET propertyvalue = ? WHERE userid = ? AND propertypath = ? AND propertyname = ?' ); - $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName )); + if( $this->endsWith( $propertyName, "modificationTime")) { + $this->setLastModifiedTime($propertyValue); + } else { + if(!array_key_exists( $propertyName, $existing )){ + $query = OC_DB::prepare( 'INSERT INTO *PREFIX*properties (userid,propertypath,propertyname,propertyvalue) VALUES(?,?,?,?)' ); + $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue )); + } else { + $query = OC_DB::prepare( 'UPDATE *PREFIX*properties SET propertyvalue = ? WHERE userid = ? AND propertypath = ? AND propertyname = ?' ); + $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName )); + } } } diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php index e846aa420e4..3c96ff64f37 100644 --- a/lib/filestorage/local.php +++ b/lib/filestorage/local.php @@ -67,9 +67,19 @@ class OC_Filestorage_Local extends OC_Filestorage{ public function filemtime($path){ return filemtime($this->datadir.$path); } +<<<<<<< HEAD public function fileatime($path){ return fileatime($this->datadir.$path); } +======= + + public function setFileMtime($path, $mtime){ + // sets the modification time of the file to the given value. If mtime is nil the current time is set. + // note that the access time of the file always changes to the current time. + return touch($this->datadir.$path, $mtime); + } + +>>>>>>> 85853f9... - Added the ability to change a files mtime via webdavs propset. public function file_get_contents($path){ return file_get_contents($this->datadir.$path); } diff --git a/lib/filesystem.php b/lib/filesystem.php index bd953deb210..e92dc7d7366 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -369,6 +369,9 @@ class OC_Filesystem{ static public function fileatime($path){ return self::basicOperation('fileatime',$path); } + static public function setFileMtime($path, $mtime){ + return self::$defaultInstance->setFileMtime($path, $mtime); + } static public function file_get_contents($path){ return self::basicOperation('file_get_contents',$path,array('read')); } |