You are here

public function ParagraphsFrontendUIAddBelow::addMoreAjax in Paragraphs frontend ui 8.2

File

src/Form/ParagraphsFrontendUIAddBelow.php, line 100

Class

ParagraphsFrontendUIAddBelow
Class CleanupUrlAliases.

Namespace

Drupal\paragraphs_frontend_ui\Form

Code

public function addMoreAjax(array $form, FormStateInterface $form_state) {
  $build_info = $form_state
    ->getBuildInfo();
  $triggering_paragraph = $build_info['paragraph'];
  $trigger = $form_state
    ->getTriggeringElement()['#name'];
  $set = substr($trigger, 0, -8);
  if (is_numeric($set)) {
    $set = LibraryItem::load($set);
    $target_id = $set
      ->get('paragraphs')
      ->getValue()[0]['target_id'];
    $set_paragraph = Paragraph::load($target_id);
    $parent = $triggering_paragraph
      ->getParentEntity();
    $parent_type = $parent
      ->getEntityTypeId();
    $parent_bundle = $parent
      ->getType();
    $parent_entity_id = $parent
      ->id();
    $parent_field_name = $triggering_paragraph
      ->get('parent_field_name')
      ->getValue()[0]['value'];
    $paragraph_items = $parent->{$parent_field_name}
      ->getValue();
    $paragraphs_new = [];
    foreach ($paragraph_items as $delta => $paragraph_item) {
      $paragraphs_new[] = $paragraph_item;
      if ($paragraph_item['target_id'] == $triggering_paragraph
        ->id()) {
        $new_paragraph = $set_paragraph
          ->createDuplicate();

        // set the language off the parent
        $langcode = \Drupal::service('language_manager')
          ->getCurrentLanguage()
          ->getId();
        $new_paragraph
          ->set('langcode', $langcode);
        $new_paragraph
          ->save();
        $paragraphs_new[] = [
          'target_id' => $new_paragraph
            ->id(),
          'target_revision_id' => $new_paragraph
            ->getRevisionId(),
        ];
      }
    }
    $parent->{$parent_field_name}
      ->setValue($paragraphs_new);
    $parent
      ->save();
    $identifier = '[data-paragraphs-frontend-ui=' . $parent_field_name . '-' . $parent
      ->id() . ']';
    $response = new AjaxResponse();

    // Refresh the paragraphs field.
    $response
      ->addCommand(new ReplaceCommand($identifier, $parent
      ->get($parent_field_name)
      ->view('default')));
    $response
      ->addCommand(new CloseModalDialogCommand());
    return $response;
  }
}