Index: modules/project/release/project_release.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.js,v
retrieving revision 1.3
diff -U5 -r1.3 modules/project/project_release.js
--- modules/project/release/project_release.js	14 Jan 2009 06:13:57 -0000	1.3
+++ modules/project/release/project_release.js	10 May 2009 05:01:06 -0000
@@ -1,73 +1,49 @@
 /* $Id: project_release.js,v 1.3 2009/01/14 06:13:57 dww Exp $ */
 
 Drupal.behaviors.projectReleaseAutoAttach = function () {
   // Set handler for clicking a radio to change the recommended version.
-  $('form#project-release-project-edit-form input.form-radio.recommended').click(function () {
-    Drupal.projectReleaseSetRecommended( this );
+  $('form#project-release-project-edit-form select.recommended').change(function () {
+    $(this).parents('table:eq(0)').find('tr:last').css('background-color', '#FFFFAA');
   });
   
   // Set handler for clicking checkbox to toggle a version supported/unsupported.
   $('form#project-release-project-edit-form input.form-checkbox.supported').click(function() {
-    if (this.checked) {
-      // Marking this version as supported.
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot').removeAttr('disabled');
-      // If there are no recommended versions, make this newly supported version recommended.
-      if (!Drupal.projectReleaseIsRecommendedSet($(this).parents('table:eq(0)'))) {
-        Drupal.projectReleaseSetRecommended($(this).parents('tr:eq(0)').find('.recommended'));
+    // IE doesn't support hiding or disabling select options, so we have to rebuild the list. :(
+    $(this).parents('table:eq(0)').find('select').each(function() {
+      // Remove everything
+      recommended = this.value;
+      while (this.length > 1) {
+        this.remove(1);
       }
-    }
-    else {
-      // Marking this version as unsupported, so disable row.
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot')
-        .attr('disabled','true')
-        .removeAttr('checked');
 
-      // Handle case were there are now no recommended versions.
-      if (!Drupal.projectReleaseIsRecommendedSet($(this).parents('table:eq(0)'))) {
-        // See if there is at least one supported versions.
-        var recommendable = null;
-        $(this).parents('table:eq(0)').find(".recommended").each( function(i) {
-          if (!this.disabled) {
-            recommendable = this;
+      // Now add the choices back.
+      choices = this;
+      $(this).parents('table:eq(0)').find('input.form-checkbox.supported:checked').each(function () {
+        $(this).parents('tr:eq(0)').find('td:first-child').each(function () {
+          choices.appendChild(new Option(this.innerHTML, this.innerHTML));
+          if (this.innerHTML == recommended) {
+            choices.selectedIndex = choices.length-1;
           }
         });
-        if (recommendable) {
-          // There is a supported version, so recommend it.
-          Drupal.projectReleaseSetRecommended( recommendable );
-        }
-        else {
-          // There are no supported versions.
-          Drupal.projectReleaseUnsetRecommended( $(this).parents('table:eq(0)') );
-        }
+      });
+
+      // If removing a supported version changes the recommended version then highlight it.
+      if (this.selectedIndex == 0 && recommended != -1) {
+        $(this).parents('table:eq(0)').find('tr:last').css('background-color', '#FFFFAA');
       }
+    });
+
+    if (this.checked) {
+      // Marking this version as supported.
+      $(this).parents('tr:eq(0)').find('.snapshot').removeAttr('disabled');
+    }
+    else {
+      // Marking this version as unsupported, so disable row.
+      $(this).parents('tr:eq(0)').find('.snapshot').attr('disabled','true').removeAttr('checked');
     }
   }).each( function() { // Disable unsupported versions on initial page load.
     if (!this.checked) {
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot').attr('disabled','true');
-    }
-  });
-};
-
-Drupal.projectReleaseIsRecommendedSet = function (table) {
-  var recommended = false;
-  $(table).find(".recommended").each( function(i) {
-    if (this.checked) {
-      recommended = true;
+      $(this).parents('tr:eq(0)').find('.snapshot').attr('disabled','true');
     }
   });
-  return recommended;
-};
-
-Drupal.projectReleaseSetRecommended = function (radio) {
-  $(radio).attr('checked','true');
-  var recommended = $(radio).parents('tr:eq(0)').find('.version-name').val();
-  $(radio).parents('table:eq(0)').find('tr:last span')
-    .html(recommended)
-    .css('background-color', '#FFFFAA');
-};
-
-Drupal.projectReleaseUnsetRecommended = function (table) {
-    $(table).find('tr:last span')
-      .html('n/a')
-      .css('background-color', '#FFFFAA');
 };
Index: modules/project/release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.111
diff -U5 -r1.111 modules/project/project_release.module
--- modules/project/release/project_release.module	4 Apr 2009 19:32:05 -0000	1.111
+++ modules/project/release/project_release.module	10 May 2009 05:01:08 -0000
@@ -780,20 +780,10 @@
       if ($num_recommended > 1) {
         // Something seriously bogus, clear out the values and start over.
         db_query("UPDATE {project_release_supported_versions} SET recommended = %d WHERE nid = %d AND tid = %d", 0, $pid, $tid);
         $num_recommended = 0;
       }
-
-      if ($num_recommended == 0) {
-        // We no longer have a recommended major for this API/tid, so select a
-        // sensible default, if possible. Find the lowest supported major
-        // number that has a published release.
-        $lowest_major = db_result(db_query("SELECT MIN(r.version_major) FROM {project_release_nodes} r INNER JOIN {project_release_supported_versions} prsv ON r.pid = prsv.nid INNER JOIN {node} n ON n.nid = r.nid INNER JOIN {term_node} tn ON tn.nid = n.nid WHERE r.pid = %d AND tn.tid = %d AND prsv.supported = %d AND n.status = %d", $pid, $tid, 1, 1));
-        if ($lowest_major !== NULL && $lowest_major !== FALSE) {
-          db_query("UPDATE {project_release_supported_versions} SET supported = %d, recommended = %d WHERE nid = %d AND tid = %d AND major = %d", 1, 1, $pid, $tid, $lowest_major);
-        }
-      }
     }
   }
   else {
     // Adding or editing a release.
     // First make sure this branch has at least 1 published release node
@@ -1272,18 +1262,16 @@
     $form['api'][$api_tid] = array(
       '#api_term_name' => $api_data['name'],
       'major' => array(),
     );
     $recommended_version = -1;
-    $recommended_options = array();
+    $recommended_options = array(-1 => t('None'));
     foreach ($api_data['majors'] as $major_version => $major_data) {
       if ($major_data['#recommended'] == TRUE) {
         $recommended_version = $major_version;
       }
-      $recommended_options[$major_version] = '';
-      $current = project_release_get_current_recommended($node->nid, $api_tid, $major_version);
-      $version_name = (!empty($current)) ? $current->version : t('n/a');
+      $recommended_options[$major_version] = $major_version;
       $form['api'][$api_tid]['major'][$major_version] = array(
         'supported' => array(
           '#type' => 'checkbox',
           '#title' => t('Supported'),
           '#default_value' => $major_data['#supported'],
@@ -1293,34 +1281,21 @@
           '#type' => 'checkbox',
           '#title' => t('Show snapshot release'),
           '#default_value' => $major_data['#snapshot'],
           '#attributes' => array('class' => 'snapshot'),
         ),
-        'version_name' => array(
-          '#type' => 'value',
-          '#value' => $version_name,
-          '#attributes' => array('class' => 'version-name'),
-        ),
       );
     }
+
     $form['api'][$api_tid]['recommended'] = array(
-      '#type' => 'radios',
-      '#title' => t('Recommended'),
+      '#type' => 'select',
       '#options' => $recommended_options,
+      '#title' => t('Recommended Branch'),
       '#default_value' => $recommended_version,
-      '#attributes' => array('class'=>'recommended'),
-    );
-    $recommended_major = db_result(db_query("SELECT major FROM {project_release_supported_versions} WHERE nid = %d AND tid = %d AND recommended = %d", $node->nid, $api_tid, 1));
-    if ($recommended_major !== FALSE) {
-      $current_recommended = $form['api'][$api_tid]['major'][$recommended_major]['version_name']['#value'];
-    }
-    else {
-      $current_recommended = t('n/a');
-    }
-    $form['api'][$api_tid]['currently_recommended'] = array(
-      '#type' => 'markup',
-      '#value' => '<label>'. t('Currently recommended') .':</label> <span>'. $current_recommended .'</span>',
+      '#prefix' => '<div class="container-inline">',
+      '#suffix' => '</div>',
+      '#attributes' => array('class' => 'recommended'),
     );
   }
   return $form;
 }
 
@@ -1335,17 +1310,15 @@
     $output .= '<p>'. drupal_render($form['help']) ."</p>\n";
 
     $header = array(
       t('Major version'),
       t('Supported'),
-      t('Recommended'),
       array(
         'data' => t('Show snapshot release'),
         'colspan' => 2,
       ),
     );
-
     foreach (element_children($form['api']) as $tid) {
       $output .= '<h3>'. $form['api'][$tid]['#api_term_name'] .'</h3>';
       $rows = array();
       krsort($form['api'][$tid]['major']);
       foreach (element_children($form['api'][$tid]['major']) as $major) {
@@ -1353,21 +1326,18 @@
         $row[] = $major;
         // We want to unset the titles for each element, since we already have
         // table headers to label each column.
         unset($form['api'][$tid]['major'][$major]['supported']['#title']);
         $row[] = drupal_render($form['api'][$tid]['major'][$major]['supported']);
-        unset($form['api'][$tid]['recommended'][$major]['#title']);
-        $row[] = drupal_render($form['api'][$tid]['recommended'][$major]);
         unset($form['api'][$tid]['major'][$major]['snapshot']['#title']);
-        $row[] = drupal_render($form['api'][$tid]['major'][$major]['snapshot']).
-          drupal_render($form['api'][$tid]['major'][$major]['version_name']);
+        $row[] = drupal_render($form['api'][$tid]['major'][$major]['snapshot']);
         $rows[] = $row;
       }
       // Finally, add a row for the currently recommended version.
       $row = array();
       $row[] = array(
-        'data' => drupal_render($form['api'][$tid]['currently_recommended']),
+        'data' => drupal_render($form['api'][$tid]['recommended']),
         'colspan' => 5,
       );
       $rows[] = $row;
       $output .= theme('table', $header, $rows);
     }
@@ -1392,28 +1362,16 @@
   if (isset($form_state['values']['api'])) {
     foreach ($form_state['values']['api'] as $tid => $api_info) {
       $supported = FALSE;
       // First, we just iterate through to see if *any* majors are supported.
       foreach ($api_info['major'] as $major => $flags) {
-        if (!empty($flags['supported'])) {
-          $supported = TRUE;
-          break;
-        }
-      }
-      if ($supported) {
         // At least 1 major is supported, so validate the settings.
-        foreach ($api_info['major'] as $major => $flags) {
-          if (empty($flags['supported']) && !empty($flags['snapshot'])) {
-            $element = 'api]['. $tid .'][major]['. $major .'][snapshot';
-            form_set_error($element, t('You can not show a snapshot release for a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
-          }
+        if ($flags['supported'] == FALSE && $flags['snapshot'] == TRUE) {
+          $element = 'api]['. $tid .'][major]['. $major .'][snapshot';
+          form_set_error($element, t('You can not show a snapshot release for a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
         }
-        $recommended = $api_info['recommended'];
-        if ($recommended < 0) {
-          form_set_error("api][$tid][recommended", t('You must select a recommended major version for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
-        }
-        elseif (empty($api_info['major'][$recommended]['supported'])) {
+        if ($flags['supported'] == FALSE && $api_info['recommended'] == $major) {
           form_set_error("api][$tid][recommended", t('You can not recommend a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
         }
       }
     }
   }
@@ -1428,17 +1386,13 @@
   $nid = $form_state['values']['nid'];
   db_query("UPDATE {project_release_projects} SET releases = %d, version_format = '%s' WHERE nid = %d", $form_state['values']['releases'], $form_state['values']['version_format'], $nid);
 
   if (!empty($form_state['values']['api'])) {
     foreach ($form_state['values']['api'] as $tid => $values) {
-      if (isset($values['recommended'])) {
-        $recommended_major = $values['recommended'];
-      }
       if (!empty($values['major'])) {
         foreach ($values['major'] as $major => $major_values) {
-          $major_values['recommended'] = ($major_values['supported'] && $recommended_major == $major) ? 1 : 0;
-          $major_values['snapshot'] = ($major_values['supported'] && $major_values['snapshot']) ? 1 : 0;
+          $major_values['recommended'] = ($values['recommended'] == $major) ? 1 : 0;
           if ($obj = db_fetch_object(db_query("SELECT * FROM {project_release_supported_versions} WHERE nid = %d AND tid = %d AND major = %d", $nid, $tid, $major))) {
             if ($obj->supported != $major_values['supported']
                 || $obj->recommended != $major_values['recommended']
                 || $obj->snapshot != $major_values['snapshot']) {
               db_query("UPDATE {project_release_supported_versions} SET supported = %d, recommended = %d, snapshot = %d WHERE nid = %d AND tid = %d AND major = %d", $major_values['supported'], $major_values['recommended'], $major_values['snapshot'], $nid, $tid, $major);
@@ -1673,11 +1627,11 @@
  *  with {node}.title, for the appropriate release.
  */
 function project_release_get_current_recommended($project_nid, $api_tid, $recommended_major = NULL) {
   static $current = array();
   $major = isset($recommended_major) ? $recommended_major : 'current';
-  if (isset($current_major[$project_nid][$api_tid][$major])) {
+  if (isset($current[$project_nid][$api_tid][$major])) {
     return $current[$project_nid][$api_tid][$major];
   }
 
   $join = $where = '';
   $params = $orderby = array();
