betasite-1.0.4/modules/betasite_toggle_block/src/Controller/BetaToggleLinkController.php

modules/betasite_toggle_block/src/Controller/BetaToggleLinkController.php
<?php

namespace Drupal\betasite_toggle_block\Controller;

use Drupal\betasite\BetaAliasStorage;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Connection;
use Laminas\Diactoros\Response\JsonResponse;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Controller for AJAX call to retrieve beta or standard url.
 */
class BetaToggleLinkController extends ControllerBase {

  /**
   * The injected current request.
   *
   * @var \Symfony\Component\HttpFoundation\Request
   */
  private Request $request;

  /**
   * The database connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected Connection $db;

  /**
   * The injected BetaAliasStorage service.
   *
   * @var \Drupal\betasite\BetaAliasStorage
   */
  private BetaAliasStorage $betaAliasStorage;

  /**
   * {@inheritdoc}
   */
  public function __construct(RequestStack $request_stack, Connection $db, BetaAliasStorage $beta_alias_storage,) {
    $this->request = $request_stack->getCurrentRequest();
    $this->db = $db;
    $this->betaAliasStorage = $beta_alias_storage;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('request_stack'),
      $container->get('database'),
      $container->get('betasite.beta_alias_storage'),
    );
  }

  /**
   * Retrieves the beta or standard alternative url to the given url.
   */
  public function getToggleLink() {
    $target_domain = $this->request->get('domain');
    $old_alias = $this->request->get('path');

    if ($target_domain === 'beta') {
      $new_alias = $this->getBetaAlias($old_alias);
    }
    else {
      $new_alias = $this->getStandardAlias($old_alias);
    }

    return new JsonResponse([
      'path' => $new_alias,
      'status' => 200,
    ]);
  }

  /**
   * Translates a standard alias to a beta alias.
   *
   * @param string $standard_alias
   *   The standard alias.
   *
   * @return string
   *   The beta alias.
   */
  private function getBetaAlias(string $standard_alias) {
    $storage_result = $this->betaAliasStorage->getAlias($standard_alias);
    // If no beta alias is stored, default to standard.
    return empty($storage_result) ? $standard_alias : $storage_result;
  }

  /**
   * Translates a beta alias to a standard alias.
   *
   * @param string $beta_alias
   *   The beta alias.
   *
   * @return string
   *   The standard alias.
   */
  private function getStandardAlias(string $beta_alias) {
    $result = $this->db->query(
      'SELECT alias
         FROM {path_alias}
         WHERE beta_alias = :alias
         AND langcode = :lang',
      [':alias' => $beta_alias, ':lang' => 'en']);

    $alias = $result->fetchField(0);
    // If no beta alias is stored, default to standard.
    return empty($alias) ? $beta_alias : $alias;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc