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
/**
* @fișier
* Cârlige implementate de modulul MYMODULE.
*/
utilizați Drupal\Core\Entity\EntityInterface;
utilizați Drupal\webform\WebformSubmissionInterface;
/**
* Implementează hook_entity_operation().
*/
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.
*
* @pachet Drupal\MYMODULE\Controller
*/
clasa WebformSubmissionApproveController extinde ControllerBase {
/**
* Aprobați metoda.
*
* @param \Drupal\webform\Entity\WebformSubmission $submission
* O trimitere a unui formular web.
* @param \Symfony\Component\HttpFoundation\Request $request
* Solicitarea HTTP curentă.
*
* @return array|\Symfony\Component\HttpFoundation\RedirectResponse
* Raspunsul.
*
* @throws \Drupal\Core\Entity\EntityStorageException
*/
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')): [];
}
/**
* Verifică accesul pentru o anumită cerere.
*
* @return \Drupal\Core\Access\AccessResult
* Rezultatul accesului.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
acces la funcția publică (WebformSubmission $submission) {
return AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
}
}