You are here

public static function ImporterService::save in Path redirect import 8

Save an individual redirect entity, if no redirect already exists.

Parameters

str[] $redirect_array: Keyed array of redirects, in the format [source, redirect, status_code, language].

bool $override: A 1 indicates that existing redirects should be updated.

1 call to ImporterService::save()
ImporterService::import in src/ImporterService.php
Main method: execute parsing and saving of redirects.

File

src/ImporterService.php, line 221

Class

ImporterService
Class ImporterService.

Namespace

Drupal\path_redirect_import

Code

public static function save(array $redirect_array, $override) {
  if ($redirects = self::redirectExists($redirect_array)) {
    if ($override == 1) {
      $redirect = reset($redirects);
      $message_type = 'Updated';
    }
    else {
      return;
    }
  }
  else {
    $message_type = 'Added';
    $parsed_url = UrlHelper::parse(trim($redirect_array['source']));
    $path = isset($parsed_url['path']) ? $parsed_url['path'] : NULL;
    $query = isset($parsed_url['query']) ? $parsed_url['query'] : NULL;

    /** @var \Drupal\redirect\Entity\Redirect $redirect */
    $redirectEntityManager = \Drupal::service('entity.manager')
      ->getStorage('redirect');
    $redirect = $redirectEntityManager
      ->create();
    $redirect
      ->setSource($path, $query);
  }

  // Currently, the Redirect module's setRedirect function assumes
  // all paths are internal. If external, we will use redirect_redirect->set.
  if (parse_url($redirect_array['redirect'], PHP_URL_SCHEME)) {
    $redirect->redirect_redirect
      ->set(0, [
      'uri' => $redirect_array['redirect'],
    ]);
  }
  else {
    $redirect
      ->setRedirect($redirect_array['redirect']);
  }
  $redirect
    ->setStatusCode($redirect_array['status_code']);
  $redirect
    ->setLanguage($redirect_array['language']);
  $redirect
    ->save();
  \Drupal::messenger()
    ->addStatus(t('@message_type redirect from @source to @redirect', [
    '@message_type' => $message_type,
    '@source' => $redirect_array['source'],
    '@redirect' => $redirect_array['redirect'],
  ]));
}