Index: vocabperms.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/vocabperms/vocabperms.module,v retrieving revision 1.1.2.11 diff -u -u -p -r1.1.2.11 vocabperms.module --- vocabperms.module 14 Jan 2008 11:31:56 -0000 1.1.2.11 +++ vocabperms.module 10 Feb 2008 19:36:03 -0000 @@ -163,14 +163,9 @@ function _vocabperms_node_form_remove_fi } } if ($perm > VOCABPERMS_EDIT) { - /* Convert the element to a value so any preset or existing values - * are retained. Use a default value if available. Otherwise, use - * the first option (which would be selected by default). - */ - $value = isset($elem['#default_value']) ? $elem['#default_value'] : key($elem['#options']); $field[$vid] = array( '#type' => 'value', - '#value' => $value, + '#value' => _vocabperms_find_default($elem), ); } else { @@ -185,6 +180,37 @@ function _vocabperms_node_form_remove_fi } /** + * Find a default value for the element. + */ +function _vocabperms_find_default($elem) { + // Use a default value if available. + if ($default_value = _vocabperms_find_value($elem, '#default_value')) { + return $default_value; + } + // Otherwise, use the first option (which would be selected by default). + if ($default_value = _vocabperms_find_value($elem, '#options')) { + return key($default_value); + } +} + +/** + * recursively called routine to recursively check sub-elements for a specific key, + * (set to either #default_value or #options). + */ +function _vocabperms_find_value($elem, $default_key) { + if (isset($elem[$default_key])) { + return $elem[$default_key]; + } + foreach ($elem as $key => $value) { + if ($key[0] != '#') { + if ($default_value = _vocabperms_find_value($value, $default_key)) { + return $default_value; + } + } + } +} + +/** * remove vocabularies from nodes when the user doesn't have perms * * SEE NOTE ABOVE