You are here

function system_path_alias_presave in Drupal 8

Implements hook_ENTITY_TYPE_presave().

File

core/modules/system/system.module, line 1459
Configuration system that lets administrators modify the workings of the site.

Code

function system_path_alias_presave(PathAliasInterface $path_alias) {

  // Prevent path aliases from being saved if the "url_alias" migration was not
  // performed yet. This avoids the risk of introducing duplicate aliases or get
  // the new path alias schema in an inconsistent state.
  if (Settings::get('system.path_alias_schema_check', TRUE) && drupal_get_installed_schema_version('system') < 8804) {

    /** @var \Drupal\system\Access\DbUpdateAccessCheck $db_update_access */
    $db_update_access = \Drupal::service('access_check.db_update');
    if ($db_update_access
      ->access(\Drupal::currentUser())
      ->isAllowed()) {
      $args = [
        ':url' => Url::fromUri('base://update.php')
          ->toString(),
      ];
      \Drupal::messenger()
        ->addError(t('Path aliases cannot be saved until <a href=":url">database updates</a> are performed.', $args));
    }
    else {
      \Drupal::messenger()
        ->addError(t('Path aliases cannot be saved until <em>database updates</em> are performed.'));
    }
    $message = 'Path alias "@alias" ("@path") could not be saved because the "system_update_8804" database update was not applied yet.';
    $args = [
      '@path' => $path_alias
        ->getPath(),
      '@alias' => $path_alias
        ->getAlias(),
    ];
    throw new \LogicException(new FormattableMarkup($message, $args));
  }
}