Skočiť na hlavný obsah
Drupalista.sk

Main navigation

  • Domov
User account menu
  • Kontakt

Omrvinka

  1. Domov

Ako pridať nový token k existujúcim?

By drupalista, 18 február, 2024
Webform Workflows Element tokens

Nedávno som pracoval na jednom projekte, kde som potreboval modul Webform a k nemu nejaký jednoduchý workflow. K tomu mi úplne stačil modul Workflows v core spolu s modulom Webform Workflows Element, ktorý do webform pridá element, cez ktorý si môžem pre príslušný webform submission nastaviť stav. Umožňuje dokonca aj pridať dve log správy o zmene stavu - jednu pre odosielateľa formulára a jednu pre administrátorov. Užitočná vec, ak potrebujete poslať personalizovanú spätnú väzbu odosielateľovi formulára, prípadne si niečo poznačiť pre ostatných administrátorov webu. Problém nastal, keď som chcel túto log správu vložiť do e-mailu informujpceho odosielateľa webformuláru o zmene stavu. Takýto token neexistoval. Našťastie, je to Drupal. :-)

V našom custom module nám stačí vytvoriť si dva hooky. Prvý sa volá mymodule_token_info a v ňom drupalu povieme aké všetky tokeny si ideme definovať.

/**
* Implements hook_token_info().
*/
function mymodule_token_info() {
 $info = [];
 
 $info['tokens']['webform_workflow']['transition-log-admin'] = [
   'name' => t('Log message for admins.'),
   'description' => t('The log message for admins.'),
 ];
 
 $info['tokens']['webform_workflow']['transition-log-submitter'] = [
   'name' => t('Log message for submitter.'),
   'description' => t('The log message for submitter.'),
 ];
 return $info;
}

A teraz, keď naša aplikácia vie o tokenoch, ktoré plánujeme definovať, musíme jej ešte povedať aj to, akými dátami ich má naplniť. To spravíme v hook_tokens:

/**
* Implements hook_tokens().
*/
function mymodule_tokens($type, $tokens, array $data, array $options, \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata) {
 $replacements = [];
 if ($type === 'webform_workflow' && !empty($data['webform_submission'])) {
     /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
     $webform_submission = $data['webform_submission'];
     $bubbleable_metadata->addCacheableDependency($webform_submission);
     $originalData = $webform_submission->getOriginalData();
     $newData = $webform_submission->getData();
     foreach ($tokens as $name => $original) {
       switch ($name) {
         case 'transition-log-admin':
           $replacements[$original] = $newData['workflow']['log_admin'];
           break;
         case 'transition-log-submitter':
           $replacements[$original] = $newData['workflow']['log_public'];
       }
     }
 }
 return $replacements;
}

A to je všetko. Vyčistiť cache a môžeme si užívať naše nové tokeny! :-)

Značky

  • webform
  • workflows
  • token
  • Log in or register to post comments

Komentáre

Language switcher

  • English
  • Slovak

Najnovší obsah

  • Ako v Drupale presunúť API kľúče a citlivé dáta do .env?
    2 years ago
  • Rýchly nápad: Ako filtrovať views podľa niečoho, čo je content entita?
    2 years ago
  • Ako pridať nový token k existujúcim?
    2 years ago
  • Drupal Migrate API: Ako zmigrovať obrázky
    2 years 9 months ago
RSS feed
Powered by Drupal