You are here

public function GeysirModalController::add in Geysir 8

Create a modal dialog to add a single paragraph.

1 string reference to 'GeysirModalController::add'
geysir.routing.yml in ./geysir.routing.yml
geysir.routing.yml

File

src/Controller/GeysirModalController.php, line 64

Class

GeysirModalController
Controller for all modal dialogs.

Namespace

Drupal\geysir\Controller

Code

public function add($parent_entity_type, $parent_entity_bundle, $parent_entity_revision, $field, $field_wrapper_id, $delta, $paragraph, $paragraph_revision, $position, $js = 'nojs', $bundle = NULL) {
  if ($js == 'ajax') {
    $response = new AjaxResponse();
    $paragraph_title = $this
      ->getParagraphTitle($parent_entity_type, $parent_entity_bundle, $field);

    // Get the parent revision if available, otherwise the parent.
    $entity = $this
      ->getParentRevisionOrParent($parent_entity_type, $parent_entity_revision);
    if ($bundle) {
      $newParagraph = Paragraph::create([
        'type' => $bundle,
        'langcode' => $entity
          ->language()
          ->getId(),
      ]);
      $form = $this
        ->entityFormBuilder()
        ->getForm($newParagraph, 'geysir_modal_add', []);
      $response
        ->addCommand(new GeysirOpenModalDialogCommand($this
        ->t('Add @paragraph_title', [
        '@paragraph_title' => $paragraph_title,
      ]), render($form)));
    }
    else {
      $bundle_fields = $this->entityFieldManager
        ->getFieldDefinitions($parent_entity_type, $entity
        ->bundle());
      $field_definition = $bundle_fields[$field];
      $bundles = $field_definition
        ->getSetting('handler_settings')['target_bundles'];
      if ($field_definition
        ->getSetting('handler_settings')['negate']) {
        $bundles = array_diff_key(\Drupal::service('entity_type.bundle.info')
          ->getBundleInfo('paragraph'), $bundles);
      }
      $routeParams = [
        'parent_entity_type' => $parent_entity_type,
        'parent_entity_bundle' => $parent_entity_bundle,
        'parent_entity_revision' => $parent_entity_revision,
        'field' => $field,
        'field_wrapper_id' => $field_wrapper_id,
        'delta' => $delta,
        'paragraph' => $paragraph
          ->id(),
        'paragraph_revision' => $paragraph
          ->getRevisionId(),
        'position' => $position,
        'js' => $js,
      ];
      $form = \Drupal::formBuilder()
        ->getForm('\\Drupal\\geysir\\Form\\GeysirModalParagraphAddSelectTypeForm', $routeParams, $bundles);
      $response
        ->addCommand(new GeysirOpenModalDialogCommand($this
        ->t('Add @paragraph_title', [
        '@paragraph_title' => $paragraph_title,
      ]), render($form)));
    }
    return $response;
  }
  return $this
    ->t('Javascript is required for this functionality to work properly.');
}