containing entity pkeys

Instead of looking for a match on the entity name, use the nesting structure
of containing entites to grab their pkeys.

Code review fixes

https://fedorahosted.org/freeipa/ticket/674
This commit is contained in:
Adam Young 2011-06-29 09:26:49 -04:00
parent 66eeaceb8c
commit b8b2ac5357
2 changed files with 30 additions and 7 deletions

View File

@ -597,7 +597,12 @@ IPA.entity = function (spec) {
pkey.unshift(IPA.nav.get_state(current_entity.name+'-pkey'));
return pkey;
};
/* most entites only require -pkey for their primary keys, but some
are more specific. This call allows those entites a place
to override the other parameters. */
that.get_key_names = function() {
return [that.name + '-pkey'];
};
that.entity_init = that.init;

View File

@ -115,14 +115,32 @@ IPA.navigation = function(spec) {
while(state[key]){
var value = state[key];
url_state[key] = value;
var entity = value;
for (var key2 in state){
if ((key2 === entity) || (key2.search('^'+entity) > -1)){
url_state[key2] = state[key2];
}
}
key = value;
}
/*We are at the leaf node, which is the sleected entity.*/
var entity = value;
for (var key2 in state){
if ((key2 === entity) || (key2.search('^'+entity +'-') > -1)){
url_state[key2] = state[key2];
}
}
/*
Trace back up the nested entities for their pkeys as well
*/
var current_entity = IPA.get_entity(entity);
while(current_entity !== null){
var key_names = current_entity.get_key_names();
for (var j = 0; j < key_names.length; j+= 1){
var key_name = key_names[j];
if (state[key_name]){
url_state[key_name] = state[key_name];
}
}
current_entity = current_entity.containing_entity;
}
$.bbq.pushState(url_state,2);
return true;
};