Index: feature.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feature/feature.module,v
retrieving revision 1.28
diff -u -p -r1.28 feature.module
--- feature.module	3 Jan 2008 05:15:09 -0000	1.28
+++ feature.module	3 Jan 2008 09:05:55 -0000
@@ -29,19 +29,15 @@ function feature_perm() {
 
 function feature_menu() {
   $items = array();
-  $access = user_access("maintain feature list");
-
   $items['admin/feature'] = array(
     'title'         => t('Features'),
     'page callback' => 'feature_admin_list', 
-    'access'        => $access,
-    'file'          => 'feature.module',
+    'access callback' => 'user_access',
+    'access arguments' => array('maintain feature list'),
   );
   $items['admin/feature/list'] = array(
     'title'         => t('List'),
     'page callback' => 'feature_admin_list', 
-    'access'        => $access,
-    'file'          => 'feature.module',
     'type'          => MENU_DEFAULT_LOCAL_TASK, 
     'weight'        => -10,
   );
@@ -49,45 +45,38 @@ function feature_menu() {
     'title'          => t('Add feature'),
     'page callback'  => 'drupal_get_form',
     'page arguments' => array('feature_admin'), 
-    'access'         => $access,
-    'file'           => 'feature.module',
     'type'           => MENU_LOCAL_TASK,
   );
-  $items['admin/feature/edit'] = array(
+  $items['admin/feature/edit/%feature'] = array(
     'title'          => t('Edit feature'),
     'page callback'  => 'drupal_get_form',
-    'page arguments' => array('feature_admin'), 
-    'access'         => $access,
-    'file'           => 'feature.module',
+    'page arguments' => array('feature_admin', 3),
     'type'           => MENU_CALLBACK,
   );
-  $items['admin/feature/delete'] = array(
+  $items['admin/feature/delete/%feature'] = array(
     'title'          => t('Delete feature'),
     'page callback'  => 'feature_admin_delete',
-    'access'         => $access,
-    'file'           => 'feature.module',
+    'page arguments' => array(3),
     'type'           => MENU_CALLBACK,
   );
   $items['admin/feature/settings'] = array(
     'title'          => t('Settings'),
     'page callback'  => 'drupal_get_form',
     'page arguments' => array('feature_settings'), 
-    'access'         => $access,
-    'file'           => 'feature.module',
     'type'           => MENU_LOCAL_TASK,
   );
   $items['features'] = array(
     'title'           => t('Features'),
     'page callback'   => 'feature_listing', 
-    'access'          => user_access('access content'),
-    'file'            => 'feature.module',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
     'type'            => MENU_CALLBACK,
   );
   return $items;
 }
 
-function feature_get($fid) {
-  if ($fid) {
+function feature_load($fid = 0) {
+  if(!empty($fid)) {
     $feature = db_fetch_object(db_query("SELECT * FROM {feature} WHERE fid = %d", $fid));
   }
   else {
@@ -117,13 +106,12 @@ function feature_settings() {
   return system_settings_form($form);
 }
 
-function feature_admin() {
+function feature_admin(&$form_state, $feature = NULL) {
   $categories = _feature_get_categories();
   
-  $op = arg(2);
-  $fid = (int)arg(3);
-
-  $feature = feature_get($fid);
+  if (empty($feature)) {
+    $feature = feature_load();
+  }
 
   $form['name'] = array(
     '#type' => 'textfield',
@@ -168,48 +156,45 @@ function feature_admin() {
     '#description' => t("The URL of a page or website with a screenshot or image of the feature."),
   );
 
-  if ($fid) {
+  if (!empty($feature->fid)) {
     $form['fid'] = array(
       '#type' => 'hidden', 
       '#value' => $feature->fid,
-      );
+    );
   }
-  
+
   $form['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Save'),
-    );
-
+  );
   return $form;
 }
 
-function feature_admin_validate($form_id, $form_values) {
-  if (empty($form_values['values']['name'])) {
+function feature_admin_validate($form, &$form_state) {
+  if (empty($form_state['values']['name'])) {
     form_set_error('name', t('You have to specify a valid name.')); 
   }
 
-  if (empty($form_values['values']['description'])) {
+  if (empty($form_state['values']['description'])) {
     form_set_error('description', t('You have to specify a valid description.')); 
   }
 }
 
-function feature_admin_submit($form_id, $form_values = NULL) {
-  $values = $form_values['values'];
-  if (isset($values['fid']) && isset($values['name'])) {
-    db_query("UPDATE {feature} SET name = '%s', category = '%d', description = '%s', details = '%s', image = '%s' WHERE fid = %d", $values['name'], $values['category'], $values['description'], $values['details'], $values['image'], $values['fid']);
+function feature_admin_submit($form, &$form_state) {
+  if (!empty($form_state['values']['fid']) && !empty($form_state['values']['name'])) {
+    db_query("UPDATE {feature} SET name = '%s', category = '%d', description = '%s', details = '%s', image = '%s' WHERE fid = %d", $form_state['values']['name'], $form_state['values']['category'], $form_state['values']['description'], $form_state['values']['details'], $form_state['values']['image'], $form_state['values']['fid']);
   }
   else {
-    db_query("INSERT INTO {feature} (name, category, description, details, image) VALUES  ('%s', '%s', '%s', '%s', '%s')", $values["name"], $values["category"], $values["description"], $values["details"], $values["image"]);
+    db_query("INSERT INTO {feature} (name, category, description, details, image) VALUES  ('%s', '%s', '%s', '%s', '%s')", $form_state['values']["name"], $form_state['values']["category"], $form_state['values']["description"], $form_state['values']["details"], $form_state['values']["image"]);
   }
 
   drupal_set_message(t('The feature has been saved.'));
-  drupal_goto('admin/feature');
+  $form_state['redirect'] = 'admin/feature';
 }
 
-function feature_admin_delete() {
-  $fid = (int)arg(3);
-  if (feature_get($fid)) {
-    return drupal_get_form('feature_admin_delete_confirm');
+function feature_admin_delete($feature) {
+  if (!empty($feature->fid)) {
+    return drupal_get_form('feature_admin_delete_confirm', $feature);
   }
   else {
     drupal_set_message(t('You requested to delete an invalid feature.'));
@@ -217,26 +202,21 @@ function feature_admin_delete() {
   }
 } 
 
-function feature_admin_delete_confirm() {
-  $fid = (int)arg(3);
-  $feature = feature_get($fid);
-  $form['fid'] = array(
-    '#type' => 'value',
-    '#value' => $fid,
-  );
+function feature_admin_delete_confirm(&$form_state, $feature) {
+  $form_state['fid'] = $feature->fid;
   return confirm_form(
-    $form,
-    t('Are you sure you want to delete feature @name?', array('@name' => $feature->name)),
+    array(),
+    t('Are you sure you want to delete feature %name?', array('%name' => $feature->name)),
     'admin/feature',
     t('This action cannot be undone.'),
     t('Delete'),
     t('Cancel'));
 }
 
-function feature_admin_delete_confirm_submit($form_id, $form_values) {
-  db_query("DELETE FROM {feature} WHERE fid = %d", $form_values['values']['fid']);
+function feature_admin_delete_confirm_submit($form, &$form_state) {
+  db_query("DELETE FROM {feature} WHERE fid = %d", $form_state['fid']);
   drupal_set_message(t('The feature has been deleted.'));
-  return 'admin/feature'; 
+  $form_state['redirect'] = 'admin/feature';
 } 
 
 function feature_admin_list() {
@@ -261,6 +241,9 @@ function feature_admin_list() {
 }
 
 function feature_listing() {
+  $output = '';
+  $category = -1;
+  
   $categories = _feature_get_categories();
 
   $result = db_query("SELECT * FROM {feature} ORDER BY category, name");
Index: feature.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feature/feature.info,v
retrieving revision 1.3
diff -u -p -r1.3 feature.info
--- feature.info	3 Jan 2008 05:15:09 -0000	1.3
+++ feature.info	3 Jan 2008 07:41:37 -0000
@@ -1,4 +1,3 @@
 name = Feature
 description = "Provides a custom feature set for a web site."
 core = 6.x
-package = 
