Index: release/project_release.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.js,v
retrieving revision 1.3
diff -u -p -r1.3 project_release.js
--- release/project_release.js	14 Jan 2009 06:13:57 -0000	1.3
+++ release/project_release.js	16 Jan 2010 22:25:49 -0000
@@ -1,73 +1,54 @@
 /* $Id: project_release.js,v 1.3 2009/01/14 06:13:57 dww Exp $ */
 
+// IE doesn't support hiding or disabling select options, so we have to rebuild the list. :(
+Drupal.projectReleaseRebuildSelect = function() {
+  // Remove everything
+  recommended = this.value;
+  while (this.length > 1) {
+    this.remove(1);
+  }
+
+  // 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 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');
+  }
+}
+
 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() {
+    $(this).parents('table:eq(0)').find('select').each(Drupal.projectReleaseRebuildSelect);
+
     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'));
-      }
+      $(this).parents('tr:eq(0)').find('.snapshot').removeAttr('disabled');
     }
     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;
-          }
-        });
-        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)') );
-        }
-      }
+      $(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');
+      $(this).parents('tr:eq(0)').find('.snapshot').attr('disabled','true');
     }
   });
-};
-
-Drupal.projectReleaseIsRecommendedSet = function (table) {
-  var recommended = false;
-  $(table).find(".recommended").each( function(i) {
-    if (this.checked) {
-      recommended = 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');
+  // Go ahead and remove the unavailable choices from the recommended list.
+  $('select.recommended').each(Drupal.projectReleaseRebuildSelect);
 };
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.147
diff -u -p -r1.147 project_release.module
--- release/project_release.module	9 Dec 2009 00:08:46 -0000	1.147
+++ release/project_release.module	16 Jan 2010 22:25:50 -0000
@@ -263,16 +263,6 @@ function project_release_check_supported
         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 {
@@ -290,18 +280,10 @@ function project_release_check_supported
           break;
         }
       }
-      if ($num_branches == 0) {
-        // First entry for this API tid. Add it as supported and recommended.
-        $recommended_branch = 1;
-      }
-      elseif (!$have_current_branch) {
-        // We've already got some branches (num_branches > 0), but not the
-        // current branch, so add it as supported but not recommended.
-        $recommended_branch = 0;
-      }
-      if (isset($recommended_branch)) {
-        // This is a branch new branch, so add a new record to the table.
-        db_query("INSERT INTO {project_release_supported_versions} (nid, tid, major, supported, recommended, snapshot, recommended_release, latest_release, latest_security_release) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $pid, $tid, $major, 1, $recommended_branch, 0, $recommended_release, $latest_release, $latest_security_release);
+      if ($num_branches == 0 || !$have_current_branch) {
+        // First entry for this API tid/major version pair, so add a new
+        // record to the table as supported but not recommended.
+        db_query("INSERT INTO {project_release_supported_versions} (nid, tid, major, supported, recommended, snapshot, recommended_release, latest_release, latest_security_release) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $pid, $tid, $major, 1, 0, 0, $recommended_release, $latest_release, $latest_security_release);
       }
       else {
         // We already have this branch in the table, but the latest_release
Index: release/includes/project_edit_releases.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/includes/project_edit_releases.inc,v
retrieving revision 1.2
diff -u -p -r1.2 project_edit_releases.inc
--- release/includes/project_edit_releases.inc	6 Aug 2009 01:32:57 -0000	1.2
+++ release/includes/project_edit_releases.inc	16 Jan 2010 22:25:50 -0000
@@ -33,7 +33,7 @@ function project_release_project_edit_fo
     $vocab = taxonomy_vocabulary_load(_project_release_get_api_vid());
     $form['help'] = array(
       '#type' => 'markup',
-      '#value' => t('For each term in the %api_vocabulary_name vocabulary, the following tables allow you to define which major versions are supported. If there are releases from more than one major version number, you can select which major version should be recommended for new users to download. You can also control if the development snapshot releases should be displayed on the front page of the project. Finally, for each term in the %api_vocabulary_name vocabulary, the current recommended release is shown. If no official releases have been made, the development snapshot from the corresponding branch will be listed. Otherwise, the most recent official release will be listed.', array('%api_vocabulary_name' => $vocab->name)),
+      '#value' => t('For each term in the %api_vocabulary_name vocabulary, the following tables allow you to define which major versions are supported. You can also control if the development snapshot releases should be displayed on the front page of the project. Finally, for each term in the %api_vocabulary_name vocabulary, you can select which major version (if any) should be recommended for new users to download.', array('%api_vocabulary_name' => $vocab->name)),
     );
   }
 
@@ -122,15 +122,18 @@ function _project_release_edit_version_m
       '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(
+        'current' => array(
+          '#type' => 'markup',
+          '#value' => project_release_get_current_recommended($node->nid, $api_tid, $major_version)->version,
+        ),
         'supported' => array(
           '#type' => 'checkbox',
           '#title' => t('Supported'),
@@ -158,22 +161,13 @@ function _project_release_edit_version_m
       );
     }
     $form['api'][$api_tid]['recommended'] = array(
-      '#type' => 'radios',
-      '#title' => t('Recommended'),
+      '#title' => t('Recommended major version'),
+      '#type' => 'select',
       '#options' => $recommended_options,
       '#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;
@@ -191,14 +185,13 @@ function theme_project_release_project_e
 
     $header = array(
       t('Major version'),
+      t('Current Release'),
       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();
@@ -206,21 +199,19 @@ function theme_project_release_project_e
       foreach (element_children($form['api'][$tid]['major']) as $major) {
         $row = array();
         $row[] = $major;
+        $row[] = drupal_render($form['api'][$tid]['major'][$major]['current']);
         // 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;
@@ -249,24 +240,12 @@ function project_release_project_edit_fo
       $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'])));
         }
       }
@@ -285,13 +264,9 @@ function project_release_project_edit_fo
 
   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']
