Merge pull request #13362 from owncloud/fix-11442

LDAP Wizared: update user or group count only, when the multiselect is closed
remotes/origin/create-share-target-reuse
Thomas Müller 12 years ago
commit d75af7ddd2
  1. 2
      apps/user_ldap/js/experiencedAdmin.js
  2. 32
      apps/user_ldap/js/ldapFilter.js
  3. 96
      apps/user_ldap/js/settings.js

@ -25,7 +25,7 @@ function ExperiencedAdmin(wizard, initialState) {
/** /**
* toggles whether the admin is an experienced one or not * toggles whether the admin is an experienced one or not
* *
* @param {boolean} whether the admin is experienced or not * @param {boolean} isExperienced whether the admin is experienced or not
*/ */
ExperiencedAdmin.prototype.setExperienced = function(isExperienced) { ExperiencedAdmin.prototype.setExperienced = function(isExperienced) {
this._isExperienced = isExperienced; this._isExperienced = isExperienced;

@ -19,6 +19,8 @@ function LdapFilter(target, determineModeCallback) {
LdapFilter.prototype.activate = function() { LdapFilter.prototype.activate = function() {
if(this.activated) { if(this.activated) {
// might be necessary, if configuration changes happened.
this.findFeatures();
return; return;
} }
this.activated = true; this.activated = true;
@ -69,14 +71,6 @@ LdapFilter.prototype.compose = function(updateCount) {
); );
}; };
/**
* this function is triggered after attribute detectors have completed in
* LdapWizard
*/
LdapFilter.prototype.afterDetectorsRan = function() {
this.updateCount();
};
/** /**
* this function is triggered after LDAP filters have been composed successfully * this function is triggered after LDAP filters have been composed successfully
* @param {object} result returned by the ajax call * @param {object} result returned by the ajax call
@ -99,11 +93,15 @@ LdapFilter.prototype.determineMode = function() {
function(result) { function(result) {
var property = 'ldap' + filter.target + 'FilterMode'; var property = 'ldap' + filter.target + 'FilterMode';
filter.mode = parseInt(result.changes[property], 10); filter.mode = parseInt(result.changes[property], 10);
if(filter.mode === LdapWizard.filterModeRaw && var rawContainerIsInvisible =
$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) { $('#raw'+filter.target+'FilterContainer').hasClass('invisible');
if ( filter.mode === LdapWizard.filterModeRaw
&& rawContainerIsInvisible
) {
LdapWizard['toggleRaw'+filter.target+'Filter'](); LdapWizard['toggleRaw'+filter.target+'Filter']();
} else if(filter.mode === LdapWizard.filterModeAssisted && } else if ( filter.mode === LdapWizard.filterModeAssisted
!$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) { && !rawContainerIsInvisible
) {
LdapWizard['toggleRaw'+filter.target+'Filter'](); LdapWizard['toggleRaw'+filter.target+'Filter']();
} else { } else {
console.log('LDAP Wizard determineMode: returned mode was »' + console.log('LDAP Wizard determineMode: returned mode was »' +
@ -142,8 +140,15 @@ LdapFilter.prototype.unlock = function() {
} }
}; };
/**
* resets this.foundFeatures so that LDAP queries can be fired again to retrieve
* objectClasses, groups, etc.
*/
LdapFilter.prototype.reAllowFeatureLookup = function () {
this.foundFeatures = false;
};
LdapFilter.prototype.findFeatures = function() { LdapFilter.prototype.findFeatures = function() {
//TODO: reset this.foundFeatures when any base DN changes
if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) { if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) {
this.foundFeatures = true; this.foundFeatures = true;
var objcEl, avgrEl; var objcEl, avgrEl;
@ -167,7 +172,6 @@ LdapFilter.prototype.findFeatures = function() {
/** /**
* this function is triggered before user and group counts are executed * this function is triggered before user and group counts are executed
* resolving the passed status variable will fire up counting * resolving the passed status variable will fire up counting
* @param {object} status an instance of $.Deferred
*/ */
LdapFilter.prototype.beforeUpdateCount = function() { LdapFilter.prototype.beforeUpdateCount = function() {
var status = $.Deferred(); var status = $.Deferred();

@ -149,6 +149,7 @@ var LdapWizard = {
loginFilter: false, loginFilter: false,
groupFilter: false, groupFilter: false,
ajaxRequests: {}, ajaxRequests: {},
lastTestSuccessful: true,
ajax: function(param, fnOnSuccess, fnOnError, reqID) { ajax: function(param, fnOnSuccess, fnOnError, reqID) {
if(!_.isUndefined(reqID)) { if(!_.isUndefined(reqID)) {
@ -207,7 +208,7 @@ var LdapWizard = {
}, },
basicStatusCheck: function() { basicStatusCheck: function() {
//criterias to continue from the first tab //criteria to continue from the first tab
// - host, port, user filter, agent dn, password, base dn // - host, port, user filter, agent dn, password, base dn
var host = $('#ldap_host').val(); var host = $('#ldap_host').val();
var port = $('#ldap_port').val(); var port = $('#ldap_port').val();
@ -224,7 +225,7 @@ var LdapWizard = {
blacklistAdd: function(id) { blacklistAdd: function(id) {
obj = $('#'+id); var 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 //no need to blacklist multiselect
LdapWizard.saveBlacklist[id] = true; LdapWizard.saveBlacklist[id] = true;
@ -242,14 +243,14 @@ var LdapWizard = {
}, },
checkBaseDN: function() { checkBaseDN: function() {
host = $('#ldap_host').val(); var host = $('#ldap_host').val();
port = $('#ldap_port').val(); var port = $('#ldap_port').val();
user = $('#ldap_dn').val(); var user = $('#ldap_dn').val();
pass = $('#ldap_agent_password').val(); var pass = $('#ldap_agent_password').val();
//FIXME: determine base dn with anonymous access //FIXME: determine base dn with anonymous access
if(host && port && user && pass) { if(host && port && user && pass) {
param = 'action=guessBaseDN'+ var param = 'action=guessBaseDN'+
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
@ -276,11 +277,11 @@ var LdapWizard = {
}, },
checkPort: function() { checkPort: function() {
host = $('#ldap_host').val(); var host = $('#ldap_host').val();
port = $('#ldap_port').val(); var port = $('#ldap_port').val();
if(host && !port) { if(host && !port) {
param = 'action=guessPortAndTLS'+ var param = 'action=guessPortAndTLS'+
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
@ -307,7 +308,7 @@ var LdapWizard = {
}, },
controlBack: function() { controlBack: function() {
curTabIndex = $('#ldapSettings').tabs('option', 'active'); var curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex == 0) { if(curTabIndex == 0) {
return; return;
} }
@ -316,7 +317,7 @@ var LdapWizard = {
}, },
controlContinue: function() { controlContinue: function() {
curTabIndex = $('#ldapSettings').tabs('option', 'active'); var curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex == 3) { if(curTabIndex == 3) {
return; return;
} }
@ -529,7 +530,7 @@ var LdapWizard = {
if(type !== 'User' && type !== 'Group') { if(type !== 'User' && type !== 'Group') {
return false; return false;
} }
param = 'action=determine'+encodeURIComponent(type)+'ObjectClasses'+ var param = 'action=determine'+encodeURIComponent(type)+'ObjectClasses'+
'&ldap_serverconfig_chooser='+ '&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val()); encodeURIComponent($('#ldap_serverconfig_chooser').val());
@ -571,11 +572,11 @@ var LdapWizard = {
functionalityCheck: function() { functionalityCheck: function() {
//criteria to enable the connection: //criteria to enable the connection:
// - host, port, basedn, user filter, login filter // - host, port, basedn, user filter, login filter
host = $('#ldap_host').val(); var host = $('#ldap_host').val();
port = $('#ldap_port').val(); var port = $('#ldap_port').val();
base = $('#ldap_base').val(); var base = $('#ldap_base').val();
userfilter = $('#ldap_userlist_filter').val(); var userfilter = $('#ldap_userlist_filter').val();
loginfilter = $('#ldap_login_filter').val(); var loginfilter = $('#ldap_login_filter').val();
//FIXME: activates a manually deactivated configuration. //FIXME: activates a manually deactivated configuration.
if(host && port && base && userfilter && loginfilter) { if(host && port && base && userfilter && loginfilter) {
@ -619,6 +620,7 @@ var LdapWizard = {
LdapWizard.detectorsRunInXPMode = 0; LdapWizard.detectorsRunInXPMode = 0;
LdapWizard.instantiateFilters(); LdapWizard.instantiateFilters();
LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked')); LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.lastTestSuccessful = true;
LdapWizard.basicStatusCheck(); LdapWizard.basicStatusCheck();
LdapWizard.functionalityCheck(); LdapWizard.functionalityCheck();
LdapWizard.isConfigurationActiveControlLocked = false; LdapWizard.isConfigurationActiveControlLocked = false;
@ -760,7 +762,19 @@ var LdapWizard = {
} }
}, },
processChanges: function(triggerObj) { /**
* allows UserFilter, LoginFilter and GroupFilter to lookup objectClasses
* and similar again. This should be called after essential changes, e.g.
* Host or BaseDN changes, or positive functionality check
*
*/
allowFilterFeatureSearch: function () {
LdapWizard.userFilter.reAllowFeatureLookup();
LdapWizard.loginFilter.reAllowFeatureLookup();
LdapWizard.groupFilter.reAllowFeatureLookup();
},
processChanges: function (triggerObj) {
LdapWizard.hideInfoBox(); LdapWizard.hideInfoBox();
if(triggerObj.id === 'ldap_host' if(triggerObj.id === 'ldap_host'
@ -771,6 +785,7 @@ var LdapWizard = {
if($('#ldap_port').val()) { if($('#ldap_port').val()) {
//if Port is already set, check BaseDN //if Port is already set, check BaseDN
LdapWizard.checkBaseDN(); LdapWizard.checkBaseDN();
LdapWizard.allowFilterFeatureSearch();
} }
} }
@ -804,15 +819,33 @@ var LdapWizard = {
LdapWizard._save(inputObj, val); LdapWizard._save(inputObj, val);
}, },
/**
* updates user or group count on multiSelect close. Resets the event
* function subsequently.
*
* @param {LdapFilter} filter
* @param {Object} $multiSelectObj
*/
onMultiSelectClose: function(filter, $multiSelectObj) {
filter.updateCount();
$multiSelectObj.multiselect({close: function(){}});
},
saveMultiSelect: function(originalObj, resultObj) { saveMultiSelect: function(originalObj, resultObj) {
values = ''; var values = '';
for(i = 0; i < resultObj.length; i++) { for(var i = 0; i < resultObj.length; i++) {
values = values + "\n" + resultObj[i].value; values = values + "\n" + resultObj[i].value;
} }
LdapWizard._save($('#'+originalObj)[0], $.trim(values)); LdapWizard._save($('#'+originalObj)[0], $.trim(values));
var $multiSelectObj = $('#'+originalObj);
var updateCount = !$multiSelectObj.multiselect("isOpen");
var applyUpdateOnCloseToFilter;
if(originalObj === 'ldap_userfilter_objectclass' if(originalObj === 'ldap_userfilter_objectclass'
|| originalObj === 'ldap_userfilter_groups') { || originalObj === 'ldap_userfilter_groups') {
LdapWizard.userFilter.compose(true); LdapWizard.userFilter.compose(updateCount);
if(!updateCount) {
applyUpdateOnCloseToFilter = LdapWizard.userFilter;
}
//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) {
@ -823,7 +856,19 @@ var LdapWizard = {
LdapWizard.loginFilter.compose(); LdapWizard.loginFilter.compose();
} else if(originalObj === 'ldap_groupfilter_objectclass' } else if(originalObj === 'ldap_groupfilter_objectclass'
|| originalObj === 'ldap_groupfilter_groups') { || originalObj === 'ldap_groupfilter_groups') {
LdapWizard.groupFilter.compose(true); LdapWizard.groupFilter.compose(updateCount);
if(!updateCount) {
applyUpdateOnCloseToFilter = LdapWizard.groupFilter;
}
}
if(applyUpdateOnCloseToFilter instanceof LdapFilter) {
$multiSelectObj.multiselect({
close: function () {
LdapWizard.onMultiSelectClose(
applyUpdateOnCloseToFilter, $multiSelectObj);
}
});
} }
}, },
@ -1002,6 +1047,10 @@ var LdapWizard = {
$('.ldap_config_state_indicator').addClass('ldap_grey'); $('.ldap_config_state_indicator').addClass('ldap_grey');
$('.ldap_config_state_indicator_sign').removeClass('error'); $('.ldap_config_state_indicator_sign').removeClass('error');
$('.ldap_config_state_indicator_sign').addClass('success'); $('.ldap_config_state_indicator_sign').addClass('success');
if(!LdapWizard.lastTestSuccessful) {
LdapWizard.lastTestSuccessful = true;
LdapWizard.allowFilterFeatureSearch();
}
}, },
//onError //onError
function(result) { function(result) {
@ -1011,6 +1060,7 @@ var LdapWizard = {
$('.ldap_config_state_indicator').removeClass('ldap_grey'); $('.ldap_config_state_indicator').removeClass('ldap_grey');
$('.ldap_config_state_indicator_sign').addClass('error'); $('.ldap_config_state_indicator_sign').addClass('error');
$('.ldap_config_state_indicator_sign').removeClass('success'); $('.ldap_config_state_indicator_sign').removeClass('success');
LdapWizard.lastTestSuccessful = false;
} }
); );
} else { } else {

Loading…
Cancel
Save