diff --git a/apps/files_external/3rdparty/select2/.gitignore b/apps/files_external/3rdparty/select2/.gitignore
deleted file mode 100644
index c6ef2182bdc8..000000000000
--- a/apps/files_external/3rdparty/select2/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.idea
-
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 00793a614c20..72554cd6ba94 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -41,7 +41,7 @@ OC.MountConfig={
}
});
if ($('#externalStorage').data('admin') === true) {
- var multiselect = $(tr).find('.chzn-select').val();
+ var multiselect = $(tr).find('.applicableUsers').select2('val');
if (multiselect == null) {
return false;
}
@@ -161,8 +161,133 @@ OC.MountConfig={
};
$(document).ready(function() {
- $('.chzn-select').chosen();
+ //initialize hidden input field with list of users and groups
+ $('#externalStorage').find('tr:not(#addMountPoint)').each(function(i,tr) {
+ var applicable = $(tr).find('.applicable');
+ if (applicable.length > 0) {
+ var groups = applicable.data('applicable-groups');
+ var groupsId = [];
+ $.each(groups, function () {
+ groupsId.push(this+"(group)");
+ });
+ var users = applicable.data('applicable-users');
+ $(tr).find('.applicableUsers').val(groupsId.concat(users).join(','));
+ }
+ });
+ //TODO load current applicable users for an existing mount
+ var userListLimit = 10;
+ $('.applicableUsers').select2({
+ placeholder: t('files_external', 'No user or group'),
+ allowClear: true,
+ multiple: true,
+ //minimumInputLength: 2,
+ ajax: {
+ url: OC.generateUrl('/settings/ajax/userlist'),
+ dataType: 'json',
+ quietMillis: 100,
+ data: function (term, page) { // page is the one-based page number tracked by Select2
+ return {
+ filter: term, //search term
+ limit: userListLimit, // page size
+ offset: userListLimit*(page-1), // page number starts with 0
+ };
+ },
+ results: function (data, page) {
+ if (data.status === "success") {
+ var results = [];
+ results.push({name:'all', displayname:t('files_external', 'All Users')});
+
+ var groups = [];
+ var userObjects = [];
+ $.each(data.data, function(i,e){
+ if (e.groups && groups.indexOf(e.groups) < 0) {
+ groups.push(e.groups);
+ }
+ e.type = 'user';
+ userObjects.push(e);
+ });
+ var groupObjects = [];
+ $.each(groups, function(i,e){
+ groupObjects.push({name:e+'(group)', displayname:e, type:'group'});
+ });
+ if (groupObjects.length > 0) {
+ results.push({displayname:t('files_external', 'Groups'), children:groupObjects});
+ }
+
+ if (userObjects.length > 0) {
+ results.push({displayname:t('files_external', 'Users'), children:userObjects});
+ }
+
+ var more = data.data.length >= userListLimit;
+ return {results: results, more: more};
+ } else {
+ //FIXME add error handling
+ }
+ }
+ },
+ initSelection: function(element, callback) {
+
+ var promises = [];
+
+ var results = [];
+
+ $(element.val().split(",")).each(function (i,userId) {
+ var def = new $.Deferred();
+ promises.push(def.promise());
+
+ var pos = userId.indexOf('(group)');
+ if (pos !== -1) {
+ //add as group
+ results.push({name:userId, displayname:userId.substr(0, pos)+' '+t('files_external', '(group)')});
+ def.resolve();
+ } else {
+ $.ajax(OC.generateUrl('/settings/ajax/userlist'), {
+ data: {
+ filter: userId
+ },
+ dataType: "json"
+ }).done(function(data) {
+ if (data.status === "success") {
+ if (data.data.length > 0) {
+ var user = data.data[0];
+ user.type = 'user';
+ results.push(user);
+ }
+ def.resolve();
+ } else {
+ //FIXME add error handling
+ }
+ });
+ }
+ });
+ $.when.apply(undefined, promises).then(function(){
+ if (results.length > 0) {
+ callback(results);
+ } else {
+ callback([{name:'all', displayname:t('files_external', 'All Users')}]);
+ }
+ });
+ },
+ id: function(element) {
+ return element.name;
+ },
+ //TODO add avatar image to results
+ formatResult: function (element) {
+ var markup = ''+element.displayname+'';
+ return markup;
+ },
+ formatSelection: function (element) {
+ if (element.type === 'group') {
+ return ''+element.displayname+' '+t('files_external', '(group)')+'';
+ } else {
+ return ''+element.displayname+'';
+ }
+ },
+ //dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
+ escapeMarkup: function (m) { return m; } // we do not want to escape markup since we are displaying html in results
+ });
+
$('#externalStorage').on('change', '#selectBackend', function() {
var tr = $(this).parent().parent();
$('#externalStorage tbody').append($(tr).clone());
@@ -204,11 +329,6 @@ $(document).ready(function() {
return false;
}
});
- // Reset chosen
- var chosen = $(tr).find('.applicable select');
- chosen.parent().find('div').remove();
- chosen.removeAttr('id').removeClass('chzn-done').css({display:'inline-block'});
- chosen.chosen();
$(tr).find('td').last().attr('class', 'remove');
$(tr).find('td').last().removeAttr('style');
$(tr).removeAttr('id');
diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php
index 5b62b542200a..ae9c0617400d 100644
--- a/apps/files_external/settings.php
+++ b/apps/files_external/settings.php
@@ -23,9 +23,13 @@
OC_Util::checkAdminUser();
OCP\Util::addScript('files_external', 'settings');
-OCP\Util::addscript('3rdparty', 'chosen/chosen.jquery.min');
OCP\Util::addStyle('files_external', 'settings');
-OCP\Util::addStyle('3rdparty', 'chosen/chosen');
+
+OCP\Util::addScript('files_external', '../3rdparty/select2/select2');
+OCP\Util::addStyle('files_external', '../3rdparty/select2/select2');
+
+//OCP\Util::addscript('3rdparty', 'chosen/chosen.jquery.min');
+//OCP\Util::addStyle('3rdparty', 'chosen/chosen');
$backends = OC_Mount_Config::getBackends();
$personal_backends = array();
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index df80ed109931..1ca9abc13372 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -87,9 +87,10 @@
print_unescaped(json_encode($mount['applicable']['groups'])); ?>'
data-applicable-users=''>
-