### Eclipse Workspace Patch 1.0
#P CVS - Drupal 6.x - pathauto
Index: pathauto.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pathauto/pathauto.inc,v
retrieving revision 1.45.2.12
diff -u -r1.45.2.12 pathauto.inc
--- pathauto.inc	3 Mar 2010 04:48:17 -0000	1.45.2.12
+++ pathauto.inc	24 Mar 2010 23:04:07 -0000
@@ -43,16 +43,18 @@
  *
  * @param $src
  *   A string that is the internal path.
+ * @param $language
+ *   A string containing the language code to check against.
  * @return
  *   An array with the keys "pid" and "old_alias" containing
  *   the "pid" and old "alias", respectively, of the old alias.
  */
-function _pathauto_existing_alias_data($src) {
+function _pathauto_existing_alias_data($src, $language) {
   $output = array(
     'pid' => '',
     'old_alias' => ''
   );
-  $result = db_query("SELECT pid, dst FROM {url_alias} WHERE src='%s'", $src);
+  $result = db_query("SELECT pid, dst FROM {url_alias} WHERE src='%s' AND language = '%s'", $src, $language);
   if ($data = db_fetch_object($result)) {
     // The item is already aliased, check what to do...
     switch (variable_get('pathauto_update_action', 2)) {
@@ -276,7 +278,7 @@
     $term_path = taxonomy_term_path(taxonomy_get_term($entity_id));
     if ($term_path != $src) {
       // Quietly alias 'taxonomy/term/[tid]' with proper path for term.
-      $update_data = _pathauto_existing_alias_data($src);
+      $update_data = _pathauto_existing_alias_data($src, $language);
       _pathauto_set_alias($src, $term_path, $module, $entity_id, $update_data['pid'], FALSE, $update_data['old_alias'], $language);
       // Set $src as proper path.
       $src = $term_path;
@@ -291,7 +293,7 @@
       // Do nothing
       return '';
     }
-    $update_data = _pathauto_existing_alias_data($src);
+    $update_data = _pathauto_existing_alias_data($src, $language);
     $pid = $update_data['pid'];
     $old_alias = $update_data['old_alias'];
   }
@@ -344,11 +346,11 @@
 
     // For forums and taxonomies, the src doesn't always form the base of the rss feed (ie. image galleries)
     if ($module == 'taxonomy' || $module == 'forum') {
-      $update_data = _pathauto_existing_alias_data("taxonomy/term/$entity_id/$feedappend");
+      $update_data = _pathauto_existing_alias_data("taxonomy/term/$entity_id/$feedappend", $language);
       _pathauto_set_alias("taxonomy/term/$entity_id/$feedappend", "$alias/feed", $module, $entity_id, $update_data['pid'], $verbose, $update_data['old_alias'], $language);
     }
     else {
-      $update_data = _pathauto_existing_alias_data("$src/$feedappend");
+      $update_data = _pathauto_existing_alias_data("$src/$feedappend", $language);
       _pathauto_set_alias("$src/$feedappend", "$alias/feed", $module, $entity_id, $update_data['pid'], $verbose, $update_data['old_alias'], $language);
     }
   }
Index: pathauto.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pathauto/pathauto.test,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 pathauto.test
--- pathauto.test	13 Mar 2010 18:57:10 -0000	1.1.2.2
+++ pathauto.test	24 Mar 2010 23:04:07 -0000
@@ -31,7 +31,7 @@
   }
 
   function setUp() {
-    parent::setUp('path', 'token', 'pathauto');
+    parent::setUp('path', 'token', 'pathauto', 'pathauto_multilingual_test');
     module_load_include('inc', 'pathauto');
   }
 
@@ -41,6 +41,35 @@
   function testGetSchemaAliasMaxLength() {
     $this->assertIdentical(_pathauto_get_schema_alias_maxlength(), 128);
   }
+
+  /**
+   * Test automated creation of multilingual aliases using pathauto_create_alias()
+   */
+  function testMultiLingualAliases() {
+    // Create test pattern using language dependant token
+    variable_set('pathauto_pathauto_multilingual_test_pattern', '[pathauto_multilingual_test_placeholder]');
+    // Bulkupdate aliases
+    $count = pathauto_multilingual_test_pathauto_bulkupdate();
+    $this->assertEqual($count, @count(_pathauto_multilingual_test_languages()), t('Aliases have been created for each language.'));
+    // Dump url_alias rows
+    foreach (_pathauto_multilingual_test_languages() as $language) {
+      // Query database
+      $row = db_fetch_object(db_query("
+        SELECT * 
+        FROM {url_alias} 
+        WHERE src = 'path' 
+          AND language = '%s'
+      ", $language));
+      // Get expected alias
+      $expected_alias = token_replace('[pathauto_multilingual_test_placeholder]', 'pathauto_multilingual_test', (object) array('language' => $language));
+      // prepare message
+      $dump = !empty($row) ? '<pre style="font-size: 10px;">' . print_r($row, TRUE) . '</pre>' : theme('placeholder', 'NULL');
+      $language_display = empty($language) ? 'language neutral' : $language;
+      $message = t('Expected %language path alias found in %table table: !dump', array('%language' => $language_display, '%alias' => $expected_alias, '%table' => 'url_alias', '!dump' => $dump));
+      // Compare values
+      $this->assertEqual($expected_alias, $row->dst, $message);
+    }
+  }
 }
 
 /**
Index: pathauto_multilingual_test.info
===================================================================
RCS file: pathauto_multilingual_test.info
diff -N pathauto_multilingual_test.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pathauto_multilingual_test.info	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,6 @@
+; $Id$
+name = Pathauto multilingual tests
+description = Helper module for testing multilingual automated path aliases (do not enable manually)
+dependencies[] = pathauto
+package = Devel
+core = 6.x
Index: pathauto_multilingual_test.module
===================================================================
RCS file: pathauto_multilingual_test.module
diff -N pathauto_multilingual_test.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pathauto_multilingual_test.module	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,72 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ *   Helper module for testing automated multlilingual path aliases
+ */
+
+/**
+ * Get list of language codes to use.
+ */
+function _pathauto_multilingual_test_languages() {
+  // All language codes need to be invalid dummy codes to avoid matching the 
+  // site's default language as this would force drupal_get_path_alias() to 
+  // return the site's current language's alias when the language independent 
+  // path is queried during tests (known path module sorting issue)
+  // This issue would also result in false results when the language neutral 
+  // item is the first in line... so this is last to avoid irritating results.
+  return array('xx', 'yy', 'zz', '');
+}
+
+/**
+ * Implementation of hook_pathauto_bulkupdate().
+ */
+function pathauto_multilingual_test_pathauto_bulkupdate() {
+  $count = 0;
+  _pathauto_include();
+  $languages = _pathauto_multilingual_test_languages();
+  foreach ($languages as $language) {
+    $object = new stdClass();
+    $object->language = $language;
+    $placeholders = pathauto_get_placeholders('pathauto_multilingual_test', $object);
+    if (pathauto_create_alias('pathauto_multilingual_test', 'bulkupdate', $placeholders, 'path', 'entity_id', 'type', $language)) {
+      $count++;
+    }
+  }
+  // ---
+  return $count;
+}
+
+/**
+ * Implementation of hook_token_list().
+ */
+function pathauto_multilingual_test_token_list($type = 'all') {
+  $tokens = array();
+  switch ($type) {
+    case 'pathauto_multilingual_test' :
+      $tokens[$type]['pathauto_multilingual_test_placeholder'] = t('Custom placeholder (Language dependent)');
+      break;
+  }
+  // ---
+  return $tokens;
+}
+
+/**
+ * Implementation of hook_token_values().
+ */
+function pathauto_multilingual_test_token_values($type, $object = NULL, $options = array()) {
+  $tokens = array();
+  switch ($type) {
+    case 'pathauto_multilingual_test' :
+      if (empty($object->language) || $object->language == 'xx') {
+        $tokens['pathauto_multilingual_test_placeholder'] = 'alias-language-independent-or-xx';
+      }
+      else {
+        $tokens['pathauto_multilingual_test_placeholder'] = 'alias-yy-or-zz';
+      }
+      break;
+  }
+  // ---
+  return $tokens;
+}
