diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-09-07 18:30:48 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-09-07 18:30:48 +0200 |
commit | bd834220959bf7edcc4cce4bfe6c77e0a4649b8b (patch) | |
tree | 6bf7987e57de953924f47f06b3018f14e0807934 /lib/filestorage | |
parent | edcd29747692ff1ffbec927b9f31ac239c5e192d (diff) | |
download | nextcloud-server-bd834220959bf7edcc4cce4bfe6c77e0a4649b8b.tar.gz nextcloud-server-bd834220959bf7edcc4cce4bfe6c77e0a4649b8b.zip |
put filestorages in a namespace
Diffstat (limited to 'lib/filestorage')
-rw-r--r-- | lib/filestorage/common.php | 282 | ||||
-rw-r--r-- | lib/filestorage/commontest.php | 75 | ||||
-rw-r--r-- | lib/filestorage/local.php | 199 | ||||
-rw-r--r-- | lib/filestorage/temporary.php | 17 |
4 files changed, 0 insertions, 573 deletions
diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php deleted file mode 100644 index 351714437c5..00000000000 --- a/lib/filestorage/common.php +++ /dev/null @@ -1,282 +0,0 @@ -<?php - -/** -* ownCloud -* -* @author Michael Gapczynski -* @copyright 2012 Michael Gapczynski GapczynskiM@gmail.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -*/ - -/** - * Storage backend class for providing common filesystem operation methods - * which are not storage-backend specific. - * - * OC_Filestorage_Common is never used directly; it is extended by all other - * storage backends, where its methods may be overridden, and additional - * (backend-specific) methods are defined. - * - * Some OC_Filestorage_Common methods call functions which are first defined - * in classes which extend it, e.g. $this->stat() . - */ - -abstract class OC_Filestorage_Common extends OC_Filestorage { - - public function __construct($parameters) {} -// abstract public function mkdir($path); -// abstract public function rmdir($path); -// abstract public function opendir($path); - public function is_dir($path) { - return $this->filetype($path)=='dir'; - } - public function is_file($path) { - return $this->filetype($path)=='file'; - } -// abstract public function stat($path); -// abstract public function filetype($path); - public function filesize($path) { - if($this->is_dir($path)) { - return 0;//by definition - }else{ - $stat = $this->stat($path); - return $stat['size']; - } - } - public function isCreatable($path) { - return $this->isUpdatable($path); - } -// abstract public function isReadable($path); -// abstract public function isUpdatable($path); - public function isDeletable($path) { - return $this->isUpdatable($path); - } - public function isSharable($path) { - return $this->isReadable($path); - } -// abstract public function file_exists($path); - public function filectime($path) { - $stat = $this->stat($path); - return $stat['ctime']; - } - public function filemtime($path) { - $stat = $this->stat($path); - return $stat['mtime']; - } - public function fileatime($path) { - $stat = $this->stat($path); - return $stat['atime']; - } - public function file_get_contents($path) { - $handle = $this->fopen($path, "r"); - if(!$handle) { - return false; - } - $size=$this->filesize($path); - if($size==0) { - return ''; - } - return fread($handle, $size); - } - public function file_put_contents($path,$data) { - $handle = $this->fopen($path, "w"); - return fwrite($handle, $data); - } -// abstract public function unlink($path); - public function rename($path1,$path2) { - if($this->copy($path1,$path2)) { - return $this->unlink($path1); - }else{ - return false; - } - } - public function copy($path1,$path2) { - $source=$this->fopen($path1,'r'); - $target=$this->fopen($path2,'w'); - $count=OC_Helper::streamCopy($source,$target); - return $count>0; - } -// abstract public function fopen($path,$mode); - - /** - * @brief Deletes all files and folders recursively within a directory - * @param $directory The directory whose contents will be deleted - * @param $empty Flag indicating whether directory will be emptied - * @returns true/false - * - * @note By default the directory specified by $directory will be - * deleted together with its contents. To avoid this set $empty to true - */ - public function deleteAll( $directory, $empty = false ) { - - // strip leading slash - if( substr( $directory, 0, 1 ) == "/" ) { - - $directory = substr( $directory, 1 ); - - } - - // strip trailing slash - if( substr( $directory, -1) == "/" ) { - - $directory = substr( $directory, 0, -1 ); - - } - - if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) { - - return false; - - } elseif( !$this->is_readable( \OCP\USER::getUser() . '/' . $directory ) ) { - - return false; - - } else { - - $directoryHandle = $this->opendir( \OCP\USER::getUser() . '/' . $directory ); - - while ( $contents = readdir( $directoryHandle ) ) { - - if ( $contents != '.' && $contents != '..') { - - $path = $directory . "/" . $contents; - - if ( $this->is_dir( $path ) ) { - - deleteAll( $path ); - - } else { - - $this->unlink( \OCP\USER::getUser() .'/' . $path ); // TODO: make unlink use same system path as is_dir - - } - } - - } - - //$this->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV - - if ( $empty == false ) { - - if ( !$this->rmdir( $directory ) ) { - - return false; - - } - - } - - return true; - } - - } - public function getMimeType($path) { - if(!$this->file_exists($path)) { - return false; - } - if($this->is_dir($path)) { - return 'httpd/unix-directory'; - } - $source=$this->fopen($path,'r'); - if(!$source) { - return false; - } - $head=fread($source,8192);//8kb should suffice to determine a mimetype - if($pos=strrpos($path,'.')) { - $extension=substr($path,$pos); - }else{ - $extension=''; - } - $tmpFile=OC_Helper::tmpFile($extension); - file_put_contents($tmpFile,$head); - $mime=OC_Helper::getMimeType($tmpFile); - unlink($tmpFile); - return $mime; - } - public function hash($type,$path,$raw = false) { - $tmpFile=$this->getLocalFile(); - $hash=hash($type,$tmpFile,$raw); - unlink($tmpFile); - return $hash; - } -// abstract public function free_space($path); - public function search($query) { - return $this->searchInDir($query); - } - public function getLocalFile($path) { - return $this->toTmpFile($path); - } - private function toTmpFile($path) {//no longer in the storage api, still usefull here - $source=$this->fopen($path,'r'); - if(!$source) { - return false; - } - if($pos=strrpos($path,'.')) { - $extension=substr($path,$pos); - }else{ - $extension=''; - } - $tmpFile=OC_Helper::tmpFile($extension); - $target=fopen($tmpFile,'w'); - OC_Helper::streamCopy($source,$target); - return $tmpFile; - } - public function getLocalFolder($path) { - $baseDir=OC_Helper::tmpFolder(); - $this->addLocalFolder($path,$baseDir); - return $baseDir; - } - private function addLocalFolder($path,$target) { - if($dh=$this->opendir($path)) { - while($file=readdir($dh)) { - if($file!=='.' and $file!=='..') { - if($this->is_dir($path.'/'.$file)) { - mkdir($target.'/'.$file); - $this->addLocalFolder($path.'/'.$file,$target.'/'.$file); - }else{ - $tmp=$this->toTmpFile($path.'/'.$file); - rename($tmp,$target.'/'.$file); - } - } - } - } - } -// abstract public function touch($path, $mtime=null); - - protected function searchInDir($query,$dir='') { - $files=array(); - $dh=$this->opendir($dir); - if($dh) { - while($item=readdir($dh)) { - if ($item == '.' || $item == '..') continue; - if(strstr(strtolower($item),strtolower($query))!==false) { - $files[]=$dir.'/'.$item; - } - if($this->is_dir($dir.'/'.$item)) { - $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item)); - } - } - } - return $files; - } - - /** - * check if a file or folder has been updated since $time - * @param int $time - * @return bool - */ - public function hasUpdated($path,$time) { - return $this->filemtime($path)>$time; - } -} diff --git a/lib/filestorage/commontest.php b/lib/filestorage/commontest.php deleted file mode 100644 index b88bb232c36..00000000000 --- a/lib/filestorage/commontest.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php - -/** -* ownCloud -* -* @author Robin Appelman -* @copyright 2012 Robin Appelman icewind@owncloud.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -* -*/ - -/** - * test implementation for OC_FileStorage_Common with OC_FileStorage_Local - */ - -class OC_Filestorage_CommonTest extends OC_Filestorage_Common{ - /** - * underlying local storage used for missing functions - * @var OC_FileStorage_Local - */ - private $storage; - - public function __construct($params) { - $this->storage=new OC_Filestorage_Local($params); - } - - public function mkdir($path) { - return $this->storage->mkdir($path); - } - public function rmdir($path) { - return $this->storage->rmdir($path); - } - public function opendir($path) { - return $this->storage->opendir($path); - } - public function stat($path) { - return $this->storage->stat($path); - } - public function filetype($path) { - return $this->storage->filetype($path); - } - public function isReadable($path) { - return $this->storage->isReadable($path); - } - public function isUpdatable($path) { - return $this->storage->isUpdatable($path); - } - public function file_exists($path) { - return $this->storage->file_exists($path); - } - public function unlink($path) { - return $this->storage->unlink($path); - } - public function fopen($path,$mode) { - return $this->storage->fopen($path,$mode); - } - public function free_space($path) { - return $this->storage->free_space($path); - } - public function touch($path, $mtime=null) { - return $this->storage->touch($path,$mtime); - } -}
\ No newline at end of file diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php deleted file mode 100644 index e26d3d3ef91..00000000000 --- a/lib/filestorage/local.php +++ /dev/null @@ -1,199 +0,0 @@ -<?php -/** - * for local filestore, we only have to map the paths - */ -class OC_Filestorage_Local extends OC_Filestorage_Common{ - protected $datadir; - public function __construct($arguments) { - $this->datadir=$arguments['datadir']; - if(substr($this->datadir,-1)!=='/') { - $this->datadir.='/'; - } - } - public function mkdir($path) { - return @mkdir($this->datadir.$path); - } - public function rmdir($path) { - return @rmdir($this->datadir.$path); - } - public function opendir($path) { - return opendir($this->datadir.$path); - } - public function is_dir($path) { - if(substr($path,-1)=='/') { - $path=substr($path,0,-1); - } - return is_dir($this->datadir.$path); - } - public function is_file($path) { - return is_file($this->datadir.$path); - } - public function stat($path) { - return stat($this->datadir.$path); - } - public function filetype($path) { - $filetype=filetype($this->datadir.$path); - if($filetype=='link') { - $filetype=filetype(realpath($this->datadir.$path)); - } - return $filetype; - } - public function filesize($path) { - if($this->is_dir($path)) { - return 0; - }else{ - return filesize($this->datadir.$path); - } - } - public function isReadable($path) { - return is_readable($this->datadir.$path); - } - public function isUpdatable($path) { - return is_writable($this->datadir.$path); - } - public function file_exists($path) { - return file_exists($this->datadir.$path); - } - public function filectime($path) { - return filectime($this->datadir.$path); - } - public function filemtime($path) { - return filemtime($this->datadir.$path); - } - public function touch($path, $mtime=null) { - // 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. - if(!is_null($mtime)) { - $result=touch( $this->datadir.$path, $mtime ); - }else{ - $result=touch( $this->datadir.$path); - } - if( $result ) { - clearstatcache( true, $this->datadir.$path ); - } - - return $result; - } - public function file_get_contents($path) { - return file_get_contents($this->datadir.$path); - } - public function file_put_contents($path,$data) { - return file_put_contents($this->datadir.$path,$data); - } - public function unlink($path) { - return $this->delTree($path); - } - public function rename($path1,$path2) { - if (!$this->isUpdatable($path1)) { - OC_Log::write('core','unable to rename, file is not writable : '.$path1,OC_Log::ERROR); - return false; - } - if(! $this->file_exists($path1)) { - OC_Log::write('core','unable to rename, file does not exists : '.$path1,OC_Log::ERROR); - return false; - } - - if($return=rename($this->datadir.$path1,$this->datadir.$path2)) { - } - return $return; - } - public function copy($path1,$path2) { - if($this->is_dir($path2)) { - if(!$this->file_exists($path2)) { - $this->mkdir($path2); - } - $source=substr($path1,strrpos($path1,'/')+1); - $path2.=$source; - } - return copy($this->datadir.$path1,$this->datadir.$path2); - } - public function fopen($path,$mode) { - if($return=fopen($this->datadir.$path,$mode)) { - switch($mode) { - case 'r': - break; - case 'r+': - case 'w+': - case 'x+': - case 'a+': - break; - case 'w': - case 'x': - case 'a': - break; - } - } - return $return; - } - - public function getMimeType($path) { - if($this->isReadable($path)) { - return OC_Helper::getMimeType($this->datadir.$path); - }else{ - return false; - } - } - - private function delTree($dir) { - $dirRelative=$dir; - $dir=$this->datadir.$dir; - if (!file_exists($dir)) return true; - if (!is_dir($dir) || is_link($dir)) return unlink($dir); - foreach (scandir($dir) as $item) { - if ($item == '.' || $item == '..') continue; - if(is_file($dir.'/'.$item)) { - if(unlink($dir.'/'.$item)) { - } - }elseif(is_dir($dir.'/'.$item)) { - if (!$this->delTree($dirRelative. "/" . $item)) { - return false; - }; - } - } - if($return=rmdir($dir)) { - } - return $return; - } - - public function hash($path,$type,$raw=false) { - return hash_file($type,$this->datadir.$path,$raw); - } - - public function free_space($path) { - return disk_free_space($this->datadir.$path); - } - - public function search($query) { - return $this->searchInDir($query); - } - public function getLocalFile($path) { - return $this->datadir.$path; - } - public function getLocalFolder($path) { - return $this->datadir.$path; - } - - protected function searchInDir($query,$dir='') { - $files=array(); - foreach (scandir($this->datadir.$dir) as $item) { - if ($item == '.' || $item == '..') continue; - if(strstr(strtolower($item),strtolower($query))!==false) { - $files[]=$dir.'/'.$item; - } - if(is_dir($this->datadir.$dir.'/'.$item)) { - $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item)); - } - } - return $files; - } - - /** - * check if a file or folder has been updated since $time - * @param int $time - * @return bool - */ - public function hasUpdated($path,$time) { - return $this->filemtime($path)>$time; - } -} diff --git a/lib/filestorage/temporary.php b/lib/filestorage/temporary.php deleted file mode 100644 index 876ba045a63..00000000000 --- a/lib/filestorage/temporary.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * local storage backnd in temporary folder for testing purpores - */ -class OC_Filestorage_Temporary extends OC_Filestorage_Local{ - public function __construct($arguments) { - $this->datadir=OC_Helper::tmpFolder(); - } - - public function cleanUp() { - OC_Helper::rmdirr($this->datadir); - } - - public function __destruct() { - $this->cleanUp(); - } -} |