Bạn có thể dùng hook_entity_operation
để thêm một hoạt động thực thể tùy chỉnh để gửi biểu mẫu web. với Tích hợp dạng xem biểu mẫu web bạn đã có thể thêm trường "Hoạt động" vào chế độ xem của mình.Nó liệt kê các hoạt động mặc định tùy thuộc vào cấp độ truy cập (Chỉnh sửa, Xóa, v.v.). Ở đó thao tác tùy chỉnh của bạn sẽ xuất hiện.
MYMODULE.module
<?php
/**
* @tập tin
* Móc được triển khai bởi mô-đun MYMODULE.
*/
sử dụng Drupal\Core\Entity\EntityInterface;
sử dụng Drupal\webform\WebformSubmissionInterface;
/**
* Triển khai hook_entity_operation().
*/
function MYMODULE_entity_operation(EntityInterface $submission) {
hoạt động $ = [];
if ($submission instanceof WebformSubmissionInterface) {
if ($submission->getElementData('MY_HIDDEN_REVIEW_ELEMENT') !== 'đã phê duyệt') {
$operations['phê duyệt'] = [
'tiêu đề' => t('Chấp thuận'),
'trọng lượng' => 15,
'url' => Url::fromRoute('MYMODULE.webform_submission_approve', [
'gửi' => $gửi->id(),
], [
'truy vấn' => \Drupal::destination()->getAsArray(),
]),
];
}
}
trả lại hoạt động $;
}
MYMODULE.routing.yml
MYMODULE.webform_submission_approve:
đường dẫn: '/admin/MYMODULE/submission/{submission}/phê duyệt'
mặc định:
_controller: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::approve'
tùy chọn:
thông số:
nộp hồ sơ:
gõ: 'thực thể: webform_submission'
yêu cầu:
_custom_access: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::access'
src/Controller/WebformSubmissionApproveController.php
<?php
không gian tên Drupal\MYMODULE\Controller;
sử dụng Drupal\Core\Access\AccessResult;
sử dụng Drupal\Core\Controller\ControllerBase;
sử dụng Drupal\webform\Entity\WebformSubmission;
sử dụng Symfony\Thành phần\HttpFoundation\RedirectResponse;
sử dụng Symfony\Thành phần\HttpFoundation\Request;
/**
* Lớp WebformSubmissionApproveController.
*
* @package Drupal\MYMODULE\Controller
*/
lớp WebformSubmissionApproveController mở rộng ControllerBase {
/**
* Phê duyệt phương pháp.
*
* @param \Drupal\webform\Entity\WebformSubmission $submission
* Gửi biểu mẫu web.
* @param \Symfony\Component\HttpFoundation\Request $request
* Yêu cầu HTTP hiện tại.
*
* @return mảng|\Symfony\Component\HttpFoundation\RedirectResponse
* Phản hồi.
*
* @throws \Drupal\Core\Entity\EntityStorageException
*/
chức năng công cộng phê duyệt(WebformSubmission $submission, Request $request) {
$submission->setElementData('MY_HIDDEN_REVIEW_ELEMENT', 'đã phê duyệt');
$submission->save();
$this->messenger()->addMessage($this->t('Gửi @serial đã được phê duyệt.', [
'@serial' => $submission->serial(),
]));
trả về $request->query->get('destination') ? RedirectResponse mới($request->query->get('destination')) : [];
}
/**
* Kiểm tra quyền truy cập cho một yêu cầu cụ thể.
*
* @return \Drupal\Core\Access\AccessResult
* Kết quả truy cập.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
truy cập chức năng công cộng (WebformSubmission $submission) {
trả về AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
}
}