monster_menus-9.0.x-dev/src/Form/ExportTreeForm.php

src/Form/ExportTreeForm.php
<?php

namespace Drupal\monster_menus\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\monster_menus\Constants;
use Drupal\monster_menus\ImportExport;
use Drupal\monster_menus\MMImportExportException;

class ExportTreeForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'mm_export_form';
  }

  public function buildForm(array $form, FormStateInterface $form_state) {
    if (mm_module_exists('content_sync')) {
      $form['include_nodes'] = [
        '#type' => 'checkbox',
        '#title' => t('Include page contents (nodes)'),
        '#default_value' => $form_state->getValue('include_nodes') ?? FALSE,
      ];
    }
    else {
      $form['include_nodes'] = [
        '#markup' => t('<p>To export page contents (nodes), the <a href=":link">content_sync</a> module is required. Only pages will be exported.</p>', [':link' => Url::fromUri('https://drupal.org/project/content_sync')->toString()]),
      ];
    }

    $form['mmtid'] = [
      '#type' => 'mm_catlist',
      '#mm_list_min' => 1,
      '#mm_list_max' => 1,
      '#mm_list_selectable' => Constants::MM_PERMS_READ,
      '#title' => t('Start at:'),
      '#required' => TRUE,
      '#description' => t('Export the tree starting at this location.'),
      '#default_value' => $form_state->getValue('mmtid'),
    ];

    $form['actions'] = [
      '#type' => 'actions',
      '#weight' => 1,
      'submit' => [
        '#type' => 'submit',
        '#value' => t('Export'),
        '#button_type' => 'primary',
      ],
    ];

    if (!empty($form_state->getStorage()['mm_export_result'])) {
      $result = $form_state->getStorage()['mm_export_result'];
      $lines = min(substr_count($result, "\n"), 100);
      $form['code'] = [
        '#type' => 'textarea',
        '#weight' => 2,
        '#title' => t('Export'),
        '#default_value' => $result,
        '#value' => $result,
        '#rows' => $lines,
      ];
    }

    return $form;
  }

  public function validateForm(array &$form, FormStateInterface $form_state) {
    if (!mm_content_user_can($form_state->getValue('mmtid'), Constants::MM_PERMS_READ)) {
      $form_state->setErrorByName('mmtid', t('You do not have permission to read the starting location.'));
    }
    else {
      $mmtid = $form_state->getValue('mmtid');
      try {
        $form_state->setStorage(['mm_export_result' => ImportExport::export(array_key_first($mmtid), !empty($form_state->getValue('include_nodes')))]);
      }
      catch (MMImportExportException $e) {
        $this->messenger()->addError(t('An error occurred: @error', ['@error' => $e->getTheMessage()]));
      }
      $form_state->setRebuild(TRUE);
    }
  }

  public function submitForm(array &$form, FormStateInterface $form_state) {
  }

}

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

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