Merge branch 'master' into routing
Conflicts: apps/files/js/fileactions.js lib/base.php lib/helper.php lib/ocs.php
This commit is contained in:
commit
5eba579827
|
@ -19,10 +19,12 @@ _darcs/*
|
|||
CVS/*
|
||||
.svn/*
|
||||
RCS/*
|
||||
*.backup*
|
||||
|
||||
# kdevelop
|
||||
.kdev
|
||||
*.kdev4
|
||||
*.kate-swp
|
||||
|
||||
# Lokalize
|
||||
*lokalize*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"] ));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
|
@ -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 (){
|
||||
|
|
|
@ -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){
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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í"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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بایت دارد",
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ű",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "フォルダ",
|
||||
|
|
|
@ -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." => "업로드 취소.",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "Изменён",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "แฟ้มเอกสาร",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "文件夹",
|
||||
|
|
|
@ -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" => "檔案處理",
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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');
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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í"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
|
@ -0,0 +1,5 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Encryption" => "加密",
|
||||
"None" => "None",
|
||||
"Enable Encryption" => "开启加密"
|
||||
);
|
|
@ -0,0 +1,6 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Encryption" => "加密",
|
||||
"Exclude the following file types from encryption" => "下列的檔案類型不加密",
|
||||
"None" => "無",
|
||||
"Enable Encryption" => "啟用加密"
|
||||
);
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ OC.MountConfig={
|
|||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.chzn-select').chosen();
|
||||
|
@ -179,4 +179,4 @@ $(document).ready(function() {
|
|||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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šť"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ä"
|
||||
);
|
||||
|
|
|
@ -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" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם"
|
||||
);
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
<?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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(''));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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('/');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(''));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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('');
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
|
@ -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('/');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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; }
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() == '/') {
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Size" => "Μέγεθος",
|
||||
"Modified" => "Τροποποιήθηκε",
|
||||
"Delete all" => "Διαγραφή όλων",
|
||||
"Delete" => "Διαγραφή"
|
||||
"Password" => "Συνθηματικό",
|
||||
"Submit" => "Καταχώρηση"
|
||||
);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Delete" => "Forigi"
|
||||
"Password" => "Pasvorto",
|
||||
"Submit" => "Sendi"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Password" => "ססמה",
|
||||
"Submit" => "שליחה",
|
||||
"Download" => "הורדה",
|
||||
"No preview available for" => "אין תצוגה מקדימה זמינה עבור",
|
||||
"web services under your control" => "שירותי רשת תחת השליטה שלך"
|
||||
);
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Size" => "サイズ",
|
||||
"Modified" => "変更",
|
||||
"Delete all" => "すべて削除",
|
||||
"Delete" => "削除"
|
||||
"Password" => "パスワード",
|
||||
"Submit" => "送信",
|
||||
"Download" => "ダウンロード",
|
||||
"No preview available for" => "プレビューはありません",
|
||||
"web services under your control" => "管理下のウェブサービス"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Size" => "Размер",
|
||||
"Modified" => "Изменён",
|
||||
"Delete all" => "Удалить все",
|
||||
"Delete" => "Удалить"
|
||||
"Password" => "Пароль",
|
||||
"Submit" => "Отправить",
|
||||
"Download" => "Скачать",
|
||||
"web services under your control" => "веб-сервисы под вашим управлением"
|
||||
);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue