').attr({ "class": "date" });
td.append($('').attr({
"class": "modified",
- "title": formatDate(lastModified),
+ "title": formatDate(mtime),
"style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')'
- }).text( relative_modified_date(lastModified.getTime() / 1000) ));
+ }).text( relative_modified_date(mtime / 1000) ));
+ tr.find('.filesize').text(simpleSize);
tr.append(td);
return tr;
},
- addFile:function(name, size, lastModified, loading, hidden, param) {
- var imgurl;
+ /**
+ * Adds an entry to the files table using the data from the given file data
+ * @param fileData map of file attributes
+ * @param options map of attributes:
+ * - "insert" true to insert in a sorted manner, false to append (default)
+ * - "updateSummary" true to update the summary after adding (default), false otherwise
+ * @return new tr element (not appended to the table)
+ */
+ add: function(fileData, options) {
+ options = options || {};
+ var type = fileData.type || 'file',
+ mime = fileData.mimetype,
+ permissions = parseInt(fileData.permissions, 10) || 0;
- if (!param) {
- param = {};
+ if (type === 'dir') {
+ mime = mime || 'httpd/unix-directory';
}
+ var tr = this._createRow(
+ fileData,
+ options
+ );
+ var filenameTd = tr.find('td.filename');
- var download_url = null;
- if (!param.download_url) {
- download_url = OC.generateUrl(
- 'apps/files/download{file}',
- { file: $('#dir').val()+'/'+name });
- } else {
- download_url = param.download_url;
+ // sorted insert is expensive, so needs to be explicitly
+ // requested
+ if (options.insert) {
+ this.insertElement(fileData.name, type, tr);
}
+ else {
+ this.$fileList.append(tr);
+ }
+ FileList.isEmpty = false;
- if (loading) {
- imgurl = OC.imagePath('core', 'loading.gif');
- } else {
- imgurl = OC.imagePath('core', 'filetypes/file');
- }
- var tr = this.createRow(
- 'file',
- name,
- imgurl,
- download_url,
- size,
- lastModified,
- $('#permissions').val()
- );
+ // TODO: move dragging to FileActions ?
+ // enable drag only for deletable files
+ if (permissions & OC.PERMISSION_DELETE) {
+ filenameTd.draggable(dragOptions);
+ }
+ // allow dropping on folders
+ if (fileData.type === 'dir') {
+ filenameTd.droppable(folderDropOptions);
+ }
- FileList.insertElement(name, 'file', tr);
- if (loading) {
- tr.data('loading', true);
- } else {
- tr.find('td.filename').draggable(dragOptions);
+ if (options.hidden) {
+ tr.addClass('hidden');
}
- if (hidden) {
- tr.hide();
+
+ // display actions
+ FileActions.display(filenameTd, false);
+
+ if (fileData.isPreviewAvailable) {
+ // lazy load / newly inserted td ?
+ if (!fileData.icon) {
+ Files.lazyLoadPreview(getPathForPreview(fileData.name), mime, function(url) {
+ filenameTd.css('background-image', 'url(' + url + ')');
+ }, null, null, fileData.etag);
+ }
+ else {
+ // set the preview URL directly
+ var urlSpec = {
+ file: FileList.getCurrentDirectory() + '/' + fileData.name,
+ c: fileData.etag
+ };
+ var previewUrl = Files.generatePreviewUrl(urlSpec);
+ previewUrl = previewUrl.replace('(', '%28').replace(')', '%29');
+ filenameTd.css('background-image', 'url(' + previewUrl + ')');
+ }
}
- return tr;
- },
- addDir:function(name, size, lastModified, hidden) {
-
- var tr = this.createRow(
- 'dir',
- name,
- OC.imagePath('core', 'filetypes/folder'),
- OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/'),
- size,
- lastModified,
- $('#permissions').val()
- );
- FileList.insertElement(name, 'dir', tr);
- var td = tr.find('td.filename');
- td.draggable(dragOptions);
- td.droppable(folderDropOptions);
- if (hidden) {
- tr.hide();
+ // defaults to true if not defined
+ if (typeof(options.updateSummary) === 'undefined' || !!options.updateSummary) {
+ this.updateFileSummary();
+ this.updateEmptyContent();
}
- FileActions.display(tr.find('td.filename'), true);
return tr;
},
+ /**
+ * Returns the current directory
+ * @return current directory
+ */
getCurrentDirectory: function(){
return $('#dir').val() || '/';
},
+ /**
+ * Returns the directory permissions
+ * @return permission value as integer
+ */
+ getDirectoryPermissions: function() {
+ return parseInt($('#permissions').val(), 10);
+ },
/**
* @brief Changes the current directory and reload the file list.
* @param targetDir target directory (non URL encoded)
@@ -209,7 +373,7 @@ window.FileList={
if (!force && currentDir === targetDir) {
return;
}
- FileList.setCurrentDir(targetDir, changeUrl);
+ FileList._setCurrentDir(targetDir, changeUrl);
$('#fileList').trigger(
jQuery.Event('changeDirectory', {
dir: targetDir,
@@ -221,7 +385,13 @@ window.FileList={
linkTo: function(dir) {
return OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
},
- setCurrentDir: function(targetDir, changeUrl) {
+
+ /**
+ * Sets the current directory name and updates the breadcrumb.
+ * @param targetDir directory to display
+ * @param changeUrl true to also update the URL, false otherwise (default)
+ */
+ _setCurrentDir: function(targetDir, changeUrl) {
var url,
baseDir = OC.basename(targetDir);
@@ -243,6 +413,7 @@ window.FileList={
window.location.hash = '?dir='+ encodeURIComponent(targetDir).replace(/%2F/g, '/');
}
}
+ this.breadcrumb.setDirectory(this.getCurrentDirectory());
},
/**
* @brief Reloads the file list using ajax call
@@ -253,10 +424,9 @@ window.FileList={
FileList._reloadCall.abort();
}
FileList._reloadCall = $.ajax({
- url: OC.filePath('files','ajax','list.php'),
+ url: Files.getAjaxUrl('list'),
data: {
- dir : $('#dir').val(),
- breadcrumb: true
+ dir : $('#dir').val()
},
error: function(result) {
FileList.reloadCallback(result);
@@ -269,8 +439,8 @@ window.FileList={
reloadCallback: function(result) {
var $controls = $('#controls');
- delete FileList._reloadCall;
- FileList.hideMask();
+ delete this._reloadCall;
+ this.hideMask();
if (!result || result.status === 'error') {
OC.Notification.show(result.data.message);
@@ -279,7 +449,11 @@ window.FileList={
if (result.status === 404) {
// go back home
- FileList.changeDirectory('/');
+ this.changeDirectory('/');
+ return;
+ }
+ // aborted ?
+ if (result.status === 0){
return;
}
@@ -288,24 +462,10 @@ window.FileList={
Files.updateStorageStatistics(true);
if (result.data.permissions) {
- FileList.setDirectoryPermissions(result.data.permissions);
+ this.setDirectoryPermissions(result.data.permissions);
}
- if (typeof(result.data.breadcrumb) !== 'undefined') {
- $controls.find('.crumb').remove();
- $controls.prepend(result.data.breadcrumb);
-
- var width = $(window).width();
- Files.initBreadCrumbs();
- Files.resizeBreadcrumbs(width, true);
-
- // in case svg is not supported by the browser we need to execute the fallback mechanism
- if (!SVGSupport()) {
- replaceSVG();
- }
- }
-
- FileList.update(result.data.files);
+ this.setFiles(result.data.files);
},
setDirectoryPermissions: function(permissions) {
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
@@ -322,10 +482,14 @@ window.FileList={
$('.actions,#file_action_panel').toggleClass('hidden', !show);
if (show){
// make sure to display according to permissions
- var permissions = $('#permissions').val();
+ var permissions = this.getDirectoryPermissions();
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
$('.creatable').toggleClass('hidden', !isCreatable);
$('.notCreatable').toggleClass('hidden', isCreatable);
+ // remove old style breadcrumbs (some apps might create them)
+ $('#controls .crumb').remove();
+ // refresh breadcrumbs in case it was replaced by an app
+ this.breadcrumb.render();
}
else{
$('.creatable, .notCreatable').addClass('hidden');
@@ -341,22 +505,32 @@ window.FileList={
this.showActions(!show);
$('#filestable').toggleClass('hidden', show);
},
- remove:function(name){
+ /**
+ * Removes a file entry from the list
+ * @param name name of the file to remove
+ * @param options optional options as map:
+ * "updateSummary": true to update the summary (default), false otherwise
+ */
+ remove:function(name, options){
+ options = options || {};
var fileEl = FileList.findFileEl(name);
if (fileEl.data('permissions') & OC.PERMISSION_DELETE) {
// file is only draggable when delete permissions are set
fileEl.find('td.filename').draggable('destroy');
}
fileEl.remove();
- FileList.updateFileSummary();
- if ( ! $('tr[data-file]').exists() ) {
- $('#emptycontent').removeClass('hidden');
- $('#filescontent th').addClass('hidden');
+ // TODO: improve performance on batch update
+ FileList.isEmpty = !this.$fileList.find('tr:not(.summary)').length;
+ if (typeof(options.updateSummary) === 'undefined' || !!options.updateSummary) {
+ FileList.updateEmptyContent();
+ FileList.updateFileSummary();
}
+ return fileEl;
},
insertElement:function(name, type, element) {
- //find the correct spot to insert the file or folder
- var pos, fileElements=$('tr[data-file][data-type="'+type+'"]:visible');
+ // find the correct spot to insert the file or folder
+ var pos,
+ fileElements = this.$fileList.find('tr[data-file][data-type="'+type+'"]:not(.hidden)');
if (name.localeCompare($(fileElements[0]).attr('data-file')) < 0) {
pos = -1;
} else if (name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file')) > 0) {
@@ -376,35 +550,18 @@ window.FileList={
} else {
$(fileElements[pos]).after(element);
}
- } else if (type === 'dir' && $('tr[data-file]').exists()) {
- $('tr[data-file]').first().before(element);
- } else if (type === 'file' && $('tr[data-file]').exists()) {
- $('tr[data-file]').last().before(element);
+ } else if (type === 'dir' && !FileList.isEmpty) {
+ this.$fileList.find('tr[data-file]:first').before(element);
+ } else if (type === 'file' && !FileList.isEmpty) {
+ this.$fileList.find('tr[data-file]:last').before(element);
} else {
- $('#fileList').append(element);
+ this.$fileList.append(element);
}
- $('#emptycontent').addClass('hidden');
- $('#filestable th').removeClass('hidden');
+ FileList.isEmpty = false;
+ FileList.updateEmptyContent();
FileList.updateFileSummary();
},
- loadingDone:function(name, id) {
- var mime, tr = FileList.findFileEl(name);
- tr.data('loading', false);
- mime = tr.data('mime');
- tr.attr('data-mime', mime);
- if (id) {
- tr.attr('data-id', id);
- }
- var path = getPathForPreview(name);
- Files.lazyLoadPreview(path, mime, function(previewpath) {
- tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
- }, null, null, tr.attr('data-etag'));
- tr.find('td.filename').draggable(dragOptions);
- },
- isLoading:function(file) {
- return FileList.findFileEl(file).data('loading');
- },
- rename:function(oldname) {
+ rename: function(oldname) {
var tr, td, input, form;
tr = FileList.findFileEl(oldname);
tr.data('renaming',true);
@@ -438,6 +595,7 @@ window.FileList={
event.preventDefault();
try {
var newname = input.val();
+ var directory = FileList.getCurrentDirectory();
if (newname !== oldname) {
checkInput();
// save background image, because it's replaced by a spinner while async request
@@ -480,12 +638,16 @@ window.FileList={
tr.attr('data-mime', fileInfo.mime);
tr.attr('data-etag', fileInfo.etag);
if (fileInfo.isPreviewAvailable) {
- Files.lazyLoadPreview(fileInfo.directory + '/' + fileInfo.name, result.data.mime, function(previewpath) {
+ Files.lazyLoadPreview(directory + '/' + fileInfo.name, result.data.mime, function(previewpath) {
tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
}, null, null, result.data.etag);
}
else {
- tr.find('td.filename').removeClass('preview').attr('style','background-image:url('+fileInfo.icon+')');
+ tr.find('td.filename')
+ .removeClass('preview')
+ .attr('style','background-image:url('
+ + OC.Util.replaceSVGIcon(fileInfo.icon)
+ + ')');
}
}
// reinsert row
@@ -554,58 +716,12 @@ window.FileList={
inList:function(file) {
return FileList.findFileEl(file).length;
},
- replace:function(oldName, newName, isNewFile) {
- // Finish any existing actions
- var oldFileEl = FileList.findFileEl(oldName);
- var newFileEl = FileList.findFileEl(newName);
- oldFileEl.hide();
- newFileEl.hide();
- var tr = oldFileEl.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)));
- var basename = newName;
- if (newName.indexOf('.') > 0) {
- basename = newName.substr(0, newName.lastIndexOf('.'));
- }
- td.children('a.name').empty();
- var span = $('');
- span.text(basename);
- td.children('a.name').append(span);
- if (newName.indexOf('.') > 0) {
- span.append($(''+newName.substr(newName.lastIndexOf('.'))+''));
- }
- 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();
- };
- if (!isNewFile) {
- OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+''+t('files', 'undo')+'');
- }
- },
- finishReplace:function() {
- if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
- $.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[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;
- }});
- }
- },
+ /**
+ * Delete the given files from the given dir
+ * @param files file names list (without path)
+ * @param dir directory in which to delete the files, defaults to the current
+ * directory
+ */
do_delete:function(files, dir) {
var params;
if (files && files.substr) {
@@ -622,7 +738,7 @@ window.FileList={
FileList.lastAction();
}
- var params = {
+ params = {
dir: dir || FileList.getCurrentDirectory()
};
if (files) {
@@ -643,10 +759,9 @@ window.FileList={
}
else {
$.each(files,function(index,file) {
- var files = FileList.findFileEl(file);
- files.remove();
- files.find('input[type="checkbox"]').removeAttr('checked');
- files.removeClass('selected');
+ var fileEl = FileList.remove(file, {updateSummary: false});
+ fileEl.find('input[type="checkbox"]').prop('checked', false);
+ fileEl.removeClass('selected');
});
}
procesSelection();
@@ -680,7 +795,7 @@ window.FileList={
});
},
createFileSummary: function() {
- if( $('#fileList tr').exists() ) {
+ if ( !FileList.isEmpty ) {
var summary = this._calculateFileSummary();
// Get translations
@@ -702,7 +817,7 @@ window.FileList={
}
var $summary = $('
'+info+'
'+fileSize+'
');
- $('#fileList').append($summary);
+ this.$fileList.append($summary);
var $dirInfo = $summary.find('.dirinfo');
var $fileInfo = $summary.find('.fileinfo');
@@ -710,12 +825,12 @@ window.FileList={
// Show only what's necessary, e.g.: no files: don't show "0 files"
if (summary.totalDirs === 0) {
- $dirInfo.hide();
- $connector.hide();
+ $dirInfo.addClass('hidden');
+ $connector.addClass('hidden');
}
if (summary.totalFiles === 0) {
- $fileInfo.hide();
- $connector.hide();
+ $fileInfo.addClass('hidden');
+ $connector.addClass('hidden');
}
}
},
@@ -740,10 +855,13 @@ window.FileList={
return result;
},
updateFileSummary: function() {
- var $summary = $('.summary');
+ var $summary = this.$el.find('.summary');
+
+ // always make it the last element
+ this.$fileList.append($summary.detach());
// Check if we should remove the summary to show "Upload something"
- if ($('#fileList tr').length === 1 && $summary.length === 1) {
+ if (this.isEmpty && $summary.length === 1) {
$summary.remove();
}
// If there's no summary create one (createFileSummary checks if there's data)
@@ -751,7 +869,7 @@ window.FileList={
FileList.createFileSummary();
}
// There's a summary and data -> Update the summary
- else if ($('#fileList tr').length > 1 && $summary.length === 1) {
+ else if (!this.isEmpty && $summary.length === 1) {
var fileSummary = this._calculateFileSummary();
var $dirInfo = $('.summary .dirinfo');
var $fileInfo = $('.summary .fileinfo');
@@ -764,19 +882,19 @@ window.FileList={
// Show only what's necessary (may be hidden)
if (fileSummary.totalDirs === 0) {
- $dirInfo.hide();
- $connector.hide();
+ $dirInfo.addClass('hidden');
+ $connector.addClass('hidden');
} else {
- $dirInfo.show();
+ $dirInfo.removeClass('hidden');
}
if (fileSummary.totalFiles === 0) {
- $fileInfo.hide();
- $connector.hide();
+ $fileInfo.addClass('hidden');
+ $connector.addClass('hidden');
} else {
- $fileInfo.show();
+ $fileInfo.removeClass('hidden');
}
if (fileSummary.totalDirs > 0 && fileSummary.totalFiles > 0) {
- $connector.show();
+ $connector.removeClass('hidden');
}
}
},
@@ -784,10 +902,14 @@ window.FileList={
var $fileList = $('#fileList');
var permissions = $('#permissions').val();
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
- var exists = $fileList.find('tr:first').exists();
- $('#emptycontent').toggleClass('hidden', !isCreatable || exists);
- $('#filestable th').toggleClass('hidden', !exists);
+ $('#emptycontent').toggleClass('hidden', !isCreatable || !FileList.isEmpty);
+ $('#filestable thead th').toggleClass('hidden', FileList.isEmpty);
},
+ /**
+ * Shows the loading mask.
+ *
+ * @see #hideMask
+ */
showMask: function() {
// in case one was shown before
var $mask = $('#content .mask');
@@ -795,23 +917,23 @@ window.FileList={
return;
}
+ this.$el.addClass('hidden');
+
$mask = $('');
$mask.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
$mask.css('background-repeat', 'no-repeat');
$('#content').append($mask);
- // block UI, but only make visible in case loading takes longer
- FileList._maskTimeout = window.setTimeout(function() {
- // reset opacity
- $mask.removeClass('transparent');
- }, 250);
+ $mask.removeClass('transparent');
},
+ /**
+ * Hide the loading mask.
+ * @see #showMask
+ */
hideMask: function() {
- var $mask = $('#content .mask').remove();
- if (FileList._maskTimeout) {
- window.clearTimeout(FileList._maskTimeout);
- }
+ $('#content .mask').remove();
+ this.$el.removeClass('hidden');
},
scrollTo:function(file) {
//scroll to and highlight preselected file
@@ -850,29 +972,11 @@ window.FileList={
*/
isAllSelected: function() {
return $('#select_all').prop('checked');
- },
-
- /**
- * Returns the download URL of the given file
- * @param filename file name of the file
- * @param dir optional directory in which the file name is, defaults to the current directory
- */
- getDownloadUrl: function(filename, dir) {
- var files = filename;
- if ($.isArray(filename)) {
- files = JSON.stringify(filename);
- }
- var params = {
- dir: dir || FileList.getCurrentDirectory(),
- files: files
- };
- return OC.filePath('files', 'ajax', 'download.php') + '?' + OC.buildQueryString(params);
}
};
$(document).ready(function() {
- var baseDir,
- isPublic = !!$('#isPublic').val();
+ FileList.initialize();
// handle upload events
var file_upload_start = $('#file_upload_start');
@@ -907,8 +1011,13 @@ $(document).ready(function() {
{name: 'requesttoken', value: oc_requesttoken}
];
};
+ } else {
+ // cancel uploads to current dir if no permission
+ var isCreatable = (FileList.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0;
+ if (!isCreatable) {
+ return false;
+ }
}
-
});
file_upload_start.on('fileuploadadd', function(e, data) {
OC.Upload.log('filelist handle fileuploadadd', e, data);
@@ -993,31 +1102,11 @@ $(document).ready(function() {
if (data.files[0].size>=0) {
size=data.files[0].size;
}
- var date=new Date();
- var param = {};
- if ($('#publicUploadRequestToken').exists()) {
- param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + file.name;
- }
//should the file exist in the list remove it
FileList.remove(file.name);
// create new file context
- data.context = FileList.addFile(file.name, file.size, date, false, false, param);
-
- // update file data
- data.context.attr('data-mime',file.mime).attr('data-id',file.id).attr('data-etag', file.etag);
-
- var permissions = data.context.data('permissions');
- if (permissions !== file.permissions) {
- data.context.attr('data-permissions', file.permissions);
- data.context.data('permissions', file.permissions);
- }
- FileActions.display(data.context.find('td.filename'), true);
-
- var path = getPathForPreview(file.name);
- Files.lazyLoadPreview(path, file.mime, function(previewpath) {
- data.context.find('td.filename').attr('style','background-image:url('+previewpath+')');
- }, null, null, file.etag);
+ data.context = FileList.add(file, {insert: true});
}
}
});
@@ -1049,31 +1138,6 @@ $(document).ready(function() {
});
$('#notification').hide();
- $('#notification').on('click', '.undo', function() {
- if (FileList.deleteFiles) {
- $.each(FileList.deleteFiles,function(index,file) {
- FileList.findFileEl(file).show();
- });
- FileList.deleteCanceled=true;
- FileList.deleteFiles=null;
- } else if (FileList.replaceOldName && FileList.replaceNewName) {
- if (FileList.replaceIsNewFile) {
- // Delete the new uploaded file
- FileList.deleteCanceled = false;
- FileList.deleteFiles = [FileList.replaceOldName];
- } else {
- FileList.findFileEl(FileList.replaceOldName).show();
- }
- $('tr[data-replace="true"').remove();
- FileList.findFileEl(FileList.replaceNewName).show();
- FileList.replaceCanceled = true;
- FileList.replaceOldName = null;
- FileList.replaceNewName = null;
- FileList.replaceIsNewFile = null;
- }
- FileList.lastAction = null;
- OC.Notification.hide();
- });
$('#notification:first-child').on('click', '.replace', function() {
OC.Notification.hide(function() {
FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
@@ -1081,7 +1145,7 @@ $(document).ready(function() {
});
$('#notification:first-child').on('click', '.suggest', function() {
var file = $('#notification > span').attr('data-oldName');
- FileList.findFileEl(file).show();
+ FileList.findFileEl(file).removeClass('hidden');
OC.Notification.hide();
});
$('#notification:first-child').on('click', '.cancel', function() {
@@ -1130,34 +1194,32 @@ $(document).ready(function() {
}
// disable ajax/history API for public app (TODO: until it gets ported)
- if (!isPublic) {
- // fallback to hashchange when no history support
- if (!window.history.pushState) {
- $(window).on('hashchange', function() {
- FileList.changeDirectory(parseCurrentDirFromUrl(), false);
- });
+ // fallback to hashchange when no history support
+ if (!window.history.pushState) {
+ $(window).on('hashchange', function() {
+ FileList.changeDirectory(parseCurrentDirFromUrl(), false);
+ });
+ }
+ window.onpopstate = function(e) {
+ var targetDir;
+ if (e.state && e.state.dir) {
+ targetDir = e.state.dir;
}
- window.onpopstate = function(e) {
- var targetDir;
- if (e.state && e.state.dir) {
- targetDir = e.state.dir;
- }
- else{
- // read from URL
- targetDir = parseCurrentDirFromUrl();
- }
- if (targetDir) {
- FileList.changeDirectory(targetDir, false);
- }
- };
-
- if (parseInt($('#ajaxLoad').val(), 10) === 1) {
- // need to initially switch the dir to the one from the hash (IE8)
- FileList.changeDirectory(parseCurrentDirFromUrl(), false, true);
+ else{
+ // read from URL
+ targetDir = parseCurrentDirFromUrl();
+ }
+ if (targetDir) {
+ FileList.changeDirectory(targetDir, false);
}
+ };
- FileList.setCurrentDir(parseCurrentDirFromUrl(), false);
- }
+ var dir = parseCurrentDirFromUrl();
+ // trigger ajax load, deferred to let sub-apps do their overrides first
+ setTimeout(function() {
+ FileList.changeDirectory(dir, false, true);
+ }, 0);
FileList.createFileSummary();
});
+
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 1186a72a44f4cab38544409f4b1c9b8998954e3d..ac10191618b1adaa4e15a0778e5b0b9d319254fb 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -131,15 +131,15 @@ var Files = {
var encryptedFiles = $('#encryptedFiles').val();
var initStatus = $('#encryptionInitStatus').val();
if (initStatus === '0') { // enc not initialized, but should be
- OC.Notification.show(t('files_encryption', 'Encryption App is enabled but your keys are not initialized, please log-out and log-in again'));
+ OC.Notification.show(t('files', 'Encryption App is enabled but your keys are not initialized, please log-out and log-in again'));
return;
}
if (initStatus === '1') { // encryption tried to init but failed
- OC.Notification.showHtml(t('files_encryption', 'Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.'));
+ OC.Notification.showHtml(t('files', 'Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.'));
return;
}
if (encryptedFiles === '1') {
- OC.Notification.show(t('files_encryption', 'Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.'));
+ OC.Notification.show(t('files', 'Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.'));
return;
}
},
@@ -161,77 +161,33 @@ var Files = {
});
},
- lastWidth: 0,
-
- initBreadCrumbs: function () {
- var $controls = $('#controls');
-
- Files.lastWidth = 0;
- Files.breadcrumbs = [];
-
- // initialize with some extra space
- Files.breadcrumbsWidth = 64;
- if ( document.getElementById("navigation") ) {
- Files.breadcrumbsWidth += $('#navigation').get(0).offsetWidth;
+ /**
+ * Returns the download URL of the given file(s)
+ * @param filename string or array of file names to download
+ * @param dir optional directory in which the file name is, defaults to the current directory
+ */
+ getDownloadUrl: function(filename, dir) {
+ if ($.isArray(filename)) {
+ filename = JSON.stringify(filename);
}
- Files.hiddenBreadcrumbs = 0;
-
- $.each($('.crumb'), function(index, breadcrumb) {
- Files.breadcrumbs[index] = breadcrumb;
- Files.breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
- });
-
- $.each($('#controls .actions>div'), function(index, action) {
- Files.breadcrumbsWidth += $(action).get(0).offsetWidth;
- });
-
- // event handlers for breadcrumb items
- $controls.find('.crumb a').on('click', onClickBreadcrumb);
-
- // setup drag and drop
- $controls.find('.crumb:not(.last)').droppable(crumbDropOptions);
+ var params = {
+ dir: dir || FileList.getCurrentDirectory(),
+ files: filename
+ };
+ return this.getAjaxUrl('download', params);
},
- resizeBreadcrumbs: function (width, firstRun) {
- if (width !== Files.lastWidth) {
- if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) {
- if (Files.hiddenBreadcrumbs === 0) {
- Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
- $(Files.breadcrumbs[1]).find('a').hide();
- $(Files.breadcrumbs[1]).append('...');
- Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
- Files.hiddenBreadcrumbs = 2;
- }
- var i = Files.hiddenBreadcrumbs;
- while (width < Files.breadcrumbsWidth && i > 1 && i < Files.breadcrumbs.length - 1) {
- Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
- $(Files.breadcrumbs[i]).hide();
- Files.hiddenBreadcrumbs = i;
- i++;
- }
- } else if (width > Files.lastWidth && Files.hiddenBreadcrumbs > 0) {
- var i = Files.hiddenBreadcrumbs;
- while (width > Files.breadcrumbsWidth && i > 0) {
- if (Files.hiddenBreadcrumbs === 1) {
- Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
- $(Files.breadcrumbs[1]).find('span').remove();
- $(Files.breadcrumbs[1]).find('a').show();
- Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
- } else {
- $(Files.breadcrumbs[i]).show();
- Files.breadcrumbsWidth += $(Files.breadcrumbs[i]).get(0).offsetWidth;
- if (Files.breadcrumbsWidth > width) {
- Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
- $(Files.breadcrumbs[i]).hide();
- break;
- }
- }
- i--;
- Files.hiddenBreadcrumbs = i;
- }
- }
- Files.lastWidth = width;
+ /**
+ * Returns the ajax URL for a given action
+ * @param action action string
+ * @param params optional params map
+ */
+ getAjaxUrl: function(action, params) {
+ var q = '';
+ if (params) {
+ q = '?' + OC.buildQueryString(params);
}
+ return OC.filePath('files', 'ajax', action + '.php') + q;
}
};
$(document).ready(function() {
@@ -242,14 +198,10 @@ $(document).ready(function() {
Files.displayEncryptionWarning();
Files.bindKeyboardShortcuts(document, jQuery);
- FileList.postProcessList();
Files.setupDragAndDrop();
$('#file_action_panel').attr('activeAction', false);
- // allow dropping on the "files" app icon
- $('ul#apps li:first-child').data('dir','').droppable(crumbDropOptions);
-
// Triggers invisible file input
$('#upload a').on('click', function() {
$(this).parent().children('#file_upload_start').trigger('click');
@@ -308,7 +260,7 @@ $(document).ready(function() {
var filename=$(this).parent().parent().attr('data-file');
var tr = FileList.findFileEl(filename);
var renaming=tr.data('renaming');
- if (!renaming && !FileList.isLoading(filename)) {
+ if (!renaming) {
FileActions.currentFile = $(this).parent();
var mime=FileActions.getCurrentMimeType();
var type=FileActions.getCurrentType();
@@ -374,15 +326,15 @@ $(document).ready(function() {
dir = OC.dirname(dir) || '/';
}
else {
- files = getSelectedFilesTrash('name');
+ files = Files.getSelectedFiles('name');
}
OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
- OC.redirect(FileList.getDownloadUrl(files, dir));
+ OC.redirect(Files.getDownloadUrl(files, dir));
return false;
});
$('.delete-selected').click(function(event) {
- var files=getSelectedFilesTrash('name');
+ var files = Files.getSelectedFiles('name');
event.preventDefault();
if (FileList.isAllSelected()) {
files = null;
@@ -400,16 +352,6 @@ $(document).ready(function() {
//do a background scan if needed
scanFiles();
- Files.initBreadCrumbs();
-
- $(window).resize(function() {
- var width = $(this).width();
- Files.resizeBreadcrumbs(width, false);
- });
-
- var width = $(this).width();
- Files.resizeBreadcrumbs(width, true);
-
// display storage warnings
setTimeout(Files.displayStorageWarnings, 100);
OC.Notification.setDefault(Files.displayStorageWarnings);
@@ -500,7 +442,7 @@ var createDragShadow = function(event) {
$(event.target).parents('tr').find('td input:first').prop('checked',true);
}
- var selectedFiles = getSelectedFilesTrash();
+ var selectedFiles = Files.getSelectedFiles();
if (!isDragSelected && selectedFiles.length === 1) {
//revert the selection
@@ -616,52 +558,8 @@ var folderDropOptions={
tolerance: 'pointer'
};
-var crumbDropOptions={
- drop: function( event, ui ) {
- var target=$(this).data('dir');
- var dir = $('#dir').val();
- while(dir.substr(0,1) === '/') {//remove extra leading /'s
- dir=dir.substr(1);
- }
- dir = '/' + dir;
- if (dir.substr(-1,1) !== '/') {
- dir = dir + '/';
- }
- if (target === dir || target+'/' === dir) {
- return;
- }
- var files = ui.helper.find('tr');
- $(files).each(function(i,row) {
- var dir = $(row).data('dir');
- var file = $(row).data('filename');
- //slapdash selector, tracking down our original element that the clone budded off of.
- var origin = $('tr[data-id=' + $(row).data('origin') + ']');
- var td = origin.children('td.filename');
- var oldBackgroundImage = td.css('background-image');
- td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
- $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) {
- if (result) {
- if (result.status === 'success') {
- FileList.remove(file);
- procesSelection();
- $('#notification').hide();
- } else {
- $('#notification').hide();
- $('#notification').text(result.data.message);
- $('#notification').fadeIn();
- }
- } else {
- OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
- }
- td.css('background-image', oldBackgroundImage);
- });
- });
- },
- tolerance: 'pointer'
-};
-
function procesSelection() {
- var selected = getSelectedFilesTrash();
+ var selected = Files.getSelectedFiles();
var selectedFiles = selected.filter(function(el) {
return el.type==='file';
});
@@ -711,7 +609,7 @@ function procesSelection() {
* if property is set, an array with that property for each file is returnd
* if it's ommited an array of objects with all properties is returned
*/
-function getSelectedFilesTrash(property) {
+Files.getSelectedFiles = function(property) {
var elements=$('td.filename input:checkbox:checked').parent().parent();
var files=[];
elements.each(function(i,element) {
@@ -737,7 +635,7 @@ Files.getMimeIcon = function(mime, ready) {
ready(Files.getMimeIcon.cache[mime]);
} else {
$.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path) {
- if(SVGSupport()){
+ if(OC.Util.hasSVGSupport()){
path = path.substr(0, path.length-4) + '.svg';
}
Files.getMimeIcon.cache[mime]=path;
@@ -752,25 +650,32 @@ function getPathForPreview(name) {
return path;
}
+/**
+ * Generates a preview URL based on the URL space.
+ * @param urlSpec map with {x: width, y: height, file: file path}
+ * @return preview URL
+ */
+Files.generatePreviewUrl = function(urlSpec) {
+ urlSpec = urlSpec || {};
+ if (!urlSpec.x) {
+ urlSpec.x = $('#filestable').data('preview-x');
+ }
+ if (!urlSpec.y) {
+ urlSpec.y = $('#filestable').data('preview-y');
+ }
+ urlSpec.y *= window.devicePixelRatio;
+ urlSpec.x *= window.devicePixelRatio;
+ urlSpec.forceIcon = 0;
+ return OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
+}
+
Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
// get mime icon url
Files.getMimeIcon(mime, function(iconURL) {
- var urlSpec = {};
- var previewURL;
+ var previewURL,
+ urlSpec = {};
ready(iconURL); // set mimeicon URL
- // now try getting a preview thumbnail URL
- if ( ! width ) {
- width = $('#filestable').data('preview-x');
- }
- if ( ! height ) {
- height = $('#filestable').data('preview-y');
- }
- // note: the order of arguments must match the one
- // from the server's template so that the browser
- // knows it's the same file for caching
- urlSpec.x = width;
- urlSpec.y = height;
urlSpec.file = Files.fixPath(path);
if (etag){
@@ -781,15 +686,9 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
console.warn('Files.lazyLoadPreview(): missing etag argument');
}
- if ( $('#isPublic').length ) {
- urlSpec.t = $('#dirToken').val();
- previewURL = OC.generateUrl('/publicpreview.png?') + $.param(urlSpec);
- } else {
- previewURL = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
- }
+ previewURL = Files.generatePreviewUrl(urlSpec);
previewURL = previewURL.replace('(', '%28');
previewURL = previewURL.replace(')', '%29');
- previewURL += '&forceIcon=0';
// preload image to prevent delay
// this will make the browser cache the image
@@ -799,7 +698,7 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
if (img.width > 5) {
ready(previewURL);
}
- }
+ };
img.src = previewURL;
});
};
@@ -838,14 +737,8 @@ function checkTrashStatus() {
});
}
-function onClickBreadcrumb(e) {
- var $el = $(e.target).closest('.crumb'),
- $targetDir = $el.data('dir'),
- isPublic = !!$('#isPublic').val();
-
- if ($targetDir !== undefined && !isPublic) {
- e.preventDefault();
- FileList.changeDirectory(decodeURIComponent($targetDir));
- }
+// override core's fileDownloadPath (legacy)
+function fileDownloadPath(dir, file) {
+ return Files.getDownloadUrl(file, dir);
}
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 147d77d4cb08df4c52c22fc68d55b93fe88ac137..e7c081b1c47e1d066cb758ae316bf8507687780e 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -27,9 +27,9 @@ $TRANSLATIONS = array(
"Share" => "شارك",
"Delete permanently" => "حذف بشكل دائم",
"Rename" => "إعادة تسميه",
+"Error moving file" => "حدث خطأ أثناء نقل الملف",
+"Error" => "خطأ",
"Pending" => "قيد الانتظار",
-"replaced {new_name} with {old_name}" => "استبدل {new_name} بـ {old_name}",
-"undo" => "تراجع",
"_%n folder_::_%n folders_" => array("لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"),
"_%n file_::_%n files_" => array("لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"),
"{dirs} and {files}" => "{dirs} و {files}",
@@ -40,8 +40,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
"Your download is being prepared. This might take some time if the files are big." => "جاري تجهيز عملية التحميل. قد تستغرق بعض الوقت اذا كان حجم الملفات كبير.",
-"Error moving file" => "حدث خطأ أثناء نقل الملف",
-"Error" => "خطأ",
"Name" => "اسم",
"Size" => "حجم",
"Modified" => "معدل",
diff --git a/apps/files/l10n/ast.php b/apps/files/l10n/ast.php
new file mode 100644
index 0000000000000000000000000000000000000000..93ae47b25c563eb039b9f565675d52f8faf0542a
--- /dev/null
+++ b/apps/files/l10n/ast.php
@@ -0,0 +1,29 @@
+ "El nome de ficheru nun pue quedar baleru.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválidu, los caráuteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" nun tán permitíos.",
+"No file was uploaded. Unknown error" => "Nun se xubió dengún ficheru. Fallu desconocíu",
+"There is no error, the file uploaded with success" => "Nun hai dengún fallu, el ficheru xubióse ensin problemes",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El ficheru xubíu perpasa la direutiva \"MAX_FILE_SIZE\" especificada nel formulariu HTML",
+"The uploaded file was only partially uploaded" => "El ficheru xubióse de mou parcial",
+"No file was uploaded" => "Nun se xubió dengún ficheru",
+"Missing a temporary folder" => "Falta una carpeta temporal",
+"Failed to write to disk" => "Fallu al escribir al discu",
+"Not enough storage available" => "Nun hai abondu espaciu disponible",
+"Files" => "Ficheros",
+"Share" => "Compartir",
+"Rename" => "Renomar",
+"Error" => "Fallu",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
+"Name" => "Nome",
+"Size" => "Tamañu",
+"Upload" => "Xubir",
+"Save" => "Guardar",
+"New folder" => "Nueva carpeta",
+"Cancel upload" => "Encaboxar xuba",
+"Download" => "Descargar",
+"Delete" => "Desaniciar"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/be.php b/apps/files/l10n/be.php
index 830400b93fbf643f6cea6e83b0fb51f0519e0221..f97fc27e2d176fdb941614952e9f705e973b9859 100644
--- a/apps/files/l10n/be.php
+++ b/apps/files/l10n/be.php
@@ -1,8 +1,8 @@
"Памылка",
"_%n folder_::_%n folders_" => array("","","",""),
"_%n file_::_%n files_" => array("","","",""),
-"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
-"Error" => "Памылка"
+"_Uploading %n file_::_Uploading %n files_" => array("","","","")
);
$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index 12e699064be74512d19947e007a52e320553e042..2418010cdd9a747a4b80074e1ac771cc8e0f455b 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -12,12 +12,11 @@ $TRANSLATIONS = array(
"Share" => "Споделяне",
"Delete permanently" => "Изтриване завинаги",
"Rename" => "Преименуване",
+"Error" => "Грешка",
"Pending" => "Чакащо",
-"undo" => "възтановяване",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Грешка",
"Name" => "Име",
"Size" => "Размер",
"Modified" => "Променено",
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index 11f3525690b8f5d6409683e6813a2c45ff151668..667a68bb6277fa42f923697741d373666c26b9c9 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -19,13 +19,11 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} টি বিদ্যমান",
"Share" => "ভাগাভাগি কর",
"Rename" => "পূনঃনামকরণ",
+"Error" => "সমস্যা",
"Pending" => "মুলতুবি",
-"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে",
-"undo" => "ক্রিয়া প্রত্যাহার",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "সমস্যা",
"Name" => "রাম",
"Size" => "আকার",
"Modified" => "পরিবর্তিত",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index a4418b1be50fd8a2731ee054a56a4d12398b563d..8ef9b764484519005a77d986580a44cbf710e52b 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Comparteix",
"Delete permanently" => "Esborra permanentment",
"Rename" => "Reanomena",
+"Error moving file" => "Error en moure el fitxer",
+"Error" => "Error",
"Pending" => "Pendent",
"Could not rename file" => "No es pot canviar el nom de fitxer",
-"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
-"undo" => "desfés",
"Error deleting file." => "Error en esborrar el fitxer.",
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"),
"_%n file_::_%n files_" => array("%n fitxer","%n fitxers"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
"Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.",
-"Error moving file" => "Error en moure el fitxer",
-"Error" => "Error",
"Name" => "Nom",
"Size" => "Mida",
"Modified" => "Modificat",
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 5bcf1087b9c5e38925476b10fed8bdf427d89380..8aea17a7051bc5ba3947db4ad29f809c670d1b3a 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Sdílet",
"Delete permanently" => "Trvale odstranit",
"Rename" => "Přejmenovat",
+"Error moving file" => "Chyba při přesunu souboru",
+"Error" => "Chyba",
"Pending" => "Nevyřízené",
"Could not rename file" => "Nepodařilo se přejmenovat soubor",
-"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
-"undo" => "vrátit zpět",
"Error deleting file." => "Chyba při mazání souboru.",
"_%n folder_::_%n folders_" => array("%n složka","%n složky","%n složek"),
"_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
"Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat.",
-"Error moving file" => "Chyba při přesunu souboru",
-"Error" => "Chyba",
"Name" => "Název",
"Size" => "Velikost",
"Modified" => "Upraveno",
diff --git a/apps/files/l10n/cy_GB.php b/apps/files/l10n/cy_GB.php
index df93ca507b1191c92dfabeabe52a6a11f259c2c9..b27e4c3bfc2a53350eb17118d59fd72ef7200949 100644
--- a/apps/files/l10n/cy_GB.php
+++ b/apps/files/l10n/cy_GB.php
@@ -21,16 +21,14 @@ $TRANSLATIONS = array(
"Share" => "Rhannu",
"Delete permanently" => "Dileu'n barhaol",
"Rename" => "Ailenwi",
+"Error" => "Gwall",
"Pending" => "I ddod",
-"replaced {new_name} with {old_name}" => "newidiwyd {new_name} yn lle {old_name}",
-"undo" => "dadwneud",
"_%n folder_::_%n folders_" => array("","","",""),
"_%n file_::_%n files_" => array("","","",""),
"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
"Your storage is full, files can not be updated or synced anymore!" => "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
"Your storage is almost full ({usedSpacePercent}%)" => "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr.",
-"Error" => "Gwall",
"Name" => "Enw",
"Size" => "Maint",
"Modified" => "Addaswyd",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 7069849b430305d3edf95f6b5b0d6e14b851f834..6a7ea4745ccbfc8da1f6f13202b0f32a6bbc0355 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Del",
"Delete permanently" => "Slet permanent",
"Rename" => "Omdøb",
+"Error moving file" => "Fejl ved flytning af fil",
+"Error" => "Fejl",
"Pending" => "Afventer",
"Could not rename file" => "Kunne ikke omdøbe filen",
-"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
-"undo" => "fortryd",
"Error deleting file." => "Fejl ved sletnign af fil.",
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
"_%n file_::_%n files_" => array("%n fil","%n filer"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
"Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.",
-"Error moving file" => "Fejl ved flytning af fil",
-"Error" => "Fejl",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 376cbaa4e25146857efb8f1967e54344bf996d85..401ee243f2894af26ed0d30d9417b292f1daf506 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
"Rename" => "Umbenennen",
+"Error moving file" => "Fehler beim Verschieben der Datei",
+"Error" => "Fehler",
"Pending" => "Ausstehend",
"Could not rename file" => "Die Datei konnte nicht umbenannt werden",
-"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
-"undo" => "rückgängig machen",
"Error deleting file." => "Fehler beim Löschen der Datei.",
"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
"Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
-"Error moving file" => "Fehler beim Verschieben der Datei",
-"Error" => "Fehler",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Geändert",
diff --git a/apps/files/l10n/de_CH.php b/apps/files/l10n/de_CH.php
index 8b70d7f0f062442093473565f029ceb6d13f9824..f797be99e9829d20e1f19c6f381b3319d0324f7f 100644
--- a/apps/files/l10n/de_CH.php
+++ b/apps/files/l10n/de_CH.php
@@ -23,9 +23,8 @@ $TRANSLATIONS = array(
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
"Rename" => "Umbenennen",
+"Error" => "Fehler",
"Pending" => "Ausstehend",
-"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
-"undo" => "rückgängig machen",
"_%n folder_::_%n folders_" => array("","%n Ordner"),
"_%n file_::_%n files_" => array("","%n Dateien"),
"_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
@@ -33,7 +32,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei grösseren Dateien etwas dauern.",
-"Error" => "Fehler",
"Name" => "Name",
"Size" => "Grösse",
"Modified" => "Geändert",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 0df0f46dc24ff4179a1019621ed8f32cfa630b1a..4768faa97da79daf1c117d6dcd0d1342ad06aa4b 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
"Rename" => "Umbenennen",
+"Error moving file" => "Fehler beim Verschieben der Datei",
+"Error" => "Fehler",
"Pending" => "Ausstehend",
"Could not rename file" => "Die Datei konnte nicht umbenannt werden",
-"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
-"undo" => "rückgängig machen",
"Error deleting file." => "Fehler beim Löschen der Datei.",
"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisieren Sie Ihr privates Schlüssel-Passwort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
-"Error moving file" => "Fehler beim Verschieben der Datei",
-"Error" => "Fehler",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Geändert",
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 9144cf3ea10c9713c0bbeaab040871182376e70d..713072d3e0e24890ac870f4c66dce7becdcc84e3 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
"\"%s\" is an invalid file name." => "Το \"%s\" είναι ένα μη έγκυρο όνομα αρχείου.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
+"The target folder has been moved or deleted." => "Ο φάκελος προορισμού έχει μετακινηθεί ή διαγραφεί.",
"The name %s is already used in the folder %s. Please choose a different name." => "Το όνομα %s χρησιμοποιείτε ήδη στον φάκελο %s. Παρακαλώ επιλέξτε ένα άλλο όνομα.",
"Not a valid source" => "Μη έγκυρη πηγή",
"Server is not allowed to open URLs, please check the server configuration" => "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή",
@@ -28,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Μη έγκυρος φάκελος.",
"Files" => "Αρχεία",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes",
+"Total file size {size1} exceeds upload limit {size2}" => "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}",
"Upload cancelled." => "Η αποστολή ακυρώθηκε.",
"Could not get result from server." => "Αδυναμία λήψης αποτελέσματος από το διακομιστή.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
@@ -40,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Διαμοιρασμός",
"Delete permanently" => "Μόνιμη διαγραφή",
"Rename" => "Μετονομασία",
+"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
+"Error" => "Σφάλμα",
"Pending" => "Εκκρεμεί",
"Could not rename file" => "Αδυναμία μετονομασίας αρχείου",
-"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
-"undo" => "αναίρεση",
"Error deleting file." => "Σφάλμα διαγραφής αρχείου.",
"_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"),
"_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"),
@@ -56,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
"Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.",
-"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
-"Error" => "Σφάλμα",
"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "Τροποποιήθηκε",
diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php
index 3fb2cb62e609cf9572f92c1e122783266fd456d1..705f6b99b0b25f84357d567fbd1520b45ae33c4b 100644
--- a/apps/files/l10n/en_GB.php
+++ b/apps/files/l10n/en_GB.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Share",
"Delete permanently" => "Delete permanently",
"Rename" => "Rename",
+"Error moving file" => "Error moving file",
+"Error" => "Error",
"Pending" => "Pending",
"Could not rename file" => "Could not rename file",
-"replaced {new_name} with {old_name}" => "replaced {new_name} with {old_name}",
-"undo" => "undo",
"Error deleting file." => "Error deleting file.",
"_%n folder_::_%n folders_" => array("%n folder","%n folders"),
"_%n file_::_%n files_" => array("%n file","%n files"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
-"Error moving file" => "Error moving file",
-"Error" => "Error",
"Name" => "Name",
"Size" => "Size",
"Modified" => "Modified",
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index b92fef50006a1a36c9cb2c5d2aa6e843063c173b..a6e0d553177e66387a183a373a75bd655297cb46 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -35,10 +35,10 @@ $TRANSLATIONS = array(
"Share" => "Kunhavigi",
"Delete permanently" => "Forigi por ĉiam",
"Rename" => "Alinomigi",
+"Error moving file" => "Eraris movo de dosiero",
+"Error" => "Eraro",
"Pending" => "Traktotaj",
"Could not rename file" => "Ne povis alinomiĝi dosiero",
-"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
-"undo" => "malfari",
"_%n folder_::_%n folders_" => array("%n dosierujo","%n dosierujoj"),
"_%n file_::_%n files_" => array("%n dosiero","%n dosieroj"),
"{dirs} and {files}" => "{dirs} kaj {files}",
@@ -46,8 +46,6 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
"Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.",
-"Error moving file" => "Eraris movo de dosiero",
-"Error" => "Eraro",
"Name" => "Nomo",
"Size" => "Grando",
"Modified" => "Modifita",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 6083ab2a5d68b24e1eb6a1a2c8ba6a539add19a6..10a378c371bd1cf7bd0f9542421b9908252032c1 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renombrar",
+"Error moving file" => "Error moviendo archivo",
+"Error" => "Error",
"Pending" => "Pendiente",
"Could not rename file" => "No se pudo renombrar el archivo",
-"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"undo" => "deshacer",
"Error deleting file." => "Error al borrar el archivo",
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.",
-"Error moving file" => "Error moviendo archivo",
-"Error" => "Error",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index 105321276c1b1ea370ebedd2e783678f1bd05c2d..f78615fc923d438a9a241ebf05d0b0e66f425390 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Compartir",
"Delete permanently" => "Borrar permanentemente",
"Rename" => "Cambiar nombre",
+"Error moving file" => "Error moviendo el archivo",
+"Error" => "Error",
"Pending" => "Pendientes",
"Could not rename file" => "No se pudo renombrar el archivo",
-"replaced {new_name} with {old_name}" => "se reemplazó {new_name} con {old_name}",
-"undo" => "deshacer",
"Error deleting file." => "Error al borrar el archivo.",
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
"Your download is being prepared. This might take some time if the files are big." => "Tu descarga se está preparando. Esto puede demorar si los archivos son muy grandes.",
-"Error moving file" => "Error moviendo el archivo",
-"Error" => "Error",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/es_CL.php b/apps/files/l10n/es_CL.php
index 4f5e35bd887a563157a14b065a526e55a65e15af..8e051d1c389cbeadbe1c689678ab5a86dad73845 100644
--- a/apps/files/l10n/es_CL.php
+++ b/apps/files/l10n/es_CL.php
@@ -2,10 +2,10 @@
$TRANSLATIONS = array(
"Files" => "Archivos",
"Share" => "Compartir",
+"Error" => "Error",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Error",
"Upload" => "Subir",
"Download" => "Descargar"
);
diff --git a/apps/files/l10n/es_MX.php b/apps/files/l10n/es_MX.php
index f8a72f95d859b2415168a6802731d41bc2ae4ca6..ea7db0d7b9ce1583a634991cadb2aa2e6466b3bf 100644
--- a/apps/files/l10n/es_MX.php
+++ b/apps/files/l10n/es_MX.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renombrar",
+"Error moving file" => "Error moviendo archivo",
+"Error" => "Error",
"Pending" => "Pendiente",
"Could not rename file" => "No se pudo renombrar el archivo",
-"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"undo" => "deshacer",
"Error deleting file." => "Error borrando el archivo.",
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.",
-"Error moving file" => "Error moviendo archivo",
-"Error" => "Error",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index f1fdc82673c425681d6ece6f24b42b72ea3da6a5..4f0614feb5e9436210abcbbfe6f6b7f64e05296a 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -3,7 +3,9 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Ei saa liigutada faili %s - samanimeline fail on juba olemas",
"Could not move %s" => "%s liigutamine ebaõnnestus",
"File name cannot be empty." => "Faili nimi ei saa olla tühi.",
+"\"%s\" is an invalid file name." => "\"%s\" on vigane failinimi.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
+"The target folder has been moved or deleted." => "Sihtkataloog on ümber tõstetud või kustutatud.",
"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.",
"Not a valid source" => "Pole korrektne lähteallikas",
"Server is not allowed to open URLs, please check the server configuration" => "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust",
@@ -27,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Vigane kaust.",
"Files" => "Failid",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ei saa üles laadida {filename}, kuna see on kataloog või selle suurus on 0 baiti",
+"Total file size {size1} exceeds upload limit {size2}" => "Faili suurus {size1} ületab faili üleslaadimise mahu piirangu {size2}.",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
"Upload cancelled." => "Üleslaadimine tühistati.",
"Could not get result from server." => "Serverist ei saadud tulemusi",
"File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
@@ -39,23 +43,22 @@ $TRANSLATIONS = array(
"Share" => "Jaga",
"Delete permanently" => "Kustuta jäädavalt",
"Rename" => "Nimeta ümber",
+"Error moving file" => "Viga faili eemaldamisel",
+"Error" => "Viga",
"Pending" => "Ootel",
"Could not rename file" => "Ei suuda faili ümber nimetada",
-"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
-"undo" => "tagasi",
"Error deleting file." => "Viga faili kustutamisel.",
"_%n folder_::_%n folders_" => array("%n kataloog","%n kataloogi"),
"_%n file_::_%n files_" => array("%n fail","%n faili"),
"{dirs} and {files}" => "{dirs} ja {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"),
+"\"{name}\" is an invalid file name." => "\"{name}\" on vigane failinimi.",
"Your storage is full, files can not be updated or synced anymore!" => "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is almost full ({usedSpacePercent}%)" => "Su andmemaht on peaaegu täis ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
"Your download is being prepared. This might take some time if the files are big." => "Valmistatakse allalaadimist. See võib võtta veidi aega, kui on tegu suurte failidega. ",
-"Error moving file" => "Viga faili eemaldamisel",
-"Error" => "Viga",
"Name" => "Nimi",
"Size" => "Suurus",
"Modified" => "Muudetud",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index be601eecfbf256e0f89479a350fd1c7262bb1972..d59dd396283ae737cde1de56ea61087c2ab80fdf 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Elkarbanatu",
"Delete permanently" => "Ezabatu betirako",
"Rename" => "Berrizendatu",
+"Error moving file" => "Errorea fitxategia mugitzean",
+"Error" => "Errorea",
"Pending" => "Zain",
"Could not rename file" => "Ezin izan da fitxategia berrizendatu",
-"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
-"undo" => "desegin",
"Error deleting file." => "Errorea fitxategia ezabatzerakoan.",
"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
"Your download is being prepared. This might take some time if the files are big." => "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. ",
-"Error moving file" => "Errorea fitxategia mugitzean",
-"Error" => "Errorea",
"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index e1142aba160f5a55db13e4c83e6178e695769556..2e8f6255e2440887a51ab5657c104975aa6e949a 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -23,16 +23,14 @@ $TRANSLATIONS = array(
"Share" => "اشتراکگذاری",
"Delete permanently" => "حذف قطعی",
"Rename" => "تغییرنام",
+"Error" => "خطا",
"Pending" => "در انتظار",
-"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
-"undo" => "بازگشت",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array("در حال بارگذاری %n فایل"),
"Your storage is full, files can not be updated or synced anymore!" => "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
"Your storage is almost full ({usedSpacePercent}%)" => "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد.",
-"Error" => "خطا",
"Name" => "نام",
"Size" => "اندازه",
"Modified" => "تاریخ",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 6b94d8b4fae14f2d4324806ccb4ddefa7a9a8398..b6383c144deab46a501b4b04c4cd93f0ac931a84 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -41,9 +41,10 @@ $TRANSLATIONS = array(
"Share" => "Jaa",
"Delete permanently" => "Poista pysyvästi",
"Rename" => "Nimeä uudelleen",
+"Error moving file" => "Virhe tiedostoa siirrettäessä",
+"Error" => "Virhe",
"Pending" => "Odottaa",
"Could not rename file" => "Tiedoston nimeäminen uudelleen epäonnistui",
-"undo" => "kumoa",
"Error deleting file." => "Virhe tiedostoa poistaessa.",
"_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"),
"_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"),
@@ -54,8 +55,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Tallennustila on melkein loppu ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
"Your download is being prepared. This might take some time if the files are big." => "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan.",
-"Error moving file" => "Virhe tiedostoa siirrettäessä",
-"Error" => "Virhe",
"Name" => "Nimi",
"Size" => "Koko",
"Modified" => "Muokattu",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index ad768f03de72c7b9d4793d65783e04a8200f152f..0eed6a70f91d9d4d0c6cb1cec8de6565b33ff3e7 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Partager",
"Delete permanently" => "Supprimer de façon définitive",
"Rename" => "Renommer",
+"Error moving file" => "Erreur lors du déplacement du fichier",
+"Error" => "Erreur",
"Pending" => "En attente",
"Could not rename file" => "Impossible de renommer le fichier",
-"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
-"undo" => "annuler",
"Error deleting file." => "Erreur pendant la suppression du fichier.",
"_%n folder_::_%n folders_" => array("%n dossier","%n dossiers"),
"_%n file_::_%n files_" => array("%n fichier","%n fichiers"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
"Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.",
-"Error moving file" => "Erreur lors du déplacement du fichier",
-"Error" => "Erreur",
"Name" => "Nom",
"Size" => "Taille",
"Modified" => "Modifié",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 7ea8181dc713412707b4ba3b46fa938af2dd7ced..9fe6546de510a1663bf76e2ab8676c0d02a1895a 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renomear",
+"Error moving file" => "Produciuse un erro ao mover o ficheiro",
+"Error" => "Erro",
"Pending" => "Pendentes",
"Could not rename file" => "Non foi posíbel renomear o ficheiro",
-"replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}",
-"undo" => "desfacer",
"Error deleting file." => "Produciuse un erro ao eliminar o ficheiro.",
"_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"),
"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "A chave privada para o aplicativo de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
"Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.",
-"Error moving file" => "Produciuse un erro ao mover o ficheiro",
-"Error" => "Erro",
"Name" => "Nome",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 2035c8488bd284e638e0a5b7e3fe895e6692270e..ab8640a91d14e805e7f01dbad6ffb0bfd077acd8 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -23,14 +23,12 @@ $TRANSLATIONS = array(
"Share" => "שתף",
"Delete permanently" => "מחק לצמיתות",
"Rename" => "שינוי שם",
+"Error" => "שגיאה",
"Pending" => "ממתין",
-"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
-"undo" => "ביטול",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Your storage is almost full ({usedSpacePercent}%)" => "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)",
-"Error" => "שגיאה",
"Name" => "שם",
"Size" => "גודל",
"Modified" => "זמן שינוי",
diff --git a/apps/files/l10n/hi.php b/apps/files/l10n/hi.php
index ae01bfc47e1ac6f2fb3043a291f650d4d6124c29..b4234b513765f6fbc79e0da6528efb848d09b1dd 100644
--- a/apps/files/l10n/hi.php
+++ b/apps/files/l10n/hi.php
@@ -1,10 +1,10 @@
"साझा करें",
+"Error" => "त्रुटि",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "त्रुटि",
"Upload" => "अपलोड ",
"Save" => "सहेजें"
);
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 5048a15c8bbe0c2fb0612ce8a6410dcafb768ca9..ef978e6cfb71d74962cb16a6382e6d6a83b1c701 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -11,12 +11,11 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
"Share" => "Podijeli",
"Rename" => "Promjeni ime",
+"Error" => "Greška",
"Pending" => "U tijeku",
-"undo" => "vrati",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"Error" => "Greška",
"Name" => "Ime",
"Size" => "Veličina",
"Modified" => "Zadnja promjena",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 6f5ba9b472498ebfdd15333f7ec48631a114d667..e4ab355c9b1fe4c57261e2c0f98b03f4d2ba6f2d 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Megosztás",
"Delete permanently" => "Végleges törlés",
"Rename" => "Átnevezés",
+"Error moving file" => "Az állomány áthelyezése nem sikerült.",
+"Error" => "Hiba",
"Pending" => "Folyamatban",
"Could not rename file" => "Az állomány nem nevezhető át",
-"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
-"undo" => "visszavonás",
"Error deleting file." => "Hiba a file törlése közben.",
"_%n folder_::_%n folders_" => array("%n mappa","%n mappa"),
"_%n file_::_%n files_" => array("%n állomány","%n állomány"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
"Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.",
-"Error moving file" => "Az állomány áthelyezése nem sikerült.",
-"Error" => "Hiba",
"Name" => "Név",
"Size" => "Méret",
"Modified" => "Módosítva",
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
index 82fd2e658d717bf62e2b0dc8f8350caaefbf1cdb..420e48395c75451ea246e3c660093846ea910000 100644
--- a/apps/files/l10n/ia.php
+++ b/apps/files/l10n/ia.php
@@ -5,10 +5,10 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Manca un dossier temporari",
"Files" => "Files",
"Share" => "Compartir",
+"Error" => "Error",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Error",
"Name" => "Nomine",
"Size" => "Dimension",
"Modified" => "Modificate",
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 45bc05c9182cdd93de9ac4535bd2833140e07133..8356c5465eb377ac08cc5d64f005b649aa0820b9 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -37,10 +37,10 @@ $TRANSLATIONS = array(
"Share" => "Bagikan",
"Delete permanently" => "Hapus secara permanen",
"Rename" => "Ubah nama",
+"Error moving file" => "Galat saat memindahkan berkas",
+"Error" => "Galat",
"Pending" => "Menunggu",
"Could not rename file" => "Tidak dapat mengubah nama berkas",
-"replaced {new_name} with {old_name}" => "mengganti {new_name} dengan {old_name}",
-"undo" => "urungkan",
"Error deleting file." => "Galat saat menghapus berkas.",
"_%n folder_::_%n folders_" => array("%n folder"),
"_%n file_::_%n files_" => array("%n berkas"),
@@ -52,8 +52,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
"Your download is being prepared. This might take some time if the files are big." => "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar.",
-"Error moving file" => "Galat saat memindahkan berkas",
-"Error" => "Galat",
"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index 088cdefa3048aaf7b5c8e7cf1e922f8c83e6cf1b..00503028e0e7ebbe3edb82279050ea7c7b9af92f 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -19,13 +19,11 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} er þegar til",
"Share" => "Deila",
"Rename" => "Endurskýra",
+"Error" => "Villa",
"Pending" => "Bíður",
-"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
-"undo" => "afturkalla",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Villa",
"Name" => "Nafn",
"Size" => "Stærð",
"Modified" => "Breytt",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index e1a34e646fb280f30e7724caf0f4e99c45a3ee7c..9539496a3fc31a0a9674e55cd841754824192178 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Condividi",
"Delete permanently" => "Elimina definitivamente",
"Rename" => "Rinomina",
+"Error moving file" => "Errore durante lo spostamento del file",
+"Error" => "Errore",
"Pending" => "In corso",
"Could not rename file" => "Impossibile rinominare il file",
-"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
-"undo" => "annulla",
"Error deleting file." => "Errore durante l'eliminazione del file.",
"_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"),
"_%n file_::_%n files_" => array("%n file","%n file"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
"Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.",
-"Error moving file" => "Errore durante lo spostamento del file",
-"Error" => "Errore",
"Name" => "Nome",
"Size" => "Dimensione",
"Modified" => "Modificato",
diff --git a/apps/files/l10n/ja.php b/apps/files/l10n/ja.php
index eb6cb0efc505d0f1db43634e9427cd1bc489ccb8..dd8d4e4e3f63f8daf79b715aff7fa297b26d59ac 100644
--- a/apps/files/l10n/ja.php
+++ b/apps/files/l10n/ja.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "共有",
"Delete permanently" => "完全に削除する",
"Rename" => "名前の変更",
+"Error moving file" => "ファイルの移動エラー",
+"Error" => "エラー",
"Pending" => "中断",
"Could not rename file" => "ファイルの名前変更ができませんでした",
-"replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換",
-"undo" => "元に戻す",
"Error deleting file." => "ファイルの削除エラー。",
"_%n folder_::_%n folders_" => array("%n 個のフォルダー"),
"_%n file_::_%n files_" => array("%n 個のファイル"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
"Your download is being prepared. This might take some time if the files are big." => "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。",
-"Error moving file" => "ファイルの移動エラー",
-"Error" => "エラー",
"Name" => "名前",
"Size" => "サイズ",
"Modified" => "更新日時",
diff --git a/apps/files/l10n/jv.php b/apps/files/l10n/jv.php
new file mode 100644
index 0000000000000000000000000000000000000000..cfab5af7d1c5e0eba19a0eb99c7a95cb9ff40fa7
--- /dev/null
+++ b/apps/files/l10n/jv.php
@@ -0,0 +1,8 @@
+ array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
+"Download" => "Njipuk"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index 230c2e4ede223f703ed4badf088891b282749bfe..f9749d72bb4b87bf0d75546daa853b3eef8d4459 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -21,16 +21,14 @@ $TRANSLATIONS = array(
"Share" => "გაზიარება",
"Delete permanently" => "სრულად წაშლა",
"Rename" => "გადარქმევა",
+"Error" => "შეცდომა",
"Pending" => "მოცდის რეჟიმში",
-"replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით",
-"undo" => "დაბრუნება",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
"Your storage is full, files can not be updated or synced anymore!" => "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
"Your storage is almost full ({usedSpacePercent}%)" => "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "გადმოწერის მოთხოვნა მუშავდება. ის მოითხოვს გარკვეულ დროს რაგდან ფაილები არის დიდი ზომის.",
-"Error" => "შეცდომა",
"Name" => "სახელი",
"Size" => "ზომა",
"Modified" => "შეცვლილია",
diff --git a/apps/files/l10n/km.php b/apps/files/l10n/km.php
index 702c811ecf2d4e5402461656a73f52a38b396026..a7a01ccab9da7dfdcc58c0a73b53bf501ab573c5 100644
--- a/apps/files/l10n/km.php
+++ b/apps/files/l10n/km.php
@@ -2,11 +2,10 @@
$TRANSLATIONS = array(
"Files" => "ឯកសារ",
"Share" => "ចែករំលែក",
-"undo" => "មិនធ្វើវិញ",
+"Error" => "កំហុស",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
-"Error" => "កំហុស",
"Name" => "ឈ្មោះ",
"Size" => "ទំហំ",
"Upload" => "ផ្ទុកឡើង",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index 92a2578074c150840bdc38c736e96caaf8dd993c..c0f0d7d4454d26e8bfcdb35f4a34ecda2ed7159f 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "공유",
"Delete permanently" => "영구히 삭제",
"Rename" => "이름 바꾸기",
+"Error moving file" => "파일 이동 오류",
+"Error" => "오류",
"Pending" => "대기 중",
"Could not rename file" => "이름을 변경할 수 없음",
-"replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
-"undo" => "실행 취소",
"Error deleting file." => "파일 삭제 오류.",
"_%n folder_::_%n folders_" => array("폴더 %n개"),
"_%n file_::_%n files_" => array("파일 %n개"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
"Your download is being prepared. This might take some time if the files are big." => "다운로드 준비 중입니다. 파일 크기가 크면 시간이 오래 걸릴 수도 있습니다.",
-"Error moving file" => "파일 이동 오류",
-"Error" => "오류",
"Name" => "이름",
"Size" => "크기",
"Modified" => "수정됨",
diff --git a/apps/files/l10n/ku_IQ.php b/apps/files/l10n/ku_IQ.php
index c0141656f5dd731e9cd11164998f660bf298783c..6ec5819d380ed4a9748ae791b057d54072c82e00 100644
--- a/apps/files/l10n/ku_IQ.php
+++ b/apps/files/l10n/ku_IQ.php
@@ -2,10 +2,10 @@
$TRANSLATIONS = array(
"Files" => "پهڕگەکان",
"Share" => "هاوبەشی کردن",
+"Error" => "ههڵه",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "ههڵه",
"Name" => "ناو",
"Upload" => "بارکردن",
"Save" => "پاشکهوتکردن",
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index 822ca7e2d02318b377ab6a86495114fe5447a51a..38b5d672d02e3c54be931fffe8595c0dd9e8d25f 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -11,11 +11,10 @@ $TRANSLATIONS = array(
"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.",
"Share" => "Deelen",
"Rename" => "Ëm-benennen",
-"undo" => "réckgängeg man",
+"Error" => "Fehler",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Fehler",
"Name" => "Numm",
"Size" => "Gréisst",
"Modified" => "Geännert",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index 14c48621174e41d55ba1b014890d1a381847338f..50097e5f3624d5f899f1515dbdea3df60551dbf5 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Dalintis",
"Delete permanently" => "Ištrinti negrįžtamai",
"Rename" => "Pervadinti",
+"Error moving file" => "Klaida perkeliant failą",
+"Error" => "Klaida",
"Pending" => "Laukiantis",
"Could not rename file" => "Neįmanoma pervadinti failo",
-"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
-"undo" => "anuliuoti",
"Error deleting file." => "Klaida trinant failą.",
"_%n folder_::_%n folders_" => array("%n aplankas","%n aplankai","%n aplankų"),
"_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
"Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
-"Error moving file" => "Klaida perkeliant failą",
-"Error" => "Klaida",
"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index 0d2ebf281abd26f52fb96f9e2df45753e631f2c3..fcb1a59aa38ba5f2f9bd3247c3e45ae85b16e558 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -23,9 +23,8 @@ $TRANSLATIONS = array(
"Share" => "Dalīties",
"Delete permanently" => "Dzēst pavisam",
"Rename" => "Pārsaukt",
+"Error" => "Kļūda",
"Pending" => "Gaida savu kārtu",
-"replaced {new_name} with {old_name}" => "aizvietoja {new_name} ar {old_name}",
-"undo" => "atsaukt",
"_%n folder_::_%n folders_" => array("%n mapes","%n mape","%n mapes"),
"_%n file_::_%n files_" => array("%n faili","%n fails","%n faili"),
"_Uploading %n file_::_Uploading %n files_" => array("%n","Augšupielāde %n failu","Augšupielāde %n failus"),
@@ -33,7 +32,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
"Your download is being prepared. This might take some time if the files are big." => "Tiek sagatavota lejupielāde. Tas var aizņemt kādu laiciņu, ja datnes ir lielas.",
-"Error" => "Kļūda",
"Name" => "Nosaukums",
"Size" => "Izmērs",
"Modified" => "Mainīts",
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index bc9ee15823c05cb754e3a2acab116087d298a8e5..fa6efd1aff3cdd82ff2f0c4d53d076ac863440ae 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -34,10 +34,10 @@ $TRANSLATIONS = array(
"Share" => "Сподели",
"Delete permanently" => "Трајно избришани",
"Rename" => "Преименувај",
+"Error moving file" => "Грешка при префрлање на датотека",
+"Error" => "Грешка",
"Pending" => "Чека",
"Could not rename file" => "Не можам да ја преименувам датотеката",
-"replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}",
-"undo" => "врати",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"{dirs} and {files}" => "{dirs} и {files}",
@@ -45,8 +45,6 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!",
"Your storage is almost full ({usedSpacePercent}%)" => "Вашиот сториџ е скоро полн ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Вашето преземање се подготвува. Ова може да потрае до колку датотеките се големи.",
-"Error moving file" => "Грешка при префрлање на датотека",
-"Error" => "Грешка",
"Name" => "Име",
"Size" => "Големина",
"Modified" => "Променето",
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index 0a7a50abb1a0d7b4d4eeb80d57cd03263c1abc9c..df0054c3d00b8affc289684e8142253cf76f89df 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -11,11 +11,11 @@ $TRANSLATIONS = array(
"Upload cancelled." => "Muatnaik dibatalkan.",
"Share" => "Kongsi",
"Rename" => "Namakan",
+"Error" => "Ralat",
"Pending" => "Dalam proses",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
-"Error" => "Ralat",
"Name" => "Nama",
"Size" => "Saiz",
"Modified" => "Dimodifikasi",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index b90bee38f998d0307d8accf410ffd5ad2bf35af7..f1e2c2edeeb66d93ca08dcc5a38ce2dcb3e6d618 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Del",
"Delete permanently" => "Slett permanent",
"Rename" => "Gi nytt navn",
+"Error moving file" => "Feil ved flytting av fil",
+"Error" => "Feil",
"Pending" => "Ventende",
"Could not rename file" => "Klarte ikke å gi nytt navn til fil",
-"replaced {new_name} with {old_name}" => "erstattet {new_name} med {old_name}",
-"undo" => "angre",
"Error deleting file." => "Feil ved sletting av fil.",
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
"_%n file_::_%n files_" => array("%n fil","%n filer"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
"Your download is being prepared. This might take some time if the files are big." => "Nedlastingen din klargjøres. Hvis filene er store kan dette ta litt tid.",
-"Error moving file" => "Feil ved flytting av fil",
-"Error" => "Feil",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Endret",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index c617f0bfddea053e70e54cbb3455641686d61b34..946c7905b23b2bf9026a9686c9d9ea31ae83c9b3 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Delen",
"Delete permanently" => "Verwijder definitief",
"Rename" => "Hernoem",
+"Error moving file" => "Fout bij verplaatsen bestand",
+"Error" => "Fout",
"Pending" => "In behandeling",
"Could not rename file" => "Kon niet hernoemen bestand",
-"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
-"undo" => "ongedaan maken",
"Error deleting file." => "Fout bij verwijderen bestand.",
"_%n folder_::_%n folders_" => array("","%n mappen"),
"_%n file_::_%n files_" => array("","%n bestanden"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
"Your download is being prepared. This might take some time if the files are big." => "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden.",
-"Error moving file" => "Fout bij verplaatsen bestand",
-"Error" => "Fout",
"Name" => "Naam",
"Size" => "Grootte",
"Modified" => "Aangepast",
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 4f74167d9adfdd36243f2c38e4318d3d6d1d8e6a..bd17fa3386a5512332fc92f1a4e299429a924f2e 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -27,9 +27,9 @@ $TRANSLATIONS = array(
"Share" => "Del",
"Delete permanently" => "Slett for godt",
"Rename" => "Endra namn",
+"Error moving file" => "Feil ved flytting av fil",
+"Error" => "Feil",
"Pending" => "Under vegs",
-"replaced {new_name} with {old_name}" => "bytte ut {new_name} med {old_name}",
-"undo" => "angre",
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
"_%n file_::_%n files_" => array("%n fil","%n filer"),
"{dirs} and {files}" => "{dirs} og {files}",
@@ -38,8 +38,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Lagringa di er nesten full ({usedSpacePercent} %)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
"Your download is being prepared. This might take some time if the files are big." => "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store.",
-"Error moving file" => "Feil ved flytting av fil",
-"Error" => "Feil",
"Name" => "Namn",
"Size" => "Storleik",
"Modified" => "Endra",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index eb1a9038b0839ad15ffeec68fb6bd22d2adb193a..7a24c81974ec9f435b11f383f2f454ce091d8df7 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -11,12 +11,11 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
"Share" => "Parteja",
"Rename" => "Torna nomenar",
+"Error" => "Error",
"Pending" => "Al esperar",
-"undo" => "defar",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "Error",
"Name" => "Nom",
"Size" => "Talha",
"Modified" => "Modificat",
diff --git a/apps/files/l10n/pa.php b/apps/files/l10n/pa.php
index 63fcbe12ddaa1a89d79c12bfc1eea4ca64ce8c53..b18d2071e080a9fdd0b9fbf424c5710e7248a923 100644
--- a/apps/files/l10n/pa.php
+++ b/apps/files/l10n/pa.php
@@ -3,11 +3,10 @@ $TRANSLATIONS = array(
"Files" => "ਫਾਇਲਾਂ",
"Share" => "ਸਾਂਝਾ ਕਰੋ",
"Rename" => "ਨਾਂ ਬਦਲੋ",
-"undo" => "ਵਾਪਸ",
+"Error" => "ਗਲਤੀ",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "ਗਲਤੀ",
"Upload" => "ਅੱਪਲੋਡ",
"Cancel upload" => "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ",
"Download" => "ਡਾਊਨਲੋਡ",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 3e93dc881e99ad9fab5e52326dd94cdd6bd45e02..83126b3ea035367c8f4868e874b1392971482eeb 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Udostępnij",
"Delete permanently" => "Trwale usuń",
"Rename" => "Zmień nazwę",
+"Error moving file" => "Błąd prz przenoszeniu pliku",
+"Error" => "Błąd",
"Pending" => "Oczekujące",
"Could not rename file" => "Nie można zmienić nazwy pliku",
-"replaced {new_name} with {old_name}" => "zastąpiono {new_name} przez {old_name}",
-"undo" => "cofnij",
"Error deleting file." => "Błąd podczas usuwania pliku",
"_%n folder_::_%n folders_" => array("%n katalog","%n katalogi","%n katalogów"),
"_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
"Your download is being prepared. This might take some time if the files are big." => "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże.",
-"Error moving file" => "Błąd prz przenoszeniu pliku",
-"Error" => "Błąd",
"Name" => "Nazwa",
"Size" => "Rozmiar",
"Modified" => "Modyfikacja",
diff --git a/apps/files/l10n/pl_PL.php b/apps/files/l10n/pl_PL.php
deleted file mode 100644
index b67f67b972e26e1a1ca7cb514b240285adbf1e62..0000000000000000000000000000000000000000
--- a/apps/files/l10n/pl_PL.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Zapisz"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index d0c27431daaf4c89c6321dd0d2a3831b8e51a9bb..48c32e8887f6bb8d9b7f32ec98a5eb9d3d72d0cf 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Compartilhar",
"Delete permanently" => "Excluir permanentemente",
"Rename" => "Renomear",
+"Error moving file" => "Erro movendo o arquivo",
+"Error" => "Erro",
"Pending" => "Pendente",
"Could not rename file" => "Não foi possível renomear o arquivo",
-"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
-"undo" => "desfazer",
"Error deleting file." => "Erro eliminando o arquivo.",
"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
"_%n file_::_%n files_" => array("%n arquivo","%n arquivos"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave do App de Encriptação é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
"Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.",
-"Error moving file" => "Erro movendo o arquivo",
-"Error" => "Erro",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 3b3c2f842bd16c61aa7b92b438de043496d91fad..0afb6b501570cf9d5a6e8875ecc5328ebf81dc3f 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "Partilhar",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renomear",
+"Error moving file" => "Erro ao mover o ficheiro",
+"Error" => "Erro",
"Pending" => "Pendente",
"Could not rename file" => "Não pôde renomear o ficheiro",
-"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
-"undo" => "desfazer",
"Error deleting file." => "Erro ao apagar o ficheiro.",
"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
"Your download is being prepared. This might take some time if the files are big." => "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes.",
-"Error moving file" => "Erro ao mover o ficheiro",
-"Error" => "Erro",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 7686025e35c9a41e33c026b2f5cd39b40acc52f5..6cda724df430f38fccd16b7478edc48867796db3 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -4,7 +4,9 @@ $TRANSLATIONS = array(
"Could not move %s" => "Nu se poate muta %s",
"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume nevalide, '\\', '/', '<', '>', ':', '\"', '|', '?' și '*' nu sunt permise.",
+"Error while downloading %s to %s" => "Eroare la descarcarea %s in %s",
"Error when creating the file" => "Eroare la crearea fisierului",
+"Folder name cannot be empty." => "Numele folderului nu poate fi liber.",
"Error when creating the folder" => "Eroare la crearea folderului",
"Unable to set upload directory." => "Imposibil de a seta directorul pentru incărcare.",
"Invalid Token" => "Jeton Invalid",
@@ -32,10 +34,10 @@ $TRANSLATIONS = array(
"Share" => "Partajează",
"Delete permanently" => "Șterge permanent",
"Rename" => "Redenumește",
+"Error moving file" => "Eroare la mutarea fișierului",
+"Error" => "Eroare",
"Pending" => "În așteptare",
"Could not rename file" => "Nu s-a putut redenumi fisierul",
-"replaced {new_name} with {old_name}" => "{new_name} a fost înlocuit cu {old_name}",
-"undo" => "desfă",
"_%n folder_::_%n folders_" => array("%n director","%n directoare","%n directoare"),
"_%n file_::_%n files_" => array("%n fișier","%n fișiere","%n fișiere"),
"{dirs} and {files}" => "{dirs} și {files}",
@@ -44,8 +46,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Spațiul de stocare este aproape plin ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
"Your download is being prepared. This might take some time if the files are big." => "Se pregătește descărcarea. Aceasta poate dura ceva timp dacă fișierele sunt mari.",
-"Error moving file" => "Eroare la mutarea fișierului",
-"Error" => "Eroare",
"Name" => "Nume",
"Size" => "Mărime",
"Modified" => "Modificat",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 2c0335f3cc302ad26cd1930cf0ae5ba2c45c3b4f..17f06c6a2008aa083e3f40549c8e103c63e36f70 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -3,7 +3,9 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Невозможно переместить %s - файл с таким именем уже существует",
"Could not move %s" => "Невозможно переместить %s",
"File name cannot be empty." => "Имя файла не может быть пустым.",
+"\"%s\" is an invalid file name." => "\"%s\" это не правильное имя файла.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправильное имя: символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
+"The target folder has been moved or deleted." => "Целевой каталог был перемещен или удален.",
"The name %s is already used in the folder %s. Please choose a different name." => "Имя %s уже используется для каталога %s. Пожалуйста, выберите другое имя.",
"Not a valid source" => "Неправильный источник",
"Server is not allowed to open URLs, please check the server configuration" => "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера",
@@ -27,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Неверный каталог.",
"Files" => "Файлы",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
+"Total file size {size1} exceeds upload limit {size2}" => "Полный размер файла {size1} превышает лимит по загрузке {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Не достаточно свободного места, Вы загружаете {size1} но осталось только {size2}",
"Upload cancelled." => "Загрузка отменена.",
"Could not get result from server." => "Не удалось получить ответ от сервера.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
@@ -39,23 +43,22 @@ $TRANSLATIONS = array(
"Share" => "Открыть доступ",
"Delete permanently" => "Удалить окончательно",
"Rename" => "Переименовать",
+"Error moving file" => "Ошибка при перемещении файла",
+"Error" => "Ошибка",
"Pending" => "Ожидание",
"Could not rename file" => "Не удалось переименовать файл",
-"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
-"undo" => "отмена",
"Error deleting file." => "Ошибка при удалении файла.",
"_%n folder_::_%n folders_" => array("%n каталог","%n каталога","%n каталогов"),
"_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"),
"{dirs} and {files}" => "{dirs} и {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Закачка %n файла","Закачка %n файлов","Закачка %n файлов"),
+"\"{name}\" is an invalid file name." => "\"{name}\" это не правильное имя файла.",
"Your storage is full, files can not be updated or synced anymore!" => "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
"Your download is being prepared. This might take some time if the files are big." => "Идёт подготовка к скачиванию. Это может занять некоторое время, если файлы большого размера.",
-"Error moving file" => "Ошибка при перемещении файла",
-"Error" => "Ошибка",
"Name" => "Имя",
"Size" => "Размер",
"Modified" => "Дата изменения",
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
index 44decfef1b023155bd2a50477553ede12a18692a..a2809ee2f5d834d5540a7101cbfc9e4bafacc488 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -12,11 +12,10 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
"Share" => "බෙදා හදා ගන්න",
"Rename" => "නැවත නම් කරන්න",
-"undo" => "නිෂ්ප්රභ කරන්න",
+"Error" => "දෝෂයක්",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "දෝෂයක්",
"Name" => "නම",
"Size" => "ප්රමාණය",
"Modified" => "වෙනස් කළ",
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index e80ca0186cbd010698328f12316eeb4403877a96..cffb89c294d1a71379e711a95092b76e65ed20c6 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -3,7 +3,9 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Nie je možné presunúť %s - súbor s týmto menom už existuje",
"Could not move %s" => "Nie je možné presunúť %s",
"File name cannot be empty." => "Meno súboru nemôže byť prázdne",
+"\"%s\" is an invalid file name." => "\"%s\" je neplatné meno súboru.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.",
+"The target folder has been moved or deleted." => "Cieľový priečinok bol premiestnený alebo odstránený.",
"The name %s is already used in the folder %s. Please choose a different name." => "Názov %s už používa priečinok s%. Prosím zvoľte iný názov.",
"Not a valid source" => "Neplatný zdroj",
"Server is not allowed to open URLs, please check the server configuration" => "Server nie je oprávnený otvárať adresy URL. Overte nastavenia servera.",
@@ -27,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Neplatný priečinok.",
"Files" => "Súbory",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov",
+"Total file size {size1} exceeds upload limit {size2}" => "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
"Upload cancelled." => "Odosielanie zrušené.",
"Could not get result from server." => "Nepodarilo sa dostať výsledky zo servera.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
@@ -39,23 +43,22 @@ $TRANSLATIONS = array(
"Share" => "Zdieľať",
"Delete permanently" => "Zmazať trvalo",
"Rename" => "Premenovať",
+"Error moving file" => "Chyba pri presúvaní súboru",
+"Error" => "Chyba",
"Pending" => "Prebieha",
"Could not rename file" => "Nemožno premenovať súbor",
-"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
-"undo" => "vrátiť",
"Error deleting file." => "Chyba pri mazaní súboru.",
"_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"),
"_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"),
"{dirs} and {files}" => "{dirs} a {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"),
+"\"{name}\" is an invalid file name." => "\"{name}\" je neplatné meno súboru.",
"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!",
"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
"Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.",
-"Error moving file" => "Chyba pri presúvaní súboru",
-"Error" => "Chyba",
"Name" => "Názov",
"Size" => "Veľkosť",
"Modified" => "Upravené",
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index ae54ace12da9b79fb64871c45666e2eada50a2f2..fcb358bd7bd71e2856765871f1cbcdae9641d95e 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Souporaba",
"Delete permanently" => "Izbriši dokončno",
"Rename" => "Preimenuj",
+"Error moving file" => "Napaka premikanja datoteke",
+"Error" => "Napaka",
"Pending" => "V čakanju ...",
"Could not rename file" => "Ni mogoče preimenovati datoteke",
-"replaced {new_name} with {old_name}" => "preimenovano ime {new_name} z imenom {old_name}",
-"undo" => "razveljavi",
"Error deleting file." => "Napaka brisanja datoteke.",
"_%n folder_::_%n folders_" => array("%n mapa","%n mapi","%n mape","%n map"),
"_%n file_::_%n files_" => array("%n datoteka","%n datoteki","%n datoteke","%n datotek"),
@@ -59,8 +59,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
"Your download is being prepared. This might take some time if the files are big." => "Postopek priprave datoteke za prejem je lahko dolgotrajen, kadar je datoteka zelo velika.",
-"Error moving file" => "Napaka premikanja datoteke",
-"Error" => "Napaka",
"Name" => "Ime",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
diff --git a/apps/files/l10n/sq.php b/apps/files/l10n/sq.php
index 073f2def624db2c60f3182e2b29894478c998686..ade4f769faa3739009f359e8d465548dcb4895b5 100644
--- a/apps/files/l10n/sq.php
+++ b/apps/files/l10n/sq.php
@@ -25,9 +25,9 @@ $TRANSLATIONS = array(
"Share" => "Ndaj",
"Delete permanently" => "Fshi përfundimisht",
"Rename" => "Riemëro",
+"Error moving file" => "Gabim lëvizjen dokumentave",
+"Error" => "Gabim",
"Pending" => "Në vijim",
-"replaced {new_name} with {old_name}" => "u zëvendësua {new_name} me {old_name}",
-"undo" => "anullo",
"_%n folder_::_%n folders_" => array("%n dosje","%n dosje"),
"_%n file_::_%n files_" => array("%n skedar","%n skedarë"),
"{dirs} and {files}" => "{dirs} dhe {files}",
@@ -36,8 +36,6 @@ $TRANSLATIONS = array(
"Your storage is almost full ({usedSpacePercent}%)" => "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj është duke u përgatitur. Kjo mund të kërkojë kohë nëse skedarët janë të mëdhenj.",
-"Error moving file" => "Gabim lëvizjen dokumentave",
-"Error" => "Gabim",
"Name" => "Emri",
"Size" => "Madhësia",
"Modified" => "Ndryshuar",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 2a1b478b2aeed6c81da0bf8cb2a63599bf4e2150..44669e8167aaf574c575070ce0e4dca6a3c63ab9 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -21,16 +21,14 @@ $TRANSLATIONS = array(
"Share" => "Дели",
"Delete permanently" => "Обриши за стално",
"Rename" => "Преименуј",
+"Error" => "Грешка",
"Pending" => "На чекању",
-"replaced {new_name} with {old_name}" => "замењено {new_name} са {old_name}",
-"undo" => "опозови",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"Your storage is full, files can not be updated or synced anymore!" => "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше складиште је скоро па пуно ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Припремам преузимање. Ово може да потраје ако су датотеке велике.",
-"Error" => "Грешка",
"Name" => "Име",
"Size" => "Величина",
"Modified" => "Измењено",
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
index 67bf30d8606e173fc1184d46a259bdd4db246224..a5c74860f78fd32d275b283d8cfbb8ea3852f6e6 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -8,10 +8,10 @@ $TRANSLATIONS = array(
"Files" => "Fajlovi",
"Share" => "Podeli",
"Rename" => "Preimenij",
+"Error" => "Greška",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"Error" => "Greška",
"Name" => "Ime",
"Size" => "Veličina",
"Modified" => "Zadnja izmena",
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index fa88a1e966d54389c03df47fb18be475b6f993ce..f420216228cc29e2cb060a1aa087f239c1e11cd4 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -3,9 +3,12 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn",
"Could not move %s" => "Kan inte flytta %s",
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
+"\"%s\" is an invalid file name." => "\"%s\" är ett ogiltigt filnamn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
+"The target folder has been moved or deleted." => "Målmappen har flyttats eller tagits bort.",
"The name %s is already used in the folder %s. Please choose a different name." => "Namnet %s används redan i katalogen %s. Välj ett annat namn.",
"Not a valid source" => "Inte en giltig källa",
+"Server is not allowed to open URLs, please check the server configuration" => "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen",
"Error while downloading %s to %s" => "Fel under nerladdning från %s till %s",
"Error when creating the file" => "Fel under skapande utav filen",
"Folder name cannot be empty." => "Katalognamn kan ej vara tomt.",
@@ -26,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.",
+"Total file size {size1} exceeds upload limit {size2}" => "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
"Upload cancelled." => "Uppladdning avbruten.",
"Could not get result from server." => "Gick inte att hämta resultat från server.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
@@ -34,26 +39,26 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} finns redan",
"Could not create file" => "Kunde ej skapa fil",
"Could not create folder" => "Kunde ej skapa katalog",
+"Error fetching URL" => "Fel vid hämtning av URL",
"Share" => "Dela",
"Delete permanently" => "Radera permanent",
"Rename" => "Byt namn",
+"Error moving file" => "Fel uppstod vid flyttning av fil",
+"Error" => "Fel",
"Pending" => "Väntar",
"Could not rename file" => "Kan ej byta filnamn",
-"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
-"undo" => "ångra",
"Error deleting file." => "Kunde inte ta bort filen.",
"_%n folder_::_%n folders_" => array("%n mapp","%n mappar"),
"_%n file_::_%n files_" => array("%n fil","%n filer"),
"{dirs} and {files}" => "{dirs} och {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"),
+"\"{name}\" is an invalid file name." => "\"{name}\" är ett ogiltligt filnamn.",
"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
-"Error moving file" => "Fel uppstod vid flyttning av fil",
-"Error" => "Fel",
"Name" => "Namn",
"Size" => "Storlek",
"Modified" => "Ändrad",
@@ -69,6 +74,7 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer",
"Save" => "Spara",
"New" => "Ny",
+"New text file" => "Ny textfil",
"Text file" => "Textfil",
"New folder" => "Ny mapp",
"Folder" => "Mapp",
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index c0589feecea20090001037f9ca2fea59e77dea35..257aacf147170101c3761b9f69a19f44ab5d39cc 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -14,13 +14,11 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது",
"Share" => "பகிர்வு",
"Rename" => "பெயர்மாற்றம்",
+"Error" => "வழு",
"Pending" => "நிலுவையிலுள்ள",
-"replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது",
-"undo" => "முன் செயல் நீக்கம் ",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "வழு",
"Name" => "பெயர்",
"Size" => "அளவு",
"Modified" => "மாற்றப்பட்டது",
diff --git a/apps/files/l10n/te.php b/apps/files/l10n/te.php
index 155e4b5c201494f21650396d9419036cdea894d1..b2cf4c01d8a6175e7415859bfe4a5f8c4a50a07a 100644
--- a/apps/files/l10n/te.php
+++ b/apps/files/l10n/te.php
@@ -1,10 +1,10 @@
"శాశ్వతంగా తొలగించు",
+"Error" => "పొరపాటు",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "పొరపాటు",
"Name" => "పేరు",
"Size" => "పరిమాణం",
"Save" => "భద్రపరచు",
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index 110b84cad5e4f5c067e549112f21735a1496d2cc..8f5f15f2a34380c59798dad9f70385cd408a417e 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -20,16 +20,14 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ",
"Share" => "แชร์",
"Rename" => "เปลี่ยนชื่อ",
+"Error" => "ข้อผิดพลาด",
"Pending" => "อยู่ระหว่างดำเนินการ",
-"replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว",
-"undo" => "เลิกทำ",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
"Your storage is full, files can not be updated or synced anymore!" => "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
"Your storage is almost full ({usedSpacePercent}%)" => "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "กำลังเตรียมดาวน์โหลดข้อมูล หากไฟล์มีขนาดใหญ่ อาจใช้เวลาสักครู่",
-"Error" => "ข้อผิดพลาด",
"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "แก้ไขแล้ว",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index a2570e002ac42bb773d6a93e5c17e6e8f153b32b..87c664cc17115590cab7ecfbb936f9ce2c1eebee 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -29,7 +29,7 @@ $TRANSLATIONS = array(
"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Bir dizin veya 0 bayt olduğundan {filename} yüklenemedi",
-"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1} gönderme sınırını {size2} aşıyor",
+"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
"Upload cancelled." => "Yükleme iptal edildi.",
"Could not get result from server." => "Sunucudan sonuç alınamadı.",
@@ -43,10 +43,10 @@ $TRANSLATIONS = array(
"Share" => "Paylaş",
"Delete permanently" => "Kalıcı olarak sil",
"Rename" => "İsim değiştir.",
+"Error moving file" => "Dosya taşıma hatası",
+"Error" => "Hata",
"Pending" => "Bekliyor",
"Could not rename file" => "Dosya adlandırılamadı",
-"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi",
-"undo" => "geri al",
"Error deleting file." => "Dosya silinirken hata.",
"_%n folder_::_%n folders_" => array("%n dizin","%n dizin"),
"_%n file_::_%n files_" => array("%n dosya","%n dosya"),
@@ -59,12 +59,10 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
"Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.",
-"Error moving file" => "Dosya taşıma hatası",
-"Error" => "Hata",
"Name" => "İsim",
"Size" => "Boyut",
"Modified" => "Değiştirilme",
-"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır.",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz klasör adı. 'Shared' ismi ayrılmıştır.",
"%s could not be renamed" => "%s yeniden adlandırılamadı",
"Upload" => "Yükle",
"File handling" => "Dosya işlemleri",
diff --git a/apps/files/l10n/ug.php b/apps/files/l10n/ug.php
index ee188d927ef933faab507c87b19db7cf727968f2..13354c153b2dfeeca420213507dffa9697fde4b4 100644
--- a/apps/files/l10n/ug.php
+++ b/apps/files/l10n/ug.php
@@ -13,12 +13,11 @@ $TRANSLATIONS = array(
"Share" => "ھەمبەھىر",
"Delete permanently" => "مەڭگۈلۈك ئۆچۈر",
"Rename" => "ئات ئۆزگەرت",
+"Error" => "خاتالىق",
"Pending" => "كۈتۈۋاتىدۇ",
-"undo" => "يېنىۋال",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
-"Error" => "خاتالىق",
"Name" => "ئاتى",
"Size" => "چوڭلۇقى",
"Modified" => "ئۆزگەرتكەن",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index b74126c446da604a08cac9e483b15afcb3244675..905d27c3ee25edde43e58699c1b67e809df0976e 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -26,18 +26,16 @@ $TRANSLATIONS = array(
"Share" => "Поділитися",
"Delete permanently" => "Видалити назавжди",
"Rename" => "Перейменувати",
+"Error moving file" => "Помилка переміщення файлу",
+"Error" => "Помилка",
"Pending" => "Очікування",
"Could not rename file" => "Неможливо перейменувати файл",
-"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
-"undo" => "відмінити",
"_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"),
"_%n file_::_%n files_" => array("%n файл","%n файлів","%n файли"),
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"Your storage is full, files can not be updated or synced anymore!" => "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше сховище майже повне ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Ваше завантаження готується. Це може зайняти деякий час, якщо файли завеликі.",
-"Error moving file" => "Помилка переміщення файлу",
-"Error" => "Помилка",
"Name" => "Ім'я",
"Size" => "Розмір",
"Modified" => "Змінено",
diff --git a/apps/files/l10n/ur_PK.php b/apps/files/l10n/ur_PK.php
index 3e13a7f516d5339043a5ec74c523a73506def9d6..b9548acde92c17a83f69260c7f9bf7f50dc1cba1 100644
--- a/apps/files/l10n/ur_PK.php
+++ b/apps/files/l10n/ur_PK.php
@@ -1,8 +1,8 @@
"ایرر",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
-"_Uploading %n file_::_Uploading %n files_" => array("",""),
-"Error" => "ایرر"
+"_Uploading %n file_::_Uploading %n files_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index 8812bb1b209a49cd649822074b5264a95effea88..55f9bd259423f39c3914c891b428dc03e45e636b 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -37,10 +37,10 @@ $TRANSLATIONS = array(
"Share" => "Chia sẻ",
"Delete permanently" => "Xóa vĩnh vễn",
"Rename" => "Sửa tên",
+"Error moving file" => "Lỗi di chuyển tập tin",
+"Error" => "Lỗi",
"Pending" => "Đang chờ",
"Could not rename file" => "Không thể đổi tên file",
-"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
-"undo" => "lùi lại",
"Error deleting file." => "Lỗi xóa file,",
"_%n folder_::_%n folders_" => array("%n thư mục"),
"_%n file_::_%n files_" => array("%n tập tin"),
@@ -51,8 +51,6 @@ $TRANSLATIONS = array(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
-"Error moving file" => "Lỗi di chuyển tập tin",
-"Error" => "Lỗi",
"Name" => "Tên",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index 87f8138697e41fd5b6d7632b7bafab8472f70c40..068f97c1ddfb95611ee2bc9f178621059007a373 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -39,10 +39,10 @@ $TRANSLATIONS = array(
"Share" => "分享",
"Delete permanently" => "永久删除",
"Rename" => "重命名",
+"Error moving file" => "移动文件错误",
+"Error" => "错误",
"Pending" => "等待",
"Could not rename file" => "不能重命名文件",
-"replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}",
-"undo" => "撤销",
"Error deleting file." => "删除文件出错。",
"_%n folder_::_%n folders_" => array("%n 文件夹"),
"_%n file_::_%n files_" => array("%n个文件"),
@@ -54,8 +54,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
"Your download is being prepared. This might take some time if the files are big." => "下载正在准备中。如果文件较大可能会花费一些时间。",
-"Error moving file" => "移动文件错误",
-"Error" => "错误",
"Name" => "名称",
"Size" => "大小",
"Modified" => "修改日期",
diff --git a/apps/files/l10n/zh_HK.php b/apps/files/l10n/zh_HK.php
index 4885500ce43b035c3a52369756bfeb5824425462..eaa32cd537a5d00d8a9be7e3125c10fe9d23fe63 100644
--- a/apps/files/l10n/zh_HK.php
+++ b/apps/files/l10n/zh_HK.php
@@ -2,10 +2,10 @@
$TRANSLATIONS = array(
"Files" => "文件",
"Share" => "分享",
+"Error" => "錯誤",
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array(""),
-"Error" => "錯誤",
"Name" => "名稱",
"Upload" => "上傳",
"Save" => "儲存",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index caf8b184a3593dc417dc3d144f15dd0cba08d91e..154efd563fddb83f665dc256c2814671579c2bb5 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -37,10 +37,10 @@ $TRANSLATIONS = array(
"Share" => "分享",
"Delete permanently" => "永久刪除",
"Rename" => "重新命名",
+"Error moving file" => "移動檔案失敗",
+"Error" => "錯誤",
"Pending" => "等候中",
"Could not rename file" => "無法重新命名",
-"replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}",
-"undo" => "復原",
"_%n folder_::_%n folders_" => array("%n 個資料夾"),
"_%n file_::_%n files_" => array("%n 個檔案"),
"{dirs} and {files}" => "{dirs} 和 {files}",
@@ -51,8 +51,6 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
"Your download is being prepared. This might take some time if the files are big." => "正在準備您的下載,若您的檔案較大,將會需要更多時間。",
-"Error moving file" => "移動檔案失敗",
-"Error" => "錯誤",
"Name" => "名稱",
"Size" => "大小",
"Modified" => "修改時間",
diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php
index fea88faa92a872cb17b8757b8d2e952004f246f7..adfca669577babcb6c3afba4067a250835453d67 100644
--- a/apps/files/lib/app.php
+++ b/apps/files/lib/app.php
@@ -84,25 +84,7 @@ class App {
) {
// successful rename
$meta = $this->view->getFileInfo($dir . '/' . $newname);
- if ($meta['mimetype'] === 'httpd/unix-directory') {
- $meta['type'] = 'dir';
- }
- else {
- $meta['type'] = 'file';
- }
- // these need to be set for determineIcon()
- $meta['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($meta['mimetype']);
- $meta['directory'] = $dir;
- $fileinfo = array(
- 'id' => $meta['fileid'],
- 'mime' => $meta['mimetype'],
- 'size' => $meta['size'],
- 'etag' => $meta['etag'],
- 'directory' => $meta['directory'],
- 'name' => $newname,
- 'isPreviewAvailable' => $meta['isPreviewAvailable'],
- 'icon' => \OCA\Files\Helper::determineIcon($meta)
- );
+ $fileinfo = \OCA\Files\Helper::formatFileInfo($meta);
$result['success'] = true;
$result['data'] = $fileinfo;
} else {
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index c41e2d155813fd1b3f6333b36566c14c47c55042..b765fdaf3e3ac234653b688bb2a6a516412a49ec 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -19,11 +19,17 @@ class Helper
'usedSpacePercent' => (int)$storageInfo['relative']);
}
+ /**
+ * Determine icon for a given file
+ *
+ * @param \OC\Files\FileInfo $file file info
+ * @return string icon URL
+ */
public static function determineIcon($file) {
if($file['type'] === 'dir') {
$dir = $file['directory'];
$icon = \OC_Helper::mimetypeIcon('dir');
- $absPath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir.'/'.$file['name']);
+ $absPath = $file->getPath();
$mount = \OC\Files\Filesystem::getMountManager()->find($absPath);
if (!is_null($mount)) {
$sid = $mount->getStorageId();
@@ -38,11 +44,7 @@ class Helper
}
}
}else{
- if($file['isPreviewAvailable']) {
- $pathForPreview = $file['directory'] . '/' . $file['name'];
- return \OC_Helper::previewIcon($pathForPreview) . '&c=' . $file['etag'];
- }
- $icon = \OC_Helper::mimetypeIcon($file['mimetype']);
+ $icon = \OC_Helper::mimetypeIcon($file->getMimetype());
}
return substr($icon, 0, -3) . 'svg';
@@ -69,52 +71,58 @@ class Helper
}
/**
- * Retrieves the contents of the given directory and
- * returns it as a sorted array.
- * @param string $dir path to the directory
- * @return array of files
+ * Formats the file info to be returned as JSON to the client.
+ *
+ * @param \OCP\Files\FileInfo file info
+ * @return array formatted file info
*/
- public static function getFiles($dir) {
- $content = \OC\Files\Filesystem::getDirectoryContent($dir);
- $files = array();
+ public static function formatFileInfo($i) {
+ $entry = array();
- foreach ($content as $i) {
- $i['date'] = \OCP\Util::formatDate($i['mtime']);
- if ($i['type'] === 'file') {
- $fileinfo = pathinfo($i['name']);
- $i['basename'] = $fileinfo['filename'];
- if (!empty($fileinfo['extension'])) {
- $i['extension'] = '.' . $fileinfo['extension'];
- } else {
- $i['extension'] = '';
- }
- }
- $i['directory'] = $dir;
- $i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']);
- $i['icon'] = \OCA\Files\Helper::determineIcon($i);
- $files[] = $i;
+ $entry['id'] = $i['fileid'];
+ $entry['date'] = \OCP\Util::formatDate($i['mtime']);
+ $entry['mtime'] = $i['mtime'] * 1000;
+ // only pick out the needed attributes
+ $entry['icon'] = \OCA\Files\Helper::determineIcon($i);
+ if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) {
+ $entry['isPreviewAvailable'] = true;
+ }
+ $entry['name'] = $i['name'];
+ $entry['permissions'] = $i['permissions'];
+ $entry['mimetype'] = $i['mimetype'];
+ $entry['size'] = $i['size'];
+ $entry['type'] = $i['type'];
+ $entry['etag'] = $i['etag'];
+ if (isset($i['displayname_owner'])) {
+ $entry['shareOwner'] = $i['displayname_owner'];
}
+ return $entry;
+ }
- usort($files, array('\OCA\Files\Helper', 'fileCmp'));
+ /**
+ * Format file info for JSON
+ * @param \OCP\Files\FileInfo[] $fileInfos file infos
+ */
+ public static function formatFileInfos($fileInfos) {
+ $files = array();
+ foreach ($fileInfos as $i) {
+ $files[] = self::formatFileInfo($i);
+ }
return $files;
}
/**
- * Splits the given path into a breadcrumb structure.
- * @param string $dir path to process
- * @return array where each entry is a hash of the absolute
- * directory path and its name
+ * Retrieves the contents of the given directory and
+ * returns it as a sorted array of FileInfo.
+ *
+ * @param string $dir path to the directory
+ * @return \OCP\Files\FileInfo[] files
*/
- public static function makeBreadcrumb($dir){
- $breadcrumb = array();
- $pathtohere = '';
- foreach (explode('/', $dir) as $i) {
- if ($i !== '') {
- $pathtohere .= '/' . $i;
- $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
- }
- }
- return $breadcrumb;
+ public static function getFiles($dir) {
+ $content = \OC\Files\Filesystem::getDirectoryContent($dir);
+
+ usort($content, array('\OCA\Files\Helper', 'fileCmp'));
+ return $content;
}
}
diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php
index a5afd55fbc3938263c9e745be7281175f9fe123a..5f7d3261d6c1a5dd2e6b16f347a2493f3e072a06 100644
--- a/apps/files/templates/admin.php
+++ b/apps/files/templates/admin.php
@@ -1,28 +1,26 @@
-
diff --git a/apps/files/templates/fileexists.html b/apps/files/templates/fileexists.html
index 662177ac7ed79b56ed12360f998b807131e27e2b..79beccef3e507fa5e18962de1d578a8775adfc10 100644
--- a/apps/files/templates/fileexists.html
+++ b/apps/files/templates/fileexists.html
@@ -3,8 +3,8 @@
{what}
'
+ );
+
+ testFiles = [{
+ id: 1,
+ type: 'file',
+ name: 'One.txt',
+ mimetype: 'text/plain',
+ size: 12
+ }, {
+ id: 2,
+ type: 'file',
+ name: 'Two.jpg',
+ mimetype: 'image/jpeg',
+ size: 12049
+ }, {
+ id: 3,
+ type: 'file',
+ name: 'Three.pdf',
+ mimetype: 'application/pdf',
+ size: 58009
+ }, {
+ id: 4,
+ type: 'dir',
+ name: 'somedir',
+ mimetype: 'httpd/unix-directory',
+ size: 250
+ }];
+
+ FileList.initialize();
});
afterEach(function() {
+ testFiles = undefined;
+ FileList.initialized = false;
+ FileList.isEmpty = true;
+ delete FileList._reloadCall;
+
$('#dir, #permissions, #filestable').remove();
+ notificationStub.restore();
+ alertStub.restore();
+ pushStateStub.restore();
+ });
+ describe('Getters', function() {
+ it('Returns the current directory', function() {
+ $('#dir').val('/one/two/three');
+ expect(FileList.getCurrentDirectory()).toEqual('/one/two/three');
+ });
+ it('Returns the directory permissions as int', function() {
+ $('#permissions').val('23');
+ expect(FileList.getDirectoryPermissions()).toEqual(23);
+ });
+ });
+ describe('Adding files', function() {
+ var clock, now;
+ beforeEach(function() {
+ // to prevent date comparison issues
+ clock = sinon.useFakeTimers();
+ now = new Date();
+ });
+ afterEach(function() {
+ clock.restore();
+ });
+ it('generates file element with correct attributes when calling add() with file data', function() {
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'plain/text',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ var $tr = FileList.add(fileData);
+
+ expect($tr).toBeDefined();
+ expect($tr[0].tagName.toLowerCase()).toEqual('tr');
+ expect($tr.attr('data-id')).toEqual('18');
+ expect($tr.attr('data-type')).toEqual('file');
+ expect($tr.attr('data-file')).toEqual('testName.txt');
+ expect($tr.attr('data-size')).toEqual('1234');
+ expect($tr.attr('data-etag')).toEqual('a01234c');
+ expect($tr.attr('data-permissions')).toEqual('31');
+ expect($tr.attr('data-mime')).toEqual('plain/text');
+ expect($tr.attr('data-mtime')).toEqual('123456');
+ expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt');
+
+ expect($tr.find('.filesize').text()).toEqual('1 kB');
+ expect(FileList.findFileEl('testName.txt')[0]).toEqual($tr[0]);
+ });
+ it('generates dir element with correct attributes when calling add() with dir data', function() {
+ var fileData = {
+ id: 19,
+ type: 'dir',
+ name: 'testFolder',
+ mimetype: 'httpd/unix-directory',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ var $tr = FileList.add(fileData);
+
+ expect($tr).toBeDefined();
+ expect($tr[0].tagName.toLowerCase()).toEqual('tr');
+ expect($tr.attr('data-id')).toEqual('19');
+ expect($tr.attr('data-type')).toEqual('dir');
+ expect($tr.attr('data-file')).toEqual('testFolder');
+ expect($tr.attr('data-size')).toEqual('1234');
+ expect($tr.attr('data-etag')).toEqual('a01234c');
+ expect($tr.attr('data-permissions')).toEqual('31');
+ expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
+ expect($tr.attr('data-mtime')).toEqual('123456');
+
+ expect($tr.find('.filesize').text()).toEqual('1 kB');
+
+ expect(FileList.findFileEl('testFolder')[0]).toEqual($tr[0]);
+ });
+ it('generates file element with default attributes when calling add() with minimal data', function() {
+ var fileData = {
+ type: 'file',
+ name: 'testFile.txt'
+ };
+
+ clock.tick(123456);
+ var $tr = FileList.add(fileData);
+
+ expect($tr).toBeDefined();
+ expect($tr[0].tagName.toLowerCase()).toEqual('tr');
+ expect($tr.attr('data-id')).toEqual(null);
+ expect($tr.attr('data-type')).toEqual('file');
+ expect($tr.attr('data-file')).toEqual('testFile.txt');
+ expect($tr.attr('data-size')).toEqual(null);
+ expect($tr.attr('data-etag')).toEqual(null);
+ expect($tr.attr('data-permissions')).toEqual('31');
+ expect($tr.attr('data-mime')).toEqual(null);
+ expect($tr.attr('data-mtime')).toEqual('123456');
+
+ expect($tr.find('.filesize').text()).toEqual('Pending');
+ });
+ it('generates dir element with default attributes when calling add() with minimal data', function() {
+ var fileData = {
+ type: 'dir',
+ name: 'testFolder'
+ };
+ clock.tick(123456);
+ var $tr = FileList.add(fileData);
+
+ expect($tr).toBeDefined();
+ expect($tr[0].tagName.toLowerCase()).toEqual('tr');
+ expect($tr.attr('data-id')).toEqual(null);
+ expect($tr.attr('data-type')).toEqual('dir');
+ expect($tr.attr('data-file')).toEqual('testFolder');
+ expect($tr.attr('data-size')).toEqual(null);
+ expect($tr.attr('data-etag')).toEqual(null);
+ expect($tr.attr('data-permissions')).toEqual('31');
+ expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
+ expect($tr.attr('data-mtime')).toEqual('123456');
+
+ expect($tr.find('.filesize').text()).toEqual('Pending');
+ });
+ it('generates file element with zero size when size is explicitly zero', function() {
+ var fileData = {
+ type: 'dir',
+ name: 'testFolder',
+ size: '0'
+ };
+ var $tr = FileList.add(fileData);
+ expect($tr.find('.filesize').text()).toEqual('0 B');
+ });
+ it('adds new file to the end of the list before the summary', function() {
+ var fileData = {
+ type: 'file',
+ name: 'P comes after O.txt'
+ };
+ FileList.setFiles(testFiles);
+ $tr = FileList.add(fileData);
+ expect($tr.index()).toEqual(4);
+ expect($tr.next().hasClass('summary')).toEqual(true);
+ });
+ it('adds new file at correct position in insert mode', function() {
+ var fileData = {
+ type: 'file',
+ name: 'P comes after O.txt'
+ };
+ FileList.setFiles(testFiles);
+ $tr = FileList.add(fileData, {insert: true});
+ // after "One.txt"
+ expect($tr.index()).toEqual(1);
+ });
+ it('removes empty content message and shows summary when adding first file', function() {
+ var fileData = {
+ type: 'file',
+ name: 'first file.txt',
+ size: 12
+ };
+ FileList.setFiles([]);
+ expect(FileList.isEmpty).toEqual(true);
+ FileList.add(fileData);
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(1);
+ // yes, ugly...
+ expect($summary.find('.info').text()).toEqual('0 folders and 1 file');
+ expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true);
+ expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
+ expect($summary.find('.filesize').text()).toEqual('12 B');
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(true);
+ expect(FileList.isEmpty).toEqual(false);
+ });
});
- it('generates file element with correct attributes when calling addFile', function() {
- var lastMod = new Date(10000);
- // note: download_url is actually the link target, not the actual download URL...
- var $tr = FileList.addFile('testName.txt', 1234, lastMod, false, false, {download_url: 'test/download/url'});
-
- expect($tr).toBeDefined();
- expect($tr[0].tagName.toLowerCase()).toEqual('tr');
- expect($tr.find('a:first').attr('href')).toEqual('test/download/url');
- expect($tr.attr('data-type')).toEqual('file');
- expect($tr.attr('data-file')).toEqual('testName.txt');
- expect($tr.attr('data-size')).toEqual('1234');
- expect($tr.attr('data-permissions')).toEqual('31');
- //expect($tr.attr('data-mime')).toEqual('plain/text');
+ describe('Removing files from the list', function() {
+ it('Removes file from list when calling remove() and updates summary', function() {
+ var $removedEl;
+ FileList.setFiles(testFiles);
+ $removedEl = FileList.remove('One.txt');
+ expect($removedEl).toBeDefined();
+ expect($removedEl.attr('data-file')).toEqual('One.txt');
+ expect($('#fileList tr:not(.summary)').length).toEqual(3);
+ expect(FileList.findFileEl('One.txt').length).toEqual(0);
+
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(1);
+ expect($summary.find('.info').text()).toEqual('1 folder and 2 files');
+ expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
+ expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
+ expect($summary.find('.filesize').text()).toEqual('69 kB');
+ expect(FileList.isEmpty).toEqual(false);
+ });
+ it('Shows empty content when removing last file', function() {
+ FileList.setFiles([testFiles[0]]);
+ FileList.remove('One.txt');
+ expect($('#fileList tr:not(.summary)').length).toEqual(0);
+ expect(FileList.findFileEl('One.txt').length).toEqual(0);
+
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(0);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(false);
+ expect(FileList.isEmpty).toEqual(true);
+ });
});
- it('generates dir element with correct attributes when calling addDir', function() {
- var lastMod = new Date(10000);
- var $tr = FileList.addDir('testFolder', 1234, lastMod, false);
-
- expect($tr).toBeDefined();
- expect($tr[0].tagName.toLowerCase()).toEqual('tr');
- expect($tr.attr('data-type')).toEqual('dir');
- expect($tr.attr('data-file')).toEqual('testFolder');
- expect($tr.attr('data-size')).toEqual('1234');
- expect($tr.attr('data-permissions')).toEqual('31');
- //expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
+ describe('Deleting files', function() {
+ function doDelete() {
+ var request, query;
+ // note: normally called from FileActions
+ FileList.do_delete(['One.txt', 'Two.jpg']);
+
+ expect(fakeServer.requests.length).toEqual(1);
+ request = fakeServer.requests[0];
+ expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/delete.php');
+
+ query = fakeServer.requests[0].requestBody;
+ expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir', files: '["One.txt","Two.jpg"]'});
+ }
+ it('calls delete.php, removes the deleted entries and updates summary', function() {
+ FileList.setFiles(testFiles);
+ doDelete();
+
+ fakeServer.requests[0].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify({status: 'success'})
+ );
+
+ expect(FileList.findFileEl('One.txt').length).toEqual(0);
+ expect(FileList.findFileEl('Two.jpg').length).toEqual(0);
+ expect(FileList.findFileEl('Three.pdf').length).toEqual(1);
+ expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(2);
+
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(1);
+ expect($summary.find('.info').text()).toEqual('1 folder and 1 file');
+ expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
+ expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
+ expect($summary.find('.filesize').text()).toEqual('57 kB');
+ expect(FileList.isEmpty).toEqual(false);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(true);
+
+ expect(notificationStub.notCalled).toEqual(true);
+ });
+ it('updates summary when deleting last file', function() {
+ FileList.setFiles([testFiles[0], testFiles[1]]);
+ doDelete();
+
+ fakeServer.requests[0].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify({status: 'success'})
+ );
+
+ expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(0);
+
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(0);
+ expect(FileList.isEmpty).toEqual(true);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(false);
+ });
+ it('bring back deleted item when delete call failed', function() {
+ FileList.setFiles(testFiles);
+ doDelete();
+
+ fakeServer.requests[0].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify({status: 'error', data: {message: 'WOOT'}})
+ );
+
+ // files are still in the list
+ expect(FileList.findFileEl('One.txt').length).toEqual(1);
+ expect(FileList.findFileEl('Two.jpg').length).toEqual(1);
+ expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(4);
+
+ expect(notificationStub.calledOnce).toEqual(true);
+ });
+ });
+ describe('Renaming files', function() {
+ function doRename() {
+ var $input, request;
+
+ FileList.setFiles(testFiles);
+
+ // trigger rename prompt
+ FileList.rename('One.txt');
+ $input = FileList.$fileList.find('input.filename');
+ $input.val('One_renamed.txt').blur();
+
+ expect(fakeServer.requests.length).toEqual(1);
+ var request = fakeServer.requests[0];
+ expect(request.url.substr(0, request.url.indexOf('?'))).toEqual(OC.webroot + '/index.php/apps/files/ajax/rename.php');
+ expect(OC.parseQueryString(request.url)).toEqual({'dir': '/subdir', newname: 'One_renamed.txt', file: 'One.txt'});
+
+ // element is renamed before the request finishes
+ expect(FileList.findFileEl('One.txt').length).toEqual(0);
+ expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1);
+ // input is gone
+ expect(FileList.$fileList.find('input.filename').length).toEqual(0);
+ }
+ it('Keeps renamed file entry if rename ajax call suceeded', function() {
+ doRename();
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'success',
+ data: {
+ name: 'One_renamed.txt'
+ }
+ }));
+
+ // element stays renamed
+ expect(FileList.findFileEl('One.txt').length).toEqual(0);
+ expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1);
+
+ expect(alertStub.notCalled).toEqual(true);
+ });
+ it('Reverts file entry if rename ajax call failed', function() {
+ doRename();
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'error',
+ data: {
+ message: 'Something went wrong'
+ }
+ }));
+
+ // element was reverted
+ expect(FileList.findFileEl('One.txt').length).toEqual(1);
+ expect(FileList.findFileEl('One_renamed.txt').length).toEqual(0);
+
+ expect(alertStub.calledOnce).toEqual(true);
+ });
+ it('Correctly updates file link after rename', function() {
+ var $tr;
+ doRename();
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'success',
+ data: {
+ name: 'One_renamed.txt'
+ }
+ }));
+
+ $tr = FileList.findFileEl('One_renamed.txt');
+ expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One_renamed.txt');
+ });
+ // FIXME: fix this in the source code!
+ xit('Correctly updates file link after rename when path has same name', function() {
+ var $tr;
+ // evil case: because of buggy code
+ $('#dir').val('/One.txt/subdir');
+ doRename();
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'success',
+ data: {
+ name: 'One_renamed.txt'
+ }
+ }));
+
+ $tr = FileList.findFileEl('One_renamed.txt');
+ expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One.txt');
+ });
+ });
+ describe('List rendering', function() {
+ it('renders a list of files using add()', function() {
+ var addSpy = sinon.spy(FileList, 'add');
+ FileList.setFiles(testFiles);
+ expect(addSpy.callCount).toEqual(4);
+ expect($('#fileList tr:not(.summary)').length).toEqual(4);
+ addSpy.restore();
+ });
+ it('updates summary using the file sizes', function() {
+ var $summary;
+ FileList.setFiles(testFiles);
+ $summary = $('#fileList .summary');
+ expect($summary.length).toEqual(1);
+ expect($summary.find('.info').text()).toEqual('1 folder and 3 files');
+ expect($summary.find('.filesize').text()).toEqual('69 kB');
+ });
+ it('shows headers, summary and hide empty content message after setting files', function(){
+ FileList.setFiles(testFiles);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(true);
+ expect(FileList.$fileList.find('.summary').length).toEqual(1);
+ });
+ it('hides headers, summary and show empty content message after setting empty file list', function(){
+ FileList.setFiles([]);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(false);
+ expect(FileList.$fileList.find('.summary').length).toEqual(0);
+ });
+ it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){
+ $('#permissions').val(0);
+ FileList.setFiles([]);
+ expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(true);
+ expect(FileList.$fileList.find('.summary').length).toEqual(0);
+ });
+ it('calling findFileEl() can find existing file element', function() {
+ FileList.setFiles(testFiles);
+ expect(FileList.findFileEl('Two.jpg').length).toEqual(1);
+ });
+ it('calling findFileEl() returns empty when file not found in file', function() {
+ FileList.setFiles(testFiles);
+ expect(FileList.findFileEl('unexist.dat').length).toEqual(0);
+ });
+ it('only add file if in same current directory', function() {
+ $('#dir').val('/current dir');
+ var fileData = {
+ type: 'file',
+ name: 'testFile.txt',
+ directory: '/current dir'
+ };
+ var $tr = FileList.add(fileData);
+ expect(FileList.findFileEl('testFile.txt').length).toEqual(1);
+ });
+ it('triggers "fileActionsReady" event after update', function() {
+ var handler = sinon.stub();
+ FileList.$fileList.on('fileActionsReady', handler);
+ FileList.setFiles(testFiles);
+ expect(handler.calledOnce).toEqual(true);
+ });
+ it('triggers "updated" event after update', function() {
+ var handler = sinon.stub();
+ FileList.$fileList.on('updated', handler);
+ FileList.setFiles(testFiles);
+ expect(handler.calledOnce).toEqual(true);
+ });
+ });
+ describe('file previews', function() {
+ var previewLoadStub;
+
+ function getImageUrl($el) {
+ // might be slightly different cross-browser
+ var url = $el.css('background-image');
+ var r = url.match(/url\(['"]?([^'")]*)['"]?\)/);
+ if (!r) {
+ return url;
+ }
+ return r[1];
+ }
+
+ beforeEach(function() {
+ previewLoadStub = sinon.stub(Files, 'lazyLoadPreview');
+ });
+ afterEach(function() {
+ previewLoadStub.restore();
+ });
+ it('renders default icon for file when none provided and no preview is available', function() {
+ var fileData = {
+ type: 'file',
+ name: 'testFile.txt'
+ };
+ var $tr = FileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ });
+ it('renders default icon for dir when none provided and no preview is available', function() {
+ var fileData = {
+ type: 'dir',
+ name: 'test dir'
+ };
+ var $tr = FileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/folder.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ });
+ it('renders provided icon for file when provided', function() {
+ var fileData = {
+ type: 'file',
+ name: 'test dir',
+ icon: OC.webroot + '/core/img/filetypes/application-pdf.svg'
+ };
+ var $tr = FileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/application-pdf.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ });
+ it('renders preview when no icon was provided and preview is available', function() {
+ var fileData = {
+ type: 'file',
+ name: 'test dir',
+ isPreviewAvailable: true
+ };
+ var $tr = FileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ expect(previewLoadStub.calledOnce).toEqual(true);
+ // third argument is callback
+ previewLoadStub.getCall(0).args[2](OC.webroot + '/somepath.png');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/somepath.png');
+ });
+ it('renders default file type icon when no icon was provided and no preview is available', function() {
+ var fileData = {
+ type: 'file',
+ name: 'test dir',
+ isPreviewAvailable: false
+ };
+ var $tr = FileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ });
+ });
+ describe('viewer mode', function() {
+ it('enabling viewer mode hides files table and action buttons', function() {
+ FileList.setViewerMode(true);
+ expect($('#filestable').hasClass('hidden')).toEqual(true);
+ expect($('.actions').hasClass('hidden')).toEqual(true);
+ expect($('.notCreatable').hasClass('hidden')).toEqual(true);
+ });
+ it('disabling viewer mode restores files table and action buttons', function() {
+ FileList.setViewerMode(true);
+ FileList.setViewerMode(false);
+ expect($('#filestable').hasClass('hidden')).toEqual(false);
+ expect($('.actions').hasClass('hidden')).toEqual(false);
+ expect($('.notCreatable').hasClass('hidden')).toEqual(true);
+ });
+ it('disabling viewer mode restores files table and action buttons with correct permissions', function() {
+ $('#permissions').val(0);
+ FileList.setViewerMode(true);
+ FileList.setViewerMode(false);
+ expect($('#filestable').hasClass('hidden')).toEqual(false);
+ expect($('.actions').hasClass('hidden')).toEqual(true);
+ expect($('.notCreatable').hasClass('hidden')).toEqual(false);
+ });
+ });
+ describe('loading file list', function() {
+ beforeEach(function() {
+ var data = {
+ status: 'success',
+ data: {
+ files: testFiles,
+ permissions: 31
+ }
+ };
+ fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2F(subdir|anothersubdir)/, [
+ 200, {
+ "Content-Type": "application/json"
+ },
+ JSON.stringify(data)
+ ]);
+ });
+ it('fetches file list from server and renders it when reload() is called', function() {
+ FileList.reload();
+ expect(fakeServer.requests.length).toEqual(1);
+ var url = fakeServer.requests[0].url;
+ var query = url.substr(url.indexOf('?') + 1);
+ expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir'});
+ fakeServer.respond();
+ expect($('#fileList tr:not(.summary)').length).toEqual(4);
+ expect(FileList.findFileEl('One.txt').length).toEqual(1);
+ });
+ it('switches dir and fetches file list when calling changeDirectory()', function() {
+ FileList.changeDirectory('/anothersubdir');
+ expect(FileList.getCurrentDirectory()).toEqual('/anothersubdir');
+ expect(fakeServer.requests.length).toEqual(1);
+ var url = fakeServer.requests[0].url;
+ var query = url.substr(url.indexOf('?') + 1);
+ expect(OC.parseQueryString(query)).toEqual({'dir': '/anothersubdir'});
+ fakeServer.respond();
+ });
+ it('switches to root dir when current directory does not exist', function() {
+ fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
+ 404, {
+ "Content-Type": "application/json"
+ },
+ ''
+ ]);
+ FileList.changeDirectory('/unexist');
+ fakeServer.respond();
+ expect(FileList.getCurrentDirectory()).toEqual('/');
+ });
+ it('shows mask before loading file list then hides it at the end', function() {
+ var showMaskStub = sinon.stub(FileList, 'showMask');
+ var hideMaskStub = sinon.stub(FileList, 'hideMask');
+ FileList.changeDirectory('/anothersubdir');
+ expect(showMaskStub.calledOnce).toEqual(true);
+ expect(hideMaskStub.calledOnce).toEqual(false);
+ fakeServer.respond();
+ expect(showMaskStub.calledOnce).toEqual(true);
+ expect(hideMaskStub.calledOnce).toEqual(true);
+ showMaskStub.restore();
+ hideMaskStub.restore();
+ });
+ it('changes URL to target dir', function() {
+ FileList.changeDirectory('/somedir');
+ expect(pushStateStub.calledOnce).toEqual(true);
+ expect(pushStateStub.getCall(0).args[0]).toEqual({dir: '/somedir'});
+ expect(pushStateStub.getCall(0).args[2]).toEqual(OC.webroot + '/index.php/apps/files?dir=/somedir');
+ });
+ it('refreshes breadcrumb after update', function() {
+ var setDirSpy = sinon.spy(FileList.breadcrumb, 'setDirectory');
+ FileList.changeDirectory('/anothersubdir');
+ fakeServer.respond();
+ expect(FileList.breadcrumb.setDirectory.calledOnce).toEqual(true);
+ expect(FileList.breadcrumb.setDirectory.calledWith('/anothersubdir')).toEqual(true);
+ setDirSpy.restore();
+ });
+ });
+ describe('breadcrumb events', function() {
+ beforeEach(function() {
+ var data = {
+ status: 'success',
+ data: {
+ files: testFiles,
+ permissions: 31
+ }
+ };
+ fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2Fsubdir/, [
+ 200, {
+ "Content-Type": "application/json"
+ },
+ JSON.stringify(data)
+ ]);
+ });
+ it('clicking on root breadcrumb changes directory to root', function() {
+ FileList.changeDirectory('/subdir/two/three with space/four/five');
+ fakeServer.respond();
+ var changeDirStub = sinon.stub(FileList, 'changeDirectory');
+ FileList.breadcrumb.$el.find('.crumb:eq(0)').click();
+
+ expect(changeDirStub.calledOnce).toEqual(true);
+ expect(changeDirStub.getCall(0).args[0]).toEqual('/');
+ changeDirStub.restore();
+ });
+ it('clicking on breadcrumb changes directory', function() {
+ FileList.changeDirectory('/subdir/two/three with space/four/five');
+ fakeServer.respond();
+ var changeDirStub = sinon.stub(FileList, 'changeDirectory');
+ FileList.breadcrumb.$el.find('.crumb:eq(3)').click();
+
+ expect(changeDirStub.calledOnce).toEqual(true);
+ expect(changeDirStub.getCall(0).args[0]).toEqual('/subdir/two/three with space');
+ changeDirStub.restore();
+ });
+ it('dropping files on breadcrumb calls move operation', function() {
+ var request, query, testDir = '/subdir/two/three with space/four/five';
+ FileList.changeDirectory(testDir);
+ fakeServer.respond();
+ var $crumb = FileList.breadcrumb.$el.find('.crumb:eq(3)');
+ // no idea what this is but is required by the handler
+ var ui = {
+ helper: {
+ find: sinon.stub()
+ }
+ };
+ // returns a list of tr that were dragged
+ // FIXME: why are their attributes different than the
+ // regular file trs ?
+ ui.helper.find.returns([
+ $('
'),
+ $('
')
+ ]);
+ // simulate drop event
+ FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui);
+
+ // will trigger two calls to move.php (first one was previous list.php)
+ expect(fakeServer.requests.length).toEqual(3);
+
+ request = fakeServer.requests[1];
+ expect(request.method).toEqual('POST');
+ expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php');
+ query = OC.parseQueryString(request.requestBody);
+ expect(query).toEqual({
+ target: '/subdir/two/three with space',
+ dir: testDir,
+ file: 'One.txt'
+ });
+
+ request = fakeServer.requests[2];
+ expect(request.method).toEqual('POST');
+ expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php');
+ query = OC.parseQueryString(request.requestBody);
+ expect(query).toEqual({
+ target: '/subdir/two/three with space',
+ dir: testDir,
+ file: 'Two.jpg'
+ });
+ });
+ it('dropping files on same dir breadcrumb does nothing', function() {
+ var request, query, testDir = '/subdir/two/three with space/four/five';
+ FileList.changeDirectory(testDir);
+ fakeServer.respond();
+ var $crumb = FileList.breadcrumb.$el.find('.crumb:last');
+ // no idea what this is but is required by the handler
+ var ui = {
+ helper: {
+ find: sinon.stub()
+ }
+ };
+ // returns a list of tr that were dragged
+ // FIXME: why are their attributes different than the
+ // regular file trs ?
+ ui.helper.find.returns([
+ $('
'),
+ $('
')
+ ]);
+ // simulate drop event
+ FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui);
+
+ // no extra server request
+ expect(fakeServer.requests.length).toEqual(1);
+ });
});
describe('Download Url', function() {
it('returns correct download URL for single files', function() {
- expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt');
- expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt');
+ expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt');
+ expect(Files.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt');
$('#dir').val('/');
- expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt');
+ expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt');
});
it('returns correct download URL for multiple files', function() {
- expect(FileList.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
+ expect(Files.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
+ });
+ it('returns the correct ajax URL', function() {
+ expect(Files.getAjaxUrl('test', {a:1, b:'x y'})).toEqual(OC.webroot + '/index.php/apps/files/ajax/test.php?a=1&b=x%20y');
});
});
});
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index ab47de828b91ce0d71048405591f652ff8c07aa4..15a09a29f51da5b99edfb72bae10fa2b53fc3644 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -2,7 +2,7 @@
files_encryptionEncryption
- The ownCloud files encryption system provides server side-encryption. After the app was enabled you need to re-login to initialize your encryption keys. Please note that server side encryption requires that the ownCloud server admin can be trusted. The main purpose of this app is the encryption of files that are stored on externally mounted storages.
+ The ownCloud files encryption system provides server side-encryption. After the app is enabled you need to re-login to initialize your encryption keys. Please note that server side encryption requires that the ownCloud server admin can be trusted. The main purpose of this app is the encryption of files that are stored on externally mounted storages.AGPLSam Tuke, Bjoern Schiessle, Florin Peter4
diff --git a/apps/files_encryption/l10n/ast.php b/apps/files_encryption/l10n/ast.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e08e073095487247c93f3b6da960ee610c49b57
--- /dev/null
+++ b/apps/files_encryption/l10n/ast.php
@@ -0,0 +1,13 @@
+ "Contraseña camudada esitosamente.",
+"Could not change the password. Maybe the old password was not correct." => "Nun pue camudase la contraseña. Quiciabes la contraseña vieya nun fore correuta.",
+"personal settings" => "axustes personales",
+"Encryption" => "Cifráu",
+"Enabled" => "Habilitáu",
+"Disabled" => "Deshabilitáu",
+"Change Password" => "Camudar conseña",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Si nun recuerdes la to contraseña vieya pues entrugar al to alministrador pa recuperar los tos ficheros.",
+"Could not update file recovery" => "Nun pue anovase'l ficheru de recuperación"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index ad8617bc6d2b9e7e329b5a64b8492f66883278a3..972d7d7138c82fda189fb30b05e03e6eb8115a12 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
"Following users are not set up for encryption:" => "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Initial encryption started... This can take some time. Please wait." => "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
+"Initial encryption running... Please try again later." => "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
"Go directly to your " => "Πηγαίνε απευθείας στο ",
"personal settings" => "προσωπικές ρυθμίσεις",
"Encryption" => "Κρυπτογράφηση",
diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php
index dcf035289fae0bb247e2af2cf8a6ac889b976735..f82f9df9279d0c76fbe2f25dccdd65e3c7ba8765 100644
--- a/apps/files_encryption/l10n/et_EE.php
+++ b/apps/files_encryption/l10n/et_EE.php
@@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
"Following users are not set up for encryption:" => "Järgmised kasutajad pole seadistatud krüpteeringuks:",
"Initial encryption started... This can take some time. Please wait." => "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
+"Initial encryption running... Please try again later." => "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
"Go directly to your " => "Liigu otse oma",
"personal settings" => "isiklikes seadetes",
"Encryption" => "Krüpteerimine",
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index a80c8d6f36d58ce59627573a1aad091a584de966..22c1fa989bd6b16e8981bccb4304ee2a276b1c2a 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
"Following users are not set up for encryption:" => "A következő felhasználók nem állították be a titkosítást:",
"Initial encryption started... This can take some time. Please wait." => "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
+"Initial encryption running... Please try again later." => "Kezedeti titkosítás fut... Próbálja később.",
"Go directly to your " => "Ugrás ide:",
"personal settings" => "személyes beállítások",
"Encryption" => "Titkosítás",
diff --git a/apps/files_encryption/l10n/km.php b/apps/files_encryption/l10n/km.php
new file mode 100644
index 0000000000000000000000000000000000000000..0defe6c5388f0616ffb601e92f208112679bdefc
--- /dev/null
+++ b/apps/files_encryption/l10n/km.php
@@ -0,0 +1,11 @@
+ "បានប្ដូរពាក្យសម្ងាត់ដោយជោគជ័យ។",
+"Could not change the password. Maybe the old password was not correct." => "មិនអាចប្ដូរពាក្យសម្ងាត់បានទេ។ ប្រហែលពាក្យសម្ងាត់ចាស់មិនត្រឹមត្រូវ។",
+"personal settings" => "ការកំណត់ផ្ទាល់ខ្លួន",
+"Encryption" => "កូដនីយកម្ម",
+"Enabled" => "បានបើក",
+"Disabled" => "បានបិទ",
+"Change Password" => "ប្ដូរពាក្យសម្ងាត់"
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index bce245ce680296ccee29f14a91401a5ec530d5e9..ba98486893200cf01f125805184b6ecf976fa17a 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
"Following users are not set up for encryption:" => "Для следующих пользователей шифрование не настроено:",
"Initial encryption started... This can take some time. Please wait." => "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.",
+"Initial encryption running... Please try again later." => "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
"Go directly to your " => "Перейти прямо в",
"personal settings" => "персональные настройки",
"Encryption" => "Шифрование",
diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php
index 90a9bd73a6f39a773bf109c242bf6b379d844ae2..b17740f25410cb2449d2965b06b01ee7c510623d 100644
--- a/apps/files_encryption/l10n/sv.php
+++ b/apps/files_encryption/l10n/sv.php
@@ -15,6 +15,8 @@ $TRANSLATIONS = array(
"Missing requirements." => "Krav som saknas",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
"Following users are not set up for encryption:" => "Följande användare har inte aktiverat kryptering:",
+"Initial encryption started... This can take some time. Please wait." => "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
+"Initial encryption running... Please try again later." => "Initiala krypteringen körs... Var god försök igen senare.",
"Go directly to your " => "Gå direkt till din",
"personal settings" => "personliga inställningar",
"Encryption" => "Kryptering",
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index caca13aceceec843928e7a43d2c5329f90909413..a4f7bd35497543c000c43358b0118a6c482ef6e6 100755
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -497,13 +497,13 @@ class Crypt {
}
/**
- * @brief Generate a pseudo random 1024kb ASCII key, used as file key
+ * @brief Generate a pseudo random 256-bit ASCII key, used as file key
* @returns $key Generated key
*/
public static function generateKey() {
// Generate key
- if ($key = base64_encode(openssl_random_pseudo_bytes(183, $strong))) {
+ if ($key = base64_encode(openssl_random_pseudo_bytes(32, $strong))) {
if (!$strong) {
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index bae1fded53d3376b7b076ab92535548d27a7aaa1..ae2d8d63e23a65912381979e57bc715ba0051b4e 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -3,9 +3,10 @@
/**
* ownCloud
*
- * @author Sam Tuke, Robin Appelman
- * @copyright 2012 Sam Tuke samtuke@owncloud.com, Robin Appelman
- * icewind1991@gmail.com
+ * @author Bjoern Schiessle, Sam Tuke, Robin Appelman
+ * @copyright 2012 Sam Tuke
+ * 2012 Robin Appelman
+ * 2014 Bjoern Schiessle
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -36,37 +37,40 @@ namespace OCA\Encryption;
*/
class Proxy extends \OC_FileProxy {
- private static $blackList = null; //mimetypes blacklisted from encryption
private static $unencryptedSizes = array(); // remember unencrypted size
private static $fopenMode = array(); // remember the fopen mode
+ private static $enableEncryption = false; // Enable encryption for the given path
/**
* Check if a file requires encryption
* @param string $path
+ * @param string $mode type of access
* @return bool
*
- * Tests if server side encryption is enabled, and file is allowed by blacklists
+ * Tests if server side encryption is enabled, and if we should call the
+ * crypt stream wrapper for the given file
*/
- private static function shouldEncrypt($path) {
+ private static function shouldEncrypt($path, $mode = 'w') {
$userId = Helper::getUser($path);
- if (\OCP\App::isEnabled('files_encryption') === false || Crypt::mode() !== 'server' ||
- strpos($path, '/' . $userId . '/files') !== 0) {
+ // don't call the crypt stream wrapper, if...
+ if (
+ \OCP\App::isEnabled('files_encryption') === false // encryption is disabled
+ || Crypt::mode() !== 'server' // we are not in server-side-encryption mode
+ || strpos($path, '/' . $userId . '/files') !== 0 // path is not in files/
+ || substr($path, 0, 8) === 'crypt://' // we are already in crypt mode
+ ) {
return false;
}
- if (is_null(self::$blackList)) {
- self::$blackList = explode(',', \OCP\Config::getAppValue('files_encryption', 'type_blacklist', ''));
- }
-
- if (Crypt::isCatfileContent($path)) {
- return true;
- }
-
- $extension = substr($path, strrpos($path, '.') + 1);
+ $view = new \OC_FilesystemView('');
+ $util = new Util($view, $userId);
- if (array_search($extension, self::$blackList) === false) {
+ // for write operation we always encrypt the files, for read operations
+ // we check if the existing file is encrypted or not decide if it needs to
+ // decrypt it.
+ if (($mode !== 'r' && $mode !== 'rb') || $util->isEncryptedPath($path)) {
return true;
}
@@ -128,6 +132,8 @@ class Proxy extends \OC_FileProxy {
// re-enable proxy - our work is done
\OC_FileProxy::$enabled = $proxyStatus;
+ } else {
+ return false;
}
}
}
@@ -204,23 +210,16 @@ class Proxy extends \OC_FileProxy {
}
- /**
- * @param $path
- * @return bool
- */
- public function postTouch($path) {
- $this->handleFile($path);
-
- return true;
- }
-
/**
* @brief remember initial fopen mode because sometimes it gets changed during the request
* @param string $path path
* @param string $mode type of access
*/
public function preFopen($path, $mode) {
+
self::$fopenMode[$path] = $mode;
+ self::$enableEncryption = self::shouldEncrypt($path, $mode);
+
}
@@ -233,26 +232,14 @@ class Proxy extends \OC_FileProxy {
$path = \OC\Files\Filesystem::normalizePath($path);
- if (!$result) {
+ if (!$result || self::$enableEncryption === false) {
return $result;
}
- // split the path parts
- $pathParts = explode('/', $path);
-
- // don't try to encrypt/decrypt cache chunks or files in the trash bin
- if (isset($pathParts[2]) && ($pathParts[2] === 'cache' || $pathParts[2] === 'files_trashbin')) {
- return $result;
- }
-
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
// if we remember the mode from the pre proxy we re-use it
- // oterwise we fall back to stream_get_meta_data()
+ // otherwise we fall back to stream_get_meta_data()
if (isset(self::$fopenMode[$path])) {
$mode = self::$fopenMode[$path];
unset(self::$fopenMode[$path]);
@@ -261,35 +248,12 @@ class Proxy extends \OC_FileProxy {
$mode = $meta['mode'];
}
- $view = new \OC_FilesystemView('');
-
- $userId = Helper::getUser($path);
- $util = new Util($view, $userId);
-
- // If file is already encrypted, decrypt using crypto protocol
- if (
- Crypt::mode() === 'server'
- && $util->isEncryptedPath($path)
- ) {
-
- // Close the original encrypted file
- fclose($result);
+ // Close the original encrypted file
+ fclose($result);
- // Open the file using the crypto stream wrapper
- // protocol and let it do the decryption work instead
- $result = fopen('crypt://' . $path, $mode);
-
- } elseif (
- self::shouldEncrypt($path)
- and $mode !== 'r'
- and $mode !== 'rb'
-
- ) {
- $result = fopen('crypt://' . $path, $mode);
- }
-
- // Re-enable the proxy
- \OC_FileProxy::$enabled = $proxyStatus;
+ // Open the file using the crypto stream wrapper
+ // protocol and let it do the decryption work instead
+ $result = fopen('crypt://' . $path, $mode);
return $result;
@@ -402,39 +366,4 @@ class Proxy extends \OC_FileProxy {
return $size;
}
- /**
- * @param $path
- */
- public function handleFile($path) {
-
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $view = new \OC_FilesystemView('/');
- $session = new \OCA\Encryption\Session($view);
- $userId = Helper::getUser($path);
- $util = new Util($view, $userId);
-
- // split the path parts
- $pathParts = explode('/', $path);
-
- // get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
-
- // only if file is on 'files' folder fix file size and sharing
- if (isset($pathParts[2]) && $pathParts[2] === 'files' && $util->fixFileSize($path)) {
-
- // get sharing app state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $relativePath);
-
- // update sharing-keys
- $util->setSharedFileKeyfiles($session, $usersSharing, $relativePath);
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
- }
}
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 58ac03373a737bc2136a5cde4fad3b385114b1fc..df5de558867867f41c38d1c9b2548ada7264d1b6 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -545,7 +545,7 @@ class Stream {
$util = new Util($this->rootView, $this->userId);
// Get all users sharing the file includes current user
- $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath, $this->userId);
+ $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath);
$checkedUserIds = $util->filterShareReadyUsers($uniqueUserIds);
// Fetch public keys for all sharing users
@@ -568,21 +568,25 @@ class Stream {
// part file.
$path = Helper::stripPartialFileExtension($this->rawPath);
- // get file info
- $fileInfo = $this->rootView->getFileInfo($path);
- if ($fileInfo) {
- // set encryption data
- $fileInfo['encrypted'] = true;
- $fileInfo['size'] = $this->size;
- $fileInfo['unencrypted_size'] = $this->unencryptedSize;
+ $fileInfo = array(
+ 'encrypted' => true,
+ 'size' => $this->size,
+ 'unencrypted_size' => $this->unencryptedSize,
+ );
- // set fileinfo
- $this->rootView->putFileInfo($path, $fileInfo);
- }
+ // set fileinfo
+ $this->rootView->putFileInfo($path, $fileInfo);
+
+ }
+ $result = fclose($this->handle);
+
+ if ($result === false) {
+ \OCP\Util::writeLog('Encryption library', 'Could not close stream, file could be corrupted', \OCP\Util::FATAL);
}
- return fclose($this->handle);
+ return $result;
+
}
}
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 3db5a423478052c84af1f386c8db99e5ed1176a4..b86815021a8feb4ed9be997dd936b08124ed28d9 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -432,25 +432,28 @@ class Util {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- // we only need 24 byte from the last chunk
$data = '';
- $handle = $this->view->fopen($path, 'r');
- if (is_resource($handle)) {
- // suppress fseek warining, we handle the case that fseek doesn't
- // work in the else branch
- if (@fseek($handle, -24, SEEK_END) === 0) {
- $data = fgets($handle);
- } else {
- // if fseek failed on the storage we create a local copy from the file
- // and read this one
- fclose($handle);
- $localFile = $this->view->getLocalFile($path);
- $handle = fopen($localFile, 'r');
- if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) {
+
+ // we only need 24 byte from the last chunk
+ if ($this->view->file_exists($path)) {
+ $handle = $this->view->fopen($path, 'r');
+ if (is_resource($handle)) {
+ // suppress fseek warining, we handle the case that fseek doesn't
+ // work in the else branch
+ if (@fseek($handle, -24, SEEK_END) === 0) {
$data = fgets($handle);
+ } else {
+ // if fseek failed on the storage we create a local copy from the file
+ // and read this one
+ fclose($handle);
+ $localFile = $this->view->getLocalFile($path);
+ $handle = fopen($localFile, 'r');
+ if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) {
+ $data = fgets($handle);
+ }
}
+ fclose($handle);
}
- fclose($handle);
}
// re-enable proxy
@@ -1124,8 +1127,9 @@ class Util {
* @brief Find, sanitise and format users sharing a file
* @note This wraps other methods into a portable bundle
* @param boolean $sharingEnabled
+ * @param string $filePath path relativ to current users files folder
*/
- public function getSharingUsersArray($sharingEnabled, $filePath, $currentUserId = false) {
+ public function getSharingUsersArray($sharingEnabled, $filePath) {
$appConfig = \OC::$server->getAppConfig();
@@ -1144,12 +1148,14 @@ class Util {
$ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath);
- $userIds = array();
+ // always add owner to the list of users with access to the file
+ $userIds = array($owner);
+
if ($sharingEnabled) {
// Find out who, if anyone, is sharing the file
- $result = \OCP\Share::getUsersSharingFile($ownerPath, $owner, true);
- $userIds = $result['users'];
+ $result = \OCP\Share::getUsersSharingFile($ownerPath, $owner);
+ $userIds = \array_merge($userIds, $result['users']);
if ($result['public']) {
$userIds[] = $this->publicShareKeyId;
}
@@ -1165,11 +1171,6 @@ class Util {
$userIds[] = $recoveryKeyId;
}
- // add current user if given
- if ($currentUserId !== false) {
- $userIds[] = $currentUserId;
- }
-
// check if it is a group mount
if (\OCP\App::isEnabled("files_external")) {
$mount = \OC_Mount_Config::getSystemMountPoints();
diff --git a/apps/files_encryption/templates/settings-admin.php b/apps/files_encryption/templates/settings-admin.php
index 231a68b6a587d51ed097593b60407da2d55426a1..cf676c445cedbba510a471628b3f8cfaf37121bc 100644
--- a/apps/files_encryption/templates/settings-admin.php
+++ b/apps/files_encryption/templates/settings-admin.php
@@ -1,63 +1,60 @@
-
\r\n";
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP/Stream.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP/Stream.php
index 0572c5c4025b55d6bf58a74c879f3987d01ff56a..48b79b3ef7f55eb1d4b37d0ff3dd00ce5bbc4145 100644
--- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP/Stream.php
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP/Stream.php
@@ -1,5 +1,4 @@
- * @copyright MMXIII Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
+ * @category Net
+ * @package Net_SFTP_Stream
+ * @author Jim Wigginton
+ * @copyright MMXIII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @link http://phpseclib.sourceforge.net
*/
/**
* SFTP Stream Wrapper
*
+ * @package Net_SFTP_Stream
* @author Jim Wigginton
* @version 0.3.2
* @access public
- * @package Net_SFTP_Stream
*/
-class Net_SFTP_Stream {
+class Net_SFTP_Stream
+{
/**
* SFTP instances
*
@@ -134,8 +134,12 @@ class Net_SFTP_Stream {
*/
function Net_SFTP_Stream()
{
+ if (defined('NET_SFTP_STREAM_LOGGING')) {
+ echo "__construct()\r\n";
+ }
+
if (!class_exists('Net_SFTP')) {
- require_once('Net/SFTP.php');
+ include_once 'Net/SFTP.php';
}
}
@@ -513,7 +517,7 @@ class Net_SFTP_Stream {
* Open directory handle
*
* The only $options is "whether or not to enforce safe_mode (0x04)". Since safe mode was deprecated in 5.3 and
- * removed in 5.4 I'm just going to ignore it
+ * removed in 5.4 I'm just going to ignore it
*
* @param String $path
* @param Integer $options
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
index 83d5980d00acf962575c23caf6225d1c92258ee8..0a6aa90828958f462f6349c588172497e9532bf0 100644
--- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
@@ -1,5 +1,4 @@
*
*
- * More information on the SSHv1 specification can be found by reading
+ * More information on the SSHv1 specification can be found by reading
* {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}.
*
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -45,10 +44,10 @@
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -57,12 +56,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
- * @category Net
- * @package Net_SSH1
- * @author Jim Wigginton
- * @copyright MMVII Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
+ * @category Net
+ * @package Net_SSH1
+ * @author Jim Wigginton
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @link http://phpseclib.sourceforge.net
*/
/**#@+
@@ -202,11 +201,11 @@ define('NET_SSH1_LOG_COMPLEX', 2);
/**
* Outputs the content real-time
*/
-define('NET_SSH2_LOG_REALTIME', 3);
+define('NET_SSH1_LOG_REALTIME', 3);
/**
* Dumps the content real-time to a file
*/
-define('NET_SSH2_LOG_REALTIME_FILE', 4);
+define('NET_SSH1_LOG_REALTIME_FILE', 4);
/**#@-*/
/**#@+
@@ -226,12 +225,13 @@ define('NET_SSH1_READ_REGEX', 2);
/**
* Pure-PHP implementation of SSHv1.
*
+ * @package Net_SSH1
* @author Jim Wigginton
* @version 0.1.0
* @access public
- * @package Net_SSH1
*/
-class Net_SSH1 {
+class Net_SSH1
+{
/**
* The SSH identifier
*
@@ -429,11 +429,35 @@ class Net_SSH1 {
/**
* Current Timeout
*
- * @see Net_SSH2::_get_channel_packet()
+ * @see Net_SSH1::_get_channel_packet()
* @access private
*/
var $curTimeout;
+ /**
+ * Log Boundary
+ *
+ * @see Net_SSH1::_format_log
+ * @access private
+ */
+ var $log_boundary = ':';
+
+ /**
+ * Log Long Width
+ *
+ * @see Net_SSH1::_format_log
+ * @access private
+ */
+ var $log_long_width = 65;
+
+ /**
+ * Log Short Width
+ *
+ * @see Net_SSH1::_format_log
+ * @access private
+ */
+ var $log_short_width = 16;
+
/**
* Default Constructor.
*
@@ -449,16 +473,16 @@ class Net_SSH1 {
function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES)
{
if (!class_exists('Math_BigInteger')) {
- require_once('Math/BigInteger.php');
+ include_once 'Math/BigInteger.php';
}
// Include Crypt_Random
// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
// will trigger a call to __autoload() if you're wanting to auto-load classes
- // call function_exists() a second time to stop the require_once from being called outside
+ // call function_exists() a second time to stop the include_once from being called outside
// of the auto loader
if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
- require_once('Crypt/Random.php');
+ include_once 'Crypt/Random.php';
}
$this->protocol_flags = array(
@@ -603,7 +627,7 @@ class Net_SSH1 {
// break;
case NET_SSH1_CIPHER_DES:
if (!class_exists('Crypt_DES')) {
- require_once('Crypt/DES.php');
+ include_once 'Crypt/DES.php';
}
$this->crypto = new Crypt_DES();
$this->crypto->disablePadding();
@@ -612,7 +636,7 @@ class Net_SSH1 {
break;
case NET_SSH1_CIPHER_3DES:
if (!class_exists('Crypt_TripleDES')) {
- require_once('Crypt/TripleDES.php');
+ include_once 'Crypt/TripleDES.php';
}
$this->crypto = new Crypt_TripleDES(CRYPT_DES_MODE_3CBC);
$this->crypto->disablePadding();
@@ -621,7 +645,7 @@ class Net_SSH1 {
break;
//case NET_SSH1_CIPHER_RC4:
// if (!class_exists('Crypt_RC4')) {
- // require_once('Crypt/RC4.php');
+ // include_once('Crypt/RC4.php');
// }
// $this->crypto = new Crypt_RC4();
// $this->crypto->enableContinuousBuffer();
@@ -1017,7 +1041,7 @@ class Net_SSH1 {
if ($this->curTimeout) {
$read = array($this->fsock);
- $write = $except = NULL;
+ $write = $except = null;
$start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
$sec = floor($this->curTimeout);
@@ -1253,7 +1277,7 @@ class Net_SSH1 {
{
/*
if (!class_exists('Crypt_RSA')) {
- require_once('Crypt/RSA.php');
+ include_once 'Crypt/RSA.php';
}
$rsa = new Crypt_RSA();
@@ -1318,7 +1342,7 @@ class Net_SSH1 {
/**
* Returns a log of the packets that have been sent and received.
*
- * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+ * Returns a string if NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX, an array if NET_SSH1_LOGGING == NET_SSH1_LOG_SIMPLE and false if !defined('NET_SSH1_LOGGING')
*
* @access public
* @return String or Array
@@ -1351,8 +1375,6 @@ class Net_SSH1 {
*/
function _format_log($message_log, $message_number_log)
{
- static $boundary = ':', $long_width = 65, $short_width = 16;
-
$output = '';
for ($i = 0; $i < count($message_log); $i++) {
$output.= $message_number_log[$i] . "\r\n";
@@ -1362,19 +1384,13 @@ class Net_SSH1 {
if (strlen($current_log)) {
$output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 ';
}
- $fragment = $this->_string_shift($current_log, $short_width);
- $hex = substr(
- preg_replace(
- '#(.)#es',
- '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
- $fragment),
- strlen($boundary)
- );
+ $fragment = $this->_string_shift($current_log, $this->log_short_width);
+ $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary));
// replace non ASCII printable characters with dots
// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
// also replace < with a . since < messes up the output on web browsers
$raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
- $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+ $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n";
$j++;
} while (strlen($current_log));
$output.= "\r\n";
@@ -1383,6 +1399,20 @@ class Net_SSH1 {
return $output;
}
+ /**
+ * Helper function for _format_log
+ *
+ * For use with preg_replace_callback()
+ *
+ * @param Array $matches
+ * @access private
+ * @return String
+ */
+ function _format_log_helper($matches)
+ {
+ return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);
+ }
+
/**
* Return the server key public exponent
*
@@ -1496,57 +1526,57 @@ class Net_SSH1 {
*/
function _append_log($protocol_flags, $message)
{
- switch (NET_SSH1_LOGGING) {
- // useful for benchmarks
- case NET_SSH1_LOG_SIMPLE:
- $this->protocol_flags_log[] = $protocol_flags;
- break;
- // the most useful log for SSH1
- case NET_SSH1_LOG_COMPLEX:
- $this->protocol_flags_log[] = $protocol_flags;
- $this->_string_shift($message);
- $this->log_size+= strlen($message);
- $this->message_log[] = $message;
- while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
- $this->log_size-= strlen(array_shift($this->message_log));
- array_shift($this->protocol_flags_log);
- }
- break;
- // dump the output out realtime; packets may be interspersed with non packets,
- // passwords won't be filtered out and select other packets may not be correctly
- // identified
- case NET_SSH1_LOG_REALTIME:
- echo "
\r\n";
- @flush();
- @ob_flush();
+ switch (NET_SSH1_LOGGING) {
+ // useful for benchmarks
+ case NET_SSH1_LOG_SIMPLE:
+ $this->protocol_flags_log[] = $protocol_flags;
+ break;
+ // the most useful log for SSH1
+ case NET_SSH1_LOG_COMPLEX:
+ $this->protocol_flags_log[] = $protocol_flags;
+ $this->_string_shift($message);
+ $this->log_size+= strlen($message);
+ $this->message_log[] = $message;
+ while ($this->log_size > NET_SSH1_LOG_MAX_SIZE) {
+ $this->log_size-= strlen(array_shift($this->message_log));
+ array_shift($this->protocol_flags_log);
+ }
+ break;
+ // dump the output out realtime; packets may be interspersed with non packets,
+ // passwords won't be filtered out and select other packets may not be correctly
+ // identified
+ case NET_SSH1_LOG_REALTIME:
+ echo "
\r\n";
+ @flush();
+ @ob_flush();
+ break;
+ // basically the same thing as NET_SSH1_LOG_REALTIME with the caveat that NET_SSH1_LOG_REALTIME_FILE
+ // needs to be defined and that the resultant log file will be capped out at NET_SSH1_LOG_MAX_SIZE.
+ // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+ // at the beginning of the file
+ case NET_SSH1_LOG_REALTIME_FILE:
+ if (!isset($this->realtime_log_file)) {
+ // PHP doesn't seem to like using constants in fopen()
+ $filename = NET_SSH1_LOG_REALTIME_FILE;
+ $fp = fopen($filename, 'w');
+ $this->realtime_log_file = $fp;
+ }
+ if (!is_resource($this->realtime_log_file)) {
break;
- // basically the same thing as NET_SSH1_LOG_REALTIME with the caveat that NET_SSH1_LOG_REALTIME_FILE
- // needs to be defined and that the resultant log file will be capped out at NET_SSH1_LOG_MAX_SIZE.
- // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
- // at the beginning of the file
- case NET_SSH1_LOG_REALTIME_FILE:
- if (!isset($this->realtime_log_file)) {
- // PHP doesn't seem to like using constants in fopen()
- $filename = NET_SSH2_LOG_REALTIME_FILE;
- $fp = fopen($filename, 'w');
- $this->realtime_log_file = $fp;
- }
- if (!is_resource($this->realtime_log_file)) {
- break;
- }
- $entry = $this->_format_log(array($message), array($protocol_flags));
- if ($this->realtime_log_wrap) {
- $temp = "<<< START >>>\r\n";
- $entry.= $temp;
- fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
- }
- $this->realtime_log_size+= strlen($entry);
- if ($this->realtime_log_size > NET_SSH1_LOG_MAX_SIZE) {
- fseek($this->realtime_log_file, 0);
- $this->realtime_log_size = strlen($entry);
- $this->realtime_log_wrap = true;
- }
- fputs($this->realtime_log_file, $entry);
- }
+ }
+ $entry = $this->_format_log(array($message), array($protocol_flags));
+ if ($this->realtime_log_wrap) {
+ $temp = "<<< START >>>\r\n";
+ $entry.= $temp;
+ fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+ }
+ $this->realtime_log_size+= strlen($entry);
+ if ($this->realtime_log_size > NET_SSH1_LOG_MAX_SIZE) {
+ fseek($this->realtime_log_file, 0);
+ $this->realtime_log_size = strlen($entry);
+ $this->realtime_log_wrap = true;
+ }
+ fputs($this->realtime_log_file, $entry);
+ }
}
}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
index dad03697233d746ecf4735f9dba44077b8095c1f..2fddb68a9b2fd9cfde0f12208badabe35fa76592 100644
--- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
@@ -1,5 +1,4 @@
- * @copyright MMVII Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
+ * @category Net
+ * @package Net_SSH2
+ * @author Jim Wigginton
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @link http://phpseclib.sourceforge.net
*/
/**#@+
@@ -144,19 +143,20 @@ define('NET_SSH2_LOG_MAX_SIZE', 1024 * 1024);
/**
* Pure-PHP implementation of SSHv2.
*
+ * @package Net_SSH2
* @author Jim Wigginton
* @version 0.1.0
* @access public
- * @package Net_SSH2
*/
-class Net_SSH2 {
+class Net_SSH2
+{
/**
* The SSH identifier
*
* @var String
* @access private
*/
- var $identifier = 'SSH-2.0-phpseclib_0.3';
+ var $identifier;
/**
* The Socket Object
@@ -747,6 +747,30 @@ class Net_SSH2 {
*/
var $is_timeout = false;
+ /**
+ * Log Boundary
+ *
+ * @see Net_SSH2::_format_log
+ * @access private
+ */
+ var $log_boundary = ':';
+
+ /**
+ * Log Long Width
+ *
+ * @see Net_SSH2::_format_log
+ * @access private
+ */
+ var $log_long_width = 65;
+
+ /**
+ * Log Short Width
+ *
+ * @see Net_SSH2::_format_log
+ * @access private
+ */
+ var $log_short_width = 16;
+
/**
* Default Constructor.
*
@@ -763,15 +787,15 @@ class Net_SSH2 {
// Include Math_BigInteger
// Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
if (!class_exists('Math_BigInteger')) {
- require_once('Math/BigInteger.php');
+ include_once 'Math/BigInteger.php';
}
if (!function_exists('crypt_random_string')) {
- require_once('Crypt/Random.php');
+ include_once 'Crypt/Random.php';
}
if (!class_exists('Crypt_Hash')) {
- require_once('Crypt/Hash.php');
+ include_once 'Crypt/Hash.php';
}
$this->last_packet = strtok(microtime(), ' ') + strtok(''); // == microtime(true) in PHP5
@@ -861,7 +885,7 @@ class Net_SSH2 {
}
$read = array($this->fsock);
- $write = $except = NULL;
+ $write = $except = null;
$sec = floor($timeout);
$usec = 1000000 * ($timeout - $sec);
@@ -895,19 +919,7 @@ class Net_SSH2 {
return false;
}
- $ext = array();
- if (extension_loaded('mcrypt')) {
- $ext[] = 'mcrypt';
- }
- if (extension_loaded('gmp')) {
- $ext[] = 'gmp';
- } else if (extension_loaded('bcmath')) {
- $ext[] = 'bcmath';
- }
-
- if (!empty($ext)) {
- $this->identifier.= ' (' . implode(', ', $ext) . ')';
- }
+ $this->identifier = $this->_generate_identifier();
if (defined('NET_SSH2_LOGGING')) {
$this->_append_log('<-', $extra . $temp);
@@ -944,6 +956,36 @@ class Net_SSH2 {
$this->bitmap = NET_SSH2_MASK_CONSTRUCTOR;
}
+ /**
+ * Generates the SSH identifier
+ *
+ * You should overwrite this method in your own class if you want to use another identifier
+ *
+ * @access protected
+ * @return String
+ */
+ function _generate_identifier()
+ {
+ $identifier = 'SSH-2.0-phpseclib_0.3';
+
+ $ext = array();
+ if (extension_loaded('mcrypt')) {
+ $ext[] = 'mcrypt';
+ }
+
+ if (extension_loaded('gmp')) {
+ $ext[] = 'gmp';
+ } elseif (extension_loaded('bcmath')) {
+ $ext[] = 'bcmath';
+ }
+
+ if (!empty($ext)) {
+ $identifier .= ' (' . implode(', ', $ext) . ')';
+ }
+
+ return $identifier;
+ }
+
/**
* Key Exchange
*
@@ -1223,23 +1265,23 @@ class Net_SSH2 {
}
switch ($kex_algorithms[$i]) {
- // see http://tools.ietf.org/html/rfc2409#section-6.2 and
+ // see http://tools.ietf.org/html/rfc2409#section-6.2 and
// http://tools.ietf.org/html/rfc2412, appendex E
case 'diffie-hellman-group1-sha1':
- $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
- '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
- '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+ $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+ '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+ '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF';
break;
// see http://tools.ietf.org/html/rfc3526#section-3
case 'diffie-hellman-group14-sha1':
- $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
- '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
- '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
- 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
- '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
- '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
- 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
+ $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+ '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+ '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+ 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
+ '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
+ '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
+ 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
'3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF';
break;
}
@@ -1260,7 +1302,8 @@ class Net_SSH2 {
-- http://tools.ietf.org/html/rfc4419#section-6.2 */
$one = new Math_BigInteger(1);
$keyLength = min($keyLength, $kexHash->getLength());
- $max = $one->bitwise_leftShift(16 * $keyLength)->subtract($one); // 2 * 8 * $keyLength
+ $max = $one->bitwise_leftShift(16 * $keyLength); // 2 * 8 * $keyLength
+ $max = $max->subtract($one);
$x = $one->random($one, $max);
$e = $g->modPow($x, $prime);
@@ -1353,14 +1396,14 @@ class Net_SSH2 {
switch ($encrypt) {
case '3des-cbc':
if (!class_exists('Crypt_TripleDES')) {
- require_once('Crypt/TripleDES.php');
+ include_once 'Crypt/TripleDES.php';
}
$this->encrypt = new Crypt_TripleDES();
// $this->encrypt_block_size = 64 / 8 == the default
break;
case '3des-ctr':
if (!class_exists('Crypt_TripleDES')) {
- require_once('Crypt/TripleDES.php');
+ include_once 'Crypt/TripleDES.php';
}
$this->encrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
// $this->encrypt_block_size = 64 / 8 == the default
@@ -1369,7 +1412,7 @@ class Net_SSH2 {
case 'aes192-cbc':
case 'aes128-cbc':
if (!class_exists('Crypt_Rijndael')) {
- require_once('Crypt/Rijndael.php');
+ include_once 'Crypt/Rijndael.php';
}
$this->encrypt = new Crypt_Rijndael();
$this->encrypt_block_size = 16; // eg. 128 / 8
@@ -1378,21 +1421,21 @@ class Net_SSH2 {
case 'aes192-ctr':
case 'aes128-ctr':
if (!class_exists('Crypt_Rijndael')) {
- require_once('Crypt/Rijndael.php');
+ include_once 'Crypt/Rijndael.php';
}
$this->encrypt = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_CTR);
$this->encrypt_block_size = 16; // eg. 128 / 8
break;
case 'blowfish-cbc':
if (!class_exists('Crypt_Blowfish')) {
- require_once('Crypt/Blowfish.php');
+ include_once 'Crypt/Blowfish.php';
}
$this->encrypt = new Crypt_Blowfish();
$this->encrypt_block_size = 8;
break;
case 'blowfish-ctr':
if (!class_exists('Crypt_Blowfish')) {
- require_once('Crypt/Blowfish.php');
+ include_once 'Crypt/Blowfish.php';
}
$this->encrypt = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
$this->encrypt_block_size = 8;
@@ -1402,7 +1445,7 @@ class Net_SSH2 {
case 'twofish256-cbc':
case 'twofish-cbc':
if (!class_exists('Crypt_Twofish')) {
- require_once('Crypt/Twofish.php');
+ include_once 'Crypt/Twofish.php';
}
$this->encrypt = new Crypt_Twofish();
$this->encrypt_block_size = 16;
@@ -1411,7 +1454,7 @@ class Net_SSH2 {
case 'twofish192-ctr':
case 'twofish256-ctr':
if (!class_exists('Crypt_Twofish')) {
- require_once('Crypt/Twofish.php');
+ include_once 'Crypt/Twofish.php';
}
$this->encrypt = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
$this->encrypt_block_size = 16;
@@ -1420,7 +1463,7 @@ class Net_SSH2 {
case 'arcfour128':
case 'arcfour256':
if (!class_exists('Crypt_RC4')) {
- require_once('Crypt/RC4.php');
+ include_once 'Crypt/RC4.php';
}
$this->encrypt = new Crypt_RC4();
break;
@@ -1431,13 +1474,13 @@ class Net_SSH2 {
switch ($decrypt) {
case '3des-cbc':
if (!class_exists('Crypt_TripleDES')) {
- require_once('Crypt/TripleDES.php');
+ include_once 'Crypt/TripleDES.php';
}
$this->decrypt = new Crypt_TripleDES();
break;
case '3des-ctr':
if (!class_exists('Crypt_TripleDES')) {
- require_once('Crypt/TripleDES.php');
+ include_once 'Crypt/TripleDES.php';
}
$this->decrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
break;
@@ -1445,7 +1488,7 @@ class Net_SSH2 {
case 'aes192-cbc':
case 'aes128-cbc':
if (!class_exists('Crypt_Rijndael')) {
- require_once('Crypt/Rijndael.php');
+ include_once 'Crypt/Rijndael.php';
}
$this->decrypt = new Crypt_Rijndael();
$this->decrypt_block_size = 16;
@@ -1454,21 +1497,21 @@ class Net_SSH2 {
case 'aes192-ctr':
case 'aes128-ctr':
if (!class_exists('Crypt_Rijndael')) {
- require_once('Crypt/Rijndael.php');
+ include_once 'Crypt/Rijndael.php';
}
$this->decrypt = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_CTR);
$this->decrypt_block_size = 16;
break;
case 'blowfish-cbc':
if (!class_exists('Crypt_Blowfish')) {
- require_once('Crypt/Blowfish.php');
+ include_once 'Crypt/Blowfish.php';
}
$this->decrypt = new Crypt_Blowfish();
$this->decrypt_block_size = 8;
break;
case 'blowfish-ctr':
if (!class_exists('Crypt_Blowfish')) {
- require_once('Crypt/Blowfish.php');
+ include_once 'Crypt/Blowfish.php';
}
$this->decrypt = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
$this->decrypt_block_size = 8;
@@ -1478,7 +1521,7 @@ class Net_SSH2 {
case 'twofish256-cbc':
case 'twofish-cbc':
if (!class_exists('Crypt_Twofish')) {
- require_once('Crypt/Twofish.php');
+ include_once 'Crypt/Twofish.php';
}
$this->decrypt = new Crypt_Twofish();
$this->decrypt_block_size = 16;
@@ -1487,7 +1530,7 @@ class Net_SSH2 {
case 'twofish192-ctr':
case 'twofish256-ctr':
if (!class_exists('Crypt_Twofish')) {
- require_once('Crypt/Twofish.php');
+ include_once 'Crypt/Twofish.php';
}
$this->decrypt = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
$this->decrypt_block_size = 16;
@@ -1496,7 +1539,7 @@ class Net_SSH2 {
case 'arcfour128':
case 'arcfour256':
if (!class_exists('Crypt_RC4')) {
- require_once('Crypt/RC4.php');
+ include_once 'Crypt/RC4.php';
}
$this->decrypt = new Crypt_RC4();
break;
@@ -1647,10 +1690,26 @@ class Net_SSH2 {
* @param Mixed $password
* @param Mixed $...
* @return Boolean
- * @see _login_helper
+ * @see _login
* @access public
*/
function login($username)
+ {
+ $args = func_get_args();
+ return call_user_func_array(array(&$this, '_login'), $args);
+ }
+
+ /**
+ * Login Helper
+ *
+ * @param String $username
+ * @param Mixed $password
+ * @param Mixed $...
+ * @return Boolean
+ * @see _login_helper
+ * @access private
+ */
+ function _login($username)
{
$args = array_slice(func_get_args(), 1);
if (empty($args)) {
@@ -1710,8 +1769,13 @@ class Net_SSH2 {
}
// although PHP5's get_class() preserves the case, PHP4's does not
- if (is_object($password) && strtolower(get_class($password)) == 'crypt_rsa') {
- return $this->_privatekey_login($username, $password);
+ if (is_object($password)) {
+ switch (strtolower(get_class($password))) {
+ case 'crypt_rsa':
+ return $this->_privatekey_login($username, $password);
+ case 'system_ssh_agent':
+ return $this->_ssh_agent_login($username, $password);
+ }
}
if (is_array($password)) {
@@ -1757,7 +1821,7 @@ class Net_SSH2 {
// remove the username and password from the logged packet
if (!defined('NET_SSH2_LOGGING')) {
- $logged = NULL;
+ $logged = null;
} else {
$logged = pack('CNa*Na*Na*CNa*',
NET_SSH2_MSG_USERAUTH_REQUEST, strlen('username'), 'username', strlen('ssh-connection'), 'ssh-connection',
@@ -1821,7 +1885,7 @@ class Net_SSH2 {
*/
function _keyboard_interactive_login($username, $password)
{
- $packet = pack('CNa*Na*Na*Na*Na*',
+ $packet = pack('CNa*Na*Na*Na*Na*',
NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
strlen('keyboard-interactive'), 'keyboard-interactive', 0, '', 0, ''
);
@@ -1948,6 +2012,26 @@ class Net_SSH2 {
return false;
}
+ /**
+ * Login with an ssh-agent provided key
+ *
+ * @param String $username
+ * @param System_SSH_Agent $agent
+ * @return Boolean
+ * @access private
+ */
+ function _ssh_agent_login($username, $agent)
+ {
+ $keys = $agent->requestIdentities();
+ foreach ($keys as $key) {
+ if ($this->_privatekey_login($username, $key)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Login with an RSA private key
*
@@ -2056,7 +2140,7 @@ class Net_SSH2 {
/**
* Get the output from stdError
- *
+ *
* @access public
*/
function getStdError()
@@ -2075,7 +2159,7 @@ class Net_SSH2 {
* @return String
* @access public
*/
- function exec($command, $callback = NULL)
+ function exec($command, $callback = null)
{
$this->curTimeout = $this->timeout;
$this->is_timeout = false;
@@ -2086,7 +2170,7 @@ class Net_SSH2 {
}
// RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
- // be adjusted". 0x7FFFFFFF is, at 2GB, the max size. technically, it should probably be decremented, but,
+ // be adjusted". 0x7FFFFFFF is, at 2GB, the max size. technically, it should probably be decremented, but,
// honestly, if you're transfering more than 2GB, you probably shouldn't be using phpseclib, anyway.
// see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
$this->window_size_server_to_client[NET_SSH2_CHANNEL_EXEC] = 0x7FFFFFFF;
@@ -2143,7 +2227,7 @@ class Net_SSH2 {
// neither will your script.
// although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
- // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the
+ // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the
// "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA. RFC4254#section-5.2 corroborates.
$packet = pack('CNNa*CNa*',
NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_EXEC], strlen('exec'), 'exec', 1, strlen($command), $command);
@@ -2349,7 +2433,6 @@ class Net_SSH2 {
return false;
}
- $channel = $this->in_request_pty_exec ? NET_SSH2_CHANNEL_EXEC : NET_SSH2_CHANNEL_SHELL;
return $this->_send_channel_packet($this->_get_interactive_channel(), $cmd);
}
@@ -2430,8 +2513,7 @@ class Net_SSH2 {
*/
function reset()
{
- $channel = $this->in_request_pty_exec ? NET_SSH2_CHANNEL_EXEC : NET_SSH2_CHANNEL_SHELL;
- $this->_close_channel($channel);
+ $this->_close_channel($this->_get_interactive_channel());
}
/**
@@ -2724,7 +2806,7 @@ class Net_SSH2 {
}
$read = array($this->fsock);
- $write = $except = NULL;
+ $write = $except = null;
$start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
$sec = floor($this->curTimeout);
@@ -2801,7 +2883,7 @@ class Net_SSH2 {
/*
if ($channel == NET_SSH2_CHANNEL_EXEC) {
// SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server
- // this actually seems to make things twice as fast. more to the point, the message right after
+ // this actually seems to make things twice as fast. more to the point, the message right after
// SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.
// in OpenSSH it slows things down but only by a couple thousandths of a second.
$this->_send_channel_packet($channel, chr(0));
@@ -2861,12 +2943,9 @@ class Net_SSH2 {
case 'exit-status':
extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
$this->exit_status = $exit_status;
- // "The channel needs to be closed with SSH_MSG_CHANNEL_CLOSE after this message."
- // -- http://tools.ietf.org/html/rfc4254#section-6.10
- $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
- $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
- $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
+ // "The client MAY ignore these messages."
+ // -- http://tools.ietf.org/html/rfc4254#section-6.10
break;
default:
@@ -2907,7 +2986,7 @@ class Net_SSH2 {
* @return Boolean
* @access private
*/
- function _send_binary_packet($data, $logged = NULL)
+ function _send_binary_packet($data, $logged = null)
{
if (!is_resource($this->fsock) || feof($this->fsock)) {
user_error('Connection closed prematurely');
@@ -2967,70 +3046,70 @@ class Net_SSH2 {
*/
function _append_log($message_number, $message)
{
- // remove the byte identifying the message type from all but the first two messages (ie. the identification strings)
- if (strlen($message_number) > 2) {
- $this->_string_shift($message);
- }
+ // remove the byte identifying the message type from all but the first two messages (ie. the identification strings)
+ if (strlen($message_number) > 2) {
+ $this->_string_shift($message);
+ }
- switch (NET_SSH2_LOGGING) {
- // useful for benchmarks
- case NET_SSH2_LOG_SIMPLE:
- $this->message_number_log[] = $message_number;
- break;
- // the most useful log for SSH2
- case NET_SSH2_LOG_COMPLEX:
- $this->message_number_log[] = $message_number;
- $this->log_size+= strlen($message);
- $this->message_log[] = $message;
- while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
- $this->log_size-= strlen(array_shift($this->message_log));
- array_shift($this->message_number_log);
- }
- break;
- // dump the output out realtime; packets may be interspersed with non packets,
- // passwords won't be filtered out and select other packets may not be correctly
- // identified
- case NET_SSH2_LOG_REALTIME:
- switch (PHP_SAPI) {
- case 'cli':
- $start = $stop = "\r\n";
- break;
- default:
- $start = '
';
- $stop = '
';
- }
- echo $start . $this->_format_log(array($message), array($message_number)) . $stop;
- @flush();
- @ob_flush();
- break;
- // basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE
- // needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE.
- // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
- // at the beginning of the file
- case NET_SSH2_LOG_REALTIME_FILE:
- if (!isset($this->realtime_log_file)) {
- // PHP doesn't seem to like using constants in fopen()
- $filename = NET_SSH2_LOG_REALTIME_FILENAME;
- $fp = fopen($filename, 'w');
- $this->realtime_log_file = $fp;
- }
- if (!is_resource($this->realtime_log_file)) {
+ switch (NET_SSH2_LOGGING) {
+ // useful for benchmarks
+ case NET_SSH2_LOG_SIMPLE:
+ $this->message_number_log[] = $message_number;
+ break;
+ // the most useful log for SSH2
+ case NET_SSH2_LOG_COMPLEX:
+ $this->message_number_log[] = $message_number;
+ $this->log_size+= strlen($message);
+ $this->message_log[] = $message;
+ while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
+ $this->log_size-= strlen(array_shift($this->message_log));
+ array_shift($this->message_number_log);
+ }
+ break;
+ // dump the output out realtime; packets may be interspersed with non packets,
+ // passwords won't be filtered out and select other packets may not be correctly
+ // identified
+ case NET_SSH2_LOG_REALTIME:
+ switch (PHP_SAPI) {
+ case 'cli':
+ $start = $stop = "\r\n";
break;
- }
- $entry = $this->_format_log(array($message), array($message_number));
- if ($this->realtime_log_wrap) {
- $temp = "<<< START >>>\r\n";
- $entry.= $temp;
- fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
- }
- $this->realtime_log_size+= strlen($entry);
- if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) {
- fseek($this->realtime_log_file, 0);
- $this->realtime_log_size = strlen($entry);
- $this->realtime_log_wrap = true;
- }
- fputs($this->realtime_log_file, $entry);
- }
+ default:
+ $start = '
';
+ $stop = '
';
+ }
+ echo $start . $this->_format_log(array($message), array($message_number)) . $stop;
+ @flush();
+ @ob_flush();
+ break;
+ // basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE
+ // needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE.
+ // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+ // at the beginning of the file
+ case NET_SSH2_LOG_REALTIME_FILE:
+ if (!isset($this->realtime_log_file)) {
+ // PHP doesn't seem to like using constants in fopen()
+ $filename = NET_SSH2_LOG_REALTIME_FILENAME;
+ $fp = fopen($filename, 'w');
+ $this->realtime_log_file = $fp;
+ }
+ if (!is_resource($this->realtime_log_file)) {
+ break;
+ }
+ $entry = $this->_format_log(array($message), array($message_number));
+ if ($this->realtime_log_wrap) {
+ $temp = "<<< START >>>\r\n";
+ $entry.= $temp;
+ fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+ }
+ $this->realtime_log_size+= strlen($entry);
+ if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) {
+ fseek($this->realtime_log_file, 0);
+ $this->realtime_log_size = strlen($entry);
+ $this->realtime_log_wrap = true;
+ }
+ fputs($this->realtime_log_file, $entry);
+ }
}
/**
@@ -3103,16 +3182,19 @@ class Net_SSH2 {
* for SCP more than anything.
*
* @param Integer $client_channel
+ * @param Boolean $want_reply
* @return Boolean
* @access private
*/
- function _close_channel($client_channel)
+ function _close_channel($client_channel, $want_reply = false)
{
// see http://tools.ietf.org/html/rfc4254#section-5.3
$this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
- $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+ if (!$want_reply) {
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+ }
$this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
@@ -3120,6 +3202,10 @@ class Net_SSH2 {
while (!is_bool($this->_get_channel_packet($client_channel)));
+ if ($want_reply) {
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+ }
+
if ($this->bitmap & NET_SSH2_MASK_SHELL) {
$this->bitmap&= ~NET_SSH2_MASK_SHELL;
}
@@ -3220,8 +3306,6 @@ class Net_SSH2 {
*/
function _format_log($message_log, $message_number_log)
{
- static $boundary = ':', $long_width = 65, $short_width = 16;
-
$output = '';
for ($i = 0; $i < count($message_log); $i++) {
$output.= $message_number_log[$i] . "\r\n";
@@ -3231,19 +3315,13 @@ class Net_SSH2 {
if (strlen($current_log)) {
$output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 ';
}
- $fragment = $this->_string_shift($current_log, $short_width);
- $hex = substr(
- preg_replace(
- '#(.)#es',
- '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
- $fragment),
- strlen($boundary)
- );
+ $fragment = $this->_string_shift($current_log, $this->log_short_width);
+ $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary));
// replace non ASCII printable characters with dots
// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
// also replace < with a . since < messes up the output on web browsers
$raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
- $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+ $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n";
$j++;
} while (strlen($current_log));
$output.= "\r\n";
@@ -3252,6 +3330,20 @@ class Net_SSH2 {
return $output;
}
+ /**
+ * Helper function for _format_log
+ *
+ * For use with preg_replace_callback()
+ *
+ * @param Array $matches
+ * @access private
+ * @return String
+ */
+ function _format_log_helper($matches)
+ {
+ return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);
+ }
+
/**
* Returns all errors
*
@@ -3505,7 +3597,7 @@ class Net_SSH2 {
$signature = $this->_string_shift($signature, $temp['length']);
if (!class_exists('Crypt_RSA')) {
- require_once('Crypt/RSA.php');
+ include_once 'Crypt/RSA.php';
}
$rsa = new Crypt_RSA();
@@ -3572,7 +3664,15 @@ class Net_SSH2 {
*/
function _is_includable($suffix)
{
- foreach (explode(PATH_SEPARATOR, get_include_path()) as $prefix) {
+ // stream_resolve_include_path was introduced in PHP 5.3.2
+ if (function_exists('stream_resolve_include_path')) {
+ return stream_resolve_include_path($suffix) !== false;
+ }
+
+ $paths = PATH_SEPARATOR == ':' ?
+ preg_split('#(?
+ * login('username', $agent)) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $ssh->exec('pwd');
+ * echo $ssh->exec('ls -la');
+ * ?>
+ *
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category System
+ * @package System_SSH_Agent
+ * @author Jim Wigginton
+ * @copyright MMXIV Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @link http://phpseclib.sourceforge.net
+ * @internal See http://api.libssh.org/rfc/PROTOCOL.agent
+ */
+
+/**#@+
+ * Message numbers
+ *
+ * @access private
+ */
+// to request SSH1 keys you have to use SSH_AGENTC_REQUEST_RSA_IDENTITIES (1)
+define('SYSTEM_SSH_AGENTC_REQUEST_IDENTITIES', 11);
+// this is the SSH2 response; the SSH1 response is SSH_AGENT_RSA_IDENTITIES_ANSWER (2).
+define('SYSTEM_SSH_AGENT_IDENTITIES_ANSWER', 12);
+define('SYSTEM_SSH_AGENT_FAILURE', 5);
+// the SSH1 request is SSH_AGENTC_RSA_CHALLENGE (3)
+define('SYSTEM_SSH_AGENTC_SIGN_REQUEST', 13);
+// the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)
+define('SYSTEM_SSH_AGENT_SIGN_RESPONSE', 14);
+/**#@-*/
+
+/**
+ * Pure-PHP ssh-agent client identity object
+ *
+ * Instantiation should only be performed by System_SSH_Agent class.
+ * This could be thought of as implementing an interface that Crypt_RSA
+ * implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something.
+ * The methods in this interface would be getPublicKey, setSignatureMode
+ * and sign since those are the methods phpseclib looks for to perform
+ * public key authentication.
+ *
+ * @package System_SSH_Agent
+ * @author Jim Wigginton
+ * @version 0.1.0
+ * @access internal
+ */
+class System_SSH_Agent_Identity
+{
+ /**
+ * Key Object
+ *
+ * @var Crypt_RSA
+ * @access private
+ * @see System_SSH_Agent_Identity::getPublicKey()
+ */
+ var $key;
+
+ /**
+ * Key Blob
+ *
+ * @var String
+ * @access private
+ * @see System_SSH_Agent_Identity::sign()
+ */
+ var $key_blob;
+
+ /**
+ * Socket Resource
+ *
+ * @var Resource
+ * @access private
+ * @see System_SSH_Agent_Identity::sign()
+ */
+ var $fsock;
+
+ /**
+ * Default Constructor.
+ *
+ * @param Resource $fsock
+ * @return System_SSH_Agent_Identity
+ * @access private
+ */
+ function System_SSH_Agent_Identity($fsock)
+ {
+ $this->fsock = $fsock;
+ }
+
+ /**
+ * Set Public Key
+ *
+ * Called by System_SSH_Agent::requestIdentities()
+ *
+ * @param Crypt_RSA $key
+ * @access private
+ */
+ function setPublicKey($key)
+ {
+ $this->key = $key;
+ $this->key->setPublicKey();
+ }
+
+ /**
+ * Set Public Key
+ *
+ * Called by System_SSH_Agent::requestIdentities(). The key blob could be extracted from $this->key
+ * but this saves a small amount of computation.
+ *
+ * @param String $key_blob
+ * @access private
+ */
+ function setPublicKeyBlob($key_blob)
+ {
+ $this->key_blob = $key_blob;
+ }
+
+ /**
+ * Get Public Key
+ *
+ * Wrapper for $this->key->getPublicKey()
+ *
+ * @param Integer $format optional
+ * @return Mixed
+ * @access public
+ */
+ function getPublicKey($format = null)
+ {
+ return !isset($format) ? $this->key->getPublicKey() : $this->key->getPublicKey($format);
+ }
+
+ /**
+ * Set Signature Mode
+ *
+ * Doesn't do anything as ssh-agent doesn't let you pick and choose the signature mode. ie.
+ * ssh-agent's only supported mode is CRYPT_RSA_SIGNATURE_PKCS1
+ *
+ * @param Integer $mode
+ * @access public
+ */
+ function setSignatureMode($mode)
+ {
+ }
+
+ /**
+ * Create a signature
+ *
+ * See "2.6.2 Protocol 2 private key signature request"
+ *
+ * @param String $message
+ * @return String
+ * @access public
+ */
+ function sign($message)
+ {
+ // the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
+ $packet = pack('CNa*Na*N', SYSTEM_SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, 0);
+ $packet = pack('Na*', strlen($packet), $packet);
+ if (strlen($packet) != fputs($this->fsock, $packet)) {
+ user_error('Connection closed during signing');
+ }
+
+ $length = current(unpack('N', fread($this->fsock, 4)));
+ $type = ord(fread($this->fsock, 1));
+ if ($type != SYSTEM_SSH_AGENT_SIGN_RESPONSE) {
+ user_error('Unable to retreive signature');
+ }
+
+ $signature_blob = fread($this->fsock, $length - 1);
+ // the only other signature format defined - ssh-dss - is the same length as ssh-rsa
+ // the + 12 is for the other various SSH added length fields
+ return substr($signature_blob, strlen('ssh-rsa') + 12);
+ }
+}
+
+/**
+ * Pure-PHP ssh-agent client identity factory
+ *
+ * requestIdentities() method pumps out System_SSH_Agent_Identity objects
+ *
+ * @package System_SSH_Agent
+ * @author Jim Wigginton
+ * @version 0.1.0
+ * @access internal
+ */
+class System_SSH_Agent
+{
+ /**
+ * Socket Resource
+ *
+ * @var Resource
+ * @access private
+ */
+ var $fsock;
+
+ /**
+ * Default Constructor
+ *
+ * @return System_SSH_Agent
+ * @access public
+ */
+ function System_SSH_Agent()
+ {
+ switch (true) {
+ case isset($_SERVER['SSH_AUTH_SOCK']):
+ $address = $_SERVER['SSH_AUTH_SOCK'];
+ break;
+ case isset($_ENV['SSH_AUTH_SOCK']):
+ $address = $_ENV['SSH_AUTH_SOCK'];
+ break;
+ default:
+ user_error('SSH_AUTH_SOCK not found');
+ return false;
+ }
+
+ $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
+ if (!$this->fsock) {
+ user_error("Unable to connect to ssh-agent (Error $errno: $errstr)");
+ }
+ }
+
+ /**
+ * Request Identities
+ *
+ * See "2.5.2 Requesting a list of protocol 2 keys"
+ * Returns an array containing zero or more System_SSH_Agent_Identity objects
+ *
+ * @return Array
+ * @access public
+ */
+ function requestIdentities()
+ {
+ if (!$this->fsock) {
+ return array();
+ }
+
+ $packet = pack('NC', 1, SYSTEM_SSH_AGENTC_REQUEST_IDENTITIES);
+ if (strlen($packet) != fputs($this->fsock, $packet)) {
+ user_error('Connection closed while requesting identities');
+ }
+
+ $length = current(unpack('N', fread($this->fsock, 4)));
+ $type = ord(fread($this->fsock, 1));
+ if ($type != SYSTEM_SSH_AGENT_IDENTITIES_ANSWER) {
+ user_error('Unable to request identities');
+ }
+
+ $identities = array();
+ $keyCount = current(unpack('N', fread($this->fsock, 4)));
+ for ($i = 0; $i < $keyCount; $i++) {
+ $length = current(unpack('N', fread($this->fsock, 4)));
+ $key_blob = fread($this->fsock, $length);
+ $length = current(unpack('N', fread($this->fsock, 4)));
+ $key_comment = fread($this->fsock, $length);
+ $length = current(unpack('N', substr($key_blob, 0, 4)));
+ $key_type = substr($key_blob, 4, $length);
+ switch ($key_type) {
+ case 'ssh-rsa':
+ if (!class_exists('Crypt_RSA')) {
+ include_once 'Crypt/RSA.php';
+ }
+ $key = new Crypt_RSA();
+ $key->loadKey('ssh-rsa ' . base64_encode($key_blob) . ' ' . $key_comment);
+ break;
+ case 'ssh-dss':
+ // not currently supported
+ break;
+ }
+ // resources are passed by reference by default
+ if (isset($key)) {
+ $identity = new System_SSH_Agent_Identity($this->fsock);
+ $identity->setPublicKey($key);
+ $identity->setPublicKeyBlob($key_blob);
+ $identities[] = $identity;
+ unset($key);
+ }
+ }
+
+ return $identities;
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
index 6baa566102c71629a2cb669f6d96d414e6f0e37d..2b8b52f9f7fc75fa8a7e0f6244712fb523adedc1 100644
--- a/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
@@ -3,4 +3,4 @@
HOME = .
RANDFILE = $ENV::HOME/.rnd
-[ v3_ca ]
\ No newline at end of file
+[ v3_ca ]
diff --git a/apps/files_external/3rdparty/smb4php/smb.php b/apps/files_external/3rdparty/smb4php/smb.php
index 656930514f0d689a16ed3c088afe266fbea114bd..e325506fa147eeac74018de5875346ee1f69a46c 100644
--- a/apps/files_external/3rdparty/smb4php/smb.php
+++ b/apps/files_external/3rdparty/smb4php/smb.php
@@ -8,6 +8,8 @@
# Homepage: http://www.phpclasses.org/smb4php
#
# Copyright (c) 2007 Victor M. Varela
+# Copyright (c) 2012 Frank Karlitschek
+# Copyright (c) 2014 Robin McCorkell
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -19,8 +21,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
-# Addition 17/12/2012 Frank Karlitschek (frank@owncloud.org)
-# Addition 17/03/2014 Robin McCorkell (rmccorkell@karoshi.org.uk)
# On the official website http://www.phpclasses.org/smb4php the
# license is listed as LGPL so we assume that this is
# dual-licensed GPL/LGPL
@@ -44,6 +44,42 @@ $GLOBALS['__smb_cache'] = array ('stat' => array (), 'dir' => array ());
class smb {
+ private static $regexp = array (
+ '^added interface ip=(.*) bcast=(.*) nmask=(.*)$' => 'skip',
+ 'Anonymous login successful' => 'skip',
+ '^Domain=\[(.*)\] OS=\[(.*)\] Server=\[(.*)\]$' => 'skip',
+ '^\tSharename[ ]+Type[ ]+Comment$' => 'shares',
+ '^\t---------[ ]+----[ ]+-------$' => 'skip',
+ '^\tServer [ ]+Comment$' => 'servers',
+ '^\t---------[ ]+-------$' => 'skip',
+ '^\tWorkgroup[ ]+Master$' => 'workg',
+ '^\t(.*)[ ]+(Disk|IPC)[ ]+IPC.*$' => 'skip',
+ '^\tIPC\\\$(.*)[ ]+IPC' => 'skip',
+ '^\t(.*)[ ]+(Disk)[ ]+(.*)$' => 'share',
+ '^\t(.*)[ ]+(Printer)[ ]+(.*)$' => 'skip',
+ '([0-9]+) blocks of size ([0-9]+)\. ([0-9]+) blocks available' => 'skip',
+ 'Got a positive name query response from ' => 'skip',
+ '^(session setup failed): (.*)$' => 'error',
+ '^(.*): ERRSRV - ERRbadpw' => 'error',
+ '^Error returning browse list: (.*)$' => 'error',
+ '^tree connect failed: (.*)$' => 'error',
+ '^(Connection to .* failed)(.*)$' => 'error-connect',
+ '^NT_STATUS_(.*) ' => 'error',
+ '^NT_STATUS_(.*)\$' => 'error',
+ 'ERRDOS - ERRbadpath \((.*).\)' => 'error',
+ 'cd (.*): (.*)$' => 'error',
+ '^cd (.*): NT_STATUS_(.*)' => 'error',
+ '^\t(.*)$' => 'srvorwg',
+ '^([0-9]+)[ ]+([0-9]+)[ ]+(.*)$' => 'skip',
+ '^Job ([0-9]+) cancelled' => 'skip',
+ '^[ ]+(.*)[ ]+([0-9]+)[ ]+(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[ ](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]+([0-9]+)[ ]+([0-9]{2}:[0-9]{2}:[0-9]{2})[ ]([0-9]{4})$' => 'files',
+ '^message start: ERRSRV - (ERRmsgoff)' => 'error'
+ );
+
+ function getRegexp() {
+ return self::$regexp;
+ }
+
function parse_url ($url) {
$pu = parse_url (trim($url));
foreach (array ('domain', 'user', 'pass', 'host', 'port', 'path') as $i) {
@@ -75,46 +111,16 @@ class smb {
}
- function execute ($command, $purl) {
+ function execute ($command, $purl, $regexp = NULL) {
return smb::client ('-d 0 '
. escapeshellarg ('//' . $purl['host'] . '/' . $purl['share'])
- . ' -c ' . escapeshellarg ($command), $purl
+ . ' -c ' . escapeshellarg ($command), $purl, $regexp
);
}
- function client ($params, $purl) {
-
- static $regexp = array (
- '^added interface ip=(.*) bcast=(.*) nmask=(.*)$' => 'skip',
- 'Anonymous login successful' => 'skip',
- '^Domain=\[(.*)\] OS=\[(.*)\] Server=\[(.*)\]$' => 'skip',
- '^\tSharename[ ]+Type[ ]+Comment$' => 'shares',
- '^\t---------[ ]+----[ ]+-------$' => 'skip',
- '^\tServer [ ]+Comment$' => 'servers',
- '^\t---------[ ]+-------$' => 'skip',
- '^\tWorkgroup[ ]+Master$' => 'workg',
- '^\t(.*)[ ]+(Disk|IPC)[ ]+IPC.*$' => 'skip',
- '^\tIPC\\\$(.*)[ ]+IPC' => 'skip',
- '^\t(.*)[ ]+(Disk)[ ]+(.*)$' => 'share',
- '^\t(.*)[ ]+(Printer)[ ]+(.*)$' => 'skip',
- '([0-9]+) blocks of size ([0-9]+)\. ([0-9]+) blocks available' => 'skip',
- 'Got a positive name query response from ' => 'skip',
- '^(session setup failed): (.*)$' => 'error',
- '^(.*): ERRSRV - ERRbadpw' => 'error',
- '^Error returning browse list: (.*)$' => 'error',
- '^tree connect failed: (.*)$' => 'error',
- '^(Connection to .* failed)(.*)$' => 'error-connect',
- '^NT_STATUS_(.*) ' => 'error',
- '^NT_STATUS_(.*)\$' => 'error',
- 'ERRDOS - ERRbadpath \((.*).\)' => 'error',
- 'cd (.*): (.*)$' => 'error',
- '^cd (.*): NT_STATUS_(.*)' => 'error',
- '^\t(.*)$' => 'srvorwg',
- '^([0-9]+)[ ]+([0-9]+)[ ]+(.*)$' => 'skip',
- '^Job ([0-9]+) cancelled' => 'skip',
- '^[ ]+(.*)[ ]+([0-9]+)[ ]+(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[ ](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]+([0-9]+)[ ]+([0-9]{2}:[0-9]{2}:[0-9]{2})[ ]([0-9]{4})$' => 'files',
- '^message start: ERRSRV - (ERRmsgoff)' => 'error'
- );
+ function client ($params, $purl, $regexp = NULL) {
+
+ if ($regexp === NULL) $regexp = smb::$regexp;
if (SMB4PHP_AUTHMODE == 'env') {
putenv("USER={$purl['user']}%{$purl['pass']}");
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index 0e83660f845e6401dd966c60c35d1a88f2f29424..0017b22caaddfe55e4830c2e7d0670f370004d37 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -1,6 +1,7 @@
+ * Copyright (c) 2014 Robin McCorkell
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -13,6 +14,7 @@ OC::$CLASSPATH['OC\Files\Storage\OwnCloud'] = 'files_external/lib/owncloud.php';
OC::$CLASSPATH['OC\Files\Storage\Google'] = 'files_external/lib/google.php';
OC::$CLASSPATH['OC\Files\Storage\Swift'] = 'files_external/lib/swift.php';
OC::$CLASSPATH['OC\Files\Storage\SMB'] = 'files_external/lib/smb.php';
+OC::$CLASSPATH['OC\Files\Storage\SMB_OC'] = 'files_external/lib/smb_oc.php';
OC::$CLASSPATH['OC\Files\Storage\AmazonS3'] = 'files_external/lib/amazons3.php';
OC::$CLASSPATH['OC\Files\Storage\Dropbox'] = 'files_external/lib/dropbox.php';
OC::$CLASSPATH['OC\Files\Storage\SFTP'] = 'files_external/lib/sftp.php';
@@ -27,4 +29,138 @@ if (OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') == '
// connecting hooks
OCP\Util::connectHook('OC_Filesystem', 'post_initMountPoints', '\OC_Mount_Config', 'initMountPointsHook');
OCP\Util::connectHook('OC_User', 'post_login', 'OC\Files\Storage\iRODS', 'login');
+OCP\Util::connectHook('OC_User', 'post_login', 'OC\Files\Storage\SMB_OC', 'login');
+OC_Mount_Config::registerBackend('\OC\Files\Storage\Local', array(
+ 'backend' => 'Local',
+ 'configuration' => array(
+ 'datadir' => 'Location')));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', array(
+ 'backend' => 'Amazon S3',
+ 'configuration' => array(
+ 'key' => 'Key',
+ 'secret' => '*Secret',
+ 'bucket' => 'Bucket'),
+ 'has_dependencies' => true));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', array(
+ 'backend' => 'Amazon S3 and compliant',
+ 'configuration' => array(
+ 'key' => 'Access Key',
+ 'secret' => '*Secret Key',
+ 'bucket' => 'Bucket',
+ 'hostname' => '&Hostname (optional)',
+ 'port' => '&Port (optional)',
+ 'region' => '&Region (optional)',
+ 'use_ssl' => '!Enable SSL',
+ 'use_path_style' => '!Enable Path Style'),
+ 'has_dependencies' => true));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\Dropbox', array(
+ 'backend' => 'Dropbox',
+ 'configuration' => array(
+ 'configured' => '#configured',
+ 'app_key' => 'App key',
+ 'app_secret' => '*App secret',
+ 'token' => '#token',
+ 'token_secret' => '#token_secret'),
+ 'custom' => 'dropbox',
+ 'has_dependencies' => true));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\FTP', array(
+ 'backend' => 'FTP',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root',
+ 'secure' => '!Secure ftps://'),
+ 'has_dependencies' => true));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\Google', array(
+ 'backend' => 'Google Drive',
+ 'configuration' => array(
+ 'configured' => '#configured',
+ 'client_id' => 'Client ID',
+ 'client_secret' => '*Client secret',
+ 'token' => '#token'),
+ 'custom' => 'google',
+ 'has_dependencies' => true));
+
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\Swift', array(
+ 'backend' => 'OpenStack Object Storage',
+ 'configuration' => array(
+ 'user' => 'Username (required)',
+ 'bucket' => 'Bucket (required)',
+ 'region' => '&Region (optional for OpenStack Object Storage)',
+ 'key' => '*API Key (required for Rackspace Cloud Files)',
+ 'tenant' => '&Tenantname (required for OpenStack Object Storage)',
+ 'password' => '*Password (required for OpenStack Object Storage)',
+ 'service_name' => '&Service Name (required for OpenStack Object Storage)',
+ 'url' => '&URL of identity endpoint (required for OpenStack Object Storage)',
+ 'timeout' => '&Timeout of HTTP requests in seconds (optional)',
+ ),
+ 'has_dependencies' => true));
+
+
+if (!OC_Util::runningOnWindows()) {
+ OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB', array(
+ 'backend' => 'SMB / CIFS',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'share' => 'Share',
+ 'root' => '&Root'),
+ 'has_dependencies' => true));
+
+ OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB_OC', array(
+ 'backend' => 'SMB / CIFS using OC login',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'username_as_share' => '!Username as share',
+ 'share' => '&Share',
+ 'root' => '&Root'),
+ 'has_dependencies' => true));
+}
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\DAV', array(
+ 'backend' => 'WebDAV',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root',
+ 'secure' => '!Secure https://'),
+ 'has_dependencies' => true));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\OwnCloud', array(
+ 'backend' => 'ownCloud',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Remote subfolder',
+ 'secure' => '!Secure https://')));
+
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\SFTP', array(
+ 'backend' => 'SFTP',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root')));
+
+OC_Mount_Config::registerBackend('\OC\Files\Storage\iRODS', array(
+ 'backend' => 'iRODS',
+ 'configuration' => array(
+ 'host' => 'Host',
+ 'port' => 'Port',
+ 'use_logon_credentials' => '!Use ownCloud login',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'auth_mode' => 'Authentication Mode',
+ 'zone' => 'Zone')));
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index cd2a3103eb72365656fddc715ecf7edc2883e73f..00793a614c20f5e3be668404cb84b003350e9ebe 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -181,16 +181,21 @@ $(document).ready(function() {
$.each(configurations, function(backend, parameters) {
if (backend == backendClass) {
$.each(parameters['configuration'], function(parameter, placeholder) {
- if (placeholder.indexOf('*') != -1) {
- td.append('');
- } else if (placeholder.indexOf('!') != -1) {
+ var is_optional = false;
+ if (placeholder.indexOf('&') === 0) {
+ is_optional = true;
+ placeholder = placeholder.substring(1);
+ }
+ if (placeholder.indexOf('*') === 0) {
+ var class_string = is_optional ? ' class="optional"' : '';
+ td.append('');
+ } else if (placeholder.indexOf('!') === 0) {
td.append('');
- } else if (placeholder.indexOf('&') != -1) {
- td.append('');
- } else if (placeholder.indexOf('#') != -1) {
+ } else if (placeholder.indexOf('#') === 0) {
td.append('');
} else {
- td.append('');
+ var class_string = is_optional ? ' class="optional"' : '';
+ td.append('');
}
});
if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length == 1) {
diff --git a/apps/files_external/l10n/ast.php b/apps/files_external/l10n/ast.php
new file mode 100644
index 0000000000000000000000000000000000000000..7061cffaa8e78f3e02cfd1e788b41ffc909e4bb2
--- /dev/null
+++ b/apps/files_external/l10n/ast.php
@@ -0,0 +1,9 @@
+ "Nome de la carpeta",
+"Options" => "Opciones",
+"Groups" => "Grupos",
+"Users" => "Usuarios",
+"Delete" => "Desaniciar"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_external/l10n/bg_BG.php b/apps/files_external/l10n/bg_BG.php
index d59a4b8c80bc64184dafd189a8839f5a6165ff48..118da27f74a4cf4772cc86d45a71e56fdce178cd 100644
--- a/apps/files_external/l10n/bg_BG.php
+++ b/apps/files_external/l10n/bg_BG.php
@@ -6,8 +6,6 @@ $TRANSLATIONS = array(
"Folder name" => "Име на папката",
"Configuration" => "Конфигурация",
"Options" => "Опции",
-"Applicable" => "Приложимо",
-"None set" => "Няма избрано",
"All Users" => "Всички потребители",
"Groups" => "Групи",
"Users" => "Потребители",
diff --git a/apps/files_external/l10n/bn_BD.php b/apps/files_external/l10n/bn_BD.php
index 065d61acfca5633fdb08650cc3a0b69ec3d29f1d..6c8f57779583d2898305f95cdf2ed45452ae34ea 100644
--- a/apps/files_external/l10n/bn_BD.php
+++ b/apps/files_external/l10n/bn_BD.php
@@ -8,8 +8,6 @@ $TRANSLATIONS = array(
"External Storage" => "বাহ্যিক সংরক্ষণাগার",
"Configuration" => "কনফিগারেসন",
"Options" => "বিকল্পসমূহ",
-"Applicable" => "প্রযোজ্য",
-"None set" => "কোনটিই নির্ধারণ করা হয় নি",
"All Users" => "সমস্ত ব্যবহারকারী",
"Groups" => "গোষ্ঠীসমূহ",
"Users" => "ব্যবহারকারী",
diff --git a/apps/files_external/l10n/ca.php b/apps/files_external/l10n/ca.php
index 3e72204629685bcdf8aebff503abbafc398a018f..50b6f55231bd6db97e51ee54fe047e4ceb3550c6 100644
--- a/apps/files_external/l10n/ca.php
+++ b/apps/files_external/l10n/ca.php
@@ -6,17 +6,12 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Proporcioneu una clau d'aplicació i secret vàlids per a Dropbox",
"Error configuring Google Drive storage" => "Error en configurar l'emmagatzemament Google Drive",
"Saved" => "Desat",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Avís: \"smbclient\" no està instal·lat. No es pot muntar la compartició CIFS/SMB. Demaneu a l'administrador del sistema que l'instal·li.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Avís: El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar la compartició FTP. Demaneu a l'administrador del sistema que l'instal·li.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Avís:El suport Curl de PHP no està activat o instal·lat. No es pot muntar ownCloud / WebDAV o GoogleDrive. Demaneu a l'administrador que l'instal·li.",
"External Storage" => "Emmagatzemament extern",
"Folder name" => "Nom de la carpeta",
"External storage" => "Emmagatzemament extern",
"Configuration" => "Configuració",
"Options" => "Options",
-"Applicable" => "Aplicable",
"Add storage" => "Afegeix emmagatzemament",
-"None set" => "Cap d'establert",
"All Users" => "Tots els usuaris",
"Groups" => "Grups",
"Users" => "Usuaris",
diff --git a/apps/files_external/l10n/cs_CZ.php b/apps/files_external/l10n/cs_CZ.php
index 1b92e35c45607551a86df634666b773aaba0f027..6a4e09aa3ab4bf668cd997a4840966e5b607cd41 100644
--- a/apps/files_external/l10n/cs_CZ.php
+++ b/apps/files_external/l10n/cs_CZ.php
@@ -6,17 +6,12 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Zadejte, prosím, platný klíč a bezpečnostní frázi aplikace Dropbox.",
"Error configuring Google Drive storage" => "Chyba při nastavení úložiště Google Drive",
"Saved" => "Uloženo",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Varování: není nainstalován program \"smbclient\". Není možné připojení oddílů CIFS/SMB. Prosím požádejte svého správce systému ať jej nainstaluje.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Varování: podpora FTP v PHP není povolena nebo není nainstalována. Není možné připojení oddílů FTP. Prosím požádejte svého správce systému ať ji nainstaluje.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varování: podpora CURL v PHP není povolena nebo není nainstalována. Není možné připojení oddílů ownCloud, WebDAV, či GoogleDrive. Prosím požádejte svého správce systému ať ji nainstaluje.",
"External Storage" => "Externí úložiště",
"Folder name" => "Název složky",
"External storage" => "Externí úložiště",
"Configuration" => "Nastavení",
"Options" => "Možnosti",
-"Applicable" => "Přístupný pro",
"Add storage" => "Přidat úložiště",
-"None set" => "Nenastaveno",
"All Users" => "Všichni uživatelé",
"Groups" => "Skupiny",
"Users" => "Uživatelé",
diff --git a/apps/files_external/l10n/da.php b/apps/files_external/l10n/da.php
index f3ac35e42e03ca4a5481c005ae9b7abfda5f282a..e0dea75303e0780a771e9fb812de7a647f3ca8b1 100644
--- a/apps/files_external/l10n/da.php
+++ b/apps/files_external/l10n/da.php
@@ -6,17 +6,12 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Angiv venligst en valid Dropbox app nøgle og hemmelighed",
"Error configuring Google Drive storage" => "Fejl ved konfiguration af Google Drive plads",
"Saved" => "Gemt",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => " Advarsel: b> \"smbclient\" ikke er installeret. Montering af CIFS / SMB delinger er ikke muligt. Spørg din systemadministrator om at installere det.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => " Advarsel: b> FTP-understøttelse i PHP ikke er aktiveret eller installeret. Montering af FTP delinger er ikke muligt. Spørg din systemadministrator om at installere det.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advarsel: Understøttelsen for Curl i PHP er enten ikke aktiveret eller ikke installeret. Det er ikke muligt, at montere ownCloud / WebDAV eller GoogleDrive. Spørg din system administrator om at installere det. ",
"External Storage" => "Ekstern opbevaring",
"Folder name" => "Mappenavn",
"External storage" => "Eksternt lager",
"Configuration" => "Opsætning",
"Options" => "Valgmuligheder",
-"Applicable" => "Kan anvendes",
"Add storage" => "Tilføj lager",
-"None set" => "Ingen sat",
"All Users" => "Alle brugere",
"Groups" => "Grupper",
"Users" => "Brugere",
diff --git a/apps/files_external/l10n/de.php b/apps/files_external/l10n/de.php
index a78728b4c20173745c2d25ba693716edff9df60a..25c7ffb3af185b5b2529ddf4c94837248b6c7bac 100644
--- a/apps/files_external/l10n/de.php
+++ b/apps/files_external/l10n/de.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Bitte trage einen gültigen Dropbox-App-Key mit Secret ein.",
"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
"Saved" => "Gespeichert",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Warnung: \"smbclient\" ist nicht installiert. Das Einhängen von CIFS/SMB-Freigaben ist nicht möglich. Bitte Deinen System-Administrator, dies zu installieren.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Warnung:: Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Bitte wende Dich an Deinen Systemadministrator.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Warnung: Die Curl-Unterstützung in PHP ist nicht aktiviert oder installiert. Das Einbinden von ownCloud / WebDav der GoogleDrive-Freigaben ist nicht möglich. Bitte Deinen Systemadminstrator um die Installation. ",
+"Note: " => "Hinweis: ",
+" and " => "und",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
"External Storage" => "Externer Speicher",
"Folder name" => "Ordnername",
"External storage" => "Externer Speicher",
"Configuration" => "Konfiguration",
"Options" => "Optionen",
-"Applicable" => "Zutreffend",
+"Available for" => "Verfügbar für",
"Add storage" => "Speicher hinzufügen",
-"None set" => "Nicht definiert",
+"No user or group" => "Kein Nutzer oder Gruppe",
"All Users" => "Alle Benutzer",
"Groups" => "Gruppen",
"Users" => "Benutzer",
diff --git a/apps/files_external/l10n/de_CH.php b/apps/files_external/l10n/de_CH.php
index 8a13c7cdd576320f4369803f89b5eeb56a2201e2..554fca8de545287af4c6128931508a4e32fde8b3 100644
--- a/apps/files_external/l10n/de_CH.php
+++ b/apps/files_external/l10n/de_CH.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Zugriff gestatten",
"Please provide a valid Dropbox app key and secret." => "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Warnung: «smbclient» ist nicht installiert. Das Einhängen von CIFS/SMB-Freigaben ist nicht möglich. Bitten Sie Ihren Systemadministrator, dies zu installieren.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Warnung:: Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Bitte wenden Sie sich an Ihren Systemadministrator.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Achtung: Die Curl-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Laden von ownCloud / WebDAV oder GoogleDrive Freigaben ist nicht möglich. Bitte Sie Ihren Systemadministrator, das Modul zu installieren.",
"External Storage" => "Externer Speicher",
"Folder name" => "Ordnername",
"External storage" => "Externer Speicher",
"Configuration" => "Konfiguration",
"Options" => "Optionen",
-"Applicable" => "Zutreffend",
"Add storage" => "Speicher hinzufügen",
-"None set" => "Nicht definiert",
"All Users" => "Alle Benutzer",
"Groups" => "Gruppen",
"Users" => "Benutzer",
diff --git a/apps/files_external/l10n/de_DE.php b/apps/files_external/l10n/de_DE.php
index 5ffe946c699fbf252204e441ec74dbbafe9a246b..186aa5a299a568397542140d462aeadcb073cf50 100644
--- a/apps/files_external/l10n/de_DE.php
+++ b/apps/files_external/l10n/de_DE.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
"Saved" => "Gespeichert",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Warnung: \"smbclient\" ist nicht installiert. Das Einhängen von CIFS/SMB-Freigaben ist nicht möglich. Bitten Sie Ihren Systemadministrator, dies zu installieren.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Warnung:: Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Bitte wenden Sie sich an Ihren Systemadministrator.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Achtung: Die Curl-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Laden von ownCloud / WebDAV oder GoogleDrive Freigaben ist nicht möglich. Bitte Sie Ihren Systemadministrator, das Modul zu installieren.",
+"Note: " => "Hinweis: ",
+" and " => "und",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Hinweis: \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
"External Storage" => "Externer Speicher",
"Folder name" => "Ordnername",
"External storage" => "Externer Speicher",
"Configuration" => "Konfiguration",
"Options" => "Optionen",
-"Applicable" => "Zutreffend",
+"Available for" => "Verfügbar für",
"Add storage" => "Speicher hinzufügen",
-"None set" => "Nicht definiert",
+"No user or group" => "Kein Nutzer oder Gruppe",
"All Users" => "Alle Benutzer",
"Groups" => "Gruppen",
"Users" => "Benutzer",
diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php
index 4dcd93d7ac8523dbb2ec0f8a6e3971b86b321ab4..16b837e24c5bd8f8373ca7974a9508aab9546c44 100644
--- a/apps/files_external/l10n/el.php
+++ b/apps/files_external/l10n/el.php
@@ -6,22 +6,18 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Παρακαλούμε δώστε έγκυρο κλειδί Dropbox και μυστικό.",
"Error configuring Google Drive storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive ",
"Saved" => "Αποθηκεύτηκαν",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Προσοχή: Ο \"smbclient\" δεν εγκαταστάθηκε. Δεν είναι δυνατή η προσάρτηση CIFS/SMB. Παρακαλώ ενημερώστε τον διαχειριστή συστήματος να το εγκαταστήσει.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Προσοχή: Η υποστήριξη FTP στην PHP δεν ενεργοποιήθηκε ή εγκαταστάθηκε. Δεν είναι δυνατή η προσάρτηση FTP. Παρακαλώ ενημερώστε τον διαχειριστή συστήματος να το εγκαταστήσει.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<Προειδοποίηση Η υποστήριξη του συστήματος Curl στο PHP δεν είναι ενεργοποιημένη ή εγκαταστημένη. Η αναπαραγωγή του ownCloud/WebDAV ή GoogleDrive δεν είναι δυνατή. Παρακαλώ ρωτήστε τον διαχειριστλη του συστήματος για την εγκατάσταση. ",
"External Storage" => "Εξωτερικό Αποθηκευτικό Μέσο",
"Folder name" => "Όνομα φακέλου",
"External storage" => "Εξωτερική αποθήκευση",
"Configuration" => "Ρυθμίσεις",
"Options" => "Επιλογές",
-"Applicable" => "Εφαρμόσιμο",
"Add storage" => "Προσθηκη αποθηκευσης",
-"None set" => "Κανένα επιλεγμένο",
"All Users" => "Όλοι οι Χρήστες",
"Groups" => "Ομάδες",
"Users" => "Χρήστες",
"Delete" => "Διαγραφή",
"Enable User External Storage" => "Ενεργοποίηση Εξωτερικού Αποθηκευτικού Χώρου Χρήστη",
+"Allow users to mount the following external storage" => "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης",
"SSL root certificates" => "Πιστοποιητικά SSL root",
"Import Root Certificate" => "Εισαγωγή Πιστοποιητικού Root"
);
diff --git a/apps/files_external/l10n/en_GB.php b/apps/files_external/l10n/en_GB.php
index f7fdbf2f0d16cd7275b8cee7c99ce283e1a5c08d..4bd3f9daf2a8fc4fbdc8f53d17c51be60a9ddf90 100644
--- a/apps/files_external/l10n/en_GB.php
+++ b/apps/files_external/l10n/en_GB.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Please provide a valid Dropbox app key and secret.",
"Error configuring Google Drive storage" => "Error configuring Google Drive storage",
"Saved" => "Saved",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it.",
+"Note: " => "Note: ",
+" and " => " and ",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
"External Storage" => "External Storage",
"Folder name" => "Folder name",
"External storage" => "External storage",
"Configuration" => "Configuration",
"Options" => "Options",
-"Applicable" => "Applicable",
+"Available for" => "Available for",
"Add storage" => "Add storage",
-"None set" => "None set",
+"No user or group" => "No user or group",
"All Users" => "All Users",
"Groups" => "Groups",
"Users" => "Users",
diff --git a/apps/files_external/l10n/eo.php b/apps/files_external/l10n/eo.php
index aba16e2efa8699bf1189218a19f7ac0184f6a07d..5312872c07a544c56aa2612d8642821e5b292d51 100644
--- a/apps/files_external/l10n/eo.php
+++ b/apps/files_external/l10n/eo.php
@@ -9,8 +9,6 @@ $TRANSLATIONS = array(
"Folder name" => "Dosierujnomo",
"Configuration" => "Agordo",
"Options" => "Malneproj",
-"Applicable" => "Aplikebla",
-"None set" => "Nenio agordita",
"All Users" => "Ĉiuj uzantoj",
"Groups" => "Grupoj",
"Users" => "Uzantoj",
diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php
index ea831c947f44f0cdf6e33e6b41b69e5b80a8f4ed..bfe542c6e7123fc4519cc1e15ae297abad07e067 100644
--- a/apps/files_external/l10n/es.php
+++ b/apps/files_external/l10n/es.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.",
"Error configuring Google Drive storage" => "Error configurando el almacenamiento de Google Drive",
"Saved" => "Guardado",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Advertencia: El cliente smb (smbclient) no se encuentra instalado. El montado de archivos o ficheros CIFS/SMB no es posible. Por favor pida al administrador de su sistema que lo instale.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de FTP en PHP no se encuentra instalado. El montado de archivos o ficheros FTP no es posible. Por favor pida al administrador de su sistema que lo instale.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de Curl en PHP no está activado ni instalado. El montado de ownCloud, WebDAV o GoogleDrive no es posible. Pida al administrador de su sistema que lo instale.",
+"Note: " => "Nota: ",
+" and " => "y",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: \"%s\" no está instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
"External Storage" => "Almacenamiento externo",
"Folder name" => "Nombre de la carpeta",
"External storage" => "Almacenamiento externo",
"Configuration" => "Configuración",
"Options" => "Opciones",
-"Applicable" => "Aplicable",
+"Available for" => "Disponible para",
"Add storage" => "Añadir almacenamiento",
-"None set" => "No se ha configurado",
+"No user or group" => "Ningún usuario o grupo",
"All Users" => "Todos los usuarios",
"Groups" => "Grupos",
"Users" => "Usuarios",
diff --git a/apps/files_external/l10n/es_AR.php b/apps/files_external/l10n/es_AR.php
index 05204b748c4d584ee4f409da9624e94e525ec900..f184dbdb7d8aac91df20ff83fdcf0688d198a688 100644
--- a/apps/files_external/l10n/es_AR.php
+++ b/apps/files_external/l10n/es_AR.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Permitir acceso",
"Please provide a valid Dropbox app key and secret." => "Por favor, proporcioná un secreto y una contraseña válida para la aplicación Dropbox.",
"Error configuring Google Drive storage" => "Error al configurar el almacenamiento de Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Advertencia: El cliente smb \"smbclient\" no está instalado. Montar archivos CIFS/SMB no es posible. Por favor, pedile al administrador de tu sistema que lo instale.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de FTP en PHP no está instalado. Montar archivos FTP no es posible. Por favor, pedile al administrador de tu sistema que lo instale.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de Curl de PHP no está activo ni instalado. Montar servicios ownCloud, WebDAV y/o GoogleDrive no será posible. Pedile al administrador del sistema que lo instale.",
"External Storage" => "Almacenamiento externo",
"Folder name" => "Nombre de la carpeta",
"External storage" => "Almacenamiento externo",
"Configuration" => "Configuración",
"Options" => "Opciones",
-"Applicable" => "Aplicable",
"Add storage" => "Añadir almacenamiento",
-"None set" => "No fue configurado",
"All Users" => "Todos los usuarios",
"Groups" => "Grupos",
"Users" => "Usuarios",
diff --git a/apps/files_external/l10n/es_MX.php b/apps/files_external/l10n/es_MX.php
index 5d3fd44bec6947a2bf239dd049ce982f960e378f..dc0aef45c4f83ef7bda072aad6fb17203d9c950f 100644
--- a/apps/files_external/l10n/es_MX.php
+++ b/apps/files_external/l10n/es_MX.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Conceder acceso",
"Please provide a valid Dropbox app key and secret." => "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.",
"Error configuring Google Drive storage" => "Error configurando el almacenamiento de Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Advertencia: El cliente \"smbclient\" no se encuentra instalado. El montado de carpetas CIFS/SMB no es posible. Por favor pida al administrador de su sistema que lo instale.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de FTP en PHP no se encuentra instalado. El montado de carpetas FTP no es posible. Por favor pida al administrador de su sistema que lo instale.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advertencia: El soporte de Curl en PHP no está activado ni instalado. El montado de ownCloud, WebDAV o GoogleDrive no es posible. Pida al administrador de su sistema que lo instale.",
"External Storage" => "Almacenamiento externo",
"Folder name" => "Nombre de la carpeta",
"External storage" => "Almacenamiento externo",
"Configuration" => "Configuración",
"Options" => "Opciones",
-"Applicable" => "Aplicable",
"Add storage" => "Añadir almacenamiento",
-"None set" => "No se ha configurado",
"All Users" => "Todos los usuarios",
"Groups" => "Grupos",
"Users" => "Usuarios",
diff --git a/apps/files_external/l10n/et_EE.php b/apps/files_external/l10n/et_EE.php
index c6450f95e183caed166c85e1c47901742d3492ab..0589d9fd518c2bbbea6b0db79b97b48671e48bee 100644
--- a/apps/files_external/l10n/et_EE.php
+++ b/apps/files_external/l10n/et_EE.php
@@ -5,22 +5,21 @@ $TRANSLATIONS = array(
"Grant access" => "Anna ligipääs",
"Please provide a valid Dropbox app key and secret." => "Palun sisesta korrektne Dropboxi rakenduse võti ja salasõna.",
"Error configuring Google Drive storage" => "Viga Google Drive'i salvestusruumi seadistamisel",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Hoiatus: \"smbclient\" pole paigaldatud. Jagatud CIFS/SMB hoidlate ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata SAMBA tugi.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Hoiatus: PHP-s puudub FTP tugi. Jagatud FTP hoidlate ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata FTP tugi.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Hoiatus: PHP-s puudub Curl tugi. Jagatud ownCloud / WebDAV või GoogleDrive ühendamine pole võimalik. Palu oma süsteemihalduril see paigaldada.",
+"Saved" => "Salvestatud",
"External Storage" => "Väline salvestuskoht",
"Folder name" => "Kausta nimi",
"External storage" => "Väline andmehoidla",
"Configuration" => "Seadistamine",
"Options" => "Valikud",
-"Applicable" => "Rakendatav",
+"Available for" => "Saadaval",
"Add storage" => "Lisa andmehoidla",
-"None set" => "Pole määratud",
+"No user or group" => "Ühtki kasutajat või gruppi",
"All Users" => "Kõik kasutajad",
"Groups" => "Grupid",
"Users" => "Kasutajad",
"Delete" => "Kustuta",
"Enable User External Storage" => "Luba kasutajatele väline salvestamine",
+"Allow users to mount the following external storage" => "Võimalda kasutajatel ühendada järgmist välist andmehoidlat",
"SSL root certificates" => "SSL root sertifikaadid",
"Import Root Certificate" => "Impordi root sertifikaadid"
);
diff --git a/apps/files_external/l10n/eu.php b/apps/files_external/l10n/eu.php
index bdc5cf56760139330fdab4d71fdd1babac2361ce..c2111a1f73630f03b69965a0d4de1d4a3f5e4032 100644
--- a/apps/files_external/l10n/eu.php
+++ b/apps/files_external/l10n/eu.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Baimendu sarrera",
"Please provide a valid Dropbox app key and secret." => "Mesedez eman baliozkoa den Dropbox app giltza eta sekretua",
"Error configuring Google Drive storage" => "Errore bat egon da Google Drive biltegiratzea konfiguratzean",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Abisua: \"smbclient\" ez dago instalatuta. CIFS/SMB partekatutako karpetak montatzea ez da posible. Mesedez eskatu zure sistema kudeatzaileari instalatzea.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Abisua: PHPren FTP modulua ez dago instalatuta edo gaitua. FTP partekatutako karpetak montatzea ez da posible. Mesedez eskatu zure sistema kudeatzaileari instalatzea.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Abisua: Curl euskarri PHP modulua ez dago instalatuta edo gaitua. Ezinezko da ownCloud /WebDAV GoogleDrive-n muntatzea. Mesedez eskatu sistema kudeatzaileari instala dezan. ",
"External Storage" => "Kanpoko Biltegiratzea",
"Folder name" => "Karpetaren izena",
"External storage" => "Kanpoko biltegiratzea",
"Configuration" => "Konfigurazioa",
"Options" => "Aukerak",
-"Applicable" => "Aplikagarria",
"Add storage" => "Gehitu biltegiratzea",
-"None set" => "Ezarri gabe",
"All Users" => "Erabiltzaile guztiak",
"Groups" => "Taldeak",
"Users" => "Erabiltzaileak",
diff --git a/apps/files_external/l10n/fa.php b/apps/files_external/l10n/fa.php
index 544b8a14d5cdc6a7ab623ecb9b0489370855d4fe..74472c54bf53d3ebda236bb5ae53e7896817eac0 100644
--- a/apps/files_external/l10n/fa.php
+++ b/apps/files_external/l10n/fa.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => " مجوز اعطا دسترسی",
"Please provide a valid Dropbox app key and secret." => "لطفا یک کلید و کد امنیتی صحیح دراپ باکس وارد کنید.",
"Error configuring Google Drive storage" => "خطا به هنگام تنظیم فضای Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "خطا: \"smbclient\" نصب نشده است. نصب و راه اندازی سهام CIFS/SMB امکان پذیر نمیباشد. لطفا از مدیریت سازمان خود برای راه اندازی آن درخواست نمایید.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "خطا: پشتیبانی FTP در PHP فعال نمی باشد یا نصب نشده است. نصب و راه اندازی از سهم های FTP امکان پذیر نمی باشد. لطفا از مدیر سیستم خود برای راه اندازی آن درخواست\nکنید.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "خطا: پشتیبانی Curl فعال نمی باشد یا نصب نشده است. نصب و راه اندازی ownCloud / WebDAV یا GoogleDrive امکان پذیر نیست. لطفا از مدیر سیستم خود برای نصب آن درخواست کنید.",
"External Storage" => "حافظه خارجی",
"Folder name" => "نام پوشه",
"External storage" => "حافظه خارجی",
"Configuration" => "پیکربندی",
"Options" => "تنظیمات",
-"Applicable" => "قابل اجرا",
"Add storage" => "اضافه کردن حافظه",
-"None set" => "تنظیم نشده",
"All Users" => "تمام کاربران",
"Groups" => "گروه ها",
"Users" => "کاربران",
diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php
index d2f9d1a73a5ad0f3501029ef99356e2c16dfa4b5..677425d8a6a945cc5a29972718fe4c454ed7ee69 100644
--- a/apps/files_external/l10n/fi_FI.php
+++ b/apps/files_external/l10n/fi_FI.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Anna kelvollinen Dropbox-sovellusavain ja salainen vastaus.",
"Error configuring Google Drive storage" => "Virhe Google Drive levyn asetuksia tehtäessä",
"Saved" => "Tallennettu",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Varoitus: \"smbclient\" ei ole asennettuna. CIFS-/SMB-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan smbclient.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Varoitus: PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. FTP-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varoitus: PHP:n Curl-tuki ei ole käytössä tai sitä ei ole lainkaan asennettu. ownCloudin, WebDAV:in tai Google Driven liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan Curl-tuki käyttöön.",
+"Note: " => "Huomio: ",
+" and " => "ja",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Huomio: PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Huomio: PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Huomio: \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
"External Storage" => "Erillinen tallennusväline",
"Folder name" => "Kansion nimi",
"External storage" => "Ulkoinen tallennustila",
"Configuration" => "Asetukset",
"Options" => "Valinnat",
-"Applicable" => "Sovellettavissa",
+"Available for" => "Saatavuus",
"Add storage" => "Lisää tallennustila",
-"None set" => "Ei asetettu",
+"No user or group" => "Ei käyttäjää tai ryhmää",
"All Users" => "Kaikki käyttäjät",
"Groups" => "Ryhmät",
"Users" => "Käyttäjät",
diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php
index 4b8e2b905b6ffe0cff2942559edb8f7f06926cd0..8ff1969718217b2a403d718e88fabe2e4a4b1fdd 100644
--- a/apps/files_external/l10n/fr.php
+++ b/apps/files_external/l10n/fr.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Veuillez fournir une clé d'application (app key) ainsi qu'un mot de passe valides.",
"Error configuring Google Drive storage" => "Erreur lors de la configuration du support de stockage Google Drive",
"Saved" => "Sauvegarder",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Attention : \"smbclient\" n'est pas installé. Le montage des partages CIFS/SMB n'est pas disponible. Contactez votre administrateur système pour l'installer.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Attention : Le support FTP de PHP n'est pas activé ou installé. Le montage des partages FTP n'est pas disponible. Contactez votre administrateur système pour l'installer.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Attention : Le support de Curl n'est pas activé ou installé dans PHP. Le montage de ownCloud / WebDAV ou GoogleDrive n'est pas possible. Contactez votre administrateur système pour l'installer.",
+"Note: " => "Attention :",
+" and " => "et",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Attention : Le support de cURL de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Attention : Le support FTP de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Attention : \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
"External Storage" => "Stockage externe",
"Folder name" => "Nom du dossier",
"External storage" => "Stockage externe",
"Configuration" => "Configuration",
"Options" => "Options",
-"Applicable" => "Disponible",
+"Available for" => "Disponible pour",
"Add storage" => "Ajouter un support de stockage",
-"None set" => "Aucun spécifié",
+"No user or group" => "Aucun utilisateur ou groupe",
"All Users" => "Tous les utilisateurs",
"Groups" => "Groupes",
"Users" => "Utilisateurs",
diff --git a/apps/files_external/l10n/gl.php b/apps/files_external/l10n/gl.php
index ec13fe241f603db561638ee74db8fe194bfa0a31..5efa6ce6028b77766231917e4c4a8d4dd355bae9 100644
--- a/apps/files_external/l10n/gl.php
+++ b/apps/files_external/l10n/gl.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Forneza unha chave correcta e segreda do Dropbox.",
"Error configuring Google Drive storage" => "Produciuse un erro ao configurar o almacenamento en Google Drive",
"Saved" => "Gardado",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Aviso: «smbclient» non está instalado. Non é posibel a montaxe de comparticións CIFS/SMB. Consulte co administrador do sistema para instalalo.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Aviso: A compatibilidade de FTP en PHP non está activada ou instalada. Non é posibel a montaxe de comparticións FTP. Consulte co administrador do sistema para instalalo.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Aviso: b> A compatibilidade de Curl en PHP non está activada ou instalada. Non é posíbel a montaxe de ownCloud / WebDAV ou GoogleDrive. Consulte co administrador do sistema para instalala.",
+"Note: " => "Nota: ",
+" and " => "e",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: A compatibilidade de cURL en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: A compatibilidade de FTP en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: «%s» non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
"External Storage" => "Almacenamento externo",
"Folder name" => "Nome do cartafol",
"External storage" => "Almacenamento externo",
"Configuration" => "Configuración",
"Options" => "Opcións",
-"Applicable" => "Aplicábel",
+"Available for" => "Dispoñíbel para",
"Add storage" => "Engadir almacenamento",
-"None set" => "Ningún definido",
+"No user or group" => "Non hai usuario ou grupo",
"All Users" => "Todos os usuarios",
"Groups" => "Grupos",
"Users" => "Usuarios",
diff --git a/apps/files_external/l10n/he.php b/apps/files_external/l10n/he.php
index 6aec07e78cf9725d0e0198c763368697630a82d1..e433f4fc3068ced6f106380697fcc68f23333ab5 100644
--- a/apps/files_external/l10n/he.php
+++ b/apps/files_external/l10n/he.php
@@ -9,8 +9,6 @@ $TRANSLATIONS = array(
"Folder name" => "שם התיקייה",
"Configuration" => "הגדרות",
"Options" => "אפשרויות",
-"Applicable" => "ניתן ליישום",
-"None set" => "לא הוגדרה",
"All Users" => "כל המשתמשים",
"Groups" => "קבוצות",
"Users" => "משתמשים",
diff --git a/apps/files_external/l10n/hu_HU.php b/apps/files_external/l10n/hu_HU.php
index 6066138043386c714e7a3111ffc9f554138d82af..39d185d5f0b53fdbc5f2941cc457aad1099461f8 100644
--- a/apps/files_external/l10n/hu_HU.php
+++ b/apps/files_external/l10n/hu_HU.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Megadom a hozzáférést",
"Please provide a valid Dropbox app key and secret." => "Adjon meg egy érvényes Dropbox app key-t és secretet!",
"Error configuring Google Drive storage" => "A Google Drive tárolót nem sikerült beállítani",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Figyelem: az \"smbclient\" nincs telepítve a kiszolgálón. Emiatt nem lehet CIFS/SMB megosztásokat fölcsatolni. Kérje meg a rendszergazdát, hogy telepítse a szükséges programot.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Figyelem: a PHP FTP támogatása vagy nincs telepítve, vagy nincs engedélyezve a kiszolgálón. Emiatt nem lehetséges FTP-tárolókat fölcsatolni. Kérje meg a rendszergazdát, hogy telepítse a szükséges programot.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Figyelmeztetés: A PHP-ben nincs telepítve vagy engedélyezve a Curl támogatás. Nem lehetséges ownCloud / WebDAV ill. GoogleDrive tárolók becsatolása. Kérje meg a rendszergazdát, hogy telepítse a szükséges programot!",
"External Storage" => "Külső tárolási szolgáltatások becsatolása",
"Folder name" => "Mappanév",
"External storage" => "Külső tárolók",
"Configuration" => "Beállítások",
"Options" => "Opciók",
-"Applicable" => "Érvényességi kör",
"Add storage" => "Tároló becsatolása",
-"None set" => "Nincs beállítva",
"All Users" => "Az összes felhasználó",
"Groups" => "Csoportok",
"Users" => "Felhasználók",
diff --git a/apps/files_external/l10n/id.php b/apps/files_external/l10n/id.php
index 9f91fdf992f48e05d74ae55f507477f4c2b596b4..8ab5069539fcd809a282bd204549f24b83d0a69f 100644
--- a/apps/files_external/l10n/id.php
+++ b/apps/files_external/l10n/id.php
@@ -5,16 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Berikan hak akses",
"Please provide a valid Dropbox app key and secret." => "Masukkan kunci dan sandi aplikasi Dropbox yang benar.",
"Error configuring Google Drive storage" => "Kesalahan dalam mengkonfigurasi penyimpanan Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Peringatan: \"smbclient\" tidak terpasang. Mount direktori CIFS/SMB tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Peringatan: Dukungan FTP di PHP tidak aktif atau tidak terpasang. Mount direktori FTP tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya.",
"External Storage" => "Penyimpanan Eksternal",
"Folder name" => "Nama folder",
"External storage" => "Penyimpanan eksternal",
"Configuration" => "Konfigurasi",
"Options" => "Opsi",
-"Applicable" => "Berlaku",
"Add storage" => "Tambahkan penyimpanan",
-"None set" => "Tidak satupun di set",
"All Users" => "Semua Pengguna",
"Groups" => "Grup",
"Users" => "Pengguna",
diff --git a/apps/files_external/l10n/is.php b/apps/files_external/l10n/is.php
index e86cfa108a63bfc85df62b8c809f68622456a25e..21a215807abcbb68e2b7d1a3bd6de6cab1834838 100644
--- a/apps/files_external/l10n/is.php
+++ b/apps/files_external/l10n/is.php
@@ -5,14 +5,10 @@ $TRANSLATIONS = array(
"Grant access" => "Veita aðgengi",
"Please provide a valid Dropbox app key and secret." => "Gefðu upp virkan Dropbox lykil og leynikóða",
"Error configuring Google Drive storage" => "Villa kom upp við að setja upp Google Drive gagnasvæði",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Aðvörun: \"smbclient\" er ekki uppsettur. Uppsetning á CIFS/SMB gagnasvæðum er ekki möguleg. Hafðu samband við kerfisstjóra til að fá hann uppsettan.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Aðvörun: FTP stuðningur í PHP er ekki virkur. Uppsetning á FTP gagnasvæðum er ekki möguleg. Hafðu samband við kerfisstjóra til að fá hann uppsettan.",
"External Storage" => "Ytri gagnageymsla",
"Folder name" => "Nafn möppu",
"Configuration" => "Uppsetning",
"Options" => "Stillingar",
-"Applicable" => "Gilt",
-"None set" => "Ekkert sett",
"All Users" => "Allir notendur",
"Groups" => "Hópar",
"Users" => "Notendur",
diff --git a/apps/files_external/l10n/it.php b/apps/files_external/l10n/it.php
index d62d8e973274eee23eb1337f9ef33e3dfa70e4c2..f3a6f9af12936dc23fd7d868c4e6eef988e1747b 100644
--- a/apps/files_external/l10n/it.php
+++ b/apps/files_external/l10n/it.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Fornisci chiave di applicazione e segreto di Dropbox validi.",
"Error configuring Google Drive storage" => "Errore durante la configurazione dell'archivio Google Drive",
"Saved" => "Salvato",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Avviso: \"smbclient\" non è installato. Impossibile montare condivisioni CIFS/SMB. Chiedi all'amministratore di sistema di installarlo.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Avviso: il supporto FTP di PHP non è abilitato o non è installato. Impossibile montare condivisioni FTP. Chiedi all'amministratore di sistema di installarlo.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Avviso: il supporto Curl di PHP non è abilitato o non è installato. Impossibile montare condivisioni ownCloud / WebDAV o GoogleDrive. Chiedi all'amministratore di sistema di installarlo.",
+"Note: " => "Nota:",
+" and " => "e",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
"External Storage" => "Archiviazione esterna",
"Folder name" => "Nome della cartella",
"External storage" => "Archiviazione esterna",
"Configuration" => "Configurazione",
"Options" => "Opzioni",
-"Applicable" => "Applicabile",
+"Available for" => "Disponibile per",
"Add storage" => "Aggiungi archiviazione",
-"None set" => "Nessuna impostazione",
+"No user or group" => "Nessun utente o gruppo",
"All Users" => "Tutti gli utenti",
"Groups" => "Gruppi",
"Users" => "Utenti",
diff --git a/apps/files_external/l10n/ja.php b/apps/files_external/l10n/ja.php
index 312dc85188dd572d9103cc10fe5257283266437a..52d66043e1947d4f948c13fd44daceb6dff868ef 100644
--- a/apps/files_external/l10n/ja.php
+++ b/apps/files_external/l10n/ja.php
@@ -6,17 +6,13 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "有効なDropboxアプリのキーとパスワードを入力してください。",
"Error configuring Google Drive storage" => "Googleドライブストレージの設定エラー",
"Saved" => "保存されました",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "警告: \"smbclient\" がインストールされていません。CIFS/SMB共有のマウントはできません。システム管理者にインストールを依頼してください。",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "警告: PHPのFTPサポートが無効またはインストールされていません。FTP共有のマウントはできません。システム管理者にインストールを依頼してください。",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "警告: PHPのCurlサポートが無効またはインストールされていません。ownCloud / WebDAVまたはGoogleDriveのマウントはできません。システム管理者にインストールを依頼してください。",
"External Storage" => "外部ストレージ",
"Folder name" => "フォルダー名",
"External storage" => "外部ストレージ",
"Configuration" => "設定",
"Options" => "オプション",
-"Applicable" => "適用範囲",
"Add storage" => "ストレージを追加",
-"None set" => "未設定",
+"No user or group" => "ユーザーもしくはグループがありません",
"All Users" => "すべてのユーザー",
"Groups" => "グループ",
"Users" => "ユーザー",
diff --git a/apps/files_external/l10n/ka_GE.php b/apps/files_external/l10n/ka_GE.php
index 4953f91ce6a9540f3cfec793803ad5a92d90e1f1..d68dae88c029aa437fe274f05a1df2a3d0dbc752 100644
--- a/apps/files_external/l10n/ka_GE.php
+++ b/apps/files_external/l10n/ka_GE.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "დაშვების მინიჭება",
"Please provide a valid Dropbox app key and secret." => "გთხოვთ მიუთითოთ Dropbox აპლიკაციის გასაღები და კოდი.",
"Error configuring Google Drive storage" => "შეცდომა Google Drive საცავის კონფიგურირების დროს",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "გაფრთხილება: \"smbclient\" არ არის ინსტალირებული. CIFS/SMB ზიარების მონტირება შეუძლებელია. გთხოვთ თხოვოთ თქვენს სისტემურ ადმინისტრატორებს დააინსტალიროს ის.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "გაფრთხილება: FTP მხარდაჭერა არ არის აქტიური ან დაინსტალირებული. FTP ზიარის მონტირება შეუძლებელია. გთხოვთ თხოვოთ თქვენს სისტემურ ადმინისტრატორებს დააინსტალიროს ის.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "გაფრთხილება:PHP–ის Curl მხარდაჭერა არ არის ჩართული ან ინსტალირებული. ownCloud / WebDAV ან GoogleDrive–ის მონტირება შეუძლებელია. თხოვეთ თქვენს ადმინისტრატორს დააინსტალიროს ის.",
"External Storage" => "ექსტერნალ საცავი",
"Folder name" => "ფოლდერის სახელი",
"External storage" => "ექსტერნალ საცავი",
"Configuration" => "კონფიგურაცია",
"Options" => "ოფცია",
-"Applicable" => "მიღებადი",
"Add storage" => "საცავის დამატება",
-"None set" => "არაფერია მითითებული",
"All Users" => "ყველა მომხმარებელი",
"Groups" => "ჯგუფები",
"Users" => "მომხმარებელი",
diff --git a/apps/files_external/l10n/km.php b/apps/files_external/l10n/km.php
index 4586f866a7453b122bd719ef403e70c3edeb658f..75879f2300e1652263d539dce01556afd4958d56 100644
--- a/apps/files_external/l10n/km.php
+++ b/apps/files_external/l10n/km.php
@@ -1,6 +1,7 @@
"ឈ្មោះថត",
+"Options" => "ជម្រើស",
"Groups" => "ក្រុ",
"Users" => "អ្នកប្រើ",
"Delete" => "លុប"
diff --git a/apps/files_external/l10n/ko.php b/apps/files_external/l10n/ko.php
index 088a419e1c1166c47aa2cc17f74e1107fc2a1185..371cba3e12d89cff2e45d6c596664b1cc32838f3 100644
--- a/apps/files_external/l10n/ko.php
+++ b/apps/files_external/l10n/ko.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "접근 권한 부여",
"Please provide a valid Dropbox app key and secret." => "올바른 Dropbox 앱 키와 암호를 입력하십시오.",
"Error configuring Google Drive storage" => "Google 드라이브 저장소 설정 오류",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "경고: \"smbclient\"가 설치되지 않았습니다. CIFS/SMB 공유 자원에 연결할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "경고: PHP FTP 지원이 비활성화되어 있거나 설치되지 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "경고: PHP Curl 지원이 비활성화되어 있거나 설치되지 않았습니다. 다른 ownCloud, WebDAV, Google 드라이브 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"External Storage" => "외부 저장소",
"Folder name" => "폴더 이름",
"External storage" => "외부 저장소",
"Configuration" => "설정",
"Options" => "옵션",
-"Applicable" => "적용 가능",
"Add storage" => "저장소 추가",
-"None set" => "설정되지 않음",
"All Users" => "모든 사용자",
"Groups" => "그룹",
"Users" => "사용자",
diff --git a/apps/files_external/l10n/lt_LT.php b/apps/files_external/l10n/lt_LT.php
index c96119c8b68238fcaffa06927c7ba10b16bc3d4b..fdf1ee70136b75994f0856134adb6e2c84b9b4c3 100644
--- a/apps/files_external/l10n/lt_LT.php
+++ b/apps/files_external/l10n/lt_LT.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Suteikti priėjimą",
"Please provide a valid Dropbox app key and secret." => "Prašome įvesti teisingus Dropbox \"app key\" ir \"secret\".",
"Error configuring Google Drive storage" => "Klaida nustatinėjant Google Drive talpyklą",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Įspėjimas: \"smbclient\" nėra įdiegtas. CIFS/SMB dalinimasis nėra galimas. Prašome susisiekti su sistemos administratoriumi kad būtų įdiegtas \"smbclient\"",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Įspėjimas: FTP palaikymas PHP sistemoje nėra įjungtas arba nėra įdiegtas. FTP dalinimosi įjungimas nėra galimas. Prašome susisiekti su sistemos administratoriumi kad būtų įdiegtas FTP palaikymas. ",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Įspėjimas: \"Curl\" palaikymas PHP terpėje nėra įjungtas arba įdiegtas. ownCloud/WebDAV ar GoogleDrive įjungimas nebus įmanomas. Prašome susisiekti su sistemos administratoriumi kad būtų įdiegtas arba įjungtas \"Curl\" palaikymas.",
"External Storage" => "Išorinės saugyklos",
"Folder name" => "Katalogo pavadinimas",
"External storage" => "Išorinė saugykla",
"Configuration" => "Konfigūracija",
"Options" => "Nustatymai",
-"Applicable" => "Pritaikyti",
"Add storage" => "Pridėti saugyklą",
-"None set" => "Nieko nepasirinkta",
"All Users" => "Visi vartotojai",
"Groups" => "Grupės",
"Users" => "Vartotojai",
diff --git a/apps/files_external/l10n/lv.php b/apps/files_external/l10n/lv.php
index 18e56178892793e25c94b8aebb7ae4ea9733b7e4..e1037b503286f85687ea235cc30f18441e237cc7 100644
--- a/apps/files_external/l10n/lv.php
+++ b/apps/files_external/l10n/lv.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Piešķirt pieeju",
"Please provide a valid Dropbox app key and secret." => "Lūdzu, norādiet derīgu Dropbox lietotnes atslēgu un noslēpumu.",
"Error configuring Google Drive storage" => "Kļūda, konfigurējot Google Drive krātuvi",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Brīdinājums: nav uzinstalēts “smbclient”. Nevar montēt CIFS/SMB koplietojumus. Lūdzu, vaicājiet savam sistēmas administratoram, lai to uzinstalē.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Brīdinājums: uz PHP nav aktivēts vai instalēts FTP atbalsts. Nevar montēt FTP koplietojumus. Lūdzu, vaicājiet savam sistēmas administratoram, lai to uzinstalē.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Brīdinājums: PHP Curl atbalsts nav instalēts. OwnCloud / WebDAV vai GoogleDrive montēšana nav iespējama. Lūdziet sistēmas administratoram lai tas tiek uzstādīts.",
"External Storage" => "Ārējā krātuve",
"Folder name" => "Mapes nosaukums",
"External storage" => "Ārējā krātuve",
"Configuration" => "Konfigurācija",
"Options" => "Opcijas",
-"Applicable" => "Piemērojams",
"Add storage" => "Pievienot krātuvi",
-"None set" => "Neviens nav iestatīts",
"All Users" => "Visi lietotāji",
"Groups" => "Grupas",
"Users" => "Lietotāji",
diff --git a/apps/files_external/l10n/mk.php b/apps/files_external/l10n/mk.php
index b59bb138f1da07deef38185c7e632df745fbba05..507c0a745593baffcf86f77088d6692f1b7fc89b 100644
--- a/apps/files_external/l10n/mk.php
+++ b/apps/files_external/l10n/mk.php
@@ -5,14 +5,10 @@ $TRANSLATIONS = array(
"Grant access" => "Дозволи пристап",
"Please provide a valid Dropbox app key and secret." => "Ве молам доставите валиден Dropbox клуч и тајна лозинка.",
"Error configuring Google Drive storage" => "Грешка при конфигурација на Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Внимание: \"smbclient\" не е инсталиран. Не е можно монтирање на CIFS/SMB дискови. Замолете го Вашиот систем администратор да го инсталира.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Внимание: Не е овозможена или инсталирани FTP подршка во PHP. Не е можно монтирање на FTP дискови. Замолете го Вашиот систем администратор да го инсталира.",
"External Storage" => "Надворешно складиште",
"Folder name" => "Име на папка",
"Configuration" => "Конфигурација",
"Options" => "Опции",
-"Applicable" => "Применливо",
-"None set" => "Ништо поставено",
"All Users" => "Сите корисници",
"Groups" => "Групи",
"Users" => "Корисници",
diff --git a/apps/files_external/l10n/nb_NO.php b/apps/files_external/l10n/nb_NO.php
index c103112dbe3f271e9c81effcdb90ebf4e3b97ad9..95c9b47f412c12e69f0a6b3fcd602736f4f0dca2 100644
--- a/apps/files_external/l10n/nb_NO.php
+++ b/apps/files_external/l10n/nb_NO.php
@@ -5,17 +5,13 @@ $TRANSLATIONS = array(
"Grant access" => "Gi tilgang",
"Please provide a valid Dropbox app key and secret." => "Vær vennlig å oppgi gyldig Dropbox appnøkkel og hemmelighet.",
"Error configuring Google Drive storage" => "Feil med konfigurering av Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Advarsel: \"smbclient\" er ikke installert. Kan ikke montere CIFS/SMB mapper. Ta kontakt med din systemadministrator for å installere det.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Advarsel: FTP støtte i PHP er ikke slått på eller innstallert. Kan ikke montere FTP mapper. Ta kontakt med din systemadministrator for å innstallere det.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advarsel: Curl støtte i PHP er ikke aktivert eller innstallert. Kan ikke montere owncloud/WebDAV eller Googledrive. Ta kontakt med din systemadministrator for å innstallerer det.",
+"Saved" => "Lagret",
"External Storage" => "Ekstern lagring",
"Folder name" => "Mappenavn",
"External storage" => "Ekstern lagringsplass",
"Configuration" => "Konfigurasjon",
"Options" => "Innstillinger",
-"Applicable" => "Anvendelig",
"Add storage" => "Legg til lagringsplass",
-"None set" => "Ingen valgt",
"All Users" => "Alle brukere",
"Groups" => "Grupper",
"Users" => "Brukere",
diff --git a/apps/files_external/l10n/nl.php b/apps/files_external/l10n/nl.php
index 4fa579775f96e0a93e1e69605a13de781a871844..c055be50f8786758713dfe0965787de6231dd8a2 100644
--- a/apps/files_external/l10n/nl.php
+++ b/apps/files_external/l10n/nl.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Geef een geldige Dropbox key en secret.",
"Error configuring Google Drive storage" => "Fout tijdens het configureren van Google Drive opslag",
"Saved" => "Bewaard",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Waarschuwing: \"smbclient\" is niet geïnstalleerd. Mounten van CIFS/SMB shares is niet mogelijk. Vraag uw beheerder om smbclient te installeren.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Waarschuwing: FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van FTP shares is niet mogelijk. Vraag uw beheerder FTP ondersteuning te installeren.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Waarschuwing: Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van ownCloud / WebDAV of GoogleDrive is niet mogelijk. Vraag uw systeembeheerder dit te installeren.",
+"Note: " => "Let op: ",
+" and " => "en",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Let op: Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Let op: FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder dit te installeren.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Let op: \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.",
"External Storage" => "Externe opslag",
"Folder name" => "Mapnaam",
"External storage" => "Externe opslag",
"Configuration" => "Configuratie",
"Options" => "Opties",
-"Applicable" => "Van toepassing",
+"Available for" => "Beschikbaar voor",
"Add storage" => "Toevoegen opslag",
-"None set" => "Niets ingesteld",
+"No user or group" => "Geen gebruiker of groep",
"All Users" => "Alle gebruikers",
"Groups" => "Groepen",
"Users" => "Gebruikers",
diff --git a/apps/files_external/l10n/pl.php b/apps/files_external/l10n/pl.php
index ece0620f754bf27b26f6b5545bf6161cab75d288..246e12b6ac8f209ef596d4527e23b128ece6aa45 100644
--- a/apps/files_external/l10n/pl.php
+++ b/apps/files_external/l10n/pl.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Proszę podać prawidłowy klucz aplikacji Dropbox i klucz sekretny.",
"Error configuring Google Drive storage" => "Wystąpił błąd podczas konfigurowania zasobu Google Drive",
"Saved" => "Zapisano",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Ostrzeżenie: \"smbclient\" nie jest zainstalowany. Zamontowanie katalogów CIFS/SMB nie jest możliwe. Skontaktuj sie z administratorem w celu zainstalowania.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Ostrzeżenie: Wsparcie dla FTP w PHP nie jest zainstalowane lub włączone. Skontaktuj sie z administratorem w celu zainstalowania lub włączenia go.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Ostrzeżenie: Wsparcie dla Curl w PHP nie jest zainstalowane lub włączone. Montowanie WebDAV lub GoogleDrive nie będzie możliwe. Skontaktuj się z administratorem w celu zainstalowania lub włączenia tej opcji.",
+"Note: " => "Uwaga: ",
+" and " => "oraz",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Uwaga: Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Uwaga: Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Uwaga: \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
"External Storage" => "Zewnętrzna zasoby dyskowe",
"Folder name" => "Nazwa folderu",
"External storage" => "Zewnętrzne zasoby dyskowe",
"Configuration" => "Konfiguracja",
"Options" => "Opcje",
-"Applicable" => "Zastosowanie",
+"Available for" => "Dostępne przez",
"Add storage" => "Dodaj zasoby dyskowe",
-"None set" => "Nie ustawione",
+"No user or group" => "Brak użytkownika lub grupy",
"All Users" => "Wszyscy uzytkownicy",
"Groups" => "Grupy",
"Users" => "Użytkownicy",
diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php
index fbb945c54392220594efe00a386791350f615256..9a5a39f2358595e58fe65703a3df80b49259cf3c 100644
--- a/apps/files_external/l10n/pt_BR.php
+++ b/apps/files_external/l10n/pt_BR.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox",
"Error configuring Google Drive storage" => "Erro ao configurar armazenamento do Google Drive",
"Saved" => "Salvo",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Aviso: \"smbclient\" não está instalado. Impossível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Aviso: O suporte para FTP do PHP não está ativado ou instalado. Impossível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => " Aviso: O suport a Curl em PHP não está habilitado ou instalado. A montagem do ownCloud / WebDAV ou GoogleDrive não é possível. Por favor, solicite ao seu administrador do sistema instalá-lo.",
+"Note: " => "Nota:",
+" and " => "e",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Nota: \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
"External Storage" => "Armazenamento Externo",
"Folder name" => "Nome da pasta",
"External storage" => "Armazenamento Externo",
"Configuration" => "Configuração",
"Options" => "Opções",
-"Applicable" => "Aplicável",
+"Available for" => "Disponível para",
"Add storage" => "Adicionar Armazenamento",
-"None set" => "Nenhum definido",
+"No user or group" => "Nenhum usuário ou grupo",
"All Users" => "Todos os Usuários",
"Groups" => "Grupos",
"Users" => "Usuários",
diff --git a/apps/files_external/l10n/pt_PT.php b/apps/files_external/l10n/pt_PT.php
index eb4d8feb41a80349a421870bc637a29ef53d1717..d0b70006ea1a0d1b85c5ea891432e9b1daccd13b 100644
--- a/apps/files_external/l10n/pt_PT.php
+++ b/apps/files_external/l10n/pt_PT.php
@@ -6,17 +6,12 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Por favor forneça uma \"app key\" e \"secret\" do Dropbox válidas.",
"Error configuring Google Drive storage" => "Erro ao configurar o armazenamento do Google Drive",
"Saved" => "Guardado",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Atenção: O cliente \"smbclient\" não está instalado. Não é possível montar as partilhas CIFS/SMB . Peça ao seu administrador para instalar.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Aviso: O suporte FTP no PHP não está activate ou instalado. Não é possível montar as partilhas FTP. Peça ao seu administrador para instalar.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Atenção: O suporte PHP para o Curl não está activado ou instalado. A montagem do ownCloud/WebDav ou GoolgeDriver não é possível. Por favor contacte o administrador para o instalar.",
"External Storage" => "Armazenamento Externo",
"Folder name" => "Nome da pasta",
"External storage" => "Armazenamento Externo",
"Configuration" => "Configuração",
"Options" => "Opções",
-"Applicable" => "Aplicável",
"Add storage" => "Adicionar armazenamento",
-"None set" => "Não definido",
"All Users" => "Todos os utilizadores",
"Groups" => "Grupos",
"Users" => "Utilizadores",
diff --git a/apps/files_external/l10n/ro.php b/apps/files_external/l10n/ro.php
index a90b0299e1766cca987ce51bc3db781077a41492..3fc56c67d333fffbbd9dc8af7c649baa22119dc5 100644
--- a/apps/files_external/l10n/ro.php
+++ b/apps/files_external/l10n/ro.php
@@ -6,17 +6,12 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Prezintă te rog o cheie de Dropbox validă și parola",
"Error configuring Google Drive storage" => "Eroare la configurarea mediului de stocare Google Drive",
"Saved" => "Salvat",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Atenție: \"smbclient\" nu este instalat. Montarea mediilor CIFS/SMB partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleaze.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Atenție: suportul pentru FTP în PHP nu este activat sau instalat. Montarea mediilor FPT partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleze.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Atentie: Suportul Curl nu este pornit / instalat in configuratia PHP! Montarea ownCloud / WebDAV / GoogleDrive nu este posibila! Intrebati administratorul sistemului despre aceasta problema!",
"External Storage" => "Stocare externă",
"Folder name" => "Denumire director",
"External storage" => "Stocare externă",
"Configuration" => "Configurație",
"Options" => "Opțiuni",
-"Applicable" => "Aplicabil",
"Add storage" => "Adauga stocare",
-"None set" => "Niciunul",
"All Users" => "Toți utilizatorii",
"Groups" => "Grupuri",
"Users" => "Utilizatori",
diff --git a/apps/files_external/l10n/ru.php b/apps/files_external/l10n/ru.php
index 66d6f9fa6b8d44dff6bcd23be701564025b56b39..f282f3969e5654e26e84c97c030944d5affe0eac 100644
--- a/apps/files_external/l10n/ru.php
+++ b/apps/files_external/l10n/ru.php
@@ -5,22 +5,19 @@ $TRANSLATIONS = array(
"Grant access" => "Предоставление доступа",
"Please provide a valid Dropbox app key and secret." => "Пожалуйста, предоставьте действующий ключ Dropbox и пароль.",
"Error configuring Google Drive storage" => "Ошибка при настройке хранилища Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Внимание: \"smbclient\" не установлен. Подключение по CIFS/SMB невозможно. Пожалуйста, обратитесь к системному администратору, чтобы установить его.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Внимание: Поддержка FTP не включена в PHP. Подключение по FTP невозможно. Пожалуйста, обратитесь к системному администратору, чтобы включить.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Внимание: Поддержка Curl в PHP не включена или не установлена. Подключение ownCloud / WebDAV или GoogleDrive невозможно. Попросите вашего системного администратора установить его.",
+"Saved" => "Сохранено",
"External Storage" => "Внешний носитель",
"Folder name" => "Имя папки",
"External storage" => "Внешний носитель данных",
"Configuration" => "Конфигурация",
"Options" => "Опции",
-"Applicable" => "Применимый",
"Add storage" => "Добавить носитель данных",
-"None set" => "Не установлено",
"All Users" => "Все пользователи",
"Groups" => "Группы",
"Users" => "Пользователи",
"Delete" => "Удалить",
"Enable User External Storage" => "Включить пользовательские внешние носители",
+"Allow users to mount the following external storage" => "Разрешить пользователям монтировать следующую внешнюю систему хранения данных",
"SSL root certificates" => "Корневые сертификаты SSL",
"Import Root Certificate" => "Импортировать корневые сертификаты"
);
diff --git a/apps/files_external/l10n/si_LK.php b/apps/files_external/l10n/si_LK.php
index ac41f596340c95e52da71c209e59bbed2ad72983..a9f39a3bbc959d7b1dbe48d3cff9a7f50fdbe374 100644
--- a/apps/files_external/l10n/si_LK.php
+++ b/apps/files_external/l10n/si_LK.php
@@ -9,8 +9,6 @@ $TRANSLATIONS = array(
"Folder name" => "ෆොල්ඩරයේ නම",
"Configuration" => "වින්යාසය",
"Options" => "විකල්පයන්",
-"Applicable" => "අදාළ",
-"None set" => "කිසිවක් නැත",
"All Users" => "සියළු පරිශීලකයන්",
"Groups" => "කණ්ඩායම්",
"Users" => "පරිශීලකයන්",
diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php
index aa28898257640868f6f86920e35f9b85ec76321f..de32fb5ffb16b08c11b6e4f9351a60ce69ae84d9 100644
--- a/apps/files_external/l10n/sk_SK.php
+++ b/apps/files_external/l10n/sk_SK.php
@@ -5,17 +5,13 @@ $TRANSLATIONS = array(
"Grant access" => "Povoliť prístup",
"Please provide a valid Dropbox app key and secret." => "Zadajte platný kľúč aplikácie a heslo Dropbox",
"Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska Google drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Upozornenie: Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varovanie: nie je nainštalovaná, alebo povolená, podpora Curl v PHP. Nie je možné pripojenie oddielov ownCloud, WebDAV, či GoogleDrive. Prosím požiadajte svojho administrátora systému, nech ju nainštaluje.",
+"Saved" => "Uložené",
"External Storage" => "Externé úložisko",
"Folder name" => "Názov priečinka",
"External storage" => "Externé úložisko",
"Configuration" => "Nastavenia",
"Options" => "Možnosti",
-"Applicable" => "Aplikovateľné",
"Add storage" => "Pridať úložisko",
-"None set" => "Žiadne nastavené",
"All Users" => "Všetci používatelia",
"Groups" => "Skupiny",
"Users" => "Používatelia",
diff --git a/apps/files_external/l10n/sl.php b/apps/files_external/l10n/sl.php
index 05e626fcf831967a62aee350663f8b964ca74e40..bb34494a5d7e42effbdf15f1c3f33a18a782bba9 100644
--- a/apps/files_external/l10n/sl.php
+++ b/apps/files_external/l10n/sl.php
@@ -6,17 +6,14 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Vpisati je treba veljaven ključ programa in kodo za Dropbox",
"Error configuring Google Drive storage" => "Napaka nastavljanja shrambe Google Drive",
"Saved" => "Shranjeno",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Opozorilo: paket \"smbclient\" ni nameščen. Priklapljanje pogonov CIFS/SMB ne bo mogoče.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Opozorilo: podpora FTP v PHP ni omogočena ali pa ni nameščena. Priklapljanje pogonov FTP zato ne bo mogoče.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Opozorilo: podpora za Curl v PHP ni omogočena ali pa ni nameščena. Priklapljanje točke ownCloud / WebDAV ali GoogleDrive zato ne bo mogoče. Zahtevane pakete je treba pred uporabo namestiti.",
"External Storage" => "Zunanja podatkovna shramba",
"Folder name" => "Ime mape",
"External storage" => "Zunanja shramba",
"Configuration" => "Nastavitve",
"Options" => "Možnosti",
-"Applicable" => "Se uporablja",
+"Available for" => "Na voljo za",
"Add storage" => "Dodaj shrambo",
-"None set" => "Ni nastavljeno",
+"No user or group" => "Ni uporabnika ali skupine",
"All Users" => "Vsi uporabniki",
"Groups" => "Skupine",
"Users" => "Uporabniki",
diff --git a/apps/files_external/l10n/sv.php b/apps/files_external/l10n/sv.php
index 183df674b9d5ac8b9e3fa0e1c3e3066b34b7c0bb..2992460d283d3467b4571936f57009b0df5e93b6 100644
--- a/apps/files_external/l10n/sv.php
+++ b/apps/files_external/l10n/sv.php
@@ -5,22 +5,26 @@ $TRANSLATIONS = array(
"Grant access" => "Bevilja åtkomst",
"Please provide a valid Dropbox app key and secret." => "Ange en giltig Dropbox nyckel och hemlighet.",
"Error configuring Google Drive storage" => "Fel vid konfigurering av Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Varning: \"smb-klienten\" är inte installerad. Montering av CIFS/SMB delningar är inte möjligt. Kontakta din systemadministratör för att få den installerad.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Varning: Stöd för FTP i PHP är inte aktiverat eller installerat. Montering av FTP-delningar är inte möjligt. Kontakta din systemadministratör för att få det installerat.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varning: Curl-stöd i PHP är inte aktiverat eller installerat. Montering av ownCloud / WebDAV eller GoogleDrive är inte möjligt. Vänligen be din administratör att installera det.",
+"Saved" => "Sparad",
+"Note: " => " OBS: b>",
+" and " => "och",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => " OBS: b> cURL stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör för att installera det.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => " OBS: b> Den FTP-stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör för att installera det.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => " OBS: b> \"%s\" är inte installerat. Montering av %s är inte möjlig. Be din systemadministratör för att installera det.",
"External Storage" => "Extern lagring",
"Folder name" => "Mappnamn",
"External storage" => "Extern lagring",
"Configuration" => "Konfiguration",
"Options" => "Alternativ",
-"Applicable" => "Tillämplig",
+"Available for" => "Tillgänglig för",
"Add storage" => "Lägg till lagring",
-"None set" => "Ingen angiven",
+"No user or group" => "Ingen användare eller grupp",
"All Users" => "Alla användare",
"Groups" => "Grupper",
"Users" => "Användare",
"Delete" => "Radera",
"Enable User External Storage" => "Aktivera extern lagring för användare",
+"Allow users to mount the following external storage" => "Tillåt användare att montera följande extern lagring",
"SSL root certificates" => "SSL rotcertifikat",
"Import Root Certificate" => "Importera rotcertifikat"
);
diff --git a/apps/files_external/l10n/ta_LK.php b/apps/files_external/l10n/ta_LK.php
index 94ddaf9c5e139af92ef36e1aa133137afb2e88ef..fe5d2a8bc87df467d046e9604e0d7b840fe368f3 100644
--- a/apps/files_external/l10n/ta_LK.php
+++ b/apps/files_external/l10n/ta_LK.php
@@ -9,8 +9,6 @@ $TRANSLATIONS = array(
"Folder name" => "கோப்புறை பெயர்",
"Configuration" => "தகவமைப்பு",
"Options" => "தெரிவுகள்",
-"Applicable" => "பயன்படத்தக்க",
-"None set" => "தொகுப்பில்லா",
"All Users" => "பயனாளர்கள் எல்லாம்",
"Groups" => "குழுக்கள்",
"Users" => "பயனாளர்",
diff --git a/apps/files_external/l10n/th_TH.php b/apps/files_external/l10n/th_TH.php
index a1a56a4d2e49f56d2d2a39d1d677fe1211133ace..e3653eb41f7acdd3c47f24e0de136f43133e16c8 100644
--- a/apps/files_external/l10n/th_TH.php
+++ b/apps/files_external/l10n/th_TH.php
@@ -5,14 +5,10 @@ $TRANSLATIONS = array(
"Grant access" => "อนุญาตให้เข้าถึงได้",
"Please provide a valid Dropbox app key and secret." => "กรุณากรอกรหัส app key ของ Dropbox และรหัสลับ",
"Error configuring Google Drive storage" => "เกิดข้อผิดพลาดในการกำหนดค่าการจัดเก็บข้อมูลในพื้นที่ของ Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "คำเตือน: \"smbclient\" ยังไม่ได้ถูกติดตั้ง. การชี้ CIFS/SMB เพื่อแชร์ข้อมูลไม่สามารถกระทำได้ กรุณาสอบถามข้อมูลเพิ่มเติมจากผู้ดูแลระบบเพื่อติดตั้ง.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "คำเตือน: การสนับสนุนการใช้งาน FTP ในภาษา PHP ยังไม่ได้ถูกเปิดใช้งานหรือถูกติดตั้ง. การชี้ FTP เพื่อแชร์ข้อมูลไม่สามารถดำเนินการได้ กรุณาสอบถามข้อมูลเพิ่มเติมจากผู้ดูแลระบบเพื่อติดตั้ง",
"External Storage" => "พื้นทีจัดเก็บข้อมูลจากภายนอก",
"Folder name" => "ชื่อโฟลเดอร์",
"Configuration" => "การกำหนดค่า",
"Options" => "ตัวเลือก",
-"Applicable" => "สามารถใช้งานได้",
-"None set" => "ยังไม่มีการกำหนด",
"All Users" => "ผู้ใช้งานทั้งหมด",
"Groups" => "กลุ่ม",
"Users" => "ผู้ใช้งาน",
diff --git a/apps/files_external/l10n/tr.php b/apps/files_external/l10n/tr.php
index a835d6f174acd98ef8f98e2c9c2905bee81c0663..3646a47605d5ea0c371e30c8ebdc1bcd45d15c13 100644
--- a/apps/files_external/l10n/tr.php
+++ b/apps/files_external/l10n/tr.php
@@ -6,17 +6,19 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "Lütfen Dropbox app key ve secret temin ediniz",
"Error configuring Google Drive storage" => "Google Drive depo yapılandırma hatası",
"Saved" => "Kaydedildi",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Uyarı: \"smbclient\" kurulu değil. CIFS/SMB paylaşımlarını bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinize danışın.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Uyarı: PHP içerisinde FTP desteği etkin veya yüklü değil. FTP paylaşımlarını bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinize danışın.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Uyarı: PHP içerisinde Curl desteği etkin veya yüklü değil. OwnCloud / WebDAV veya GoogleDrive bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinizde danışın.",
+"Note: " => "Not: ",
+" and " => "ve",
+"Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Not: PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
+"Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Not: PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
+"Note: \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "Not: \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
"External Storage" => "Harici Depolama",
-"Folder name" => "Dizin ismi",
+"Folder name" => "Klasör ismi",
"External storage" => "Harici depolama",
"Configuration" => "Yapılandırma",
"Options" => "Seçenekler",
-"Applicable" => "Uygulanabilir",
+"Available for" => "Kullanabilenler",
"Add storage" => "Depo ekle",
-"None set" => "Hiçbiri",
+"No user or group" => "Kullanıcı veya grup yok",
"All Users" => "Tüm Kullanıcılar",
"Groups" => "Gruplar",
"Users" => "Kullanıcılar",
diff --git a/apps/files_external/l10n/uk.php b/apps/files_external/l10n/uk.php
index a7c028aa9356d1cadf50b16d652d70131d2dd5f7..533eba07eb1ccc449406af431ef92d6b81ba97c1 100644
--- a/apps/files_external/l10n/uk.php
+++ b/apps/files_external/l10n/uk.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Дозволити доступ",
"Please provide a valid Dropbox app key and secret." => "Будь ласка, надайте дійсний ключ та пароль Dropbox.",
"Error configuring Google Drive storage" => "Помилка при налаштуванні сховища Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Попередження: Клієнт \"smbclient\" не встановлено. Під'єднанатися до CIFS/SMB тек неможливо. Попрохайте системного адміністратора встановити його.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Попередження: Підтримка FTP в PHP не увімкнута чи не встановлена. Під'єднанатися до FTP тек неможливо. Попрохайте системного адміністратора встановити її.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Попередження: Підтримка CURL в PHP не увімкнута чи не встановлена. Під'єднанатися OwnCloud / WebDav або Google Drive неможливе. Попрохайте системного адміністратора встановити її.",
"External Storage" => "Зовнішні сховища",
"Folder name" => "Ім'я теки",
"External storage" => "Зовнішнє сховище",
"Configuration" => "Налаштування",
"Options" => "Опції",
-"Applicable" => "Придатний",
"Add storage" => "Додати сховище",
-"None set" => "Не встановлено",
"All Users" => "Усі користувачі",
"Groups" => "Групи",
"Users" => "Користувачі",
diff --git a/apps/files_external/l10n/vi.php b/apps/files_external/l10n/vi.php
index 5fd00dc2bf54c2a7d28156e9bc8a4c676519452e..787fc82832e7fa33c3a1e065914792b7b94cdb36 100644
--- a/apps/files_external/l10n/vi.php
+++ b/apps/files_external/l10n/vi.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "Cấp quyền truy cập",
"Please provide a valid Dropbox app key and secret." => "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã bí mật.",
"Error configuring Google Drive storage" => "Lỗi cấu hình lưu trữ Google Drive",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Cảnh báo: \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thực hiện được. Hãy hỏi người quản trị hệ thống để cài đặt nó.",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Cảnh báo: FTP trong PHP chưa được cài đặt hoặc chưa được mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó.",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Cảnh báo: Tính năng Curl trong PHP chưa được kích hoạt hoặc cài đặt. Việc gắn kết ownCloud / WebDAV hay GoogleDrive không thực hiện được. Vui lòng liên hệ người quản trị để cài đặt nó.",
"External Storage" => "Lưu trữ ngoài",
"Folder name" => "Tên thư mục",
"External storage" => "Lưu trữ ngoài",
"Configuration" => "Cấu hình",
"Options" => "Tùy chọn",
-"Applicable" => "Áp dụng",
"Add storage" => "Thêm bộ nhớ",
-"None set" => "không",
"All Users" => "Tất cả người dùng",
"Groups" => "Nhóm",
"Users" => "Người dùng",
diff --git a/apps/files_external/l10n/zh_CN.php b/apps/files_external/l10n/zh_CN.php
index bb85d0e4f495e0bddd748869a8c20f2cffc9c383..40d5158bf5c9a0436cb6106d4f468fab08ebfaa5 100644
--- a/apps/files_external/l10n/zh_CN.php
+++ b/apps/files_external/l10n/zh_CN.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "授权",
"Please provide a valid Dropbox app key and secret." => "请提供有效的Dropbox应用key和secret",
"Error configuring Google Drive storage" => "配置Google Drive存储时出错",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "警告:“smbclient” 尚未安装。CIFS/SMB 分享挂载无法实现。请咨询系统管理员进行安装。",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "警告:PHP中尚未启用或安装FTP。FTP 分享挂载无法实现。请咨询系统管理员进行安装。",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "警告: PHP中未启用或未安装Curl支持。ownCloud / WebDAV 或 GoogleDrive 不能挂载。请请求您的系统管理员安装该它。",
"External Storage" => "外部存储",
"Folder name" => "目录名称",
"External storage" => "外部存储",
"Configuration" => "配置",
"Options" => "选项",
-"Applicable" => "适用的",
"Add storage" => "添加存储",
-"None set" => "未设置",
"All Users" => "所有用户",
"Groups" => "组",
"Users" => "用户",
diff --git a/apps/files_external/l10n/zh_TW.php b/apps/files_external/l10n/zh_TW.php
index 7c256cd2ab713f31b6c9bb6beb4476f4385ceb88..ac480e405fb6c3264d97f2b48a66d78a29b65b2e 100644
--- a/apps/files_external/l10n/zh_TW.php
+++ b/apps/files_external/l10n/zh_TW.php
@@ -5,17 +5,12 @@ $TRANSLATIONS = array(
"Grant access" => "允許存取",
"Please provide a valid Dropbox app key and secret." => "請提供有效的 Dropbox app key 和 app secret 。",
"Error configuring Google Drive storage" => "設定 Google Drive 儲存時發生錯誤",
-"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "警告:未安裝 \"smbclient\" ,因此無法掛載 CIFS/SMB 分享,請洽您的系統管理員將其安裝。",
-"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "警告:PHP 並未啓用 FTP 的支援,因此無法掛載 FTP 分享,請洽您的系統管理員將其安裝並啓用。",
-"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "警告:PHP 並未啓用 Curl 的支援,因此無法掛載 ownCloud/WebDAV 或 Google Drive 分享,請洽您的系統管理員將其安裝並啓用。",
"External Storage" => "外部儲存",
"Folder name" => "資料夾名稱",
"External storage" => "外部儲存",
"Configuration" => "設定",
"Options" => "選項",
-"Applicable" => "可用的",
"Add storage" => "增加儲存區",
-"None set" => "尚未設定",
"All Users" => "所有使用者",
"Groups" => "群組",
"Users" => "使用者",
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 06ccd5d16fa0d2efc53adfa176ac9f0f04ef19af..2093fb7e58cf7aadf249db84cc9614fb904d4cb8 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -548,4 +548,16 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return false;
}
}
+
+ /**
+ * check if curl is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('curl_init')) {
+ return true;
+ } else {
+ return array('curl');
+ }
+ }
+
}
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index c5b091336e197ad803c602d3c87fa305ff292bd3..71f6ae7887830e4a09ea5397eddcc854517a4605 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -5,6 +5,7 @@
* @author Michael Gapczynski
* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
* @copyright 2014 Vincent Petry
+* @copyright 2014 Robin McCorkell
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -38,6 +39,34 @@ class OC_Mount_Config {
// whether to skip backend test (for unit tests, as this static class is not mockable)
public static $skipTest = false;
+ private static $backends = array();
+
+ /**
+ * @param string $class
+ * @param array $definition
+ * @return bool
+ */
+ public static function registerBackend($class, $definition) {
+ if (!isset($definition['backend'])) {
+ return false;
+ }
+
+ OC_Mount_Config::$backends[$class] = $definition;
+ return true;
+ }
+
+ /**
+ * Setup backends
+ *
+ * @return array of previously registered backends
+ */
+ public static function setUp($backends = array()) {
+ $backup = self::$backends;
+ self::$backends = $backends;
+
+ return $backup;
+ }
+
/**
* 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
@@ -45,125 +74,32 @@ class OC_Mount_Config {
* 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 beginning of the value
- * @return string
+ * @return array
*/
public static function getBackends() {
-
- // FIXME: do not rely on php key order for the options order in the UI
- $backends['\OC\Files\Storage\Local']=array(
- 'backend' => 'Local',
- 'configuration' => array(
- 'datadir' => 'Location'));
-
- $backends['\OC\Files\Storage\AmazonS3']=array(
- 'backend' => 'Amazon S3 and compliant',
- 'configuration' => array(
- 'key' => 'Access Key',
- 'secret' => '*Secret Key',
- 'bucket' => 'Bucket',
- 'hostname' => '&Hostname (optional)',
- 'port' => '&Port (optional)',
- 'region' => '&Region (optional)',
- 'use_ssl' => '!Enable SSL',
- 'use_path_style' => '!Enable Path Style'));
-
- $backends['\OC\Files\Storage\Dropbox']=array(
- 'backend' => 'Dropbox',
- 'configuration' => array(
- 'configured' => '#configured',
- 'app_key' => 'App key',
- 'app_secret' => '*App secret',
- 'token' => '#token',
- 'token_secret' => '#token_secret'),
- 'custom' => 'dropbox');
-
- if(OC_Mount_Config::checkphpftp()) $backends['\OC\Files\Storage\FTP']=array(
- 'backend' => 'FTP',
- 'configuration' => array(
- 'host' => 'Hostname',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Root',
- 'secure' => '!Secure ftps://'));
-
- if(OC_Mount_Config::checkcurl()) $backends['\OC\Files\Storage\Google']=array(
- 'backend' => 'Google Drive',
- 'configuration' => array(
- 'configured' => '#configured',
- 'client_id' => 'Client ID',
- 'client_secret' => '*Client secret',
- 'token' => '#token'),
- 'custom' => 'google');
-
- if(OC_Mount_Config::checkcurl()) {
- $backends['\OC\Files\Storage\Swift'] = array(
- 'backend' => 'OpenStack Object Storage',
- 'configuration' => array(
- 'user' => 'Username (required)',
- 'bucket' => 'Bucket (required)',
- 'region' => '&Region (optional for OpenStack Object Storage)',
- 'key' => '*API Key (required for Rackspace Cloud Files)',
- 'tenant' => '&Tenantname (required for OpenStack Object Storage)',
- 'password' => '*Password (required for OpenStack Object Storage)',
- 'service_name' => '&Service Name (required for OpenStack Object Storage)',
- 'url' => '&URL of identity endpoint (required for OpenStack Object Storage)',
- 'timeout' => '&Timeout of HTTP requests in seconds (optional)',
- )
- );
- }
-
- if (!OC_Util::runningOnWindows()) {
- if (OC_Mount_Config::checksmbclient()) {
- $backends['\OC\Files\Storage\SMB'] = array(
- 'backend' => 'SMB / CIFS',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'share' => 'Share',
- 'root' => '&Root'));
+ $sortFunc = function($a, $b) {
+ return strcasecmp($a['backend'], $b['backend']);
+ };
+
+ $backEnds = array();
+
+ foreach (OC_Mount_Config::$backends as $class => $backend) {
+ if (isset($backend['has_dependencies']) and $backend['has_dependencies'] === true) {
+ if (!method_exists($class, 'checkDependencies')) {
+ \OCP\Util::writeLog('files_external',
+ "Backend class $class has dependencies but doesn't provide method checkDependencies()",
+ \OCP\Util::DEBUG);
+ continue;
+ } elseif ($class::checkDependencies() !== true) {
+ continue;
+ }
}
+ $backEnds[$class] = $backend;
}
- if(OC_Mount_Config::checkcurl()){
- $backends['\OC\Files\Storage\DAV']=array(
- 'backend' => 'WebDAV',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Root',
- 'secure' => '!Secure https://'));
- $backends['\OC\Files\Storage\OwnCloud']=array(
- 'backend' => 'ownCloud',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Remote subfolder',
- 'secure' => '!Secure https://'));
- }
-
- $backends['\OC\Files\Storage\SFTP']=array(
- 'backend' => 'SFTP',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Root'));
-
- $backends['\OC\Files\Storage\iRODS']=array(
- 'backend' => 'iRODS',
- 'configuration' => array(
- 'host' => 'Host',
- 'port' => 'Port',
- 'use_logon_credentials' => '!Use ownCloud login',
- 'user' => 'Username',
- 'password' => '*Password',
- 'auth_mode' => 'Authentication Mode',
- 'zone' => 'Zone'));
-
- return($backends);
+ uasort($backEnds, $sortFunc);
+
+ return $backEnds;
}
/**
@@ -185,7 +121,7 @@ class OC_Mount_Config {
* @return array of mount point string as key, mountpoint config as value
*/
public static function getAbsoluteMountPoints($user) {
- $mountPoints = array();
+ $mountPoints = array();
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
$mount_file = \OC_Config::getValue("mount_file", $datadir . "/mount.json");
@@ -270,19 +206,25 @@ class OC_Mount_Config {
*/
public static function getPersonalBackends() {
- $backends = self::getBackends();
+ // Check whether the user has permissions to add personal storage backends
+ // return an empty array if this is not the case
+ if(OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') !== 'yes') {
+ return array();
+ }
+
+ $backEnds = self::getBackends();
// Remove local storage and other disabled storages
- unset($backends['\OC\Files\Storage\Local']);
+ unset($backEnds['\OC\Files\Storage\Local']);
- $allowed_backends = explode(',', OCP\Config::getAppValue('files_external', 'user_mounting_backends', ''));
- foreach ($backends as $backend => $null) {
- if (!in_array($backend, $allowed_backends)) {
- unset($backends[$backend]);
+ $allowedBackEnds = explode(',', OCP\Config::getAppValue('files_external', 'user_mounting_backends', ''));
+ foreach ($backEnds as $backend => $null) {
+ if (!in_array($backend, $allowedBackEnds)) {
+ unset($backEnds[$backend]);
}
}
- return $backends;
+ return $backEnds;
}
/**
@@ -304,18 +246,23 @@ class OC_Mount_Config {
$mount['options'] = self::decryptPasswords($mount['options']);
// 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));
+
+ $config = array(
+ 'class' => $mount['class'],
+ 'mountpoint' => $mountPoint,
+ 'backend' => $backends[$mount['class']]['backend'],
+ 'options' => $mount['options'],
+ 'applicable' => array('groups' => array($group), 'users' => array()),
+ 'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
+ );
+ $hash = self::makeConfigHash($config);
+ // If an existing config exists (with same class, mountpoint and options)
+ if (isset($system[$hash])) {
+ // add the groups into that config
+ $system[$hash]['applicable']['groups']
+ = array_merge($system[$hash]['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()),
- 'status' => self::getBackendStatus($mount['class'], $mount['options'])
- );
+ $system[$hash] = $config;
}
}
}
@@ -330,23 +277,27 @@ class OC_Mount_Config {
$mount['options'] = self::decryptPasswords($mount['options']);
// 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));
+ $config = array(
+ 'class' => $mount['class'],
+ 'mountpoint' => $mountPoint,
+ 'backend' => $backends[$mount['class']]['backend'],
+ 'options' => $mount['options'],
+ 'applicable' => array('groups' => array(), 'users' => array($user)),
+ 'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
+ );
+ $hash = self::makeConfigHash($config);
+ // If an existing config exists (with same class, mountpoint and options)
+ if (isset($system[$hash])) {
+ // add the users into that config
+ $system[$hash]['applicable']['users']
+ = array_merge($system[$hash]['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)),
- 'status' => self::getBackendStatus($mount['class'], $mount['options'])
- );
+ $system[$hash] = $config;
}
}
}
}
- return $system;
+ return array_values($system);
}
/**
@@ -356,7 +307,7 @@ class OC_Mount_Config {
*/
public static function getPersonalMountPoints() {
$mountPoints = self::readData(true);
- $backends = self::getBackends();
+ $backEnds = self::getBackends();
$uid = OCP\User::getUser();
$personal = array();
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
@@ -366,12 +317,13 @@ class OC_Mount_Config {
$mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
- // Remove '/uid/files/' from mount point
- $personal[substr($mountPoint, strlen($uid) + 8)] = array(
+ $personal[] = array(
'class' => $mount['class'],
- 'backend' => $backends[$mount['class']]['backend'],
- 'configuration' => $mount['options'],
- 'status' => self::getBackendStatus($mount['class'], $mount['options'])
+ // Remove '/uid/files/' from mount point
+ 'mountpoint' => substr($mountPoint, strlen($uid) + 8),
+ 'backend' => $backEnds[$mount['class']]['backend'],
+ 'options' => $mount['options'],
+ 'status' => self::getBackendStatus($mount['class'], $mount['options'], true)
);
}
}
@@ -384,7 +336,7 @@ class OC_Mount_Config {
* @param array $options backend configuration options
* @return bool true if the connection succeeded, false otherwise
*/
- private static function getBackendStatus($class, $options) {
+ private static function getBackendStatus($class, $options, $isPersonal) {
if (self::$skipTest) {
return true;
}
@@ -394,7 +346,7 @@ class OC_Mount_Config {
if (class_exists($class)) {
try {
$storage = new $class($options);
- return $storage->test();
+ return $storage->test($isPersonal);
} catch (Exception $exception) {
\OCP\Util::logException('files_external', $exception);
return false;
@@ -461,7 +413,7 @@ class OC_Mount_Config {
$mountPoints[$mountType] = $mount;
}
self::writeData($isPersonal, $mountPoints);
- return self::getBackendStatus($class, $classOptions);
+ return self::getBackendStatus($class, $classOptions, $isPersonal);
}
/**
@@ -596,54 +548,91 @@ class OC_Mount_Config {
}
/**
- * check if smbclient is installed
+ * check dependencies
*/
- public static function checksmbclient() {
- if(function_exists('shell_exec')) {
- $output=shell_exec('command -v smbclient 2> /dev/null');
- return !empty($output);
- }else{
- return false;
+ public static function checkDependencies() {
+ $dependencies = array();
+ foreach (OC_Mount_Config::$backends as $class => $backend) {
+ if (isset($backend['has_dependencies']) and $backend['has_dependencies'] === true) {
+ $result = $class::checkDependencies();
+ if ($result !== true) {
+ if (!is_array($result)) {
+ $result = array($result);
+ }
+ foreach ($result as $key => $value) {
+ if (is_numeric($key)) {
+ OC_Mount_Config::addDependency($dependencies, $value, $backend['backend']);
+ } else {
+ OC_Mount_Config::addDependency($dependencies, $key, $backend['backend'], $value);
+ }
+ }
+ }
+ }
+ }
+
+ if (count($dependencies) > 0) {
+ return OC_Mount_Config::generateDependencyMessage($dependencies);
}
+ return '';
}
- /**
- * check if php-ftp is installed
- */
- public static function checkphpftp() {
- if(function_exists('ftp_login')) {
- return true;
- }else{
- return false;
+ private static function addDependency(&$dependencies, $module, $backend, $message=null) {
+ if (!isset($dependencies[$module])) {
+ $dependencies[$module] = array();
+ }
+
+ if ($message === null) {
+ $dependencies[$module][] = $backend;
+ } else {
+ $dependencies[$module][] = array('backend' => $backend, 'message' => $message);
}
}
- /**
- * check if curl is installed
- */
- public static function checkcurl() {
- return function_exists('curl_init');
+ private static function generateDependencyMessage($dependencies) {
+ $l = new \OC_L10N('files_external');
+ $dependencyMessage = '';
+ foreach ($dependencies as $module => $backends) {
+ $dependencyGroup = array();
+ foreach ($backends as $backend) {
+ if (is_array($backend)) {
+ $dependencyMessage .= ' ' . $l->t('Note: ') . $backend['message'];
+ } else {
+ $dependencyGroup[] = $backend;
+ }
+ }
+
+ if (count($dependencyGroup) > 0) {
+ $backends = '';
+ for ($i = 0; $i < count($dependencyGroup); $i++) {
+ if ($i > 0 && $i === count($dependencyGroup) - 1) {
+ $backends .= $l->t(' and ');
+ } elseif ($i > 0) {
+ $backends .= ', ';
+ }
+ $backends .= '' . $dependencyGroup[$i] . '';
+ }
+ $dependencyMessage .= ' ' . OC_Mount_Config::getSingleDependencyMessage($l, $module, $backends);
+ }
+ }
+ return $dependencyMessage;
}
/**
- * check dependencies
+ * Returns a dependency missing message
+ * @param $l OC_L10N
+ * @param $module string
+ * @param $backend string
+ * @return string
*/
- public static function checkDependencies() {
- $l= new OC_L10N('files_external');
- $txt='';
- if (!OC_Util::runningOnWindows()) {
- if(!OC_Mount_Config::checksmbclient()) {
- $txt.=$l->t('Warning: "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.').' ';
- }
- }
- if(!OC_Mount_Config::checkphpftp()) {
- $txt.=$l->t('Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.').' ';
+ private static function getSingleDependencyMessage($l, $module, $backend) {
+ switch (strtolower($module)) {
+ case 'curl':
+ return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend);
+ case 'ftp':
+ return $l->t('Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend);
+ default:
+ return $l->t('Note: "%s" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.', array($module, $backend));
}
- if(!OC_Mount_Config::checkcurl()) {
- $txt.=$l->t('Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it.').' ';
- }
-
- return $txt;
}
/**
@@ -712,4 +701,20 @@ class OC_Mount_Config {
$cipher->setKey(\OCP\Config::getSystemValue('passwordsalt'));
return $cipher;
}
+
+ /**
+ * Computes a hash based on the given configuration.
+ * This is mostly used to find out whether configurations
+ * are the same.
+ */
+ private static function makeConfigHash($config) {
+ $data = json_encode(
+ array(
+ 'c' => $config['class'],
+ 'm' => $config['mountpoint'],
+ 'o' => $config['options']
+ )
+ );
+ return hash('md5', $data);
+ }
}
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 0214e18020c3923bb98d052650aaf221fe80ac91..38de3360f2b40c348427e5c15a04774ebd67a33f 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -311,4 +311,15 @@ class Dropbox extends \OC\Files\Storage\Common {
return true;
}
+ /**
+ * check if curl is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('curl_init')) {
+ return true;
+ } else {
+ return array('curl');
+ }
+ }
+
}
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index 00bf7a189cebabba35e76880e8aec7b69edf8b6c..b3f8b1444ae5d599de0ba504f8d2689adde0ca81 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -119,4 +119,16 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
unlink($tmpFile);
}
}
+
+ /**
+ * check if php-ftp is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('ftp_login')) {
+ return(true);
+ } else {
+ return array('ftp');
+ }
+ }
+
}
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 35457f6852841dec9e55621c245d0526e4b6f49d..56c0d451651b15c0f59d6e80cf9303d5c8b15bcd 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -586,4 +586,15 @@ class Google extends \OC\Files\Storage\Common {
return false;
}
+ /**
+ * check if curl is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('curl_init')) {
+ return true;
+ } else {
+ return array('curl');
+ }
+ }
+
}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index f3f3b3ed7f39b55e8b9fc30d628ab1c64747f1ce..b1d355323d9a078df9948f94367c0dc91ad6abb0 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -134,4 +134,18 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
}
return $lastCtime;
}
+
+ /**
+ * check if smbclient is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('shell_exec')) {
+ $output=shell_exec('command -v smbclient 2> /dev/null');
+ if (!empty($output)) {
+ return true;
+ }
+ }
+ return array('smbclient');
+ }
+
}
diff --git a/apps/files_external/lib/smb_oc.php b/apps/files_external/lib/smb_oc.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c79c06c5df13863b68d295c4466f5d04234ae87
--- /dev/null
+++ b/apps/files_external/lib/smb_oc.php
@@ -0,0 +1,93 @@
+
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+require_once __DIR__ . '/../3rdparty/smb4php/smb.php';
+
+class SMB_OC extends \OC\Files\Storage\SMB {
+ private $username_as_share;
+
+ public function __construct($params) {
+ if (isset($params['host']) && \OC::$session->exists('smb-credentials')) {
+ $host=$params['host'];
+ $this->username_as_share = ($params['username_as_share'] === 'true');
+
+ $params_auth = \OC::$session->get('smb-credentials');
+ $user = \OC::$session->get('loginname');
+ $password = $params_auth['password'];
+
+ $root=isset($params['root'])?$params['root']:'/';
+ $share = '';
+
+ if ($this->username_as_share) {
+ $share = '/'.$user;
+ } elseif (isset($params['share'])) {
+ $share = $params['share'];
+ } else {
+ throw new \Exception();
+ }
+ parent::__construct(array(
+ "user" => $user,
+ "password" => $password,
+ "host" => $host,
+ "share" => $share,
+ "root" => $root
+ ));
+ } else {
+ throw new \Exception();
+ }
+ }
+
+ public static function login( $params ) {
+ \OC::$session->set('smb-credentials', $params);
+ }
+
+ public function isSharable($path) {
+ return false;
+ }
+
+ public function test($isPersonal = true) {
+ if ($isPersonal) {
+ if ($this->stat('')) {
+ return true;
+ }
+ return false;
+ } else {
+ $smb = new \smb();
+ $pu = $smb->parse_url($this->constructUrl(''));
+
+ // Attempt to connect anonymously
+ $pu['user'] = '';
+ $pu['pass'] = '';
+
+ // Share cannot be checked if dynamic
+ if ($this->username_as_share) {
+ if ($smb->look($pu)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (!$pu['share']) {
+ return false;
+ }
+
+ // The following error messages are expected due to anonymous login
+ $regexp = array(
+ '(NT_STATUS_ACCESS_DENIED)' => 'skip'
+ ) + $smb->getRegexp();
+
+ if ($smb->client("-d 0 " . escapeshellarg('//' . $pu['host'] . '/' . $pu['share']) . " -c exit", $pu, $regexp)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index 7a56fcfc8b773fcf77b8c8e1769f5ff584a2be60..a202d3843cb212925b5ba82b5cea18064b653857 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -65,6 +65,18 @@ class Swift extends \OC\Files\Storage\Common {
return $path;
}
+ const SUBCONTAINER_FILE='.subcontainers';
+
+ /**
+ * translate directory path to container name
+ * @param string $path
+ * @return string
+ */
+ private function getContainerName($path) {
+ $path=trim(trim($this->root, '/') . "/".$path, '/.');
+ return str_replace('/', '\\', $path);
+ }
+
/**
* @param string $path
*/
@@ -251,6 +263,10 @@ class Swift extends \OC\Files\Storage\Common {
$mtime = $object->extra_headers['X-Object-Meta-Timestamp'];
}
+ if (!empty($mtime)) {
+ $mtime = floor($mtime);
+ }
+
$stat = array();
$stat['size'] = $object->content_length;
$stat['mtime'] = $mtime;
@@ -370,7 +386,7 @@ class Swift extends \OC\Files\Storage\Common {
'X-Object-Meta-Timestamp' => $mtime
)
);
- return $object->Update($settings);
+ return $object->UpdateMetadata($settings);
} else {
$object = $this->container->DataObject();
if (is_null($mtime)) {
@@ -486,4 +502,16 @@ class Swift extends \OC\Files\Storage\Common {
), $tmpFile);
unlink($tmpFile);
}
+
+ /**
+ * check if curl is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('curl_init')) {
+ return true;
+ } else {
+ return array('curl');
+ }
+ }
+
}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 279ae716935994411e889bbadef270ecf362ef97..dc98dcfb8081189b81526df31f125ce4b4dbf87d 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -267,7 +267,7 @@ class DAV extends \OC\Files\Storage\Common {
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, $this->user . ':' . $this->password);
- curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . str_replace(' ', '%20', $target));
+ curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . $this->encodePath($target));
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_INFILE, $source); // file pointer
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($path));
@@ -385,5 +385,16 @@ class DAV extends \OC\Files\Storage\Common {
return false;
}
}
+
+ /**
+ * check if curl is installed
+ */
+ public static function checkDependencies() {
+ if (function_exists('curl_init')) {
+ return true;
+ } else {
+ return array('curl');
+ }
+ }
}
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index de44d3c86442180402458abc9be3dac82c6b94d5..0d04e35e7fef4a38d9c2bdf4a6ca64c9c1da86ee 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -1,149 +1,152 @@
-
-
+
class="hidden">
+ t('Allow users to mount the following external storage')); ?>
+ $backend): ?>
+ />
+
+
+
+