diff options
author | Bart Visscher <bartv@thisnet.nl> | 2012-09-07 15:42:37 +0200 |
---|---|---|
committer | Bart Visscher <bartv@thisnet.nl> | 2012-09-07 15:51:44 +0200 |
commit | 5eba5798274823fe3147a8d671ca5e15b3eb7843 (patch) | |
tree | eb9cfb3fc687b8be26dde07a08fd23ca3455991f /apps | |
parent | b483f2aab856e3324026588a9702043072fd7ad2 (diff) | |
parent | 3829460ab8cbb6de65c53583a20fd04cbe7927dd (diff) | |
download | nextcloud-server-5eba5798274823fe3147a8d671ca5e15b3eb7843.tar.gz nextcloud-server-5eba5798274823fe3147a8d671ca5e15b3eb7843.zip |
Merge branch 'master' into routing
Conflicts:
apps/files/js/fileactions.js
lib/base.php
lib/helper.php
lib/ocs.php
Diffstat (limited to 'apps')
158 files changed, 1675 insertions, 1249 deletions
diff --git a/apps/files/admin.php b/apps/files/admin.php index b49c0f61a0c..a8f2deffc92 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -33,7 +33,7 @@ $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize') $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size)); if($_POST) { - if(isset($_POST['maxUploadSize'])){ + if(isset($_POST['maxUploadSize'])) { if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) { $maxUploadFilesize = OCP\Util::humanFileSize($setMaxSize); } diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 2254526231e..568fe754c02 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -17,7 +17,7 @@ $data = array(); if($doBreadcrumb) { $breadcrumb = array(); $pathtohere = "/"; - foreach( explode( "/", $dir ) as $i ){ + foreach( explode( "/", $dir ) as $i ) { if( $i != "" ) { $pathtohere .= "$i/"; $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i ); @@ -32,7 +32,7 @@ if($doBreadcrumb) { // make filelist $files = array(); -foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ +foreach( OC_Files::getdirectorycontent( $dir ) as $i ) { $i["date"] = OCP\Util::formatDate($i["mtime"] ); $files[] = $i; } diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 813a6c67b5c..7709becc6a8 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -35,7 +35,7 @@ $dir = $_POST['dir']; $error=''; $totalSize=0; -foreach($files['size'] as $size){ +foreach($files['size'] as $size) { $totalSize+=$size; } if($totalSize>OC_Filesystem::free_space('/')) { @@ -46,7 +46,7 @@ if($totalSize>OC_Filesystem::free_space('/')) { $result=array(); if(strpos($dir, '..') === false) { $fileCount=count($files['name']); - for($i=0;$i<$fileCount;$i++){ + for($i=0;$i<$fileCount;$i++) { $target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]); if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { $meta=OC_FileCache_Cached::get($target); diff --git a/apps/files/appinfo/filesync.php b/apps/files/appinfo/filesync.php index 707ee2435c0..c1fe444cec7 100644 --- a/apps/files/appinfo/filesync.php +++ b/apps/files/appinfo/filesync.php @@ -23,14 +23,14 @@ // only need filesystem apps $RUNTIME_APPTYPES=array('filesystem','authentication'); OC_App::loadApps($RUNTIME_APPTYPES); -if(!OC_User::isLoggedIn()){ - if(!isset($_SERVER['PHP_AUTH_USER'])){ +if(!OC_User::isLoggedIn()) { + if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="ownCloud Server"'); header('HTTP/1.0 401 Unauthorized'); echo 'Valid credentials must be supplied'; exit(); } else { - if(!OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])){ + if(!OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) { exit(); } } diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php index 32ac89f0061..35008e345b9 100644 --- a/apps/files/appinfo/update.php +++ b/apps/files/appinfo/update.php @@ -5,7 +5,7 @@ $installedVersion=OCP\Config::getAppValue('files', 'installed_version'); if (version_compare($installedVersion, '1.1.4', '<')) { $query = OC_DB::prepare( "SELECT `propertyname`, `propertypath`, `userid` FROM `*PREFIX*properties`" ); $result = $query->execute(); - while( $row = $result->fetchRow()){ + while( $row = $result->fetchRow()) { $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyname` = ? WHERE `userid` = ? AND `propertypath` = ?' ); $query->execute( array( preg_replace("/^{.*}/", "", $row["propertyname"]),$row["userid"], $row["propertypath"] )); } diff --git a/apps/files/download.php b/apps/files/download.php index 44a328e25db..ff6aefbbe0f 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -29,7 +29,7 @@ OCP\User::checkLoggedIn(); $filename = $_GET["file"]; -if(!OC_Filesystem::file_exists($filename)){ +if(!OC_Filesystem::file_exists($filename)) { header("HTTP/1.0 404 Not Found"); $tmpl = new OCP\Template( '', '404', 'guest' ); $tmpl->assign('file',$filename); diff --git a/apps/files/index.php b/apps/files/index.php index ea5192629b7..9e788bffef5 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -31,7 +31,7 @@ OCP\Util::addscript( 'files', 'jquery.fileupload' ); OCP\Util::addscript( 'files', 'files' ); OCP\Util::addscript( 'files', 'filelist' ); OCP\Util::addscript( 'files', 'fileactions' ); -if(!isset($_SESSION['timezone'])){ +if(!isset($_SESSION['timezone'])) { OCP\Util::addscript( 'files', 'timezone' ); } OCP\App::setActiveNavigationEntry( 'files_index' ); @@ -44,9 +44,9 @@ if(!OC_Filesystem::is_dir($dir.'/')) { } $files = array(); -foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ +foreach( OC_Files::getdirectorycontent( $dir ) as $i ) { $i['date'] = OCP\Util::formatDate($i['mtime'] ); - if($i['type']=='file'){ + if($i['type']=='file') { $fileinfo=pathinfo($i['name']); $i['basename']=$fileinfo['filename']; if (!empty($fileinfo['extension'])) { @@ -56,7 +56,7 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ $i['extension']=''; } } - if($i['directory']=='/'){ + if($i['directory']=='/') { $i['directory']=''; } $files[] = $i; @@ -65,8 +65,8 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ // Make breadcrumb $breadcrumb = array(); $pathtohere = ''; -foreach( explode( '/', $dir ) as $i ){ - if( $i != '' ){ +foreach( explode( '/', $dir ) as $i ) { + if( $i != '' ) { $pathtohere .= '/'.str_replace('+','%20', urlencode($i)); $breadcrumb[] = array( 'dir' => $pathtohere, 'name' => $i ); } @@ -89,11 +89,23 @@ $freeSpace=OC_Filesystem::free_space('/'); $freeSpace=max($freeSpace,0); $maxUploadFilesize = min($maxUploadFilesize ,$freeSpace); +$permissions = OCP\Share::PERMISSION_READ; +if (OC_Filesystem::isUpdatable($dir.'/')) { + $permissions |= OCP\Share::PERMISSION_UPDATE; +} +if (OC_Filesystem::isDeletable($dir.'/')) { + $permissions |= OCP\Share::PERMISSION_DELETE; +} +if (OC_Filesystem::isSharable($dir.'/')) { + $permissions |= OCP\Share::PERMISSION_SHARE; +} + $tmpl = new OCP\Template( 'files', 'index', 'user' ); $tmpl->assign( 'fileList', $list->fetchPage(), false ); $tmpl->assign( 'breadcrumb', $breadcrumbNav->fetchPage(), false ); $tmpl->assign( 'dir', OC_Filesystem::normalizePath($dir)); $tmpl->assign( 'isCreatable', OC_Filesystem::isCreatable($dir.'/')); +$tmpl->assign('permissions', $permissions); $tmpl->assign( 'files', $files ); $tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize); $tmpl->assign( 'uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index 44c04bf0d71..37e6c91ebe5 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -1,9 +1,4 @@ -FileActions={ - PERMISSION_CREATE:4, - PERMISSION_READ:1, - PERMISSION_UPDATE:2, - PERMISSION_DELETE:8, - PERMISSION_SHARE:16, +var FileActions={ actions:{}, defaults:{}, icons:{}, @@ -25,20 +20,20 @@ FileActions={ get:function(mime,type,permissions){ var actions={}; if(FileActions.actions.all){ - actions=$.extend( actions, FileActions.actions.all ) + actions=$.extend( actions, FileActions.actions.all ); } if(mime){ if(FileActions.actions[mime]){ - actions=$.extend( actions, FileActions.actions[mime] ) + actions=$.extend( actions, FileActions.actions[mime] ); } var mimePart=mime.substr(0,mime.indexOf('/')); if(FileActions.actions[mimePart]){ - actions=$.extend( actions, FileActions.actions[mimePart] ) + actions=$.extend( actions, FileActions.actions[mimePart] ); } } if(type){//type is 'dir' or 'file' if(FileActions.actions[type]){ - actions=$.extend( actions, FileActions.actions[type] ) + actions=$.extend( actions, FileActions.actions[type] ); } } var filteredActions = {}; @@ -108,7 +103,12 @@ FileActions={ if(img.call){ img=img(file); } - var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />'; + // NOTE: Temporary fix to allow unsharing of files in root of Shared folder + if ($('#dir').val() == '/Shared') { + var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" style="display:none" />'; + } else { + var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />'; + } var element=$(html); if(img){ element.append($('<img src="'+img+'"/>')); @@ -148,7 +148,7 @@ FileActions={ getCurrentPermissions:function() { return FileActions.currentFile.parent().data('permissions'); } -} +}; $(document).ready(function(){ if($('#allowZipDownload').val() == 1){ @@ -156,12 +156,12 @@ $(document).ready(function(){ } else { var downloadScope = 'file'; } - FileActions.register(downloadScope,'Download', FileActions.PERMISSION_READ, function(){return OC.imagePath('core','actions/download')},function(filename){ + FileActions.register(downloadScope,'Download', OC.PERMISSION_READ, function(){return OC.imagePath('core','actions/download');},function(filename){ window.location=OC.filePath('files', 'ajax', 'download.php') + encodeURIComponent('?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val())); }); }); -FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete')},function(filename){ +FileActions.register('all','Delete', OC.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete');},function(filename){ if(Files.cancelUpload(filename)) { if(filename.substr){ filename=[filename]; @@ -179,11 +179,11 @@ FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){r $('.tipsy').remove(); }); -FileActions.register('all','Rename', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename')},function(filename){ +FileActions.register('all','Rename', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename');},function(filename){ FileList.rename(filename); }); -FileActions.register('dir','Open', FileActions.PERMISSION_READ, '', function(filename){ +FileActions.register('dir','Open', OC.PERMISSION_READ, '', function(filename){ window.location=OC.linkTo('files', 'index.php') + '?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); }); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 7c97f82488d..7be4be0e944 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1,11 +1,11 @@ -FileList={ +var FileList={ useUndo:true, update:function(fileListHtml) { $('#fileList').empty().html(fileListHtml); }, - addFile:function(name,size,lastModified,loading){ + addFile:function(name,size,lastModified,loading,hidden){ var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png'); - var html='<tr data-type="file" data-size="'+size+'">'; + var html='<tr data-type="file" data-size="'+size+'" data-permissions="'+$('#permissions').val()+'">'; if(name.indexOf('.')!=-1){ var basename=name.substr(0,name.lastIndexOf('.')); var extension=name.substr(name.lastIndexOf('.')); @@ -14,7 +14,7 @@ FileList={ var extension=false; } html+='<td class="filename" style="background-image:url('+img+')"><input type="checkbox" />'; - html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '<').replace(/>/, '>')+'/'+name+'"><span class="nametext">'+basename + html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '<').replace(/>/, '>')+'/'+name+'"><span class="nametext">'+basename; if(extension){ html+='<span class="extension">'+extension+'</span>'; } @@ -36,9 +36,12 @@ FileList={ }else{ $('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions); } + if (hidden) { + $('tr').filterAttr('data-file', name).hide(); + } }, - addDir:function(name,size,lastModified){ - html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name}); + addDir:function(name,size,lastModified,hidden){ + html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name, "data-permissions": $('#permissions').val()}); td = $('<td></td>').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' }); td.append('<input type="checkbox" />'); var link_elem = $('<a></a>').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') }); @@ -63,6 +66,9 @@ FileList={ FileList.insertElement(name,'dir',html); $('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions); $('tr').filterAttr('data-file',name).find('td.filename').droppable(folderDropOptions); + if (hidden) { + $('tr').filterAttr('data-file', name).hide(); + } }, refresh:function(data) { result = jQuery.parseJSON(data.responseText); @@ -82,7 +88,7 @@ FileList={ }, insertElement:function(name,type,element){ //find the correct spot to insert the file or folder - var fileElements=$('tr[data-file][data-type="'+type+'"]'); + var fileElements=$('tr[data-file][data-type="'+type+'"]:visible'); var pos; if(name.localeCompare($(fileElements[0]).attr('data-file'))<0){ pos=-1; @@ -137,11 +143,7 @@ FileList={ event.preventDefault(); var newname=input.val(); if (newname != name) { - if ($('tr').filterAttr('data-file', newname).length > 0) { - $('#notification').html(newname+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>'); - $('#notification').data('oldName', name); - $('#notification').data('newName', newname); - $('#notification').fadeIn(); + if (FileList.checkName(name, newname, false)) { newname = name; } else { $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) { @@ -151,7 +153,6 @@ FileList={ } }); } - } tr.attr('data-file', newname); var path = td.children('a.name').attr('href'); @@ -179,58 +180,77 @@ FileList={ form.trigger('submit'); }); }, - replace:function(oldName, newName) { + checkName:function(oldName, newName, isNewFile) { + if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) { + if (isNewFile) { + $('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>'); + } else { + $('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>'); + } + $('#notification').data('oldName', oldName); + $('#notification').data('newName', newName); + $('#notification').data('isNewFile', isNewFile); + $('#notification').fadeIn(); + return true; + } else { + return false; + } + }, + replace:function(oldName, newName, isNewFile) { // Finish any existing actions if (FileList.lastAction || !FileList.useUndo) { FileList.lastAction(); } - var tr = $('tr').filterAttr('data-file', oldName); - tr.hide(); + $('tr').filterAttr('data-file', oldName).hide(); + $('tr').filterAttr('data-file', newName).hide(); + var tr = $('tr').filterAttr('data-file', oldName).clone(); + tr.attr('data-replace', 'true'); + tr.attr('data-file', newName); + var td = tr.children('td.filename'); + td.children('a.name .span').text(newName); + var path = td.children('a.name').attr('href'); + td.children('a.name').attr('href', path.replace(encodeURIComponent(oldName), encodeURIComponent(newName))); + if (newName.indexOf('.') > 0) { + var basename = newName.substr(0, newName.lastIndexOf('.')); + } else { + var basename = newName; + } + td.children('a.name').empty(); + var span = $('<span class="nametext"></span>'); + span.text(basename); + td.children('a.name').append(span); + if (newName.indexOf('.') > 0) { + span.append($('<span class="extension">'+newName.substr(newName.lastIndexOf('.'))+'</span>')); + } + FileList.insertElement(newName, tr.data('type'), tr); + tr.show(); FileList.replaceCanceled = false; FileList.replaceOldName = oldName; FileList.replaceNewName = newName; + FileList.replaceIsNewFile = isNewFile; FileList.lastAction = function() { FileList.finishReplace(); }; - $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>'); + if (isNewFile) { + $('#notification').html(t('files', 'replaced')+' '+newName+'<span class="undo">'+t('files', 'undo')+'</span>'); + } else { + $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>'); + } $('#notification').fadeIn(); }, finishReplace:function() { if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) { - // Delete the file being replaced and rename the replacement - FileList.deleteCanceled = false; - FileList.deleteFiles = [FileList.replaceNewName]; - FileList.finishDelete(function() { - $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) { - if (result && result.status == 'success') { - var tr = $('tr').filterAttr('data-file', FileList.replaceOldName); - tr.attr('data-file', FileList.replaceNewName); - var td = tr.children('td.filename'); - td.children('a.name .span').text(FileList.replaceNewName); - var path = td.children('a.name').attr('href'); - td.children('a.name').attr('href', path.replace(encodeURIComponent(FileList.replaceOldName), encodeURIComponent(FileList.replaceNewName))); - if (FileList.replaceNewName.indexOf('.') > 0) { - var basename = FileList.replaceNewName.substr(0, FileList.replaceNewName.lastIndexOf('.')); - } else { - var basename = FileList.replaceNewName; - } - td.children('a.name').empty(); - var span = $('<span class="nametext"></span>'); - span.text(basename); - td.children('a.name').append(span); - if (FileList.replaceNewName.indexOf('.') > 0) { - span.append($('<span class="extension">'+FileList.replaceNewName.substr(FileList.replaceNewName.lastIndexOf('.'))+'</span>')); - } - tr.show(); - } else { - OC.dialogs.alert(result.data.message, 'Error moving file'); - } - FileList.replaceCanceled = true; - FileList.replaceOldName = null; - FileList.replaceNewName = null; - FileList.lastAction = null; - }}); - }, true); + $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) { + if (result && result.status == 'success') { + $('tr').filterAttr('data-replace', 'true').removeAttr('data-replace'); + } else { + OC.dialogs.alert(result.data.message, 'Error moving file'); + } + FileList.replaceCanceled = true; + FileList.replaceOldName = null; + FileList.replaceNewName = null; + FileList.lastAction = null; + }}); } }, do_delete:function(files){ @@ -243,7 +263,12 @@ FileList={ return; } FileList.prepareDeletion(files); - $('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>'); + // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder + if ($('#dir').val() == '/Shared') { + $('#notification').html(t('files', 'unshared')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>'); + } else { + $('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>'); + } $('#notification').fadeIn(); }, finishDelete:function(ready,sync){ @@ -255,7 +280,7 @@ FileList={ data: {dir:$('#dir').val(),files:fileNames}, complete: function(data){ boolOperationFinished(data, function(){ - $('#notification').fadeOut(); + $('#notification').fadeOut('400'); $.each(FileList.deleteFiles,function(index,file){ FileList.remove(file); }); @@ -299,21 +324,39 @@ $(document).ready(function(){ FileList.deleteCanceled=true; FileList.deleteFiles=null; } else if (FileList.replaceOldName && FileList.replaceNewName) { - $('tr').filterAttr('data-file', FileList.replaceOldName).show(); + if (FileList.replaceIsNewFile) { + // Delete the new uploaded file + FileList.deleteCanceled = false; + FileList.deleteFiles = [FileList.replaceOldName]; + FileList.finishDelete(null, true); + } else { + $('tr').filterAttr('data-file', FileList.replaceOldName).show(); + } + $('tr').filterAttr('data-replace', 'true').remove(); + $('tr').filterAttr('data-file', FileList.replaceNewName).show(); FileList.replaceCanceled = true; FileList.replaceOldName = null; FileList.replaceNewName = null; + FileList.replaceIsNewFile = null; } FileList.lastAction = null; - $('#notification').fadeOut(); + $('#notification').fadeOut('400'); }); $('#notification .replace').live('click', function() { $('#notification').fadeOut('400', function() { - FileList.replace($('#notification').data('oldName'), $('#notification').data('newName')); + FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'), $('#notification').data('isNewFile')); }); }); + $('#notification .suggest').live('click', function() { + $('tr').filterAttr('data-file', $('#notification').data('oldName')).show(); + $('#notification').fadeOut('400'); + }); $('#notification .cancel').live('click', function() { - $('#notification').fadeOut(); + if ($('#notification').data('isNewFile')) { + FileList.deleteCanceled = false; + FileList.deleteFiles = [$('#notification').data('oldName')]; + FileList.finishDelete(null, true); + } }); FileList.useUndo=('onbeforeunload' in window) $(window).bind('beforeunload', function (){ diff --git a/apps/files/js/files.js b/apps/files/js/files.js index b57e75c9004..101e2bad2e4 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -26,7 +26,7 @@ Files={ }); procesSelection(); } -} +}; $(document).ready(function() { $('#fileList tr').each(function(){ //little hack to set unescape filenames in attribute @@ -40,8 +40,16 @@ $(document).ready(function() { $('#file_action_panel').attr('activeAction', false); //drag/drop of files - $('#fileList tr[data-write="true"] td.filename').draggable(dragOptions); - $('#fileList tr[data-type="dir"][data-write="true"] td.filename').droppable(folderDropOptions); + $('#fileList tr td.filename').each(function(i,e){ + if ($(e).parent().data('permissions') & OC.PERMISSION_DELETE) { + $(e).draggable(dragOptions); + } + }); + $('#fileList tr[data-type="dir"] td.filename').each(function(i,e){ + if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE){ + $(e).droppable(folderDropOptions); + } + }); $('div.crumb:not(.last)').droppable(crumbDropOptions); $('ul#apps>li:first-child').data('dir',''); if($('div.crumb').length){ @@ -228,7 +236,14 @@ $(document).ready(function() { var size=t('files','Pending'); } if(files && !dirName){ - FileList.addFile(getUniqueName(files[i].name),size,date,true); + var uniqueName = getUniqueName(files[i].name); + if (uniqueName != files[i].name) { + FileList.checkName(uniqueName, files[i].name, true); + var hidden = true; + } else { + var hidden = false; + } + FileList.addFile(uniqueName,size,date,true,hidden); } else if(dirName) { var uploadtext = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName).find('.uploadtext') var currentUploads = parseInt(uploadtext.attr('currentUploads')); @@ -247,7 +262,14 @@ $(document).ready(function() { } }else{ var filename=this.value.split('\\').pop(); //ie prepends C:\fakepath\ in front of the filename - FileList.addFile(getUniqueName(filename),'Pending',date,true); + var uniqueName = getUniqueName(filename); + if (uniqueName != filename) { + FileList.checkName(uniqueName, filename, true); + var hidden = true; + } else { + var hidden = false; + } + FileList.addFile(uniqueName,'Pending',date,true,hidden); } if($.support.xhrFileUpload) { for(var i=0;i<files.length;i++){ @@ -386,6 +408,21 @@ $(document).ready(function() { }) }); + $.assocArraySize = function(obj) { + // http://stackoverflow.com/a/6700/11236 + var size = 0, key; + for (key in obj) { + if (obj.hasOwnProperty(key)) size++; + } + return size; + }; + + // warn user not to leave the page while upload is in progress + $(window).bind('beforeunload', function(e) { + if ($.assocArraySize(uploadingFiles) > 0) + return t('files','File upload is in progress. Leaving the page now will cancel the upload.'); + }); + //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used) if(navigator.userAgent.search(/konqueror/i)==-1){ $('.file_upload_start').attr('multiple','multiple') @@ -452,21 +489,27 @@ $(document).ready(function() { $(this).append(input); input.focus(); input.change(function(){ - var name=getUniqueName($(this).val()); - if(type != 'web' && name.indexOf('/')!=-1){ + if(type != 'web' && $(this).val().indexOf('/')!=-1){ $('#notification').text(t('files','Invalid name, \'/\' is not allowed.')); $('#notification').fadeIn(); return; } + var name = getUniqueName($(this).val()); + if (name != $(this).val()) { + FileList.checkName(name, $(this).val(), true); + var hidden = true; + } else { + var hidden = false; + } switch(type){ case 'file': $.post( OC.filePath('files','ajax','newfile.php'), - {dir:$('#dir').val(),filename:name,content:" \n"}, + {dir:$('#dir').val(),filename:name}, function(result){ if (result.status == 'success') { var date=new Date(); - FileList.addFile(name,0,date); + FileList.addFile(name,0,date,false,hidden); var tr=$('tr').filterAttr('data-file',name); tr.data('mime','text/plain'); getMimeIcon('text/plain',function(path){ @@ -485,7 +528,7 @@ $(document).ready(function() { function(result){ if (result.status == 'success') { var date=new Date(); - FileList.addDir(name,0,date); + FileList.addDir(name,0,date,hidden); } else { OC.dialogs.alert(result.data.message, 'Error'); } @@ -516,7 +559,7 @@ $(document).ready(function() { eventSource.listen('success',function(mime){ $('#uploadprogressbar').fadeOut(); var date=new Date(); - FileList.addFile(localName,0,date); + FileList.addFile(localName,0,date,false,hidden); var tr=$('tr').filterAttr('data-file',localName); tr.data('mime',mime); getMimeIcon(mime,function(path){ diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index 81bbfe03a0c..336f59ae86d 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -10,16 +10,18 @@ "Delete" => "Suprimeix", "already exists" => "ja existeix", "replace" => "substitueix", +"suggest name" => "sugereix un nom", "cancel" => "cancel·la", "replaced" => "substituït", -"with" => "per", "undo" => "desfés", +"with" => "per", "deleted" => "esborrat", "generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.", "Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes", "Upload Error" => "Error en la pujada", "Pending" => "Pendents", "Upload cancelled." => "La pujada s'ha cancel·lat.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", "Invalid name, '/' is not allowed." => "El nom no és vàlid, no es permet '/'.", "Size" => "Mida", "Modified" => "Modificat", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Activa la baixada ZIP", "0 is unlimited" => "0 és sense límit", "Maximum input size for ZIP files" => "Mida màxima d'entrada per fitxers ZIP", +"Save" => "Desa", "New" => "Nou", "Text file" => "Fitxer de text", "Folder" => "Carpeta", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 4dc4b8b0cb1..f29df70ee68 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -1,51 +1,54 @@ <?php $TRANSLATIONS = array( "There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně", -"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Odeslaný soubor přesáhl velikostí parametr upload_max_filesize v php.ini", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Odeslaný soubor přesáhl velikostí parametr MAX_FILE_SIZE specifikovaný v HTML formuláři", +"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Odeslaný soubor přesáhl svou velikostí parametr upload_max_filesize v php.ini", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný v formuláři HTML", "The uploaded file was only partially uploaded" => "Soubor byl odeslán pouze částečně", -"No file was uploaded" => "Soubor nebyl odeslán", -"Missing a temporary folder" => "Chybí adresář pro sočasné soubory", -"Failed to write to disk" => "Zápis na disk se nezdařil", +"No file was uploaded" => "Žádný soubor nebyl odeslán", +"Missing a temporary folder" => "Chybí adresář pro dočasné soubory", +"Failed to write to disk" => "Zápis na disk selhal", "Files" => "Soubory", -"Delete" => "Vymazat", +"Delete" => "Smazat", "already exists" => "již existuje", -"replace" => "zaměnit", -"cancel" => "storno", -"replaced" => "zaměněno", -"with" => "s", +"replace" => "nahradit", +"suggest name" => "navrhnout název", +"cancel" => "zrušit", +"replaced" => "nahrazeno", "undo" => "zpět", +"with" => "s", "deleted" => "smazáno", -"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to chvíli trvat", -"Unable to upload your file as it is a directory or has 0 bytes" => "Nemohu nahrát váš soubor neboť to je adresář a nebo má nulovou délku.", -"Upload Error" => "Chyba při nahrávání", -"Pending" => "Očekává se", -"Upload cancelled." => "Nahrávání zrušeno", -"Invalid name, '/' is not allowed." => "Špatné jméno, znak '/' není povolen", +"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to nějakou dobu trvat.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů", +"Upload Error" => "Chyba odesílání", +"Pending" => "Čekající", +"Upload cancelled." => "Odesílání zrušeno.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání.", +"Invalid name, '/' is not allowed." => "Neplatný název, znak '/' není povolen", "Size" => "Velikost", "Modified" => "Změněno", -"folder" => "adresář", -"folders" => "adresáře", +"folder" => "složka", +"folders" => "složky", "file" => "soubor", "files" => "soubory", -"File handling" => "Nastavení chování k souborům", -"Maximum upload size" => "Maximální velikost ukládaných souborů", -"max. possible: " => "největší možná:", -"Needed for multi-file and folder downloads." => "Potřeba pro vícesoborvé stahování a stahování adresářů", +"File handling" => "Zacházení se soubory", +"Maximum upload size" => "Maximální velikost pro odesílání", +"max. possible: " => "největší možná: ", +"Needed for multi-file and folder downloads." => "Potřebné pro více-souborové stahování a stahování složek.", "Enable ZIP-download" => "Povolit ZIP-stahování", "0 is unlimited" => "0 znamená bez omezení", "Maximum input size for ZIP files" => "Maximální velikost vstupu pro ZIP soubory", +"Save" => "Uložit", "New" => "Nový", "Text file" => "Textový soubor", -"Folder" => "Adresář", +"Folder" => "Složka", "From url" => "Z url", -"Upload" => "Uložit", -"Cancel upload" => "Zrušit upload", -"Nothing in here. Upload something!" => "Žádný obsah. Uložte si něco!", +"Upload" => "Odeslat", +"Cancel upload" => "Zrušit odesílání", +"Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Name" => "Název", "Share" => "Sdílet", "Download" => "Stáhnout", -"Upload too large" => "Příliš velký soubor", -"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte uložit, překračují maximální velikosti uploadu na tomto serveru.", +"Upload too large" => "Odeslaný soubor je příliš velký", +"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.", "Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.", "Current scanning" => "Aktuální prohledávání" ); diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 56af0fa61d7..020f6142ec6 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -12,14 +12,15 @@ "replace" => "erstat", "cancel" => "fortryd", "replaced" => "erstattet", -"with" => "med", "undo" => "fortryd", +"with" => "med", "deleted" => "Slettet", "generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.", "Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom", "Upload Error" => "Fejl ved upload", "Pending" => "Afventer", "Upload cancelled." => "Upload afbrudt.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", "Invalid name, '/' is not allowed." => "Ugyldigt navn, '/' er ikke tilladt.", "Size" => "Størrelse", "Modified" => "Ændret", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 5da3a997213..3db6af8477d 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -1,7 +1,7 @@ <?php $TRANSLATIONS = array( "There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Die Größe der hochzuladenden Datei überschreitet die upload_max_filesize-Richtlinie in php.ini", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde", "The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.", "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Temporärer Ordner fehlt.", @@ -10,17 +10,19 @@ "Delete" => "Löschen", "already exists" => "ist bereits vorhanden", "replace" => "ersetzen", +"suggest name" => "Name vorschlagen", "cancel" => "abbrechen", "replaced" => "ersetzt", -"with" => "mit", "undo" => "rückgängig machen", +"with" => "mit", "deleted" => "gelöscht", "generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.", "Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie ein Verzeichnis ist oder 0 Bytes hat.", "Upload Error" => "Fehler beim Hochladen", "Pending" => "Ausstehend", "Upload cancelled." => "Hochladen abgebrochen.", -"Invalid name, '/' is not allowed." => "Ungültiger Name, \"/\" ist nicht erlaubt.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", +"Invalid name, '/' is not allowed." => "Ungültiger Name: \"/\" ist nicht erlaubt.", "Size" => "Größe", "Modified" => "Bearbeitet", "folder" => "Ordner", @@ -30,10 +32,11 @@ "File handling" => "Dateibehandlung", "Maximum upload size" => "Maximale Upload-Größe", "max. possible: " => "maximal möglich:", -"Needed for multi-file and folder downloads." => "Für Mehrfachdateien- und Ordnerdownloads benötigt:", +"Needed for multi-file and folder downloads." => "Für Mehrfachdatei- und Ordnerdownloads benötigt:", "Enable ZIP-download" => "ZIP-Download aktivieren", "0 is unlimited" => "0 bedeutet unbegrenzt", -"Maximum input size for ZIP files" => "Maximale Größe für ZIP Dateien", +"Maximum input size for ZIP files" => "Maximale Größe für ZIP-Dateien", +"Save" => "Speichern", "New" => "Neu", "Text file" => "Textdatei", "Folder" => "Ordner", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 3ab4b120949..9f311c6b28e 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -12,8 +12,8 @@ "replace" => "αντικατέστησε", "cancel" => "ακύρωση", "replaced" => "αντικαταστάθηκε", -"with" => "με", "undo" => "αναίρεση", +"with" => "με", "deleted" => "διαγράφηκε", "generating ZIP-file, it may take some time." => "παραγωγή αρχείου ZIP, ίσως διαρκέσει αρκετά.", "Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην μεταφόρτωση του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index acaf06e830c..bf17b97244c 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -12,8 +12,8 @@ "replace" => "anstataŭigi", "cancel" => "nuligi", "replaced" => "anstataŭigita", -"with" => "kun", "undo" => "malfari", +"with" => "kun", "deleted" => "forigita", "generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo", "Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 6cd51d60e27..0ba3c56aa1f 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -10,16 +10,18 @@ "Delete" => "Eliminado", "already exists" => "ya existe", "replace" => "reemplazar", +"suggest name" => "sugerir nombre", "cancel" => "cancelar", "replaced" => "reemplazado", -"with" => "con", "undo" => "deshacer", +"with" => "con", "deleted" => "borrado", "generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.", "Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes", "Upload Error" => "Error al subir el archivo", "Pending" => "Pendiente", "Upload cancelled." => "Subida cancelada.", +"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida.", "Invalid name, '/' is not allowed." => "Nombre no válido, '/' no está permitido.", "Size" => "Tamaño", "Modified" => "Modificado", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Habilitar descarga en ZIP", "0 is unlimited" => "0 es ilimitado", "Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada", +"Save" => "Guardar", "New" => "Nuevo", "Text file" => "Archivo de texto", "Folder" => "Carpeta", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 956c5cc9115..0763745788b 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -12,8 +12,8 @@ "replace" => "asenda", "cancel" => "loobu", "replaced" => "asendatud", -"with" => "millega", "undo" => "tagasi", +"with" => "millega", "deleted" => "kustutatud", "generating ZIP-file, it may take some time." => "ZIP-faili loomine, see võib veidi aega võtta.", "Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index d9c2689d1cd..3897a5580f3 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -12,8 +12,8 @@ "replace" => "ordeztu", "cancel" => "ezeztatu", "replaced" => "ordeztua", -"with" => "honekin", "undo" => "desegin", +"with" => "honekin", "deleted" => "ezabatuta", "generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake", "Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu", diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php index 4dac88fc542..e6ddd50f917 100644 --- a/apps/files/l10n/fa.php +++ b/apps/files/l10n/fa.php @@ -12,8 +12,8 @@ "replace" => "جایگزین", "cancel" => "لغو", "replaced" => "جایگزینشده", -"with" => "همراه", "undo" => "بازگشت", +"with" => "همراه", "deleted" => "حذف شده", "generating ZIP-file, it may take some time." => "در حال ساخت فایل فشرده ممکن است زمان زیادی به طول بیانجامد", "Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 902ea859a31..757d0594d30 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -10,16 +10,18 @@ "Delete" => "Poista", "already exists" => "on jo olemassa", "replace" => "korvaa", +"suggest name" => "ehdota nimeä", "cancel" => "peru", "replaced" => "korvattu", -"with" => "käyttäen", "undo" => "kumoa", +"with" => "käyttäen", "deleted" => "poistettu", "generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.", "Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio", "Upload Error" => "Lähetysvirhe.", "Pending" => "Odottaa", "Upload cancelled." => "Lähetys peruttu.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", "Invalid name, '/' is not allowed." => "Virheellinen nimi, merkki '/' ei ole sallittu.", "Size" => "Koko", "Modified" => "Muutettu", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Ota ZIP-paketin lataaminen käytöön", "0 is unlimited" => "0 on rajoittamaton", "Maximum input size for ZIP files" => "ZIP-tiedostojen enimmäiskoko", +"Save" => "Tallenna", "New" => "Uusi", "Text file" => "Tekstitiedosto", "Folder" => "Kansio", @@ -46,5 +49,6 @@ "Download" => "Lataa", "Upload too large" => "Lähetettävä tiedosto on liian suuri", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.", -"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki." +"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.", +"Current scanning" => "Tämänhetkinen tutkinta" ); diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 6eb4341bd6e..0b7d226de74 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -12,14 +12,15 @@ "replace" => "remplacer", "cancel" => "annuler", "replaced" => "remplacé", -"with" => "avec", "undo" => "annuler", +"with" => "avec", "deleted" => "supprimé", -"generating ZIP-file, it may take some time." => "Générer un fichier ZIP, cela peut prendre du temps", +"generating ZIP-file, it may take some time." => "Fichier ZIP en cours d'assemblage ; cela peut prendre du temps.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.", "Upload Error" => "Erreur de chargement", "Pending" => "En cours", -"Upload cancelled." => "Chargement annulé", +"Upload cancelled." => "Chargement annulé.", +"File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", "Invalid name, '/' is not allowed." => "Nom invalide, '/' n'est pas autorisé.", "Size" => "Taille", "Modified" => "Modifié", @@ -34,18 +35,19 @@ "Enable ZIP-download" => "Activer le téléchargement ZIP", "0 is unlimited" => "0 est illimité", "Maximum input size for ZIP files" => "Taille maximale pour les fichiers ZIP", +"Save" => "Sauvegarder", "New" => "Nouveau", "Text file" => "Fichier texte", "Folder" => "Dossier", "From url" => "Depuis URL", "Upload" => "Envoyer", -"Cancel upload" => "Annuler envoi", +"Cancel upload" => "Annuler l'envoi", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Name" => "Nom", "Share" => "Partager", "Download" => "Téléchargement", "Upload too large" => "Fichier trop volumineux", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.", -"Files are being scanned, please wait." => "Les fichiers sont analysés, patientez svp.", +"Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.", "Current scanning" => "Analyse en cours" ); diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 3a36a23f0ca..67293de5cb7 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -12,8 +12,8 @@ "replace" => "substituír", "cancel" => "cancelar", "replaced" => "substituído", -"with" => "con", "undo" => "desfacer", +"with" => "con", "deleted" => "eliminado", "generating ZIP-file, it may take some time." => "xerando ficheiro ZIP, pode levar un anaco.", "Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes", diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php index cb8eb4033cf..b05b7c568b4 100644 --- a/apps/files/l10n/hr.php +++ b/apps/files/l10n/hr.php @@ -12,8 +12,8 @@ "replace" => "zamjeni", "cancel" => "odustani", "replaced" => "zamjenjeno", -"with" => "sa", "undo" => "vrati", +"with" => "sa", "deleted" => "izbrisano", "generating ZIP-file, it may take some time." => "generiranje ZIP datoteke, ovo može potrajati.", "Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 8d52765e93e..95b3c57ce11 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -12,8 +12,8 @@ "replace" => "cserél", "cancel" => "mégse", "replaced" => "kicserélve", -"with" => "-val/-vel", "undo" => "visszavon", +"with" => "-val/-vel", "deleted" => "törölve", "generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.", "Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű", diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index 399056bf278..351d0641388 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -12,8 +12,8 @@ "replace" => "mengganti", "cancel" => "batalkan", "replaced" => "diganti", -"with" => "dengan", "undo" => "batal dikerjakan", +"with" => "dengan", "deleted" => "dihapus", "generating ZIP-file, it may take some time." => "membuat berkas ZIP, ini mungkin memakan waktu.", "Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 6fda30a8f35..0df60832c5b 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -10,16 +10,18 @@ "Delete" => "Elimina", "already exists" => "esiste già", "replace" => "sostituisci", +"suggest name" => "suggerisci nome", "cancel" => "annulla", "replaced" => "sostituito", -"with" => "con", "undo" => "annulla", +"with" => "con", "deleted" => "eliminati", "generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte", "Upload Error" => "Errore di invio", "Pending" => "In corso", "Upload cancelled." => "Invio annullato", +"File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", "Invalid name, '/' is not allowed." => "Nome non valido", "Size" => "Dimensione", "Modified" => "Modificato", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Abilita scaricamento ZIP", "0 is unlimited" => "0 è illimitato", "Maximum input size for ZIP files" => "Dimensione massima per i file ZIP", +"Save" => "Salva", "New" => "Nuovo", "Text file" => "File di testo", "Folder" => "Cartella", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 8c19e455012..2de716fec8a 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -12,14 +12,15 @@ "replace" => "置き換え", "cancel" => "キャンセル", "replaced" => "置換:", -"with" => "←", "undo" => "元に戻す", +"with" => "←", "deleted" => "削除", "generating ZIP-file, it may take some time." => "ZIPファイルを生成中です、しばらくお待ちください。", "Unable to upload your file as it is a directory or has 0 bytes" => "アップロード使用としているファイルがディレクトリ、もしくはサイズが0バイトのため、アップロードできません。", "Upload Error" => "アップロードエラー", "Pending" => "保留", "Upload cancelled." => "アップロードはキャンセルされました。", +"File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", "Invalid name, '/' is not allowed." => "無効な名前、'/' は使用できません。", "Size" => "サイズ", "Modified" => "更新日時", @@ -34,6 +35,7 @@ "Enable ZIP-download" => "ZIP形式のダウンロードを有効にする", "0 is unlimited" => "0を指定した場合は無制限", "Maximum input size for ZIP files" => "ZIPファイルへの最大入力サイズ", +"Save" => "保存", "New" => "新規", "Text file" => "テキストファイル", "Folder" => "フォルダ", diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index 218dd0ea2d7..121be7d1abb 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -8,7 +8,15 @@ "Failed to write to disk" => "디스크에 쓰지 못했습니다", "Files" => "파일", "Delete" => "삭제", +"already exists" => "이미 존재 합니다", +"replace" => "대체", +"cancel" => "취소", +"replaced" => "대체됨", +"undo" => "복구", +"with" => "와", +"deleted" => "삭제", "generating ZIP-file, it may take some time." => "ZIP파일 생성에 시간이 걸릴 수 있습니다.", +"Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉토리이거나 0 바이트이기 때문에 업로드 할 수 없습니다.", "Upload Error" => "업로드 에러", "Pending" => "보류 중", "Upload cancelled." => "업로드 취소.", diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php index f7a10fbc5cd..92acea1d117 100644 --- a/apps/files/l10n/lb.php +++ b/apps/files/l10n/lb.php @@ -8,8 +8,25 @@ "Failed to write to disk" => "Konnt net op den Disk schreiwen", "Files" => "Dateien", "Delete" => "Läschen", +"already exists" => "existéiert schonn", +"replace" => "ersetzen", +"cancel" => "ofbriechen", +"replaced" => "ersat", +"undo" => "réckgängeg man", +"with" => "mat", +"deleted" => "geläscht", +"generating ZIP-file, it may take some time." => "Et gëtt eng ZIP-File generéiert, dëst ka bëssen daueren.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass.", +"Upload Error" => "Fehler beim eroplueden", +"Upload cancelled." => "Upload ofgebrach.", +"File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.", +"Invalid name, '/' is not allowed." => "Ongültege Numm, '/' net erlaabt.", "Size" => "Gréisst", "Modified" => "Geännert", +"folder" => "Dossier", +"folders" => "Dossieren", +"file" => "Datei", +"files" => "Dateien", "File handling" => "Fichier handling", "Maximum upload size" => "Maximum Upload Gréisst ", "max. possible: " => "max. méiglech:", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index 54bd79f5526..eedab2546c5 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -1,6 +1,17 @@ <?php $TRANSLATIONS = array( +"No file was uploaded" => "Neviens fails netika augšuplādēts", +"Failed to write to disk" => "Nav iespējams saglabāt", "Files" => "Faili", "Delete" => "Izdzēst", +"already exists" => "tāds fails jau eksistē", +"replace" => "aizvietot", +"cancel" => "atcelt", +"replaced" => "aizvietots", +"undo" => "vienu soli atpakaļ", +"with" => "ar", +"deleted" => "izdzests", +"generating ZIP-file, it may take some time." => "lai uzģenerētu ZIP failu, kāds brīdis ir jāpagaida", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nav iespējams augšuplādēt jūsu failu, jo tāds jau eksistē vai arī failam nav izmēra (0 baiti)", "Upload Error" => "Augšuplādēšanas laikā radās kļūda", "Pending" => "Gaida savu kārtu", "Upload cancelled." => "Augšuplāde ir atcelta", @@ -12,9 +23,20 @@ "file" => "fails", "files" => "faili", "Maximum upload size" => "Maksimālais failu augšuplādes apjoms", +"max. possible: " => "maksīmālais iespējamais:", +"Enable ZIP-download" => "Iespējot ZIP lejuplādi", +"0 is unlimited" => "0 ir neierobežots", +"New" => "Jauns", +"Text file" => "Teksta fails", +"Folder" => "Mape", +"From url" => "No URL saites", "Upload" => "Augšuplādet", +"Cancel upload" => "Atcelt augšuplādi", "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšuplādēt", "Name" => "Nosaukums", +"Share" => "Līdzdalīt", "Download" => "Lejuplādēt", -"Upload too large" => "Fails ir par lielu lai to augšuplādetu" +"Upload too large" => "Fails ir par lielu lai to augšuplādetu", +"Files are being scanned, please wait." => "Faili šobrīd tiek caurskatīti, nedaudz jāpagaida.", +"Current scanning" => "Šobrīd tiek pārbaudīti" ); diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index 92d0c23bfd2..4a747af2f3a 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -12,8 +12,8 @@ "replace" => "erstatt", "cancel" => "avbryt", "replaced" => "erstattet", -"with" => "med", "undo" => "angre", +"with" => "med", "deleted" => "slettet", "generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid", "Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index fb7ea34b9b8..7acb15054c5 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -12,14 +12,15 @@ "replace" => "vervang", "cancel" => "annuleren", "replaced" => "vervangen", -"with" => "door", "undo" => "ongedaan maken", +"with" => "door", "deleted" => "verwijderd", "generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.", "Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes", "Upload Error" => "Upload Fout", "Pending" => "Wachten", "Upload cancelled." => "Uploaden geannuleerd.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Bestands upload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", "Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.", "Size" => "Bestandsgrootte", "Modified" => "Laatst aangepast", @@ -34,6 +35,7 @@ "Enable ZIP-download" => "Zet ZIP-download aan", "0 is unlimited" => "0 is ongelimiteerd", "Maximum input size for ZIP files" => "Maximale grootte voor ZIP bestanden", +"Save" => "Opslaan", "New" => "Nieuw", "Text file" => "Tekstbestand", "Folder" => "Map", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index eb791330bfd..d3814333aca 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -10,16 +10,18 @@ "Delete" => "Usuwa element", "already exists" => "Już istnieje", "replace" => "zastap", +"suggest name" => "zasugeruj nazwę", "cancel" => "anuluj", "replaced" => "zastąpione", -"with" => "z", "undo" => "wróć", +"with" => "z", "deleted" => "skasuj", "generating ZIP-file, it may take some time." => "Generowanie pliku ZIP, może potrwać pewien czas.", "Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów", "Upload Error" => "Błąd wczytywania", "Pending" => "Oczekujące", "Upload cancelled." => "Wczytywanie anulowane.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane.", "Invalid name, '/' is not allowed." => "Nieprawidłowa nazwa '/' jest niedozwolone.", "Size" => "Rozmiar", "Modified" => "Czas modyfikacji", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Włącz pobieranie ZIP-paczki", "0 is unlimited" => "0 jest nielimitowane", "Maximum input size for ZIP files" => "Maksymalna wielkość pliku wejściowego ZIP ", +"Save" => "Zapisz", "New" => "Nowy", "Text file" => "Plik tekstowy", "Folder" => "Katalog", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 09c4f2b0267..e9fe7747c13 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -12,8 +12,8 @@ "replace" => "substituir", "cancel" => "cancelar", "replaced" => "substituido ", -"with" => "com", "undo" => "desfazer", +"with" => "com", "deleted" => "deletado", "generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index e413d7cbe74..998c494a695 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -12,8 +12,8 @@ "replace" => "substituir", "cancel" => "cancelar", "replaced" => "substituido", -"with" => "com", "undo" => "desfazer", +"with" => "com", "deleted" => "apagado", "generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.", "Unable to upload your file as it is a directory or has 0 bytes" => "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 71b30d22df4..6a76c254047 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -12,14 +12,15 @@ "replace" => "заменить", "cancel" => "отмена", "replaced" => "заменён", -"with" => "с", "undo" => "отмена", +"with" => "с", "deleted" => "удален", "generating ZIP-file, it may take some time." => "создание ZIP-файла, это может занять некоторое время.", "Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог", "Upload Error" => "Ошибка загрузки", "Pending" => "Ожидание", "Upload cancelled." => "Загрузка отменена.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.", "Invalid name, '/' is not allowed." => "Неверное имя, '/' не допускается.", "Size" => "Размер", "Modified" => "Изменён", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index f6322b2507d..0d56a0c6476 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -10,16 +10,18 @@ "Delete" => "Izbriši", "already exists" => "že obstaja", "replace" => "nadomesti", +"suggest name" => "predlagaj ime", "cancel" => "ekliči", "replaced" => "nadomeščen", -"with" => "z", "undo" => "razveljavi", +"with" => "z", "deleted" => "izbrisano", "generating ZIP-file, it may take some time." => "Ustvarjam ZIP datoteko. To lahko traja nekaj časa.", "Unable to upload your file as it is a directory or has 0 bytes" => "Nalaganje ni mogoče, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov.", "Upload Error" => "Napaka pri nalaganju", "Pending" => "Na čakanju", "Upload cancelled." => "Nalaganje je bilo preklicano.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Nalaganje datoteke je v teku. Če zapustite to stran zdaj, boste nalaganje preklicali.", "Invalid name, '/' is not allowed." => "Neveljavno ime. Znak '/' ni dovoljen.", "Size" => "Velikost", "Modified" => "Spremenjeno", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Omogoči ZIP-prejemanje", "0 is unlimited" => "0 je neskončno", "Maximum input size for ZIP files" => "Največja vhodna velikost za ZIP datoteke", +"Save" => "Shrani", "New" => "Nova", "Text file" => "Besedilna datoteka", "Folder" => "Mapa", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index a62b7522511..137222b4178 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -10,16 +10,18 @@ "Delete" => "Radera", "already exists" => "finns redan", "replace" => "ersätt", +"suggest name" => "föreslå namn", "cancel" => "avbryt", "replaced" => "ersatt", -"with" => "med", "undo" => "ångra", +"with" => "med", "deleted" => "raderad", "generating ZIP-file, it may take some time." => "genererar ZIP-fil, det kan ta lite tid.", "Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.", "Upload Error" => "Uppladdningsfel", "Pending" => "Väntar", "Upload cancelled." => "Uppladdning avbruten.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", "Invalid name, '/' is not allowed." => "Ogiltigt namn, '/' är inte tillåten.", "Size" => "Storlek", "Modified" => "Ändrad", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "Aktivera ZIP-nerladdning", "0 is unlimited" => "0 är oändligt", "Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer", +"Save" => "Spara", "New" => "Ny", "Text file" => "Textfil", "Folder" => "Mapp", diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index eed9c36e132..5809ac1f098 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -10,16 +10,18 @@ "Delete" => "ลบ", "already exists" => "มีอยู่แล้ว", "replace" => "แทนที่", +"suggest name" => "แนะนำชื่อ", "cancel" => "ยกเลิก", "replaced" => "แทนที่แล้ว", -"with" => "กับ", "undo" => "เลิกทำ", +"with" => "กับ", "deleted" => "ลบแล้ว", "generating ZIP-file, it may take some time." => "กำลังสร้างไฟล์บีบอัด ZIP อาจใช้เวลาสักครู่", "Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์", "Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด", "Pending" => "อยู่ระหว่างดำเนินการ", "Upload cancelled." => "การอัพโหลดถูกยกเลิก", +"File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", "Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง '/' ไม่อนุญาตให้ใช้งาน", "Size" => "ขนาด", "Modified" => "ปรับปรุงล่าสุด", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "อนุญาตให้ดาวน์โหลดเป็นไฟล์ ZIP ได้", "0 is unlimited" => "0 หมายถึงไม่จำกัด", "Maximum input size for ZIP files" => "ขนาดไฟล์ ZIP สูงสุด", +"Save" => "บันทึก", "New" => "อัพโหลดไฟล์ใหม่", "Text file" => "ไฟล์ข้อความ", "Folder" => "แฟ้มเอกสาร", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index 224322b24e0..72e0e1427d3 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -8,13 +8,19 @@ "Failed to write to disk" => "Diske yazılamadı", "Files" => "Dosyalar", "Delete" => "Sil", +"already exists" => "zaten mevcut", +"replace" => "değiştir", +"cancel" => "iptal", +"replaced" => "değiştirildi", "undo" => "geri al", +"with" => "ile", "deleted" => "silindi", "generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.", "Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi", "Upload Error" => "Yükleme hatası", "Pending" => "Bekliyor", "Upload cancelled." => "Yükleme iptal edildi.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.", "Invalid name, '/' is not allowed." => "Geçersiz isim, '/' işaretine izin verilmiyor.", "Size" => "Boyut", "Modified" => "Değiştirilme", diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php index 6703e6f9088..42063712eac 100644 --- a/apps/files/l10n/zh_CN.GB2312.php +++ b/apps/files/l10n/zh_CN.GB2312.php @@ -12,8 +12,8 @@ "replace" => "替换", "cancel" => "取消", "replaced" => "替换过了", -"with" => "随着", "undo" => "撤销", +"with" => "随着", "deleted" => "删除", "generating ZIP-file, it may take some time." => "正在生成ZIP文件,这可能需要点时间", "Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index dc783018848..3fdb5b6af3e 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -10,16 +10,18 @@ "Delete" => "删除", "already exists" => "已经存在", "replace" => "替换", +"suggest name" => "建议名称", "cancel" => "取消", "replaced" => "已经替换", -"with" => "随着", "undo" => "撤销", +"with" => "随着", "deleted" => "已经删除", "generating ZIP-file, it may take some time." => "正在生成 ZIP 文件,可能需要一些时间", "Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大小为 0 字节", "Upload Error" => "上传错误", "Pending" => "操作等待中", "Upload cancelled." => "上传已取消", +"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。", "Invalid name, '/' is not allowed." => "非法的名称,不允许使用‘/’。", "Size" => "大小", "Modified" => "修改日期", @@ -34,6 +36,7 @@ "Enable ZIP-download" => "启用 ZIP 下载", "0 is unlimited" => "0 为无限制", "Maximum input size for ZIP files" => "ZIP 文件的最大输入大小", +"Save" => "保存", "New" => "新建", "Text file" => "文本文件", "Folder" => "文件夹", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index bc8aa4ff892..9652fb5a073 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -8,6 +8,15 @@ "Failed to write to disk" => "寫入硬碟失敗", "Files" => "檔案", "Delete" => "刪除", +"already exists" => "已經存在", +"replace" => "取代", +"cancel" => "取消", +"generating ZIP-file, it may take some time." => "產生壓縮檔, 它可能需要一段時間.", +"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0", +"Upload Error" => "上傳發生錯誤", +"Upload cancelled." => "上傳取消", +"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中. 離開此頁面將會取消上傳.", +"Invalid name, '/' is not allowed." => "無效的名稱, '/'是不被允許的", "Size" => "大小", "Modified" => "修改", "File handling" => "檔案處理", diff --git a/apps/files/settings.php b/apps/files/settings.php index b02c3738c6e..52ec9fd0fe3 100644 --- a/apps/files/settings.php +++ b/apps/files/settings.php @@ -36,7 +36,7 @@ OCP\Util::addscript( "files", "files" ); $dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; $files = array(); -foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ +foreach( OC_Files::getdirectorycontent( $dir ) as $i ) { $i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] ); $files[] = $i; } @@ -44,8 +44,8 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){ // Make breadcrumb $breadcrumb = array(); $pathtohere = "/"; -foreach( explode( "/", $dir ) as $i ){ - if( $i != "" ){ +foreach( explode( "/", $dir ) as $i ) { + if( $i != "" ) { $pathtohere .= "$i/"; $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i ); } diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index 3ad0629750b..c4fe4c86569 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -11,6 +11,6 @@ <input name="maxZipInputSize" id="maxZipInputSize" style="width:180px;" value='<?php echo $_['maxZipInputSize'] ?>' title="<?php echo $l->t( '0 is unlimited' ); ?>"<?php if (!$_['allowZipDownload']) echo ' disabled="disabled"'; ?> /> <label for="maxZipInputSize"><?php echo $l->t( 'Maximum input size for ZIP files' ); ?> </label><br /> - <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="Save"/> + <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="<?php echo $l->t( 'Save' ); ?>"/> </fieldset> </form> diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index bcf683ae4a8..911a312fb9a 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -32,6 +32,7 @@ <?php else:?> <input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir"> <?php endif;?> + <input type="hidden" name="permissions" value="<?php echo $_['permissions']; ?>" id="permissions"> </div> <div id='notification'></div> @@ -53,7 +54,17 @@ </span> </th> <th id="headerSize"><?php echo $l->t( 'Size' ); ?></th> - <th id="headerDate"><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span></th> + <th id="headerDate"> + <span id="modified"><?php echo $l->t( 'Modified' ); ?></span> + <?php if ($_['permissions'] & OCP\Share::PERMISSION_DELETE): ?> +<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder --> + <?php if ($_['dir'] == '/Shared'): ?> + <span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Unshare')?> <img class="svg" alt="<?php echo $l->t('Unshare')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span> + <?php else: ?> + <span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span> + <?php endif; ?> + <?php endif; ?> + </th> </tr> </thead> <tbody id="fileList"> diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php index 679d0b95edc..bb130a366be 100644 --- a/apps/files_encryption/appinfo/app.php +++ b/apps/files_encryption/appinfo/app.php @@ -10,7 +10,7 @@ OCP\Util::connectHook('OC_User','post_login','OC_Crypt','loginListener'); stream_wrapper_register('crypt','OC_CryptStream'); -if(!isset($_SESSION['enckey']) and OCP\User::isLoggedIn()){//force the user to re-loggin if the encryption key isn't unlocked (happens when a user is logged in before the encryption app is enabled) +if(!isset($_SESSION['enckey']) and OCP\User::isLoggedIn()) {//force the user to re-loggin if the encryption key isn't unlocked (happens when a user is logged in before the encryption app is enabled) OCP\User::logout(); header("Location: ".OC::$WEBROOT.'/'); exit(); diff --git a/apps/files_encryption/js/settings.js b/apps/files_encryption/js/settings.js index a160b9e0e18..6fc70eba7f6 100644 --- a/apps/files_encryption/js/settings.js +++ b/apps/files_encryption/js/settings.js @@ -20,5 +20,5 @@ $(document).ready(function(){ $('#enable_encryption').change(function(){ var checked=$('#enable_encryption').is(':checked'); OC.AppConfig.setValue('files_encryption','enable_encryption',(checked)?'true':'false'); - }) -})
\ No newline at end of file + }); +}); diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php index 15cf7705709..9be2be98092 100644 --- a/apps/files_encryption/l10n/cs_CZ.php +++ b/apps/files_encryption/l10n/cs_CZ.php @@ -1,6 +1,6 @@ <?php $TRANSLATIONS = array( -"Encryption" => "Kryptování", -"Exclude the following file types from encryption" => "Při kryptování vynechat následující typy souborů", -"None" => "Žádný", -"Enable Encryption" => "Povolit kryptování" +"Encryption" => "Šifrování", +"Exclude the following file types from encryption" => "Při šifrování vynechat následující typy souborů", +"None" => "Žádné", +"Enable Encryption" => "Povolit šifrování" ); diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php new file mode 100644 index 00000000000..598f1294f6e --- /dev/null +++ b/apps/files_encryption/l10n/sk_SK.php @@ -0,0 +1,6 @@ +<?php $TRANSLATIONS = array( +"Encryption" => "Šifrovanie", +"Exclude the following file types from encryption" => "Vynechať nasledujúce súbory pri šifrovaní", +"None" => "Žiadne", +"Enable Encryption" => "Zapnúť šifrovanie" +); diff --git a/apps/files_encryption/l10n/zh_CN.php b/apps/files_encryption/l10n/zh_CN.php new file mode 100644 index 00000000000..139ae909709 --- /dev/null +++ b/apps/files_encryption/l10n/zh_CN.php @@ -0,0 +1,5 @@ +<?php $TRANSLATIONS = array( +"Encryption" => "加密", +"None" => "None", +"Enable Encryption" => "开启加密" +); diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php new file mode 100644 index 00000000000..4c62130cf4f --- /dev/null +++ b/apps/files_encryption/l10n/zh_TW.php @@ -0,0 +1,6 @@ +<?php $TRANSLATIONS = array( +"Encryption" => "加密", +"Exclude the following file types from encryption" => "下列的檔案類型不加密", +"None" => "無", +"Enable Encryption" => "啟用加密" +); diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index 0770bca018d..38d8edf28c3 100644 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -31,7 +31,7 @@ // - IMPORTANT! Check if the block lenght of the encrypted data stays the same -require_once('Crypt_Blowfish/Blowfish.php'); +require_once 'Crypt_Blowfish/Blowfish.php'; /** * This class is for crypting and decrypting @@ -39,18 +39,18 @@ require_once('Crypt_Blowfish/Blowfish.php'); class OC_Crypt { static private $bf = null; - public static function loginListener($params){ + public static function loginListener($params) { self::init($params['uid'],$params['password']); } public static function init($login,$password) { $view=new OC_FilesystemView('/'); - if(!$view->file_exists('/'.$login)){ + if(!$view->file_exists('/'.$login)) { $view->mkdir('/'.$login); } OC_FileProxy::$enabled=false; - if(!$view->file_exists('/'.$login.'/encryption.key')){// does key exist? + if(!$view->file_exists('/'.$login.'/encryption.key')) {// does key exist? OC_Crypt::createkey($login,$password); } $key=$view->file_get_contents('/'.$login.'/encryption.key'); @@ -66,14 +66,14 @@ class OC_Crypt { * * if the key is left out, the default handeler will be used */ - public static function getBlowfish($key=''){ - if($key){ + public static function getBlowfish($key='') { + if($key) { return new Crypt_Blowfish($key); }else{ - if(!isset($_SESSION['enckey'])){ + if(!isset($_SESSION['enckey'])) { return false; } - if(!self::$bf){ + if(!self::$bf) { self::$bf=new Crypt_Blowfish($_SESSION['enckey']); } return self::$bf; @@ -96,7 +96,7 @@ class OC_Crypt { } public static function changekeypasscode($oldPassword, $newPassword) { - if(OCP\User::isLoggedIn()){ + if(OCP\User::isLoggedIn()) { $username=OCP\USER::getUser(); $view=new OC_FilesystemView('/'.$username); @@ -179,7 +179,7 @@ class OC_Crypt { while (!feof($handleread)) { $content = fread($handleread, 8192); $enccontent=OC_CRYPT::decrypt( $content, $key); - if(feof($handleread)){ + if(feof($handleread)) { $enccontent=rtrim($enccontent, "\0"); } fwrite($handlewrite, $enccontent); @@ -192,9 +192,9 @@ class OC_Crypt { /** * encrypt data in 8192b sized blocks */ - public static function blockEncrypt($data, $key=''){ + public static function blockEncrypt($data, $key='') { $result=''; - while(strlen($data)){ + while(strlen($data)) { $result.=self::encrypt(substr($data,0,8192),$key); $data=substr($data,8192); } @@ -204,13 +204,13 @@ class OC_Crypt { /** * decrypt data in 8192b sized blocks */ - public static function blockDecrypt($data, $key='',$maxLength=0){ + public static function blockDecrypt($data, $key='',$maxLength=0) { $result=''; - while(strlen($data)){ + while(strlen($data)) { $result.=self::decrypt(substr($data,0,8192),$key); $data=substr($data,8192); } - if($maxLength>0){ + if($maxLength>0) { return substr($result,0,$maxLength); }else{ return rtrim($result, "\0"); diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php index 75ad62659d7..721a1b955df 100644 --- a/apps/files_encryption/lib/cryptstream.php +++ b/apps/files_encryption/lib/cryptstream.php @@ -36,18 +36,18 @@ class OC_CryptStream{ private $size; private static $rootView; - public function stream_open($path, $mode, $options, &$opened_path){ - if(!self::$rootView){ + public function stream_open($path, $mode, $options, &$opened_path) { + if(!self::$rootView) { self::$rootView=new OC_FilesystemView(''); } $path=str_replace('crypt://','',$path); - if(dirname($path)=='streams' and isset(self::$sourceStreams[basename($path)])){ + if(dirname($path)=='streams' and isset(self::$sourceStreams[basename($path)])) { $this->source=self::$sourceStreams[basename($path)]['stream']; $this->path=self::$sourceStreams[basename($path)]['path']; $this->size=self::$sourceStreams[basename($path)]['size']; }else{ $this->path=$path; - if($mode=='w' or $mode=='w+' or $mode=='wb' or $mode=='wb+'){ + if($mode=='w' or $mode=='w+' or $mode=='wb' or $mode=='wb+') { $this->size=0; }else{ $this->size=self::$rootView->filesize($path,$mode); @@ -55,55 +55,55 @@ class OC_CryptStream{ OC_FileProxy::$enabled=false;//disable fileproxies so we can open the source file $this->source=self::$rootView->fopen($path,$mode); OC_FileProxy::$enabled=true; - if(!is_resource($this->source)){ + if(!is_resource($this->source)) { OCP\Util::writeLog('files_encryption','failed to open '.$path,OCP\Util::ERROR); } } - if(is_resource($this->source)){ + if(is_resource($this->source)) { $this->meta=stream_get_meta_data($this->source); } return is_resource($this->source); } - public function stream_seek($offset, $whence=SEEK_SET){ + public function stream_seek($offset, $whence=SEEK_SET) { $this->flush(); fseek($this->source,$offset,$whence); } - public function stream_tell(){ + public function stream_tell() { return ftell($this->source); } - public function stream_read($count){ + public function stream_read($count) { //$count will always be 8192 https://bugs.php.net/bug.php?id=21641 //This makes this function a lot simpler but will breake everything the moment it's fixed $this->writeCache=''; - if($count!=8192){ + if($count!=8192) { OCP\Util::writeLog('files_encryption','php bug 21641 no longer holds, decryption will not work',OCP\Util::FATAL); die(); } $pos=ftell($this->source); $data=fread($this->source,8192); - if(strlen($data)){ + if(strlen($data)) { $result=OC_Crypt::decrypt($data); }else{ $result=''; } $length=$this->size-$pos; - if($length<8192){ + if($length<8192) { $result=substr($result,0,$length); } return $result; } - public function stream_write($data){ + public function stream_write($data) { $length=strlen($data); $currentPos=ftell($this->source); - if($this->writeCache){ + if($this->writeCache) { $data=$this->writeCache.$data; $this->writeCache=''; } - if($currentPos%8192!=0){ + if($currentPos%8192!=0) { //make sure we always start on a block start fseek($this->source,-($currentPos%8192),SEEK_CUR); $encryptedBlock=fread($this->source,8192); @@ -113,8 +113,8 @@ class OC_CryptStream{ fseek($this->source,-($currentPos%8192),SEEK_CUR); } $currentPos=ftell($this->source); - while($remainingLength=strlen($data)>0){ - if($remainingLength<8192){ + while($remainingLength=strlen($data)>0) { + if($remainingLength<8192) { $this->writeCache=$data; $data=''; }else{ @@ -127,8 +127,8 @@ class OC_CryptStream{ return $length; } - public function stream_set_option($option,$arg1,$arg2){ - switch($option){ + public function stream_set_option($option,$arg1,$arg2) { + switch($option) { case STREAM_OPTION_BLOCKING: stream_set_blocking($this->source,$arg1); break; @@ -140,33 +140,33 @@ class OC_CryptStream{ } } - public function stream_stat(){ + public function stream_stat() { return fstat($this->source); } - public function stream_lock($mode){ + public function stream_lock($mode) { flock($this->source,$mode); } - public function stream_flush(){ + public function stream_flush() { return fflush($this->source); } - public function stream_eof(){ + public function stream_eof() { return feof($this->source); } - private function flush(){ - if($this->writeCache){ + private function flush() { + if($this->writeCache) { $encrypted=OC_Crypt::encrypt($this->writeCache); fwrite($this->source,$encrypted); $this->writeCache=''; } } - public function stream_close(){ + public function stream_close() { $this->flush(); - if($this->meta['mode']!='r' and $this->meta['mode']!='rb'){ + if($this->meta['mode']!='r' and $this->meta['mode']!='rb') { OC_FileCache::put($this->path,array('encrypted'=>true,'size'=>$this->size),''); } return fclose($this->source); diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 247924b2aaf..f61cd1e3773 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -34,21 +34,21 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ * @param string $path * @return bool */ - private static function shouldEncrypt($path){ - if(is_null(self::$enableEncryption)){ + private static function shouldEncrypt($path) { + if(is_null(self::$enableEncryption)) { self::$enableEncryption=(OCP\Config::getAppValue('files_encryption','enable_encryption','true')=='true'); } - if(!self::$enableEncryption){ + if(!self::$enableEncryption) { return false; } - if(is_null(self::$blackList)){ + if(is_null(self::$blackList)) { self::$blackList=explode(',',OCP\Config::getAppValue('files_encryption','type_blacklist','jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg')); } - if(self::isEncrypted($path)){ + if(self::isEncrypted($path)) { return true; } $extension=substr($path,strrpos($path,'.')+1); - if(array_search($extension,self::$blackList)===false){ + if(array_search($extension,self::$blackList)===false) { return true; } } @@ -58,13 +58,13 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ * @param string $path * @return bool */ - private static function isEncrypted($path){ + private static function isEncrypted($path) { $metadata=OC_FileCache_Cached::get($path,''); return isset($metadata['encrypted']) and (bool)$metadata['encrypted']; } - public function preFile_put_contents($path,&$data){ - if(self::shouldEncrypt($path)){ + public function preFile_put_contents($path,&$data) { + if(self::shouldEncrypt($path)) { if (!is_resource($data)) {//stream put contents should have been converter to fopen $size=strlen($data); $data=OC_Crypt::blockEncrypt($data); @@ -73,24 +73,24 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ } } - public function postFile_get_contents($path,$data){ - if(self::isEncrypted($path)){ + public function postFile_get_contents($path,$data) { + if(self::isEncrypted($path)) { $cached=OC_FileCache_Cached::get($path,''); $data=OC_Crypt::blockDecrypt($data,'',$cached['size']); } return $data; } - public function postFopen($path,&$result){ - if(!$result){ + public function postFopen($path,&$result) { + if(!$result) { return $result; } $meta=stream_get_meta_data($result); - if(self::isEncrypted($path)){ + if(self::isEncrypted($path)) { fclose($result); $result=fopen('crypt://'.$path,$meta['mode']); - }elseif(self::shouldEncrypt($path) and $meta['mode']!='r' and $meta['mode']!='rb'){ - if(OC_Filesystem::file_exists($path) and OC_Filesystem::filesize($path)>0){ + }elseif(self::shouldEncrypt($path) and $meta['mode']!='r' and $meta['mode']!='rb') { + if(OC_Filesystem::file_exists($path) and OC_Filesystem::filesize($path)>0) { //first encrypt the target file so we don't end up with a half encrypted file OCP\Util::writeLog('files_encryption','Decrypting '.$path.' before writing',OCP\Util::DEBUG); $tmp=fopen('php://temp'); @@ -104,23 +104,23 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ return $result; } - public function postGetMimeType($path,$mime){ - if(self::isEncrypted($path)){ + public function postGetMimeType($path,$mime) { + if(self::isEncrypted($path)) { $mime=OCP\Files::getMimeType('crypt://'.$path,'w'); } return $mime; } - public function postStat($path,$data){ - if(self::isEncrypted($path)){ + public function postStat($path,$data) { + if(self::isEncrypted($path)) { $cached=OC_FileCache_Cached::get($path,''); $data['size']=$cached['size']; } return $data; } - public function postFileSize($path,$size){ - if(self::isEncrypted($path)){ + public function postFileSize($path,$size) { + if(self::isEncrypted($path)) { $cached=OC_FileCache_Cached::get($path,''); return $cached['size']; }else{ diff --git a/apps/files_encryption/templates/settings.php b/apps/files_encryption/templates/settings.php index 79780d694cf..55e8cf1542c 100644 --- a/apps/files_encryption/templates/settings.php +++ b/apps/files_encryption/templates/settings.php @@ -7,6 +7,6 @@ <option selected="selected" value="<?php echo $type;?>"><?php echo $type;?></option> <?php endforeach;?> </select> - <input type='checkbox' id='enable_encryption' <?php if($_['encryption_enabled']){echo 'checked="checked"';} ?>></input><label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label> + <input type='checkbox' id='enable_encryption' <?php if($_['encryption_enabled']) {echo 'checked="checked"';} ?>></input><label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label> </fieldset> </form> diff --git a/apps/files_encryption/tests/encryption.php b/apps/files_encryption/tests/encryption.php index f70411ed63c..89397f6ef2c 100644 --- a/apps/files_encryption/tests/encryption.php +++ b/apps/files_encryption/tests/encryption.php @@ -7,7 +7,7 @@ */ class Test_Encryption extends UnitTestCase { - function testEncryption(){ + function testEncryption() { $key=uniqid(); $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; $source=file_get_contents($file); //nice large text file @@ -54,7 +54,7 @@ class Test_Encryption extends UnitTestCase { } - function testBinary(){ + function testBinary() { $key=uniqid(); $file=__DIR__.'/binary'; diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php index c4952d13d39..042011a6c87 100644 --- a/apps/files_encryption/tests/proxy.php +++ b/apps/files_encryption/tests/proxy.php @@ -10,7 +10,7 @@ class Test_CryptProxy extends UnitTestCase { private $oldConfig; private $oldKey; - public function setUp(){ + public function setUp() { $user=OC_User::getUser(); $this->oldConfig=OCP\Config::getAppValue('files_encryption','enable_encryption','true'); @@ -40,14 +40,14 @@ class Test_CryptProxy extends UnitTestCase { $rootView->mkdir('/'.$user.'/files'); } - public function tearDown(){ + public function tearDown() { OCP\Config::setAppValue('files_encryption','enable_encryption',$this->oldConfig); - if(!is_null($this->oldKey)){ + if(!is_null($this->oldKey)) { $_SESSION['enckey']=$this->oldKey; } } - public function testSimple(){ + public function testSimple() { $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; $original=file_get_contents($file); @@ -64,7 +64,7 @@ class Test_CryptProxy extends UnitTestCase { } - public function testView(){ + public function testView() { $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; $original=file_get_contents($file); @@ -86,7 +86,7 @@ class Test_CryptProxy extends UnitTestCase { $this->assertEqual($original,$fromFile); } - public function testBinary(){ + public function testBinary() { $file=__DIR__.'/binary'; $original=file_get_contents($file); diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php index 517d497344e..39b13620782 100644 --- a/apps/files_encryption/tests/stream.php +++ b/apps/files_encryption/tests/stream.php @@ -9,7 +9,7 @@ class Test_CryptStream extends UnitTestCase { private $tmpFiles=array(); - function testStream(){ + function testStream() { $stream=$this->getStream('test1','w',strlen('foobar')); fwrite($stream,'foobar'); fclose($stream); @@ -40,11 +40,11 @@ class Test_CryptStream extends UnitTestCase { * @param int size * @return resource */ - function getStream($id,$mode,$size){ - if($id===''){ + function getStream($id,$mode,$size) { + if($id==='') { $id=uniqid(); } - if(!isset($this->tmpFiles[$id])){ + if(!isset($this->tmpFiles[$id])) { $file=OCP\Files::tmpFile(); $this->tmpFiles[$id]=$file; }else{ @@ -55,7 +55,7 @@ class Test_CryptStream extends UnitTestCase { return fopen('crypt://streams/'.$id,$mode); } - function testBinary(){ + function testBinary() { $file=__DIR__.'/binary'; $source=file_get_contents($file); diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index 92194792f42..dd3a1cb1858 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -10,7 +10,7 @@ $(document).ready(function() { var app_secret = $(this).find('.configuration [data-parameter="app_secret"]').val(); var config = $(this).find('.configuration'); if (app_key != '' && app_secret != '') { - var pos = window.location.search.indexOf('oauth_token') + 12 + var pos = window.location.search.indexOf('oauth_token') + 12; var token = $(this).find('.configuration [data-parameter="token"]'); if (pos != -1 && window.location.search.substr(pos, $(token).val().length) == $(token).val()) { var token_secret = $(this).find('.configuration [data-parameter="token_secret"]'); @@ -73,7 +73,7 @@ $(document).ready(function() { } }); } else { - OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage') + OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage'); } }); diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index f3460070901..89f346574e2 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -66,7 +66,7 @@ OC.MountConfig={ return true; } } -} +}; $(document).ready(function() { $('.chzn-select').chosen(); @@ -179,4 +179,4 @@ $(document).ready(function() { } }); -});
\ No newline at end of file +}); diff --git a/apps/files_external/l10n/cs_CZ.php b/apps/files_external/l10n/cs_CZ.php index e8a38d86619..75899603349 100644 --- a/apps/files_external/l10n/cs_CZ.php +++ b/apps/files_external/l10n/cs_CZ.php @@ -1,18 +1,18 @@ <?php $TRANSLATIONS = array( "External Storage" => "Externí úložiště", "Mount point" => "Přípojný bod", -"Backend" => "Končící", -"Configuration" => "Konfigurace", -"Options" => "Nastavení", +"Backend" => "Podpůrná vrstva", +"Configuration" => "Nastavení", +"Options" => "Možnosti", "Applicable" => "Platný", -"Add mount point" => "Přidat přípojný bod", +"Add mount point" => "Přidat bod připojení", "None set" => "Nenastaveno", "All Users" => "Všichni uživatelé", "Groups" => "Skupiny", "Users" => "Uživatelé", "Delete" => "Smazat", -"SSL root certificates" => "Kořenové SSL certifikáty", -"Import Root Certificate" => "Import kořenového certifikátu", -"Enable User External Storage" => "Zapnout uživatelské externí úložiště", -"Allow users to mount their own external storage" => "Povolit uživatelů připojit jejich vlastní externí úložiště" +"SSL root certificates" => "Kořenové certifikáty SSL", +"Import Root Certificate" => "Importovat kořenového certifikátu", +"Enable User External Storage" => "Zapnout externí uživatelské úložiště", +"Allow users to mount their own external storage" => "Povolit uživatelům připojení jejich vlastních externích úložišť" ); diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php index c1c605735fe..004c352c199 100644 --- a/apps/files_external/l10n/es.php +++ b/apps/files_external/l10n/es.php @@ -1,5 +1,6 @@ <?php $TRANSLATIONS = array( "External Storage" => "Almacenamiento externo", +"Mount point" => "Punto de montaje", "Backend" => "Motor", "Configuration" => "Configuración", "Options" => "Opciones", @@ -9,5 +10,9 @@ "All Users" => "Todos los usuarios", "Groups" => "Grupos", "Users" => "Usuarios", -"Delete" => "Eliiminar" +"Delete" => "Eliiminar", +"SSL root certificates" => "Raíz de certificados SSL ", +"Import Root Certificate" => "Importar certificado raíz", +"Enable User External Storage" => "Habilitar almacenamiento de usuario externo", +"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo" ); diff --git a/apps/files_external/l10n/eu.php b/apps/files_external/l10n/eu.php index a594cdff1f2..d1028d2b9bb 100644 --- a/apps/files_external/l10n/eu.php +++ b/apps/files_external/l10n/eu.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( "External Storage" => "Kanpoko Biltegiratzea", "Mount point" => "Montatze puntua", +"Backend" => "Motorra", "Configuration" => "Konfigurazioa", "Options" => "Aukerak", "Add mount point" => "Gehitu muntatze puntua", diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php index 7dca49791e4..cea671368ed 100644 --- a/apps/files_external/l10n/fi_FI.php +++ b/apps/files_external/l10n/fi_FI.php @@ -4,6 +4,7 @@ "Backend" => "Taustaosa", "Configuration" => "Asetukset", "Options" => "Valinnat", +"Applicable" => "Sovellettavissa", "Add mount point" => "Lisää liitospiste", "None set" => "Ei asetettu", "All Users" => "Kaikki käyttäjät", @@ -12,5 +13,6 @@ "Delete" => "Poista", "SSL root certificates" => "SSL-juurivarmenteet", "Import Root Certificate" => "Tuo juurivarmenne", +"Enable User External Storage" => "Ota käyttöön ulkopuoliset tallennuspaikat", "Allow users to mount their own external storage" => "Salli käyttäjien liittää omia erillisiä tallennusvälineitä" ); diff --git a/apps/files_external/l10n/he.php b/apps/files_external/l10n/he.php new file mode 100644 index 00000000000..edfa9aa85f0 --- /dev/null +++ b/apps/files_external/l10n/he.php @@ -0,0 +1,13 @@ +<?php $TRANSLATIONS = array( +"External Storage" => "אחסון חיצוני", +"Configuration" => "הגדרות", +"Options" => "אפשרויות", +"All Users" => "כל המשתמשים", +"Groups" => "קבוצות", +"Users" => "משתמשים", +"Delete" => "מחיקה", +"SSL root certificates" => "שורש אישורי אבטחת SSL ", +"Import Root Certificate" => "ייבוא אישור אבטחת שורש", +"Enable User External Storage" => "הפעלת אחסון חיצוני למשתמשים", +"Allow users to mount their own external storage" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם" +); diff --git a/apps/files_external/l10n/it.php b/apps/files_external/l10n/it.php index 927499b0172..5c5d32b214c 100644 --- a/apps/files_external/l10n/it.php +++ b/apps/files_external/l10n/it.php @@ -11,8 +11,8 @@ "Groups" => "Gruppi", "Users" => "Utenti", "Delete" => "Elimina", -"SSL root certificates" => "Certificato principale per SSL", -"Import Root Certificate" => "Importa certificato principale", +"SSL root certificates" => "Certificati SSL radice", +"Import Root Certificate" => "Importa certificato radice", "Enable User External Storage" => "Abilita la memoria esterna dell'utente", -"Allow users to mount their own external storage" => "Consente agli utenti di montare la propria memoria esterna" +"Allow users to mount their own external storage" => "Consenti agli utenti di montare la propria memoria esterna" ); diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php new file mode 100644 index 00000000000..24087ea7feb --- /dev/null +++ b/apps/files_external/l10n/sk_SK.php @@ -0,0 +1,18 @@ +<?php $TRANSLATIONS = array( +"External Storage" => "Externé úložisko", +"Mount point" => "Prípojný bod", +"Backend" => "Backend", +"Configuration" => "Nastavenia", +"Options" => "Možnosti", +"Applicable" => "Aplikovateľné", +"Add mount point" => "Pridať prípojný bod", +"None set" => "Žiadne nastavené", +"All Users" => "Všetci užívatelia", +"Groups" => "Skupiny", +"Users" => "Užívatelia", +"Delete" => "Odstrániť", +"SSL root certificates" => "Koreňové SSL certifikáty", +"Import Root Certificate" => "Importovať koreňový certifikát", +"Enable User External Storage" => "Povoliť externé úložisko", +"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko" +); diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index f1bc16e2537..eec31ec2ef9 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -1,283 +1,281 @@ -<?php
-/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@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/>.
-*/
-
-/**
-* Class to configure the config/mount.php and data/$user/mount.php files
-*/
-class OC_Mount_Config {
-
- const MOUNT_TYPE_GLOBAL = 'global';
- const MOUNT_TYPE_GROUP = 'group';
- const MOUNT_TYPE_USER = 'user';
-
- /**
- * Get details on each of the external storage backends, used for the mount config UI
- * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
- * If the configuration parameter should be secret, add a '*' to the beginning of the value
- * If the configuration parameter is a boolean, add a '!' to the beginning of the value
- * If the configuration parameter is optional, add a '&' to the beginning of the value
- * If the configuration parameter is hidden, add a '#' to the begining of the value
- * @return array
- */
- public static function getBackends() {
- return array(
- 'OC_Filestorage_Local' => array('backend' => 'Local', 'configuration' => array('datadir' => 'Location')),
- 'OC_Filestorage_AmazonS3' => array('backend' => 'Amazon S3', 'configuration' => array('key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')),
- 'OC_Filestorage_Dropbox' => array('backend' => 'Dropbox', 'configuration' => array('configured' => '#configured','app_key' => 'App key', 'app_secret' => 'App secret', 'token' => '#token', 'token_secret' => '#token_secret'), 'custom' => 'dropbox'),
- 'OC_Filestorage_FTP' => array('backend' => 'FTP', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure ftps://')),
- 'OC_Filestorage_Google' => array('backend' => 'Google Drive', 'configuration' => array('configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'),
- 'OC_Filestorage_SWIFT' => array('backend' => 'OpenStack Swift', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')),
- 'OC_Filestorage_SMB' => array('backend' => 'SMB', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')),
- 'OC_Filestorage_DAV' => array('backend' => 'WebDAV', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure https://'))
- );
- }
-
- /**
- * Get the system mount points
- * The returned array is not in the same format as getUserMountPoints()
- * @return array
- */
- public static function getSystemMountPoints() {
- $mountPoints = self::readData(false);
- $backends = self::getBackends();
- $system = array();
- if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
- foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
- foreach ($mounts as $mountPoint => $mount) {
- // Remove '/$user/files/' from mount point
- $mountPoint = substr($mountPoint, 13);
- // Merge the mount point into the current mount points
- if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
- $system[$mountPoint]['applicable']['groups'] = array_merge($system[$mountPoint]['applicable']['groups'], array($group));
- } else {
- $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array($group), 'users' => array()));
- }
- }
- }
- }
- if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
- foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
- foreach ($mounts as $mountPoint => $mount) {
- // Remove '/$user/files/' from mount point
- $mountPoint = substr($mountPoint, 13);
- // Merge the mount point into the current mount points
- if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
- $system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user));
- } else {
- $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array(), 'users' => array($user)));
- }
- }
- }
- }
- return $system;
- }
-
- /**
- * Get the personal mount points of the current user
- * The returned array is not in the same format as getUserMountPoints()
- * @return array
- */
- public static function getPersonalMountPoints() {
- $mountPoints = self::readData(true);
- $backends = self::getBackends();
- $uid = OCP\User::getUser();
- $personal = array();
- if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
- foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
- // Remove '/uid/files/' from mount point
- $personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options']);
- }
- }
- return $personal;
- }
-
-
- /**
- * Add a mount point to the filesystem
- * @param string Mount point
- * @param string Backend class
- * @param array Backend parameters for the class
- * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
- * @param string User or group to apply mount to
- * @param bool Personal or system mount point i.e. is this being called from the personal or admin page
- * @return bool
- */
- public static function addMountPoint($mountPoint, $class, $classOptions, $mountType, $applicable, $isPersonal = false) {
- if ($isPersonal) {
- // Verify that the mount point applies for the current user
- // Prevent non-admin users from mounting local storage
- if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') {
- return false;
- }
- $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
- } else {
- $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
- }
- $mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
- $mountPoints = self::readData($isPersonal);
- // Merge the new mount point into the current mount points
- if (isset($mountPoints[$mountType])) {
- if (isset($mountPoints[$mountType][$applicable])) {
- $mountPoints[$mountType][$applicable] = array_merge($mountPoints[$mountType][$applicable], $mount[$applicable]);
- } else {
- $mountPoints[$mountType] = array_merge($mountPoints[$mountType], $mount);
- }
- } else {
- $mountPoints[$mountType] = $mount;
- }
- self::writeData($isPersonal, $mountPoints);
- return true;
- }
-
- /**
- *
- * @param string Mount point
- * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
- * @param string User or group to remove mount from
- * @param bool Personal or system mount point
- * @return bool
- */
- public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
- // Verify that the mount point applies for the current user
- if ($isPersonal) {
- if ($applicable != OCP\User::getUser()) {
- return false;
- }
- $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
- } else {
- $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
- }
- $mountPoints = self::readData($isPersonal);
- // Remove mount point
- unset($mountPoints[$mountType][$applicable][$mountPoint]);
- // Unset parent arrays if empty
- if (empty($mountPoints[$mountType][$applicable])) {
- unset($mountPoints[$mountType][$applicable]);
- if (empty($mountPoints[$mountType])) {
- unset($mountPoints[$mountType]);
- }
- }
- self::writeData($isPersonal, $mountPoints);
- return true;
- }
-
- /**
- * Read the mount points in the config file into an array
- * @param bool Personal or system config file
- * @return array
- */
- private static function readData($isPersonal) {
- if ($isPersonal) {
- $file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
- } else {
- $file = OC::$SERVERROOT.'/config/mount.php';
- }
- if (is_file($file)) {
- $mountPoints = include($file);
- if (is_array($mountPoints)) {
- return $mountPoints;
- }
- }
- return array();
- }
-
- /**
- * Write the mount points to the config file
- * @param bool Personal or system config file
- * @param array Mount points
- */
- private static function writeData($isPersonal, $data) {
- if ($isPersonal) {
- $file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
- } else {
- $file = OC::$SERVERROOT.'/config/mount.php';
- }
- $content = "<?php return array (\n";
- if (isset($data[self::MOUNT_TYPE_GROUP])) {
- $content .= "\t'group' => array (\n";
- foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
- $content .= "\t\t'".$group."' => array (\n";
- foreach ($mounts as $mountPoint => $mount) {
- $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
-
- }
- $content .= "\t\t),\n";
- }
- $content .= "\t),\n";
- }
- if (isset($data[self::MOUNT_TYPE_USER])) {
- $content .= "\t'user' => array (\n";
- foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
- $content .= "\t\t'".$user."' => array (\n";
- foreach ($mounts as $mountPoint => $mount) {
- $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
- }
- $content .= "\t\t),\n";
- }
- $content .= "\t),\n";
- }
- $content .= ");\n?>";
- @file_put_contents($file, $content);
- }
-
- /**
- * Returns all user uploaded ssl root certificates
- * @return array
- */
- public static function getCertificates() {
- $view = \OCP\Files::getStorage('files_external');
- $path=\OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
- if (!is_dir($path)) mkdir($path);
- $result = array();
- $handle = opendir($path);
- while (false !== ($file = readdir($handle))) {
- if($file != '.' && $file != '..') $result[] = $file;
- }
- return $result;
- }
-
- /**
- * creates certificate bundle
- */
- public static function createCertificateBundle() {
- $view = \OCP\Files::getStorage("files_external");
- $path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("");
-
- $certs = OC_Mount_Config::getCertificates();
- $fh_certs = fopen($path."/rootcerts.crt", 'w');
- foreach ($certs as $cert) {
- $file=$path.'/uploads/'.$cert;
- $fh = fopen($file, "r");
- $data = fread($fh, filesize($file));
- fclose($fh);
- if (strpos($data, 'BEGIN CERTIFICATE')) {
- fwrite($fh_certs, $data);
- }
- }
-
- fclose($fh_certs);
-
- return true;
- }
-
-}
-
-?>
\ No newline at end of file +<?php +/** +* ownCloud +* +* @author Michael Gapczynski +* @copyright 2012 Michael Gapczynski mtgap@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/>. +*/ + +/** +* Class to configure the config/mount.php and data/$user/mount.php files +*/ +class OC_Mount_Config { + + const MOUNT_TYPE_GLOBAL = 'global'; + const MOUNT_TYPE_GROUP = 'group'; + const MOUNT_TYPE_USER = 'user'; + + /** + * Get details on each of the external storage backends, used for the mount config UI + * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded + * If the configuration parameter should be secret, add a '*' to the beginning of the value + * If the configuration parameter is a boolean, add a '!' to the beginning of the value + * If the configuration parameter is optional, add a '&' to the beginning of the value + * If the configuration parameter is hidden, add a '#' to the begining of the value + * @return array + */ + public static function getBackends() { + return array( + 'OC_Filestorage_Local' => array('backend' => 'Local', 'configuration' => array('datadir' => 'Location')), + 'OC_Filestorage_AmazonS3' => array('backend' => 'Amazon S3', 'configuration' => array('key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')), + 'OC_Filestorage_Dropbox' => array('backend' => 'Dropbox', 'configuration' => array('configured' => '#configured','app_key' => 'App key', 'app_secret' => 'App secret', 'token' => '#token', 'token_secret' => '#token_secret'), 'custom' => 'dropbox'), + 'OC_Filestorage_FTP' => array('backend' => 'FTP', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure ftps://')), + 'OC_Filestorage_Google' => array('backend' => 'Google Drive', 'configuration' => array('configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'), + 'OC_Filestorage_SWIFT' => array('backend' => 'OpenStack Swift', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')), + 'OC_Filestorage_SMB' => array('backend' => 'SMB', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')), + 'OC_Filestorage_DAV' => array('backend' => 'WebDAV', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure https://')) + ); + } + + /** + * Get the system mount points + * The returned array is not in the same format as getUserMountPoints() + * @return array + */ + public static function getSystemMountPoints() { + $mountPoints = self::readData(false); + $backends = self::getBackends(); + $system = array(); + if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) { + foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) { + foreach ($mounts as $mountPoint => $mount) { + // Remove '/$user/files/' from mount point + $mountPoint = substr($mountPoint, 13); + // Merge the mount point into the current mount points + if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) { + $system[$mountPoint]['applicable']['groups'] = array_merge($system[$mountPoint]['applicable']['groups'], array($group)); + } else { + $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array($group), 'users' => array())); + } + } + } + } + if (isset($mountPoints[self::MOUNT_TYPE_USER])) { + foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) { + foreach ($mounts as $mountPoint => $mount) { + // Remove '/$user/files/' from mount point + $mountPoint = substr($mountPoint, 13); + // Merge the mount point into the current mount points + if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) { + $system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user)); + } else { + $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array(), 'users' => array($user))); + } + } + } + } + return $system; + } + + /** + * Get the personal mount points of the current user + * The returned array is not in the same format as getUserMountPoints() + * @return array + */ + public static function getPersonalMountPoints() { + $mountPoints = self::readData(true); + $backends = self::getBackends(); + $uid = OCP\User::getUser(); + $personal = array(); + if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) { + foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) { + // Remove '/uid/files/' from mount point + $personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options']); + } + } + return $personal; + } + + + /** + * Add a mount point to the filesystem + * @param string Mount point + * @param string Backend class + * @param array Backend parameters for the class + * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER + * @param string User or group to apply mount to + * @param bool Personal or system mount point i.e. is this being called from the personal or admin page + * @return bool + */ + public static function addMountPoint($mountPoint, $class, $classOptions, $mountType, $applicable, $isPersonal = false) { + if ($isPersonal) { + // Verify that the mount point applies for the current user + // Prevent non-admin users from mounting local storage + if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') { + return false; + } + $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/'); + } else { + $mountPoint = '/$user/files/'.ltrim($mountPoint, '/'); + } + $mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions))); + $mountPoints = self::readData($isPersonal); + // Merge the new mount point into the current mount points + if (isset($mountPoints[$mountType])) { + if (isset($mountPoints[$mountType][$applicable])) { + $mountPoints[$mountType][$applicable] = array_merge($mountPoints[$mountType][$applicable], $mount[$applicable]); + } else { + $mountPoints[$mountType] = array_merge($mountPoints[$mountType], $mount); + } + } else { + $mountPoints[$mountType] = $mount; + } + self::writeData($isPersonal, $mountPoints); + return true; + } + + /** + * + * @param string Mount point + * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER + * @param string User or group to remove mount from + * @param bool Personal or system mount point + * @return bool + */ + public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) { + // Verify that the mount point applies for the current user + if ($isPersonal) { + if ($applicable != OCP\User::getUser()) { + return false; + } + $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/'); + } else { + $mountPoint = '/$user/files/'.ltrim($mountPoint, '/'); + } + $mountPoints = self::readData($isPersonal); + // Remove mount point + unset($mountPoints[$mountType][$applicable][$mountPoint]); + // Unset parent arrays if empty + if (empty($mountPoints[$mountType][$applicable])) { + unset($mountPoints[$mountType][$applicable]); + if (empty($mountPoints[$mountType])) { + unset($mountPoints[$mountType]); + } + } + self::writeData($isPersonal, $mountPoints); + return true; + } + + /** + * Read the mount points in the config file into an array + * @param bool Personal or system config file + * @return array + */ + private static function readData($isPersonal) { + if ($isPersonal) { + $file = OC_User::getHome(OCP\User::getUser()).'/mount.php'; + } else { + $file = OC::$SERVERROOT.'/config/mount.php'; + } + if (is_file($file)) { + $mountPoints = include($file); + if (is_array($mountPoints)) { + return $mountPoints; + } + } + return array(); + } + + /** + * Write the mount points to the config file + * @param bool Personal or system config file + * @param array Mount points + */ + private static function writeData($isPersonal, $data) { + if ($isPersonal) { + $file = OC_User::getHome(OCP\User::getUser()).'/mount.php'; + } else { + $file = OC::$SERVERROOT.'/config/mount.php'; + } + $content = "<?php return array (\n"; + if (isset($data[self::MOUNT_TYPE_GROUP])) { + $content .= "\t'group' => array (\n"; + foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) { + $content .= "\t\t'".$group."' => array (\n"; + foreach ($mounts as $mountPoint => $mount) { + $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n"; + + } + $content .= "\t\t),\n"; + } + $content .= "\t),\n"; + } + if (isset($data[self::MOUNT_TYPE_USER])) { + $content .= "\t'user' => array (\n"; + foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) { + $content .= "\t\t'".$user."' => array (\n"; + foreach ($mounts as $mountPoint => $mount) { + $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n"; + } + $content .= "\t\t),\n"; + } + $content .= "\t),\n"; + } + $content .= ");\n?>"; + @file_put_contents($file, $content); + } + + /** + * Returns all user uploaded ssl root certificates + * @return array + */ + public static function getCertificates() { + $view = \OCP\Files::getStorage('files_external'); + $path=\OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/'; + if (!is_dir($path)) mkdir($path); + $result = array(); + $handle = opendir($path); + while (false !== ($file = readdir($handle))) { + if($file != '.' && $file != '..') $result[] = $file; + } + return $result; + } + + /** + * creates certificate bundle + */ + public static function createCertificateBundle() { + $view = \OCP\Files::getStorage("files_external"); + $path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath(""); + + $certs = OC_Mount_Config::getCertificates(); + $fh_certs = fopen($path."/rootcerts.crt", 'w'); + foreach ($certs as $cert) { + $file=$path.'/uploads/'.$cert; + $fh = fopen($file, "r"); + $data = fread($fh, filesize($file)); + fclose($fh); + if (strpos($data, 'BEGIN CERTIFICATE')) { + fwrite($fh_certs, $data); + } + } + + fclose($fh_certs); + + return true; + } + +} diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index 818273f6c2d..261141455cc 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -15,13 +15,13 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ private static $tempFiles=array(); - public function __construct($params){ + 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(!$this->root || $this->root[0]!='/'){ + if(!$this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } //create the root folder if necesary @@ -35,16 +35,16 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ * @param string path * @return string */ - public function constructUrl($path){ + public function constructUrl($path) { $url='ftp'; - if($this->secure){ + if($this->secure) { $url.='s'; } $url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path; return $url; } - public function fopen($path,$mode){ - switch($mode){ + public function fopen($path,$mode) { + switch($mode) { case 'r': case 'rb': case 'w': @@ -63,14 +63,14 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ case 'c': case 'c+': //emulate these - if(strrpos($path,'.')!==false){ + if(strrpos($path,'.')!==false) { $ext=substr($path,strrpos($path,'.')); }else{ $ext=''; } $tmpFile=OCP\Files::tmpFile($ext); OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack'); - if($this->file_exists($path)){ + if($this->file_exists($path)) { $this->getFile($path,$tmpFile); } self::$tempFiles[$tmpFile]=$path; @@ -78,8 +78,8 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ } } - public function writeBack($tmpFile){ - if(isset(self::$tempFiles[$tmpFile])){ + public function writeBack($tmpFile) { + if(isset(self::$tempFiles[$tmpFile])) { $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]); unlink($tmpFile); } diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 8a5e993b1d0..e5ba7a17743 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -6,7 +6,7 @@ * See the COPYING-README file. */ -require_once('smb4php/smb.php'); +require_once 'smb4php/smb.php'; class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ private $password; @@ -15,40 +15,40 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ private $root; private $share; - public function __construct($params){ + public function __construct($params) { $this->host=$params['host']; $this->user=$params['user']; $this->password=$params['password']; $this->share=$params['share']; $this->root=isset($params['root'])?$params['root']:'/'; - if(!$this->root || $this->root[0]!='/'){ + if(!$this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } - if(substr($this->root,-1,1)!='/'){ + if(substr($this->root,-1,1)!='/') { $this->root.='/'; } - if(!$this->share || $this->share[0]!='/'){ + if(!$this->share || $this->share[0]!='/') { $this->share='/'.$this->share; } - if(substr($this->share,-1,1)=='/'){ + if(substr($this->share,-1,1)=='/') { $this->share=substr($this->share,0,-1); } //create the root folder if necesary - if(!$this->is_dir('')){ + if(!$this->is_dir('')) { $this->mkdir(''); } } - public function constructUrl($path){ - if(substr($path,-1)=='/'){ + public function constructUrl($path) { + if(substr($path,-1)=='/') { $path=substr($path,0,-1); } return 'smb://'.$this->user.':'.$this->password.'@'.$this->host.$this->share.$this->root.$path; } - public function stat($path){ - if(!$path and $this->root=='/'){//mtime doesn't work for shares + public function stat($path) { + if(!$path and $this->root=='/') {//mtime doesn't work for shares $mtime=$this->shareMTime(); $stat=stat($this->constructUrl($path)); $stat['mtime']=$mtime; @@ -58,7 +58,7 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ } } - public function filetype($path){ + public function filetype($path) { return (bool)@$this->opendir($path);//using opendir causes the same amount of requests and caches the content of the folder in one go } @@ -67,8 +67,8 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ * @param int $time * @return bool */ - public function hasUpdated($path,$time){ - if(!$path and $this->root=='/'){ + public function hasUpdated($path,$time) { + if(!$path and $this->root=='/') { //mtime doesn't work for shares, but giving the nature of the backend, doing a full update is still just fast enough return true; }else{ @@ -80,13 +80,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ /** * get the best guess for the modification time of the share */ - private function shareMTime(){ + private function shareMTime() { $dh=$this->opendir(''); $lastCtime=0; - while($file=readdir($dh)){ - if($file!='.' and $file!='..'){ + while($file=readdir($dh)) { + if($file!='.' and $file!='..') { $ctime=$this->filemtime($file); - if($ctime>$lastCtime){ + if($ctime>$lastCtime) { $lastCtime=$ctime; } } diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php index 467c5a5b845..7263ef23253 100644 --- a/apps/files_external/lib/streamwrapper.php +++ b/apps/files_external/lib/streamwrapper.php @@ -10,12 +10,12 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ abstract public function constructUrl($path); - public function mkdir($path){ + public function mkdir($path) { return mkdir($this->constructUrl($path)); } - public function rmdir($path){ - if($this->file_exists($path)){ + public function rmdir($path) { + if($this->file_exists($path)) { $succes=rmdir($this->constructUrl($path)); clearstatcache(); return $succes; @@ -24,42 +24,42 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ } } - public function opendir($path){ + public function opendir($path) { return opendir($this->constructUrl($path)); } - public function filetype($path){ + public function filetype($path) { return filetype($this->constructUrl($path)); } - public function isReadable($path){ + public function isReadable($path) { return true;//not properly supported } - public function isUpdatable($path){ + public function isUpdatable($path) { return true;//not properly supported } - public function file_exists($path){ + public function file_exists($path) { return file_exists($this->constructUrl($path)); } - public function unlink($path){ + public function unlink($path) { $succes=unlink($this->constructUrl($path)); clearstatcache(); return $succes; } - public function fopen($path,$mode){ + public function fopen($path,$mode) { return fopen($this->constructUrl($path),$mode); } - public function free_space($path){ + public function free_space($path) { return 0; } - public function touch($path,$mtime=null){ - if(is_null($mtime)){ + public function touch($path,$mtime=null) { + if(is_null($mtime)) { $fh=$this->fopen($path,'a'); fwrite($fh,''); fclose($fh); @@ -68,19 +68,19 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ } } - public function getFile($path,$target){ + public function getFile($path,$target) { return copy($this->constructUrl($path),$target); } - public function uploadFile($path,$target){ + public function uploadFile($path,$target) { return copy($path,$this->constructUrl($target)); } - public function rename($path1,$path2){ + public function rename($path1,$path2) { return rename($this->constructUrl($path1),$this->constructUrl($path2)); } - public function stat($path){ + public function stat($path) { return stat($this->constructUrl($path)); } diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index 1868bc4ba77..c29d28b44c1 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -6,7 +6,7 @@ * See the COPYING-README file. */ -require_once('php-cloudfiles/cloudfiles.php'); +require_once 'php-cloudfiles/cloudfiles.php'; class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ private $host; @@ -38,7 +38,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return string */ - private function getContainerName($path){ + private function getContainerName($path) { $path=trim($this->root.$path,'/'); return str_replace('/','\\',$path); } @@ -48,18 +48,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return CF_Container */ - private function getContainer($path){ - if($path=='' or $path=='/'){ + private function getContainer($path) { + if($path=='' or $path=='/') { return $this->rootContainer; } - if(isset($this->containers[$path])){ + if(isset($this->containers[$path])) { return $this->containers[$path]; } try{ $container=$this->conn->get_container($this->getContainerName($path)); $this->containers[$path]=$container; return $container; - }catch(NoSuchContainerException $e){ + }catch(NoSuchContainerException $e) { return null; } } @@ -69,15 +69,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return CF_Container */ - private function createContainer($path){ - if($path=='' or $path=='/'){ + private function createContainer($path) { + if($path=='' or $path=='/') { return $this->conn->create_container($this->getContainerName($path)); } $parent=dirname($path); - if($parent=='' or $parent=='/'){ + if($parent=='' or $parent=='/') { $parentContainer=$this->rootContainer; }else{ - if(!$this->containerExists($parent)){ + if(!$this->containerExists($parent)) { $parentContainer=$this->createContainer($parent); }else{ $parentContainer=$this->getContainer($parent); @@ -92,19 +92,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return CF_Object */ - private function getObject($path){ - if(isset($this->objects[$path])){ + private function getObject($path) { + if(isset($this->objects[$path])) { return $this->objects[$path]; } $container=$this->getContainer(dirname($path)); - if(is_null($container)){ + if(is_null($container)) { return null; }else{ try{ $obj=$container->get_object(basename($path)); $this->objects[$path]=$obj; return $obj; - }catch(NoSuchObjectException $e){ + }catch(NoSuchObjectException $e) { return null; } } @@ -115,12 +115,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param CF_Container * @return array */ - private function getObjects($container){ - if(is_null($container)){ + private function getObjects($container) { + if(is_null($container)) { return array(); }else{ $files=$container->get_objects(); - foreach($files as &$file){ + foreach($files as &$file) { $file=$file->name; } return $files; @@ -132,9 +132,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return CF_Object */ - private function createObject($path){ + private function createObject($path) { $container=$this->getContainer(dirname($path)); - if(!is_null($container)){ + if(!is_null($container)) { $container=$this->createContainer($path); } return $container->create_object(basename($path)); @@ -145,7 +145,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string * @return bool */ - private function objectExists($path){ + private function objectExists($path) { return !is_null($this->getObject($path)); } @@ -154,7 +154,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string path * @return bool */ - private function containerExists($path){ + private function containerExists($path) { return !is_null($this->getContainer($path)); } @@ -163,18 +163,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param CF_Container container * @return array */ - private function getSubContainers($container){ + private function getSubContainers($container) { $tmpFile=OCP\Files::tmpFile(); $obj=$this->getSubContainerFile($container); try{ $obj->save_to_filename($tmpFile); - }catch(Exception $e){ + }catch(Exception $e) { return array(); } $obj->save_to_filename($tmpFile); $containers=file($tmpFile); unlink($tmpFile); - foreach($containers as &$sub){ + foreach($containers as &$sub) { $sub=trim($sub); } return $containers; @@ -186,8 +186,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string name * @return bool */ - private function addSubContainer($container,$name){ - if(!$name){ + private function addSubContainer($container,$name) { + if(!$name) { return false; } $tmpFile=OCP\Files::tmpFile(); @@ -195,17 +195,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ try{ $obj->save_to_filename($tmpFile); $containers=file($tmpFile); - foreach($containers as &$sub){ + foreach($containers as &$sub) { $sub=trim($sub); } - if(array_search($name,$containers)!==false){ + if(array_search($name,$containers)!==false) { unlink($tmpFile); return false; }else{ $fh=fopen($tmpFile,'a'); fwrite($fh,$name."\n"); } - }catch(Exception $e){ + }catch(Exception $e) { $containers=array(); file_put_contents($tmpFile,$name."\n"); } @@ -221,8 +221,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param string name * @return bool */ - private function removeSubContainer($container,$name){ - if(!$name){ + private function removeSubContainer($container,$name) { + if(!$name) { return false; } $tmpFile=OCP\Files::tmpFile(); @@ -230,14 +230,14 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ try{ $obj->save_to_filename($tmpFile); $containers=file($tmpFile); - }catch(Exception $e){ + }catch(Exception $e) { return false; } - foreach($containers as &$sub){ + foreach($containers as &$sub) { $sub=trim($sub); } $i=array_search($name,$containers); - if($i===false){ + if($i===false) { unlink($tmpFile); return false; }else{ @@ -255,21 +255,21 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * @param CF_Container container * @return CF_Object */ - private function getSubContainerFile($container){ + private function getSubContainerFile($container) { try{ return $container->get_object(self::SUBCONTAINER_FILE); - }catch(NoSuchObjectException $e){ + }catch(NoSuchObjectException $e) { return $container->create_object(self::SUBCONTAINER_FILE); } } - public function __construct($params){ + public function __construct($params) { $this->token=$params['token']; $this->host=$params['host']; $this->user=$params['user']; $this->root=isset($params['root'])?$params['root']:'/'; $this->secure=isset($params['secure'])?(bool)$params['secure']:true; - if(!$this->root || $this->root[0]!='/'){ + if(!$this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host); @@ -277,7 +277,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ $this->conn = new CF_Connection($this->auth); - if(!$this->containerExists($this->root)){ + if(!$this->containerExists($this->root)) { $this->rootContainer=$this->createContainer('/'); }else{ $this->rootContainer=$this->getContainer('/'); @@ -285,8 +285,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } - public function mkdir($path){ - if($this->containerExists($path)){ + public function mkdir($path) { + if($this->containerExists($path)) { return false; }else{ $this->createContainer($path); @@ -294,12 +294,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } - public function rmdir($path){ - if(!$this->containerExists($path)){ + public function rmdir($path) { + if(!$this->containerExists($path)) { return false; }else{ $this->emptyContainer($path); - if($path!='' and $path!='/'){ + if($path!='' and $path!='/') { $parentContainer=$this->getContainer(dirname($path)); $this->removeSubContainer($parentContainer,basename($path)); } @@ -310,14 +310,14 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } - private function emptyContainer($path){ + private function emptyContainer($path) { $container=$this->getContainer($path); - if(is_null($container)){ + if(is_null($container)) { return; } $subContainers=$this->getSubContainers($container); - foreach($subContainers as $sub){ - if($sub){ + foreach($subContainers as $sub) { + if($sub) { $this->emptyContainer($path.'/'.$sub); $this->conn->delete_container($this->getContainerName($path.'/'.$sub)); unset($this->containers[$path.'/'.$sub]); @@ -325,17 +325,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } $objects=$this->getObjects($container); - foreach($objects as $object){ + foreach($objects as $object) { $container->delete_object($object); unset($this->objects[$path.'/'.$object]); } } - public function opendir($path){ + public function opendir($path) { $container=$this->getContainer($path); $files=$this->getObjects($container); $i=array_search(self::SUBCONTAINER_FILE,$files); - if($i!==false){ + if($i!==false) { unset($files[$i]); } $subContainers=$this->getSubContainers($container); @@ -345,43 +345,43 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ return opendir('fakedir://'.$id); } - public function filetype($path){ - if($this->containerExists($path)){ + public function filetype($path) { + if($this->containerExists($path)) { return 'dir'; }else{ return 'file'; } } - public function isReadable($path){ + public function isReadable($path) { return true; } - public function isUpdatable($path){ + public function isUpdatable($path) { return true; } - public function file_exists($path){ - if($this->is_dir($path)){ + public function file_exists($path) { + if($this->is_dir($path)) { return true; }else{ return $this->objectExists($path); } } - public function file_get_contents($path){ + public function file_get_contents($path) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { return false; } return $obj->read(); } - public function file_put_contents($path,$content){ + public function file_put_contents($path,$content) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { $container=$this->getContainer(dirname($path)); - if(is_null($container)){ + if(is_null($container)) { return false; } $obj=$container->create_object(basename($path)); @@ -390,8 +390,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ return $obj->write($content); } - public function unlink($path){ - if($this->objectExists($path)){ + public function unlink($path) { + if($this->objectExists($path)) { $container=$this->getContainer(dirname($path)); $container->delete_object(basename($path)); unset($this->objects[$path]); @@ -400,12 +400,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } - public function fopen($path,$mode){ + public function fopen($path,$mode) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { return false; } - switch($mode){ + switch($mode) { case 'r': case 'rb': $fp = fopen('php://temp', 'r+'); @@ -432,23 +432,23 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } - public function writeBack($tmpFile){ - if(isset(self::$tempFiles[$tmpFile])){ + public function writeBack($tmpFile) { + if(isset(self::$tempFiles[$tmpFile])) { $this->fromTmpFile($tmpFile,self::$tempFiles[$tmpFile]); unlink($tmpFile); } } - public function free_space($path){ + public function free_space($path) { return 0; } - public function touch($path,$mtime=null){ + public function touch($path,$mtime=null) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { return false; } - if(is_null($mtime)){ + if(is_null($mtime)) { $mtime=time(); } @@ -457,36 +457,36 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ $obj->sync_metadata(); } - public function rename($path1,$path2){ + public function rename($path1,$path2) { $sourceContainer=$this->getContainer(dirname($path1)); $targetContainer=$this->getContainer(dirname($path2)); $result=$sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2)); unset($this->objects[$path1]); - if($result){ + if($result) { $targetObj=$this->getObject($path2); $this->resetMTime($targetObj); } return $result; } - public function copy($path1,$path2){ + public function copy($path1,$path2) { $sourceContainer=$this->getContainer(dirname($path1)); $targetContainer=$this->getContainer(dirname($path2)); $result=$sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2)); - if($result){ + if($result) { $targetObj=$this->getObject($path2); $this->resetMTime($targetObj); } return $result; } - public function stat($path){ + public function stat($path) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { return false; } - if(isset($obj->metadata['Mtime']) and $obj->metadata['Mtime']>-1){ + if(isset($obj->metadata['Mtime']) and $obj->metadata['Mtime']>-1) { $mtime=$obj->metadata['Mtime']; }else{ $mtime=strtotime($obj->last_modified); @@ -498,9 +498,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ ); } - private function getTmpFile($path){ + private function getTmpFile($path) { $obj=$this->getObject($path); - if(!is_null($obj)){ + if(!is_null($obj)) { $tmpFile=OCP\Files::tmpFile(); $obj->save_to_filename($tmpFile); return $tmpFile; @@ -509,9 +509,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } - private function fromTmpFile($tmpFile,$path){ + private function fromTmpFile($tmpFile,$path) { $obj=$this->getObject($path); - if(is_null($obj)){ + if(is_null($obj)) { $obj=$this->createObject($path); } $obj->load_from_filename($tmpFile); @@ -522,8 +522,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ * remove custom mtime metadata * @param CF_Object obj */ - private function resetMTime($obj){ - if(isset($obj->metadata['Mtime'])){ + private function resetMTime($obj) { + if(isset($obj->metadata['Mtime'])) { $obj->metadata['Mtime']=-1; $obj->sync_metadata(); } diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 1b9c3e3333b..3c18b227fa6 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -19,7 +19,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ private static $tempFiles=array(); - public function __construct($params){ + public function __construct($params) { $host = $params['host']; //remove leading http[s], will be generated in createBaseUri() if (substr($host,0,8) == "https://") $host = substr($host, 8); @@ -29,10 +29,10 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ $this->password=$params['password']; $this->secure=(isset($params['secure']) && $params['secure'] == 'true')?true:false; $this->root=isset($params['root'])?$params['root']:'/'; - if(!$this->root || $this->root[0]!='/'){ + if(!$this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } - if(substr($this->root,-1,1)!='/'){ + if(substr($this->root,-1,1)!='/') { $this->root.='/'; } @@ -54,26 +54,26 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ $this->mkdir(''); } - private function createBaseUri(){ + private function createBaseUri() { $baseUri='http'; - if($this->secure){ + if($this->secure) { $baseUri.='s'; } $baseUri.='://'.$this->host.$this->root; return $baseUri; } - public function mkdir($path){ + public function mkdir($path) { $path=$this->cleanPath($path); return $this->simpleResponse('MKCOL',$path,null,201); } - public function rmdir($path){ + public function rmdir($path) { $path=$this->cleanPath($path); return $this->simpleResponse('DELETE',$path,null,204); } - public function opendir($path){ + public function opendir($path) { $path=$this->cleanPath($path); try{ $response=$this->client->propfind($path, array(),1); @@ -81,54 +81,54 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ OC_FakeDirStream::$dirs[$id]=array(); $files=array_keys($response); array_shift($files);//the first entry is the current directory - foreach($files as $file){ + foreach($files as $file) { $file = urldecode(basename($file)); OC_FakeDirStream::$dirs[$id][]=$file; } return opendir('fakedir://'.$id); - }catch(Exception $e){ + }catch(Exception $e) { return false; } } - public function filetype($path){ + public function filetype($path) { $path=$this->cleanPath($path); try{ $response=$this->client->propfind($path, array('{DAV:}resourcetype')); $responseType=$response["{DAV:}resourcetype"]->resourceType; return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file'; - }catch(Exception $e){ + }catch(Exception $e) { error_log($e->getMessage()); \OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR); return false; } } - public function isReadable($path){ + public function isReadable($path) { return true;//not properly supported } - public function isUpdatable($path){ + public function isUpdatable($path) { return true;//not properly supported } - public function file_exists($path){ + public function file_exists($path) { $path=$this->cleanPath($path); try{ $this->client->propfind($path, array('{DAV:}resourcetype')); return true;//no 404 exception - }catch(Exception $e){ + }catch(Exception $e) { return false; } } - public function unlink($path){ + public function unlink($path) { return $this->simpleResponse('DELETE',$path,null,204); } - public function fopen($path,$mode){ + public function fopen($path,$mode) { $path=$this->cleanPath($path); - switch($mode){ + switch($mode) { case 'r': case 'rb': //straight up curl instead of sabredav here, sabredav put's the entire get result in memory @@ -155,14 +155,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ case 'c': case 'c+': //emulate these - if(strrpos($path,'.')!==false){ + if(strrpos($path,'.')!==false) { $ext=substr($path,strrpos($path,'.')); }else{ $ext=''; } $tmpFile=OCP\Files::tmpFile($ext); OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack'); - if($this->file_exists($path)){ + if($this->file_exists($path)) { $this->getFile($path,$tmpFile); } self::$tempFiles[$tmpFile]=$path; @@ -170,41 +170,41 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } } - public function writeBack($tmpFile){ - if(isset(self::$tempFiles[$tmpFile])){ + public function writeBack($tmpFile) { + if(isset(self::$tempFiles[$tmpFile])) { $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]); unlink($tmpFile); } } - public function free_space($path){ + public function free_space($path) { $path=$this->cleanPath($path); try{ $response=$this->client->propfind($path, array('{DAV:}quota-available-bytes')); - if(isset($response['{DAV:}quota-available-bytes'])){ + if(isset($response['{DAV:}quota-available-bytes'])) { return (int)$response['{DAV:}quota-available-bytes']; }else{ return 0; } - }catch(Exception $e){ + }catch(Exception $e) { return 0; } } - public function touch($path,$mtime=null){ - if(is_null($mtime)){ + public function touch($path,$mtime=null) { + if(is_null($mtime)) { $mtime=time(); } $path=$this->cleanPath($path); $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime)); } - public function getFile($path,$target){ + public function getFile($path,$target) { $source=$this->fopen($path,'r'); file_put_contents($target,$source); } - public function uploadFile($path,$target){ + public function uploadFile($path,$target) { $source=fopen($path,'r'); $curl = curl_init(); @@ -218,13 +218,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ curl_close ($curl); } - public function rename($path1,$path2){ + public function rename($path1,$path2) { $path1=$this->cleanPath($path1); $path2=$this->root.$this->cleanPath($path2); try{ $response=$this->client->request('MOVE',$path1,null,array('Destination'=>$path2)); return true; - }catch(Exception $e){ + }catch(Exception $e) { echo $e; echo 'fail'; var_dump($response); @@ -232,13 +232,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } } - public function copy($path1,$path2){ + public function copy($path1,$path2) { $path1=$this->cleanPath($path1); $path2=$this->root.$this->cleanPath($path2); try{ $response=$this->client->request('COPY',$path1,null,array('Destination'=>$path2)); return true; - }catch(Exception $e){ + }catch(Exception $e) { echo $e; echo 'fail'; var_dump($response); @@ -246,7 +246,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } } - public function stat($path){ + public function stat($path) { $path=$this->cleanPath($path); try{ $response=$this->client->propfind($path, array('{DAV:}getlastmodified','{DAV:}getcontentlength')); @@ -255,43 +255,43 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ 'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0, 'ctime'=>-1, ); - }catch(Exception $e){ + }catch(Exception $e) { return array(); } } - public function getMimeType($path){ + public function getMimeType($path) { $path=$this->cleanPath($path); try{ $response=$this->client->propfind($path, array('{DAV:}getcontenttype','{DAV:}resourcetype')); $responseType=$response["{DAV:}resourcetype"]->resourceType; $type=(count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file'; - if($type=='dir'){ + if($type=='dir') { return 'httpd/unix-directory'; - }elseif(isset($response['{DAV:}getcontenttype'])){ + }elseif(isset($response['{DAV:}getcontenttype'])) { return $response['{DAV:}getcontenttype']; }else{ return false; } - }catch(Exception $e){ + }catch(Exception $e) { return false; } } - private function cleanPath($path){ - if(!$path || $path[0]=='/'){ + private function cleanPath($path) { + if(!$path || $path[0]=='/') { return substr($path,1); }else{ return $path; } } - private function simpleResponse($method,$path,$body,$expected){ + private function simpleResponse($method,$path,$body,$expected) { $path=$this->cleanPath($path); try{ $response=$this->client->request($method,$path,$body); return $response['statusCode']==$expected; - }catch(Exception $e){ + }catch(Exception $e) { return false; } } diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php index 3548880e834..12f3ec3908d 100644 --- a/apps/files_external/tests/ftp.php +++ b/apps/files_external/tests/ftp.php @@ -7,21 +7,21 @@ */ $config=include('apps/files_external/tests/config.php'); -if(!is_array($config) or !isset($config['ftp']) or !$config['ftp']['run']){ +if(!is_array($config) or !isset($config['ftp']) or !$config['ftp']['run']) { abstract class Test_Filestorage_FTP extends Test_FileStorage{} return; }else{ class Test_Filestorage_FTP extends Test_FileStorage { private $config; - public function setUp(){ + public function setUp() { $id=uniqid(); $this->config=include('apps/files_external/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(){ + public function tearDown() { OCP\Files::rmdirr($this->instance->constructUrl('')); } } diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php index b0bd9cbbeaf..d2a6358ade4 100644 --- a/apps/files_external/tests/google.php +++ b/apps/files_external/tests/google.php @@ -21,7 +21,7 @@ */ $config=include('apps/files_external/tests/config.php'); -if(!is_array($config) or !isset($config['google']) or !$config['google']['run']){ +if(!is_array($config) or !isset($config['google']) or !$config['google']['run']) { abstract class Test_Filestorage_Google extends Test_FileStorage{} return; }else{ @@ -29,14 +29,14 @@ if(!is_array($config) or !isset($config['google']) or !$config['google']['run']) private $config; - public function setUp(){ + public function setUp() { $id=uniqid(); $this->config=include('apps/files_external/tests/config.php'); $this->config['google']['root'].='/'.$id;//make sure we have an new empty folder to work in $this->instance=new OC_Filestorage_Google($this->config['google']); } - public function tearDown(){ + public function tearDown() { $this->instance->rmdir('/'); } } diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php index 001ef842276..7de4fddbb34 100644 --- a/apps/files_external/tests/smb.php +++ b/apps/files_external/tests/smb.php @@ -8,21 +8,21 @@ $config=include('apps/files_external/tests/config.php'); -if(!is_array($config) or !isset($config['smb']) or !$config['smb']['run']){ +if(!is_array($config) or !isset($config['smb']) or !$config['smb']['run']) { abstract class Test_Filestorage_SMB extends Test_FileStorage{} return; }else{ class Test_Filestorage_SMB extends Test_FileStorage { private $config; - public function setUp(){ + public function setUp() { $id=uniqid(); $this->config=include('apps/files_external/tests/config.php'); $this->config['smb']['root'].=$id;//make sure we have an new empty folder to work in $this->instance=new OC_Filestorage_SMB($this->config['smb']); } - public function tearDown(){ + public function tearDown() { OCP\Files::rmdirr($this->instance->constructUrl('')); } } diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php index bfe7b77aac5..a6f5eace1c8 100644 --- a/apps/files_external/tests/swift.php +++ b/apps/files_external/tests/swift.php @@ -7,14 +7,14 @@ */ $config=include('apps/files_external/tests/config.php'); -if(!is_array($config) or !isset($config['swift']) or !$config['swift']['run']){ +if(!is_array($config) or !isset($config['swift']) or !$config['swift']['run']) { abstract class Test_Filestorage_SWIFT extends Test_FileStorage{} return; }else{ class Test_Filestorage_SWIFT extends Test_FileStorage { private $config; - public function setUp(){ + public function setUp() { $id=uniqid(); $this->config=include('apps/files_external/tests/config.php'); $this->config['swift']['root'].='/'.$id;//make sure we have an new empty folder to work in @@ -22,7 +22,7 @@ if(!is_array($config) or !isset($config['swift']) or !$config['swift']['run']){ } - public function tearDown(){ + public function tearDown() { $this->instance->rmdir(''); } diff --git a/apps/files_external/tests/test.php b/apps/files_external/tests/test.php deleted file mode 100644 index 5387279fb07..00000000000 --- a/apps/files_external/tests/test.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -require_once 'files_external/lib/config.php'; -echo "<pre>"; -print_r(OC_Mount_Config::getSystemMountPoints()); -echo "</pre>"; -// OC_Mount_Config::addMountPoint('Photos', 'OC_Filestorage_SWIFT', array('host' => 'gapinthecloud.com', 'user' => 'Gap', 'token' => '23423afdasFJEW22', 'secure' => 'true', 'root' => ''), OC_Mount_Config::MOUNT_TYPE_GROUP, 'admin', false); diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php index 49c44124f3c..74d980aa3f1 100644 --- a/apps/files_external/tests/webdav.php +++ b/apps/files_external/tests/webdav.php @@ -7,21 +7,21 @@ */ $config=include('apps/files_external/tests/config.php'); -if(!is_array($config) or !isset($config['webdav']) or !$config['webdav']['run']){ +if(!is_array($config) or !isset($config['webdav']) or !$config['webdav']['run']) { abstract class Test_Filestorage_DAV extends Test_FileStorage{} return; }else{ class Test_Filestorage_DAV extends Test_FileStorage { private $config; - public function setUp(){ + public function setUp() { $id=uniqid(); $this->config=include('apps/files_external/tests/config.php'); $this->config['webdav']['root'].='/'.$id;//make sure we have an new empty folder to work in $this->instance=new OC_Filestorage_DAV($this->config['webdav']); } - public function tearDown(){ + public function tearDown() { $this->instance->rmdir('/'); } } diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index f38afae3dd8..a700cc2169b 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -1,7 +1,8 @@ body { background:#ddd; } #header { position:fixed; top:0; left:0; right:0; z-index:100; height:2.5em; line-height:2.5em; padding:.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; } #details { color:#fff; } -#download { margin-left:2em; font-weight:bold; color:#fff; } -#preview { min-height:30em; margin:50px auto; border-bottom:1px solid #f8f8f8; background:#eee; text-align:center; } +#header #download { margin-left:2em; font-weight:bold; color:#fff; } +#preview { min-height:30em; margin:50px auto; padding-top:2em; border-bottom:1px solid #f8f8f8; background:#eee; text-align:center; } +#noPreview { display:none; padding-top:5em; } p.info { width:22em; text-align: center; margin:2em auto; color:#777; text-shadow:#fff 0 1px 0; } p.info a { font-weight:bold; color:#777; }
\ No newline at end of file diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 755382e0736..92b626bba18 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -10,8 +10,12 @@ $(document).ready(function() { // Show file preview if previewer is available, images are already handled by the template if (mimetype.substr(0, mimetype.indexOf('/')) != 'image') { // Trigger default action if not download TODO - var action = FileActions.getDefault(mimetype, 'file', FileActions.PERMISSION_READ); - action($('#filename').val()); + var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ); + if (typeof action === 'undefined') { + $('#noPreview').show(); + } else { + action($('#filename').val()); + } } } diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index 79ab4adebac..a171751589a 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -2,7 +2,7 @@ $(document).ready(function() { if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined') { OC.Share.loadIcons('file'); - FileActions.register('all', 'Share', FileActions.PERMISSION_READ, function(filename) { + FileActions.register('all', 'Share', OC.PERMISSION_READ, function(filename) { // Return the correct sharing icon if (scanFiles.scanning) { return; } // workaround to prevent additional http request block scanning feedback if ($('#dir').val() == '/') { diff --git a/apps/files_sharing/l10n/ca.php b/apps/files_sharing/l10n/ca.php index 6931389b9c9..f00d0d72632 100644 --- a/apps/files_sharing/l10n/ca.php +++ b/apps/files_sharing/l10n/ca.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Mida", -"Modified" => "Modificat", -"Delete all" => "Esborra-ho tot", -"Delete" => "Elimina" +"Password" => "Contrasenya", +"Submit" => "Envia", +"Download" => "Baixa", +"No preview available for" => "No hi ha vista prèvia disponible per a", +"web services under your control" => "controleu els vostres serveis web" ); diff --git a/apps/files_sharing/l10n/cs_CZ.php b/apps/files_sharing/l10n/cs_CZ.php index 7c5828a6136..e9185e979cd 100644 --- a/apps/files_sharing/l10n/cs_CZ.php +++ b/apps/files_sharing/l10n/cs_CZ.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Velikost", -"Modified" => "Upraveno", -"Delete all" => "Smazat vše", -"Delete" => "Smazat" +"Password" => "Heslo", +"Submit" => "Odeslat", +"Download" => "Stáhnout", +"No preview available for" => "Náhled není dostupný pro", +"web services under your control" => "služby webu pod Vaší kontrolou" ); diff --git a/apps/files_sharing/l10n/de.php b/apps/files_sharing/l10n/de.php index d42383b43b0..90dce8ec623 100644 --- a/apps/files_sharing/l10n/de.php +++ b/apps/files_sharing/l10n/de.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Größe", -"Modified" => "Geändert", -"Delete all" => "Alle löschen", -"Delete" => "Löschen" +"Password" => "Passwort", +"Submit" => "Absenden", +"Download" => "Download", +"No preview available for" => "Es ist keine Vorschau verfügbar für", +"web services under your control" => "Web-Services unter Ihrer Kontrolle" ); diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php index 63f4c61204a..123a008e554 100644 --- a/apps/files_sharing/l10n/el.php +++ b/apps/files_sharing/l10n/el.php @@ -1,6 +1,4 @@ <?php $TRANSLATIONS = array( -"Size" => "Μέγεθος", -"Modified" => "Τροποποιήθηκε", -"Delete all" => "Διαγραφή όλων", -"Delete" => "Διαγραφή" +"Password" => "Συνθηματικό", +"Submit" => "Καταχώρηση" ); diff --git a/apps/files_sharing/l10n/eo.php b/apps/files_sharing/l10n/eo.php index 81a8dcb1525..5ef330a53e2 100644 --- a/apps/files_sharing/l10n/eo.php +++ b/apps/files_sharing/l10n/eo.php @@ -1,3 +1,4 @@ <?php $TRANSLATIONS = array( -"Delete" => "Forigi" +"Password" => "Pasvorto", +"Submit" => "Sendi" ); diff --git a/apps/files_sharing/l10n/es.php b/apps/files_sharing/l10n/es.php index 85f880927d6..b1d44e5485e 100644 --- a/apps/files_sharing/l10n/es.php +++ b/apps/files_sharing/l10n/es.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Tamaño", -"Modified" => "Modificado", -"Delete all" => "Eliminar todo", -"Delete" => "Eliminar" +"Password" => "Contraseña", +"Submit" => "Enviar", +"Download" => "Descargar", +"No preview available for" => "No hay vista previa disponible para", +"web services under your control" => "Servicios web bajo su control" ); diff --git a/apps/files_sharing/l10n/eu.php b/apps/files_sharing/l10n/eu.php index 916c3151dcf..70ff2e8876c 100644 --- a/apps/files_sharing/l10n/eu.php +++ b/apps/files_sharing/l10n/eu.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Tamaina", -"Modified" => "Aldatuta", -"Delete all" => "Ezabatu dena", -"Delete" => "Ezabatu" +"Password" => "Pasahitza", +"Submit" => "Bidali", +"Download" => "Deskargatu", +"No preview available for" => "Ez dago aurrebista eskuragarririk hauentzat ", +"web services under your control" => "web zerbitzuak zure kontrolpean" ); diff --git a/apps/files_sharing/l10n/fi_FI.php b/apps/files_sharing/l10n/fi_FI.php index ca7928aeecb..85c6c7a7132 100644 --- a/apps/files_sharing/l10n/fi_FI.php +++ b/apps/files_sharing/l10n/fi_FI.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Koko", -"Modified" => "Muokattu", -"Delete all" => "Poista kaikki", -"Delete" => "Poista" +"Password" => "Salasana", +"Submit" => "Lähetä", +"Download" => "Lataa", +"No preview available for" => "Ei esikatselua kohteelle", +"web services under your control" => "verkkopalvelut hallinnassasi" ); diff --git a/apps/files_sharing/l10n/fr.php b/apps/files_sharing/l10n/fr.php index 5a90331e422..54d9e9ec567 100644 --- a/apps/files_sharing/l10n/fr.php +++ b/apps/files_sharing/l10n/fr.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Taille", -"Modified" => "Modifié", -"Delete all" => "Tout effacer", -"Delete" => "Effacement" +"Password" => "Mot de passe", +"Submit" => "Envoyer", +"Download" => "Télécharger", +"No preview available for" => "Pas d'aperçu disponible pour", +"web services under your control" => "services web sous votre contrôle" ); diff --git a/apps/files_sharing/l10n/he.php b/apps/files_sharing/l10n/he.php new file mode 100644 index 00000000000..68a337241da --- /dev/null +++ b/apps/files_sharing/l10n/he.php @@ -0,0 +1,7 @@ +<?php $TRANSLATIONS = array( +"Password" => "ססמה", +"Submit" => "שליחה", +"Download" => "הורדה", +"No preview available for" => "אין תצוגה מקדימה זמינה עבור", +"web services under your control" => "שירותי רשת תחת השליטה שלך" +); diff --git a/apps/files_sharing/l10n/it.php b/apps/files_sharing/l10n/it.php index 7f91b856783..5bedabde9bb 100644 --- a/apps/files_sharing/l10n/it.php +++ b/apps/files_sharing/l10n/it.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Dimensione", -"Modified" => "Modificato", -"Delete all" => "Elimina tutto", -"Delete" => "Eliminazione" +"Password" => "Password", +"Submit" => "Invia", +"Download" => "Scarica", +"No preview available for" => "Nessuna anteprima disponibile per", +"web services under your control" => "servizi web nelle tue mani" ); diff --git a/apps/files_sharing/l10n/ja_JP.php b/apps/files_sharing/l10n/ja_JP.php index 9fca88d0a33..5d63f371d56 100644 --- a/apps/files_sharing/l10n/ja_JP.php +++ b/apps/files_sharing/l10n/ja_JP.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "サイズ", -"Modified" => "変更", -"Delete all" => "すべて削除", -"Delete" => "削除" +"Password" => "パスワード", +"Submit" => "送信", +"Download" => "ダウンロード", +"No preview available for" => "プレビューはありません", +"web services under your control" => "管理下のウェブサービス" ); diff --git a/apps/files_sharing/l10n/nl.php b/apps/files_sharing/l10n/nl.php index d357d66f674..2f732ed662f 100644 --- a/apps/files_sharing/l10n/nl.php +++ b/apps/files_sharing/l10n/nl.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Grootte", -"Modified" => "Aangepast", -"Delete all" => "Verwijder alles", -"Delete" => "Vewijder" +"Password" => "Wachtwoord", +"Submit" => "Verzenden", +"Download" => "Downloaden", +"No preview available for" => "Geen voorbeeldweergave beschikbaar voor", +"web services under your control" => "Webdiensten in eigen beheer" ); diff --git a/apps/files_sharing/l10n/pl.php b/apps/files_sharing/l10n/pl.php index 7f612126b93..1d5e6261ef0 100644 --- a/apps/files_sharing/l10n/pl.php +++ b/apps/files_sharing/l10n/pl.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Rozmiar", -"Modified" => "Zmodyfikowane", -"Delete all" => "Usuń wszystko", -"Delete" => "Usuń" +"Password" => "Hasło", +"Submit" => "Wyślij", +"Download" => "Pobierz", +"No preview available for" => "Podgląd nie jest dostępny dla", +"web services under your control" => "Kontrolowane serwisy" ); diff --git a/apps/files_sharing/l10n/ru.php b/apps/files_sharing/l10n/ru.php index 796403ae998..958ac1030d7 100644 --- a/apps/files_sharing/l10n/ru.php +++ b/apps/files_sharing/l10n/ru.php @@ -1,6 +1,6 @@ <?php $TRANSLATIONS = array( -"Size" => "Размер", -"Modified" => "Изменён", -"Delete all" => "Удалить все", -"Delete" => "Удалить" +"Password" => "Пароль", +"Submit" => "Отправить", +"Download" => "Скачать", +"web services under your control" => "веб-сервисы под вашим управлением" ); diff --git a/apps/files_sharing/l10n/sk_SK.php b/apps/files_sharing/l10n/sk_SK.php new file mode 100644 index 00000000000..ec9fc31c878 --- /dev/null +++ b/apps/files_sharing/l10n/sk_SK.php @@ -0,0 +1,7 @@ +<?php $TRANSLATIONS = array( +"Password" => "Heslo", +"Submit" => "Odoslať", +"Download" => "Stiahnuť", +"No preview available for" => "Žiaden náhľad k dispozícii pre", +"web services under your control" => "webové služby pod Vašou kontrolou" +); diff --git a/apps/files_sharing/l10n/sl.php b/apps/files_sharing/l10n/sl.php index a241c6e504f..5e7d2d5004b 100644 --- a/apps/files_sharing/l10n/sl.php +++ b/apps/files_sharing/l10n/sl.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Velikost", -"Modified" => "Spremenjeno", -"Delete all" => "Izbriši vse", -"Delete" => "Izbriši" +"Password" => "Geslo", +"Submit" => "Pošlji", +"Download" => "Prenesi", +"No preview available for" => "Predogled ni na voljo za", +"web services under your control" => "spletne storitve pod vašim nadzorom" ); diff --git a/apps/files_sharing/l10n/sv.php b/apps/files_sharing/l10n/sv.php index 5a2cda43686..78b19836497 100644 --- a/apps/files_sharing/l10n/sv.php +++ b/apps/files_sharing/l10n/sv.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "Storlek", -"Modified" => "Ändrad", -"Delete all" => "Radera alla", -"Delete" => "Radera" +"Password" => "Lösenord", +"Submit" => "Skicka", +"Download" => "Ladda ner", +"No preview available for" => "Ingen förhandsgranskning tillgänglig för", +"web services under your control" => "webbtjänster under din kontroll" ); diff --git a/apps/files_sharing/l10n/th_TH.php b/apps/files_sharing/l10n/th_TH.php index 3f8908a91a3..8a3f1207db4 100644 --- a/apps/files_sharing/l10n/th_TH.php +++ b/apps/files_sharing/l10n/th_TH.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( -"Size" => "ขนาด", -"Modified" => "แก้ไขแล้ว", -"Delete all" => "ลบทั้งหมด", -"Delete" => "ลบ" +"Password" => "รหัสผ่าน", +"Submit" => "ส่ง", +"Download" => "ดาวน์โหลด", +"No preview available for" => "ไม่สามารถดูตัวอย่างได้สำหรับ", +"web services under your control" => "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้" ); diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php index b1e3ca8b48c..c8821ee0fe8 100644 --- a/apps/files_sharing/lib/share/file.php +++ b/apps/files_sharing/lib/share/file.php @@ -46,9 +46,25 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { return false; } - public function generateTarget($itemSource, $shareWith, $exclude = null) { - // TODO Make sure target path doesn't exist already - return $itemSource; + public function generateTarget($filePath, $shareWith, $exclude = null) { + $target = $filePath; + if (isset($exclude)) { + if ($pos = strrpos($target, '.')) { + $name = substr($target, 0, $pos); + $ext = substr($target, $pos); + } else { + $name = $filePath; + $ext = ''; + } + $i = 2; + $append = ''; + while (in_array($name.$append.$ext, $exclude)) { + $append = ' ('.$i.')'; + $i++; + } + $target = $name.$append.$ext; + } + return $target; } public function formatItems($items, $format, $parameters = null) { @@ -75,6 +91,8 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { // Remove Create permission if type is file $file['permissions'] &= ~OCP\Share::PERMISSION_CREATE; } + // NOTE: Temporary fix to allow unsharing of files in root of Shared directory + $file['permissions'] |= OCP\Share::PERMISSION_DELETE; $files[] = $file; } return $files; diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 6a2905b52c9..6dba76955a0 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -209,7 +209,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { public function isDeletable($path) { if ($path == '') { - return false; + return true; } return ($this->getPermissions($path) & OCP\Share::PERMISSION_DELETE); } @@ -306,9 +306,19 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { public function unlink($path) { // Delete the file if DELETE permission is granted - if (($source = $this->getSourcePath($path)) && $this->isDeletable($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->unlink($this->getInternalPath($source)); + if ($source = $this->getSourcePath($path)) { + if ($this->isDeletable($path)) { + $storage = OC_Filesystem::getStorage($source); + return $storage->unlink($this->getInternalPath($source)); + } else if (dirname($path) == '/' || dirname($path) == '.') { + // Unshare the file from the user if in the root of the Shared folder + if ($this->is_dir($path)) { + $itemType = 'folder'; + } else { + $itemType = 'file'; + } + return OCP\Share::unshareFromSelf($itemType, $path); + } } return false; } @@ -433,7 +443,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { * @param int $time * @return bool */ - public function hasUpdated($path,$time){ + public function hasUpdated($path,$time) { //TODO return false; } diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 7f72ef81bd3..010f6b9de18 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -6,9 +6,8 @@ if (isset($_GET['file'])) { $uidOwner = substr($_GET['file'], 1, $pos - 1); if (OCP\User::userExists($uidOwner)) { OC_Util::setupFS($uidOwner); - $file = substr($_GET['file'], $pos); $fileSource = OC_Filecache::getId($_GET['file'], ''); - if ($linkItem = OCP\Share::getItemSharedWithByLink('file', $fileSource, $uidOwner)) { + if ($fileSource != -1 && ($linkItem = OCP\Share::getItemSharedWithByLink('file', $fileSource, $uidOwner))) { if (isset($linkItem['share_with'])) { // Check password if (isset($_POST['password'])) { diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 36e159dafee..ca48a35575e 100755 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -13,5 +13,13 @@ <?php if (substr($_['mimetype'], 0 , strpos($_['mimetype'], '/')) == 'image'): ?> <img src="<?php echo $_['downloadURL']; ?>" /> <?php endif; ?> + <ul id="noPreview"> + <li class="error"> + <?php echo $l->t('No preview available for').' '.$_['filename']; ?><br /> + <a href="<?php echo $_['downloadURL']; ?>" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a> + </li> + </ul> + <div id="content"></div> + <table></table> </div> <footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> – <?php echo $l->t('web services under your control'); ?></p></footer>
\ No newline at end of file diff --git a/apps/files_versions/ajax/expireAll.php b/apps/files_versions/ajax/expireAll.php index f76da3da986..5c95885ffbd 100644 --- a/apps/files_versions/ajax/expireAll.php +++ b/apps/files_versions/ajax/expireAll.php @@ -31,7 +31,7 @@ OCP\JSON::callCheck(); $versions = new OCA_Versions\Storage(); -if( $versions->expireAll() ){ +if( $versions->expireAll() ) { OCP\JSON::success(); die(); diff --git a/apps/files_versions/ajax/rollbackVersion.php b/apps/files_versions/ajax/rollbackVersion.php index 24d71a914a4..f1b02eb4b92 100644 --- a/apps/files_versions/ajax/rollbackVersion.php +++ b/apps/files_versions/ajax/rollbackVersion.php @@ -9,7 +9,7 @@ $file = $_GET['file']; $revision=(int)$_GET['revision']; if( OCA_Versions\Storage::isversioned( $file ) ) { - if(OCA_Versions\Storage::rollback( $file, $revision )){ + if(OCA_Versions\Storage::rollback( $file, $revision )) { OCP\JSON::success(array("data" => array( "revision" => $revision, "file" => $file ))); }else{ OCP\JSON::error(array("data" => array( "message" => "Could not revert:" . $file ))); diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 9ac7f6d5cde..746f89a8139 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -1,6 +1,6 @@ <?php -//require_once('files_versions/versions.php'); +//require_once 'files_versions/versions.php'; OC::$CLASSPATH['OCA_Versions\Storage'] = 'apps/files_versions/lib/versions.php'; OC::$CLASSPATH['OCA_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php'; diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js index e34a6f50cac..1c8d083ea42 100644 --- a/apps/files_versions/js/versions.js +++ b/apps/files_versions/js/versions.js @@ -11,7 +11,7 @@ $(document).ready(function() { $(document).ready(function(){ if (typeof FileActions !== 'undefined') { // Add history button to files/index.php - FileActions.register('file','History', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/history')},function(filename){ + FileActions.register('file','History', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/history');},function(filename){ if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback @@ -76,7 +76,7 @@ function createVersionsDropdown(filename, files) { $('#found_versions').change(function(){ var revision=parseInt($(this).val()); revertFile(files,revision); - }) + }); } }); diff --git a/apps/files_versions/l10n/ca.php b/apps/files_versions/l10n/ca.php index 8388556bec6..b6ddc6feecf 100644 --- a/apps/files_versions/l10n/ca.php +++ b/apps/files_versions/l10n/ca.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Expira totes les versions", +"Versions" => "Versions", +"This will delete all existing backup versions of your files" => "Això eliminarà totes les versions de còpia de seguretat dels vostres fitxers", "Enable Files Versioning" => "Habilita les versions de fitxers" ); diff --git a/apps/files_versions/l10n/cs_CZ.php b/apps/files_versions/l10n/cs_CZ.php index 3297648fa30..4f33c1915f2 100644 --- a/apps/files_versions/l10n/cs_CZ.php +++ b/apps/files_versions/l10n/cs_CZ.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( -"Expire all versions" => "Vypršení všech verzí", +"Expire all versions" => "Vypršet všechny verze", +"Versions" => "Verze", +"This will delete all existing backup versions of your files" => "Odstraní všechny existující zálohované verze Vašich souborů", "Enable Files Versioning" => "Povolit verzování souborů" ); diff --git a/apps/files_versions/l10n/de.php b/apps/files_versions/l10n/de.php index 3d1a0a43f5e..2c15884d1b5 100644 --- a/apps/files_versions/l10n/de.php +++ b/apps/files_versions/l10n/de.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Alle Versionen löschen", +"Versions" => "Versionen", +"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Ihrer Dateien.", "Enable Files Versioning" => "Datei-Versionierung aktivieren" ); diff --git a/apps/files_versions/l10n/es.php b/apps/files_versions/l10n/es.php index be416f5bfba..83d7ed0da2c 100644 --- a/apps/files_versions/l10n/es.php +++ b/apps/files_versions/l10n/es.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Expirar todas las versiones", +"Versions" => "Versiones", +"This will delete all existing backup versions of your files" => "Esto eliminará todas las versiones guardadas como copia de seguridad de tus archivos", "Enable Files Versioning" => "Habilitar versionamiento de archivos" ); diff --git a/apps/files_versions/l10n/eu.php b/apps/files_versions/l10n/eu.php index eacbdd09934..0f065c1e93c 100644 --- a/apps/files_versions/l10n/eu.php +++ b/apps/files_versions/l10n/eu.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Iraungi bertsio guztiak", +"Versions" => "Bertsioak", +"This will delete all existing backup versions of your files" => "Honek zure fitxategien bertsio guztiak ezabatuko ditu", "Enable Files Versioning" => "Gaitu fitxategien bertsioak" ); diff --git a/apps/files_versions/l10n/fi_FI.php b/apps/files_versions/l10n/fi_FI.php index c5092daf998..5cfcbf28bd4 100644 --- a/apps/files_versions/l10n/fi_FI.php +++ b/apps/files_versions/l10n/fi_FI.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Vanhenna kaikki versiot", +"Versions" => "Versiot", +"This will delete all existing backup versions of your files" => "Tämä poistaa kaikki tiedostojesi olemassa olevat varmuuskopioversiot", "Enable Files Versioning" => "Käytä tiedostojen versiointia" ); diff --git a/apps/files_versions/l10n/fr.php b/apps/files_versions/l10n/fr.php index 02209f543b1..965fa02de98 100644 --- a/apps/files_versions/l10n/fr.php +++ b/apps/files_versions/l10n/fr.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Supprimer les versions intermédiaires", +"Versions" => "Versions", +"This will delete all existing backup versions of your files" => "Cette opération va effacer toutes les versions intermédiaires de vos fichiers (et ne garder que la dernière version en date).", "Enable Files Versioning" => "Activer le versionnage" ); diff --git a/apps/files_versions/l10n/he.php b/apps/files_versions/l10n/he.php new file mode 100644 index 00000000000..097169b2a49 --- /dev/null +++ b/apps/files_versions/l10n/he.php @@ -0,0 +1,6 @@ +<?php $TRANSLATIONS = array( +"Expire all versions" => "הפגת תוקף כל הגרסאות", +"Versions" => "גרסאות", +"This will delete all existing backup versions of your files" => "פעולה זו תמחק את כל גיבויי הגרסאות הקיימים של הקבצים שלך", +"Enable Files Versioning" => "הפעלת ניהול גרסאות לקבצים" +); diff --git a/apps/files_versions/l10n/it.php b/apps/files_versions/l10n/it.php index 9711ce18aa8..b7b0b9627b1 100644 --- a/apps/files_versions/l10n/it.php +++ b/apps/files_versions/l10n/it.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Scadenza di tutte le versioni", +"Versions" => "Versioni", +"This will delete all existing backup versions of your files" => "Ciò eliminerà tutte le versioni esistenti dei tuoi file", "Enable Files Versioning" => "Abilita controllo di versione" ); diff --git a/apps/files_versions/l10n/ja_JP.php b/apps/files_versions/l10n/ja_JP.php index ec5e32f3e29..81d17f56f8f 100644 --- a/apps/files_versions/l10n/ja_JP.php +++ b/apps/files_versions/l10n/ja_JP.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "すべてのバージョンを削除する", +"Versions" => "バージョン", +"This will delete all existing backup versions of your files" => "これは、あなたのファイルのすべてのバックアップバージョンを削除します", "Enable Files Versioning" => "ファイルのバージョン管理を有効にする" ); diff --git a/apps/files_versions/l10n/nl.php b/apps/files_versions/l10n/nl.php index 87e72a36202..da31603ff54 100644 --- a/apps/files_versions/l10n/nl.php +++ b/apps/files_versions/l10n/nl.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Alle versies laten verlopen", +"Versions" => "Versies", +"This will delete all existing backup versions of your files" => "Dit zal alle bestaande backup versies van uw bestanden verwijderen", "Enable Files Versioning" => "Activeer file versioning" ); diff --git a/apps/files_versions/l10n/pl.php b/apps/files_versions/l10n/pl.php index faf2d39e709..c25d37611a0 100644 --- a/apps/files_versions/l10n/pl.php +++ b/apps/files_versions/l10n/pl.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Wygasają wszystkie wersje", +"Versions" => "Wersje", +"This will delete all existing backup versions of your files" => "Spowoduje to usunięcie wszystkich istniejących wersji kopii zapasowych plików", "Enable Files Versioning" => "Włącz wersjonowanie plików" ); diff --git a/apps/files_versions/l10n/sl.php b/apps/files_versions/l10n/sl.php index e7db55930c1..aec6edb3c22 100644 --- a/apps/files_versions/l10n/sl.php +++ b/apps/files_versions/l10n/sl.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Zastaraj vse različice", +"Versions" => "Različice", +"This will delete all existing backup versions of your files" => "To bo izbrisalo vse obstoječe različice varnostnih kopij vaših datotek", "Enable Files Versioning" => "Omogoči sledenje različicam datotek" ); diff --git a/apps/files_versions/l10n/sv.php b/apps/files_versions/l10n/sv.php index 03d4d54d0b9..5788d8ae197 100644 --- a/apps/files_versions/l10n/sv.php +++ b/apps/files_versions/l10n/sv.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "Upphör alla versioner", +"Versions" => "Versioner", +"This will delete all existing backup versions of your files" => "Detta kommer att radera alla befintliga säkerhetskopior av dina filer", "Enable Files Versioning" => "Aktivera versionshantering" ); diff --git a/apps/files_versions/l10n/th_TH.php b/apps/files_versions/l10n/th_TH.php index e880840f4b9..4f26e3bd035 100644 --- a/apps/files_versions/l10n/th_TH.php +++ b/apps/files_versions/l10n/th_TH.php @@ -1,4 +1,6 @@ <?php $TRANSLATIONS = array( "Expire all versions" => "หมดอายุทุกรุ่น", +"Versions" => "รุ่น", +"This will delete all existing backup versions of your files" => "นี่จะเป็นลบทิ้งไฟล์รุ่นที่ทำการสำรองข้อมูลทั้งหมดที่มีอยู่ของคุณทิ้งไป", "Enable Files Versioning" => "เปิดใช้งานคุณสมบัติการแยกสถานะรุ่นหรือเวอร์ชั่นของไฟล์" ); diff --git a/apps/files_versions/l10n/zh_CN.php b/apps/files_versions/l10n/zh_CN.php new file mode 100644 index 00000000000..56a474be89a --- /dev/null +++ b/apps/files_versions/l10n/zh_CN.php @@ -0,0 +1,6 @@ +<?php $TRANSLATIONS = array( +"Expire all versions" => "过期所有版本", +"Versions" => "版本", +"This will delete all existing backup versions of your files" => "将会删除您的文件的所有备份版本", +"Enable Files Versioning" => "开启文件版本" +); diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php index bfc8fd3a378..9ec0b01a7f9 100644 --- a/apps/files_versions/lib/hooks.php +++ b/apps/files_versions/lib/hooks.php @@ -9,7 +9,7 @@ /** * This class contains all hooks. */ - + namespace OCA_Versions; class Hooks { @@ -18,58 +18,58 @@ class Hooks { * listen to write event. */ public static function write_hook( $params ) { - + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - + $versions = new Storage( new \OC_FilesystemView('') ); - + $path = $params[\OC_Filesystem::signal_param_path]; - + if($path<>'') $versions->store( $path ); - + } } - - /**
- * @brief Erase versions of deleted file
- * @param array
- *
- * This function is connected to the delete signal of OC_Filesystem
- * cleanup the versions directory if the actual file gets deleted
- */
+ + /** + * @brief Erase versions of deleted file + * @param array + * + * This function is connected to the delete signal of OC_Filesystem + * cleanup the versions directory if the actual file gets deleted + */ public static function remove_hook($params) { - $versions_fileview = \OCP\Files::getStorage('files_versions');
- $rel_path = $params['path'];
- $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_path.'.v';
- if(Storage::isversioned($rel_path)) {
- $versions = Storage::getVersions($rel_path);
- foreach ($versions as $v){
- unlink($abs_path . $v['version']);
- }
- }
- }
-
- /**
- * @brief rename/move versions of renamed/moved files
- * @param array with oldpath and newpath
- *
- * This function is connected to the rename signal of OC_Filesystem and adjust the name and location
- * of the stored versions along the actual file
- */
+ $versions_fileview = \OCP\Files::getStorage('files_versions'); + $rel_path = $params['path']; + $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_path.'.v'; + if(Storage::isversioned($rel_path)) { + $versions = Storage::getVersions($rel_path); + foreach ($versions as $v) { + unlink($abs_path . $v['version']); + } + } + } + + /** + * @brief rename/move versions of renamed/moved files + * @param array with oldpath and newpath + * + * This function is connected to the rename signal of OC_Filesystem and adjust the name and location + * of the stored versions along the actual file + */ public static function rename_hook($params) { - $versions_fileview = \OCP\Files::getStorage('files_versions');
- $rel_oldpath = $params['oldpath'];
- $abs_oldpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_oldpath.'.v';
- $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v';
+ $versions_fileview = \OCP\Files::getStorage('files_versions'); + $rel_oldpath = $params['oldpath']; + $abs_oldpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_oldpath.'.v'; + $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v'; if(Storage::isversioned($rel_oldpath)) { - $info=pathinfo($abs_newpath);
- if(!file_exists($info['dirname'])) mkdir($info['dirname'],0700,true);
- $versions = Storage::getVersions($rel_oldpath);
- foreach ($versions as $v){
- rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
- }
- }
+ $info=pathinfo($abs_newpath); + if(!file_exists($info['dirname'])) mkdir($info['dirname'],0700,true); + $versions = Storage::getVersions($rel_oldpath); + foreach ($versions as $v) { + rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']); + } + } } - + } diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index 30f0b93a7ff..dedd83fc25a 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -1,311 +1,311 @@ -<?php
-/**
- * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * Versions
- *
- * A class to handle the versioning of files.
- */
-
-namespace OCA_Versions;
-
-class Storage {
-
-
- // config.php configuration:
- // - files_versions
- // - files_versionsfolder
- // - files_versionsblacklist
- // - files_versionsmaxfilesize
- // - files_versionsinterval
- // - files_versionmaxversions
- //
- // todo:
- // - finish porting to OC_FilesystemView to enable network transparency
- // - add transparent compression. first test if it´s worth it.
-
- const DEFAULTENABLED=true;
- const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp';
- const DEFAULTMAXFILESIZE=1048576; // 10MB
- const DEFAULTMININTERVAL=60; // 1 min
- const DEFAULTMAXVERSIONS=50;
-
- private $view;
-
- function __construct() {
-
- $this->view = \OCP\Files::getStorage('files_versions');
-
- }
-
- /**
- * listen to write event.
- */
- public static function write_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $path = $params[\OC_Filesystem::signal_param_path];
- if($path<>'') $this->store($path);
- }
- }
-
-
-
- /**
- * store a new version of a file.
- */
- public function store($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- $files_view = \OCP\Files::getStorage("files");
- $users_view = \OCP\Files::getStorage("files_versions");
- $users_view->chroot(\OCP\User::getUser().'/');
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
-
- $versionsFolderName=\OCP\Config::getSystemValue('datadirectory') . $this->view->getAbsolutePath('');
-
- //check if source file already exist as version to avoid recursions.
- if ($users_view->file_exists($filename)) {
- return false;
- }
-
- // check if filename is a directory
- if($files_view->is_dir($filename)){
- return false;
- }
-
- // check filetype blacklist
- $blacklist=explode(' ',\OCP\Config::getSystemValue('files_versionsblacklist', Storage::DEFAULTBLACKLIST));
- foreach($blacklist as $bl) {
- $parts=explode('.', $filename);
- $ext=end($parts);
- if(strtolower($ext)==$bl) {
- return false;
- }
- }
-
- // check filesize
- if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)){
- return false;
- }
-
-
- // check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval)
- if ($uid == \OCP\User::getUser()) {
- $matches=glob($versionsFolderName.'/'.$filename.'.v*');
- sort($matches);
- $parts=explode('.v',end($matches));
- if((end($parts)+Storage::DEFAULTMININTERVAL)>time()){
- return false;
- }
- }
-
-
- // create all parent folders
- $info=pathinfo($filename);
- if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true);
-
- // store a new version of a file
- @$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
-
- // expire old revisions if necessary
- Storage::expire($filename);
- }
- }
-
-
- /**
- * rollback to an old version of a file.
- */
- public static function rollback($filename,$revision) {
-
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $users_view = \OCP\Files::getStorage("files_versions");
- $users_view->chroot(\OCP\User::getUser().'/');
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
-
- // rollback
- if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
-
- return true;
-
- }else{
-
- return false;
-
- }
-
- }
-
- }
-
- /**
- * check if old versions of a file exist.
- */
- public static function isversioned($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $versions_fileview = \OCP\Files::getStorage("files_versions");
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $filename = substr($source, $pos + 6);
- //}
-
- $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
-
- // check for old versions
- $matches=glob($versionsFolderName.$filename.'.v*');
- if(count($matches)>0){
- return true;
- }else{
- return false;
- }
- }else{
- return(false);
- }
- }
-
-
-
- /**
- * @brief get a list of all available versions of a file in descending chronological order
- * @param $filename file to find versions of, relative to the user files dir
- * @param $count number of versions to return
- * @returns array
- */
- public static function getVersions( $filename, $count = 0 ) {
-
- if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
- $versions_fileview = \OCP\Files::getStorage('files_versions');
- $versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
- $versions = array();
-
- // fetch for old versions
- $matches = glob( $versionsFolderName.'/'.$filename.'.v*' );
-
- sort( $matches );
-
- $i = 0;
-
- $files_view = \OCP\Files::getStorage('files');
- $local_file = $files_view->getLocalFile($filename);
- foreach( $matches as $ma ) {
-
- $i++;
- $versions[$i]['cur'] = 0;
- $parts = explode( '.v', $ma );
- $versions[$i]['version'] = ( end( $parts ) );
-
- // if file with modified date exists, flag it in array as currently enabled version
- ( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$i]['fileMatch'] = 1 : $versions[$i]['fileMatch'] = 0 );
-
- }
-
- $versions = array_reverse( $versions );
-
- foreach( $versions as $key => $value ) {
-
- // flag the first matched file in array (which will have latest modification date) as current version
- if ( $value['fileMatch'] ) {
-
- $value['cur'] = 1;
- break;
-
- }
-
- }
-
- $versions = array_reverse( $versions );
-
- // only show the newest commits
- if( $count != 0 and ( count( $versions )>$count ) ) {
-
- $versions = array_slice( $versions, count( $versions ) - $count );
-
- }
-
- return( $versions );
-
-
- } else {
-
- // if versioning isn't enabled then return an empty array
- return( array() );
-
- }
-
- }
-
- /**
- * @brief Erase a file's versions which exceed the set quota
- */
- public static function expire($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
- $versions_fileview = \OCP\Files::getStorage("files_versions");
- $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
-
- // check for old versions
- $matches = glob( $versionsFolderName.'/'.$filename.'.v*' );
-
- if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) {
-
- $numberToDelete = count( $matches-\OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) );
-
- // delete old versions of a file
- $deleteItems = array_slice( $matches, 0, $numberToDelete );
-
- foreach( $deleteItems as $de ) {
-
- unlink( $versionsFolderName.'/'.$filename.'.v'.$de );
-
- }
- }
- }
- }
-
- /**
- * @brief Erase all old versions of all user files
- * @return true/false
- */
- public function expireAll() {
- return $this->view->deleteAll('', true);
- }
-}
+<?php +/** + * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +/** + * Versions + * + * A class to handle the versioning of files. + */ + +namespace OCA_Versions; + +class Storage { + + + // config.php configuration: + // - files_versions + // - files_versionsfolder + // - files_versionsblacklist + // - files_versionsmaxfilesize + // - files_versionsinterval + // - files_versionmaxversions + // + // todo: + // - finish porting to OC_FilesystemView to enable network transparency + // - add transparent compression. first test if it´s worth it. + + const DEFAULTENABLED=true; + const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp'; + const DEFAULTMAXFILESIZE=1048576; // 10MB + const DEFAULTMININTERVAL=60; // 1 min + const DEFAULTMAXVERSIONS=50; + + private $view; + + function __construct() { + + $this->view = \OCP\Files::getStorage('files_versions'); + + } + + /** + * listen to write event. + */ + public static function write_hook($params) { + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + $path = $params[\OC_Filesystem::signal_param_path]; + if($path<>'') $this->store($path); + } + } + + + + /** + * store a new version of a file. + */ + public function store($filename) { + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + + $files_view = \OCP\Files::getStorage("files"); + $users_view = \OCP\Files::getStorage("files_versions"); + $users_view->chroot(\OCP\User::getUser().'/'); + + //FIXME OC_Share no longer exists + //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + // $pos = strpos($source, '/files', 1); + // $uid = substr($source, 1, $pos - 1); + // $filename = substr($source, $pos + 6); + //} else { + $uid = \OCP\User::getUser(); + //} + + $versionsFolderName=\OCP\Config::getSystemValue('datadirectory') . $this->view->getAbsolutePath(''); + + //check if source file already exist as version to avoid recursions. + if ($users_view->file_exists($filename)) { + return false; + } + + // check if filename is a directory + if($files_view->is_dir($filename)) { + return false; + } + + // check filetype blacklist + $blacklist=explode(' ',\OCP\Config::getSystemValue('files_versionsblacklist', Storage::DEFAULTBLACKLIST)); + foreach($blacklist as $bl) { + $parts=explode('.', $filename); + $ext=end($parts); + if(strtolower($ext)==$bl) { + return false; + } + } + + // check filesize + if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)) { + return false; + } + + + // check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval) + if ($uid == \OCP\User::getUser()) { + $matches=glob($versionsFolderName.'/'.$filename.'.v*'); + sort($matches); + $parts=explode('.v',end($matches)); + if((end($parts)+Storage::DEFAULTMININTERVAL)>time()) { + return false; + } + } + + + // create all parent folders + $info=pathinfo($filename); + if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true); + + // store a new version of a file + @$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time()); + + // expire old revisions if necessary + Storage::expire($filename); + } + } + + + /** + * rollback to an old version of a file. + */ + public static function rollback($filename,$revision) { + + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + $users_view = \OCP\Files::getStorage("files_versions"); + $users_view->chroot(\OCP\User::getUser().'/'); + + //FIXME OC_Share no longer exists + //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + // $pos = strpos($source, '/files', 1); + // $uid = substr($source, 1, $pos - 1); + // $filename = substr($source, $pos + 6); + //} else { + $uid = \OCP\User::getUser(); + //} + + // rollback + if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) { + + return true; + + }else{ + + return false; + + } + + } + + } + + /** + * check if old versions of a file exist. + */ + public static function isversioned($filename) { + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + $versions_fileview = \OCP\Files::getStorage("files_versions"); + //FIXME OC_Share no longer exists + //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + // $pos = strpos($source, '/files', 1); + // $filename = substr($source, $pos + 6); + //} + + $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); + + // check for old versions + $matches=glob($versionsFolderName.$filename.'.v*'); + if(count($matches)>0) { + return true; + }else{ + return false; + } + }else{ + return(false); + } + } + + + + /** + * @brief get a list of all available versions of a file in descending chronological order + * @param $filename file to find versions of, relative to the user files dir + * @param $count number of versions to return + * @returns array + */ + public static function getVersions( $filename, $count = 0 ) { + + if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { + + //FIXME OC_Share no longer exists + //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + // $pos = strpos($source, '/files', 1); + // $uid = substr($source, 1, $pos - 1); + // $filename = substr($source, $pos + 6); + //} else { + $uid = \OCP\User::getUser(); + //} + $versions_fileview = \OCP\Files::getStorage('files_versions'); + $versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); + $versions = array(); + + // fetch for old versions + $matches = glob( $versionsFolderName.'/'.$filename.'.v*' ); + + sort( $matches ); + + $i = 0; + + $files_view = \OCP\Files::getStorage('files'); + $local_file = $files_view->getLocalFile($filename); + foreach( $matches as $ma ) { + + $i++; + $versions[$i]['cur'] = 0; + $parts = explode( '.v', $ma ); + $versions[$i]['version'] = ( end( $parts ) ); + + // if file with modified date exists, flag it in array as currently enabled version + ( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$i]['fileMatch'] = 1 : $versions[$i]['fileMatch'] = 0 ); + + } + + $versions = array_reverse( $versions ); + + foreach( $versions as $key => $value ) { + + // flag the first matched file in array (which will have latest modification date) as current version + if ( $value['fileMatch'] ) { + + $value['cur'] = 1; + break; + + } + + } + + $versions = array_reverse( $versions ); + + // only show the newest commits + if( $count != 0 and ( count( $versions )>$count ) ) { + + $versions = array_slice( $versions, count( $versions ) - $count ); + + } + + return( $versions ); + + + } else { + + // if versioning isn't enabled then return an empty array + return( array() ); + + } + + } + + /** + * @brief Erase a file's versions which exceed the set quota + */ + public static function expire($filename) { + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + + //FIXME OC_Share no longer exists + //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + // $pos = strpos($source, '/files', 1); + // $uid = substr($source, 1, $pos - 1); + // $filename = substr($source, $pos + 6); + //} else { + $uid = \OCP\User::getUser(); + //} + $versions_fileview = \OCP\Files::getStorage("files_versions"); + $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); + + // check for old versions + $matches = glob( $versionsFolderName.'/'.$filename.'.v*' ); + + if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) { + + $numberToDelete = count( $matches-\OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ); + + // delete old versions of a file + $deleteItems = array_slice( $matches, 0, $numberToDelete ); + + foreach( $deleteItems as $de ) { + + unlink( $versionsFolderName.'/'.$filename.'.v'.$de ); + + } + } + } + } + + /** + * @brief Erase all old versions of all user files + * @return true/false + */ + public function expireAll() { + return $this->view->deleteAll('', true); + } +} diff --git a/apps/files_versions/templates/history.php b/apps/files_versions/templates/history.php index d4f875a36e8..99bc153a816 100644 --- a/apps/files_versions/templates/history.php +++ b/apps/files_versions/templates/history.php @@ -22,7 +22,7 @@ if( isset( $_['message'] ) ) { foreach ( $_['versions'] as $v ) { echo ' '; echo OCP\Util::formatDate( doubleval($v['version']) ); - echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php').'?path='.urlencode( $_['path'] ).'&revert='. $v['version'] .'" class="button">Revert</a><br /><br />'; + echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php', array('path' => urlencode( $_['path'] ), 'revert' => $v['version'])) .'" class="button">Revert</a><br /><br />'; if ( $v['cur'] ) { echo ' (<b>Current</b>)'; } echo '<br /><br />'; } diff --git a/apps/files_versions/templates/settings-personal.php b/apps/files_versions/templates/settings-personal.php index fe9ba381e58..6d97cea46c3 100644 --- a/apps/files_versions/templates/settings-personal.php +++ b/apps/files_versions/templates/settings-personal.php @@ -1,9 +1,14 @@ <form id="versions"> <fieldset class="personalblock"> <legend> - <strong>Versions</strong><!-- translate using echo $l->t('foo'); --> + <strong><?php echo $l->t('Versions'); ?></strong> </legend> - <p>This will delete all existing backup versions of your files</p><!-- translate using echo $l->t('foo'); --> - <button id="expireAllBtn">Expire all versions<img style="display: none;" class="expireAllLoading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /></button> + <p> + <?php echo $l->t('This will delete all existing backup versions of your files'); ?> + </p> + <button id="expireAllBtn"> + <?php echo $l->t('Expire all versions'); ?> + <img style="display: none;" class="expireAllLoading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /> + </button> </fieldset> </form> diff --git a/apps/user_ldap/appinfo/install.php b/apps/user_ldap/appinfo/install.php index 9efc3bb24d2..378957ec409 100644 --- a/apps/user_ldap/appinfo/install.php +++ b/apps/user_ldap/appinfo/install.php @@ -1,6 +1,6 @@ <?php $state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'doSet'); -if($state == 'doSet'){ +if($state == 'doSet') { OCP\Config::setSystemValue('ldapIgnoreNamingRules', false); } diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php index f06655c1dc1..f23285a0dc6 100644 --- a/apps/user_ldap/appinfo/update.php +++ b/apps/user_ldap/appinfo/update.php @@ -18,7 +18,7 @@ if(!is_null($pw)) { //detect if we can switch on naming guidelines. We won't do it on conflicts. //it's a bit spaghetti, but hey. $state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'unset'); -if($state == 'unset'){ +if($state == 'unset') { OCP\Config::setSystemValue('ldapIgnoreNamingRules', false); } @@ -34,7 +34,7 @@ $groupBE = new \OCA\user_ldap\GROUP_LDAP(); $groupBE->setConnector($connector); foreach($objects as $object) { - $fetchDNSql = 'SELECT `ldap_dn` FROM `*PREFIX*ldap_'.$object.'_mapping`'; + $fetchDNSql = 'SELECT `ldap_dn`, `owncloud_name` FROM `*PREFIX*ldap_'.$object.'_mapping` WHERE `directory_uuid` = ""'; $updateSql = 'UPDATE `*PREFIX*ldap_'.$object.'_mapping` SET `ldap_DN` = ?, `directory_uuid` = ? WHERE `ldap_dn` = ?'; $query = OCP\DB::prepare($fetchDNSql); @@ -45,6 +45,8 @@ foreach($objects as $object) { $newDN = mb_strtolower($dn['ldap_dn'], 'UTF-8'); if($object == 'user') { $uuid = $userBE->getUUID($newDN); + //fix home folder to avoid new ones depending on the configuration + $userBE->getHome($dn['owncloud_name']); } else { $uuid = $groupBE->getUUID($newDN); } diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version index e689e4949ef..444b3e8a75a 100644 --- a/apps/user_ldap/appinfo/version +++ b/apps/user_ldap/appinfo/version @@ -1 +1 @@ -0.2.0.26
\ No newline at end of file +0.2.0.30
\ No newline at end of file diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index aac3ed78917..5ec259f6c47 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -231,7 +231,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { * @param string $gid * @return bool */ - public function groupExists($gid){ + public function groupExists($gid) { if($this->connection->isCached('groupExists'.$gid)) { return $this->connection->getFromCache('groupExists'.$gid); } diff --git a/apps/user_ldap/l10n/ca.php b/apps/user_ldap/l10n/ca.php index 04b0f8997db..be72912040d 100644 --- a/apps/user_ldap/l10n/ca.php +++ b/apps/user_ldap/l10n/ca.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP a usar per generar el nom de grup ownCloud.", "in bytes" => "en bytes", "in seconds. A change empties the cache." => "en segons. Un canvi buidarà la memòria de cau.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixeu-ho buit pel nom d'usuari (per defecte). Altrament, especifiqueu un atribut LDAP/AD.", "Help" => "Ajuda" ); diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php index 6c0f227fa7a..c90dc9ed568 100644 --- a/apps/user_ldap/l10n/cs_CZ.php +++ b/apps/user_ldap/l10n/cs_CZ.php @@ -1,36 +1,37 @@ <?php $TRANSLATIONS = array( -"Host" => "Hostitel", -"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Nelze vynechat protokol vyžadující SSL. Začněte s ldaps://", -"Base DN" => "Base DN", -"You can specify Base DN for users and groups in the Advanced tab" => "V Rozšířeném nastavení můžete specifikovat pro své uživatele a skupiny element Base DN", -"User DN" => "DN uživatele", +"Host" => "Počítač", +"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy začněte s ldaps://", +"Base DN" => "Základní DN", +"You can specify Base DN for users and groups in the Advanced tab" => "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", +"User DN" => "Uživatelské DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klentského uživatele ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte údaje DN and Heslo prázdné.", "Password" => "Heslo", -"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup ponechte údaje DN and Heslo prázdné.", -"User Login Filter" => "Filtr uživatelských loginů", -"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definuje filtr, který je aplikován v průběhu logování. %%uid nahrazuje uživatelské jméno během logování.", -"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použijte %%uid pro rezervované místo, např. \"uid=%%uid\"", -"User List Filter" => "Filtr uživateslkých seznamů", -"Defines the filter to apply, when retrieving users." => "Defunije filtr, který je plaikován při návratu uživatelů.", -"without any placeholder, e.g. \"objectClass=person\"." => "bez rezervace místa, např. \"objectClass=person\".", -"Group Filter" => "Filtr skupiny", -"Defines the filter to apply, when retrieving groups." => "Definuje filtr, který je aplikován při návratu skupin", -"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez rezervace místa, např. \"objectClass=posixGroup\".", +"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup, ponechte údaje DN and heslo prázdné.", +"User Login Filter" => "Filtr přihlášení uživatelů", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Určuje použitý filtr, při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení.", +"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použijte zástupný vzor %%uid, např. \"uid=%%uid\"", +"User List Filter" => "Filtr uživatelských seznamů", +"Defines the filter to apply, when retrieving users." => "Určuje použitý filtr, pro získávaní uživatelů.", +"without any placeholder, e.g. \"objectClass=person\"." => "bez zástupných znaků, např. \"objectClass=person\".", +"Group Filter" => "Filtr skupin", +"Defines the filter to apply, when retrieving groups." => "Určuje použitý filtr, pro získávaní skupin.", +"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znaků, např. \"objectClass=posixGroup\".", "Port" => "Port", "Base User Tree" => "Základní uživatelský strom", "Base Group Tree" => "Základní skupinový strom", "Group-Member association" => "Asociace člena skupiny", -"Use TLS" => "Použijte TLS", -"Do not use it for SSL connections, it will fail." => "Nepoužívejte pro SSL připojení, připojení selže.", +"Use TLS" => "Použít TLS", +"Do not use it for SSL connections, it will fail." => "Nepoužívejte pro připojení pomocí SSL, připojení selže.", "Case insensitve LDAP server (Windows)" => "LDAP server nerozlišující velikost znaků (Windows)", -"Turn off SSL certificate validation." => "Vypněte ověřování SSL certifikátu", -"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "pokud pracuje připojení pouze pokud je teto volba aktivní, importujte SSL certifikát LDAP serveru do Vašeho serveru ownCloud.", -"Not recommended, use for testing only." => "Není doporučeno, pouze pro účely testování.", +"Turn off SSL certificate validation." => "Vypnout ověřování SSL certifikátu.", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Pokud připojení pracuje pouze s touto možností, tak importujte SSL certifikát SSL serveru do Vašeho serveru ownCloud", +"Not recommended, use for testing only." => "Není doporučeno, pouze pro testovací účely.", "User Display Name Field" => "Pole pro zobrazované jméno uživatele", "The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP použitý k vytvoření jména uživatele ownCloud", "Group Display Name Field" => "Pole pro zobrazení jména skupiny", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP použitý k vytvoření jména skupiny ownCloud", -"in bytes" => "v bytech", -"in seconds. A change empties the cache." => "ve vteřinách. Změna vyprázdní dočasnou paměť.", +"in bytes" => "v bajtech", +"in seconds. A change empties the cache." => "ve vteřinách. Změna vyprázdní vyrovnávací paměť.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.", "Help" => "Nápověda" ); diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php index 9f917f277c4..2c178d0b4fd 100644 --- a/apps/user_ldap/l10n/de.php +++ b/apps/user_ldap/l10n/de.php @@ -23,7 +23,7 @@ "Use TLS" => "Nutze TLS", "Do not use it for SSL connections, it will fail." => "Verwenden Sie es nicht für SSL-Verbindungen, es wird fehlschlagen.", "Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", -"Turn off SSL certificate validation." => "Schalte die SSL Zertifikatsprüfung aus.", +"Turn off SSL certificate validation." => "Schalte die SSL-Zertifikatsprüfung aus.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, wird das SSL-Zertifikat des LDAP-Server importiert werden.", "Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.", "User Display Name Field" => "Feld für den Anzeigenamen des Benutzers", @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ", "in bytes" => "in Bytes", "in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls geben Sie ein LDAP/AD-Attribut an.", "Help" => "Hilfe" ); diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php index 6f18506b095..683c60ef840 100644 --- a/apps/user_ldap/l10n/eo.php +++ b/apps/user_ldap/l10n/eo.php @@ -17,6 +17,7 @@ "Port" => "Pordo", "Base User Tree" => "Baza uzantarbo", "Base Group Tree" => "Baza gruparbo", +"Group-Member association" => "Asocio de grupo kaj membro", "Use TLS" => "Uzi TLS-on", "Do not use it for SSL connections, it will fail." => "Ne uzu ĝin por SSL-konektoj, ĝi malsukcesos.", "Case insensitve LDAP server (Windows)" => "LDAP-servilo blinda je litergrandeco (Vindozo)", @@ -28,5 +29,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "La atributo de LDAP uzota por generi la ownCloud-an nomon de la grupo.", "in bytes" => "duumoke", "in seconds. A change empties the cache." => "sekunde. Ajna ŝanĝo malplenigas la kaŝmemoron.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lasu malplena por uzantonomo (defaŭlto). Alie, specifu LDAP/AD-atributon.", "Help" => "Helpo" ); diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php index 55abf7b88e0..c89ceb8eee2 100644 --- a/apps/user_ldap/l10n/es.php +++ b/apps/user_ldap/l10n/es.php @@ -1,7 +1,37 @@ <?php $TRANSLATIONS = array( +"Host" => "Servidor", +"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://", +"Base DN" => "DN base", +"You can specify Base DN for users and groups in the Advanced tab" => "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado", +"User DN" => "DN usuario", +"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos.", "Password" => "Contraseña", +"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, deje DN y contraseña vacíos.", +"User Login Filter" => "Filtro de inicio de sesión de usuario", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazrá el nombre de usuario en el proceso de login.", +"use %%uid placeholder, e.g. \"uid=%%uid\"" => "usar %%uid como placeholder, ej: \"uid=%%uid\"", +"User List Filter" => "Lista de filtros de usuario", +"Defines the filter to apply, when retrieving users." => "Define el filtro a aplicar, cuando se obtienen usuarios.", +"without any placeholder, e.g. \"objectClass=person\"." => "Sin placeholder, ej: \"objectClass=person\".", +"Group Filter" => "Filtro de grupo", +"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar, cuando se obtienen grupos.", +"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Con cualquier placeholder, ej: \"objectClass=posixGroup\".", "Port" => "Puerto", +"Base User Tree" => "Árbol base de usuario", +"Base Group Tree" => "Árbol base de grupo", +"Group-Member association" => "Asociación Grupo-Miembro", "Use TLS" => "Usar TLS", +"Do not use it for SSL connections, it will fail." => "No usarlo para SSL, habrá error.", +"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)", +"Turn off SSL certificate validation." => "Apagar la validación por certificado SSL.", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP en su servidor ownCloud.", +"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.", +"User Display Name Field" => "Campo de nombre de usuario a mostrar", +"The LDAP attribute to use to generate the user`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de usuario de ownCloud.", +"Group Display Name Field" => "Campo de nombre de grupo a mostrar", +"The LDAP attribute to use to generate the groups`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud.", "in bytes" => "en bytes", +"in seconds. A change empties the cache." => "en segundos. Un cambio vacía la cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.", "Help" => "Ayuda" ); diff --git a/apps/user_ldap/l10n/eu.php b/apps/user_ldap/l10n/eu.php index cc042b13892..35dacef3f2f 100644 --- a/apps/user_ldap/l10n/eu.php +++ b/apps/user_ldap/l10n/eu.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "ownCloud taldearen izena sortzeko erabiliko den LDAP atributua", "in bytes" => "bytetan", "in seconds. A change empties the cache." => "segundutan. Aldaketak katxea husten du.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.", "Help" => "Laguntza" ); diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php index f6d16f3acc1..24195649a64 100644 --- a/apps/user_ldap/l10n/fi_FI.php +++ b/apps/user_ldap/l10n/fi_FI.php @@ -1,13 +1,14 @@ <?php $TRANSLATIONS = array( "Host" => "Isäntä", -"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun käytät SSL:ää. Aloita silloin ldaps://", +"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://", "Base DN" => "Oletus DN", -"You can specify Base DN for users and groups in the Advanced tab" => "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset' välilehdeltä ", +"You can specify Base DN for users and groups in the Advanced tab" => "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", "User DN" => "Käyttäjän DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Asiakasohjelman DN, jolla yhdistäminen tehdään, ts. uid=agent,dc=example,dc=com. Mahdollistaaksesi anonyymin yhteyden, jätä DN ja salasana tyhjäksi.", "Password" => "Salasana", "For anonymous access, leave DN and Password empty." => "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", "User Login Filter" => "Login suodatus", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Määrittelee käytettävän suodattimen, kun sisäänkirjautumista yritetään. %%uid korvaa sisäänkirjautumisessa käyttäjätunnuksen.", "use %%uid placeholder, e.g. \"uid=%%uid\"" => "käytä %%uid paikanvaraajaa, ts. \"uid=%%uid\"", "User List Filter" => "Käyttäjien suodatus", "Defines the filter to apply, when retrieving users." => "Määrittelee käytettävän suodattimen, kun käyttäjiä haetaan. ", @@ -16,16 +17,21 @@ "Defines the filter to apply, when retrieving groups." => "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. ", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\".", "Port" => "Portti", -"Base User Tree" => "Oletus käyttäjäpuu", +"Base User Tree" => "Oletuskäyttäjäpuu", "Base Group Tree" => "Ryhmien juuri", -"Group-Member association" => "Ryhmä-jäsen assosiaatio (yhteys)", +"Group-Member association" => "Ryhmän ja jäsenen assosiaatio (yhteys)", "Use TLS" => "Käytä TLS:ää", -"Do not use it for SSL connections, it will fail." => "Älä käytä SSL yhteyttä varten, se epäonnistuu. ", +"Do not use it for SSL connections, it will fail." => "Älä käytä SSL-yhteyttä varten, se epäonnistuu. ", "Case insensitve LDAP server (Windows)" => "Kirjainkoosta piittamaton LDAP-palvelin (Windows)", -"Turn off SSL certificate validation." => "Sulje SSL sertifikaatin käyttö", -"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jos yhteys toimii vain tällä optiolla, siirrä LDAP palvelimen SSL sertifikaatti onwCloud palvelimellesi. ", +"Turn off SSL certificate validation." => "Poista käytöstä SSL-varmenteen vahvistus", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jos yhteys toimii vain tällä valinnalla, siirrä LDAP-palvelimen SSL-varmenne ownCloud-palvelimellesi.", "Not recommended, use for testing only." => "Ei suositella, käytä vain testausta varten.", +"User Display Name Field" => "Käyttäjän näytettävän nimen kenttä", +"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP-attribuutti, jota käytetään käyttäjän ownCloud-käyttäjänimenä ", +"Group Display Name Field" => "Ryhmän \"näytettävä nimi\"-kenttä", +"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP-attribuutti, jota käytetään luomaan ryhmän ownCloud-nimi", "in bytes" => "tavuissa", "in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti.", "Help" => "Ohje" ); diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php index 0754aa01de8..a0b1c6b7d9c 100644 --- a/apps/user_ldap/l10n/fr.php +++ b/apps/user_ldap/l10n/fr.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "L'attribut LDAP utilisé pour générer les noms de groupes d'ownCloud.", "in bytes" => "en octets", "in seconds. A change empties the cache." => "en secondes. Tout changement vide le cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Laisser vide ", "Help" => "Aide" ); diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php index c86b4ea2a57..f07f0aa5a42 100644 --- a/apps/user_ldap/l10n/it.php +++ b/apps/user_ldap/l10n/it.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "L'attributo LDAP da usare per generare il nome del gruppo ownCloud.", "in bytes" => "in byte", "in seconds. A change empties the cache." => "in secondi. Il cambio svuota la cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lascia vuoto per il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.", "Help" => "Aiuto" ); diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php index 8d4473b4e28..c8599f56362 100644 --- a/apps/user_ldap/l10n/ja_JP.php +++ b/apps/user_ldap/l10n/ja_JP.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "グループのownCloud名の生成に利用するLDAP属性。", "in bytes" => "バイト", "in seconds. A change empties the cache." => "秒。変更後にキャッシュがクリアされます。", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ユーザ名を空のままにしてください(デフォルト)。そうでない場合は、LDAPもしくはADの属性を指定してください.", "Help" => "ヘルプ" ); diff --git a/apps/user_ldap/l10n/pl.php b/apps/user_ldap/l10n/pl.php index fa7618d68dc..7ebebe1e073 100644 --- a/apps/user_ldap/l10n/pl.php +++ b/apps/user_ldap/l10n/pl.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Atrybut LDAP służy do generowania nazwy grup ownCloud.", "in bytes" => "w bajtach", "in seconds. A change empties the cache." => "w sekundach. Zmiana opróżnia pamięć podręczną.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pozostaw puste dla user name (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.", "Help" => "Pomoc" ); diff --git a/apps/user_ldap/l10n/ro.php b/apps/user_ldap/l10n/ro.php index 326e47f96fe..beeed857455 100644 --- a/apps/user_ldap/l10n/ro.php +++ b/apps/user_ldap/l10n/ro.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Atributul LDAP folosit pentru a genera numele grupurilor din ownCloud", "in bytes" => "în octeți", "in seconds. A change empties the cache." => "în secunde. O schimbare curăță memoria tampon.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lăsați gol pentru numele de utilizator (implicit). În caz contrar, specificați un atribut LDAP / AD.", "Help" => "Ajutor" ); diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php index 65ef8f47f42..92982d868b8 100644 --- a/apps/user_ldap/l10n/ru.php +++ b/apps/user_ldap/l10n/ru.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Атрибут LDAP для генерации имени группы ownCloud.", "in bytes" => "в байтах", "in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте имя пользователя пустым (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Help" => "Помощь" ); diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php index 312346958be..fd28b640156 100644 --- a/apps/user_ldap/l10n/sl.php +++ b/apps/user_ldap/l10n/sl.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP atribut uporabljen pri ustvarjanju ownCloud imen skupin.", "in bytes" => "v bajtih", "in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pustite prazno za uporabniško ime (privzeto). V nasprotnem primeru navedite LDAP/AD atribut.", "Help" => "Pomoč" ); diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php index a23cc094b4d..2a0abb92967 100644 --- a/apps/user_ldap/l10n/sv.php +++ b/apps/user_ldap/l10n/sv.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "Attribut som används för att generera gruppnamn i ownCloud.", "in bytes" => "i bytes", "in seconds. A change empties the cache." => "i sekunder. En förändring tömmer cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP/AD-attribut.", "Help" => "Hjälp" ); diff --git a/apps/user_ldap/l10n/th_TH.php b/apps/user_ldap/l10n/th_TH.php index a1baa648135..acc7a4936bc 100644 --- a/apps/user_ldap/l10n/th_TH.php +++ b/apps/user_ldap/l10n/th_TH.php @@ -32,5 +32,6 @@ "The LDAP attribute to use to generate the groups`s ownCloud name." => "คุณลักษณะ LDAP ที่ต้องการใช้สร้างชื่อกลุ่มของ ownCloud", "in bytes" => "ในหน่วยไบต์", "in seconds. A change empties the cache." => "ในอีกไม่กี่วินาที ระบบจะเปลี่ยนแปลงข้อมูลในแคชให้ว่างเปล่า", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "เว้นว่างไว้สำหรับ ชื่อผู้ใช้ (ค่าเริ่มต้น) หรือไม่กรุณาระบุคุณลักษณะของ LDAP/AD", "Help" => "ช่วยเหลือ" ); diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php index 23018890eac..f765151456a 100644 --- a/apps/user_ldap/settings.php +++ b/apps/user_ldap/settings.php @@ -26,8 +26,8 @@ OCP\Util::addscript('user_ldap', 'settings'); OCP\Util::addstyle('user_ldap', 'settings'); if ($_POST) { - foreach($params as $param){ - if(isset($_POST[$param])){ + foreach($params as $param) { + if(isset($_POST[$param])) { if('ldap_agent_password' == $param) { OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param])); } elseif('ldap_cache_ttl' == $param) { @@ -58,7 +58,7 @@ if ($_POST) { // fill template $tmpl = new OCP\Template( 'user_ldap', 'settings'); -foreach($params as $param){ +foreach($params as $param) { $value = OCP\Config::getAppValue('user_ldap', $param,''); $tmpl->assign($param, $value); } diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index d1aaeedbdf9..3a653ad7208 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -23,8 +23,8 @@ <p><label for="ldap_turn_off_cert_check"><?php echo $l->t('Turn off SSL certificate validation.');?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" value="1"<?php if ($_['ldap_turn_off_cert_check']) echo ' checked'; ?>><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p> <p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p> <p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" value="<?php echo $_['ldap_group_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p> - <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /> - <label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" title="<?php echo $l->t('in bytes');?>" /></p> + <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /></p> + <p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" title="<?php echo $l->t('in bytes');?>" /></p> <p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></p> <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="text" id="ldap_cache_ttl" name="ldap_cache_ttl" value="<?php echo $_['ldap_cache_ttl']; ?>" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" /></p> <p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" value="<?php echo $_['home_folder_naming_rule']; ?>" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" /></p> diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php index ac66a608b76..b953127d86e 100644 --- a/apps/user_ldap/tests/group_ldap.php +++ b/apps/user_ldap/tests/group_ldap.php @@ -21,11 +21,11 @@ */ class Test_Group_Ldap extends UnitTestCase { - function setUp(){ + function setUp() { OC_Group::clearBackends(); } - function testSingleBackend(){ + function testSingleBackend() { OC_Group::useBackend(new OCA\user_ldap\GROUP_LDAP()); $group_ldap = new OCA\user_ldap\GROUP_LDAP(); diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index d297374600a..bacdb8b9ae1 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -65,7 +65,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * * Check if the password is correct without logging in the user */ - public function checkPassword($uid, $password){ + public function checkPassword($uid, $password) { //find out dn of the user name $filter = \OCP\Util::mb_str_replace('%uid', $uid, $this->connection->ldapLoginFilter, 'UTF-8'); $ldap_users = $this->fetchListOfUsers($filter, 'dn'); @@ -82,7 +82,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { //do we have a username for him/her? $ocname = $this->dn2username($dn); - if($ocname){ + if($ocname) { //update some settings, if necessary $this->updateQuota($dn); $this->updateEmail($dn); @@ -100,7 +100,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * * Get a list of all users. */ - public function getUsers($search = '', $limit = 10, $offset = 0){ + public function getUsers($search = '', $limit = 10, $offset = 0) { $ldap_users = $this->connection->getFromCache('getUsers'); if(is_null($ldap_users)) { $ldap_users = $this->fetchListOfUsers($this->connection->ldapUserFilter, array($this->connection->ldapUserDisplayName, 'dn')); @@ -126,7 +126,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * @param string $uid the username * @return boolean */ - public function userExists($uid){ + public function userExists($uid) { if($this->connection->isCached('userExists'.$uid)) { return $this->connection->getFromCache('userExists'.$uid); } @@ -187,7 +187,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * @param string $uid the username * @return boolean */ - public function getHome($uid){ + public function getHome($uid) { if($this->userExists($uid)) { $homedir = \OCP\Config::getUserValue($uid, 'user_ldap', 'homedir', false); if(!$homedir) { diff --git a/apps/user_webdavauth/appinfo/app.php b/apps/user_webdavauth/appinfo/app.php index ebadcf30b6c..3ab323becce 100755 --- a/apps/user_webdavauth/appinfo/app.php +++ b/apps/user_webdavauth/appinfo/app.php @@ -21,7 +21,7 @@ * */ -require_once('apps/user_webdavauth/user_webdavauth.php'); +require_once 'apps/user_webdavauth/user_webdavauth.php'; OC_APP::registerAdmin('user_webdavauth','settings'); diff --git a/apps/user_webdavauth/settings.php b/apps/user_webdavauth/settings.php index 1b80b1bba34..4f1ddbbefda 100755 --- a/apps/user_webdavauth/settings.php +++ b/apps/user_webdavauth/settings.php @@ -22,9 +22,9 @@ */ print_r($_POST); -if($_POST){ +if($_POST) { - if(isset($_POST['webdav_url'])){ + if(isset($_POST['webdav_url'])) { OC_CONFIG::setValue('user_webdavauth_url', strip_tags($_POST['webdav_url'])); } } diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php index 571aca2f70f..c36d37c1fa2 100755 --- a/apps/user_webdavauth/user_webdavauth.php +++ b/apps/user_webdavauth/user_webdavauth.php @@ -50,7 +50,7 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend { $url= 'http://'.urlencode($uid).':'.urlencode($password).'@'.$this->webdavauth_url; $headers = get_headers($url); - if($headers==false){ + if($headers==false) { OC_Log::write('OC_USER_WEBDAVAUTH', 'Not possible to connect to WebDAV Url: "'.$this->webdavauth_url.'" ' ,3); return false; @@ -68,14 +68,14 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend { /* * we don´t know if a user exists without the password. so we have to return false all the time */ - public function userExists( $uid ){ + public function userExists( $uid ) { return false; } /* * we don´t know the users so all we can do it return an empty array here */ - public function getUsers(){ + public function getUsers() { $returnArray = array(); return $returnArray; |