From 556504e08fdcc6a0394d0057e2c87b66ea84c4ab Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 6 May 2021 20:51:56 +0200 Subject: [PATCH 1/9] LOOP-750: added tokens to flag content mailhelper --- .../os2loop_flag_content.services.yml | 2 ++ .../src/Form/FlagContentForm.php | 2 +- .../src/Helper/MailHelper.php | 32 ++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml index 845655481..c1f235b9a 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml @@ -5,3 +5,5 @@ services: - '@config.factory' os2loop_flag_content.mail_helper: class: Drupal\os2loop_flag_content\Helper\MailHelper + arguments: + - '@token' diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php index 846acad87..7b9bd7164 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php @@ -167,7 +167,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $key = 'flag_content'; $params['reason'] = $form_state->getValue('reason'); $params['message'] = $message; - $params['node_title'] = $node->label(); + $params['node'] = $node; $langcode = $this->currentUser->getPreferredLangcode(); $send = TRUE; $result = $this->mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send); diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php index 06a7f5eb8..5fb97948d 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php @@ -3,12 +3,30 @@ namespace Drupal\os2loop_flag_content\Helper; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\Core\Render\BubbleableMetadata; +use Drupal\Core\Utility\Token; /** * MailHelper for creating mail templates. */ class MailHelper { use StringTranslationTrait; + /** + * The toke. + * + * @var \Drupal\Core\Utility\Token + */ + protected $token; + + /** + * Constructor. + * + * @param \Drupal\Core\Utility\Token $token + * The token. + */ + public function __construct(Token $token) { + $this->token = $token; + } /** * Implements hook_mail(). @@ -19,11 +37,15 @@ public function mail($key, &$message, $params) { ]; switch ($key) { case 'flag_content': - $subject = $this->t('Flagged content: @reason with @title', [ - '@title' => $params['node_title'], - '@reason' => $params['reason'], - ], $options); - $message['subject'] = $subject; + $node = $params['node']; + // @todo move this to settings + $template = '[current-user:name] flagged the following content: [node:title]([node:url]) with the reason [reason] and the following message'; + $template = str_replace('[reason]', $params['reason'], $template); + $bubbleable_metadata = new BubbleableMetadata(); + $build['#markup'] = $this->token->replace($template, ['node' => $node], [], $bubbleable_metadata); + $bubbleable_metadata->applyTo($build); + $message['subject'] = $this->t('Flagged content', $options); + $message['body'][] = $build['#markup']; $message['body'][] = $params['message']; break; } From 548ff3a3899ba86c5152784ffad78d29ea47dcdc Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 6 May 2021 20:57:15 +0200 Subject: [PATCH 2/9] LOOP-750: removed spelling error --- .../modules/os2loop_flag_content/src/Form/FlagContentForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php index 7b9bd7164..1d46ddae6 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php @@ -55,7 +55,7 @@ class FlagContentForm extends FormBase implements ContainerInjectionInterface { protected $messenger; /** - * Constructs an flag content form. + * Constructs a flag content form. * * @param \Drupal\Core\Routing\RouteMatchInterface $routeMatcher * The route matcher. From 52667838552ba86ad0929a3fc44aaa582045a8d5 Mon Sep 17 00:00:00 2001 From: Sine Date: Fri, 7 May 2021 09:56:07 +0200 Subject: [PATCH 3/9] LOOP-750: improvements and redirect after submit --- .../os2loop_flag_content.routing.yml | 4 ++-- .../src/Form/FlagContentForm.php | 19 +++++++++---------- .../navigation/content-tasks.html.twig | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml index 63839b34f..d9625e6a7 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml @@ -6,8 +6,8 @@ os2loop_flag_content.settings: requirements: _permission: 'administer site configuration' -os2loop_flag_content.flag_content_form: - path: '/node/{node}/flag_content_form' +os2loop_flag_content.flag_content: + path: '/node/{node}/flag_content' defaults: _form: '\Drupal\os2loop_flag_content\Form\FlagContentForm' options: diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php index 1d46ddae6..95ec3af2f 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php @@ -12,6 +12,7 @@ use Drupal\Core\Mail\MailManagerInterface; use Drupal\Core\Session\AccountProxyInterface; use Drupal\Core\Url; +use Symfony\Component\HttpFoundation\RedirectResponse; /** * Flag content form. @@ -125,8 +126,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#required' => TRUE, ]; - $form['actions']['#type'] = 'actions'; - $form['actions']['submit'] = [ + $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Send'), '#attributes' => [ @@ -136,7 +136,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; - $form['actions']['cancel'] = [ + $form['cancel'] = [ '#type' => 'link', '#url' => new Url('entity.node.canonical', ['node' => $node->id()]), '#title' => $this->t('Cancel'), @@ -150,11 +150,6 @@ public function buildForm(array $form, FormStateInterface $form_state) { return $form; } - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state) {} - /** * {@inheritdoc} */ @@ -172,11 +167,15 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $send = TRUE; $result = $this->mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send); if ($result['result'] !== TRUE) { - $this->messenger->addMessage($this->t('There was a problem sending your message and it was not sent.'), 'error'); + $this->messenger->addError($this->t('There was a problem sending your message and it was not sent.')); } else { - $this->messenger->addError($this->t('Your message has been sent.')); + $this->messenger->addStatus($this->t('Your message has been sent.')); } + + $redirectUrl = Url::fromRoute('entity.node.canonical', ['node' => $node->id()])->toString(); + $response = new RedirectResponse($redirectUrl); + $response->send(); } } diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/navigation/content-tasks.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/navigation/content-tasks.html.twig index 510a29a7b..5576042ea 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/navigation/content-tasks.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/navigation/content-tasks.html.twig @@ -16,7 +16,7 @@ {% endif %} {% if is_granted('contact editorial office', node) %}
- +
{% endif %} {% if is_granted('share with a friend', node) %} From 1b781247fa6576082628f9a895b1d2752d7251f2 Mon Sep 17 00:00:00 2001 From: Sine Date: Mon, 17 May 2021 17:47:19 +0200 Subject: [PATCH 4/9] LOOP-750: moved redirect to else statement --- .../os2loop_flag_content/src/Form/FlagContentForm.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php index 95ec3af2f..89be7449c 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php @@ -171,11 +171,10 @@ public function submitForm(array &$form, FormStateInterface $form_state) { } else { $this->messenger->addStatus($this->t('Your message has been sent.')); + $redirectUrl = Url::fromRoute('entity.node.canonical', ['node' => $node->id()])->toString(); + $response = new RedirectResponse($redirectUrl); + $response->send(); } - - $redirectUrl = Url::fromRoute('entity.node.canonical', ['node' => $node->id()])->toString(); - $response = new RedirectResponse($redirectUrl); - $response->send(); } } From 093e76f1183963f43d46b0f6b47cff584c863df1 Mon Sep 17 00:00:00 2001 From: Sine Date: Mon, 17 May 2021 19:53:31 +0200 Subject: [PATCH 5/9] LOOP-750: added tokens --- .../os2loop_flag_content.routing.yml | 2 +- .../os2loop_flag_content.services.yml | 1 + .../os2loop_flag_content.tokens.inc | 22 +++++ ...gContentAdminForm.php => SettingsForm.php} | 25 +++-- .../src/Helper/MailHelper.php | 94 +++++++++++++++---- 5 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.tokens.inc rename web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/{FlagContentAdminForm.php => SettingsForm.php} (64%) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml index d9625e6a7..e18e1d5c6 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.routing.yml @@ -1,7 +1,7 @@ os2loop_flag_content.settings: path: '/admin/config/os2loop/os2loop_flag_content/settings' defaults: - _form: '\Drupal\os2loop_flag_content\Form\FlagContentAdminForm' + _form: '\Drupal\os2loop_flag_content\Form\SettingsForm' _title: 'os2loop_flag_content' requirements: _permission: 'administer site configuration' diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml index c1f235b9a..6c8182e13 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.services.yml @@ -7,3 +7,4 @@ services: class: Drupal\os2loop_flag_content\Helper\MailHelper arguments: - '@token' + - '@Drupal\os2loop_settings\Settings' diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.tokens.inc b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.tokens.inc new file mode 100644 index 000000000..44e36c3ab --- /dev/null +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/os2loop_flag_content.tokens.inc @@ -0,0 +1,22 @@ +tokens($type, $tokens, $data); +} + +/** + * Implements hook_token_info(). + */ +function os2loop_flag_content_token_info() { + return Drupal::service('os2loop_flag_content.mail_helper')->tokenInfo(); +} diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentAdminForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php similarity index 64% rename from web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentAdminForm.php rename to web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php index 8fa5c9cd7..cc2fdfcf2 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentAdminForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php @@ -8,14 +8,14 @@ /** * Configure flag content admin settings for this site. */ -class FlagContentAdminForm extends ConfigFormBase { +class SettingsForm extends ConfigFormBase { /** * Config settings. * * @var string */ - const SETTINGS = 'os2loop_flag_content.settings'; + const SETTINGS_NAME = 'os2loop_flag_content.settings'; /** * {@inheritdoc} @@ -29,7 +29,7 @@ public function getFormId() { */ protected function getEditableConfigNames() { return [ - static::SETTINGS, + static::SETTINGS_NAME, ]; } @@ -37,7 +37,7 @@ protected function getEditableConfigNames() { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { - $config = $this->config(static::SETTINGS); + $config = $this->config(static::SETTINGS_NAME); $form['reasons'] = [ '#type' => 'textarea', @@ -52,6 +52,18 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get('to_email'), ]; + $form['email_template'] = [ + '#type' => 'textarea', + '#title' => $this->t('Email template for flag content body'), + '#default_value' => $config->get('template_body'), + ]; + + $form['subject_template'] = [ + '#type' => 'textarea', + '#title' => $this->t('Subject template for flag content subject'), + '#default_value' => $config->get('template_subject'), + ]; + return parent::buildForm($form, $form_state); } @@ -61,10 +73,11 @@ public function buildForm(array $form, FormStateInterface $form_state) { public function submitForm(array &$form, FormStateInterface $form_state) { // Retrieve the configuration. $form_state->getValue('content_types'); - $this->configFactory->getEditable(static::SETTINGS) + $this->configFactory->getEditable(static::SETTINGS_NAME) ->set('reasons', $form_state->getValue('reasons')) - ->set('content_types', $form_state->getValue('content_types')) ->set('to_email', $form_state->getValue('to_email')) + ->set('template_subject', $form_state->getValue('subject_template')) + ->set('template_body', $form_state->getValue('email_template')) ->save(); parent::submitForm($form, $form_state); diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php index 5fb97948d..970b0f95d 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php @@ -3,8 +3,9 @@ namespace Drupal\os2loop_flag_content\Helper; use Drupal\Core\StringTranslation\StringTranslationTrait; -use Drupal\Core\Render\BubbleableMetadata; use Drupal\Core\Utility\Token; +use Drupal\os2loop_flag_content\Form\SettingsForm; +use Drupal\os2loop_settings\Settings; /** * MailHelper for creating mail templates. @@ -19,36 +20,95 @@ class MailHelper { protected $token; /** - * Constructor. + * The config. * - * @param \Drupal\Core\Utility\Token $token - * The token. + * @var \Drupal\Core\Config\ImmutableConfig */ - public function __construct(Token $token) { + private $config; + + /** + * Constructor. + */ + public function __construct(Token $token, Settings $settings) { $this->token = $token; + $this->config = $settings->getConfig(SettingsForm::SETTINGS_NAME); } /** * Implements hook_mail(). */ public function mail($key, &$message, $params) { - $options = [ - 'langcode' => $message['langcode'], - ]; switch ($key) { case 'flag_content': $node = $params['node']; - // @todo move this to settings - $template = '[current-user:name] flagged the following content: [node:title]([node:url]) with the reason [reason] and the following message'; - $template = str_replace('[reason]', $params['reason'], $template); - $bubbleable_metadata = new BubbleableMetadata(); - $build['#markup'] = $this->token->replace($template, ['node' => $node], [], $bubbleable_metadata); - $bubbleable_metadata->applyTo($build); - $message['subject'] = $this->t('Flagged content', $options); - $message['body'][] = $build['#markup']; - $message['body'][] = $params['message']; + $body_template = $this->config->get('template_body'); + $subject_template = $this->config->get('template_subject'); + $data['node'] = $node; + $data['reason'] = $params['reason']; + $data['message'] = $params['message']; + $body = $this->renderTemplate($body_template, $data); + $subject = $this->renderTemplate($subject_template, $data); + $message['subject'] = $subject; + $message['body'][] = $body; break; } } + /** + * Renders content of a mail. + */ + public function renderTemplate($template, array $data = NULL) { + return $this->token->replace($template, [ + 'node' => $data['node'], + 'reason' => $data['reason'], + 'message' => $data['message'], + ], []); + + } + + /** + * Implements hook_tokens(). + */ + public function tokens($type, $tokens, array $data) { + $replacements = []; + if ($type == 'os2loop_flag_content' && !empty($data['reason']) && !empty($data['message'])) { + foreach ($tokens as $name => $original) { + switch ($name) { + case 'reason': + $replacements[$original] = $data['reason']; + break; + + case 'message': + $replacements[$original] = $data['message']; + break; + } + } + } + return $replacements; + } + + /** + * Implements hook_token_info(). + */ + public function tokenInfo() { + $types['os2loop_flag_content'] = [ + 'name' => $this->t('Reasons type'), + ]; + $tokens['reason'] = [ + 'name' => $this->t('Reasons'), + ]; + + $tokens['message'] = [ + 'name' => $this->t('Message'), + ]; + + return [ + 'types' => $types, + 'tokens' => [ + 'os2loop_flag_content' => $tokens, + ], + ]; + + } + } From ada67329f97096ed08496f60af6ecfa030a76afe Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 20 May 2021 08:56:47 +0200 Subject: [PATCH 6/9] LOOP-750: updated readme --- .../custom/os2loop/modules/os2loop_flag_content/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md b/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md index 04e0ab348..19ef96462 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md @@ -2,4 +2,4 @@ This module makes users able to write the editorial office regarding specific content. -The config is defined in Flag Content Admin Form (/admin/config/os2loop_flag_content/settings). +The config can be edited in admin configuration (/admin/config). From a1c5714ae3e5165312f959f2cf372b7740bd44fa Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 20 May 2021 08:59:59 +0200 Subject: [PATCH 7/9] LOOP-750: changed string from reasons to reason --- .../modules/os2loop_flag_content/src/Helper/MailHelper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php index 970b0f95d..e24842db4 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php @@ -92,10 +92,10 @@ public function tokens($type, $tokens, array $data) { */ public function tokenInfo() { $types['os2loop_flag_content'] = [ - 'name' => $this->t('Reasons type'), + 'name' => $this->t('Reason type'), ]; $tokens['reason'] = [ - 'name' => $this->t('Reasons'), + 'name' => $this->t('Reason'), ]; $tokens['message'] = [ From e8a4657c5e930cbafd3abd1d0098d595205d0173 Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 20 May 2021 10:32:04 +0200 Subject: [PATCH 8/9] LOOP-750: simplifications --- .../modules/os2loop_flag_content/README.md | 4 +- .../src/Form/FlagContentForm.php | 8 ++-- .../src/Form/SettingsForm.php | 12 ++++++ .../src/Helper/MailHelper.php | 43 +++++++++---------- 4 files changed, 40 insertions(+), 27 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md b/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md index 19ef96462..5ee1a2e42 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/README.md @@ -2,4 +2,6 @@ This module makes users able to write the editorial office regarding specific content. -The config can be edited in admin configuration (/admin/config). +The config can be edited in Configuration » OS2Loop » OS2Loop Flag content settings or: + +```(/admin/config/os2loop/os2loop_flag_content/settings)``` diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php index 89be7449c..4bb053ace 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/FlagContentForm.php @@ -126,7 +126,9 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#required' => TRUE, ]; - $form['submit'] = [ + $form['actions']['#type'] = 'actions'; + + $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Send'), '#attributes' => [ @@ -136,9 +138,9 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; - $form['cancel'] = [ + $form['actions']['cancel'] = [ '#type' => 'link', - '#url' => new Url('entity.node.canonical', ['node' => $node->id()]), + '#url' => $node->toUrl(), '#title' => $this->t('Cancel'), '#attributes' => [ 'class' => [ diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php index cc2fdfcf2..b88241ee1 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Form/SettingsForm.php @@ -54,16 +54,28 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['email_template'] = [ '#type' => 'textarea', + '#required' => TRUE, '#title' => $this->t('Email template for flag content body'), '#default_value' => $config->get('template_body'), ]; + $form['email_template_tokens'] = [ + '#theme' => 'token_tree_link', + '#token_types' => ['user', 'node', 'os2loop_flag_content'], + ]; + $form['subject_template'] = [ '#type' => 'textarea', + '#required' => TRUE, '#title' => $this->t('Subject template for flag content subject'), '#default_value' => $config->get('template_subject'), ]; + $form['subject_template_tokens'] = [ + '#theme' => 'token_tree_link', + '#token_types' => ['user', 'node', 'os2loop_flag_content'], + ]; + return parent::buildForm($form, $form_state); } diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php index e24842db4..0030dbf2b 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php @@ -71,16 +71,10 @@ public function renderTemplate($template, array $data = NULL) { */ public function tokens($type, $tokens, array $data) { $replacements = []; - if ($type == 'os2loop_flag_content' && !empty($data['reason']) && !empty($data['message'])) { + if ('os2loop_flag_content' === $type && isset($data[$type])) { foreach ($tokens as $name => $original) { - switch ($name) { - case 'reason': - $replacements[$original] = $data['reason']; - break; - - case 'message': - $replacements[$original] = $data['message']; - break; + if (isset($data[$type][$name])) { + $replacements[$original] = $data[$type][$name]; } } } @@ -91,24 +85,27 @@ public function tokens($type, $tokens, array $data) { * Implements hook_token_info(). */ public function tokenInfo() { - $types['os2loop_flag_content'] = [ - 'name' => $this->t('Reason type'), - ]; - $tokens['reason'] = [ - 'name' => $this->t('Reason'), - ]; - - $tokens['message'] = [ - 'name' => $this->t('Message'), - ]; - return [ - 'types' => $types, + 'types' => [ + 'os2loop_flag_content' => [ + 'name' => $this->t('Flag content'), + 'description' => $this->t('Tokens related to flag content.'), + 'needs-data' => 'os2loop_flag_content', + ], + ], 'tokens' => [ - 'os2loop_flag_content' => $tokens, + 'os2loop_share_with_a_friend' => [ + 'message' => [ + 'name' => $this->t('The message'), + 'description' => $this->t('The message.'), + ], + 'reason' => [ + 'name' => $this->t('The reason'), + 'description' => $this->t('The reason.'), + ], + ], ], ]; - } } From eecbe7d129aa46b1af9dbfe40eedc296602e1e0c Mon Sep 17 00:00:00 2001 From: Sine Date: Thu, 20 May 2021 10:51:12 +0200 Subject: [PATCH 9/9] LOOP-750: changed data object to fit new solution --- .../src/Helper/MailHelper.php | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php index 0030dbf2b..f538f29d8 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_flag_content/src/Helper/MailHelper.php @@ -40,12 +40,15 @@ public function __construct(Token $token, Settings $settings) { public function mail($key, &$message, $params) { switch ($key) { case 'flag_content': - $node = $params['node']; $body_template = $this->config->get('template_body'); $subject_template = $this->config->get('template_subject'); - $data['node'] = $node; - $data['reason'] = $params['reason']; - $data['message'] = $params['message']; + $data = [ + 'node' => $params['node'], + 'os2loop_flag_content' => [ + 'message' => $params['message'], + 'reason' => $params['reason'], + ], + ]; $body = $this->renderTemplate($body_template, $data); $subject = $this->renderTemplate($subject_template, $data); $message['subject'] = $subject; @@ -57,12 +60,8 @@ public function mail($key, &$message, $params) { /** * Renders content of a mail. */ - public function renderTemplate($template, array $data = NULL) { - return $this->token->replace($template, [ - 'node' => $data['node'], - 'reason' => $data['reason'], - 'message' => $data['message'], - ], []); + public function renderTemplate($template, array $data) { + return $this->token->replace($template, $data, []); } @@ -94,7 +93,7 @@ public function tokenInfo() { ], ], 'tokens' => [ - 'os2loop_share_with_a_friend' => [ + 'os2loop_flag_content' => [ 'message' => [ 'name' => $this->t('The message'), 'description' => $this->t('The message.'),