Changeset 112773 in spip-zone


Ignore:
Timestamp:
Dec 13, 2018, 3:06:04 PM (3 months ago)
Author:
root
Message:

introduction d'une notification capable de traiter plusieurs subscriptions d'un coup - l'ancienne notification delegue a celle ci et ses appels restent fonctionnels

Location:
_plugins_/mailsubscribers/trunk/notifications
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsubscribers/trunk/notifications/instituermailsubscription.php

    r106794 r112773  
    88if (!defined('_ECRIRE_INC_VERSION')) return;
    99
    10 // Fonction appelee par divers pipelines
    11 // https://code.spip.net/@notifications_instituerarticle_dist
     10// @deprecated
     11// utiliser instituermailsubscriptions
    1212function notifications_instituermailsubscription_dist($quoi, $id_mailsubscriber, $options) {
    13 
    14         // ne devrait jamais se produire
    15         if (isset($options['statut'])
    16                 and ($options['statut'] == $options['statut_ancien'])
    17         ){
    18                 spip_log("instituermailsubscription #$id_mailsubscriber : statut inchange", 'notifications'._LOG_INFO_IMPORTANTE);
    19                 return;
    20         }
    2113
    2214        // @deprecated : il faut normalement utiliser l'option notify de subscribe et unsubscribe
     
    2517                return;
    2618
     19        $notifications = charger_fonction('notifications','inc');
    2720
    28         if (!isset($options['id_mailsubscribinglist'])){
    29                 spip_log("instituermailsubscription #$id_mailsubscriber : id_mailsubscribinglist inconnu", 'notifications'._LOG_INFO_IMPORTANTE);
    30         }
    31 
    32         include_spip('inc/texte');
    33 
    34         $modele = "";
    35         if (isset($options['statut'])
    36                 and $options['statut'] == 'valide'
    37         ) {
    38                 $modele = "notifications/mailsubscriber_subscribe";
    39         } elseif (isset($options['statut'])
    40                 and $options['statut_ancien'] == 'valide'
    41         ) {
    42                 $modele = "notifications/mailsubscriber_unsubscribe";
    43         } elseif (isset($options['statut'])
    44                 and $options['statut'] == 'prop'
    45         ) {
    46                 if (isset($options['invite_email_from']) AND strlen($options['invite_email_from'])) {
    47                         $modele = "notifications/mailsubscriber_invite_confirm";
    48                 } else {
    49                         $modele = "notifications/mailsubscriber_confirm";
    50                 }
    51         }
    52         if ($modele) {
    53                 $destinataires = sql_allfetsel("email", "spip_mailsubscribers", "id_mailsubscriber=" . intval($id_mailsubscriber));
    54                 $destinataires = array_map('reset', $destinataires);
    55 
    56                 $destinataires = pipeline('notifications_destinataires',
     21        $options = array(
     22                'subscriptions' =>
    5723                        array(
    58                                 'args' => array('quoi' => $quoi, 'id' => $id_mailsubscriber, 'options' => $options)
    59                         ,
    60                                 'data' => $destinataires
     24                                $options
    6125                        )
    62                 );
    63 
    64                 // precaution : enlever les adresses en "@example.org"
    65                 foreach ($destinataires as $k => $email) {
    66                         if (preg_match(",@example.org$,i", $email)) {
    67                                 unset($destinataires[$k]);
    68                         }
    69                 }
    70 
    71                 if (count($destinataires)) {
    72                         $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email
    73                         $env = $options;
    74                         unset($env['statut']);
    75                         $env['id_mailsubscriber'] = $id_mailsubscriber;
    76                         $texte = recuperer_fond($modele, $env);
    77                         notifications_envoyer_mails($destinataires, $texte);
    78                 }
    79         }
     26        );
     27        // on delegue a instituermailsubscriptions qui sait gerer plusieurs inscriptions d'un coup
     28        return $notifications('instituermailsubscriptions',$id_mailsubscriber,$options);
    8029}
  • _plugins_/mailsubscribers/trunk/notifications/instituermailsubscriptions.php

    r112726 r112773  
    88if (!defined('_ECRIRE_INC_VERSION')) return;
    99
    10 // Fonction appelee par divers pipelines
    11 // https://code.spip.net/@notifications_instituerarticle_dist
    12 function notifications_instituermailsubscription_dist($quoi, $id_mailsubscriber, $options) {
    13 
    14         // ne devrait jamais se produire
    15         if (isset($options['statut'])
    16                 and ($options['statut'] == $options['statut_ancien'])
    17         ){
    18                 spip_log("instituermailsubscription #$id_mailsubscriber : statut inchange", 'notifications'._LOG_INFO_IMPORTANTE);
    19                 return;
    20         }
     10// Notifier la modification de statut d'une ou plusieurs inscriptions a des listes (d'un meme subscriber)
     11// etend l'ancienne instituermailsubscription
     12function notifications_instituermailsubscriptions_dist($quoi, $id_mailsubscriber, $options) {
    2113
    2214        // @deprecated : il faut normalement utiliser l'option notify de subscribe et unsubscribe
     
    2517                return;
    2618
     19        $envois = array();
     20        include_spip('inc/texte');
    2721
    28         if (!isset($options['id_mailsubscribinglist'])){
    29                 spip_log("instituermailsubscription #$id_mailsubscriber : id_mailsubscribinglist inconnu", 'notifications'._LOG_INFO_IMPORTANTE);
     22        if (isset($options['subscriptions']) and count($options['subscriptions'])) {
     23
     24                foreach ($options['subscriptions'] as $subscription) {
     25
     26                        if (!isset($subscription['id_mailsubscribinglist'])){
     27                                spip_log("instituermailsubscriptions #$id_mailsubscriber : id_mailsubscribinglist inconnu " . json_encode($subscription), 'notifications'._LOG_INFO_IMPORTANTE);
     28                                continue; // rien d'autre a faire pour cette subscription
     29                        }
     30                        $id_mailsubscribinglist = $subscription['id_mailsubscribinglist'];
     31
     32                        // ne devrait jamais se produire
     33                        if (isset($subscription['statut'])
     34                                and ($subscription['statut'] == $subscription['statut_ancien'])
     35                        ){
     36                                spip_log("instituermailsubscriptions #$id_mailsubscriber a liste #$id_mailsubscribinglist : statut inchange", 'notifications'._LOG_INFO_IMPORTANTE);
     37                                continue; // rien d'autre a faire pour cette subscription
     38                        }
     39
     40                        // trouver le modele d'envoi
     41                        $modele = "";
     42                        if (isset($subscription['statut'])
     43                                and $subscription['statut'] == 'valide'
     44                        ) {
     45                                $modele = "notifications/mailsubscriber_subscribe";
     46                        } elseif (isset($subscription['statut_ancien'])
     47                                and $subscription['statut_ancien'] == 'valide'
     48                        ) {
     49                                $modele = "notifications/mailsubscriber_unsubscribe";
     50                        } elseif (isset($subscription['statut'])
     51                                and $subscription['statut'] == 'prop'
     52                        ) {
     53                                if (isset($subscription['invite_email_from']) AND strlen($subscription['invite_email_from'])) {
     54                                        $modele = "notifications/mailsubscriber_invite_confirm";
     55                                } else {
     56                                        $modele = "notifications/mailsubscriber_confirm";
     57                                }
     58                        }
     59
     60                        if ($modele){
     61
     62                                if (!isset($envois[$modele])) {
     63                                        $envois[$modele] = array(
     64                                                'id_mailsubscribinglists' => array(),
     65                                                'contexte' => array(),
     66                                        );
     67                                }
     68
     69                                $envois[$modele]['id_mailsubscribinglists'][] = $id_mailsubscribinglist;
     70                                $envois[$modele]['contexte'][$id_mailsubscribinglist] = $subscription;
     71                        }
     72
     73
     74                }
     75
    3076        }
    3177
    32         include_spip('inc/texte');
     78        spip_log("instituermailsubscriptions #$id_mailsubscriber : " . count($envois) . ' mails differents a envoyer', 'notifications');
    3379
    34         $modele = "";
    35         if (isset($options['statut'])
    36                 and $options['statut'] == 'valide'
    37         ) {
    38                 $modele = "notifications/mailsubscriber_subscribe";
    39         } elseif (isset($options['statut'])
    40                 and $options['statut_ancien'] == 'valide'
    41         ) {
    42                 $modele = "notifications/mailsubscriber_unsubscribe";
    43         } elseif (isset($options['statut'])
    44                 and $options['statut'] == 'prop'
    45         ) {
    46                 if (isset($options['invite_email_from']) AND strlen($options['invite_email_from'])) {
    47                         $modele = "notifications/mailsubscriber_invite_confirm";
    48                 } else {
    49                         $modele = "notifications/mailsubscriber_confirm";
    50                 }
    51         }
    52         if ($modele) {
    53                 $destinataires = sql_allfetsel("email", "spip_mailsubscribers", "id_mailsubscriber=" . intval($id_mailsubscriber));
    54                 $destinataires = array_map('reset', $destinataires);
     80        if ($envois) {
     81                $contexte = $options;
     82                unset($contexte['subscriptions']);
     83                $contexte['id_mailsubscriber'] = $id_mailsubscriber;
    5584
     85                $destinataires = sql_getfetsel("email", "spip_mailsubscribers", "id_mailsubscriber=" . intval($id_mailsubscriber));
    5686                $destinataires = pipeline('notifications_destinataires',
    5787                        array(
     
    71101                if (count($destinataires)) {
    72102                        $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email
    73                         $env = $options;
    74                         unset($env['statut']);
    75                         $env['id_mailsubscriber'] = $id_mailsubscriber;
    76                         $texte = recuperer_fond($modele, $env);
    77                         notifications_envoyer_mails($destinataires, $texte);
     103
     104                        foreach ($envois as $modele => $envoi) {
     105
     106                                if (count($envoi['id_mailsubscribinglists'])>1
     107                                  and $modele_multiples = "$modele-multiples"
     108                                        and trouver_fond($modele_multiples)) {
     109
     110                                        spip_log("instituermailsubscriptions #$id_mailsubscriber : $modele_multiples : envoi en un seul mail pour listes #" . implode(', #', $envoi['id_mailsubscribinglists']), 'notifications' . _LOG_INFO_IMPORTANTE);
     111
     112                                        $env = array();
     113                                        while (count($envoi['contexte'])) {
     114                                                $env = array_merge($env, array_shift($envoi['contexte']));
     115                                        }
     116                                        $env = array_merge($env, $contexte);
     117                                        $env['id_mailsubscribinglists'] = $envoi['id_mailsubscribinglists'];
     118                                        unset($env['statut']);
     119
     120                                        $texte = recuperer_fond($modele_multiples, $env);
     121                                        notifications_envoyer_mails($destinataires, $texte);
     122
     123                                }
     124                                else {
     125
     126                                        foreach ($envoi['id_mailsubscribinglists'] as $id_mailsubscribinglist) {
     127
     128                                                spip_log("instituermailsubscriptions #$id_mailsubscriber : $modele : envoi mail pour liste #$id_mailsubscribinglist", 'notifications' . _LOG_INFO_IMPORTANTE);
     129
     130                                                $env = array_merge($envoi['contexte'][$id_mailsubscribinglist], $contexte);
     131                                                unset($env['statut']);
     132                                                $env['id_mailsubscribinglist'] = $id_mailsubscribinglist;
     133
     134                                                $texte = recuperer_fond($modele, $env);
     135                                                notifications_envoyer_mails($destinataires, $texte);
     136
     137                                        }
     138
     139                                }
     140
     141                        }
     142                }
     143                else {
     144                        spip_log("instituermailsubscriptions #$id_mailsubscriber : aucun destinataire - rien a faire", 'notifications' . _LOG_INFO_IMPORTANTE);
    78145                }
    79146        }
     147
    80148}
Note: See TracChangeset for help on using the changeset viewer.