### 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) ? '
' . print_r($row, TRUE) . '
' : 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 @@ +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; +}