Index: project.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v
retrieving revision 1.92
diff -u -p -r1.92 project.inc
--- project.inc	12 Nov 2006 13:40:22 -0000	1.92
+++ project.inc	18 Dec 2006 01:17:26 -0000
@@ -257,7 +257,7 @@ function project_project_validate(&$node
       if ($node->project_type != $tid) {
         $tid_field = 'tid_' . $tid;
         if (!empty($node->$tid_field)) {
-          form_set_error($tid, t('Project type %project_type was selected, you can not use values from %invalid_type categories', array('%project_type' => theme('placeholder', $top_level[$node->project_type]), '%invalid_type' => theme('placeholder', $top_level[$tid]))));
+          form_set_error($tid, t('Project type %project_type was selected, you can not use values from %invalid_type categories', array('%project_type' => $top_level[$node->project_type], '%invalid_type' => $top_level[$tid])));
         }
       }
     }
@@ -285,7 +285,7 @@ function project_project_set_location(&$
   return $breadcrumb;
 }
 
-function project_project_view(&$node, $teaser = false, $page = false) {
+function project_project_view($node, $teaser = false, $page = false) {
   $node = project_project_content($node, $teaser);
   if ($page) {
     // Breadcrumb navigation
@@ -294,7 +294,10 @@ function project_project_view(&$node, $t
     menu_set_location($breadcrumb);
 
     if (function_exists('project_release_project_download_table')) {
-      $output = project_release_project_download_table($node);
+      $node->content['project_release_project_download_table'] = array(
+        '#value' => project_release_project_download_table($node),
+        '#weight' => -10,
+      );
     }
 
     // Misc section
@@ -306,6 +309,8 @@ function project_project_view(&$node, $t
       }
     }
 
+    $output = '';
+    
     if ($links) {
       $output .= theme('item_list', $links, t('Resources'));
     }
@@ -313,7 +318,7 @@ function project_project_view(&$node, $t
     // Support section
     $links = array();
 
-    if (module_exist('forum') && ($support_forum = variable_get('project_support_forum', ''))) {
+    if (module_exists('forum') && ($support_forum = variable_get('project_support_forum', ''))) {
       $links[] = l(t('Support forum'), 'forum/' . $support_forum);
     }
 
@@ -343,7 +348,7 @@ function project_project_view(&$node, $t
       $links[] = sprintf('<a href="%s">%s</a>', $node->cvs, t('Browse the CVS repository'));
     }
 
-    if (module_exist('cvs')) {
+    if (module_exists('cvs')) {
       $links[] = l(t('View CVS messages'), 'project/cvs/'. $node->nid);
       $links[] = l(t('Developers'), 'project/developers/'. $node->nid);
     }
@@ -352,8 +357,12 @@ function project_project_view(&$node, $t
       $output .= theme('item_list', $links, t('Development'));
     }
 
-    $node->body .= $output;
+    $node->content['project_body'] = array(
+      '#value' => $output,
+      '#weight' => 0,
+    );
   }
+  return $node;
 }
 
 function project_project_load($node) {
@@ -370,14 +379,14 @@ function project_project_nodeapi(&$node,
   switch ($op) {
     case 'insert':
       _project_save_taxonomy($node);
-      if (module_exist('path')) {
+      if (module_exists('path')) {
         path_set_alias("node/$node->nid", "project/$node->uri");
       }
       break;
 
     case 'update':
       _project_save_taxonomy($node);
-      if (module_exist('path')) {
+      if (module_exists('path')) {
         path_set_alias("node/$node->nid");  // Clear existing alias.
         path_set_alias("node/$node->nid", "project/$node->uri");
       }
@@ -409,7 +418,7 @@ function project_project_access($op, $no
       if ($user->uid && user_access('maintain projects')) {
         // Since this CVS access checking is non-standard, we need to
         // special-case uid 1 to always allow everything.
-        if ($user->uid != 1 && module_exist('cvs') && variable_get('cvs_restrict_project_creation',1)) {
+        if ($user->uid != 1 && module_exists('cvs') && variable_get('cvs_restrict_project_creation',1)) {
           return db_result(db_query("SELECT uid FROM {cvs_accounts} WHERE uid = %d AND status = %d", $user->uid, CVS_APPROVED)) ? TRUE : FALSE;
         }
         else {
Index: project.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v
retrieving revision 1.256
diff -u -p -r1.256 project.module
--- project.module	12 Nov 2006 13:40:22 -0000	1.256
+++ project.module	18 Dec 2006 01:17:28 -0000
@@ -8,10 +8,8 @@ if (file_exists("$path/project.inc")) {
 
 function project_help($section) {
   switch ($section) {
-    case 'admin/modules#description':
-      return t('Provides a project node type and browsing of projects.');
     case 'node/add#project_project':
-      return t('A project is something a group is working on. It can optionally have issue tracking, integration with revision control systems, releases, and so on.' );
+      return t('A project is something a group is working on. It can optionally have issue tracking, integration with revision control systems, releases, and so on.');
     case 'node/add/project_project':
       if (project_use_taxonomy()) {
         $tree = taxonomy_get_tree(_project_get_vid());
@@ -28,8 +26,8 @@ function project_help($section) {
           $help = t('<p>Properly categorizing your project will help ensure that users can find it easily.  Please follow these steps:</p>
           <ul>
             <li>Select <em>one</em> of the first-level terms (%types) as the project type.</li>
-            <li>Then choose <em>one or more</em> categories below this term to classify your project.  For example, for %type, you would choose from the various %type types: %categories, and so on.</li>
-          </ul>', array('%types' => implode (', ', $types), '%type' => $types[0], '%categories' => implode (', ', $categories)));
+            <li>Then choose <em>one or more</em> categories below this term to classify your project.  For example, for !type, you would choose from the various !type types: !categories, and so on.</li>
+          </ul>', array('!types' => implode (', ', $types), '!type' => $types[0], '!categories' => implode (', ', $categories)));
         }
       }
       $help .= variable_get('project_help_node_add', '');
@@ -40,7 +38,7 @@ function project_help($section) {
         return t('<p>The project module makes special use of the taxonomy (category) system.  A special vocabulary, "Projects", has been created automatically.</p>
         <p>To take full advantage of project categorization, add at least two levels of terms to this vocabulary.  The first level will be the basic project types, e.g., "modules", "themes", "translations".</p>
         <p>Subterms of each of these types will be the categories that users can select to classify the projects.  For example, "modules" might have sub-terms including "mail" and "XML".</p>
-        <p>Use the <a href="%taxonomy-admin">vocabulary admin page</a> to view and add terms.</p>', array('%taxonomy-admin' => url('admin/taxonomy/' . $vid)));
+        <p>Use the <a href="!taxonomy-admin">vocabulary admin page</a> to view and add terms.</p>', array('!taxonomy-admin' => url('admin/content/taxonomy/' . $vid)));
       }
       break;
   }
@@ -55,11 +53,11 @@ function project_block($op = 'list', $de
     return $blocks;
   }
   else if ($op == 'view') {
-    $uris = NULL;
-    $projects = array_merge(array(0 => t('<select a project>')), project_projects_select_options($uris, FALSE, 'node/'));
+    //$uris = NULL;
+    //$projects = array_merge(array(0 => t('<select a project>')), project_projects_select_options($uris, FALSE, 'node/'));
     $block['subject'] = t('Project navigation');
-    $form = project_quick_navigate_form($projects);
-    $block['content'] = drupal_get_form('project_quick_navigate_form', $form);
+    //$form = project_quick_navigate_form($projects);
+    $block['content'] = drupal_get_form('project_quick_navigate_form');
 
     return $block;
   }
@@ -67,7 +65,11 @@ function project_block($op = 'list', $de
 
 function project_node_info() {
   return array(
-    'project_project' => array('name' => t('project'), 'base' => 'project_project'),
+    'project_project' => array(
+      'name' => t('Project'), 
+      'module' => 'project_project',
+      'description' => t('Provides a project node type and browsing of projects.'),
+    ),
   );
 }
 
@@ -110,7 +112,7 @@ function project_main_settings() {
         '#title' => $term->name,
         '#default_value' => variable_get('project_sort_method_used_' . $term->tid, array_keys($sort_methods)),
         '#options' => $sort_methods,
-        '#description' => t('Sorting options to enable for %term', array('%term' => $term->name))
+        '#description' => t('Sorting options to enable for !term', array('!term' => $term->name))
       );
     }
   }
@@ -121,13 +123,13 @@ function project_main_settings() {
     '#description' => t('The default maximum number of projects to list when browsing lists, e.g., by category.')
   );
 
-  if (module_exist('forum') && project_use_taxonomy()) {
+  if (module_exists('forum') && project_use_taxonomy()) {
     $form['project_support_forum'] = taxonomy_form(_forum_get_vid(), variable_get('project_support_forum', ''), t('Select the support forum for projects'), 'project_support_forum');
   }
 
   // If the project_sort_method setting has changed, the menu will need to be rebuilt.
   menu_rebuild();
-  return system_settings_form('project_main_settings', $form);
+  return system_settings_form($form);
 }
 
 function project_link($type, $node = 0, $main = 0) {
@@ -136,9 +138,9 @@ function project_link($type, $node = 0, 
     case 'page':
       if (user_access('access projects')) {
         $links['project_view_all'] = array(
-          '#title' => t('projects'),
-          '#href' => 'project',
-          '#attributes' => array('title' => t('View all projects.')),
+          'title' => t('Projects'),
+          'href' => 'project',
+          'attributes' => array('title' => t('View all projects.')),
         );
       }
       break;
@@ -213,14 +215,22 @@ function project_menu($may_cache) {
     // User pages:
     $access = user_access('access projects');
 
+    $items[] = array('path' => 'admin/settings/project',
+      'title' => t('Projects'),
+      'callback' => 'drupal_get_form',
+      'callback arguments' => 'project_main_settings',
+      'access' => user_access('administer projects'),
+      'type' => MENU_NORMAL_ITEM,
+      'description' => t('Provides a project node type and browsing of projects.'),);
+
     $items[] = array('path' => 'project',
-      'title' => t('projects'),
+      'title' => t('Projects'),
       'callback' => 'project_page_overview',
       'access' => $access,
       'type' => MENU_NORMAL_ITEM);
 
     $items[] = array('path' => 'project/goto',
-      'title' => t('project navigation'),
+      'title' => t('Project navigation'),
       'callback' => 'project_goto',
       'access' => $access,
       'type' => MENU_CALLBACK);
@@ -249,7 +259,7 @@ function project_menu($may_cache) {
           $term_methods = array_filter(variable_get('project_sort_method_used_' . $term->tid, $sort_methods));
           foreach ($term_methods as $sort_method) {
             $items[] = array('path' => 'project/' . $term->name . '/'. $sort_method,
-                 'title' => t('browse by %sort_method', array('%sort_method' => $sort_method)),
+                 'title' => t('browse by !sort_method', array('!sort_method' => $sort_method)),
                  'access' => $access,
                  'type' => (($sort_method == variable_get('project_sort_method', 'category') || (($j == 0) && !in_array(variable_get('project_sort_method', 'category'), $term_methods))) ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK),
                  'weight' => ($sort_method == variable_get('project_sort_method', 'category')) ? -10 : $j,
@@ -265,11 +275,6 @@ function project_menu($may_cache) {
 
     // CVS messages:
     $items[] = array('path' => 'project/cvs', 'title' => t('CVS'), 'callback' => 'project_cvs', 'access' => $access, 'type' => MENU_CALLBACK);
-
-    // Create projects
-    $access = project_project_access('create', NULL);
-    $items[] = array('path' => 'node/add/project_project', 'title' => t('project'), 'callback' => 'node_page', 'access' => $access, 'type' => MENU_NORMAL_ITEM);
-
   }
   else {
     drupal_add_css(drupal_get_path('module', 'project') .'/project.css');
@@ -305,7 +310,7 @@ function project_form_alter($form_id, &$
       }
       else {
         unset($form['path']['path']);
-        $form['path']['value'] = array('#value' => t('Automatically generated path alias: %url', array('%url' => theme('placeholder', $url_alias))));
+        $form['path']['value'] = array('#value' => t('Automatically generated path alias: %url', array('%url' => $url_alias)));
       }
     }
   }
@@ -334,7 +339,7 @@ function project_goto() {
     drupal_goto($_REQUEST['edit']['project_goto']);
   }
   else {
-    drupal_goto();
+    //drupal_goto();
   }
 }
 
@@ -353,24 +358,10 @@ function project_page_overview($termname
 
   $breadcrumb = array(l(t('Home'), NULL));
   $sort_methods = module_invoke_all('project_sort_methods', 'methods');
-
-  if (module_exist('project_release') && variable_get('project_release_browse_versions', 0)) {
-    // Read in requested version, if any.
-    if ($_POST['edit']['version_tid']) {
-      $version = $_POST['edit']['version_tid'];
-    }
-    else if ($_SESSION['project_version']) {
-      $version = $_SESSION['project_version'];
-    }
-    else {
-      $version = variable_get('project_release_overview', -1);
-    }
-    $form = project_release_version_filter_form($version);
-    $version_form = drupal_get_form('project_release_version_filter_form', $form);
-    if ($_POST['edit']['version_tid']) {
-      $_SESSION['project_version'] = $form_values['version_tid'];
-    }
-    $output .= $version_form;
+  $output = '';
+  
+  if (module_exists('project_release') && variable_get('project_release_browse_versions', 0)) {
+    $output .= drupal_get_form('project_release_version_filter_form');;
   }
 
   // If browsing by taxonomy, only fetch projects for this term.
@@ -380,7 +371,7 @@ function project_page_overview($termname
 
       $term = db_fetch_object(db_query(db_rewrite_sql("SELECT t.tid, t.* FROM {term_data} t WHERE t.vid = %d AND t.name = '%s'", 't', 'tid'), $vid, $termname));
 
-      $breadcrumb[] = l(t('projects'), 'project', array('title' => t('Browse projects')));
+      $breadcrumb[] = l(t('Projects'), 'project', array('title' => t('Browse projects')));
 
       if (!$sort_method) {
         // For the default, we use the overall default if enabled for this term, and if not we use the first enabled method.
@@ -489,7 +480,7 @@ function project_page_overview($termname
       // If the site has enabled issue tracking via the project_issue
       // module, we want to add 1 more field and JOIN to our query so
       // we can provide the link for "Bugs and feature requests"...
-      if (module_exist('project_issue')) {
+      if (module_exists('project_issue')) {
         $sql_elements['fields']['pieces'][] = 'pip.issues';
         $sql_elements['joins']['pieces'][] = 'INNER JOIN {project_issue_projects} pip ON n.nid = pip.nid';
       }
@@ -570,7 +561,7 @@ function project_page_overview($termname
     // If the site has enabled issue tracking via the project_issue
     // module, we want to add 1 more field and JOIN to our query so
     // we can provide the link for "Bugs and feature requests"...
-    if (module_exist('project_issue')) {
+    if (module_exists('project_issue')) {
       $ISSUES = ', pip.issues';
       $ISSUE_JOIN ='INNER JOIN {project_issue_projects} pip ON n.nid = pip.nid';
     }
@@ -584,7 +575,10 @@ function project_page_overview($termname
       $project->terms = array();
       foreach (taxonomy_node_get_terms($project->nid) as $term) {
         if ($term->name != $termname) {
-          $project->terms[] = l($term->name, project_term_path($term));
+          $project->terms[] = array(
+            'title' => $term->name,
+            'href' => project_term_path($term),
+          );
         }
       }
     }
@@ -762,7 +756,7 @@ function _project_date($timestamp) {
  */
 function project_projects_select_options(&$project_urls, $issues = TRUE, $key_prefix = NULL) {
   $projects = array();
-  if ($issues && module_exist('project_issue')) {
+  if ($issues && module_exists('project_issue')) {
     $ISSUE_JOIN ='INNER JOIN {project_issue_projects} pip ON n.nid = pip.nid';
     $ISSUE_WHERE = 'AND pip.issues = 1';
   }
@@ -796,32 +790,36 @@ function project_projects_select_options
   return $projects;
 }
 
-function project_quick_navigate_form($projects) {
+function project_quick_navigate_form() {
+  $uris = NULL;
+  $projects = array_merge(array(0 => t('<select a project>')), project_projects_select_options($uris, FALSE, 'node/'));
   $form = array();
   $form['project_goto'] = array(
     '#type' => 'select',
     '#default_value' => '0',
     '#options' => $projects
   );
-  $form['destination'] = array(
-    '#type' => 'hidden',
-    '#value' => $_REQUEST['q']
-  );
   $form['submit'] = array(
-    '#type' => 'button',
+    '#type' => 'submit',
     '#value' => t('Go')
   );
-  $form['#action'] = url('project/goto');
+  //$form['#action'] = url('project/goto');
   return $form;
 }
 
+function project_quick_navigate_form_submit($form_id, $form_values) {
+  if (!empty($form_values['project_goto']) && (string)$form_values['project_goto'] != '0') {
+    drupal_goto($form_values['project_goto']);
+  }
+}
+
 // Themables
 
 function theme_project_term_list($terms, $path) {
   $depth = 0;
   $output = "\n<ul class=\"project-terms\">\n";
   foreach ($terms as $term) {
-    $link = l(t('%name (%count)', array('%name' => $term->name, '%count' => $term->count)), check_url("$path/$term->tid"));
+    $link = l(t('!name (!count)', array('!name' => $term->name, '!count' => $term->count)), check_url("$path/$term->tid"));
     $output .= '<li class="leaf">' . $link . "</li>\n";
   }
   $output .= "\n</ul>\n";
@@ -843,7 +841,7 @@ function theme_project_summary($project)
   $output = '<div class="' . $project->class . '">';
   $output .= '<h2>'. l($project->title, "node/$project->nid") .'</h2>';
   if ($project->changed) {
-    $output .= '<p><small>' . t('Last changed: %interval ago', array('%interval' => format_interval(time() - $project->changed, 2))) . '</small></p>';
+    $output .= '<p><small>' . t('Last changed: !interval ago', array('!interval' => format_interval(time() - $project->changed, 2))) . '</small></p>';
   }
   $output .= $project->body;
   $output .= theme('links', $project->links);
@@ -902,5 +900,5 @@ function project_autocomplete($string) {
  * taxonomy-specific functionality.
  */
 function project_use_taxonomy() {
-  return module_exist('taxonomy') && taxonomy_get_tree(_project_get_vid());
+  return module_exists('taxonomy') && taxonomy_get_tree(_project_get_vid());
 }
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.2
diff -u -p -r1.2 project_release.module
--- release/project_release.module	12 Nov 2006 13:40:22 -0000	1.2
+++ release/project_release.module	18 Dec 2006 01:17:29 -0000
@@ -15,8 +15,6 @@ define('PROJECT_RELEASE_VERSION_FORMAT_H
  */
 function project_release_help($section) {
   switch ($section) {
-    case 'admin/modules#description':
-      return t('Provides a project release node type.');
     case 'node/add#project_release':
       return t('A release of a project with a specific version number.');
   }
@@ -34,15 +32,40 @@ function project_release_menu($may_cache
     if (arg(0) == 'node' && is_numeric(arg(1))) {
       $node = node_load(arg(1));
       if ($node->type == 'project_project') {
-        $items[] = array('path' => 'node/'. arg(1) .'/release', 'title' => t('releases'), 'callback' => 'project_release_project_releases', 'access' => node_access('view', $node), 'weight' => 0, 'type' => MENU_CALLBACK);
+        $items[] = array(
+          'path' => 'node/'. arg(1) .'/release', 
+          'title' => t('Releases'), 
+          'callback' => 'project_release_project_releases', 
+          'access' => node_access('view', $node), 
+          'weight' => 0, 
+          'type' => MENU_CALLBACK
+        );
         if (node_access('update', $node)) {
-          $items[] = array('path' => 'node/'. arg(1) .'/release/overview', 'title' => t('overview'), 'callback' => 'project_release_project_releases', 'access' => node_access('view', $node), 'weight' => 0, 'type' => MENU_CALLBACK);
+          $items[] = array(
+            'path' => 'node/'. arg(1) .'/release/overview', 
+            'title' => t('Overview'), 
+            'callback' => 'project_release_project_releases', 
+            'access' => node_access('view', $node), 
+            'weight' => 0, 
+            'type' => MENU_CALLBACK
+          );
         }
       }
     }
-    theme_add_style(drupal_get_path('module', 'project_release') .'/project_release.css');
+    drupal_add_css(drupal_get_path('module', 'project_release') .'/project_release.css');
     project_release_get_api_taxonomy();
   }
+  else {
+    $items[] = array(
+      'path' => 'admin/settings/project_release',
+      'title' => t('Project release'),
+      'callback' => 'drupal_get_form',
+      'callback arguments' => '_project_release_settings',
+      'access' => user_access('administer projects'),
+      'type' => MENU_NORMAL_ITEM,
+      'description' => t('Provides a project release node type for projects.'),
+    );  
+  }
   return $items;
 }
 
@@ -50,7 +73,7 @@ function project_release_menu($may_cache
  * Callback for the main settings page.
  * @ingroup project_release_core
  */
-function project_release_settings() {
+function _project_release_settings() {
   if ($rel_dir = variable_get('project_release_directory', '')) {
     $form['project_release_directory'] = array(
       '#type' => 'textfield',
@@ -86,10 +109,10 @@ function project_release_settings() {
     $tids = variable_get('project_release_active_compatibility_tids', '');
     $form['project_release_active_compatibility_tids'] = array(
       '#type' => 'checkboxes',
-      '#title' => t('Active %vocab terms', array('%vocab' => check_plain($vocab->name))),
+      '#title' => t('Active @vocab terms', array('@vocab' => $vocab->name)),
       '#default_value' => $tids,
       '#options' => $terms,
-      '#description' => t('Terms from the %vocab vocabulary that should be visibile to end users and project maintainers.', array('%vocab' => theme('placeholder', $vocab->name))),
+      '#description' => t('Terms from the @vocab vocabulary that should be visibile to end users and project maintainers.', array('@vocab' => $vocab->name)),
     );
 
     // TODO: put these 2 in a fieldset?
@@ -110,10 +133,10 @@ function project_release_settings() {
     );
     $form['#validate'] = array_merge($form['#validate'], array('project_release_settings_validate' => array()));
   }
-  return $form;
+  return system_settings_form($form);
 }
 
-function project_release_settings_validate($form_id, $form_values, $form) {
+function _project_release_settings_validate($form_id, $form_values, $form) {
   if (!empty($form_values['project_release_directory'])) {
     form_set_error('project_release_directory', t('Release directory setting has been deprecated.'));
   }
@@ -121,7 +144,7 @@ function project_release_settings_valida
   $default_tid = $form_values['project_release_overview'];
   if ($default_tid != -1 && !$tids[$default_tid]) {
     $vocab = taxonomy_get_vocabulary(_project_release_get_api_vid());
-    form_set_error('project_release_overview', t('Project release overview must be one of the active %vocab terms', array('%vocab' => check_plain($vocab->name))));
+    form_set_error('project_release_overview', t('Project release overview must be one of the active @vocab terms', array('@vocab' => $vocab->name)));
   }
   
   // Make sure the default version format has no bad characters.
@@ -175,7 +198,7 @@ function project_release_access_check($p
     if ($user->uid == $project_obj->uid) {
        return TRUE;
     }
-    if (module_exist('cvs')) {
+    if (module_exists('cvs')) {
       if (db_num_rows(db_query("SELECT * FROM {cvs_project_maintainers} WHERE uid = %d AND nid = %d", $user->uid, $project_obj->nid))) {
         return TRUE;
       }
@@ -190,7 +213,10 @@ function project_release_access_check($p
  */
 function project_release_node_info() {
   return array(
-    'project_release' => array('name' => t('project release'), 'base' => 'project_release'),
+    'project_release' => array(
+      'name' => t('project release'), 
+      'module' => 'project_release',
+    ),
   );
 }
 
@@ -209,7 +235,7 @@ function project_release_form(&$release,
     $release->pid = arg(3);
     $project = node_load($release->pid);
     if (!isset($project) || $project->type != 'project_project') {
-      drupal_set_message(t('Node %nid is not a valid project.', array('%nid' => $release->pid)));
+      drupal_set_message(t('Node !nid is not a valid project.', array('!nid' => $release->pid)));
       drupal_not_found();
       module_invoke_all('exit');
       exit;
@@ -414,7 +440,7 @@ function project_release_validate(&$edit
     foreach (array('version_major' => 'Major version number', 'version_minor' => 'Minor version number') as $field => $name) {
       $val = $edit->$field;
       if (isset($val) && $val !== '' && !is_numeric($val)) {
-        form_set_error($field, t('%name must be a number.', array('%name' => $name)));
+        form_set_error($field, t('@name must be a number.', array('@name' => $name)));
       }
     }
     $val = $edit->version_patch;
@@ -450,7 +476,7 @@ function project_release_validate(&$edit
 
   // With cvs.module installed, this validation is already handled.
   // We only want to do it here if we're *not* doing the N-page form...
-  if (!module_exist('cvs') && !isset($edit->nid) && project_release_exists($edit)) {
+  if (!module_exists('cvs') && !isset($edit->nid) && project_release_exists($edit)) {
     // TODO: is there a better form element to mark with this error?
     form_set_error('version_patch', t('This version already exists for this project.'));
   }
@@ -495,7 +521,7 @@ function project_release_load($node) {
  */
 function project_release_insert($node) {
   project_release_db_save($node, true);
-  if (module_exist('cvs')) {
+  if (module_exists('cvs')) {
     if ($node->rebuild) {
       $msg = variable_get('cvs_message_new_release_branch', '');
     }
@@ -670,7 +696,7 @@ function project_release_get_version($re
  * Implementation of hook_view().
  * @ingroup project_release_node
  */
-function project_release_view(&$release, $teaser = FALSE, $page = FALSE) {
+function project_release_view($release, $teaser = FALSE, $page = FALSE) {
   $project = node_load($release->pid);
 
   if ($page) {
@@ -681,24 +707,27 @@ function project_release_view(&$release,
     menu_set_location($breadcrumb);
   }
 
-  $links = array();
   if ($release->rebuild) {
-    $output .= t('Nightly development snapshot from %tag', array('%tag' => check_plain($release->tag))) . '<br />';
+    $output .= t('Nightly development snapshot from @tag', array('@tag' => $release->tag)) . '<br />';
   }
   if ($release->file_path) {
-    $output .= '<small>' . t('Download: %file', array('%file' => l(basename($release->file_path), file_create_url($release->file_path)))) . '</small><br />';
-    $output .= '<small>' . t('Size: %size', array('%size' => format_size(filesize(file_create_path($release->file_path))))) . '</small><br />';
-    $output .= '<small>' . t('md5_file hash: %file_hash', array('%file_hash' => $release->file_hash)) . '</small><br />';
+    $output .= '<small>' . t('Download: !file', array('!file' => l(basename($release->file_path), file_create_url($release->file_path)))) . '</small><br />';
+    $output .= '<small>' . t('Size: !size', array('!size' => format_size(filesize(file_create_path($release->file_path))))) . '</small><br />';
+    $output .= '<small>' . t('md5_file hash: !file_hash', array('!file_hash' => $release->file_hash)) . '</small><br />';
   }
   if ($release->created) {
-    $output .= '<small>' . t('First released: %created', array('%created' => format_date($release->created))) . '</small><br />';
+    $output .= '<small>' . t('First released: !created', array('!created' => format_date($release->created))) . '</small><br />';
   }
   if ($release->changed  && ($release->changed != $release->created)) {
-    $output .= '<small>' . t('Last updated: %changed', array('%changed' => format_date($release->changed))) . '</small><br />';
+    $output .= '<small>' . t('Last updated: !changed', array('!changed' => format_date($release->changed))) . '</small><br />';
   }
-  $output .= theme('links', $links);
 
-  $release->body = '<div class="project-release">' . $output . '</div>' . check_markup($release->body, $release->format, FALSE);
+  $release->content['project_release_body'] = array(
+    '#value' => '<div class="project-release">' . $output . '</div>' . check_markup($release->body, $release->format, FALSE),
+    '#weight' => 0,
+  );
+  
+  return $release;
 }
 
 /**
@@ -717,7 +746,7 @@ function project_release_project_release
 
   $output = project_release_list($node);
 
-  drupal_set_title(t('Releases for %project', array('%project' => theme('placeholder', $node->title))));
+  drupal_set_title(t('Releases for %project', array('%project' => $node->title)));
   return $output;
 }
 
@@ -789,19 +818,28 @@ function project_release_compatibility_l
  * projects on a site with 'project_release_browse_versions' enabled.
  * @see project_page_overview
  */
-function project_release_version_filter_form($version) {
+function project_release_version_filter_form($version = NULL) {
   if ($terms = project_release_compatibility_list()) {
+    if (is_null($version)) {
+      $version = isset($_SESSION['project_version']) ? $_SESSION['project_version'] : variable_get('project_release_overview', -1);
+    }
     $form['version_tid'] = array(
       '#type' => 'select',
       '#default_value' => $version,
       '#options' => $terms,
     );
     $form['submit'] = array(
-      '#type' => 'button',
-      '#value' => t('Go')
+      '#type' => 'submit',
+      '#value' => t('Go'),
     );
   }
-  return $form;
+  return isset($form) ? $form : '';
+}
+
+function project_release_version_filter_form_submit($form_id, $form_values) {
+  if ($form_vales['version_tid']) {
+    $_SESSION['project_version'] = $form_values['version_tid'];
+  }
 }
 
 function theme_project_release_version_filter_form($form) {
@@ -812,7 +850,7 @@ function theme_project_release_version_f
   else {
     $label = t('version');
   }
-  $output = '<div class="container-inline">' . t('Filter by %label:', array('%label' => $label)) . form_render($form) . '</div>';
+  $output = '<div class="container-inline">' . t('Filter by !label:', array('!label' => $label)) . form_render($form) . '</div>';
   return $output;
 }
 
@@ -876,7 +914,7 @@ function project_release_alter_project_f
       '#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' => theme('placeholder', variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT)))),
+      '#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['#validate'] = array_merge($form['#validate'], array('project_release_project_form_validate' => array()));
   }
@@ -1013,7 +1051,7 @@ function project_release_project_downloa
   $release = node_load($node->version);
   // Make sure the release we think is the default is valid...
   if ($release->type == 'project_release' && $release->pid == $node->nid) {
-    $links[] = l(t('Download default release (%version, %date, %size)', array('%version' => $release->version, '%date' => format_date($release->file_date, 'small'), '%size' => format_size(filesize($release->file_path)))), file_create_url($release->file_path));
+    $links[] = l(t('Download default release (!version, !date, !size)', array('!version' => $release->version, '!date' => format_date($release->file_date, 'small'), '!size' => format_size(filesize($release->file_path)))), file_create_url($release->file_path));
   }
   $links[] = l(t('View all releases'), 'node/'. $node->nid .'/release');
   if (project_release_access_check($node->nid)) {
@@ -1039,7 +1077,7 @@ function project_release_taxonomy($op, $
  * API compatibility vocabulary, otherwise, it returns false.
  */
 function project_release_get_api_taxonomy() {
-  if (!module_exist('taxonomy')) {
+  if (!module_exists('taxonomy')) {
     return false;
   }
   return taxonomy_get_tree(_project_release_get_api_vid());
