Added improved version of patch by @blizzz in https://github.com/owncloud/core/issues/6651#issuecomment-32261257 to stop filter settings from being reset under a race condition.

remotes/origin/ldap_group_count
ben-denham 11 years ago
parent 30f77f53d5
commit 43e79f41f3
  1. 192
      apps/user_ldap/js/settings.js

@ -138,6 +138,108 @@ var LdapConfiguration = {
}
};
// LdapFilter object.
function LdapFilter(target) {
this.locked = true;
this.target = false;
this.mode = LdapWizard.filterModeAssisted;
this.lazyRunCompose = false;
if( target === 'User' ||
target === 'Login' ||
target === 'Group') {
this.target = target;
this.determineMode();
}
}
LdapFilter.prototype.compose = function() {
var action;
if(this.locked) {
this.lazyRunCompose = true;
return false;
}
if(this.target === 'User') {
action = 'getUserListFilter';
} else if(this.target === 'Login') {
action = 'getUserLoginFilter';
} else if(this.target === 'Group') {
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());
var filter = this;
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
if(filter.target === 'User') {
LdapWizard.countUsers();
} else if(filter.target === 'Group') {
LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
},
function (result) {
// error handling
}
);
}
LdapFilter.prototype.determineMode = function() {
var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
var filter = this;
LdapWizard.ajax(param,
function(result) {
property = 'ldap' + filter.target + 'FilterMode';
filter.mode = result.changes[property];
if(filter.mode == LdapWizard.filterModeRaw
&& $('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
} else if(filter.mode == LdapWizard.filterModeAssisted
&& !$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
}
filter.unlock();
},
function (result) {
//on error case get back to default i.e. Assisted
if(!$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
filter.mode = LdapWizard.filterModeAssisted;
}
filter.unlock();
}
);
}
LdapFilter.prototype.unlock = function() {
this.locked = false;
if(this.lazyRunCompose) {
this.lazyRunCompose = false;
this.compose();
}
}
// end of LdapFilter object.
var LdapWizard = {
checkPortInfoShown: false,
saveBlacklist: {},
@ -145,6 +247,9 @@ var LdapWizard = {
spinner: '<img class="wizSpinner" src="'+ OC.imagePath('core', 'loading.gif') +'">',
filterModeAssisted: 0,
filterModeRaw: 1,
userFilter: false,
loginFilter: false,
groupFilter: false,
ajax: function(param, fnOnSuccess, fnOnError) {
$.post(
@ -275,41 +380,6 @@ var LdapWizard = {
}
},
composeFilter: function(type) {
subject = type.charAt(0).toUpperCase() + type.substr(1);
if(!$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
//Raw filter editing, i.e. user defined filter, don't compose
return;
}
if(type == 'user') {
action = 'getUserListFilter';
} else if(type == 'login') {
action = 'getUserLoginFilter';
} else if(type == 'group') {
action = 'getGroupFilter';
}
param = 'action='+action+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
if(type == 'user') {
LdapWizard.countUsers();
} else if(type == 'group') {
LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
},
function (result) {
// error handling
}
);
},
controlBack: function() {
curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex == 0) {
@ -559,7 +629,7 @@ var LdapWizard = {
},
initGroupFilter: function() {
LdapWizard.regardFilterMode('Group');
LdapWizard.groupFilter = new LdapFilter('Group');
LdapWizard.findObjectClasses('ldap_groupfilter_objectclass', 'Group');
LdapWizard.findAvailableGroups('ldap_groupfilter_groups', 'Groups');
LdapWizard.countGroups();
@ -568,13 +638,13 @@ var LdapWizard = {
/** init login filter tab section **/
initLoginFilter: function() {
LdapWizard.regardFilterMode('Login');
LdapWizard.loginFilter = new LdapFilter('Login');
LdapWizard.findAttributes();
},
postInitLoginFilter: function() {
if($('#rawLoginFilterContainer').hasClass('invisible')) {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}
},
@ -600,7 +670,7 @@ var LdapWizard = {
initUserFilter: function() {
LdapWizard.userFilterObjectClassesHasRun = false;
LdapWizard.userFilterAvailableGroupsHasRun = false;
LdapWizard.regardFilterMode('User');
LdapWizard.userFilter = new LdapFilter('User');
LdapWizard.findObjectClasses('ldap_userfilter_objectclass', 'User');
LdapWizard.findAvailableGroups('ldap_userfilter_groups', 'Users');
},
@ -608,7 +678,7 @@ var LdapWizard = {
postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun
&& LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.composeFilter('user');
LdapWizard.userFilter.compose();
LdapWizard.countUsers();
}
},
@ -657,7 +727,7 @@ var LdapWizard = {
if(triggerObj.id == 'ldap_loginfilter_username'
|| triggerObj.id == 'ldap_loginfilter_email') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}
if($('#ldapSettings').tabs('option', 'active') == 0) {
@ -666,32 +736,6 @@ var LdapWizard = {
}
},
regardFilterMode: function(subject) {
param = 'action=get'+encodeURIComponent(subject)+'FilterMode'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
LdapWizard.ajax(param,
function(result) {
property = 'ldap' + subject + 'FilterMode';
mode = result.changes[property];
if(mode == LdapWizard.filterModeRaw
&& $('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
} else if(mode == LdapWizard.filterModeAssisted
&& !$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
}
},
function (result) {
//on error case get back to default i.e. Assisted
if(!$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
}
}
);
},
save: function(inputObj) {
if(LdapWizard.blacklistRemove(inputObj.id)) {
return;
@ -713,15 +757,15 @@ var LdapWizard = {
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
if(originalObj == 'ldap_userfilter_objectclass'
|| originalObj == 'ldap_userfilter_groups') {
LdapWizard.composeFilter('user');
LdapWizard.userFilter.compose();
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
} else if(originalObj == 'ldap_loginfilter_attributes') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
} else if(originalObj == 'ldap_groupfilter_objectclass'
|| originalObj == 'ldap_groupfilter_groups') {
LdapWizard.composeFilter('group');
LdapWizard.groupFilter.compose();
}
},
@ -777,10 +821,10 @@ var LdapWizard = {
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
if(moc.indexOf('user') >= 0) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
LdapWizard.composeFilter('user');
LdapWizard.userFilter.compose();
} else {
LdapWizard.blacklistRemove('ldap_group_filter');
LdapWizard.composeFilter('group');
LdapWizard.groupFilter.compose();
}
}
},
@ -814,7 +858,7 @@ var LdapWizard = {
$('#ldap_loginfilter_username').prop('disabled', property);
LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
if(action == 'enable') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}
},

Loading…
Cancel
Save