1 path.module path_entity_update(Entity $entity)

Implements hook_entity_update().

File

core/modules/path/path.module, line 489
Enables users to customize URLs and provide automatic URL alias patterns.

Code

function path_entity_update(Entity $entity) {
  if (isset($entity->path)) {
    $langcode = isset($entity->langcode) ? $entity->langcode : LANGUAGE_NONE;
    $uri = $entity->uri();
    $path = $entity->path;
    $path['source'] = $uri['path'];

    // If no pattern exists for this entity type, default to a manual alias.
    $pattern = path_get_pattern_by_entity_type($entity->entityType(), $entity->bundle(), $langcode);
    $path += array(
      'pid' => NULL,
      'alias' => '',
      'langcode' => $langcode,
      'auto' => strlen($pattern) === 0 ? FALSE : TRUE,
    );

    // Trim whitespace and slashes from alias start and end.
    $path['alias'] = trim((string) $path['alias'], " \t\n\r\0\x0B/");

    // Save an automatic alias if specified.
    if ($path['auto']) {
      module_load_include('inc', 'path');
      $path = path_save_automatic_entity_alias($entity);

      // Ideally this would be in hook_taxonomy_term_update() instead, but as
      // hook_entity_update() fires second, we have to include it directly here.
      if ($entity->entityType() === 'taxonomy_term') {
        // Generate new aliases for all children as well.
        foreach (taxonomy_get_tree($entity->vocabulary, $entity->tid, NULL, TRUE) as $subterm) {
          path_save_automatic_entity_alias($subterm);
        }
      }
    }
    else {
      // Delete old alias if user erased it.
      if (!empty($path['pid']) && empty($path['alias'])) {
        path_delete($path['pid']);
      }
      // Update or create any specified alias.
      if (!empty($path['alias'])) {
        path_save($path);
      }
    }

    // Save the updated path into the entity.
    if ($path) {
      $entity->path = $path;
    }
  }
}