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:
authorRobin Appelman <icewind@owncloud.com>2012-02-27 15:04:04 +0400
committerRobin Appelman <icewind@owncloud.com>2012-02-27 15:04:42 +0400
commitcef230c141897f587dd732860cca6568fd6edc2c (patch)
tree7e112628dd41a985477f3aadd59a658ad4c6e913 /lib/filestorage
parent4eb9a69bd87f5118dbbef1df2988916b42b1139b (diff)
extend filestorage common and provide test implementation
Diffstat (limited to 'lib/filestorage')
-rw-r--r--lib/filestorage/common.php122
-rw-r--r--lib/filestorage/commontest.php75
2 files changed, 197 insertions, 0 deletions
diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php
new file mode 100644
index 00000000000..28c5e70041d
--- /dev/null
+++ b/lib/filestorage/common.php
@@ -0,0 +1,122 @@
+<?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/>.
+*/
+
+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'];
+ }
+ }
+// abstract public function is_readable($path);
+// abstract public function is_writable($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");
+ return fread($handle, $this->filesize($path));
+ }
+ 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);
+ 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
+ $tmpFile=tempnam(get_temp_dir(),'OC_TMP_').substr($path,strrpos($path,'.'));
+ file_put_contents($tmpFile,$head);
+ $mime=OC_Helper::getMimeType($tmpFile);
+ unlink($tmpFile);
+ return $mime;
+ }
+ public function hash($type,$path,$raw){
+ $tmpFile=$this->getLocalFile();
+ $hash=hash($type,$tmpFile,$raw);
+ unlink($tmpFile);
+ return $hash;
+ }
+// abstract public function free_space($path);
+// abstract public function search($query);
+ public function getLocalFile($path){
+ return $this->getLocalFile();
+ }
+ private function toTmpFile($path){//no longer in the storage api, still usefull here
+ $source=$this->fopen($path,'r');
+ if(!$source){
+ return false;
+ }
+ $tmpFile=tempnam(get_temp_dir(),'OC_TMP_').substr($path,strrpos($path,'.'));
+ $target=fopen($tmpFile);
+ $count=OC_Helper::streamCopy($source,$target);
+ return $tmpFile;
+ }
+}
diff --git a/lib/filestorage/commontest.php b/lib/filestorage/commontest.php
new file mode 100644
index 00000000000..dd552c6865b
--- /dev/null
+++ b/lib/filestorage/commontest.php
@@ -0,0 +1,75 @@
+<?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 is_readable($path){
+ return $this->storage->is_readable($path);
+ }
+ public function is_writable($path){
+ return $this->storage->is_writable($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 search($query){
+ return $this->storage->search($query);
+ }
+} \ No newline at end of file