]> source.dussan.org Git - nextcloud-server.git/commitdiff
fixes LDAP Wizard forgetting groups on select with search 16051/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Fri, 21 Jun 2019 12:09:31 +0000 (14:09 +0200)
committerBackportbot <backportbot-noreply@rullzer.com>
Mon, 24 Jun 2019 06:12:50 +0000 (06:12 +0000)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/js/wizard/wizardFilterOnType.js
apps/user_ldap/js/wizard/wizardTabAbstractFilter.js
apps/user_ldap/js/wizard/wizardTabGeneric.js

index bb1871023a298c9f03370b39bbe25c73986f1f02..f792b1a99a2d755fb34f36d9403941cbe6000642 100644 (file)
@@ -21,7 +21,6 @@ OCA = OCA || {};
                init: function($select, $textInput) {
                        this.$select = $select;
                        this.$textInput = $textInput;
-                       this.updateOptions();
                        this.lastSearch = '';
 
                        var fity = this;
@@ -35,22 +34,6 @@ OCA = OCA || {};
                        });
                },
 
-               /**
-                * the options will be read in again. Should be called after a
-                * configuration switch.
-                */
-               updateOptions: function() {
-                       var options = [];
-                       this.$select.find('option').each(function() {
-                               options.push({
-                                               value: $(this).val(),
-                                               normalized: $(this).val().toLowerCase()
-                                       }
-                               );
-                       });
-                       this._options = options;
-               },
-
                /**
                 * the actual search or filter method
                 *
@@ -62,10 +45,12 @@ OCA = OCA || {};
                                return;
                        }
                        fity.lastSearch = filterVal;
-                       fity.$select.empty();
-                       $.each(fity._options, function() {
-                               if(!filterVal || this.normalized.indexOf(filterVal) > -1) {
-                                       fity.$select.append($('<option>').val(this.value).text(this.value));
+
+                       fity.$select.find('option').each(function() {
+                               if(!filterVal || $(this).val().toLowerCase().indexOf(filterVal) > -1) {
+                                       $(this).removeAttr('hidden')
+                               } else {
+                                       $(this).attr('hidden', 'hidden');
                                }
                        });
                        delete(fity.runID);
index 0131816e4eeb444ebab7d2f2e3dc7691d922acb0..8312ad909ecbefde10941bcaac1b8b1baf581d15 100644 (file)
@@ -170,7 +170,7 @@ OCA = OCA || {};
                        } else {
                                var $element = $(this.tabID).find('.ldapGroupListSelected');
                                this.equipMultiSelect($element, groups);
-                               this.updateFilterOnType('selected');
+                               this.updateFilterOnType();
                        }
                },
 
@@ -212,10 +212,8 @@ OCA = OCA || {};
 
                /**
                 * updates (creates, if necessary) filterOnType instances
-                *
-                * @param {string} [only] - if only one search index should be updated
                 */
-               updateFilterOnType: function(only) {
+               updateFilterOnType: function() {
                        if(_.isUndefined(this.filterOnType)) {
                                this.filterOnType = [];
 
@@ -227,13 +225,6 @@ OCA = OCA || {};
                                this.filterOnType.push(this.foTFactory.get(
                                        $selectedGroups, $(this.tabID).find('.ldapManyGroupsSearch')
                                ));
-                       } else {
-                               if(_.isUndefined(only) || only.toLowerCase() === 'available')  {
-                                       this.filterOnType[0].updateOptions();
-                               }
-                               if(_.isUndefined(only) || only.toLowerCase() === 'selected')  {
-                                       this.filterOnType[1].updateOptions();
-                               }
                        }
                },
 
@@ -282,7 +273,7 @@ OCA = OCA || {};
                                                // we reimplement it here to update the filter index
                                                // for groups. Maybe we can isolate it?
                                                if(methodName === 'setGroups') {
-                                                       view.updateFilterOnType('selected');
+                                                       view.updateFilterOnType();
                                                }
                                        }
                                }
@@ -312,7 +303,6 @@ OCA = OCA || {};
                                        var selected = view.configModel.configuration[view.getGroupsItem().keyName];
                                        var available = $(payload.data).not(selected).get();
                                        view.equipMultiSelect($element, available);
-                                       view.updateFilterOnType('available');
                                        $(view.tabID).find(".ldapManyGroupsSupport").removeClass('hidden');
                                        view.getGroupsItem().$element.multiselect({classes: view.multiSelectPluginClass + ' forceHidden'});
                                        view.isComplexGroupChooser = true;
@@ -356,12 +346,22 @@ OCA = OCA || {};
                 */
                onSelectGroup: function() {
                        var $available = $(this.tabID).find('.ldapGroupListAvailable');
+                       if(!$available.val()) {
+                               return; // no selection – nothing to do
+                       }
+
                        var $selected = $(this.tabID).find('.ldapGroupListSelected');
                        var selected = $.map($selected.find('option'), function(e) { return e.value; });
 
-                       this._saveGroups(selected.concat($available.val()));
-                       $available.find('option:selected').prependTo($selected);
-                       this.updateFilterOnType('available');  // selected groups are not updated yet
+                       let selectedGroups = [];
+                       $available.find('option:selected:visible').each(function() {
+                               selectedGroups.push($(this).val());
+                       });
+
+                       this._saveGroups(selected.concat(selectedGroups));
+                       $available.find('option:selected:visible').prependTo($selected);
+                       this.updateFilterOnType();  // selected groups are not updated yet
+                       $available.find('option:selected').prop("selected", false);
                },
 
                /**
@@ -370,11 +370,12 @@ OCA = OCA || {};
                onDeselectGroup: function() {
                        var $available = $(this.tabID).find('.ldapGroupListAvailable');
                        var $selected = $(this.tabID).find('.ldapGroupListSelected');
-                       var selected = $.map($selected.find('option:not(:selected)'), function(e) { return e.value; });
+                       var selected = $.map($selected.find('option:not(:selected:visible)'), function(e) { return e.value; });
 
                        this._saveGroups(selected);
-                       $selected.find('option:selected').appendTo($available);
-                       this.updateFilterOnType('available');  // selected groups are not updated yet
+                       $selected.find('option:selected:visible').appendTo($available);
+                       this.updateFilterOnType();  // selected groups are not updated yet
+                       $selected.find('option:selected').prop("selected", false);
                }
 
        });
index 9997d6e1b04c882070be52aff9a173950e24d7bd..7b0df4992d63d700a8768b3e0c83b7552ac6ee1a 100644 (file)
@@ -228,10 +228,12 @@ OCA = OCA || {};
                 * @param {Array} options
                 */
                equipMultiSelect: function($element, options) {
-                       $element.empty();
-                       for (var i in options) {
-                               var name = options[i];
-                               $element.append($('<option>').val(name).text(name).attr('title', name));
+                       if($element.find('option').length === 0) {
+                               $element.empty();
+                               for (var i in options) {
+                                       var name = options[i];
+                                       $element.append($('<option>').val(name).text(name).attr('title', name));
+                               }
                        }
                        if(!$element.hasClass('ldapGroupList')) {
                                $element.multiselect('refresh');