Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaas Freitag <freitag@owncloud.com>2012-02-10 14:30:38 +0400
committerKlaas Freitag <freitag@owncloud.com>2012-02-10 14:30:38 +0400
commit85853f9ec29be9a2ba92737de204da1469f72dd8 (patch)
tree754f80507e5c27cf102e6b18ced9e8a473eb069e
parent9379c3e1284d2d9250af4e5d406a7f6803309fad (diff)
- Added the ability to change a files mtime via webdavs propset.
- Added some minor debug help to fscache
-rw-r--r--lib/connector/sabre/node.php30
-rw-r--r--lib/filecache.php11
-rw-r--r--lib/filestorage/local.php7
-rw-r--r--lib/filesystem.php3
-rw-r--r--lib/filesystemview.php3
5 files changed, 43 insertions, 11 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/filecache.php b/lib/filecache.php
index cb516223f63..921d4a27902 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -62,7 +62,7 @@ class OC_FileCache{
if(is_array($result)){
return $result;
}else{
- OC_Log::write('file not found in cache ('.$path.')','core',OC_Log::DEBUG);
+ OC_Log::write('get(): file not found in cache ('.$path.')','core',OC_Log::DEBUG);
return false;
}
}
@@ -125,7 +125,9 @@ class OC_FileCache{
$queryParts[]='mimepart=?';
}
$arguments[]=$id;
- $query=OC_DB::prepare('UPDATE *PREFIX*fscache SET '.implode(' , ',$queryParts).' WHERE id=?');
+
+ $sql = 'UPDATE *PREFIX*fscache SET '.implode(' , ',$queryParts).' WHERE id=?';
+ $query=OC_DB::prepare($sql);
$query->execute($arguments);
}
@@ -231,7 +233,7 @@ class OC_FileCache{
if(is_array($result)){
return $result;
}else{
- OC_Log::write('file not found in cache ('.$path.')','core',OC_Log::DEBUG);
+ OC_Log::write('getFolderContent(): file not found in cache ('.$path.')','core',OC_Log::DEBUG);
return false;
}
}
@@ -264,7 +266,7 @@ class OC_FileCache{
if(is_array($result)){
return $result['id'];
}else{
- OC_Log::write('file not found in cache ('.$path.')','core',OC_Log::DEBUG);
+ OC_Log::write('getFieldId(): file not found in cache ('.$path.')','core',OC_Log::DEBUG);
return -1;
}
}
@@ -293,6 +295,7 @@ class OC_FileCache{
}else{
$view=new OC_FilesystemView(($root=='/')?'':$root);
}
+
$path=$params['path'];
$fullPath=$view->getRoot().$path;
$mimetype=$view->getMimeType($path);
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 2c1f650cb9f..292d2a84e7d 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -65,6 +65,13 @@ class OC_Filestorage_Local extends OC_Filestorage{
public function filemtime($path){
return filemtime($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);
+ }
+
public function file_get_contents($path){
return file_get_contents($this->datadir.$path);
}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index a18072ecbc2..75997c244ff 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -345,6 +345,9 @@ class OC_Filesystem{
static public function filemtime($path){
return self::$defaultInstance->filemtime($path);
}
+ static public function setFileMtime($path, $mtime){
+ return self::$defaultInstance->setFileMtime($path, $mtime);
+ }
static public function file_get_contents($path){
return self::$defaultInstance->file_get_contents($path);
}
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index 4586507a811..0f1c546f4c5 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -156,6 +156,9 @@ class OC_FilesystemView {
public function filemtime($path){
return $this->basicOperation('filemtime',$path);
}
+ public function setFileMtime($path, $mtime){
+ return $this->basicOperation('setFileMtime',$path, array('write'), $mtime);
+ }
public function file_get_contents($path){
return $this->basicOperation('file_get_contents',$path,array('read'));
}