You are here

class EntityReferenceTreeController in Entity Reference Tree Widget 2.x

Same name and namespace in other branches
  1. 8 src/Controller/EntityReferenceTreeController.php \Drupal\entity_reference_tree\Controller\EntityReferenceTreeController

EntityReferenceTreeController class.

Hierarchy

Expanded class hierarchy of EntityReferenceTreeController

File

src/Controller/EntityReferenceTreeController.php, line 18

Namespace

Drupal\entity_reference_tree\Controller
View source
class EntityReferenceTreeController extends ControllerBase {

  /**
   * The form builder.
   *
   * @var \Drupal\Core\Form\FormBuilder
   */
  protected $formBuilder;

  /**
   * CSRF Token.
   *
   * @var \Drupal\Core\Access\CsrfTokenGenerator
   */
  protected $csrfToken;

  /**
   * The EntityReferenceTreeController constructor.
   *
   * @param \Drupal\Core\Form\FormBuilder $formBuilder
   *   The form builder.
   */
  public function __construct(FormBuilder $formBuilder, CsrfTokenGenerator $csrfToken) {
    $this->formBuilder = $formBuilder;
    $this->csrfToken = $csrfToken;
  }

  /**
   * {@inheritdoc}
   *
   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
   *   The Drupal service container.
   *
   * @return static
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('form_builder'), $container
      ->get('csrf_token'));
  }

  /**
   * Callback for opening the modal form.
   */
  public function openSearchForm(Request $request, string $field_edit_id, string $bundle, string $entity_type, string $theme, int $dots, string $dialog_title) {
    $response = new AjaxResponse();

    // Translate the title.
    $dialog_title = $this
      ->t('@title', [
      '@title' => $dialog_title,
    ]);

    // Get the modal form using the form builder.
    $modal_form = $this->formBuilder
      ->getForm('Drupal\\entity_reference_tree\\Form\\SearchForm', $field_edit_id, $bundle, $entity_type, $theme, $dots);

    // Add an AJAX command to open a modal dialog with the form as the content.
    $response
      ->addCommand(new OpenModalDialogCommand($dialog_title, $modal_form, [
      'width' => '800',
    ]));
    return $response;
  }

  /**
   * Callback for JsTree json data.
   */
  public function treeJson(Request $request, string $entity_type, string $bundles) {
    $token = $request
      ->get('token');
    if (empty($token) || !$this->csrfToken
      ->validate($token, $bundles)) {
      return new Response($this
        ->t('Access denied!'));
    }

    // Instance a entity tree builder for this entity type if it exists.
    if (\Drupal::hasService('entity_reference_' . $entity_type . '_tree_builder')) {
      $treeBuilder = \Drupal::service('entity_reference_' . $entity_type . '_tree_builder');
    }
    else {

      // Todo: A basic entity tree builder.
      $treeBuilder = \Drupal::service('entity_reference_entity_tree_builder');
    }
    $bundlesAry = explode(',', $bundles);
    $entityTrees = [];
    $entityNodeAry = [];
    foreach ($bundlesAry as $bundle_id) {
      $tree = $treeBuilder
        ->loadTree($entity_type, $bundle_id);
      if (!empty($tree)) {
        $entityTrees[] = $tree;
      }
    }
    foreach ($entityTrees as $tree) {
      foreach ($tree as $entity) {

        // Create tree node for each entity.
        // Store them into an array passed to JS.
        // An array in JavaScript is indexed list.
        // JavaScript's array indices are always sequential
        // and start from 0.
        $entityNodeAry[] = $treeBuilder
          ->createTreeNode($entity);
      }
    }
    return new JsonResponse($entityNodeAry);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
EntityReferenceTreeController::$csrfToken protected property CSRF Token.
EntityReferenceTreeController::$formBuilder protected property The form builder. Overrides ControllerBase::$formBuilder
EntityReferenceTreeController::create public static function Overrides ControllerBase::create
EntityReferenceTreeController::openSearchForm public function Callback for opening the modal form.
EntityReferenceTreeController::treeJson public function Callback for JsTree json data.
EntityReferenceTreeController::__construct public function The EntityReferenceTreeController constructor.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.