summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/path.inc3
-rw-r--r--modules/path/path.test16
2 files changed, 18 insertions, 1 deletions
diff --git a/includes/path.inc b/includes/path.inc
index e2c3c9095..ac78b0a74 100644
--- a/includes/path.inc
+++ b/includes/path.inc
@@ -131,6 +131,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) {
// isn't a path that has this alias
elseif ($action == 'source' && !isset($cache['no_source'][$path_language][$path])) {
// Look for the value $path within the cached $map
+ $source = FALSE;
if (!isset($cache['map'][$path_language]) || !($source = array_search($path, $cache['map'][$path_language]))) {
// Get the most fitting result falling back with alias without language
if ($source = db_query("SELECT source FROM {url_alias} WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language DESC, pid DESC", array(
@@ -139,7 +140,6 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) {
':language_none' => LANGUAGE_NONE))
->fetchField()) {
$cache['map'][$path_language][$source] = $path;
- return $source;
}
else {
// We can't record anything into $map because we do not have a valid
@@ -148,6 +148,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) {
$cache['no_source'][$path_language][$path] = TRUE;
}
}
+ return $source;
}
}
diff --git a/modules/path/path.test b/modules/path/path.test
index a777871ca..6584eda6b 100644
--- a/modules/path/path.test
+++ b/modules/path/path.test
@@ -346,6 +346,22 @@ class PathLanguageTestCase extends DrupalWebTestCase {
// should keep working.
$this->drupalGet($french_alias);
$this->assertResponse(404, t('Alias for French translation is unavailable when URL language negotiation is disabled.'));
+
+ // drupal_lookup_path() has an internal static cache. Check to see that
+ // it has the appropriate contents at this point.
+ drupal_lookup_path('wipe');
+ $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
+ $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path works.'));
+ // Second call should return the same path.
+ $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
+ $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path is the same.'));
+
+ // Confirm that the alias works.
+ $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
+ $this->assertEqual($french_node_alias, $french_alias, t('Alias works.'));
+ // Second call should return the same alias.
+ $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
+ $this->assertEqual($french_node_alias, $french_alias, t('Alias is the same.'));
}
}