Changeset 50217 in spip-zone


Ignore:
Timestamp:
Aug 3, 2011, 3:23:38 PM (10 years ago)
Author:
cedric@…
Message:

Suite de la refonte de la messagerie :

  • la base évolue pour inclure un champ 'destinataires' qui conserve une trace en liste texte separee par des virgules des id_auteur ou email des destinataires. Permet notamment de le memoriser sur les messages en statut prepa
  • gestion complète de l'envoi/modification des messages, penses-betes et annonce
  • notification des auteurs qui ont une adresse mail, en complement de la diffusion du message dans la messagerie interne
  • l'envoi de messages vers des email externes (email comme destinatire) est egalement possible si la configuration est activee (le form de config est à completer)
  • gestion des messages lus, des alertes reception message
  • choix des destinataires par saisie libre+autocompletion (mix entre code du selecteur generique et du plugin messagerie)
  • gestion des messages lus

Il reste principalement :

  • la gestion de la suppression des messages
  • l'interface de saisie des messages "RDV" qui comportent une date de debut+date de fin
Location:
_core_/plugins/organiseur
Files:
10 added
1 deleted
18 edited
3 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/organiseur/base/organiseur.php

    r50050 r50217  
    3636
    3737                'principale' => 'oui',
    38                 'champs_editables' => array('titre', 'texte', 'type','date_heure', 'date_fin', 'rv', 'id_auteur'),
     38                'champs_editables' => array('titre', 'texte', 'type','date_heure', 'date_fin', 'rv', 'id_auteur', 'destinataires'),
    3939                'field' => array(
    4040                        "id_message"    => "bigint(21) NOT NULL",
     
    4444                        // pb (pense bete)
    4545                        // affich (annonce publique)
    46                         // genera (message general envoye a tout le monde)
    4746                        "type"  => "varchar(6) DEFAULT '' NOT NULL",
    4847                        "date_heure"    => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
     
    5150                        "statut"        => "varchar(6)  DEFAULT '0' NOT NULL",
    5251                        "id_auteur"     => "bigint(21) NOT NULL",
     52                        "destinataires" => "text DEFAULT '' NOT NULL",
    5353                        "maj"   => "TIMESTAMP"
    5454                ),
  • _core_/plugins/organiseur/formulaires/editer_message.js

    r49987 r50217  
    1 function set_auteur(li){
    2         var id_auteur = undefined;
    3         var box = $('#destinataire').siblings('.details');
    4         if (li!=undefined && li.extra[0]) {
    5                 id_auteur = li.extra[0];
    6                 var nom = $(li).html();
     1function formulaire_editer_message_set_dest(input,data,value){
     2        console.log(data);
     3        console.log(value);
     4        var id_auteur;
     5        var box = jQuery(input).siblings('.selected');
     6        if (data[1]) {
     7                id_auteur = data[1];
     8                var nom = value;
    79                if (box.find('input[value='+id_auteur+']').length==0){
    8                         box.append(" <span class='dest'>"
    9                         +nom
    10                         +"<input type='hidden' name='destinataires[]' value='"+id_auteur+"' /> "
    11                         +$(box).find('span.dest:first').html()
     10                        box.find('.on').removeClass('on');
     11                        box.append(" <span class='dest on'>"
     12                        + value
     13                        +"<input type='hidden' name='"
     14                        + jQuery(input).attr('data-name')
     15                        + "' value='"+id_auteur+"' /> "
     16                        + $(box).find('span.dest:first').html()
    1217                        +"</span>");
    1318                }
     19                else
     20                        box.find('input[value='+id_auteur+']').closest('span').addClass('on').siblings('.on').removeClass('on');
    1421        }
    15         $(box)
    16           .find('span.dest')
    17           .hover(function(){$(this).addClass('hover');},function(){$(this).removeClass('hover');})
    18           .find('img').click(function(){$(this).parent().remove();});
    19         $('#destinataire').attr('value','');//.get(0).focus();
     22        jQuery(input).attr('value','');//.get(0).focus();
    2023}
    21 function formulaire_ecrire_message_init(){
    22         if ($("#destinataire").length) {
    23                 if ($("#destinataire")[0].autocompleter==undefined) {
    24                         $('#destinataire').autocomplete(url_find_friend, {minChars:3, mustMatchOrEmpty:1,selectFirst:true,matchSubset:0, matchContains:1, cacheLength:10, onItemSelect:set_auteur });
    25                         $('#destinataire').parent().bind('click',function(){$('#destinataire').get(0).focus();})
    26                         set_auteur();
    27                 }
    28         }
     24function formulaire_editer_message_init(){
     25        jQuery("input.destinataires:not(.autocompleted)").each(function(){
     26                var me = this;
     27                jQuery(me)
     28                        .autocomplete(url_trouver_destinataire, {minChars:2, mustMatchOrEmpty:1,autoFill:true,matchSubset:0, matchContains:1, cacheLength:10 })
     29                  .bind('result',function(e,data,value){return formulaire_editer_message_set_dest(me,data,value);})
     30                  .parent().bind('click',function(){jQuery(me).get(0).focus();});
     31        })
     32        .addClass('autocompleted');
    2933}
    3034if (window.jQuery){
    31 $('document').ready(function(){
    32         formulaire_ecrire_message_init();
    33         onAjaxLoad(formulaire_ecrire_message_init);
    34 });
     35        jQuery(function(){
     36                formulaire_editer_message_init();
     37                onAjaxLoad(formulaire_editer_message_init);
     38        });
    3539}
  • _core_/plugins/organiseur/inc/messages.php

    r50047 r50217  
    2020
    2121/**
    22  * Fonction generique de verification de la saisie
    23  * lors de l'envoi d'un message ou de recommander
    24  *
    25  * @param array $obligatoires
     22 * Lister les statuts des auteurs pouvant recevoir un message
     23 * c'est tous les auteurs au moins redacteur
     24 *
    2625 * @return array
    2726 */
    28 function messagerie_verifier($obligatoires = array()){
     27function messagerie_statuts_destinataires_possibles(){
     28        include_spip('inc/filtres_ecrire');
     29        return auteurs_lister_statuts('redacteurs',false);
     30}
     31
     32/**
     33 * Nettoyer une liste de destinataires
     34 * @param $destinataires
     35 * @return array
     36 */
     37function messagerie_nettoyer_destinataires($destinataires){
     38        foreach ($destinataires as $k=>$id){
     39                // il se peut que l'id recupere l'ancre qui suit avec certains ie ... :(
     40                if (preg_match(',^[0-9]+#[a-z_0-9]+,',$id))
     41                        $destinataires[$k] = intval($id);
     42        }
     43        return $destinataires;
     44}
     45
     46/**
     47 * Fonction generique de verification des destinataires
     48 * lors de l'envoi d'un message ou de recommander
     49 * un destinataire peut etre un id_auteur numerique
     50 * ou une adresse mail valide, si l'options accepter_email est true
     51 *
     52 * @param array $destinataires
     53 * @param array $options
     54 * @return array
     55 */
     56function messagerie_verifier_destinataires($destinataires,$options=array('accepter_email'=>true)){
    2957        $erreurs = array();
    30         foreach($obligatoires as $obli)
    31                 if (!_request($obli))
    32                         $erreurs[$obli] = (isset($erreurs[$obli])?$erreurs[$obli]:'') . _T('formulaires:info_obligatoire_rappel');
    3358
    34         $dests = _request('destinataires');
    35        
    36         if (!count($dests)
    37           AND !count(   $dests = pipeline('messagerie_destiner',$dests)))
    38                         $erreurs[$obli='destinataire'] = (isset($erreurs[$obli])?$erreurs[$obli]:'') . _T('formulaires:info_obligatoire_rappel');
    39        
     59        $destinataires = messagerie_nettoyer_destinataires($destinataires);
     60        foreach ($destinataires as $id){
     61                if (is_numeric($id)){
     62                        if (!$id)
     63                                $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
     64                }
     65                else {
     66                        if (!$options['accepter_email']
     67                                OR !email_valide($id))
     68                                $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
     69                }
     70        }
     71
    4072        return $erreurs;
    4173}
     
    4476 * Selectionner les destinataires en distinguant emails et id_auteur
    4577 *
    46  * @param unknown_type $dests
    47  * @return unknown
     78 * @param array $dests
     79 * @return array
    4880 */
    4981function messagerie_destiner($dests){
    50         $dests = pipeline('messagerie_destiner',$dests);
    51        
    5282        // separer les destinataires auteur des destinataires email
    5383        $auteurs_dest = array();
    5484        $email_dests = array();
     85
     86        $dests = messagerie_nettoyer_destinataires($dests);
    5587        foreach ($dests as $id){
    56                 // il se peut que l'id recupere l'ancre qui suit avec certains ie ... :(
    57                 if (preg_match(',[0-9]+#[a-z_0-9]+,',$id))
    58                         $id = intval($id);
    5988                if (is_numeric($id))
    6089                        $auteurs_dest[] = $id;
    61                 elseif ($id!=_EMAIL_GENERAL)
     90                elseif (defined('_MESSAGERIE_EMAIL_GENERAL') AND $id!=_MESSAGERIE_EMAIL_GENERAL)
    6291                        $email_dests[] = $id;
    6392        }
    6493        if (count($email_dests)) {
    65                 // retrouver les id des emails
    66                 $res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests).')');
     94                // retrouver les id des emails pour ceux qui sont en base
     95                $res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests));
    6796                $auteurs_dest_found = array();
    68                 while ($row = spip_fetch_array($res)){
     97                while ($row = sql_fetch($res)){
    6998                        $auteurs_dest_found[] = $row['id_auteur'];
    7099                }
     
    75104
    76105/**
    77  * Envoyer un message par la messagerie interne
     106 * Diffuser un message par la messagerie interne
    78107 *
    79  * @param string $objet
    80  * @param string $texte
     108 * @param int $id_message
    81109 * @param array $auteurs_dest
    82  * @param bool $type
    83  * @return int
     110 * @return bool|int
    84111 */
    85 function messagerie_messager($objet, $texte, $auteurs_dest=array(),$type = ''){
    86         $type = substr($type,0,6);
    87         if (!in_array($type,array('normal','genera','pb','affich')))
    88                 $type = 'normal';
     112function messagerie_diffuser_message($id_message, $auteurs_dest=array()){
    89113        $out = false;
    90         if (count($auteurs_dest) OR $general){
    91                 // envoyons le message
    92                 $id_message = sql_insertq('spip_messages',array(
    93                 'titre' => safehtml($objet),
    94                 'texte' => safehtml($texte),
    95                 'type' => $type,
    96                 'date_heure' => 'NOW()',
    97                 'date_fin' => 'NOW()',
    98                 'rv' => 'non',
    99                 'statut' => 'publie',
    100                 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'],
    101                 ));
    102                
    103                 if ($id_message) {
    104                         $insert = array();
    105                         if (!$general) {
    106                                 foreach($auteurs_dest as $id)
    107                                         $insert[] = array('id_objet'=>$id_message,'objet'=>'message','id_auteur'=>$id,'vu'=>'non');
    108                         }
    109                         else {
    110                                 $res = sql_select('id_auteur','spip_auteurs');
    111                                 while ($row = sql_fetch($res))
    112                                         $insert[] = array('id_objet'=>$id_message,'objet'=>'message','id_auteur'=>$row['id_auteur'],'vu'=>'non');
    113                         }
    114                         sql_insertq_multi('spip_auteurs_liens',$insert);
    115 
    116                         $out = $id_message;                     
    117                 }
     114        if ($id_message=intval($id_message)
     115          AND count($auteurs_dest)){
     116                include_spip('action/editer_liens');
     117                $out = objet_associer(array('auteur'=>$auteurs_dest),array('message'=>$id_message),array('vu'=>'non'));
    118118        }
    119119        return $out;
     
    121121
    122122/**
    123  * Envoyer un message par mail
     123 * Envoyer un message par mail pour les destinataires externes
    124124 *
    125  * @param string $objet
    126  * @param string $texte
     125 * @param int $id_message
    127126 * @param array $emails_dest
    128127 * @return bool
    129128 */
    130 function messagerie_mailer($objet, $texte, $emails_dest=array()){
    131         if (count($emails_dest)) {
    132                 $from = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
    133                 $envoyer_mail = charger_fonction('envoyer_mail','inc');
    134                 foreach($emails_dest as $email)
    135                         $envoyer_mail($email,$objet,$texte,$from);
    136                 return true;
     129function messagerie_mailer_message($id_message, $emails_dest=array()){
     130        if ($id_message=intval($id_message)
     131          AND count($emails_dest)) {
     132                if ($row = sql_fetsel('titre,texte,id_auteur','spip_messages','id_message='.intval($id_message))){
     133                        $from = sql_getfetsel('email','spip_auteurs','id_auteur='.$row['id_auteur']);
     134                        foreach($emails_dest as $email)
     135                                job_queue_add(
     136                                        'envoyer_mail',
     137                                        'messagerie mail',
     138                                  array($email,$row['titre'],array('texte'=>$row['texte'],'from'=>$from)),
     139                                        'inc/'
     140                                );
     141                        return true;
     142                }
    137143        }
    138144        return false;
     
    146152 */
    147153function messagerie_marquer_lus($id_auteur,$liste){
    148         $liste = array_map('intval',$liste);
    149         sql_updateq('spip_auteurs_liens',array('vu'=>'oui'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
     154        include_spip('action/editer_liens');
     155        if (!is_array($liste))
     156                $liste = array($liste);
     157        // completer les liens qui n'existent pas encore
     158        // ex : pour marquer lue une annonce, on ajoute le lien d'abord (n'existe pas)
     159        // puis on le marque 'oui'
     160        $liens = objet_trouver_liens(array('auteur'=>$id_auteur),array('message'=>$liste));
     161        $l = array();
     162        foreach($liens as $lien)
     163                $l[] = $lien['message'];
     164        objet_associer(array('auteur'=>$id_auteur),array('message'=>array_diff($liste,$l)),array('vu'=>'oui'));
     165        // puis les marquer tous lus
     166        objet_qualifier_liens(array('auteur'=>$id_auteur),array('message'=>$liste),array('vu'=>'oui'));
    150167        include_spip('inc/invalideur');
    151168        suivre_invalideur("message/".implode(',',$liste));
     
    159176 */
    160177function messagerie_marquer_non_lus($id_auteur,$liste){
    161         $liste = array_map('intval',$liste);
    162         sql_updateq('spip_auteurs_liens',array('vu'=>'non'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
     178        include_spip('action/editer_liens');
     179        objet_qualifier_liens(array('auteur'=>$id_auteur),array('message'=>$liste),array('vu'=>'non'));
    163180        include_spip('inc/invalideur');
    164181        suivre_invalideur("message/".implode(',',$liste));
     
    166183
    167184/**
    168  * Effacer un message
     185 * Effacer un message recu
    169186 *
    170187 * @param int $id_auteur
    171188 * @param array $liste
    172189 */
    173 function messagerie_effacer($id_auteur,$liste){
    174         $liste = array_map('intval',$liste);
    175         sql_updateq('spip_auteurs_liens',array('vu'=>'pou'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
     190function messagerie_effacer_recu($id_auteur,$liste){
     191        include_spip('action/editer_liens');
     192        objet_dissocier(array('auteur'=>$id_auteur),array('message'=>$liste));
    176193        include_spip('inc/invalideur');
    177194        suivre_invalideur("message/".implode(',',$liste));
  • _core_/plugins/organiseur/lang/organiseur_fr.php

    r50132 r50217  
    66$GLOBALS[$GLOBALS['idx_lang']] = array(
    77
     8        // B
     9        'bouton_enregistrer_brouillon' => 'Enregistrer en brouillon',
     10        'bouton_envoyer_message' => 'Envoyer',
     11        'bouton_envoyer_message_maintenant' => 'Envoyer maintenant',
     12
    813        // C
    914        'cal_jour_entier' => 'Journée',
     
    1217        'cal_par_semaine' => 'semaine',
    1318
     19        // E
     20        'erreur_destinataire_invalide' => 'Le destinataire @dest@ n\'est pas valide',
     21
    1422        // I
    1523        'icone_ecrire_nouveau_message' => 'Envoyer un nouveau message',
    1624        'icone_ecrire_nouvelle_annonce' => 'Envoyer une nouvelle annonce',
    17         'icone_ecrire_nouveau_pensebete' => 'Ecrire une nouveau pense-bête',
     25        'icone_ecrire_nouveau_pensebete' => 'Ecrire un nouveau pense-bête',
    1826        'icone_modifier_pensebete' => 'Modifier ce pense-bête',
    1927        'icone_modifier_annonce' => 'Modifier cette annonce',
     
    4452        // L
    4553        'loading' => 'Chargement...',
     54        'label_destinataires' => "À",
     55        'label_titre' => "Sujet",
     56        'label_texte' => "Texte",
    4657
    4758        // M
     
    4960        'messages' => 'Messages',
    5061
     62        // N
     63        'notification_annonce_publie_1' => '[@nom_site_spip@] Annonce générale',
     64        'notification_annonce_lire_a_ladresse' => 'Vous pouvez la lire à l\'adresse suivante @url@.',
     65       
     66        'notification_message_publie_1' => '[@nom_site_spip@] Nouveau message',
     67        'notification_message_recu_de' => 'Vous avez reçu un nouveau message de la part de @nom@.',
     68        'notification_message_lire_a_ladresse' => 'Vous pouvez le lire et y répondre à l\'adresse suivante @url@.',
     69
     70
    5171        // T
     72        'texte_message_brouillon' => 'Ce message est enregistré comme brouillon',
    5273        'titre_boite_reception' => 'Boîte de reception',
    5374        'titre_boite_envoi' => 'Boîte d\'envoi',
  • _core_/plugins/organiseur/organiseur_administrations.php

    r50132 r50217  
    4040        );
    4141
     42        $maj['1.1.0'] = array(
     43                array('sql_updateq',"spip_messages",array('statut'=>'prepa'),"statut='redac'"),
     44                array('sql_alter',"TABLE spip_messages ADD destinataires text DEFAULT '' NOT NULL"),
     45        );
     46
    4247        include_spip('base/upgrade');
    4348        maj_plugin($nom_meta_base_version, $version_cible, $maj);
     
    6267
    6368
    64 /**
    65   * Reunir en une seule table les liens de mots dans spip_mots_liens
    66   * Passe spip_mots_xx(id_mot, id_xx) dans spip_mots_liens(objet, id_objet, id_mot)
    67   * (peut fonctionner pour d'autres table spip_xx_liens).
    68   *
    69   * @param array $objets : liste d'objets à transférer.
    70   * @param string $destination : table de destination (se terminant par _liens).
    71   * @param bool $supprimer_ancienne_table : supprimer l'ancienne table une fois la copie réalisée ?.
    72   * @return
    73  **/
    74 function organiseur_maj_tables_liaisons ($objets, $destination='spip_mots_liens', $supprimer_ancienne_table = true) {
    75         // creer la table spip_mots_liens manquante
    76         include_spip('base/create');
    77         creer_base();
    78 
    79         $trouver_table = charger_fonction('trouver_table','base');
    80        
    81         // Recopier les donnees
    82         foreach ($objets as $objet) {
    83                 $table_objet = table_objet($objet);
    84                 if ($table_objet == 'forums') $table_objet = 'forum'; // #naze #bug #forum
    85                 $_id_objet = id_table_objet($objet);
    86                 $source = substr($destination, 0, -5) . $table_objet; // spip_mots_xx
    87                 spip_log("Transfert SQL de : '$source' vers '$destination'");
    88                
    89                 if (!$trouver_table($source)) continue; // la source n'existe pas... ne rien tenter...
    90                
    91                 if ($s = sql_select('*', $source)) {
    92                         $tampon = array();
    93                         while ($t = sql_fetch($s)) {
    94                                 // transformer id_xx=N en (id_objet=N, objet=xx)
    95                                 $t['id_objet'] = $t[$_id_objet];
    96                                 $t['objet'] = $objet;
    97                                 unset($t[$_id_objet]);
    98                                 unset($t['maj']);
    99                                 $tampon[] = $t;
    100                                 if (count($tampon)>10000) {
    101                                         sql_insertq_multi($destination, $tampon);
    102                                         $tampon = array();
    103                                 }
    104                         }
    105                        
    106                         if (count($tampon)) {
    107                                 sql_insertq_multi($destination, $tampon);
    108                         }
    109                        
    110                         if ($supprimer_ancienne_table) {
    111                                 sql_drop_table($source);
    112                         }
    113                 }
    114         }
    115 }
    116 
    117 
    11869?>
  • _core_/plugins/organiseur/organiseur_autoriser.php

    r50133 r50217  
    3232
    3333function autoriser_message_modifier_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
     34        if (!intval($qui['id_auteur']))
     35                return false;
    3436        $row = sql_fetsel('statut,type,id_auteur','spip_messages','id_message='.intval($id));
    35         if ($row['id_auteur']!=$qui['id_auteur'])
    36                 return false;
    37         if ($row['statut']=='redac' OR $row['type']=='pb')
     37        // on peut modifier ses penses betes ou ses messages brouillons
     38        if ($row['id_auteur']==$qui['id_auteur'] AND ($row['statut']=='prepa' OR $row['type']=='pb'))
     39                return true;
     40        // on peut modifier les annonces si on est admin
     41        if ($qui['statut']=='0minirezo' AND $row['type']=='affich')
    3842                return true;
    3943        return false;
    4044}
    4145
     46function autoriser_message_instituer_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
     47        return autoriser('modifier','message',$id,$qui,$opt);
     48}
     49
     50
    4251function autoriser_message_dater_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
    4352        return false;
     53}
     54
     55// par defaut, autorisation commune a tous les type de message
     56// peut etre surchargee en fonction de $type (pb,affich,normal)
     57function autoriser_envoyermessage_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
     58        if(!($GLOBALS['meta']['messagerie_agenda'] == 'oui') OR !intval($qui['id_auteur']))
     59                return false;
     60        return true;
    4461}
    4562
     
    5673        return false;
    5774}
     75
  • _core_/plugins/organiseur/organiseur_fonctions.php

    r50099 r50217  
    1818        $_auteur = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
    1919
    20         $boucle->join['auteurs_liens']=array("'".$boucle->id_table."'","'id_objet'","'".$boucle->primary."'","'auteurs_liens.objet=\'message\''");
     20        $boucle->join['auteurs_liens']=array("'".$boucle->id_table."'","'id_objet'","'".$boucle->primary."'","'auteurs_liens.objet=\'message\' AND auteurs_liens.id_auteur='.intval($_auteur)");
    2121        $boucle->from['auteurs_liens']='spip_auteurs_liens';
    2222        $boucle->from_type['auteurs_liens'] = 'LEFT';
     
    2525                        array(
    2626                                "'AND'",
    27                                 array("'='","'auteurs_liens.id_auteur'","sql_quote($_auteur)"),
     27                                array("'='","'auteurs_liens.id_auteur'","intval($_auteur)"),
    2828                                array("'!='","'auteurs_liens.vu'","'\'pou\''"),
    2929                        ),
     
    3333                                        "'AND'",
    3434                                        array("'='","'".$boucle->id_table.".type'","sql_quote('pb')"),
    35                                         array("'='","'".$boucle->id_table.".id_auteur'","sql_quote($_auteur)"),
     35                                        array("'='","'".$boucle->id_table.".id_auteur'","intval($_auteur)"),
    3636                                )
    3737                        )
     
    153153        return _T($texte);
    154154}
     155function organiseur_texte_nouveau_message($type){
     156        $texte = array('pb'=>'organiseur:icone_ecrire_nouveau_pensebete','affich'=>'organiseur:icone_ecrire_nouvelle_annonce');
     157        $texte = isset($texte[$type])?$texte[$type]:'organiseur:icone_ecrire_nouveau_message';
     158        return _T($texte);
     159}
    155160?>
  • _core_/plugins/organiseur/organiseur_pipelines.php

    r50056 r50217  
    7171        $total_messages = count($result_messages);
    7272        if ($total_messages == 1) {
    73                 $row = $result_messages[0];
    74                 $ze_message=$row['id_message'];
    75                 $flux['data'][] = "<a href='" . generer_url_ecrire("message","id_message=$ze_message") . "' class='ligne_foncee'>"._T('info_nouveau_message')."</a>";
    76         } elseif ($total_messages > 1)
    77                 $flux['data'][] = "<a href='" . generer_url_ecrire("messagerie") . "' classe='ligne_foncee'>"._T('info_nouveaux_messages', array('total_messages' => $total_messages))."</a>";
     73                $row = reset($result_messages);
     74                $id_message=$row['id_message'];
     75                $flux['data'][] = "<a href='" . generer_url_ecrire("message","id_message=$id_message") . "'>"._T('organiseur:info_1_message_nonlu')."</a>";
     76        }
     77        elseif ($total_messages > 1)
     78                $flux['data'][] = "<a href='" . generer_url_ecrire("messages") . "'>"._T('organiseur:info_nb_messages_nonlus', array('nb' => $total_messages))."</a>";
    7879
    7980        return $flux;
     
    161162  return $flux;
    162163}
     164
     165/**
     166 * Diffuser un message qui passe en publie (== a envoyer)
     167 *
     168 * @param array $flux
     169 * @return array
     170 */
     171function organiseur_post_edition($flux){
     172
     173        if ($flux['args']['table']=='spip_messages'
     174          AND $flux['args']['action']=='instituer'
     175                AND $flux['data']['statut']=='publie'
     176                AND $flux['args']['statut_ancien']!='publie'
     177        ){
     178                $id_message = $flux['args']['id_objet'];
     179                $row = sql_fetsel('destinataires,id_auteur,titre,texte','spip_messages','id_message='.intval($id_message));
     180                if ($row){
     181                        include_spip('inc/messages');
     182                        list($auteurs_dest,$email_dests) = messagerie_destiner(explode(',',$row['destinataires']));
     183
     184                        // diffuser le message en interne
     185                        messagerie_diffuser_message($id_message, $auteurs_dest);
     186                        // diffuser le message en externe
     187                        messagerie_mailer_message($id_message, $email_dests);
     188                }
     189        }
     190        return $flux;
     191}
  • _core_/plugins/organiseur/paquet.xml

    r50132 r50217  
    22        prefix="organiseur"
    33        categorie="date"
    4         version="0.4.0"
     4        version="0.5.0"
    55        etat="test"
    66        compatibilite="[3.0.0-alpha2;["
    77        logo="prive/themes/spip/images/calendrier-32.png"
    8         schema="0.1.0"
     8        schema="1.1.0"
    99>       
    1010
     
    2727        <pipeline nom="affiche_droite" inclure="organiseur_pipelines.php" />
    2828        <pipeline nom="affiche_auteurs_interventions" inclure="organiseur_pipelines.php" />
    29         <pipeline nom="agenda_rendu_evenement" />
    30 
    31         <necessite nom="grenier" compatibilite="[0.1.0;[" />
     29        <pipeline nom="post_edition" inclure="organiseur_pipelines.php" />
     30        <pipeline nom="alertes_auteur" inclure="organiseur_pipelines.php" />
    3231
    3332        <menu nom="calendrier" titre="organiseur:info_agenda_interne" parent="outils_collaboratifs" icone="images/calendrier-16.png" />
    34         <menu nom="messages" titre="info_messagerie_interne" parent="outils_collaboratifs" icone="images/messagerie-16.png" />
     33        <menu nom="messagerie" titre="info_messagerie_interne" action="messages" parent="outils_collaboratifs" icone="images/messagerie-16.png" />
    3534</paquet>
  • _core_/plugins/organiseur/prive/objets/contenu/message.html

    r50061 r50217  
    1313<div dir='#LANG_DIR' class='#EDIT{date_heure} date_heure'>[[(#DATE_HEURE|nom_jour)] (#DATE_HEURE|affdate_heure)]</div>
    1414</div>
    15 <B_to>
    16 <div class="champ contenu_to clearfix">
     15<B_d>
     16<div class="champ contenu_destinataires clearfix">
    1717<div class='label'><:organiseur:info_message_a:></div>
    18 <div dir='#LANG_DIR' class='to'><BOUCLE_to(AUTEURS auteurs_liens){si #TYPE|=={normal}}{id_objet=#ID_MESSAGE}{objet=message}{', '}>#NOM</BOUCLE_to></div>
     18<div dir='#LANG_DIR' class='destinataires'>
     19        <BOUCLE_d(POUR){tableau #DESTINATAIRES|explode{','}}{', '}><BOUCLE_a(AUTEURS){id_auteur=#VALEUR}{tout}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_a>#VALEUR<//B_a></BOUCLE_d>
    1920</div>
    20 </B_to>
     21</B_d>
    2122</div>
    2223<div class="champ contenu_texte[ (#TEXTE*|strlen|?{'',vide})]">
  • _core_/plugins/organiseur/prive/objets/liste/messages-envoyes.html

    r50101 r50217  
    2121        </thead>
    2222        <tbody>
    23         <BOUCLE_mess_env(MESSAGES){destinataire?#ENV{destinataire}}{id_auteur=#ENV{id_auteur}}{type?}{where?}{statut?}{recherche?}{tri #ENV{par,date_heure},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
    24                 [(#SET{vu,[(#TYPE|=={pb}|ou{#VU|match{^(oui|pou)$}})]})]
    25                 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][(#GET{vu}|non)new]">
     23        <BOUCLE_mess_env(MESSAGES){destinataire?#ENV{destinataire}}{id_auteur?}{type?}{where?}{statut?}{recherche?}{tri #ENV{par,date_heure},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
     24                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    2625                        <td class='type'>[(#CHEMIN_IMAGE{#TYPE|organiseur_icone_message{16}}|balise_img{#VAL{organiseur:info_type_message_}|concat{#TYPE}|_T})]</td>
    2726                        <td class='isrv'>[(#RV|=={oui}|oui)[(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})]]</td>
    28                         <td class="to"><BOUCLE_dest(AUTEURS){id_message}{si #TYPE|=={normal}}{', '}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_dest></td>
     27                        <td class="to"><BOUCLE_d(POUR){tableau #DESTINATAIRES|explode{','}}{si #TYPE|=={normal}}{', '}><BOUCLE_a(AUTEURS){id_auteur=#VALEUR}{tout}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_a>#VALEUR<//B_a></BOUCLE_d></td>
    2928                        <td class='date secondaire'>
    3029                                [(#RV|=={oui}|?{
  • _core_/plugins/organiseur/prive/objets/liste/messages-recus.html

    r50101 r50217  
    55}})
    66]
    7 <BOUCLE_compte_non_lus(MESSAGES auteurs){destinataire #ENV{destinataire}}{id_auteur?}{type!=pb}{type?}{where?}{statut?}{recherche?}{non_lu}>[(#NOM|vide)]</BOUCLE_compte_non_lus>
     7<BOUCLE_compte_non_lus(MESSAGES auteurs){destinataire?#ENV{destinataire}}{id_auteur?}{type!=pb}{type?}{where?}{statut?}{recherche?}{non_lu}>[(#NOM|vide)]</BOUCLE_compte_non_lus>
    88#SET{nonlus,#ENV{nonlus,#TOTAL_BOUCLE}}
    99<//B_compte_non_lus>
  • _core_/plugins/organiseur/prive/squelettes/contenu/message.html

    r50099 r50217  
    88        ],simple fiche_objet})]
    99
     10        [(#STATUT|=={prepa}|oui)
     11                #BOITE_OUVRIR{'',note center proposer}
     12                        <p><:organiseur:texte_message_brouillon:></p>
     13                        [(#BOUTON_ACTION{<:organiseur:bouton_envoyer_message_maintenant:>,#URL_ACTION_AUTEUR{envoyermessage,#ID_MESSAGE,#SELF}})]
     14                #BOITE_FERMER
     15        ]
    1016        <div id="wysiwyg">
    1117        <INCLURE{fond=prive/objets/contenu/message,id=#ID_MESSAGE}>
     
    2632        <script type="text/javascript">/*<!\[CDATA\[*/reloadExecPage('[(#OBJET|objet_info{url_voir})]','#navigation,#chemin');/*\]\]>*/</script>
    2733        ]
     34        <?php
     35        include_spip('inc/messages');
     36        messagerie_marquer_lus(#SESSION{id_auteur},#ID_MESSAGE);
     37        ?>
    2838</BOUCLE_message>
    2939[(#ENV**{exec}|=={message_edit}|?{#INCLURE{fond=prive/squelettes/contenu/message_edit,redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})]
  • _core_/plugins/organiseur/prive/squelettes/contenu/messages.html

    r50059 r50217  
    88</div>
    99<INCLURE{fond=prive/squelettes/inclure/organiseur-#ENV{quoi,reception},id_auteur=#SESSION{id_auteur},env,ajax} />
     10
     11[(#AUTORISER{envoyermessage,normal}|oui)
     12        [(#URL_ECRIRE{message_edit,new=oui}|icone_verticale{<:organiseur:icone_ecrire_nouveau_message:>,message-24.png,new,right})]
     13]
     14[(#AUTORISER{envoyermessage,affich}|oui)
     15        [(#URL_ECRIRE{message_edit,new=oui&typemes=affich}|icone_verticale{<:organiseur:icone_ecrire_nouvelle_annonce:>,annonce-24.png,new,right})]
     16]
     17[(#AUTORISER{envoyermessage,pb}|oui)
     18        [(#URL_ECRIRE{message_edit,new=oui&typemes=pb}|icone_verticale{<:organiseur:icone_ecrire_nouveau_pensebete:>,pensebete-24.png,new,right})]
     19]
  • _core_/plugins/organiseur/prive/squelettes/inclure/organiseur-autocomplete-auteur.html

    r49987 r50217  
    11#HTTP_HEADER{Content-type:text/plain;charset=#CHARSET}
    22#SET{q,#VAL{%}|concat{#ENV{q,''}|replace{\s+,%},%}}
    3 <BOUCLE_auteur(AUTEURS spip_profils){nom like #GET{q}}{0,20}{tout}>#NOM*|#ID_AUTEUR
     3<BOUCLE_auteur(AUTEURS){nom like #GET{q}}{0,20}{tout}>[(#NOM|textebrut|replace{'\|',' '})]|#ID_AUTEUR
    44</BOUCLE_auteur>[(#CONFIG{messagerie/autoriser_email}|=={oui}|oui)[(#ENV{q}|email_valide|?{#ENV{q}})|#ENV{q}
    55]]<//B_auteur>
  • _core_/plugins/organiseur/prive/squelettes/inclure/organiseur-envoi.html

    r50059 r50217  
    22<div class='nettoyeur'></div>
    33
    4 <INCLURE{fond=prive/objets/liste/messages-envoyes,id_auteur=#ENV{id_auteur},statut=redac,titre=<:info_message_en_redaction:>,type=#ENV{typem,'tout'}|replace{tout,''},nb=10,env,ajax} />
     4<INCLURE{fond=prive/objets/liste/messages-envoyes,id_auteur=#ENV{id_auteur},statut=prepa,titre=<:info_message_en_redaction:>,type=#ENV{typem,'tout'}|replace{tout,''},nb=10,env,ajax} />
    55
    66<p class="tri">
  • _core_/plugins/organiseur/prive/squelettes/inclure/organiseur-interventions.html

    r50056 r50217  
    22<INCLURE{fond=prive/objets/liste/messages-envoyes,id_auteur=#ENV{id_auteur},destinataire=#SESSION{id_auteur},statut=publie,type=normal,env,ajax} />
    33<INCLURE{fond=prive/objets/liste/messages-recus,id_auteur=#SESSION{id_auteur},destinataire=#ENV{id_auteur},statut=publie,type=normal,env,ajax} />
    4 [(#URL_ECRIRE{message_edit,new=oui&destinataire=#ENV{id_auteur}}|icone_verticale{<:info_envoyer_message_prive:>,message-24.png,new,right})]
     4[(#URL_ECRIRE{message_edit,new=oui&to=#ENV{id_auteur}}|icone_verticale{<:info_envoyer_message_prive:>,message-24.png,new,right})]
    55
  • _core_/plugins/organiseur/prive/squelettes/inclure/organiseur-reception.html

    r50059 r50217  
    88</p>
    99
    10 <INCLURE{fond=prive/objets/liste/messages-recus,destinataire=#ENV{id_auteur},sinon=<:info_aucun_message:>,type=#ENV{typem,'tout'}|replace{tout,''},statut=publie,nb=50,env,ajax} />
    11 
    12 [(#URL_ECRIRE{message_edit,new=oui}|icone_verticale{<:organiseur:icone_ecrire_nouveau_message:>,message-24.png,new,right})]
    13 [(#AUTORISER{envoyermessage,annonce}|oui)
    14 [(#URL_ECRIRE{message_edit,new=oui&typemes=affich}|icone_verticale{<:organiseur:icone_ecrire_nouvelle_annonce:>,annonce-24.png,new,right})]
    15 ]
    16 [(#AUTORISER{envoyermessage,pensebete}|oui)
    17 [(#URL_ECRIRE{message_edit,new=oui&typemes=pb}|icone_verticale{<:organiseur:icone_ecrire_nouveau_pensebete:>,pensebete-24.png,new,right})]
    18 ]
     10<INCLURE{fond=prive/objets/liste/messages-recus,destinataire=#ENV{id_auteur},id_auteur='',sinon=<:info_aucun_message:>,type=#ENV{typem,'tout'}|replace{tout,''},statut=publie,nb=50,env,ajax} />
  • _core_/plugins/organiseur/prive/squelettes/navigation/messages.html

    r50059 r50217  
    33#BOITE_FERMER
    44
    5 #BOITE_OUVRIR{'',raccourcis}
    6 [(#URL_ECRIRE{message_edit,new=oui}|icone_horizontale{<:organiseur:icone_ecrire_nouveau_message:>,message-24.png,new})]
    7 [(#AUTORISER{envoyermessage,annonce}|oui)
    8 [(#URL_ECRIRE{message_edit,new=oui&typemes=affich}|icone_horizontale{<:organiseur:icone_ecrire_nouvelle_annonce:>,annonce-24.png,new})]
     5#SET{ouvreboite,' '}
     6
     7[(#AUTORISER{envoyermessage,normal}|oui)
     8        [(#GET{ouvreboite}|oui)
     9                #BOITE_OUVRIR{'',raccourcis}
     10                #SET{ouvreboite,''}
     11        ]
     12        [(#URL_ECRIRE{message_edit,new=oui}|icone_horizontale{<:organiseur:icone_ecrire_nouveau_message:>,message-24.png,new})]
    913]
    10 [(#AUTORISER{envoyermessage,pensebete}|oui)
    11 [(#URL_ECRIRE{message_edit,new=oui&typemes=pb}|icone_horizontale{<:organiseur:icone_ecrire_nouveau_pensebete:>,pensebete-24.png,new})]
     14[(#AUTORISER{envoyermessage,affich}|oui)
     15        [(#GET{ouvreboite}|oui)
     16                #BOITE_OUVRIR{'',raccourcis}
     17                #SET{ouvreboite,''}
     18        ]
     19        [(#URL_ECRIRE{message_edit,new=oui&typemes=affich}|icone_horizontale{<:organiseur:icone_ecrire_nouvelle_annonce:>,annonce-24.png,new})]
    1220]
     21[(#AUTORISER{envoyermessage,pb}|oui)
     22        [(#GET{ouvreboite}|oui)
     23                #BOITE_OUVRIR{'',raccourcis}
     24                #SET{ouvreboite,''}
     25        ]
     26        [(#URL_ECRIRE{message_edit,new=oui&typemes=pb}|icone_horizontale{<:organiseur:icone_ecrire_nouveau_pensebete:>,pensebete-24.png,new})]
     27]
     28[(#GET{ouvreboite}|sinon{#BOITE_FERMER})]
    1329
    14 #BOITE_FERMER
    1530
    1631<INCLURE{fond=prive/squelettes/inclure/organiseur-rappels,id_auteur=#SESSION{id_auteur},last=#SESSION{quand}} />
  • _core_/plugins/organiseur/prive/style_prive_plugin_organiseur.html

    r50061 r50217  
    3333.message #wysiwyg {position: relative;}
    3434.message #wysiwyg .contenu_from .label,
    35 .message #wysiwyg .contenu_to .label,
     35.message #wysiwyg .contenu_destinataires .label,
    3636.message #wysiwyg .contenu_titre .label,
    3737.message #wysiwyg .contenu_date_heure .label {display: block;float:#GET{left};width:6em;clear:#GET{left};text-align:#GET{right};padding:0 10px;}
     
    4141.message #wysiwyg .contenu_texte {clear:both;border-top: 1px solid #999;margin-top: 1em;padding-top: 1em;}
    4242
    43 /* ?exec=message_edit */
    44 .message_edit .formo {width:99%;}
    45 .message_edit .box {margin:20px 0;}
     43/* formulaire editer_message */
     44.formulaire_editer_message span.dest {padding:1px 3px;background:#EEE;border:1px solid #CCC;display:block;float:left;margin:0 4px 3px 0;}
     45.formulaire_editer_message span.dest:hover {background:#DDD;}
     46.formulaire_editer_message span.dest img {cursor:pointer;padding:1px;}
     47.formulaire_editer_message .fake-input {background:#FFF;border:1px solid #999;padding: 3px 3px 0; width: 100%; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box;-ms-box-sizing: border-box;}
     48.formulaire_editer_message .fake-input input.text {width:200px;border: 0;padding: 1px 0;margin-bottom: 3px;}
     49
     50/* autocompletion */
     51.formulaire_editer_message input.ac_loading {   background-image : url(#CHEMIN_IMAGE{'searching.gif'});background-position: right center;background-repeat: no-repeat;}
     52/*.ac_input {   width: 200px; }*/
     53.ac_results {   padding: 0px;   border: 1px solid WindowFrame;  background-color: Window;       text-align:left;z-index:1000;margin-top: 3px;margin-left: -3px;}
     54.ac_results ul {        width: 100%;    overflow: hidden !important;list-style-position: outside;       list-style: none;       padding: 0;     margin: 0;}
     55
     56/*.ac_results iframe {position:absolute;        top:0;  left:0; z-index:-1;     filter:mask();  width:3000px;   height:3000px;}*/
     57.ac_results li {        margin: 0px;    padding: 2px 5px;       cursor: pointer;        display: block; width: 100%;    font-size: 1em; overflow: hidden;}
     58.ac_over {      background-color: Highlight;    color: HighlightText;}
    4659
    4760/* ?exec=messages*/
Note: See TracChangeset for help on using the changeset viewer.