Рейтинг:0

Как обновить отправленное значение веб-формы, нажав кнопку?

флаг in

Как я могу обновить отправленные данные, просто нажав кнопку? Я создал таблицу просмотра представлений веб-формы и хотел бы добавить столбец с кнопкой «Утверждение». Когда пользователь нажимает эту кнопку, значение данных должно обновляться. Я намерен оптимизировать «редактирование» и «сохранение», избегая экрана редактирования формы. Добавление настраиваемого действия в «массовую форму отправки веб-формы» также решает мою проблему.

Рейтинг:4
флаг ne

Ты можешь использовать hook_entity_operation чтобы добавить пользовательскую операцию сущности для отправки веб-форм. С Интеграция представлений веб-форм модуль, вы уже должны быть в состоянии добавить поле «Операции» в свое представление.В нем перечислены операции по умолчанию в зависимости от уровней доступа (Редактировать, Удалить и т. д.). Там появится ваша пользовательская операция.

МОЙ МОДУЛЬ.модуль

<?php

/**
 * @файл
 * Хуки реализованы модулем MYMODULE.
 */

используйте Drupal\Core\Entity\EntityInterface;
используйте Drupal\webform\WebformSubmissionInterface;

/**
 * Реализует hook_entity_operation().
 */
функция MYMODULE_entity_operation (EntityInterface $submission) {
  $операции = [];
  if ($submission instanceof WebformSubmissionInterface) {
    если ($submission->getElementData('MY_HIDDEN_REVIEW_ELEMENT') !== 'одобрено') {
      $operations['одобрить'] = [
        'название' => т('Утвердить'),
        'вес' => 15,
        'url' => Url::fromRoute('MYMODULE.webform_submission_approve', [
          'представление' => $представление->id(),
        ], [
          'запрос' => \Drupal::destination()->getAsArray(),
        ]),
      ];
    }
  }
  вернуть $операции;
}

МОЙ МОДУЛЬ.routing.yml

МОЙ МОДУЛЬ.webform_submission_approve:
  путь: '/admin/MYMODULE/submission/{submission}/approve'
  значения по умолчанию:
    _controller: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::approve'
  параметры:
    параметры:
      подчинение:
        тип: 'сущность: webform_submission'
  требования:
    _custom_access: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::access'

src/Контроллер/WebformSubmissionApproveController.php

<?php

пространство имен Drupal\MYMODULE\Controller;

используйте Drupal\Core\Access\AccessResult;
используйте Drupal\Core\Controller\ControllerBase;
используйте Drupal\webform\Entity\WebformSubmission;
используйте Symfony\Component\HttpFoundation\RedirectResponse;
используйте Symfony\Component\HttpFoundation\Request;

/**
 * Класс WebformSubmissionApproveController.
 *
 * @пакет Drupal\MYMODULE\Контроллер
 */
class WebformSubmissionApproveController расширяет ControllerBase {

  /**
   * Утвердить метод.
   *
   * @param \Drupal\webform\Entity\WebformSubmission $submission
   * Представление веб-формы.
   * @param\Symfony\Component\HttpFoundation\Request $request
   * Текущий HTTP-запрос.
   *
   * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
   *   Ответ.
   *
   * @throws\Drupal\Core\Entity\EntityStorageException
   */
  публичная функция одобряет (WebformSubmission $submission, Request $request) {

    $submission->setElementData('MY_HIDDEN_REVIEW_ELEMENT', 'одобрено');
    $представление->сохранить();

    $this->messenger()->addMessage($this->t('Отправка @serial одобрена.', [
      '@serial' => $submission->serial(),
    ]));

    вернуть $request->query->get('destination') ? новый RedirectResponse($request->query->get('destination')) : [];
  }

  /**
   * Проверяет доступ по конкретному запросу.
   *
   * @возврат \Drupal\Core\Access\AccessResult
   * Результат доступа.
   *
   * @throws\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws\Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  доступ к общедоступной функции (WebformSubmission $submission) {
    return AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
  }

}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.