? project_releases_table.patch
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.55
diff -u -p -r1.55 project_release.module
--- release/project_release.module	21 Oct 2007 19:45:45 -0000	1.55
+++ release/project_release.module	23 Dec 2007 04:59:44 -0000
@@ -1023,7 +1023,75 @@ function project_release_project_edit_re
   return drupal_get_form('project_release_project_edit_form', $node);
 }
 
+
 function project_release_project_edit_form($node) {
+  $data = _project_release_project_edit_form_getdef($node);
+  return _project_release_project_edit_form_formdef($data);
+}
+
+function _project_release_project_edit_form_getdef($node) {
+  $data = array();
+  $data[102] = array(
+    'name' => '4.6.x',
+    'majors' => array(
+      1 => array('#recommended' => TRUE, '#supported' => TRUE),
+    ),
+  );
+  $data[103] = array(
+    'name' => '4.7.x',
+    'majors' => array(
+      1 => array('#recommended' => TRUE, '#supported' => TRUE),
+    ),
+  );
+  $data[104] = array(
+    'name' => '5.x',
+    'majors' => array(
+      1 => array('#recommended' => FALSE, '#supported' => FALSE),
+      2 => array('#recommended' => FALSE, '#supported' => TRUE),
+      3 => array('#recommended' => TRUE, '#supported' => TRUE),
+    ),
+  );
+  $data[105] = array(
+    'name' => '6.x',
+    'majors' => array(
+      1 => array('#recommended' => TRUE, '#supported' => TRUE),
+    ),
+  );
+  
+  $data['node'] = $node;
+  
+  return $data;
+}
+
+function _project_release_project_edit_form_formdef($data) {
+  $form = array();
+  
+  $node = $data['node'];
+  unset($data['node']);
+  
+  foreach ($data as $core_tid => $core_data) {
+    $form['cores'][$core_tid] = array(
+      '#core_name' => $core_data['name'],
+    );
+    $recommended_version = -1;
+    foreach ($core_data['majors'] as $major_version => $major_data) {
+      if ($major_data['#supported'] == TRUE) {
+        $recommended_version = $major_version;
+      }
+      $form['cores'][$core_tid]['major'][$major_version]['supported'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Supported'),
+        '#default_value' => $major_data['#supported'],
+      );
+    }
+    $form['cores'][$core_tid]['recommended'] = array(
+      '#type' => 'radios',
+      '#title' => t('Recommended'),
+      '#options' => array_keys($core_data['majors']),
+      '#default_value' => $recommended_version,
+    ); 
+  }
+  
   $form['advanced'] = array(
     '#type' => 'fieldset',
     '#title' => t('Advanced options'),
@@ -1040,121 +1108,49 @@ function project_release_project_edit_fo
     '#default_value' => isset($node->releases) ? $node->releases : 1,
     '#description' => t('Allow releases of this project with specific versions.'),
   );
-  if ($node->releases) {
-    $releases = array();
-    if ($tree = project_release_get_api_taxonomy()) {
-      $query = db_query('SELECT tid, major FROM {project_release_default_versions} WHERE nid = %d', $node->nid);
-      $node->default_versions = array();
-      while ($version = db_fetch_object($query)) {
-        $tid = $version->tid;
-        $major = $version->major;
-        $node->default_versions[$tid] = $major;
-      }
-      $result = db_query(db_rewrite_sql("SELECT n.nid, tn.tid, td.name, r.* FROM {node} n INNER JOIN {project_release_nodes} r ON r.nid = n.nid INNER JOIN {term_node} tn ON tn.nid = r.nid INNER JOIN {term_data} td ON tn.tid = td.tid WHERE (r.pid = %d) AND (n.status = 1) AND (r.file_path <> '') ORDER BY tn.tid, r.rebuild, r.version_major DESC, r.version_minor DESC, r.version_patch DESC, r.file_date DESC"), $node->nid);
-      while ($rel = db_fetch_object($result)) {
-        $tid = $rel->tid;
-        $major = $rel->version_major;
-        if (isset($major)) {
-          $releases[$tid]['majors'][$major] = $major;
-        }
-        $releases[$tid]['name'] = $rel->name;
-        if (!isset($releases[$tid]['current']) && (!isset($node->default_versions[$tid]) || $node->default_versions[$tid] == $major)) {
-          $releases[$tid]['current'] = $rel->version;
-        }
-      }
-      $form['default_versions'] = array('#tree' => TRUE);
-      foreach ($tree as $term) {
-        $tid = $term->tid;
-        if (isset($releases[$tid])) {
-          $form['default_versions'][$tid] = array();
-          if (count($releases[$tid]['majors']) > 1) {
-            $form['default_versions'][$tid]['major'] = array(
-              '#title' => t('Major version'),
-              '#type' => 'select',
-              '#options' => $releases[$tid]['majors'],
-              '#default_value' => isset($node->default_versions[$tid]) ? $node->default_versions[$tid] : 1,
-            );
-          }
-          else {
-            $form['default_versions'][$tid]['major'] = array(
-              '#type' => 'value',
-              '#theme' => 'project_release_form_value',
-              '#value' => is_array($releases[$tid]['majors']) ? current($releases[$tid]['majors']) : '',
-            );
-          }
-          $form['default_versions'][$tid]['current_release'] = array(
-            '#type' => 'value',
-            '#theme' => 'project_release_form_value',
-            '#value' => $releases[$tid]['current'],
-          );
-          $form['default_versions'][$tid]['name'] = array(
-            '#type' => 'value',
-            '#theme' => 'project_release_form_value',
-            '#value' => $releases[$tid]['name'],
-          );
-        }
-      }
-    }
-
-    if (user_access('administer projects')) {
-      $form['advanced']['version_format'] = array(
-        '#type' => 'textfield',
-        '#title' => t('Version format string'),
-        '#default_value' => $node->version_format,
-        '#size' => 50,
-        '#maxlength' => 255,
-        '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))),
-      );
-    }
-    $vocab = taxonomy_get_vocabulary(_project_release_get_api_vid());
-    $vocab = isset($vocab) ? theme('placeholder', $vocab->name) : t('version');
-    $form['snapshot_table'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Display snapshot releases on project page'),
-      '#return_value' => 1,
-      '#default_value' => isset($node->snapshot_table) ? $node->snapshot_table : 1,
-      '#description' => t('Note: Even if the current default release for a given !vocabulary_name is a development snapshot, it will only be shown if this checkbox is enabled.', array('!vocabulary_name' => $vocab)),
+  
+  if (user_access('administer projects')) {
+    $form['advanced']['version_format'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Version format string'),
+      '#default_value' => $node->version_format,
+      '#size' => 50,
+      '#maxlength' => 255,
+      '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))),
     );
   }
-
+  
   $form['nid'] = array('#type' => 'value', '#value' => $node->nid);
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Submit'),
     '#weight' => 45,
   );
-
+  
   return $form;
 }
 
+
 function theme_project_release_form_value($element) {
   return check_plain($element['#value']);
 }
 
 function theme_project_release_project_edit_form($form) {
   $output = '';
-  $rows = array();
-  if ($vocab = taxonomy_get_vocabulary(_project_release_get_api_vid())) {
-    $header = array(
-      check_plain($vocab->name),
-      t('Major version'),
-      t('Current default release'),
-    );
-  }
-  foreach (element_children($form['default_versions']) as $tid) {
-    $row = array();
-    $row[] = drupal_render($form['default_versions'][$tid]['name']);
-    unset($form['default_versions'][$tid]['major']['#title']);
-    $row[] = drupal_render($form['default_versions'][$tid]['major']);
-    $row[] = drupal_render($form['default_versions'][$tid]['current_release']);
-    $rows[] = $row;
-  }
-  if (count($rows)) {
-    $output .= '<h3>'. t('Default versions') .'</h3>';
-    $output .= theme('table', $header, $rows);
-    $output .= '<div class="form-item"><div class="description">'. t('This table allows you to specify the default version to download for any given %vocabulary_name. If there are releases from more than one major version number, you can select which major version should be used. For each %vocabulary_name, the current default release based on the saved major version 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 is used.', array('%vocabulary_name' => $vocab->name)) ."</div></div>\n";
+  
+  foreach ($form['cores'] as $core_tid => $core) {
+    $output .= '<h4>'. $core['#core_name'] .'</h4>';
+    $cells = array();
+    foreach (element_children($form['cores'][$core_tid]) as $key) {
+      $cell = array();
+      $cell[] = $key;
+      $cell[] = drupal_render($form['cores'][$core_tid]['major'][$key]['supported']);
+      $cells[] = $cell;
+    }
+    $output .= theme('table', array(t('Major version', 'Supported')), $cells);
   }
-  $output .= drupal_render($form['snapshot_table']);
+  unset($form['cores']);
+  
   $output .= drupal_render($form['advanced']);
   $output .= drupal_render($form);
   return $output;
