Index: modules/project/issue.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/issue.inc,v
retrieving revision 1.129
diff -u -r1.129 issue.inc
--- modules/project/issue.inc	13 Oct 2005 13:33:09 -0000	1.129
+++ modules/project/issue.inc	13 Oct 2005 19:40:57 -0000
@@ -300,45 +300,46 @@
       );
     }
 
-    $group1 = form_select(t('Project'), 'pid', $node->pid, $projects, NULL, 0, FALSE, TRUE);
+    /* Project information fieldset - style used to be div.admin div.options */
+    $form['project_info'] = array('#type' => 'fieldset', '#title' => t('Project information'));
+    $form['project_info']['pid'] = array('#type' => 'select', '#title' => t('Project'), '#default_value' => $node->pid, '#options' => $projects, '#required' => TRUE);
     if ($releases) {
-      $group1 .= form_select(t('Version'), 'rid', $node->rid, $releases, NULL, 0, FALSE, TRUE);
+      $form['project_info']['rid'] = array('#type' => 'select', '#title' => t('Version'), '#default_value' => $node->rid, '#options' => $releases, '#required' => TRUE);
     }
-    $group1 .= form_select(t('Component'), 'component', $node->component, $components, NULL, 0, FALSE, TRUE);
+    $form['project_info']['component'] = array('#type' => 'select', '#title' => t('Component'), '#default_value' => $node->component, '#options' => $components, '#required' => TRUE);
 
-    $group2 = form_select(t('Category'), 'category', $node->category, $categories, NULL, 0, FALSE, TRUE);
-    $group2 .= form_select(t('Priority'), 'priority', $node->priority, $priorities);
-    $group2 .= form_select(t('Assigned'), 'assigned', $node->assigned, $assigned);
+    /* Issue information fieldset - style used to be div.admin div.options */
+    $form['issue_info'] = array('#type' => 'fieldset', '#title' => t('Issue information'));
+    $form['issue_info']['category'] = array('#type' => 'select', '#title' => t('Category'), '#default_value' => $node->category, '#options' => $categories, '#required' => TRUE);
+    $form['issue_info']['priority'] = array('#type' => 'select', '#title' => t('Priority'), '#default_value' => $node->priority, '#options' => $priorities);
+    $form['issue_info']['assigned'] = array('#type' => 'select', '#title' => t('Assigned'), '#default_value' => $node->assigned, '#options' => $assigned);
     if (count($states) > 1) {
-      $group2 .= form_select(t('Status'), 'sid', $node->sid ? $node->sid : $default_state, $states);
+      $form['issue_info']['sid'] = array('#type' => 'select', '#title' => t('Status'), '#default_value' => $node->sid ? $node->sid : $default_state, '#options' => $states);
     }
     else {
-      $group2 .= form_hidden('sid', $default_state);
-      $group2 .= form_item(t('Status'), project_issue_state($default_state));
+      $form['issue_info']['sid']    = array('#type' => 'hidden', '#default_value' => $default_state);
+      $form['issue_info']['status'] = array('#type' => 'item', '#title' => t('Status'), '#default_value' => project_issue_state($default_state));
     }
-    $output .= '</div>';
-    $output .= '<div class="admin">';
-    $output .= '<div class="options">'. form_group(t('Project information'), $group1) .'</div>';
-    $output .= '<div class="options">'. form_group(t('Issue information'), $group2) .'</div>';
-    $output .= '</div>';
-    $output .= '<div class="standard">';
 
+    /* 'Issue Details' fieldset - style used to be div.standard  */
+    $form['issue_details'] = array( '#type' => 'fieldset', '#title' => t('Issue Details'));
     if (function_exists('taxonomy_node_form')) {
-      $output .= implode('', taxonomy_node_form($node->type, $node));
+      $form['issue_details']['taxonomy'] = taxonomy_node_form($node);
     }
+    $form['issue_details']['title']      = array('#type' => 'textfield', '#title' => t('Title'), '#default_value' => $node->title, '#size' => 60, '#maxlength' => 128, '#required' => TRUE);
+    $form['issue_details']['body']       = array('#type' => 'textarea', '#title' => t('Description'), '#default_value' => $node->body, '#rows' => 40, '#cols' => 10, '#required' => !$node->comment);
+    $form['issue_details']['file_issue'] = array('#type' => 'file', '#title' => t('File attachment'), '#size' => 40, '#description' => ($node->file || $node->file_path ? t('A file already exists, if you upload another file the current file will be replaced.') : t('Optionally attach a file, for example a patch or a screenshot.')));
+
+    $form['format'] =  filter_form($node->format);
 
-    $output .= form_textfield(t('Title'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
-    $output .= form_textarea('Description', 'body', $node->body, 60, 20, NULL, NULL, !$node->comment);
-    $output .= filter_form('format', $node->format);
-    $output .= form_file(t('File attachment'), 'file_issue', 40, ($node->file || $node->file_path ? t('A file already exists, if you upload another file the current file will be replaced.') : t('Optionally attach a file, for example a patch or a screenshot.')));
   }
   else {
-    $output = form_select(t('Project'), 'pid', $node->pid, $projects);
+    $form['pid'] = array('#type' => 'select', '#title' => t('Project'), '#default_value' => $node->pid, '#options' => $projects, '#required' => TRUE);
     // Add a field indicating that this is a multi-stage submission.
-    $output .= form_hidden('wizard', 1);
+    $form['wizard'] = array('#type' => 'hidden', '#default_value' => 1);
   }
 
-  return $output;
+  return $form;
 }
 
 function project_issue_validate(&$node) {
Index: modules/project/project.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v
retrieving revision 1.57
diff -u -r1.57 project.inc
--- modules/project/project.inc	13 Oct 2005 13:33:09 -0000	1.57
+++ modules/project/project.inc	13 Oct 2005 19:55:21 -0000
@@ -3,7 +3,7 @@
 
 function project_project_form(&$node) {
   if (count($node->components)) {
-    $node->components = implode("\n", $node->components);
+  //  $node->components = implode("\n", $node->components);
   }
   else {
     $node->components = "Code\nDocumentation\nMiscellaneous\nUser interface";
@@ -18,52 +18,54 @@
     }
   }
 
-  $project .= form_textfield(t('Full project name'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
-  $project .= form_textarea(t('Full description'), 'body', $node->body, 40, 10, null, null, true);
-  $project .= filter_form('format', $node->format);
-  $project .= form_textfield(t('Short project name'), 'uri', $node->uri, 40, 50, t('This will be used to generate a /project/&lt;shortname&gt;/ URL for your project.'), null, true);
-  $project .= form_textfield(t('Project e-mail'), 'mail', $node->mail, 20, 255, t('E-mail address where the project owners can be contacted.'), null, true);
-  $project .= form_textfield(t('Homepage'), 'homepage', $node->homepage, 40, 255, t('Link to project homepage.'));
-  $project .= form_textfield(t('Documentation'), 'documentation', $node->documentation, 40, 255, t('Link to project documentation.'));
-  $project .= form_textfield(t('License'), 'license', $node->license, 40, 255, t('Link to project license.'));
-  $project .= form_textfield(t('Screenshots'), 'screenshots', $node->screenshots, 40, 255, t('Link to project screenshots.'));
-  $project .= form_textfield(t('Changelog'), 'changelog', $node->changelog, 40, 255, t('Link to changelog.'));
-  $project .= form_textfield(t('CVS tree'), 'cvs', $node->cvs, 40, 255, t('Link to webcvs/viewcvs.'));
-  $project .= form_textfield(t('Demo site'), 'demo', $node->demo, 40, 255, t('Link to a live demo.'));
+  if (function_exists('taxonomy_node_form')) {
+    $form['taxonomy'] = taxonomy_node_form($node);
+  }
 
-  $issue .= form_item(t('Issue tracker'), form_checkbox(t('Enable issue tracker'), 'issues', 1, $node->issues, t('Let users submit bug requests, patches, feature requests, support requests, etc.')));
+/* project information - style class was div.project */
+  $form['project'] = array('#type' => 'fieldset', '#title' => t('Project information'), '#collapsible' => TRUE, '#collapsed' => FALSE);
+  $form['project']['title']         = array('#type' => 'textfield', '#title' => t('Full project name'), '#default_value' => $node->title, '#size' => 60, '#maxlength' => 128, '#required' => TRUE);
+  $form['project']['body']          = array('#type' => 'textarea', '#title' => t('Full description'), '#default_value' => $node->body, '#rows' => 10, '#cols' => 40, '#required' => TRUE);
+  $form['format']                   = filter_form('format', $node->format);
+  $form['project']['uri']           = array('#type' => 'textfield', '#title' => t('Short project name'), '#default_value' => $node->uri, '#size' => 40, '#maxlength' => 50, '#description' => t('This will be used to generate a /project/&lt;shortname&gt;/ URL for your project.'), '#required' => TRUE);
+  $form['project']['mail']          = array('#type' => 'textfield', '#title' => t('Project e-mail'), '#default_value' => $node->mail, '#size' => 20, '#maxlength' => 255, '#description' => t('E-mail address where the project owners can be contacted.'), '#required' => TRUE);
+  $form['project']['homepage']      = array('#type' => 'textfield', '#title' => t('Homepage'), '#default_value' => $node->homepage, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project homepage.'));
+  $form['project']['documentation'] = array('#type' => 'textfield', '#title' => t('Documentation'), '#default_value' => $node->documentation, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project documentation.'));
+  $form['project']['license']       = array('#type' => 'textfield', '#title' => t('License'), '#default_value' => $node->license, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project license.'));
+  $form['project']['screenshots']   = array('#type' => 'textfield', '#title' => t('Screenshots'), '#default_value' => $node->screenshots, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project screenshots.'));
+  $form['project']['changelog']     = array('#type' => 'textfield', '#title' => t('Changelog'), '#default_value' => $node->changelog, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to changelog.'));
+  $form['project']['cvs']           = array('#type' => 'textfield', '#title' => t('CVS tree'), '#default_value' => $node->cvs, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to webcvs/viewcvs.'));
+  $form['project']['demo']          = array('#type' => 'textfield', '#title' => t('Demo site'), '#default_value' => $node->demo, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to a live demo.'));
+
+  /* issue information - style class was div.project */
+  $form['issue'] = array('#type' => 'fieldset', '#title' => t('Issue information'), '#collapsible' => TRUE, '#collapsed' => TRUE);
+  $form['issue']['issues'] = array('#type' => 'checkbox', '#title' => t('Enable issue tracker'), '#return_value' => 1, '#default_value' => $node->issues, '#description' => t('Let users submit bug requests, patches, feature requests, support requests, etc.'));
   if ($releases = project_release_load($node)) {
-    $issue .= form_select(t('Default version'), 'version', $node->version, $releases, t('Default version for issues.'));
+    $form['issue']['version'] = array('#type' => 'select', '#title' => t('Default version'), '#default_value' => $node->version, '#options' => $releases, '#description' => t('Default version for issues.'));
   }
-  $issue .= form_textarea(t('Components'), 'components', $node->components, 20, 5);
-  $issue .= form_textarea(t('Submission guidelines'), 'help', $node->help, 20, 5);
+  $form['issue']['components']  = array('#type' => 'textarea', '#title' => t('Components'), '#default_value' => $node->components, '#rows' => 5, '#cols' => 20);
+  $form['issue']['help']        = array('#type' => 'textarea', '#title' => t('Submission guidelines'), '#default_value' => $node->help, '#rows' => 5, '#cols' => 20);
 
-  $email .= form_textfield(t('Weekly critical issues report'), 'mail_digest', $node->mail_digest, 20, 255, t('To get a weekly digest of critical issues specify an e-mail address.'));
-  $email .= form_textfield(t('Issues e-mail address'), 'mail_copy', $node->mail_copy, 20, 255, t('If you wish to receive a copy of all the issues to a central location specify an address here.'));
+  /* email information - style class was div.project */
+  $form['email']                = array('#type' => 'fieldset', '#title' => t('E-mail options'), '#collapsible' => TRUE, '#collapsed' => TRUE);
+  $form['email']['mail_digest'] = array('#type' => 'textfield', '#title' => t('Weekly critical issues report'), '#default_value' => $node->mail_digest, '#size' => 20, '#maxlength' => 255, '#description' => t('To get a weekly digest of critical issues specify an e-mail address.'));
+  $form['email']['mail_copy']   = array('#type' => 'textfield', '#title' => t('Issues e-mail address'), '#default_value' => $node->mail_copy, '#size' => 20, '#maxlength' => 255, '#description' => t('If you wish to receive a copy of all the issues to a central location specify an address here.'));
   if (user_access('administer projects')) {
     $options = project_issue_category();
+    $form['email']['categories'] = array('#type' => 'fieldset', '#title' => t('Categories'), '#description' => t('Which issue categories to e-mail. If none are checked all categories will be posted.'));
     foreach ($options as $key => $choice) {
-      $data .= form_checkbox($choice, "mail_copy_filter][$key", $key, ($key == $node->mail_copy_filter[$key]));
+      $form['email']["mail_copy_filter][$key"] = array('#type' => 'checkbox', '#title' => $choice, '#return_value' => $key, '#default_value' => ($key == $node->mail_copy_filter[$key]));
     }
-    $email .= form_item(t('Categories'), $data, t('Which issue categories to e-mail. If none are checked all categories will be posted.'));
+
     $options = project_issue_state();
-    $filter_state = '';
+    $form['email']['states'] = array('#type' => 'fieldset', '#title' => t('States'), '#description' => t('Which issue states to e-mail. If none are checked all states will be posted.'));
     foreach ($options as $key => $choice) {
-      $filter_state .= form_checkbox($choice, "mail_copy_filter_state][$key", $key, ($key == $node->mail_copy_filter_state[$key]));
+      $form['email']["mail_copy_filter_state][$key"] = array('#type' => 'checkbox', '#title' => $choice, '#return_value' => $key, '#default_value' => ($key == $node->mail_copy_filter_state[$key]));
     }
-    $email .= form_item(t('States'), $filter_state, t('Which issue states to e-mail. If none are checked all states will be posted.'));
-    $email .= form_item(t('Monthly reminder'), form_checkbox(t('Send monthly reminders to users'), 'mail_reminder', 1, $node->mail_reminder, t('Enabling this will send a monthly reminder to users that have open issues registered.')));
+    $form['email']['mail_reminder'] = array('#type' => 'checkbox', '#title' => t('Send monthly reminders to users'), '#return_value' => 1, '#default_value' => $node->mail_reminder, '#description' => t('Enabling this will send a monthly reminder to users that have open issues registered.'));
   }
 
-  if (function_exists('taxonomy_node_form')) {
-    $output = implode('', taxonomy_node_form($node->type, $node));
-  }
-  $output .= '<div class="project">';
-  $output .= form_group(t('Project information'), $project);
-  $output .= form_group(t('Issue information'), $issue);
-  $output .= form_group(t('E-mail options'), $email);
-  $output .= '</div>';
-  return $output;
+  return $form;
 }
 
 function project_project_cleanup($input) {
@@ -146,8 +148,6 @@
       $node->components = array();
     }
   }
-
-  return $node;
 }
 
 /**
Index: modules/project/release.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release.inc,v
retrieving revision 1.57
diff -u -r1.57 release.inc
--- modules/project/release.inc	13 Oct 2005 13:33:09 -0000	1.57
+++ modules/project/release.inc	13 Oct 2005 19:39:46 -0000
@@ -179,24 +179,19 @@
   $param['options'] = array('enctype' => 'multipart/form-data');
   */
 
-  $output = form_textfield(t('Version'), 'version', $release->version, 40, 255, null, null, true);
-  $output .= form_textarea(t('Changes'), 'changes', $release->changes, 40, 10, null, null, true);
+  $form['version'] = array('#type' => 'textfield', '#title' => t('Version'), '#default_value' => $release->version, '#size' => 40, '#maxlength' => 255, '#required' => TRUE);
+  $form['changes'] = array('#type' => 'textarea', '#title' => t('Changes'), '#default_value' => $release->changes, '#rows' => 10, '#cols' => 40, '#required' => TRUE);
   if (!variable_get('project_release_directory', '')) {
   /* TODO: pending final fileapi
   $output .= form_file(t('File'), 'file', 40, ($release->fid) ? t('A file already exists, if you upload another file the current file will be replaced.') : '' . $error['file'], $release->fid);
   */
   }
   if ($release->rid) {
-    $output .= form_hidden('rid', $release->rid);
+    $form['rid'] = array('#type' => 'hidden', '#default_value' => $release->rid);
   }
-  $output .= form_hidden('nid', $release->nid);
+  $form['nid'] = array('#type' => 'hidden', '#default_value' => $release->nid);
 
-  $output .= form_submit(t('Preview'));
-  if (!form_get_errors()) {
-    $output .= form_submit(t('Submit'));
-  }
-
-  return $output;
+  return $form;
 }
 
 function project_release_validate(&$edit) {
Index: modules/project/project.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v
retrieving revision 1.213
diff -u -r1.213 project.module
--- modules/project/project.module	13 Oct 2005 13:35:16 -0000	1.213
+++ modules/project/project.module	13 Oct 2005 19:40:22 -0000
@@ -116,11 +116,14 @@
 
   $versions = array(-1 => t('all')) + project_releases_list();
 
-  $output = form_textfield(t('Release directory'), 'project_release_directory', variable_get('project_release_directory', ''), 50, 255, t('Leave this blank if project maintainers are to create their own release packages. This is useful if releases are generated by an external tool.'));
-  $output .= form_radios(t('Unmoderate projects with releases'), 'project_release_unmoderate', variable_get('project_release_unmoderate', 0), array('Disabled', 'Enabled'));
-  $output .= form_checkbox(t('Browse projects by releases'), 'project_browse_releases', 1, variable_get('project_browse_releases', 1), t('Checking this box will cause the project browsing page to have version subtabs.'));
-  $output .= form_radios(t('Default release overview'), 'project_release_overview', variable_get('project_release_overview', -1), $versions, t('Default release version to list on the overview page'));
-  $output .= form_textfield(t('Issue directory'), 'project_directory_issues', variable_get('project_directory_issues', 'issues'), 30, 255, t("Subdirectory in the directory '%dir' where attachment to issues will be stored.", array('%dir' => variable_get('file_directory_path', 'files') .'/')));
+  $form['project_releases'] = array('#type' => 'fieldset', '#title' => t('Project Releases'));
+  $form['project_releases']['project_release_directory']  = array('#type' => 'textfield', '#title' => t('Release directory'), '#default_value' => variable_get('project_release_directory', ''), '#size' => 50, '#maxlength' => 255, '#description' => t('Leave this blank if project maintainers are to create their own release packages. This is useful if releases are generated by an external tool.'));
+  $form['project_releases']['project_release_unmoderate'] = array('#type' => 'radios', '#title' => t('Unmoderate projects with releases'), '#default_value' => variable_get('project_release_unmoderate', 0), '#options' => array('Disabled', 'Enabled'));
+  $form['project_releases']['project_browse_releases']    = array('#type' => 'checkbox', '#title' => t('Browse projects by releases'), '#default_value' => variable_get('project_browse_releases', TRUE), '#description' => t('Checking this box will cause the project browsing page to have version subtabs.'));
+  $form['project_releases']['project_release_overview'] = array('#type' => 'radios', '#title' => t('Default release overview'), '#default_value' => variable_get('project_release_overview', -1), '#options' => $versions, '#description' => t('Default release version to list on the overview page'));
+
+  $form['project_issues'] = array('#type' => 'fieldset', '#title' => t('Project Issues'));
+  $form['project_issues']['project_directory_issues']  = array('#type' => 'textfield', '#title' => t('Issue directory'), '#default_value' => variable_get('project_directory_issues', 'issues'), '#size' => 30, '#maxlength' => 255, '#description' => t("Subdirectory in the directory '%dir' where attachment to issues will be stored.", array('%dir' => variable_get('file_directory_path', 'files') . '/')));
 
   if (module_exist('mailhandler')) {
     // TODO: move this stuff to mailhandler.module ?
@@ -130,10 +133,10 @@
       $items[$mail] = $mail;
     }
 
-    $output .= form_select(t('Reply-to address on e-mail notifications'), 'project_reply_to', variable_get('project_reply_to', ''), $items);
+    $form['project_reply_to'] = array('#type' => 'select', '#title' => t('Reply-to address on e-mail notifications'), '#default_value' => variable_get('project_reply_to', ''), '#options' => $items);
   }
 
-  return $output;
+  return $form;
 }
 
 function project_cron() {
