detectors (email, displayname..) are now started in one place, triggered from only 2 places. more reliable structure and flow, saves requests

This commit is contained in:
Arthur Schiwon 2014-10-28 23:04:03 +01:00
parent f725cc66a3
commit 71944a59a5
3 changed files with 82 additions and 35 deletions

View File

@ -25,7 +25,7 @@ LdapFilter.prototype.activate = function() {
this.determineMode(); this.determineMode();
}; };
LdapFilter.prototype.compose = function(callback) { LdapFilter.prototype.compose = function() {
var action; var action;
if(this.locked) { if(this.locked) {
@ -54,14 +54,7 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param, LdapWizard.ajax(param,
function(result) { function(result) {
LdapWizard.applyChanges(result); filter.afterComposeSuccess(result);
filter.updateCount();
if(filter.target === 'Group') {
LdapWizard.detectGroupMemberAssoc();
}
if(typeof callback !== 'undefined') {
callback();
}
}, },
function () { function () {
console.log('LDAP Wizard: could not compose filter. '+ console.log('LDAP Wizard: could not compose filter. '+
@ -70,6 +63,15 @@ LdapFilter.prototype.compose = function(callback) {
); );
}; };
LdapFilter.prototype.afterDetectorsRan = function() {
this.updateCount();
};
LdapFilter.prototype.afterComposeSuccess = function(result) {
LdapWizard.applyChanges(result);
LdapWizard.runDetectors(this.target, this.afterDetectorsRan);
};
LdapFilter.prototype.determineMode = function() { LdapFilter.prototype.determineMode = function() {
var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+ var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
@ -145,10 +147,21 @@ LdapFilter.prototype.findFeatures = function() {
} }
}; };
LdapFilter.prototype.beforeUpdateCount = function(status) {
return LdapWizard.runDetectors(this.target, function() {
status.resolve();
});
};
LdapFilter.prototype.updateCount = function(doneCallback) { LdapFilter.prototype.updateCount = function(doneCallback) {
if(this.target === 'User') { var beforeUpdateCountDone = $.Deferred();
this.beforeUpdateCount(beforeUpdateCountDone);
var filter = this;
$.when(beforeUpdateCountDone).done(function() {
if(filter.target === 'User') {
LdapWizard.countUsers(doneCallback); LdapWizard.countUsers(doneCallback);
} else if (this.target === 'Group') { } else if (filter.target === 'Group') {
LdapWizard.countGroups(doneCallback); LdapWizard.countGroups(doneCallback);
} }
});
}; };

View File

@ -172,6 +172,7 @@ var LdapWizard = {
if(typeof reqID !== 'undefined') { if(typeof reqID !== 'undefined') {
LdapWizard.ajaxRequests[reqID] = request; LdapWizard.ajaxRequests[reqID] = request;
} }
return request;
}, },
applyChanges: function (result) { applyChanges: function (result) {
@ -373,20 +374,44 @@ var LdapWizard = {
}, },
countUsers: function(doneCallback) { countUsers: function(doneCallback) {
//we make user counting depending on having a display name attribute LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
},
runDetectors: function(type, callback) {
if(type === 'Group') {
$.when(LdapWizard.detectGroupMemberAssoc())
.then(callback, callback);
if( LdapWizard.admin.isExperienced
&& !(LdapWizard.detectorsRunInXPMode & LdapWizard.groupDetectors)) {
LdapWizard.detectorsRunInXPMode += LdapWizard.groupDetectors;
}
} else if(type === 'User') {
var req1 = LdapWizard.detectUserDisplayNameAttribute();
var req2 = LdapWizard.detectEmailAttribute();
$.when(req1, req2)
.then(callback, callback);
if( LdapWizard.admin.isExperienced
&& !(LdapWizard.detectorsRunInXPMode & LdapWizard.userDetectors)) {
LdapWizard.detectorsRunInXPMode += LdapWizard.userDetectors;
}
}
},
detectUserDisplayNameAttribute: function() {
var param = 'action=detectUserDisplayNameAttribute' + var param = 'action=detectUserDisplayNameAttribute' +
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback); //runs in the background, no callbacks necessary
return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectUserDisplayNameAttribute');
}, },
detectEmailAttribute: function() { detectEmailAttribute: function() {
param = 'action=detectEmailAttribute'+ var param = 'action=detectEmailAttribute'+
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
//runs in the background, no callbacks necessary //runs in the background, no callbacks necessary
LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute'); return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
}, },
detectGroupMemberAssoc: function() { detectGroupMemberAssoc: function() {
@ -394,7 +419,7 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
LdapWizard.ajax(param, return LdapWizard.ajax(param,
function(result) { function(result) {
//pure background story //pure background story
}, },
@ -416,7 +441,7 @@ var LdapWizard = {
$('#ldap_loginfilter_attributes').find('option').remove(); $('#ldap_loginfilter_attributes').find('option').remove();
for (var i in result.options['ldap_loginfilter_attributes']) { for (var i in result.options['ldap_loginfilter_attributes']) {
//FIXME: move HTML into template //FIXME: move HTML into template
attr = result.options['ldap_loginfilter_attributes'][i]; var attr = result.options['ldap_loginfilter_attributes'][i];
$('#ldap_loginfilter_attributes').append( $('#ldap_loginfilter_attributes').append(
"<option value='"+attr+"'>"+attr+"</option>"); "<option value='"+attr+"'>"+attr+"</option>");
} }
@ -573,8 +598,12 @@ var LdapWizard = {
}, },
isConfigurationActiveControlLocked: true, isConfigurationActiveControlLocked: true,
detectorsRunInXPMode: 0,
userDetectors: 1,
groupDetectors: 2,
init: function() { init: function() {
LdapWizard.detectorsRunInXPMode = 0;
LdapWizard.instantiateFilters(); LdapWizard.instantiateFilters();
LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked')); LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.basicStatusCheck(); LdapWizard.basicStatusCheck();
@ -637,7 +666,6 @@ var LdapWizard = {
$('#ldap_user_count').text(''); $('#ldap_user_count').text('');
LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount'); LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount');
LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner); LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner);
LdapWizard.detectEmailAttribute();
$('#ldap_user_count').removeClass('hidden'); $('#ldap_user_count').removeClass('hidden');
}); });
@ -658,7 +686,6 @@ var LdapWizard = {
$('#ldap_group_count').text(''); $('#ldap_group_count').text('');
LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount'); LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount');
LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner); LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner);
LdapWizard.detectGroupMemberAssoc();
$('#ldap_group_count').removeClass('hidden'); $('#ldap_group_count').removeClass('hidden');
}); });
}, },
@ -675,7 +702,7 @@ var LdapWizard = {
postInitUserFilter: function() { postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun && if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) { LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute); LdapWizard.userFilter.compose();
} }
}, },
@ -686,7 +713,7 @@ var LdapWizard = {
//do not allow to switch tabs as long as a save process is active //do not allow to switch tabs as long as a save process is active
return false; return false;
} }
newTabIndex = 0; var newTabIndex = 0;
if(ui.newTab[0].id === '#ldapWizard2') { if(ui.newTab[0].id === '#ldapWizard2') {
LdapWizard.initUserFilter(); LdapWizard.initUserFilter();
newTabIndex = 1; newTabIndex = 1;
@ -698,9 +725,23 @@ var LdapWizard = {
newTabIndex = 3; newTabIndex = 3;
} }
curTabIndex = $('#ldapSettings').tabs('option', 'active'); var curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex >= 0 && curTabIndex <= 3) { if(curTabIndex >= 0 && curTabIndex <= 3) {
LdapWizard.controlUpdate(newTabIndex); LdapWizard.controlUpdate(newTabIndex);
//run detectors in XP mode, when "Test Filter" button has not been
//clicked in order to make sure that email, displayname, member-
//group association attributes are properly set.
if( curTabIndex === 1
&& LdapWizard.admin.isExperienced
&& !(LdapWizard.detecorsRunInXPMode & LdapWizard.userDetectors)
) {
LdapWizard.runDetectors('User', function(){});
} else if( curTabIndex === 3
&& LdapWizard.admin.isExperienced
&& !(LdapWizard.detecorsRunInXPMode & LdapWizard.groupDetectors)
) {
LdapWizard.runDetectors('Group', function(){});
}
} }
}, },
@ -718,12 +759,6 @@ var LdapWizard = {
} }
} }
if(triggerObj.id === 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectEmailAttribute();
} else if(triggerObj.id === 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectGroupMemberAssoc();
}
if(triggerObj.id === 'ldap_loginfilter_username' if(triggerObj.id === 'ldap_loginfilter_username'
|| triggerObj.id === 'ldap_loginfilter_email') { || triggerObj.id === 'ldap_loginfilter_email') {
LdapWizard.loginFilter.compose(); LdapWizard.loginFilter.compose();
@ -756,7 +791,7 @@ var LdapWizard = {
LdapWizard._save($('#'+originalObj)[0], $.trim(values)); LdapWizard._save($('#'+originalObj)[0], $.trim(values));
if(originalObj === 'ldap_userfilter_objectclass' if(originalObj === 'ldap_userfilter_objectclass'
|| originalObj === 'ldap_userfilter_groups') { || originalObj === 'ldap_userfilter_groups') {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute); LdapWizard.userFilter.compose();
//when user filter is changed afterwards, login filter needs to //when user filter is changed afterwards, login filter needs to
//be adjusted, too //be adjusted, too
if(!LdapWizard.loginFilter) { if(!LdapWizard.loginFilter) {
@ -837,7 +872,7 @@ var LdapWizard = {
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted); LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
if(isUser) { if(isUser) {
LdapWizard.blacklistRemove('ldap_userlist_filter'); LdapWizard.blacklistRemove('ldap_userlist_filter');
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute); LdapWizard.userFilter.compose();
} else { } else {
LdapWizard.blacklistRemove('ldap_group_filter'); LdapWizard.blacklistRemove('ldap_group_filter');
LdapWizard.groupFilter.compose(); LdapWizard.groupFilter.compose();

View File

@ -120,7 +120,6 @@ class Wizard extends LDAPUtility {
* @throws \Exception * @throws \Exception
*/ */
public function countUsers() { public function countUsers() {
$this->detectUserDisplayNameAttribute();
$filter = $this->access->getFilterForUserCount(); $filter = $this->access->getFilterForUserCount();
$usersTotal = $this->countEntries($filter, 'users'); $usersTotal = $this->countEntries($filter, 'users');