Index: pathauto.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pathauto/pathauto.module,v
retrieving revision 1.154
diff -u -p -r1.154 pathauto.module
--- pathauto.module	22 Jul 2010 00:13:10 -0000	1.154
+++ pathauto.module	22 Jul 2010 04:05:50 -0000
@@ -177,6 +177,23 @@ function _pathauto_sql_concat() {
   }
 }
 
+/**
+ * Delete multiple URL aliases based on a wildcard source.
+ *
+ * Given a source like 'node/1' this function will delete any alias that have
+ * that specific source or any sources that match 'node/1/%'.
+ *
+ * @param $source
+ *   An string with a source URL path.
+ */
+function pathauto_path_delete_multiple($source) {
+  $sql = "SELECT pid FROM {url_alias} WHERE source = :source OR source LIKE :source-wildcard";
+  $pids = db_query($sql, array(':source' => $source, ':source-wildcard' => $source . '/%'))->fetchCol();
+  foreach ($pids as $pid) {
+    path_delete(array('pid' => $pid));
+  }
+}
+
 //==============================================================================
 // Some node related functions.
 
@@ -231,8 +248,7 @@ function _pathauto_node_insert_update($n
  * Implements hook_node_delete().
  */
 function pathauto_node_delete($node) {
-  path_delete(array('source' => 'node/' . $node->nid));
-  path_delete(array('source' => 'node/' . $node->nid . '/feed'));
+  pathauto_path_delete_multiple("node/{$node->nid}");
 }
 
 /**
@@ -328,7 +345,8 @@ function pathauto_node_operations() {
  */
 function pathauto_node_update_alias(stdClass $node, $op) {
   module_load_include('inc', 'pathauto');
-  pathauto_create_alias('node', $op, "node/{$node->nid}", array('node' => $node), $node->type, $node->language);
+  $uri = entity_uri('node', $node);
+  pathauto_create_alias('node', $op, $uri['path'], array('node' => $node), $node->type, $node->language);
 }
 
 /**
@@ -400,9 +418,8 @@ function _pathauto_taxonomy_term_insert_
  * Implements hook_taxonomy_term_delete().
  */
 function pathauto_taxonomy_term_delete($term) {
-  path_delete(array('source' => 'taxonomy/term/' . $term->tid));
-  path_delete(array('source' => 'forum/' . $term->tid));
-  path_delete(array('source' => 'taxonomy/term/' . $term->tid . '/0/feed'));
+  $uri = entity_uri('taxonomy_term', $term);
+  pathauto_path_delete_multiple($uri);
 }
 
 //==============================================================================
@@ -446,8 +463,7 @@ function _pathauto_user_insert_update(&$
         $alias = pathauto_create_alias('blog', $op, $source, array('user' => $new_user));
       }
       else {
-        path_delete(array('source' => 'blog/' . $new_user->uid));
-        path_delete(array('source' => 'blog/' . $new_user->uid . '/feed'));
+        pathauto_path_delete_multiple("blog/{$user->uid}");
       }
     }
   }
@@ -476,13 +484,10 @@ function pathauto_user_cancel($edit, $ac
       // Remove the users's path aliases
       $user = (object) $account;
       path_delete(array('source' => 'user/' . $user->uid));
-
+      pathauto_path_delete_multiple("user/{$user->uid}/%");
       // They may have enabled these modules and/or feeds when the user was created, so let's try to delete all of them
       path_delete(array('source' => 'blog/' . $user->uid));
-      path_delete(array('source' => 'blog/' . $user->uid . '/feed'));
-      path_delete(array('source' => 'user/' . $user->uid . '/track'));
-      path_delete(array('source' => 'user/' . $user->uid . '/track/feed'));
-      path_delete(array('source' => 'user/' . $user->uid . '/contact'));
+      pathauto_path_delete_multiple("blog/{$user->uid}/%");
       break;
   }
 }
@@ -520,7 +526,7 @@ function pathauto_user_update_alias(stdC
     }
     else {
       path_delete(array('source' => "blog/{$account->uid}"));
-      path_delete(array('source' => "blog/{$account->uid}/feed"));
+      pathauto_path_delete_multiple("blog/{$account->uid}/%");
     }
   }
 }

