คุณสามารถใช้ได้ hook_entity_operation
เพื่อเพิ่มการดำเนินการเอนทิตีแบบกำหนดเองสำหรับการส่งเว็บฟอร์ม กับ การรวมมุมมองเว็บฟอร์ม โมดูลคุณควรสามารถเพิ่มฟิลด์ "การดำเนินการ" ในมุมมองของคุณได้แล้วโดยจะแสดงการดำเนินการเริ่มต้นโดยขึ้นอยู่กับระดับการเข้าถึง (แก้ไข ลบ ฯลฯ) การดำเนินการที่กำหนดเองของคุณจะปรากฏขึ้นที่นั่น
MYMODULE.module
<?php
/**
* @ไฟล์
* Hooks ดำเนินการโดยโมดูล MYMODULE
*/
ใช้ Drupal\Core\Entity\EntityInterface;
ใช้ Drupal\webform\WebformSubmissionInterface
/**
* ใช้ hook_entity_operation()
*/
ฟังก์ชัน MYMODULE_entity_operation (EntityInterface $submission) {
$การดำเนินการ = [];
ถ้า (อินสแตนซ์การส่ง $ ของ WebformSubmissionInterface) {
ถ้า ($submission->getElementData('MY_HIDDEN_REVIEW_ELEMENT') !== 'อนุมัติ') {
$operations['อนุมัติ'] = [
'title' => t('อนุมัติ'),
'น้ำหนัก' => 15,
'url' => Url::fromRoute('MYMODULE.webform_submission_approve', [
'ส่ง' => $submission->id(),
], [
'query' => \Drupal::destination()->getAsArray(),
]),
];
}
}
ส่งคืน $operation;
}
MYMODULE.routing.yml
MYMODULE.webform_submission_approve:
เส้นทาง: '/admin/MYMODULE/submission/{submission}/approve'
ค่าเริ่มต้น:
_controller: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::อนุมัติ'
ตัวเลือก:
พารามิเตอร์:
ส่ง:
ประเภท: 'เอนทิตี:webform_submission'
ความต้องการ:
_custom_access: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::การเข้าถึง'
src/Controller/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
*
* @package Drupal\MYMODULE\Controller
*/
คลาส 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', 'อนุมัติ');
$submission->save();
$this->messenger()->addMessage($this->t('การส่ง @serial ได้รับการอนุมัติ', [
'@serial' => $submission->serial(),
]));
ส่งคืน $request->query->get('destination') ? new RedirectResponse($request->query->get('ปลายทาง')): [];
}
/**
* ตรวจสอบการเข้าถึงสำหรับคำขอเฉพาะ
*
* @return \Drupal\Core\Access\AccessResult
* ผลการเข้าถึง
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
การเข้าถึงฟังก์ชั่นสาธารณะ (WebformSubmission $submission) {
ส่งคืน AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
}
}