diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-05-24 18:22:33 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-05-24 18:23:59 +0200 |
commit | 2f40f11c873b22881ad3ed21549253e53b6927ca (patch) | |
tree | d5bcbfab706363b5c151922dfd74417cfae9f990 /apps/files_external/lib/smb.php | |
parent | bee724c53e243bda82c9490154fcd13079e41082 (diff) | |
download | nextcloud-server-2f40f11c873b22881ad3ed21549253e53b6927ca.tar.gz nextcloud-server-2f40f11c873b22881ad3ed21549253e53b6927ca.zip |
smb filestorage backend
Diffstat (limited to 'apps/files_external/lib/smb.php')
-rw-r--r-- | apps/files_external/lib/smb.php | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php new file mode 100644 index 00000000000..c769d29032d --- /dev/null +++ b/apps/files_external/lib/smb.php @@ -0,0 +1,120 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once('smb4php/smb.php'); + +class OC_FileStorage_SMB extends OC_Filestorage_Common{ + private $password; + private $user; + private $host; + private $root; + + private static $tempFiles=array(); + + public function __construct($params){ + $this->host=$params['host']; + $this->user=$params['user']; + $this->password=$params['password']; + $this->root=isset($params['root'])?$params['root']:'/'; + + //create the root folder if necesary + $this->mkdir(''); + } + + public function constructUrl($path){ + if(substr($path,-1)=='/'){ + $path=substr($path,0,-1); + } + return 'smb://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path; + + } + + public function mkdir($path){ + return mkdir($this->constructUrl($path)); + } + + public function rmdir($path){ + if($this->file_exists($path)){ + $succes=rmdir($this->constructUrl($path)); + clearstatcache(); + return $succes; + }else{ + return false; + } + } + + public function opendir($path){ + return opendir($this->constructUrl($path)); + } + + public function filetype($path){ + return filetype($this->constructUrl($path)); + } + + public function is_readable($path){ + return true;//not properly supported + } + + public function is_writable($path){ + return true;//not properly supported + } + + public function file_exists($path){ + return file_exists($this->constructUrl($path)); + } + + public function unlink($path){ + $succes=unlink($this->constructUrl($path)); + clearstatcache(); + return $succes; + } + + public function fopen($path,$mode){ + return fopen($this->constructUrl($path),$mode); + } + + public function writeBack($tmpFile){ + if(isset(self::$tempFiles[$tmpFile])){ + $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]); + unlink($tmpFile); + } + } + + public function free_space($path){ + return 0; + } + + public function touch($path,$mtime=null){ + if(is_null($mtime)){ + $fh=$this->fopen($path,'a'); + fwrite($fh,''); + fclose($fh); + }else{ + return false;//not supported + } + } + + public function getFile($path,$target){ + return copy($this->constructUrl($path),$target); + } + + public function uploadFile($path,$target){ + return copy($path,$this->constructUrl($target)); + } + + public function rename($path1,$path2){ + return rename($this->constructUrl($path1),$this->constructUrl($path2)); + } + + public function stat($path){ + return stat($this->constructUrl($path)); + } + + + +} |