? 302440-2.patch
? hook_taxonomy_term_load.patch
? taxonomy_list_plus_test.patch
? taxonomy_term_load.patch
? term.patch
? term_edit.patch
? unappaproved.patch
? modules/user/.user.module.swp
? sites/default/files
? sites/default/settings.php
Index: modules/forum/forum.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.admin.inc,v
retrieving revision 1.12
diff -u -p -r1.12 forum.admin.inc
--- modules/forum/forum.admin.inc	16 Jul 2008 21:59:26 -0000	1.12
+++ modules/forum/forum.admin.inc	9 Sep 2008 22:47:58 -0000
@@ -160,7 +160,7 @@ function forum_form_container(&$form_sta
  * @param $tid ID of the term to be deleted
  */
 function forum_confirm_delete(&$form_state, $tid) {
-  $term = taxonomy_get_term($tid);
+  $term = taxonomy_term_load($tid);
 
   $form['tid'] = array('#type' => 'value', '#value' => $tid);
   $form['name'] = array('#type' => 'value', '#value' => $term->name);
Index: modules/taxonomy/taxonomy.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.admin.inc,v
retrieving revision 1.27
diff -u -p -r1.27 taxonomy.admin.inc
--- modules/taxonomy/taxonomy.admin.inc	16 Jul 2008 21:59:28 -0000	1.27
+++ modules/taxonomy/taxonomy.admin.inc	9 Sep 2008 22:47:59 -0000
@@ -233,9 +233,9 @@ function taxonomy_admin_vocabulary_edit(
 /**
  * Page to edit a vocabulary term.
  */
-function taxonomy_admin_term_edit($tid) {
-  if ($term = (array)taxonomy_get_term($tid)) {
-    return drupal_get_form('taxonomy_form_term', taxonomy_vocabulary_load($term['vid']), $term);
+function taxonomy_admin_term_edit($term) {
+  if (isset($term)) {
+    return drupal_get_form('taxonomy_form_term', taxonomy_vocabulary_load($term->vid), (array)$term);
   }
   return drupal_not_found();
 }
@@ -835,7 +835,7 @@ function taxonomy_term_confirm_parents(&
  * @see taxonomy_term_confirm_delete_submit()
  */
 function taxonomy_term_confirm_delete(&$form_state, $tid) {
-  $term = taxonomy_get_term($tid);
+  $term = taxonomy_term_load($tid);
 
   $form['type'] = array('#type' => 'value', '#value' => 'term');
   $form['name'] = array('#type' => 'value', '#value' => $term->name);
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.425
diff -u -p -r1.425 taxonomy.module
--- modules/taxonomy/taxonomy.module	24 Jul 2008 16:25:19 -0000	1.425
+++ modules/taxonomy/taxonomy.module	9 Sep 2008 22:47:59 -0000
@@ -142,9 +142,10 @@ function taxonomy_menu() {
     'type' => MENU_CALLBACK,
   );
 
-  $items['admin/content/taxonomy/edit/term'] = array(
+  $items['admin/content/taxonomy/edit/term/%taxonomy_term'] = array(
     'title' => 'Edit term',
     'page callback' => 'taxonomy_admin_term_edit',
+    'page arguments' => array(5),
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_CALLBACK,
   );
@@ -156,6 +157,18 @@ function taxonomy_menu() {
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
   );
+  $items['taxonomy/term/%/view'] = array(
+    'title' => 'View',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+  );
+  $items['taxonomy/term/%taxonomy_term/edit'] = array(
+    'title' => 'Edit term',
+    'page callback' => 'taxonomy_admin_term_edit',
+    'page arguments' => array(2),
+    'access arguments' => array('administer taxonomy'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 10,
+  );
 
   $items['taxonomy/autocomplete'] = array(
     'title' => 'Autocomplete taxonomy',
@@ -386,7 +399,7 @@ function taxonomy_del_term($tid) {
         }
       }
 
-      $term = (array) taxonomy_get_term($tid);
+      $term = (array) taxonomy_term_load($tid);
 
       db_query('DELETE FROM {term_data} WHERE tid = %d', $tid);
       db_query('DELETE FROM {term_hierarchy} WHERE tid = %d', $tid);
@@ -1005,11 +1018,47 @@ function taxonomy_vocabulary_load($vid) 
  * @return Object
  *   A term object. Results are statically cached.
  */
+function taxonomy_term_load($tid) {
+  static $terms = array();
+  // Ensure numeric tid to avoid loading the first term on 1+2 URLs.
+  // The db layer casts '1 2' to '1', so doesn't help here.
+  if (!is_numeric($tid)) {
+    return FALSE;
+  }
+
+  if (!isset($terms[$tid])) {
+    $terms[$tid] = db_fetch_object(db_query('SELECT * FROM {term_data} WHERE tid = :tid', array(':tid' => $tid)));
+  }
+  $term = $terms[$tid];
+
+  foreach (module_implements('taxonomy_term_load') as $module) {
+    $function = $module .'_taxonomy_term_load';
+    $result = $function(&$term);
+    if (isset($result)) {
+      $term->$module = $result;
+    }
+  }
+
+  return $term;
+}
+
+/**
+ * Return a term object with name and description.
+ * @param $tid
+ *   A term's ID
+ * @return Object
+ *  A term object. Results are statically cached.
+ */
 function taxonomy_get_term($tid) {
   static $terms = array();
+  // Ensure numeric tid to avoid loading the first term on 1+2 URLs.
+  // The db layer casts '1 2' to '1', so doesn't help here.
+  if (!is_numeric($tid)) {
+    return FALSE;
+  }
 
   if (!isset($terms[$tid])) {
-    $terms[$tid] = db_fetch_object(db_query('SELECT * FROM {term_data} WHERE tid = %d', $tid));
+    $terms[$tid] = db_fetch_object(db_query('SELECT * FROM {term_data} WHERE tid = :tid', array(':tid' => $tid)));
   }
 
   return $terms[$tid];
Index: modules/taxonomy/taxonomy.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.pages.inc,v
retrieving revision 1.12
diff -u -p -r1.12 taxonomy.pages.inc
--- modules/taxonomy/taxonomy.pages.inc	21 Aug 2008 19:36:38 -0000	1.12
+++ modules/taxonomy/taxonomy.pages.inc	9 Sep 2008 22:47:59 -0000
@@ -51,7 +51,7 @@ function taxonomy_term_page($str_tids = 
           $channel['title'] = variable_get('site_name', 'Drupal') . ' - ' . $title;
           // Only display the description if we have a single term, to avoid clutter and confusion.
           if (count($tids) == 1) {
-            $term = taxonomy_get_term($tids[0]);
+            $term = taxonomy_term_load($tids[0]);
             // HTML will be removed from feed description, so no need to filter here.
             $channel['description'] = $term->description;
           }
@@ -92,7 +92,7 @@ function theme_taxonomy_term_page($tids,
 
   // Only display the description if we have a single term, to avoid clutter and confusion.
   if (count($tids) == 1) {
-    $term = taxonomy_get_term($tids[0]);
+    $term = taxonomy_term_load($tids[0]);
     $description = $term->description;
 
     // Check that a description is set.
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.919
diff -u -p -r1.919 user.module
--- modules/user/user.module	8 Sep 2008 15:44:57 -0000	1.919
+++ modules/user/user.module	9 Sep 2008 22:47:59 -0000
@@ -17,6 +17,13 @@ define('USERNAME_MAX_LENGTH', 60);
 define('EMAIL_MAX_LENGTH', 64);
 
 /**
+ * Delete!!!!
+ */
+function user_taxonomy_term_load(&$term) {
+  return 'something';
+}
+
+/**
  * Invokes hook_user() in every module.
  *
  * We cannot use module_invoke() for this, because the arguments need to
