diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 92091f4213..878e4cb215 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -25,7 +25,7 @@ if($doBreadcrumb) {
}
$breadcrumbNav = new OCP\Template( "files", "part.breadcrumb", "" );
- $breadcrumbNav->assign( "breadcrumb", $breadcrumb );
+ $breadcrumbNav->assign( "breadcrumb", $breadcrumb, false );
$data['breadcrumb'] = $breadcrumbNav->fetchPage();
}
diff --git a/apps/files/index.php b/apps/files/index.php
index 54c7416780..a88e1f0074 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -36,7 +36,7 @@ if(!isset($_SESSION['timezone'])) {
}
OCP\App::setActiveNavigationEntry( 'files_index' );
// Load the files
-$dir = isset( $_GET['dir'] ) ? rawurldecode(stripslashes($_GET['dir'])) : '';
+$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
// Redirect if directory does not exist
if(!\OC\Files\Filesystem::is_dir($dir.'/')) {
header('Location: '.$_SERVER['SCRIPT_NAME'].'');
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 40dd9f14a6..80b9c01f83 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -70,34 +70,43 @@ var FileActions = {
}
parent.children('a.name').append('');
var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
- var actionHandler = function (parent, action, event) {
+
+ var actionHandler = function (event) {
event.stopPropagation();
event.preventDefault();
- FileActions.currentFile = parent;
- file = FileActions.getCurrentFile();
- action(file);
+
+ FileActions.currentFile = event.data.elem;
+ var file = FileActions.getCurrentFile();
+
+ event.data.actionFunc(file);
};
- for (name in actions) {
+
+ $.each(actions, function (name, action) {
// NOTE: Temporary fix to prevent rename action in root of Shared directory
if (name === 'Rename' && $('#dir').val() === '/Shared') {
- continue;
+ return true;
}
- if ((name === 'Download' || actions[name] !== defaultAction) && name !== 'Delete') {
+
+ if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') {
var img = FileActions.icons[name];
if (img.call) {
img = img(file);
}
var html = '';
if (img) {
- html += ' ';
+ html += '
';
}
html += t('files', name) + '';
+
var element = $(html);
element.data('action', name);
- element.click(actionHandler.bind(null, parent, actions[name]));
+ //alert(element);
+ element.on('click',{a:null, elem:parent, actionFunc:actions[name]},actionHandler);
parent.find('a.name>span.fileactions').append(element);
}
- }
+
+ });
+
if (actions['Delete']) {
var img = FileActions.icons['Delete'];
if (img.call) {
@@ -114,7 +123,7 @@ var FileActions = {
element.append($('
'));
}
element.data('action', actions['Delete']);
- element.click(actionHandler.bind(null, parent, actions['Delete']));
+ element.on('click',{a:null, elem:parent, actionFunc:actions['Delete']},actionHandler);
parent.parent().children().last().append(element);
}
},
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index a5550dc992..5674206632 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -151,6 +151,9 @@ var FileList={
event.stopPropagation();
event.preventDefault();
var newname=input.val();
+ if (Files.containsInvalidCharacters(newname)) {
+ return false;
+ }
if (newname != name) {
if (FileList.checkName(name, newname, false)) {
newname = name;
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 4307650d4f..3b33fc1978 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -25,6 +25,18 @@ Files={
delete uploadingFiles[index];
});
procesSelection();
+ },
+ containsInvalidCharacters:function (name) {
+ var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
+ for (var i = 0; i < invalid_characters.length; i++) {
+ if (name.indexOf(invalid_characters[i]) != -1) {
+ $('#notification').text(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
+ $('#notification').fadeIn();
+ return true;
+ }
+ }
+ $('#notification').fadeOut();
+ return false;
}
};
$(document).ready(function() {
@@ -505,9 +517,7 @@ $(document).ready(function() {
$(this).append(input);
input.focus();
input.change(function(){
- if(type != 'web' && $(this).val().indexOf('/')!=-1){
- $('#notification').text(t('files','Invalid name, \'/\' is not allowed.'));
- $('#notification').fadeIn();
+ if (type != 'web' && Files.containsInvalidCharacters($(this).val())) {
return;
} else if( type == 'folder' && $('#dir').val() == '/' && $(this).val() == 'Shared') {
$('#notification').text(t('files','Invalid folder name. Usage of "Shared" is reserved by Owncloud'));
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
index ead9ab1ed7..ba1432c1b8 100644
--- a/apps/files/templates/part.breadcrumb.php
+++ b/apps/files/templates/part.breadcrumb.php
@@ -1,6 +1,7 @@
-