1
\$\begingroup\$

This code write out the title and the body of a message depending basically on 3 variables combination.

How could i refactor this nicely?

  • a factory pattern? how more precisely?

  • a mapping array ? but how?

  • defer the conditions to another function WriteOutMessage($moderation, $moderation_state, $Authorship)?
  • Try to somehow have the same variable names as the possible combinations values?

     switch ($moderation_state) {
     case 'draft':
    if ($moderation_state_original == 'draft') {
      if ($current_user_name != $author_name) {
    
        //Envoi à l'auteur
        $send_to = $author_email;
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
    
      }
      else {
        //pas d'envoi d'e-mails
        $params['node_title'] = '';
        $params['message'] = '';
        $send = FALSE;
        break;
      }
    }
    else {
      //pas d'envoi d'e-mails
      $params['node_title'] = '';
      $params['message'] = '';
      $send = FALSE;
      break;
    }
    
    break;
    case 'propose_a_la_relecture':
    
    if ($moderation_state_original == 'propose_a_la_relecture') {
      if ($current_user_name != $author_name) {
        //Envoi à l'auteur
        $send_to = $author_email;
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
      }
      else {
        //pas d'envoi d'e-mails
        $params['node_title'] = '';
        $params['message'] = '';
        $send = FALSE;
        break;
      }
    }
    else {
    
      //TODO replace with dosi list
      //retrieve all dosi members
    
      $send_to = "dd@ue";
    
      $params['node_title'] = '[DUD] Nouvel article proposé à la publication par ' . $author_name . ': ' . $article->label();
      $params['message'] = "L'article " . $article->get('title')
          ->getString();
      $params['message'] .= " vient d'être proposé à la publication par " . $author_name . ".\n";
      $params['message'] .= "Qu'il en soit remercié pour le temps qu'il contribue ainsi à faire gagner à ses collègues et à tous les AMUsagers.\n";
      $params['message'] .= "N'hésitez pas à faire avancer le workflow en assurant une relecture.\n";
      $params['message'] .= "Un petit pas pour la DOSI, mais à coup sûr un grand pas pour la qualité du service public français.\n";
      $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
          ->getString() . "\n";
      $params['message'] .= "Le Dioude.";
      break;
    }
    
    case 'relecture_1_ok':
    if ($moderation_state_original == 'relecture_1_ok') {
      if ($current_user_name != $author_name) {
        //Envoi à l'auteur
        $send_to = $author_email;
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
      }
      else {
        //pas d'envoi d'e-mails
        $params['node_title'] = '';
        $params['message'] = '';
        $send = FALSE;
        break;
      }
    }
    else {
    
    
      //TODO replace with dosi list
      $send_to = "[email protected]";
    
      $params['node_title'] = '[DUD] Relecture 1 validée pour l\'article ' . $article->label() . " de " . $author_name;
      $params['message'] = "L'article " . $article->get('title')
          ->getString() . " de " . $author_name . " vient d'être passé dans l'état Relecture 1 ok par le relecteur " . $current_user_name;
      $params['message'] .= "\nC'est là: " . $base_url . "/node/" . $article->get('nid')
          ->getString() . "\n";
      $params['message'] .= "Merci de poursuivre l'effort en assurant la 2eme relecture, dernière étape avant publication.\n";
      $params['message'] .= "Le Dioude.";
      break;
    }
    
    case 'relecture_2_ok':
    
    if ($moderation_state_original == 'relecture_2_ok') {
      if ($current_user_name != $author_name) {
        //Envoi à l'auteur
        $send_to = $author_email;
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
      }
      else {
        //pas d'envoi d'e-mails
        $params['node_title'] = '';
        $params['message'] = '';
        $send = FALSE;
        break;
      }
    }
    else {
      //retrieve all rédacteur en chef
      $query = \Drupal::entityQuery('user');
      $nids = $query->execute();
      foreach ($nids as $nid) {
        $user = \Drupal\user\Entity\User::load($nid);
        if ($user->hasRole('redacteur_en_chef')) {
          $emails_redacteur_en_chef[] = $user->getEmail();
        }
      }
      $send_to = implode(',', $emails_redacteur_en_chef);
    
      $params['node_title'] = '[DUD] Relecture 2 ok pour l\'article ' . $article->label() . " de " . $author_name;
      $params['message'] = "L'article " . $article->get('title')
          ->getString() . " de " . $author_name . " vient d'être passé dans l'état Relecture 2 ok par le relecteur " . $current_user_name;
      $params['message'] .= "\nC'est là: " . $base_url . "/node/" . $article->get('nid')
          ->getString() . "\n";
      $params['message'] .= "El Dioudolo.";
      break;
    }
    
    case 'published':
    
    if ($moderation_state_original == 'published') {
    
      if ($current_user_name != $author_name) {
    
        //retrieve all rédacteur en chef
        $query = \Drupal::entityQuery('user');
        $nids = $query->execute();
        foreach ($nids as $nid) {
          $user = \Drupal\user\Entity\User::load($nid);
          if ($user->hasRole('redacteur_en_chef')) {
            $emails_redacteur_en_chef[] = $user->getEmail();
          }
        }
        $send_to = implode(',', $emails_redacteur_en_chef);
        $send_to .= ',';
        $send_to .= $author_email;
    
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
      }
      else {
        //retrieve all rédacteur en chef
        $query = \Drupal::entityQuery('user');
        $nids = $query->execute();
        foreach ($nids as $nid) {
          $user = \Drupal\user\Entity\User::load($nid);
          if ($user->hasRole('redacteur_en_chef')) {
            $emails_redacteur_en_chef[] = $user->getEmail();
          }
        }
        $send_to = implode(',', $emails_redacteur_en_chef);
    
        $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
        $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')
            ->getString() . " sans changer son état. Allez vite voir...\n";
        $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
            ->getString() . "\n";
        $params['message'] .= "A Bientôt, \n";
        $params['message'] .= "Le Dioude.";
        break;
      }
    }
    else {
      // $send_to=$article->getOwner()->getEmail();
      //TODO replace with dosi list
      $send_to = "zz@zz";
    
      $params['node_title'] = '[DUD] Nouvel article publié par ' . $author_name . ": " . $article->label();
      $params['message'] = "L'article " . $article->get('title')
          ->getString() . " de" . $author_name . " vient d'être publié.\n";
      $params['message'] = "Un grand merci collectif à l'auteur: " . $author_name . ". La DOSI l'aime. Ses colllègues l'aiment. AMU entière l'aime. Gloire à toi " . $author_name . " !!!";
      $params['message'] .= "\nPrécipitez-vous: " . $base_url . "/node/" . $article->get('nid')
          ->getString() . "\n";
      $params['message'] .= "Merci à tous pour votre participation. \n";
      $params['message'] .= "Le Dioude.";
      break;
    }
    
    case 'mise_a_jour_necessaire':
    //TODO replace with dosi list
    $send_to = "[email protected]";
    
    $params['node_title'] = '[DUD] Mise à jour souhaitée pour: ' . $article->label();
    $params['message'] = "L'article " . $article->get('title')->getString();
    $params['message'] .= " crée par " . $author_name . " ";
    $params['message'] .= "nécessite une mise à jour. \nUn cycle de relecture est nécessaire avant sa remise en publication:\n";
    $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')
        ->getString() . "\n";
    $params['message'] .= "A Bientôt, \n";
    $params['message'] .= "Le Dioude.";
    break;
    
    default:
    //pas d'envoi d'e-mails
    $params['node_title'] = '';
    $params['message'] = '';
    $send = FALSE;
    break;
    }
    
\$\endgroup\$

3 Answers 3

3
\$\begingroup\$

This is how I would rewrite the code to be a lot more read- and maintainable.

The most important point was the D.R.Y. (Don't Repeat Yourself) which was already pointed out by @mickmackusa

When you have larger texts with variables make use of the heredoc syntax.

If you have a return/break/continue/exit/die in an if construct you don't need the else

example:

<?php
if ($somevalue === true) {
    if ($someOtherValue === true) {
        foo();
        return 3;
    } else {
        bar()
        return 2;
    }
} else {
    baz();
    return 3;
}

can be replaced with:

<?php
if ($somevalue === true) {
    if ($someOtherValue === true) {
        foo();
        return 3;
    }
    bar();
    return 2;
}
baz();
return 3;

Also try to use === and !== instead of == and != whenever possible

Here is the refactored code (~70 lines less):

<?php
function getChiefRedactorEmailAddresses(): array{
    $emails_redacteur_en_chef = [];
    //retrieve all rédacteur en chef
    $query = \Drupal::entityQuery('user');
    $nids = $query->execute();
    foreach ($nids as $nid){
        $user = \Drupal\user\Entity\User::load($nid);
        if ($user->hasRole('redacteur_en_chef')){
            $emails_redacteur_en_chef[] = $user->getEmail();
        }
    }
    return $emails_redacteur_en_chef;
}

// convenience variable to make code/messages more readable
$article_detail_url = $base_url . '/node/' . $article->get('nid')->getString();
$article_title = $article->get('title')->getString();
$article_label = $article->label();

// since the exact same title is used 6 times, we can safely assign it only once to make the code more readable
$node_title_mod = "[DUD] Modifications de $current_user_name pour l'article $article_label de $author_name";

// this message is used twice
$message_mod = <<<EOF
$current_user_name vient de modifier l'article $article_title sans changer son état. Allez vite voir...
C'est là: $article_detail_url
A Bientôt,
Le Dioude.
EOF;

// set the default values here so we can remove this assignment from all the else statements
$params['node_title'] = '';
$params['message'] = '';
$send = false;

switch ($moderation_state) {
    case 'draft':
        if ($moderation_state_original === 'draft' && $current_user_name !== $author_name) {
            //Envoi à l'auteur
            $send_to = $author_email;
            $params['node_title'] = $node_title_mod;
            $params['message'] = $message_mod;
            break;
        }
        break;
    case 'propose_a_la_relecture':
        if ($moderation_state_original === 'propose_a_la_relecture') {
            if ($current_user_name !== $author_name) {
                //Envoi à l'auteur
                $send_to = $author_email;
                $params['node_title'] = $node_title_mod;
                $params['message'] = $message_mod;
                break;
            }
            //pas d'envoi d'e-mails
            break;
        }
        //TODO replace with dosi list
        //retrieve all dosi members

        $send_to = "dd@ue";

        $params['node_title'] = "[DUD] Nouvel article proposé à la publication par $author_name: $article_label";
        $params['message'] = <<<EOF
L'article $article_title vient d'être proposé à la publication par $author_name
Qu'il en soit remercié pour le temps qu'il contribue ainsi à faire gagner à ses collègues et à tous les AMUsagers.
N'hésitez pas à faire avancer le workflow en assurant une relecture.
Un petit pas pour la DOSI, mais à coup sûr un grand pas pour la qualité du service public français.
C'est là: $article_detail_url
Le Dioude.
EOF;
        break;

    case 'relecture_1_ok':
        if ($moderation_state_original === 'relecture_1_ok') {
            if ($current_user_name != $author_name) {
                //Envoi à l'auteur
                $send_to = $author_email;

                $params['node_title'] = $node_title_mod;
                $params['message'] = <<<EOF
$current_user_name vient de modifier l'article $article_title sans changer son état. Allez vite voir...
C'est là: $article_detail_url
A Bientôt,
Le Dioude.
EOF;
                break;
            }
            //pas d'envoi d'e-mails
            break;
        }
        //TODO replace with dosi list
        $send_to = "[email protected]";

        $params['node_title'] = "[DUD] Relecture 1 validée pour l'article $article_label de $author_name";
        $params['message'] = <<<EOF
L'article $article_title de $author_name vient d'être passé dans l'état Relecture 1 ok par le relecteur $current_user_name
C'est là: $article_detail_url
Merci de poursuivre l'effort en assurant la 2eme relecture, dernière étape avant publication.
Le Dioude.
EOF;
        break;

    case 'relecture_2_ok':

        if ($moderation_state_original === 'relecture_2_ok') {
            if ($current_user_name !== $author_name) {
                //Envoi à l'auteur
                $send_to = $author_email;

                $params['node_title'] = $node_title_mod;
                $params['message'] = <<<EOF
$current_user_name vient de modifier l'article $article_title sans changer son état. Allez vite voir...
C'est là: $article_detail_url
A Bientôt,
Le Dioude.
EOF;
                break;
            }
            //pas d'envoi d'e-mails
            break;
        }
        $send_to = implode(',', getChiefRedactorEmailAddresses());

        $params['node_title'] = "[DUD] Relecture 2 ok pour l'article $article_label de $author_name";
        $params['message'] = <<<EOF
L'article $article_title de $author_name vient d'être passé dans l'état Relecture 2 ok par le relecteur $current_user_name
C'est là: $article_detail_url
El Dioudolo.
EOF;
        break;

    case 'published':
        if ($moderation_state_original === 'published') {
            $send_to = getChiefRedactorEmailAddresses();
            if ($current_user_name !== $author_name) {
                // since it's the same message we don't need the extra if here, we can just add the current users email
                // to the send_to array
                $send_to[] = $author_email;
            }
            $send_to = implode(',', $send_to);

            $params['node_title'] = $node_title_mod;
            $params['message'] = <<<EOF
$current_user_name vient de modifier l'article $article_title sans changer son état. Allez vite voir...
C'est là: $article_detail_url
A Bientôt,
Le Dioude
EOF;
            break;
        }
        // $send_to=$article->getOwner()->getEmail();
        //TODO replace with dosi list
        $send_to = "zz@zz";

        $params['node_title'] = "[DUD] Nouvel article publié par $author_name: $article_label";
        $params['message'] = <<<EOF
L'article $article_title de $author_name vient d'être publié.
Un grand merci collectif à l'auteur: $author_name. La DOSI l'aime. Ses colllègues l'aiment. AMU entière l'aime. Gloire à toi $author_name!!!
Précipitez-vous: $article_detail_url
Merci à tous pour votre participation
Le Dioude.
EOF;
        break;

    case 'mise_a_jour_necessaire':
        //TODO replace with dosi list
        $send_to = "[email protected]";

        $params['node_title'] = "[DUD] Mise à jour souhaitée pour: $article_label";
        $params['message'] = <<<EOF
L'article $article_title crée par $author_name nécessite une mise à jour.
Un cycle de relecture est nécessaire avant sa remise en publication:
C'est là: $article_detail_url
A Bientôt,
Le Dioude.
EOF;
        break;
    // no need for a "default:", since it doesn't add anything
}

How could you improve this code more? You could use a simple replacement template engine for the email messages and put the texts into individual files.

Example:

Very simple "template engine"

<?php
$article_title = 'Best template engine ever';
$author_name = 'Donald Trump';
$article_detail_url = '/some/path/to/article';

$message = include 'includes/messages/some_message.php';

some_message.php

<?php
return <<<EOF
L'article $article_title vient d'être proposé à la publication par $author_name
Qu'il en soit remercié pour le temps qu'il contribue ainsi à faire gagner à ses collègues et à tous les AMUsagers.
N'hésitez pas à faire avancer le workflow en assurant une relecture.
Un petit pas pour la DOSI, mais à coup sûr un grand pas pour la qualité du service public français.
C'est là: $article_detail_url
Le Dioude.
EOF;
\$\endgroup\$
2
\$\begingroup\$

Using a switch block is an advantageous design because you are evaluating $moderation_state just once.

I think the only aspect of your code worth refining is the repeated ... $send = FALSE;... parts. It just isn't as D.R.Y. (Don't Repeat Yourself) as it could be.

I recommend pulling all of those else portions out of the switch block and running a single if($send_to){} after the switch block to handle all disqualified cases. Notice that you will need to slightly tweak the if/elseif/else expressions to maintain accuracy.

Something like this:

switch ($moderation_state) {
    case 'draft':
        if ($moderation_state_original == 'draft' && $current_user_name != $author_name) {
            //Envoi à l'auteur
            $send_to = $author_email;
            $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
            $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')->getString() . " sans changer son état. Allez vite voir...\n";
            $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')->getString() . "\n";
            $params['message'] .= "A Bientôt, \n";
            $params['message'] .= "Le Dioude."; 
        }
        break;
    case 'propose_a_la_relecture':
        if ($moderation_state_original == 'propose_a_la_relecture' && $current_user_name != $author_name) {
            //Envoi à l'auteur
            $send_to = $author_email;
            $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
            $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')->getString() . " sans changer son état. Allez vite voir...\n";
            $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')->getString() . "\n";
            $params['message'] .= "A Bientôt, \n";
            $params['message'] .= "Le Dioude.";
            break;
        } elseif ($moderation_state_original != 'propose_a_la_relecture') {
            //TODO replace with dosi list
            //retrieve all dosi members
            $send_to = "dd@ue";
            $params['node_title'] = '[DUD] Nouvel article proposé à la publication par ' . $author_name . ': ' . $article->label();
            $params['message'] = "L'article " . $article->get('title')->getString();
            $params['message'] .= " vient d'être proposé à la publication par " . $author_name . ".\n";
            $params['message'] .= "Qu'il en soit remercié pour le temps qu'il contribue ainsi à faire gagner à ses collègues et à tous les AMUsagers.\n";
            $params['message'] .= "N'hésitez pas à faire avancer le workflow en assurant une relecture.\n";
            $params['message'] .= "Un petit pas pour la DOSI, mais à coup sûr un grand pas pour la qualité du service public français.\n";
            $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')->getString() . "\n";
            $params['message'] .= "Le Dioude.";
            break;
        }
    case 'relecture_1_ok':
        if ($moderation_state_original == 'relecture_1_ok' && $current_user_name != $author_name) { 
            //Envoi à l'auteur
            $send_to = $author_email;
            $params['node_title'] = '[DUD] Modifications de ' . $current_user_name . ' pour l\'article ' . $article->label() . ' de ' . $author_name;
            $params['message'] = $current_user_name . " vient de modifier l'article " . $article->get('title')->getString() . " sans changer son état. Allez vite voir...\n";
            $params['message'] .= "C'est là: " . $base_url . "/node/" . $article->get('nid')->getString() . "\n";
            $params['message'] .= "A Bientôt, \n";
            $params['message'] .= "Le Dioude.";
            break;
        }
        break;
    //... continue the case blocks...
}   
if(!$send_to){
    //pas d'envoi d'e-mails
    $params['node_title'] = '';
    $params['message'] = '';
    $send = FALSE;
    break;
}

Regarding a lookup array and writing a custom function, I don't think these design options will improve code maintainability. Though it may save a few lines of code by separating the declarations from the conditional structures, navigating and updating your code will be more tedious and possibly error-prone.

Using the switch cases will simplify debugging, updating, and will be much more comprehensible to future developers that lay eyes on your work.

\$\endgroup\$
0
\$\begingroup\$

Thanks to @nick and @mickmackusa i have turned it to ( and i am still opened up to comments :

<?php


/**
 * 
 *
 *
 * @param \Drupal\Core\Entity\EntityInterface $entity
 */
function amu_dud_rules_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {

  if ($entity->getEntityTypeId() !== 'content_moderation_state') {
    return;
  }

  $article_id = $entity->get('content_entity_id')->getString();
  $article = \Drupal\node\Entity\Node::load($article_id);
  if ($article->bundle() !== 'article') {
    return;
  }

  include 'includes/notification/messages.php';
  include 'includes/notification/titles.php';

  global $base_url;
  $article_title = $article->get('title')->getString();
  $article_url = $base_url . "/node/" . $article->get('nid')->getString();

  $author_name = $article->getOwner()->get('field_cn_ldap')->getString();
  $author_email = $article->getOwner()->getEmail();
  $current_user_uid = \Drupal::currentUser()->id();
  $current_user_name = \Drupal\user\Entity\User::load($current_user_uid) ->get('field_cn_ldap') ->getString();
  $is_author=($current_user_name == $author_name);

  //retrieve all rédacteur en chef
  $query = \Drupal::entityQuery('user');
  $uids = $query->execute();
  foreach ($uids as $uid) {
    $user = \Drupal\user\Entity\User::load($uid);
    if ($user->hasRole('redacteur_en_chef')) {
      $emails_redacteur_en_chef[] = $user->getEmail();
    }
  }
  $emails_redacteur_en_chef = implode(',', $emails_redacteur_en_chef);


  $moderation_state = $entity->get('moderation_state')->getString();
  $moderation_state_original = '';
  if ($entity->original) {
    $moderation_state_original = $entity->original->get('moderation_state') ->getString();
  }
  $is_transition_change=($moderation_state !== $moderation_state_original);

  $send_to = $author_email;
  $params['node_title'] = $title_mod;
  $params['message'] = $message_same_state;
  $send = FALSE;

  switch ($moderation_state) {
    case 'draft':
      if (!$is_transition_change && !$is_author) {
          $send = TRUE;
      }
      break;

    case 'propose_a_la_relecture':
      if (!$is_transition_change && !$is_author) {
          $send = TRUE;
      }
      elseif ($is_transition_change){
        //TODO replace with dosi list
        $send_to = "blabla";
        $params['node_title'] = $title_prop;
        $params['message'] = $message_prop;
        $send = TRUE;
      }
      break;

    case 'relecture_1_ok':
      if (!$is_transition_change && !$is_author) {
          $send = TRUE;
      }
      elseif ($is_transition_change){
        //TODO replace with dosi list
        $send_to = "blabla";
        $params['node_title'] = $title_relec1;
        $params['message'] = $message_relec1;
        $send = TRUE;
      }
      break;

    case 'relecture_2_ok':
      $send_to = $emails_redacteur_en_chef;
      $params['node_title'] = $title_relec2;
      $params['message'] = $message_relec2;
      $send = TRUE;
      break;

    case 'published':
      if (!$is_transition_change) {
        $send_to .= ',';
        $send_to .= $emails_redacteur_en_chef;
        $send = TRUE;
      }
      else {
        //TODO replace with dosi list
        $send_to = "blabla";
        $params['node_title'] = $title_pub;
        $params['message'] = $message_pub;
        $send = TRUE;
      }
      break;

    case 'mise_a_jour_necessaire':
      //TODO replace with dosi list
      $send_to = "blabla";
      $params['node_title'] = $title_maj;
      $params['message'] = $message_maj;
      $send = TRUE;
      break;

    default:
      break;
  }

  if ($send) {
    $mailManager = \Drupal::service('plugin.manager.mail');
    $module = "amu_dud_rules";
    $key = 'state_changed_action';
    $to = $send_to;

    $langcode = \Drupal::currentUser()->getPreferredLangcode();

    $result = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send);

    if ($result['result'] !== TRUE) {
      drupal_set_message(t('There was a problem sending notifications.'), 'error');
    }
    else {
      drupal_set_message(t("A notification has been sent to $to"));
    }
  }
}

includes/notification/messages.php

<?php

$message_same_state = <<<same_state
  $current_user_name vient de modifier l'article $article_title sans changer son état. Allez vite voir...\n
C'est là: $article_url.\n
A Bientôt,\n
Le Dioude.
same_state;

$message_prop = <<<proposed
L'article $article_title vient d'être proposé à la publication par $author_name.\n
Qu'il en soit remercié pour le temps qu'il contribue ainsi à faire gagner à ses collègues et à tous les AMUsagers.\n
N'hésitez pas à faire avancer le workflow en assurant une relecture.\n
Un petit pas pour la DOSI, mais à coup sûr un grand pas pour la qualité du service public français.\n
C'est là: $article_url. \n
Le Dioude.
proposed;

$message_relec1 = <<<relecture1
L'article $article_title de $author_name vient d'être passé dans l'état Relecture 1 ok par le relecteur $current_user_name.\n
C'est là: $article_url.\n
Merci de poursuivre l'effort en assurant la 2eme relecture, dernière étape avant publication.\n
Le Dioude.
relecture1;

$message_relec2 = <<<relecture2
L'article $article_title de $author_name vient d'être passé dans l'état Relecture 2 ok par le relecteur $current_user_name.\n
C'est là: $article_url.\n
El Dioudolo.
relecture2;

$message_pub = <<<published
L'article $article_title de $author_name vient d'être publié.\n
Un grand merci collectif à l'auteur $author_name.\n
La DOSI l'aime. Ses colllègues l'aiment. AMU entière l'aime. Gloire à toi $author_name !!!\n
Précipitez-vous: $article_url.\n
Merci à tous pour votre participation.\n
Le Dioude.
published;

$message_maj = <<<maj
L'article $article_title crée par $author_name nécessite une mise à jour.\n
Un cycle de relecture est nécessaire avant sa remise en publication.\n
C'est là: $article_url.\n
A Bientôt,\n
Le Dioude.
maj;
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.