diff options
Diffstat (limited to 'includes/path.inc')
-rw-r--r-- | includes/path.inc | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/includes/path.inc b/includes/path.inc index ed5b639fb..411a7a71c 100644 --- a/includes/path.inc +++ b/includes/path.inc @@ -431,21 +431,27 @@ function path_load($conditions) { * - language: (optional) The language of the alias. */ function path_save(&$path) { - $path += array('pid' => NULL, 'language' => LANGUAGE_NONE); + $path += array('language' => LANGUAGE_NONE); - // Insert or update the alias. - $status = drupal_write_record('url_alias', $path, (!empty($path['pid']) ? 'pid' : array())); + // Load the stored alias, if any. + if (!empty($path['pid']) && !isset($path['original'])) { + $path['original'] = path_load($path['pid']); + } - // Verify that a record was written. - if ($status) { - if ($status === SAVED_NEW) { - module_invoke_all('path_insert', $path); - } - else { - module_invoke_all('path_update', $path); - } - drupal_clear_path_cache($path['source']); + if (empty($path['pid'])) { + drupal_write_record('url_alias', $path); + module_invoke_all('path_insert', $path); + } + else { + drupal_write_record('url_alias', $path, array('pid')); + module_invoke_all('path_update', $path); } + + // Clear internal properties. + unset($path['original']); + + // Clear the static alias cache. + drupal_clear_path_cache($path['source']); } /** |