Poți să folosești hook_entity_operation
pentru a adăuga o operațiune de entitate personalizată pentru trimiterea formularelor web. Cu Integrarea vizualizărilor formularului web modul ar trebui să puteți adăuga deja un câmp „Operațiuni” la vizualizarea dvs.Listează operațiunile implicite în funcție de nivelurile de acces (Editare, Ștergere etc.). Acolo va apărea operația dvs. personalizată.
MYMODULE.modul
<?php
utilizați Drupal\Core\Entity\EntityInterface;
utilizați Drupal\webform\WebformSubmissionInterface;
funcția MYMODULE_entity_operation(EntityInterface $submission) {
$operatii = [];
if ($submission instanceof WebformSubmissionInterface) {
if ($submission->getElementData('MY_HIDDEN_REVIEW_ELEMENT') !== 'aprobat') {
$operations['aprobă'] = [
'title' => t('Aprobare'),
„greutate” => 15,
'url' => Url::fromRoute('MYMODULE.webform_submission_approve', [
'submission' => $submission->id(),
], [
'query' => \Drupal::destination()->getAsArray(),
]),
];
}
}
returneaza $operatii;
}
MYMODULE.routing.yml
MYMODULE.webform_submission_approve:
cale: „/admin/MYMODULE/submission/{submission}/approve”
implicite:
_controller: „\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::approve”
Opțiuni:
parametri:
transmitere:
tip: „entity:webform_submission”
cerinte:
_custom_access: „\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::access”
src/Controller/WebformSubmissionApproveController.php
<?php
spațiu de nume Drupal\MYMODULE\Controller;
utilizați Drupal\Core\Access\AccessResult;
utilizați Drupal\Core\Controller\ControllerBase;
utilizați Drupal\webform\Entity\WebformSubmission;
utilizați Symfony\Component\HttpFoundation\RedirectResponse;
utilizați Symfony\Component\HttpFoundation\Request;
clasa WebformSubmissionApproveController extinde ControllerBase {
funcția publică aprobare(WebformSubmission $submission, Request $request) {
$submission->setElementData('MY_HIDDEN_REVIEW_ELEMENT', 'aprobat');
$trimitere->salvare();
$this->messenger()->addMessage($this->t('Submission @serial approved.', [
'@serial' => $submission->serial(),
]));
returnează $request->query->get('destinație') ? nou RedirectResponse($request->query->get('destination')): [];
}
acces la funcția publică (WebformSubmission $submission) {
return AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
}
}