diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 0a593b98c4..246d4f672d 100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -26,7 +26,7 @@
// - Crypt/decrypt button in the userinterface
// - Setting if crypto should be on by default
// - Add a setting "DonĀ“t encrypt files larger than xx because of performance reasons"
-// - Transparent decrypt/encrpt in filesystem.php. Autodetect if a file is encrypted (.encrypted extensio)
+// - Transparent decrypt/encrypt in filesystem.php. Autodetect if a file is encrypted (.encrypted extension)
// - Don't use a password directly as encryption key. but a key which is stored on the server and encrypted with the user password. -> password change faster
// - IMPORTANT! Check if the block lenght of the encrypted data stays the same
diff --git a/apps/files_remote/appinfo/app.php b/apps/files_remote/appinfo/app.php
new file mode 100644
index 0000000000..f94e813ea5
--- /dev/null
+++ b/apps/files_remote/appinfo/app.php
@@ -0,0 +1,9 @@
+
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+OC::$CLASSPATH['OC_Filestorage_FTP']='apps/files_remote/lib/ftp.php';
diff --git a/apps/files_remote/appinfo/info.xml b/apps/files_remote/appinfo/info.xml
new file mode 100644
index 0000000000..0720b6095b
--- /dev/null
+++ b/apps/files_remote/appinfo/info.xml
@@ -0,0 +1,10 @@
+
+
+ files_remote
+ Remote storage support
+ Mount remote storage sources
+ 0.1
+ AGPL
+ Robin Appelman
+ 3
+
diff --git a/apps/files_remote/lib/ftp.php b/apps/files_remote/lib/ftp.php
new file mode 100644
index 0000000000..802446b4fd
--- /dev/null
+++ b/apps/files_remote/lib/ftp.php
@@ -0,0 +1,157 @@
+
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_FileStorage_FTP extends OC_Filestorage_Common{
+ private $password;
+ private $user;
+ private $host;
+ private $secure;
+ private $root;
+
+ private static $tempFiles=array();
+
+ public function __construct($params){
+ $this->host=$params['host'];
+ $this->user=$params['user'];
+ $this->password=$params['password'];
+ $this->secure=isset($params['secure'])?(bool)$params['secure']:false;
+ $this->root=isset($params['root'])?$params['root']:'/';
+ if(substr($this->root,0,1)!='/'){
+ $this->root='/'.$this->root;
+ }
+
+ //create the root folder if necesary
+ mkdir($this->constructUrl(''));
+ }
+
+ /**
+ * construct the ftp url
+ * @param string path
+ * @return string
+ */
+ public function constructUrl($path){
+ $url='ftp';
+ if($this->secure){
+ $url.='s';
+ }
+ $url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path;
+ return $url;
+ }
+
+ 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){
+ switch($mode){
+ case 'r':
+ case 'rb':
+ case 'w':
+ case 'wb':
+ case 'a':
+ case 'ab':
+ //these are supported by the wrapper
+ $context = stream_context_create(array('ftp' => array('overwrite' => true)));
+ return fopen($this->constructUrl($path),$mode,false,$context);
+ case 'r+':
+ case 'w+':
+ case 'wb+':
+ case 'a+':
+ case 'x':
+ case 'x+':
+ case 'c':
+ case 'c+':
+ //emulate these
+ if(strrpos($path,'.')!==false){
+ $ext=substr($path,strrpos($path,'.'));
+ }else{
+ $ext='';
+ }
+ $tmpFile=OC_Helper::tmpFile($ext);
+ OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack');
+ if($this->file_exists($path)){
+ $this->getFile($path,$tmpFile);
+ }
+ self::$tempFiles[$tmpFile]=$path;
+ return fopen('close://'.$tmpFile,$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));
+ }
+}
diff --git a/apps/files_remote/tests/config.php b/apps/files_remote/tests/config.php
new file mode 100644
index 0000000000..5410578291
--- /dev/null
+++ b/apps/files_remote/tests/config.php
@@ -0,0 +1,9 @@
+array(
+ 'host'=>'localhost',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'/test',
+ )
+);
diff --git a/apps/files_remote/tests/ftp.php b/apps/files_remote/tests/ftp.php
new file mode 100644
index 0000000000..2d5405ccda
--- /dev/null
+++ b/apps/files_remote/tests/ftp.php
@@ -0,0 +1,28 @@
+
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_Filestorage_FTP extends Test_FileStorage {
+ /**
+ * @var string tmpDir
+ */
+ private $config;
+ private $id;
+
+ public function setUp(){
+ $id=uniqid();
+ $this->config=include('apps/files_remote/tests/config.php');
+ $this->config['ftp']['root'].='/'.$id;//make sure we have an new empty folder to work in
+ $this->instance=new OC_Filestorage_FTP($this->config['ftp']);
+ }
+
+ public function tearDown(){
+ OC_Helper::rmdirr($this->instance->constructUrl(''));
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/files/admin.php b/files/admin.php
index b9c26c465f..1fe1ff55a4 100644
--- a/files/admin.php
+++ b/files/admin.php
@@ -35,16 +35,16 @@ if($_POST) {
}
if(isset($_POST['maxZipInputSize'])) {
$maxZipInputSize=$_POST['maxZipInputSize'];
- OC_Preferences::setValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize($maxZipInputSize));
+ OC_Config::setValue('maxZipInputSize', OC_Helper::computerFileSize($maxZipInputSize));
}
- OC_Preferences::setValue('', 'files', 'allowZipDownload', isset($_POST['allowZipDownload']));
+ OC_Config::setValue('allowZipDownload', isset($_POST['allowZipDownload']));
}else{
$upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'));
$post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
- $allowZipDownload = intval(OC_Preferences::getValue('', 'files', 'allowZipDownload', 1));
- $maxZipInputSize = OC_Helper::humanfilesize(OC_Preferences::getValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize('800 MB')));
+ $maxZipInputSize = OC_Helper::humanfilesize(OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB')));
}
+$allowZipDownload = intval(OC_Config::getValue('allowZipDownload', true));
OC_App::setActiveNavigationEntry( "files_administration" );
diff --git a/files/index.php b/files/index.php
index 79261e495b..82d0960892 100644
--- a/files/index.php
+++ b/files/index.php
@@ -98,6 +98,7 @@ $tmpl->assign( 'readonly', !OC_Filesystem::is_writable($dir));
$tmpl->assign( "files", $files );
$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
$tmpl->assign( 'uploadMaxHumanFilesize', OC_Helper::humanFileSize($maxUploadFilesize));
+$tmpl->assign( 'allowZipDownload', intval(OC_Config::getValue('allowZipDownload', true)));
$tmpl->printPage();
?>
diff --git a/files/templates/index.php b/files/templates/index.php
index 497a0f36c0..da1e58ce13 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -40,7 +40,7 @@
t( 'Name' ); ?>
-
+
" />
" />
@@ -70,4 +70,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/files.php b/lib/files.php
index 662f0b5972..57ebb9005a 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -224,7 +224,7 @@ class OC_Files {
* @param files $files
*/
static function validateZipDownload($dir, $files) {
- if(!OC_Preferences::getValue('', 'files', 'allowZipDownload', 1)) {
+ if(!OC_Config::getValue('allowZipDownload', true)) {
$l = new OC_L10N('files');
header("HTTP/1.0 409 Conflict");
$tmpl = new OC_Template( '', 'error', 'user' );
@@ -239,7 +239,7 @@ class OC_Files {
exit;
}
- $zipLimit = OC_Preferences::getValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize('800 MB'));
+ $zipLimit = OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB'));
if($zipLimit > 0) {
$totalsize = 0;
if(is_array($files)){
diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php
index 9ffa0eca9c..4858234a2d 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/filestorage.php
@@ -135,10 +135,12 @@ abstract class Test_FileStorage extends UnitTestCase {
$ctimeEnd=time();
$cTime=$this->instance->filectime('/lorem.txt');
$mTime=$this->instance->filemtime('/lorem.txt');
- $this->assertTrue($ctimeStart<=$cTime);
- $this->assertTrue($cTime<=$ctimeEnd);
- $this->assertTrue($ctimeStart<=$mTime);
- $this->assertTrue($mTime<=$ctimeEnd);
+ if($cTime!=-1){//not everything can support ctime
+ $this->assertTrue(($ctimeStart-1)<=$cTime);
+ $this->assertTrue($cTime<=($ctimeEnd+1));
+ }
+ $this->assertTrue(($ctimeStart-1)<=$mTime);
+ $this->assertTrue($mTime<=($ctimeEnd+1));
$this->assertEqual(filesize($textFile),$this->instance->filesize('/lorem.txt'));
$stat=$this->instance->stat('/lorem.txt');
@@ -153,8 +155,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$originalCTime=$cTime;
$cTime=$this->instance->filectime('/lorem.txt');
$mTime=$this->instance->filemtime('/lorem.txt');
- $this->assertTrue($mtimeStart<=$mTime);
- $this->assertTrue($mTime<=$mtimeEnd);
+ $this->assertTrue(($mtimeStart-1)<=$mTime);
+ $this->assertTrue($mTime<=($mtimeEnd+1));
$this->assertEqual($cTime,$originalCTime);
if($this->instance->touch('/lorem.txt',100)!==false){
@@ -170,8 +172,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$mtimeEnd=time();
$originalCTime=$cTime;
$mTime=$this->instance->filemtime('/lorem.txt');
- $this->assertTrue($mtimeStart<=$mTime);
- $this->assertTrue($mTime<=$mtimeEnd);
+ $this->assertTrue(($mtimeStart-1)<=$mTime);
+ $this->assertTrue($mTime<=($mtimeEnd+1));
}
public function testSearch(){