diff --git a/versioncontrol_release/versioncontrol_release.module b/versioncontrol_release/versioncontrol_release.module index 9f7b966..e36b238 100644 --- a/versioncontrol_release/versioncontrol_release.module +++ b/versioncontrol_release/versioncontrol_release.module @@ -424,6 +424,13 @@ function versioncontrol_release_attach_release_label_query_alter($query, $ids, $ */ function versioncontrol_release_form_alter(&$form, &$form_state, $form_id) { if ($form_id == 'project_release_node_form') { + // Set a flag in the node form to tell project_release to leave the + // version element fields alone and trust us to get it right. We'll + // replace this TRUE with an array of values if we need to define them. + $form['project_release_preserve_version_elements'] = array( + '#type' => 'value', + '#value' => TRUE, + ); // Use separate methods for the add and edit versions of this form. if (arg(1) == 'add') { versioncontrol_release_project_release_form_alter_add($form, $form_state); @@ -618,6 +625,38 @@ function versioncontrol_release_project_release_form_alter_add_node_form(&$form, $form['#versioncontrol_release_version'] = array_merge( (array) $version, array('version' => $version_string) ); + + // Since all these version element fields tend to use a hidden field + // widget, it's not easy (possible?) to set the values directly in the + // form. So we stash them in a separate form value that project_release + // will honor and save in the final release node for us. + $form['project_release_preserve_version_elements']['#value'] = array(); + $version_parts = array( + 'major', + 'minor', + 'patch', + // We handle version_extra separately since we'd also have to set the + // meta fields (version_ext_weight and version_ext_delta). + // Also, since the taxonomy selector is a visible form element, we + // handle that separately by just forcing the value to the right one (if + // defined via the VCS label). + ); + foreach ($version_parts as $part) { + if (isset($version->{'version_' . $part}) + && !empty($form['field_release_version_' . $part])) { + $form['project_release_preserve_version_elements']['#value'][$part] = $version->{'version_' . $part}; + } + } + if (isset($version->version_extra) + && !empty($form['field_release_version_extra'])) { + $form['project_release_preserve_version_elements']['#value']['extra'] = $version->version_extra; + $extra_meta = project_release_parse_version_extra($version->version_extra); + foreach (array('weight', 'delta') as $extra_key) { + if (!empty($form['field_release_version_ext_' . $extra_key])) { + $form['project_release_preserve_version_elements']['#value']['ext_' . $extra_key] = $extra_meta[$extra_key]; + } + } + } } else { // We should never get here, since we already filter out labels that don't