From 67292a534587e3490762aa5db9716517cab079fa Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Tue, 7 Oct 2014 16:29:06 +0200
Subject: [PATCH 01/21] add checkbox for experienced users to server tab
---
apps/user_ldap/css/settings.css | 9 +++++++++
apps/user_ldap/lib/configuration.php | 3 +++
apps/user_ldap/templates/part.wizard-server.php | 11 +++++++++++
3 files changed, 23 insertions(+)
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 3051cc8058e..48a8626ea9a 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -6,6 +6,7 @@
.tablerow {
display: table-row;
white-space: nowrap;
+ text-align: left;
}
.tablerow input, .tablerow textarea {
@@ -16,6 +17,10 @@
height: 15px;
}
+#ldap .tablerow label {
+ margin-left: 3px;
+}
+
.invisible {
visibility: hidden;
}
@@ -103,6 +108,10 @@
vertical-align: bottom;
}
+#ldap input[type=checkbox] {
+ width: 15px !important;
+}
+
select[multiple=multiple] + button {
height: 28px;
padding-top: 6px !important;
diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php
index 4cb00561b3f..75d3d5ea04d 100644
--- a/apps/user_ldap/lib/configuration.php
+++ b/apps/user_ldap/lib/configuration.php
@@ -69,6 +69,7 @@ class Configuration {
'ldapConfigurationActive' => false,
'ldapAttributesForUserSearch' => null,
'ldapAttributesForGroupSearch' => null,
+ 'ldapExperiencedAdmin' => false,
'homeFolderNamingRule' => null,
'hasPagedResultSupport' => false,
'hasMemberOfFilterSupport' => false,
@@ -391,6 +392,7 @@ class Configuration {
'last_jpegPhoto_lookup' => 0,
'ldap_nested_groups' => 0,
'ldap_paging_size' => 500,
+ 'ldap_experienced_admin' => 0,
);
}
@@ -444,6 +446,7 @@ class Configuration {
'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
'ldap_nested_groups' => 'ldapNestedGroups',
'ldap_paging_size' => 'ldapPagingSize',
+ 'ldap_experienced_admin' => 'ldapExperiencedAdmin'
);
return $array;
}
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index 422faad028b..b829c775ad0 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -69,6 +69,17 @@
+
+
+ t('I am familiar with LDAP?'));?>
+
+
+
+
+
From efd940133b759fb30e7d150fdc147e6a7e4faa28 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Tue, 7 Oct 2014 16:45:22 +0200
Subject: [PATCH 02/21] must be empty not auto
---
apps/user_ldap/appinfo/update.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 1e706ce869b..5fad23de4f6 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -19,7 +19,7 @@ foreach($configPrefixes as $config) {
'user_ldap', $config.'ldap_uuid_user_attribute', 'not existing');
if($state === 'non existing') {
$value = \OCP\Config::getAppValue(
- 'user_ldap', $config.'ldap_uuid_attribute', 'auto');
+ 'user_ldap', $config.'ldap_uuid_attribute', '');
\OCP\Config::setAppValue(
'user_ldap', $config.'ldap_uuid_user_attribute', $value);
\OCP\Config::setAppValue(
@@ -30,7 +30,7 @@ foreach($configPrefixes as $config) {
'user_ldap', $config.'ldap_expert_uuid_user_attr', 'not existing');
if($state === 'non existing') {
$value = \OCP\Config::getAppValue(
- 'user_ldap', $config.'ldap_expert_uuid_attr', 'auto');
+ 'user_ldap', $config.'ldap_expert_uuid_attr', '');
\OCP\Config::setAppValue(
'user_ldap', $config.'ldap_expert_uuid_user_attr', $value);
\OCP\Config::setAppValue(
From 3ff4c8e3fc5d6249b559b3cd1b4a01ba02bd5c34 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Tue, 7 Oct 2014 17:28:09 +0200
Subject: [PATCH 03/21] sets user filters to raw mode when marking user as
experienced
---
apps/user_ldap/js/experiencedAdmin.js | 59 +++++++++++++++++++++++++++
apps/user_ldap/js/settings.js | 6 +++
apps/user_ldap/settings.php | 1 +
3 files changed, 66 insertions(+)
create mode 100644 apps/user_ldap/js/experiencedAdmin.js
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
new file mode 100644
index 00000000000..2d500f301b0
--- /dev/null
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2014, Arthur Schiwon
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * controls behaviour depend on whether the admin is experienced in LDAP or not.
+ *
+ * @class
+ * @param {object} wizard the LDAP Wizard object
+ * @param {boolean} initialState whether the admin is experienced or not
+ */
+function ExperiencedAdmin(wizard, initialState) {
+ this.wizard = wizard;
+ this.isExperienced = false;
+}
+
+
+/**
+ * toggles whether the admin is an experienced one or not
+ *
+ * @param {boolean} whether the admin is experienced or not
+ */
+ExperiencedAdmin.prototype.toggle = function(isExperienced) {
+ this.isExperienced = isExperienced;
+ if(this.isExperienced) {
+ this.enableRawMode();
+ }
+};
+
+/**
+* answers whether the admin is an experienced one or not
+*
+* @return {boolean} whether the admin is experienced or not
+*/
+ExperiencedAdmin.prototype.isExperienced = function() {
+ return this.isExperienced;
+};
+
+/**
+ * switches all LDAP filters from Assisted to Raw mode.
+ */
+ExperiencedAdmin.prototype.enableRawMode = function () {
+ containers = {
+ 'toggleRawUserFilter' : '#rawGroupFilterContainer',
+ 'toggleRawLoginFilter': '#rawLoginFilterContainer',
+ 'toggleRawUserFilter' : '#rawUserFilterContainer'
+ };
+
+// containers.forEach(function(container, method) {
+ for(method in containers) {
+ if($(containers[method]).hasClass('invisible')) {
+ this.wizard[method]();
+ }
+ };
+
+
+};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index fd84ca1980b..5982d65ad6c 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -931,4 +931,10 @@ $(document).ready(function() {
LdapConfiguration.refreshConfig();
}
});
+
+ expAdminCB = $('#ldap_experienced_admin');
+ LdapWizard.admin = new ExperiencedAdmin(LdapWizard, expAdminCB.is(':checked'));
+ expAdminCB.change(function() {
+ LdapWizard.admin.toggle($(this).is(':checked'));
+ });
});
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index e7cdd0d926a..1e588b1cd85 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -26,6 +26,7 @@
OC_Util::checkAdminUser();
OCP\Util::addScript('user_ldap', 'ldapFilter');
+OCP\Util::addScript('user_ldap', 'experiencedAdmin');
OCP\Util::addScript('user_ldap', 'settings');
OCP\Util::addScript('core', 'jquery.multiselect');
OCP\Util::addStyle('user_ldap', 'settings');
From b6fc7f5599a08ab047e10775b4071514c7cd170d Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 11:38:39 +0200
Subject: [PATCH 04/21] Objectlasses, Groups and Attributes are now loaded only
in assisted mode and only once
---
apps/user_ldap/js/experiencedAdmin.js | 3 +-
apps/user_ldap/js/ldapFilter.js | 43 +++++++++++++++++++++++++--
apps/user_ldap/js/settings.js | 39 ++++++++++++++++++------
3 files changed, 72 insertions(+), 13 deletions(-)
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
index 2d500f301b0..96b4bcad6c9 100644
--- a/apps/user_ldap/js/experiencedAdmin.js
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -43,12 +43,11 @@ ExperiencedAdmin.prototype.isExperienced = function() {
*/
ExperiencedAdmin.prototype.enableRawMode = function () {
containers = {
- 'toggleRawUserFilter' : '#rawGroupFilterContainer',
+ 'toggleRawGroupFilter': '#rawGroupFilterContainer',
'toggleRawLoginFilter': '#rawLoginFilterContainer',
'toggleRawUserFilter' : '#rawUserFilterContainer'
};
-// containers.forEach(function(container, method) {
for(method in containers) {
if($(containers[method]).hasClass('invisible')) {
this.wizard[method]();
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index e9f60e7ba3c..cd03ff9b5bf 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -1,19 +1,30 @@
/* global LdapWizard */
-function LdapFilter(target) {
+function LdapFilter(target, determineModeCallback) {
this.locked = true;
this.target = false;
this.mode = LdapWizard.filterModeAssisted;
this.lazyRunCompose = false;
+ this.determineModeCallback = determineModeCallback;
+ this.foundFeatures = false;
+ this.activated = false;
if( target === 'User' ||
target === 'Login' ||
target === 'Group') {
this.target = target;
- this.determineMode();
}
}
+LdapFilter.prototype.activate = function() {
+ if(this.activated) {
+ return;
+ }
+ this.activated = true;
+
+ this.determineMode();
+}
+
LdapFilter.prototype.compose = function(callback) {
var action;
@@ -82,6 +93,7 @@ LdapFilter.prototype.determineMode = function() {
filter.mode + '« of type ' + typeof filter.mode);
}
filter.unlock();
+ filter.determineModeCallback(filter.mode);
},
function () {
//on error case get back to default i.e. Assisted
@@ -90,10 +102,17 @@ LdapFilter.prototype.determineMode = function() {
filter.mode = LdapWizard.filterModeAssisted;
}
filter.unlock();
+ filter.determineModeCallback(filter.mode);
}
);
};
+LdapFilter.prototype.setMode = function(mode) {
+ if(mode === LdapWizard.filterModeAssisted || mode === LdapWizard.filterModeRaw) {
+ this.mode = mode;
+ }
+}
+
LdapFilter.prototype.unlock = function() {
this.locked = false;
if(this.lazyRunCompose) {
@@ -101,3 +120,23 @@ LdapFilter.prototype.unlock = function() {
this.compose();
}
};
+
+LdapFilter.prototype.findFeatures = function() {
+ if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) {
+ this.foundFeatures = true;
+ if(this.target === 'User') {
+ objcEl = 'ldap_userfilter_objectclass';
+ avgrEl = 'ldap_userfilter_groups';
+ } else if (this.target === 'Group') {
+ objcEl = 'ldap_groupfilter_objectclass';
+ avgrEl = 'ldap_groupfilter_groups';
+ } else if (this.target === 'Login') {
+ LdapWizard.findAttributes();
+ return;
+ } else {
+ return false;
+ }
+ LdapWizard.findObjectClasses(objcEl, this.target);
+ LdapWizard.findAvailableGroups(avgrEl, this.target + "s");
+ }
+}
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 5982d65ad6c..cf7223d3fa0 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -530,23 +530,21 @@ var LdapWizard = {
isConfigurationActiveControlLocked: true,
init: function() {
+ LdapWizard.instantiateFilters();
LdapWizard.basicStatusCheck();
LdapWizard.functionalityCheck();
LdapWizard.isConfigurationActiveControlLocked = false;
},
initGroupFilter: function() {
- LdapWizard.groupFilter = new LdapFilter('Group');
- LdapWizard.findObjectClasses('ldap_groupfilter_objectclass', 'Group');
- LdapWizard.findAvailableGroups('ldap_groupfilter_groups', 'Groups');
+ LdapWizard.groupFilter.activate();
LdapWizard.countGroups();
},
/** init login filter tab section **/
initLoginFilter: function() {
- LdapWizard.loginFilter = new LdapFilter('Login');
- LdapWizard.findAttributes();
+ LdapWizard.loginFilter.activate();
},
postInitLoginFilter: function() {
@@ -571,15 +569,30 @@ var LdapWizard = {
/** init user filter tab section **/
+ instantiateFilters: function() {
+ delete LdapWizard.userFilter;
+ LdapWizard.userFilter = new LdapFilter('User', function(mode) {
+ LdapWizard.userFilter.findFeatures();
+ });
+
+ delete LdapWizard.loginFilter;
+ LdapWizard.loginFilter = new LdapFilter('Login', function(mode) {
+ LdapWizard.loginFilter.findFeatures();
+ });
+
+ delete LdapWizard.groupFilter;
+ LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
+ LdapWizard.groupFilter.findFeatures();
+ });
+ },
+
userFilterObjectClassesHasRun: false,
userFilterAvailableGroupsHasRun: false,
initUserFilter: function() {
LdapWizard.userFilterObjectClassesHasRun = false;
LdapWizard.userFilterAvailableGroupsHasRun = false;
- LdapWizard.userFilter = new LdapFilter('User');
- LdapWizard.findObjectClasses('ldap_userfilter_objectclass', 'User');
- LdapWizard.findAvailableGroups('ldap_userfilter_groups', 'Users');
+ LdapWizard.userFilter.activate();
},
postInitUserFilter: function() {
@@ -713,9 +726,12 @@ var LdapWizard = {
},
toggleRawFilter: function(container, moc, mg, stateVar, modeKey) {
+ var isUser = moc.indexOf('user') >= 0;
+ var filter = isUser ? LdapWizard.userFilter : LdapWizard.groupFilter;
//moc = multiselect objectclass
//mg = mutliselect groups
if($(container).hasClass('invisible')) {
+ filter.setMode(LdapWizard.filterModeRaw);
$(container).removeClass('invisible');
$(moc).multiselect('disable');
if($(mg).multiselect().attr('disabled') == 'disabled') {
@@ -726,11 +742,13 @@ var LdapWizard = {
$(mg).multiselect('disable');
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeRaw);
} else {
+ filter.setMode(LdapWizard.filterModeAssisted);
+ filter.findFeatures();
$(container).addClass('invisible');
$(mg).multiselect(LdapWizard[stateVar]);
$(moc).multiselect('enable');
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
- if(moc.indexOf('user') >= 0) {
+ if(isUser) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
} else {
@@ -764,6 +782,8 @@ var LdapWizard = {
property = false;
mode = LdapWizard.filterModeAssisted;
}
+ LdapWizard.loginFilter.setMode(mode);
+ LdapWizard.loginFilter.findFeatures();
$('#ldap_loginfilter_attributes').multiselect(action);
$('#ldap_loginfilter_email').prop('disabled', property);
$('#ldap_loginfilter_username').prop('disabled', property);
@@ -837,6 +857,7 @@ $(document).ready(function() {
LdapWizard.initMultiSelect($('#ldap_groupfilter_objectclass'),
'ldap_groupfilter_objectclass',
t('user_ldap', 'Select object classes'));
+
$('.lwautosave').change(function() { LdapWizard.save(this); });
$('#toggleRawUserFilter').click(LdapWizard.toggleRawUserFilter);
$('#toggleRawGroupFilter').click(LdapWizard.toggleRawGroupFilter);
From 7ba787e649de83da03ea1809d54d74fedc31a9ea Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 13:06:18 +0200
Subject: [PATCH 05/21] user and group counts are only upated on demand in
experienced mode
---
apps/user_ldap/css/settings.css | 4 ++
apps/user_ldap/js/experiencedAdmin.js | 46 +++++++++++++++++--
apps/user_ldap/js/ldapFilter.js | 15 +++++-
apps/user_ldap/js/settings.js | 34 +++++++++++---
.../templates/part.wizard-groupfilter.php | 7 ++-
.../templates/part.wizard-userfilter.php | 7 ++-
6 files changed, 98 insertions(+), 15 deletions(-)
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 48a8626ea9a..0dfcf474256 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -82,6 +82,10 @@
margin: 5px;
}
+.ldap_count {
+ line-height: 45px;
+}
+
.ldapSettingControls {
margin-top: 3px;
}
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
index 96b4bcad6c9..4b30ed44d00 100644
--- a/apps/user_ldap/js/experiencedAdmin.js
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -13,7 +13,10 @@
*/
function ExperiencedAdmin(wizard, initialState) {
this.wizard = wizard;
- this.isExperienced = false;
+ this.isExperienced = initialState;
+ if(this.isExperienced) {
+ this.hideEntryCounters();
+ }
}
@@ -22,10 +25,13 @@ function ExperiencedAdmin(wizard, initialState) {
*
* @param {boolean} whether the admin is experienced or not
*/
-ExperiencedAdmin.prototype.toggle = function(isExperienced) {
+ExperiencedAdmin.prototype.setExperienced = function(isExperienced) {
this.isExperienced = isExperienced;
if(this.isExperienced) {
this.enableRawMode();
+ this.hideEntryCounters();
+ } else {
+ this.showEntryCounters();
}
};
@@ -41,7 +47,7 @@ ExperiencedAdmin.prototype.isExperienced = function() {
/**
* switches all LDAP filters from Assisted to Raw mode.
*/
-ExperiencedAdmin.prototype.enableRawMode = function () {
+ExperiencedAdmin.prototype.enableRawMode = function() {
containers = {
'toggleRawGroupFilter': '#rawGroupFilterContainer',
'toggleRawLoginFilter': '#rawLoginFilterContainer',
@@ -53,6 +59,40 @@ ExperiencedAdmin.prototype.enableRawMode = function () {
this.wizard[method]();
}
};
+};
+
+ExperiencedAdmin.prototype.updateUserTab = function(mode) {
+ this._updateTab(mode, $('#ldap_user_count'));
+}
+ExperiencedAdmin.prototype.updateGroupTab = function(mode) {
+ this._updateTab(mode, $('#ldap_group_count'));
+}
+ExperiencedAdmin.prototype._updateTab = function(mode, $countEl) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ $countEl.removeClass('hidden');
+ } else if(!this.isExperienced) {
+ $countEl.removeClass('hidden');
+ } else {
+ $countEl.addClass('hidden');
+ }
+}
+
+/**
+ * hide user and group counters, they will be displayed on demand only
+ */
+ExperiencedAdmin.prototype.hideEntryCounters = function() {
+ $('#ldap_user_count').addClass('hidden');
+ $('#ldap_group_count').addClass('hidden');
+ $('.ldapGetEntryCount').removeClass('hidden');
+};
+
+/**
+* shows user and group counters, they will be displayed on demand only
+*/
+ExperiencedAdmin.prototype.showEntryCounters = function() {
+ $('#ldap_user_count').removeClass('hidden');
+ $('#ldap_group_count').removeClass('hidden');
+ $('.ldapGetEntryCount').addClass('hidden');
};
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index cd03ff9b5bf..2d3ca8b3691 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -113,6 +113,10 @@ LdapFilter.prototype.setMode = function(mode) {
}
}
+LdapFilter.prototype.getMode = function() {
+ return this.mode;
+}
+
LdapFilter.prototype.unlock = function() {
this.locked = false;
if(this.lazyRunCompose) {
@@ -122,6 +126,7 @@ LdapFilter.prototype.unlock = function() {
};
LdapFilter.prototype.findFeatures = function() {
+ //TODO: reset this.foundFeatures when any base DN changes
if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) {
this.foundFeatures = true;
if(this.target === 'User') {
@@ -139,4 +144,12 @@ LdapFilter.prototype.findFeatures = function() {
LdapWizard.findObjectClasses(objcEl, this.target);
LdapWizard.findAvailableGroups(avgrEl, this.target + "s");
}
-}
+};
+
+LdapFilter.prototype.updateCount = function() {
+ if(this.target === 'User') {
+ LdapWizard.countUsers();
+ } else if (this.target === 'Group') {
+ LdapWizard.countGroups();
+ }
+};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index cf7223d3fa0..9878a2e326e 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -317,27 +317,30 @@ var LdapWizard = {
}
},
- _countThings: function(method) {
+ _countThings: function(method, spinnerID) {
param = 'action='+method+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
+ LdapWizard.showSpinner(spinnerID);
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
+ LdapWizard.hideSpinner(spinnerID);
},
function (result) {
- // error handling
+ OC.Notification.show('Counting the entries failed with, ' + result.message);
+ LdapWizard.hideSpinner(spinnerID);
}
);
},
countGroups: function() {
- LdapWizard._countThings('countGroups');
+ LdapWizard._countThings('countGroups', '#ldap_group_count');
},
countUsers: function() {
- LdapWizard._countThings('countUsers');
+ LdapWizard._countThings('countUsers', '#ldap_user_count');
},
detectEmailAttribute: function() {
@@ -531,6 +534,7 @@ var LdapWizard = {
init: function() {
LdapWizard.instantiateFilters();
+ LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.basicStatusCheck();
LdapWizard.functionalityCheck();
LdapWizard.isConfigurationActiveControlLocked = false;
@@ -574,6 +578,13 @@ var LdapWizard = {
LdapWizard.userFilter = new LdapFilter('User', function(mode) {
LdapWizard.userFilter.findFeatures();
});
+ $('#rawUserFilterContainer .ldapGetEntryCount').click(function(event) {
+ event.preventDefault();
+ $('#ldap_user_count').text('');
+ LdapWizard.userFilter.updateCount();
+ LdapWizard.detectEmailAttribute();
+ $('#ldap_user_count').removeClass('hidden');
+ });
delete LdapWizard.loginFilter;
LdapWizard.loginFilter = new LdapFilter('Login', function(mode) {
@@ -584,6 +595,13 @@ var LdapWizard = {
LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
LdapWizard.groupFilter.findFeatures();
});
+ $('#rawGroupFilterContainer .ldapGetEntryCount').click(function(event) {
+ event.preventDefault();
+ $('#ldap_group_count').text('');
+ LdapWizard.groupFilter.updateCount();
+ LdapWizard.detectGroupMemberAssoc();
+ $('#ldap_group_count').removeClass('hidden');
+ });
},
userFilterObjectClassesHasRun: false,
@@ -638,10 +656,10 @@ var LdapWizard = {
}
}
- if(triggerObj.id == 'ldap_userlist_filter') {
+ if(triggerObj.id == 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.countUsers();
LdapWizard.detectEmailAttribute();
- } else if(triggerObj.id == 'ldap_group_filter') {
+ } else if(triggerObj.id == 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
@@ -766,6 +784,7 @@ var LdapWizard = {
'groupFilterGroupSelectState',
'ldapGroupFilterMode'
);
+ LdapWizard.admin.updateGroupTab(LdapWizard.groupFilter.getMode());
},
toggleRawLoginFilter: function() {
@@ -801,6 +820,7 @@ var LdapWizard = {
'userFilterGroupSelectState',
'ldapUserFilterMode'
);
+ LdapWizard.admin.updateUserTab(LdapWizard.userFilter.getMode());
},
updateStatusIndicator: function(isComplete) {
@@ -956,6 +976,6 @@ $(document).ready(function() {
expAdminCB = $('#ldap_experienced_admin');
LdapWizard.admin = new ExperiencedAdmin(LdapWizard, expAdminCB.is(':checked'));
expAdminCB.change(function() {
- LdapWizard.admin.toggle($(this).is(':checked'));
+ LdapWizard.admin.setExperienced($(this).is(':checked'));
});
});
diff --git a/apps/user_ldap/templates/part.wizard-groupfilter.php b/apps/user_ldap/templates/part.wizard-groupfilter.php
index e460997b1bf..1953d2eaa6e 100644
--- a/apps/user_ldap/templates/part.wizard-groupfilter.php
+++ b/apps/user_ldap/templates/part.wizard-groupfilter.php
@@ -30,13 +30,16 @@
placeholder="t('Raw LDAP filter'));?>"
title="t('The filter specifies which LDAP groups shall have access to the %s instance.', $theme->getName()));?>"
/>
+
+ t('Test Filter'));?>
+
-
+
0 t('groups found'));?>
-
\ No newline at end of file
+
diff --git a/apps/user_ldap/templates/part.wizard-userfilter.php b/apps/user_ldap/templates/part.wizard-userfilter.php
index eff9f89ce2c..99a6e75370b 100644
--- a/apps/user_ldap/templates/part.wizard-userfilter.php
+++ b/apps/user_ldap/templates/part.wizard-userfilter.php
@@ -30,13 +30,16 @@
placeholder="t('Raw LDAP filter'));?>"
title="t('The filter specifies which LDAP users shall have access to the %s instance.', $theme->getName()));?>"
/>
+
+ t('Test Filter'));?>
+
-
+
0 t('users found'));?>
-
\ No newline at end of file
+
From 29b0e9bfbcec985b191dc14926db849419081435 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 13:29:13 +0200
Subject: [PATCH 06/21] confirmation before switching to assisted mode when
admin is experienced
---
apps/user_ldap/js/settings.js | 115 +++++++++++++++++++++++-----------
1 file changed, 77 insertions(+), 38 deletions(-)
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 9878a2e326e..8ea303302ae 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -776,51 +776,90 @@ var LdapWizard = {
}
},
+ onToggleRawFilterConfirmation: function(currentMode, callback) {
+ if(!LdapWizard.admin.isExperienced
+ || currentMode === LdapWizard.filterModeAssisted
+ ) {
+ return callback(true);
+ }
+
+ var confirmed = OCdialogs.confirm(
+ 'Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?',
+ 'Mode switch',
+ callback
+ );
+ },
+
toggleRawGroupFilter: function() {
- LdapWizard.blacklistRemove('ldap_group_filter');
- LdapWizard.toggleRawFilter('#rawGroupFilterContainer',
- '#ldap_groupfilter_objectclass',
- '#ldap_groupfilter_groups',
- 'groupFilterGroupSelectState',
- 'ldapGroupFilterMode'
- );
- LdapWizard.admin.updateGroupTab(LdapWizard.groupFilter.getMode());
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.groupFilter.getMode(),
+ function(confirmed) {
+ if(confirmed !== true) {
+ return;
+ }
+
+ LdapWizard.blacklistRemove('ldap_group_filter');
+ LdapWizard.toggleRawFilter('#rawGroupFilterContainer',
+ '#ldap_groupfilter_objectclass',
+ '#ldap_groupfilter_groups',
+ 'groupFilterGroupSelectState',
+ 'ldapGroupFilterMode'
+ );
+ LdapWizard.admin.updateGroupTab(LdapWizard.groupFilter.getMode());
+ }
+ );
},
toggleRawLoginFilter: function() {
- LdapWizard.blacklistRemove('ldap_login_filter');
- container = '#rawLoginFilterContainer';
- if($(container).hasClass('invisible')) {
- $(container).removeClass('invisible');
- action = 'disable';
- property = 'disabled';
- mode = LdapWizard.filterModeRaw;
- } else {
- $(container).addClass('invisible');
- action = 'enable';
- property = false;
- mode = LdapWizard.filterModeAssisted;
- }
- LdapWizard.loginFilter.setMode(mode);
- LdapWizard.loginFilter.findFeatures();
- $('#ldap_loginfilter_attributes').multiselect(action);
- $('#ldap_loginfilter_email').prop('disabled', property);
- $('#ldap_loginfilter_username').prop('disabled', property);
- LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
- if(action == 'enable') {
- LdapWizard.loginFilter.compose();
- }
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.loginFilter.getMode(),
+ function(confirmed) {
+ if(confirmed !== true) {
+ return;
+ }
+
+ LdapWizard.blacklistRemove('ldap_login_filter');
+ container = '#rawLoginFilterContainer';
+ if($(container).hasClass('invisible')) {
+ $(container).removeClass('invisible');
+ action = 'disable';
+ property = 'disabled';
+ mode = LdapWizard.filterModeRaw;
+ } else {
+ $(container).addClass('invisible');
+ action = 'enable';
+ property = false;
+ mode = LdapWizard.filterModeAssisted;
+ }
+ LdapWizard.loginFilter.setMode(mode);
+ LdapWizard.loginFilter.findFeatures();
+ $('#ldap_loginfilter_attributes').multiselect(action);
+ $('#ldap_loginfilter_email').prop('disabled', property);
+ $('#ldap_loginfilter_username').prop('disabled', property);
+ LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
+ if(action == 'enable') {
+ LdapWizard.loginFilter.compose();
+ }
+ }
+ );
},
toggleRawUserFilter: function() {
- LdapWizard.blacklistRemove('ldap_userlist_filter');
- LdapWizard.toggleRawFilter('#rawUserFilterContainer',
- '#ldap_userfilter_objectclass',
- '#ldap_userfilter_groups',
- 'userFilterGroupSelectState',
- 'ldapUserFilterMode'
- );
- LdapWizard.admin.updateUserTab(LdapWizard.userFilter.getMode());
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.userFilter.getMode(),
+ function(confirmed) {
+ if(confirmed === true) {
+ LdapWizard.blacklistRemove('ldap_userlist_filter');
+ LdapWizard.toggleRawFilter('#rawUserFilterContainer',
+ '#ldap_userfilter_objectclass',
+ '#ldap_userfilter_groups',
+ 'userFilterGroupSelectState',
+ 'ldapUserFilterMode'
+ );
+ LdapWizard.admin.updateUserTab(LdapWizard.userFilter.getMode());
+ }
+ }
+ );
},
updateStatusIndicator: function(isComplete) {
From 39aa5868ac970253a1edc3d4fc90763a44c85100 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 14:55:47 +0200
Subject: [PATCH 07/21] rename internal var name to avoid collision
---
apps/user_ldap/js/experiencedAdmin.js | 12 ++++++------
apps/user_ldap/js/settings.js | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
index 4b30ed44d00..bd674a37d6c 100644
--- a/apps/user_ldap/js/experiencedAdmin.js
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -13,8 +13,8 @@
*/
function ExperiencedAdmin(wizard, initialState) {
this.wizard = wizard;
- this.isExperienced = initialState;
- if(this.isExperienced) {
+ this._isExperienced = initialState;
+ if(this._isExperienced) {
this.hideEntryCounters();
}
}
@@ -26,8 +26,8 @@ function ExperiencedAdmin(wizard, initialState) {
* @param {boolean} whether the admin is experienced or not
*/
ExperiencedAdmin.prototype.setExperienced = function(isExperienced) {
- this.isExperienced = isExperienced;
- if(this.isExperienced) {
+ this._isExperienced = isExperienced;
+ if(this._isExperienced) {
this.enableRawMode();
this.hideEntryCounters();
} else {
@@ -41,7 +41,7 @@ ExperiencedAdmin.prototype.setExperienced = function(isExperienced) {
* @return {boolean} whether the admin is experienced or not
*/
ExperiencedAdmin.prototype.isExperienced = function() {
- return this.isExperienced;
+ return this._isExperienced;
};
/**
@@ -72,7 +72,7 @@ ExperiencedAdmin.prototype.updateGroupTab = function(mode) {
ExperiencedAdmin.prototype._updateTab = function(mode, $countEl) {
if(mode === LdapWizard.filterModeAssisted) {
$countEl.removeClass('hidden');
- } else if(!this.isExperienced) {
+ } else if(!this._isExperienced) {
$countEl.removeClass('hidden');
} else {
$countEl.addClass('hidden');
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 8ea303302ae..04b4b91d1f1 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -777,7 +777,7 @@ var LdapWizard = {
},
onToggleRawFilterConfirmation: function(currentMode, callback) {
- if(!LdapWizard.admin.isExperienced
+ if(!LdapWizard.admin.isExperienced()
|| currentMode === LdapWizard.filterModeAssisted
) {
return callback(true);
From ab3535855fef82783faae50286045b644bbf6d79 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 15:04:29 +0200
Subject: [PATCH 08/21] more beautiful white spaces
---
apps/user_ldap/lib/configuration.php | 176 +++++++++++++--------------
1 file changed, 88 insertions(+), 88 deletions(-)
diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php
index 75d3d5ea04d..28e456ae2ef 100644
--- a/apps/user_ldap/lib/configuration.php
+++ b/apps/user_ldap/lib/configuration.php
@@ -346,52 +346,52 @@ class Configuration {
*/
public function getDefaults() {
return array(
- 'ldap_host' => '',
- 'ldap_port' => '',
- 'ldap_backup_host' => '',
- 'ldap_backup_port' => '',
- 'ldap_override_main_server' => '',
- 'ldap_dn' => '',
- 'ldap_agent_password' => '',
- 'ldap_base' => '',
- 'ldap_base_users' => '',
- 'ldap_base_groups' => '',
- 'ldap_userlist_filter' => '',
- 'ldap_user_filter_mode' => 0,
- 'ldap_userfilter_objectclass' => '',
- 'ldap_userfilter_groups' => '',
- 'ldap_login_filter' => '',
- 'ldap_login_filter_mode' => 0,
- 'ldap_loginfilter_email' => 0,
- 'ldap_loginfilter_username' => 1,
- 'ldap_loginfilter_attributes' => '',
- 'ldap_group_filter' => '',
- 'ldap_group_filter_mode' => 0,
- 'ldap_groupfilter_objectclass' => '',
- 'ldap_groupfilter_groups' => '',
- 'ldap_display_name' => 'displayName',
- 'ldap_group_display_name' => 'cn',
- 'ldap_tls' => 1,
- 'ldap_nocase' => 0,
- 'ldap_quota_def' => '',
- 'ldap_quota_attr' => '',
- 'ldap_email_attr' => '',
- 'ldap_group_member_assoc_attribute' => 'uniqueMember',
- 'ldap_cache_ttl' => 600,
- 'ldap_uuid_user_attribute' => 'auto',
- 'ldap_uuid_group_attribute' => 'auto',
- 'home_folder_naming_rule' => '',
- 'ldap_turn_off_cert_check' => 0,
- 'ldap_configuration_active' => 0,
- 'ldap_attributes_for_user_search' => '',
- 'ldap_attributes_for_group_search' => '',
- 'ldap_expert_username_attr' => '',
- 'ldap_expert_uuid_user_attr' => '',
- 'ldap_expert_uuid_group_attr' => '',
- 'has_memberof_filter_support' => 0,
- 'last_jpegPhoto_lookup' => 0,
- 'ldap_nested_groups' => 0,
- 'ldap_paging_size' => 500,
+ 'ldap_host' => '',
+ 'ldap_port' => '',
+ 'ldap_backup_host' => '',
+ 'ldap_backup_port' => '',
+ 'ldap_override_main_server' => '',
+ 'ldap_dn' => '',
+ 'ldap_agent_password' => '',
+ 'ldap_base' => '',
+ 'ldap_base_users' => '',
+ 'ldap_base_groups' => '',
+ 'ldap_userlist_filter' => '',
+ 'ldap_user_filter_mode' => 0,
+ 'ldap_userfilter_objectclass' => '',
+ 'ldap_userfilter_groups' => '',
+ 'ldap_login_filter' => '',
+ 'ldap_login_filter_mode' => 0,
+ 'ldap_loginfilter_email' => 0,
+ 'ldap_loginfilter_username' => 1,
+ 'ldap_loginfilter_attributes' => '',
+ 'ldap_group_filter' => '',
+ 'ldap_group_filter_mode' => 0,
+ 'ldap_groupfilter_objectclass' => '',
+ 'ldap_groupfilter_groups' => '',
+ 'ldap_display_name' => 'displayName',
+ 'ldap_group_display_name' => 'cn',
+ 'ldap_tls' => 1,
+ 'ldap_nocase' => 0,
+ 'ldap_quota_def' => '',
+ 'ldap_quota_attr' => '',
+ 'ldap_email_attr' => '',
+ 'ldap_group_member_assoc_attribute' => 'uniqueMember',
+ 'ldap_cache_ttl' => 600,
+ 'ldap_uuid_user_attribute' => 'auto',
+ 'ldap_uuid_group_attribute' => 'auto',
+ 'home_folder_naming_rule' => '',
+ 'ldap_turn_off_cert_check' => 0,
+ 'ldap_configuration_active' => 0,
+ 'ldap_attributes_for_user_search' => '',
+ 'ldap_attributes_for_group_search' => '',
+ 'ldap_expert_username_attr' => '',
+ 'ldap_expert_uuid_user_attr' => '',
+ 'ldap_expert_uuid_group_attr' => '',
+ 'has_memberof_filter_support' => 0,
+ 'last_jpegPhoto_lookup' => 0,
+ 'ldap_nested_groups' => 0,
+ 'ldap_paging_size' => 500,
'ldap_experienced_admin' => 0,
);
}
@@ -402,48 +402,48 @@ class Configuration {
public function getConfigTranslationArray() {
//TODO: merge them into one representation
static $array = array(
- 'ldap_host' => 'ldapHost',
- 'ldap_port' => 'ldapPort',
- 'ldap_backup_host' => 'ldapBackupHost',
- 'ldap_backup_port' => 'ldapBackupPort',
- 'ldap_override_main_server' => 'ldapOverrideMainServer',
- 'ldap_dn' => 'ldapAgentName',
- 'ldap_agent_password' => 'ldapAgentPassword',
- 'ldap_base' => 'ldapBase',
- 'ldap_base_users' => 'ldapBaseUsers',
- 'ldap_base_groups' => 'ldapBaseGroups',
- 'ldap_userfilter_objectclass' => 'ldapUserFilterObjectclass',
- 'ldap_userfilter_groups' => 'ldapUserFilterGroups',
- 'ldap_userlist_filter' => 'ldapUserFilter',
- 'ldap_user_filter_mode' => 'ldapUserFilterMode',
- 'ldap_login_filter' => 'ldapLoginFilter',
- 'ldap_login_filter_mode' => 'ldapLoginFilterMode',
- 'ldap_loginfilter_email' => 'ldapLoginFilterEmail',
- 'ldap_loginfilter_username' => 'ldapLoginFilterUsername',
- 'ldap_loginfilter_attributes' => 'ldapLoginFilterAttributes',
- 'ldap_group_filter' => 'ldapGroupFilter',
- 'ldap_group_filter_mode' => 'ldapGroupFilterMode',
- 'ldap_groupfilter_objectclass' => 'ldapGroupFilterObjectclass',
- 'ldap_groupfilter_groups' => 'ldapGroupFilterGroups',
- 'ldap_display_name' => 'ldapUserDisplayName',
- 'ldap_group_display_name' => 'ldapGroupDisplayName',
- 'ldap_tls' => 'ldapTLS',
- 'ldap_nocase' => 'ldapNoCase',
- 'ldap_quota_def' => 'ldapQuotaDefault',
- 'ldap_quota_attr' => 'ldapQuotaAttribute',
- 'ldap_email_attr' => 'ldapEmailAttribute',
- 'ldap_group_member_assoc_attribute' => 'ldapGroupMemberAssocAttr',
- 'ldap_cache_ttl' => 'ldapCacheTTL',
- 'home_folder_naming_rule' => 'homeFolderNamingRule',
- 'ldap_turn_off_cert_check' => 'turnOffCertCheck',
- 'ldap_configuration_active' => 'ldapConfigurationActive',
- 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch',
- 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch',
- 'ldap_expert_username_attr' => 'ldapExpertUsernameAttr',
- 'ldap_expert_uuid_user_attr' => 'ldapExpertUUIDUserAttr',
- 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr',
- 'has_memberof_filter_support' => 'hasMemberOfFilterSupport',
- 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
+ 'ldap_host' => 'ldapHost',
+ 'ldap_port' => 'ldapPort',
+ 'ldap_backup_host' => 'ldapBackupHost',
+ 'ldap_backup_port' => 'ldapBackupPort',
+ 'ldap_override_main_server' => 'ldapOverrideMainServer',
+ 'ldap_dn' => 'ldapAgentName',
+ 'ldap_agent_password' => 'ldapAgentPassword',
+ 'ldap_base' => 'ldapBase',
+ 'ldap_base_users' => 'ldapBaseUsers',
+ 'ldap_base_groups' => 'ldapBaseGroups',
+ 'ldap_userfilter_objectclass' => 'ldapUserFilterObjectclass',
+ 'ldap_userfilter_groups' => 'ldapUserFilterGroups',
+ 'ldap_userlist_filter' => 'ldapUserFilter',
+ 'ldap_user_filter_mode' => 'ldapUserFilterMode',
+ 'ldap_login_filter' => 'ldapLoginFilter',
+ 'ldap_login_filter_mode' => 'ldapLoginFilterMode',
+ 'ldap_loginfilter_email' => 'ldapLoginFilterEmail',
+ 'ldap_loginfilter_username' => 'ldapLoginFilterUsername',
+ 'ldap_loginfilter_attributes' => 'ldapLoginFilterAttributes',
+ 'ldap_group_filter' => 'ldapGroupFilter',
+ 'ldap_group_filter_mode' => 'ldapGroupFilterMode',
+ 'ldap_groupfilter_objectclass' => 'ldapGroupFilterObjectclass',
+ 'ldap_groupfilter_groups' => 'ldapGroupFilterGroups',
+ 'ldap_display_name' => 'ldapUserDisplayName',
+ 'ldap_group_display_name' => 'ldapGroupDisplayName',
+ 'ldap_tls' => 'ldapTLS',
+ 'ldap_nocase' => 'ldapNoCase',
+ 'ldap_quota_def' => 'ldapQuotaDefault',
+ 'ldap_quota_attr' => 'ldapQuotaAttribute',
+ 'ldap_email_attr' => 'ldapEmailAttribute',
+ 'ldap_group_member_assoc_attribute' => 'ldapGroupMemberAssocAttr',
+ 'ldap_cache_ttl' => 'ldapCacheTTL',
+ 'home_folder_naming_rule' => 'homeFolderNamingRule',
+ 'ldap_turn_off_cert_check' => 'turnOffCertCheck',
+ 'ldap_configuration_active' => 'ldapConfigurationActive',
+ 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch',
+ 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch',
+ 'ldap_expert_username_attr' => 'ldapExpertUsernameAttr',
+ 'ldap_expert_uuid_user_attr' => 'ldapExpertUUIDUserAttr',
+ 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr',
+ 'has_memberof_filter_support' => 'hasMemberOfFilterSupport',
+ 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
'ldap_nested_groups' => 'ldapNestedGroups',
'ldap_paging_size' => 'ldapPagingSize',
'ldap_experienced_admin' => 'ldapExperiencedAdmin'
From 02985c9ec5bb4c9f79754ac696d6aec12722436d Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 8 Oct 2014 16:20:52 +0200
Subject: [PATCH 09/21] smaller corrections to make scruitinizer happier, no
effective changes
---
apps/user_ldap/js/experiencedAdmin.js | 14 ++++++++------
apps/user_ldap/js/ldapFilter.js | 11 ++++++-----
apps/user_ldap/js/settings.js | 4 ++--
3 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
index bd674a37d6c..fac8dd6470f 100644
--- a/apps/user_ldap/js/experiencedAdmin.js
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -4,6 +4,8 @@
* See the COPYING-README file.
*/
+/* global LdapWizard */
+
/**
* controls behaviour depend on whether the admin is experienced in LDAP or not.
*
@@ -48,26 +50,26 @@ ExperiencedAdmin.prototype.isExperienced = function() {
* switches all LDAP filters from Assisted to Raw mode.
*/
ExperiencedAdmin.prototype.enableRawMode = function() {
- containers = {
+ var containers = {
'toggleRawGroupFilter': '#rawGroupFilterContainer',
'toggleRawLoginFilter': '#rawLoginFilterContainer',
'toggleRawUserFilter' : '#rawUserFilterContainer'
};
- for(method in containers) {
+ for(var method in containers) {
if($(containers[method]).hasClass('invisible')) {
this.wizard[method]();
}
- };
+ }
};
ExperiencedAdmin.prototype.updateUserTab = function(mode) {
this._updateTab(mode, $('#ldap_user_count'));
-}
+};
ExperiencedAdmin.prototype.updateGroupTab = function(mode) {
this._updateTab(mode, $('#ldap_group_count'));
-}
+};
ExperiencedAdmin.prototype._updateTab = function(mode, $countEl) {
if(mode === LdapWizard.filterModeAssisted) {
@@ -77,7 +79,7 @@ ExperiencedAdmin.prototype._updateTab = function(mode, $countEl) {
} else {
$countEl.addClass('hidden');
}
-}
+};
/**
* hide user and group counters, they will be displayed on demand only
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index 2d3ca8b3691..5b93d81f371 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -1,6 +1,6 @@
/* global LdapWizard */
-function LdapFilter(target, determineModeCallback) {
+function LdapFilter(target, determineModeCallback) {
this.locked = true;
this.target = false;
this.mode = LdapWizard.filterModeAssisted;
@@ -14,7 +14,7 @@ function LdapFilter(target, determineModeCallback) {
target === 'Group') {
this.target = target;
}
-}
+};
LdapFilter.prototype.activate = function() {
if(this.activated) {
@@ -23,7 +23,7 @@ LdapFilter.prototype.activate = function() {
this.activated = true;
this.determineMode();
-}
+};
LdapFilter.prototype.compose = function(callback) {
var action;
@@ -111,11 +111,11 @@ LdapFilter.prototype.setMode = function(mode) {
if(mode === LdapWizard.filterModeAssisted || mode === LdapWizard.filterModeRaw) {
this.mode = mode;
}
-}
+};
LdapFilter.prototype.getMode = function() {
return this.mode;
-}
+};
LdapFilter.prototype.unlock = function() {
this.locked = false;
@@ -129,6 +129,7 @@ LdapFilter.prototype.findFeatures = function() {
//TODO: reset this.foundFeatures when any base DN changes
if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) {
this.foundFeatures = true;
+ var objcEl, avgrEl;
if(this.target === 'User') {
objcEl = 'ldap_userfilter_objectclass';
avgrEl = 'ldap_userfilter_groups';
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 04b4b91d1f1..f5b8081497f 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -694,8 +694,8 @@ var LdapWizard = {
values = values + "\n" + resultObj[i].value;
}
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
- if(originalObj == 'ldap_userfilter_objectclass'
- || originalObj == 'ldap_userfilter_groups') {
+ if(originalObj === 'ldap_userfilter_objectclass'
+ || originalObj === 'ldap_userfilter_groups') {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
From 9f036e776ef40553845c47dacaae0d5af02383c9 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Thu, 9 Oct 2014 11:15:56 +0200
Subject: [PATCH 10/21] bump version
---
apps/user_ldap/appinfo/version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 17b2ccd9bf9..6f2743d65dc 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.4.3
+0.4.4
From 2cf01027976117cab824a54971a7b97e4c8e0b9d Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Thu, 9 Oct 2014 17:17:50 +0200
Subject: [PATCH 11/21] fix triggering of group update counts. improves the
basic code which is also responsible for user counts. i did not find
regressions, please doublecheck
---
apps/user_ldap/js/ldapFilter.js | 19 +++++++++----------
apps/user_ldap/js/settings.js | 10 ++++++----
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index 5b93d81f371..6b62604efb7 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -14,7 +14,7 @@ function LdapFilter(target, determineModeCallback) {
target === 'Group') {
this.target = target;
}
-};
+}
LdapFilter.prototype.activate = function() {
if(this.activated) {
@@ -33,6 +33,11 @@ LdapFilter.prototype.compose = function(callback) {
return false;
}
+ if(this.mode === LdapWizard.filterModeRaw) {
+ //Raw filter editing, i.e. user defined filter, don't compose
+ return;
+ }
+
if(this.target === 'User') {
action = 'getUserListFilter';
} else if(this.target === 'Login') {
@@ -41,11 +46,6 @@ LdapFilter.prototype.compose = function(callback) {
action = 'getGroupFilter';
}
- if(!$('#raw'+this.target+'FilterContainer').hasClass('invisible')) {
- //Raw filter editing, i.e. user defined filter, don't compose
- return;
- }
-
var param = 'action='+action+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
@@ -55,10 +55,9 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
- if(filter.target === 'User') {
- LdapWizard.countUsers();
- } else if(filter.target === 'Group') {
- LdapWizard.countGroups();
+ console.log(filter.mode);
+ filter.updateCount();
+ if(filter.target === 'Group') {
LdapWizard.detectGroupMemberAssoc();
}
if(typeof callback !== 'undefined') {
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index f5b8081497f..be643c81b4b 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -542,7 +542,6 @@ var LdapWizard = {
initGroupFilter: function() {
LdapWizard.groupFilter.activate();
- LdapWizard.countGroups();
},
/** init login filter tab section **/
@@ -576,6 +575,9 @@ var LdapWizard = {
instantiateFilters: function() {
delete LdapWizard.userFilter;
LdapWizard.userFilter = new LdapFilter('User', function(mode) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.groupFilter.updateCount();
+ }
LdapWizard.userFilter.findFeatures();
});
$('#rawUserFilterContainer .ldapGetEntryCount').click(function(event) {
@@ -593,6 +595,9 @@ var LdapWizard = {
delete LdapWizard.groupFilter;
LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.groupFilter.updateCount();
+ }
LdapWizard.groupFilter.findFeatures();
});
$('#rawGroupFilterContainer .ldapGetEntryCount').click(function(event) {
@@ -617,7 +622,6 @@ var LdapWizard = {
if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
- LdapWizard.countUsers();
}
},
@@ -657,10 +661,8 @@ var LdapWizard = {
}
if(triggerObj.id == 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.countUsers();
LdapWizard.detectEmailAttribute();
} else if(triggerObj.id == 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
From 6f83b537fe17bba29b13f8052506e63ed3dbfa9a Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Thu, 9 Oct 2014 17:56:27 +0200
Subject: [PATCH 12/21] remove debug output
---
apps/user_ldap/js/ldapFilter.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index 6b62604efb7..7fcf8bfb28b 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -55,7 +55,6 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
- console.log(filter.mode);
filter.updateCount();
if(filter.target === 'Group') {
LdapWizard.detectGroupMemberAssoc();
From f31d4caf57c46d648180184868d92f4780ba4b35 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Fri, 10 Oct 2014 11:49:45 +0200
Subject: [PATCH 13/21] coding style, no effective code changes
---
apps/user_ldap/js/settings.js | 48 +++++++++++++++++------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index be643c81b4b..5c696000f5c 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -122,7 +122,7 @@ var LdapConfiguration = {
OC.filePath('user_ldap','ajax','clearMappings.php'),
'ldap_clear_mapping='+encodeURIComponent(mappingSubject),
function(result) {
- if(result.status == 'success') {
+ if(result.status === 'success') {
OC.dialogs.info(
t('user_ldap', 'mappings cleared'),
t('user_ldap', 'Success')
@@ -154,7 +154,7 @@ var LdapWizard = {
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
- if(result.status == 'success') {
+ if(result.status === 'success') {
fnOnSuccess(result);
} else {
fnOnError(result);
@@ -164,7 +164,7 @@ var LdapWizard = {
},
applyChanges: function (result) {
- for (id in result.changes) {
+ for (var id in result.changes) {
LdapWizard.blacklistAdd(id);
if(id.indexOf('count') > 0) {
$('#'+id).text(result.changes[id]);
@@ -200,7 +200,7 @@ var LdapWizard = {
blacklistAdd: function(id) {
obj = $('#'+id);
- if(!(obj[0].hasOwnProperty('multiple') && obj[0]['multiple'] == true)) {
+ if(!(obj[0].hasOwnProperty('multiple') && obj[0]['multiple'] === true)) {
//no need to blacklist multiselect
LdapWizard.saveBlacklist[id] = true;
return true;
@@ -375,7 +375,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#ldap_loginfilter_attributes').find('option').remove();
- for (i in result.options['ldap_loginfilter_attributes']) {
+ for (var i in result.options['ldap_loginfilter_attributes']) {
//FIXME: move HTML into template
attr = result.options['ldap_loginfilter_attributes'][i];
$('#ldap_loginfilter_attributes').append(
@@ -411,7 +411,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#'+multisel).find('option').remove();
- for (i in result.options[multisel]) {
+ for (var i in result.options[multisel]) {
//FIXME: move HTML into template
objc = result.options[multisel][i];
$('#'+multisel).append(""+objc+" ");
@@ -438,7 +438,7 @@ var LdapWizard = {
function (result) {
LdapWizard.hideSpinner('#'+multisel);
$('#'+multisel).multiselect('disable');
- if(type == 'Users') {
+ if(type === 'Users') {
LdapWizard.userFilterAvailableGroupsHasRun = true;
LdapWizard.postInitUserFilter();
}
@@ -447,7 +447,7 @@ var LdapWizard = {
},
findObjectClasses: function(multisel, type) {
- if(type != 'User' && type != 'Group') {
+ if(type !== 'User' && type !== 'Group') {
return false;
}
param = 'action=determine'+encodeURIComponent(type)+'ObjectClasses'+
@@ -458,7 +458,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#'+multisel).find('option').remove();
- for (i in result.options[multisel]) {
+ for (var i in result.options[multisel]) {
//FIXME: move HTML into template
objc = result.options[multisel][i];
$('#'+multisel).append(""+objc+" ");
@@ -479,7 +479,7 @@ var LdapWizard = {
},
function (result) {
LdapWizard.hideSpinner('#'+multisel);
- if(type == 'User') {
+ if(type === 'User') {
LdapWizard.userFilterObjectClassesHasRun = true;
LdapWizard.postInitUserFilter();
}
@@ -649,10 +649,10 @@ var LdapWizard = {
processChanges: function(triggerObj) {
LdapWizard.hideInfoBox();
- if(triggerObj.id == 'ldap_host'
- || triggerObj.id == 'ldap_port'
- || triggerObj.id == 'ldap_dn'
- || triggerObj.id == 'ldap_agent_password') {
+ if(triggerObj.id === 'ldap_host'
+ || triggerObj.id === 'ldap_port'
+ || triggerObj.id === 'ldap_dn'
+ || triggerObj.id === 'ldap_agent_password') {
LdapWizard.checkPort();
if($('#ldap_port').val()) {
//if Port is already set, check BaseDN
@@ -660,14 +660,14 @@ var LdapWizard = {
}
}
- if(triggerObj.id == 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
+ if(triggerObj.id === 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectEmailAttribute();
- } else if(triggerObj.id == 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
+ } else if(triggerObj.id === 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectGroupMemberAssoc();
}
- if(triggerObj.id == 'ldap_loginfilter_username'
- || triggerObj.id == 'ldap_loginfilter_email') {
+ if(triggerObj.id === 'ldap_loginfilter_username'
+ || triggerObj.id === 'ldap_loginfilter_email') {
LdapWizard.loginFilter.compose();
}
@@ -705,10 +705,10 @@ var LdapWizard = {
LdapWizard.initLoginFilter();
}
LdapWizard.loginFilter.compose();
- } else if(originalObj == 'ldap_loginfilter_attributes') {
+ } else if(originalObj === 'ldap_loginfilter_attributes') {
LdapWizard.loginFilter.compose();
- } else if(originalObj == 'ldap_groupfilter_objectclass'
- || originalObj == 'ldap_groupfilter_groups') {
+ } else if(originalObj === 'ldap_groupfilter_objectclass'
+ || originalObj === 'ldap_groupfilter_groups') {
LdapWizard.groupFilter.compose();
}
},
@@ -723,7 +723,7 @@ var LdapWizard = {
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
- if(result.status == 'success') {
+ if(result.status === 'success') {
LdapWizard.processChanges(object);
} else {
// alert('Oooooooooooh :(');
@@ -754,7 +754,7 @@ var LdapWizard = {
filter.setMode(LdapWizard.filterModeRaw);
$(container).removeClass('invisible');
$(moc).multiselect('disable');
- if($(mg).multiselect().attr('disabled') == 'disabled') {
+ if($(mg).multiselect().attr('disabled') === 'disabled') {
LdapWizard[stateVar] = 'disable';
} else {
LdapWizard[stateVar] = 'enable';
@@ -839,7 +839,7 @@ var LdapWizard = {
$('#ldap_loginfilter_email').prop('disabled', property);
$('#ldap_loginfilter_username').prop('disabled', property);
LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
- if(action == 'enable') {
+ if(action === 'enable') {
LdapWizard.loginFilter.compose();
}
}
From ea7975ac8ba94b3dfcd3f61ff74847de97a881b4 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Fri, 10 Oct 2014 13:30:03 +0200
Subject: [PATCH 14/21] always abort running ajax request when the method is
fired up again
---
apps/user_ldap/js/settings.js | 40 ++++++++++++++++++++++++-----------
1 file changed, 28 insertions(+), 12 deletions(-)
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 5c696000f5c..75a4830b28e 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -148,9 +148,15 @@ var LdapWizard = {
userFilter: false,
loginFilter: false,
groupFilter: false,
+ ajaxRequests: {},
- ajax: function(param, fnOnSuccess, fnOnError) {
- $.post(
+ ajax: function(param, fnOnSuccess, fnOnError, reqID) {
+ if(reqID !== undefined) {
+ if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
+ LdapWizard.ajaxRequests[reqID].abort();
+ }
+ }
+ var request = $.post(
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
@@ -161,6 +167,9 @@ var LdapWizard = {
}
}
);
+ if(reqID !== undefined) {
+ LdapWizard.ajaxRequests[reqID] = request;
+ }
},
applyChanges: function (result) {
@@ -244,7 +253,8 @@ var LdapWizard = {
LdapWizard.showInfoBox(t('user_ldap', 'Please specify a Base DN'));
LdapWizard.showInfoBox(t('user_ldap', 'Could not determine Base DN'));
$('#ldap_base').prop('disabled', false);
- }
+ },
+ 'guessBaseDN'
);
}
},
@@ -274,7 +284,8 @@ var LdapWizard = {
LdapWizard.hideSpinner('#ldap_port');
$('#ldap_port').prop('disabled', false);
LdapWizard.showInfoBox(t('user_ldap', 'Please specify the port'));
- }
+ },
+ 'guessPortAndTLS'
);
}
},
@@ -323,7 +334,7 @@ var LdapWizard = {
encodeURIComponent($('#ldap_serverconfig_chooser').val());
LdapWizard.showSpinner(spinnerID);
- LdapWizard.ajax(param,
+ var request = LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner(spinnerID);
@@ -331,7 +342,8 @@ var LdapWizard = {
function (result) {
OC.Notification.show('Counting the entries failed with, ' + result.message);
LdapWizard.hideSpinner(spinnerID);
- }
+ },
+ method
);
},
@@ -348,7 +360,7 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
//runs in the background, no callbacks necessary
- LdapWizard.ajax(param, LdapWizard.applyChanges, function(){});
+ LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
},
detectGroupMemberAssoc: function() {
@@ -362,7 +374,8 @@ var LdapWizard = {
},
function (result) {
// error handling
- }
+ },
+ 'determineGroupMemberAssoc'
);
},
@@ -395,12 +408,13 @@ var LdapWizard = {
{noneSelectedText : 'No attributes found'});
$('#ldap_loginfilter_attributes').multiselect('disable');
LdapWizard.hideSpinner('#ldap_loginfilter_attributes');
- }
+ },
+ 'determineAttributes'
);
},
findAvailableGroups: function(multisel, type) {
- if(type != 'Users' && type != 'Groups') {
+ if(type !== 'Users' && type !== 'Groups') {
return false;
}
param = 'action=determineGroupsFor'+encodeURIComponent(type)+
@@ -442,7 +456,8 @@ var LdapWizard = {
LdapWizard.userFilterAvailableGroupsHasRun = true;
LdapWizard.postInitUserFilter();
}
- }
+ },
+ 'findAvailableGroupsFor' + type
);
},
@@ -484,7 +499,8 @@ var LdapWizard = {
LdapWizard.postInitUserFilter();
}
//TODO: error handling
- }
+ },
+ 'determine' + type + 'ObjectClasses'
);
},
From 836f0839e53baa7c7d8561dec1bf0d36813c715d Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Fri, 10 Oct 2014 13:41:32 +0200
Subject: [PATCH 15/21] show a spinner next to test filter button when the test
is running
---
apps/user_ldap/js/ldapFilter.js | 6 +++---
apps/user_ldap/js/settings.js | 32 +++++++++++++++++++++++++-------
2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index 7fcf8bfb28b..bb66c1df2ee 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -145,10 +145,10 @@ LdapFilter.prototype.findFeatures = function() {
}
};
-LdapFilter.prototype.updateCount = function() {
+LdapFilter.prototype.updateCount = function(doneCallback) {
if(this.target === 'User') {
- LdapWizard.countUsers();
+ LdapWizard.countUsers(doneCallback);
} else if (this.target === 'Group') {
- LdapWizard.countGroups();
+ LdapWizard.countGroups(doneCallback);
}
};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 75a4830b28e..6e936a91091 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -328,7 +328,7 @@ var LdapWizard = {
}
},
- _countThings: function(method, spinnerID) {
+ _countThings: function(method, spinnerID, doneCallback) {
param = 'action='+method+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
@@ -338,21 +338,27 @@ var LdapWizard = {
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner(spinnerID);
+ if(doneCallback !== undefined) {
+ doneCallback(method);
+ }
},
function (result) {
OC.Notification.show('Counting the entries failed with, ' + result.message);
LdapWizard.hideSpinner(spinnerID);
+ if(doneCallback !== undefined) {
+ doneCallback(method);
+ }
},
method
);
},
- countGroups: function() {
- LdapWizard._countThings('countGroups', '#ldap_group_count');
+ countGroups: function(doneCallback) {
+ LdapWizard._countThings('countGroups', '#ldap_group_count', doneCallback);
},
- countUsers: function() {
- LdapWizard._countThings('countUsers', '#ldap_user_count');
+ countUsers: function(doneCallback) {
+ LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
},
detectEmailAttribute: function() {
@@ -586,6 +592,16 @@ var LdapWizard = {
});
},
+ hideTestSpinner:function (countMethod) {
+ var selector;
+ if(countMethod === 'countUsers') {
+ selector = '#rawUserFilterContainer .ldapGetEntryCount';
+ } else {
+ selector = '#rawGroupFilterContainer .ldapGetEntryCount';
+ }
+ LdapWizard.hideSpinner(selector);
+ },
+
/** init user filter tab section **/
instantiateFilters: function() {
@@ -599,7 +615,8 @@ var LdapWizard = {
$('#rawUserFilterContainer .ldapGetEntryCount').click(function(event) {
event.preventDefault();
$('#ldap_user_count').text('');
- LdapWizard.userFilter.updateCount();
+ LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount');
+ LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner);
LdapWizard.detectEmailAttribute();
$('#ldap_user_count').removeClass('hidden');
});
@@ -619,7 +636,8 @@ var LdapWizard = {
$('#rawGroupFilterContainer .ldapGetEntryCount').click(function(event) {
event.preventDefault();
$('#ldap_group_count').text('');
- LdapWizard.groupFilter.updateCount();
+ LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount');
+ LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner);
LdapWizard.detectGroupMemberAssoc();
$('#ldap_group_count').removeClass('hidden');
});
From c26e9c675aa6c7fec64f63349c6f25ddbe264d7a Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Tue, 14 Oct 2014 17:39:27 +0200
Subject: [PATCH 16/21] show Spinner when stuff is being saved
---
apps/user_ldap/css/settings.css | 8 ++++++++
apps/user_ldap/js/settings.js | 9 ++++++++-
apps/user_ldap/templates/part.wizardcontrols.php | 1 +
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 0dfcf474256..2353bfe1bfd 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -123,6 +123,14 @@ select[multiple=multiple] + button {
max-width: 40%;
}
+#ldap .ldap_saving {
+ margin-right: 15px;
+ color: orange;
+ font-weight: bold;
+}
+
+#ldap .ldap_saving img { height: 15px; }
+
.ldap_config_state_indicator_sign {
display: inline-block;
height: 16px;
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 6e936a91091..1972447970f 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -747,7 +747,10 @@ var LdapWizard = {
}
},
+ saveProcesses: 0,
_save: function(object, value) {
+ $('#ldap .ldap_saving').removeClass('hidden');
+ LdapWizard.saveProcesses += 1;
param = 'cfgkey='+encodeURIComponent(object.id)+
'&cfgval='+encodeURIComponent(value)+
'&action=save'+
@@ -757,10 +760,14 @@ var LdapWizard = {
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
+ LdapWizard.saveProcesses -= 1;
+ if(LdapWizard.saveProcesses === 0) {
+ $('#ldap .ldap_saving').addClass('hidden');
+ }
if(result.status === 'success') {
LdapWizard.processChanges(object);
} else {
-// alert('Oooooooooooh :(');
+ console.log('Could not save value for ' + object.id);
}
}
);
diff --git a/apps/user_ldap/templates/part.wizardcontrols.php b/apps/user_ldap/templates/part.wizardcontrols.php
index 33e1614c9c6..90d558e72d1 100644
--- a/apps/user_ldap/templates/part.wizardcontrols.php
+++ b/apps/user_ldap/templates/part.wizardcontrols.php
@@ -1,4 +1,5 @@
+
t('Saving'));?>
From 4385188920772d0f39656cc1d9a8012b173acabf Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 15 Oct 2014 12:41:53 +0200
Subject: [PATCH 17/21] show busy cursor and lock tabs on save
---
apps/user_ldap/css/settings.css | 4 ++++
apps/user_ldap/js/settings.js | 39 +++++++++++++++++++++++++--------
2 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 2353bfe1bfd..8f339451c64 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -123,6 +123,10 @@ select[multiple=multiple] + button {
max-width: 40%;
}
+.save-cursor {
+ cursor: wait;
+}
+
#ldap .ldap_saving {
margin-right: 15px;
color: orange;
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 1972447970f..73cace33758 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -188,21 +188,34 @@ var LdapWizard = {
}
},
+ enableTabs: function() {
+ //do not use this function directly, use basicStatusCheck instead.
+ if(LdapWizard.saveProcesses === 0) {
+ $('.ldap_action_continue').removeAttr('disabled');
+ $('.ldap_action_back').removeAttr('disabled');
+ $('#ldapSettings').tabs('option', 'disabled', []);
+ }
+ },
+
+ disableTabs: function() {
+ $('.ldap_action_continue').attr('disabled', 'disabled');
+ $('.ldap_action_back').attr('disabled', 'disabled');
+ $('#ldapSettings').tabs('option', 'disabled', [1, 2, 3, 4, 5]);
+ },
+
basicStatusCheck: function() {
//criterias to continue from the first tab
// - host, port, user filter, agent dn, password, base dn
- host = $('#ldap_host').val();
- port = $('#ldap_port').val();
- agent = $('#ldap_dn').val();
- pwd = $('#ldap_agent_password').val();
- base = $('#ldap_base').val();
+ var host = $('#ldap_host').val();
+ var port = $('#ldap_port').val();
+ var agent = $('#ldap_dn').val();
+ var pwd = $('#ldap_agent_password').val();
+ var base = $('#ldap_base').val();
if((host && port && base) && ((!agent && !pwd) || (agent && pwd))) {
- $('.ldap_action_continue').removeAttr('disabled');
- $('#ldapSettings').tabs('option', 'disabled', []);
+ LdapWizard.enableTabs();
} else {
- $('.ldap_action_continue').attr('disabled', 'disabled');
- $('#ldapSettings').tabs('option', 'disabled', [1, 2, 3, 4, 5]);
+ LdapWizard.disableTabs();
}
},
@@ -751,6 +764,8 @@ var LdapWizard = {
_save: function(object, value) {
$('#ldap .ldap_saving').removeClass('hidden');
LdapWizard.saveProcesses += 1;
+ $('#ldap *').addClass('save-cursor');
+ LdapWizard.disableTabs();
param = 'cfgkey='+encodeURIComponent(object.id)+
'&cfgval='+encodeURIComponent(value)+
'&action=save'+
@@ -763,6 +778,12 @@ var LdapWizard = {
LdapWizard.saveProcesses -= 1;
if(LdapWizard.saveProcesses === 0) {
$('#ldap .ldap_saving').addClass('hidden');
+ console.log('switch cursor');
+ console.log($('#ldap *').css('cursor'));
+ $('#ldap *').removeClass('save-cursor');
+ //enable the tabs again, if everything is OK
+ LdapWizard.basicStatusCheck();
+ console.log($('#ldap *').css('cursor'));
}
if(result.status === 'success') {
LdapWizard.processChanges(object);
From ab6890b854cbe94d0ed816365b9acaf11f6eaa1f Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 15 Oct 2014 12:51:46 +0200
Subject: [PATCH 18/21] instead of dis/enabling tabs on save, cancel tab
change. avoids noisy ui
---
apps/user_ldap/js/settings.js | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 73cace33758..25b39ae71f0 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -675,6 +675,10 @@ var LdapWizard = {
/** end of init user filter tab section **/
onTabChange: function(event, ui) {
+ if(LdapWizard.saveProcesses > 0) {
+ //do not allow to switch tabs as long as a save process is active
+ return false;
+ }
newTabIndex = 0;
if(ui.newTab[0].id === '#ldapWizard2') {
LdapWizard.initUserFilter();
@@ -765,7 +769,6 @@ var LdapWizard = {
$('#ldap .ldap_saving').removeClass('hidden');
LdapWizard.saveProcesses += 1;
$('#ldap *').addClass('save-cursor');
- LdapWizard.disableTabs();
param = 'cfgkey='+encodeURIComponent(object.id)+
'&cfgval='+encodeURIComponent(value)+
'&action=save'+
@@ -778,11 +781,7 @@ var LdapWizard = {
LdapWizard.saveProcesses -= 1;
if(LdapWizard.saveProcesses === 0) {
$('#ldap .ldap_saving').addClass('hidden');
- console.log('switch cursor');
- console.log($('#ldap *').css('cursor'));
$('#ldap *').removeClass('save-cursor');
- //enable the tabs again, if everything is OK
- LdapWizard.basicStatusCheck();
console.log($('#ldap *').css('cursor'));
}
if(result.status === 'success') {
From b7db454ffffe88e59cc1f2a553b91fa8fae44041 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 15 Oct 2014 17:28:18 +0200
Subject: [PATCH 19/21] remove debug output
---
apps/user_ldap/js/settings.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 25b39ae71f0..1627528200f 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -782,7 +782,6 @@ var LdapWizard = {
if(LdapWizard.saveProcesses === 0) {
$('#ldap .ldap_saving').addClass('hidden');
$('#ldap *').removeClass('save-cursor');
- console.log($('#ldap *').css('cursor'));
}
if(result.status === 'success') {
LdapWizard.processChanges(object);
From c714e9bf02f58130005babf66d56f5e34e084187 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon
Date: Wed, 15 Oct 2014 17:44:41 +0200
Subject: [PATCH 20/21] rephrase xp'ed user mode label
---
apps/user_ldap/templates/part.wizard-server.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index b829c775ad0..2952062c2f9 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -71,7 +71,7 @@
- t('I am familiar with LDAP?'));?>
+ t('Manually enter LDAP filters (recommended for large directories)'));?>
Date: Thu, 16 Oct 2014 12:08:05 +0200
Subject: [PATCH 21/21] left-align checkbox on server tab
---
apps/user_ldap/templates/part.wizard-server.php | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index 2952062c2f9..4412f4b1f38 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -70,14 +70,13 @@
-
- t('Manually enter LDAP filters (recommended for large directories)'));?>
-
-
+
+ t('Manually enter LDAP filters (recommended for large directories)'));?>
+