/**
* Privde a common interface to all different storage options
- *
- * Hooks provided:
- * read(storage,path)
- * write(storage,path)
- * create(storage,path) (when a file is created both, write and create will be emited)
- * delete(storage,path)
- * rename(storage,oldpath,newpath)
*/
class OC_FILESTORAGE{
public function __construct($parameters){}
}
public function rmdir($path){
if($return=rmdir($this->datadir.$path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "delete", array( 'storage'=>$this, 'path' => $path));
$this->clearFolderSizeCache($path);
}
return $return;
}
public function opendir($path){
- if($return=opendir($this->datadir.$path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
- }
- return $return;
+ return opendir($this->datadir.$path);
}
public function is_dir($path){
return (is_dir($this->datadir.$path) or substr($path,-1)=='/');
return file_exists($this->datadir.$path);
}
public function readfile($path){
- if($return=readfile($this->datadir.$path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
- }
- return $return;
+ return readfile($this->datadir.$path);
}
public function filectime($path){
return filectime($this->datadir.$path);
return fileatime($this->datadir.$path);
}
public function file_get_contents($path){
- if($return=file_get_contents($this->datadir.$path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
- }
- return $return;
+ return file_get_contents($this->datadir.$path);
}
public function file_put_contents($path,$data){
- if(!$this->file_exists($path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', 'create', array( 'storage'=>$this, 'path' => $path));
- }
if($return=file_put_contents($this->datadir.$path,$data)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "write", array( 'storage'=>$this, 'path' => $path));
$this->clearFolderSizeCache($path);
}
}
public function unlink($path){
if($return=unlink($this->datadir.$path)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "delete", array( 'storage'=>$this, 'path' => $path));
$this->clearFolderSizeCache($path);
}
return $return;
}
public function rename($path1,$path2){
if($return=rename($this->datadir.$path1,$this->datadir.$path2)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "rename", array( 'storage'=>$this, 'oldpath' => $path1, 'newpath' => $path2));
+ $this->clearFolderSizeCache($path1);
+ $this->clearFolderSizeCache($path2);
}
return $return;
}
$path2.=$source;
}
if($return=copy($this->datadir.$path1,$this->datadir.$path2)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "create", array( 'storage'=>$this, 'path' => $path2));
- $this->clearFolderSizeCache($path);
+ $this->clearFolderSizeCache($path2);
}
return $return;
}
public function fopen($path,$mode){
- $exists=$this->file_exists($path);
if($return=fopen($this->datadir.$path,$mode)){
switch($mode){
case 'r':
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
break;
case 'r+':
case 'w+':
case 'x+':
case 'a+':
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
- OC_HOOK::emit( 'OC_FILESTORAGE', "write", array( 'storage'=>$this, 'path' => $path));
- if(!$exists){
- OC_HOOK::emit( 'OC_FILESTORAGE', 'create', array( 'storage'=>$this, 'path' => $path));
- }
$this->clearFolderSizeCache($path);
break;
case 'w':
case 'x':
case 'a':
- OC_HOOK::emit( 'OC_FILESTORAGE', "write", array( 'storage'=>$this, 'path' => $path));
- if(!$exists){
- OC_HOOK::emit( 'OC_FILESTORAGE', 'create', array( 'storage'=>$this, 'path' => $path));
- }
$this->clearFolderSizeCache($path);
break;
}
$fileStats = stat($this->datadir.$path);
if(copy($this->datadir.$path,$filename)){
touch($filename, $fileStats['mtime'], $fileStats['atime']);
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
return $filename;
}else{
return false;
$fileStats = stat($tmpFile);
if(rename($tmpFile,$this->datadir.$path)){
touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
- OC_HOOK::emit( 'OC_FILESTORAGE', "create", array( 'storage'=>$this, 'path' => $path));
$this->clearFolderSizeCache($path);
return true;
}else{
$fileStats = stat($tmpFile);
if(move_uploaded_file($tmpFile,$this->datadir.$path)){
touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
- OC_HOOK::emit( 'OC_FILESTORAGE', "create", array( 'storage'=>$this, 'path' => $path));
$this->clearFolderSizeCache($path);
return true;
}else{
if ($item == '.' || $item == '..') continue;
if(is_file($dir.'/'.$item)){
if(unlink($dir.'/'.$item)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "delete", array( 'storage'=>$this, 'path' => $dir.'/'.$item));
$this->clearFolderSizeCache($path);
}
}elseif(is_dir($dir.'/'.$item)){
}
}
if($return=rmdir($dir)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "delete", array( 'storage'=>$this, 'path' => $dir));
$this->clearFolderSizeCache($path);
}
return $return;
}
public function hash($type,$path,$raw){
- if($return=hash_file($type,$this->datadir.$path,$raw)){
- OC_HOOK::emit( 'OC_FILESTORAGE', "read", array( 'storage'=>$this, 'path' => $path));
- }
- return $return;
+ return hash_file($type,$this->datadir.$path,$raw);
}
public function free_space($path){