Browse Source

debut de boite de reception unifiee (messages, annonces, penses betes)

svn/root/tags/plugins/organiseur/0.4.0
cedric@yterium.com 11 years ago
parent
commit
7869f45005
  1. 11
      .gitattributes
  2. 180
      inc/messages.php
  3. 16
      lang/organiseur_fr.php
  4. 23
      organiseur_fonctions.php
  5. 2
      plugin.xml
  6. 57
      prive/objets/liste/messages-recus.html
  7. 8
      prive/squelettes/contenu/messages.html
  8. 0
      prive/squelettes/inclure/organiseur-envoi.html
  9. 1
      prive/squelettes/inclure/organiseur-reception.html
  10. 3
      prive/squelettes/navigation/messages.html
  11. 7
      prive/style_prive_plugin_organiseur.html
  12. BIN
      prive/themes/spip/images/message-24.png
  13. BIN
      prive/themes/spip/images/message-add-24.png
  14. BIN
      prive/themes/spip/images/message-del-24.png
  15. BIN
      prive/themes/spip/images/message-edit-24.png
  16. BIN
      prive/themes/spip/images/message-new-24.png
  17. BIN
      prive/themes/spip/images/pictonew-16.png

11
.gitattributes vendored

@ -14,6 +14,7 @@ formulaires/configurer_messagerie_agenda.html -text
formulaires/configurer_messagerie_agenda.php -text
inc/agenda.php -text
inc/message_select.php -text
inc/messages.php -text
inc/quete_calendrier.php -text
lang/organiseur.xml -text
lang/organiseur_ar.php -text
@ -29,11 +30,16 @@ lib/fullcalendar/gcal.js -text
/organiseur_fonctions.php -text
/organiseur_pipelines.php -text
/plugin.xml -text
prive/objets/liste/messages-recus.html -text
prive/rss/messagerie.html -text
prive/squelettes/contenu/calendrier.html -text
prive/squelettes/contenu/messages.html -text
prive/squelettes/inclure/configurer_messagerie.html -text
prive/squelettes/inclure/organiseur-envoi.html -text
prive/squelettes/inclure/organiseur-message.html -text
prive/squelettes/inclure/organiseur-rappels.html -text
prive/squelettes/inclure/organiseur-reception.html -text
prive/squelettes/navigation/messages.html -text
prive/squelettes/top/calendrier.html -text
prive/style_prive_plugin_organiseur.html -text
prive/themes/spip/images/agenda-16.png -text
@ -91,18 +97,14 @@ prive/themes/spip/images/message-16.png -text
prive/themes/spip/images/message-24.png -text
prive/themes/spip/images/message-32.png -text
prive/themes/spip/images/message-add-16.png -text
prive/themes/spip/images/message-add-24.png -text
prive/themes/spip/images/message-add-32.png -text
prive/themes/spip/images/message-del-16.png -text
prive/themes/spip/images/message-del-24.png -text
prive/themes/spip/images/message-del-32.png -text
prive/themes/spip/images/message-edit-16.png -text
prive/themes/spip/images/message-edit-24.png -text
prive/themes/spip/images/message-edit-32.png -text
prive/themes/spip/images/message-envoyer-16.png -text
prive/themes/spip/images/message-envoyer-24.png -text
prive/themes/spip/images/message-new-16.png -text
prive/themes/spip/images/message-new-24.png -text
prive/themes/spip/images/message-new-32.png -text
prive/themes/spip/images/messagerie-16.png -text
prive/themes/spip/images/messagerie-24.png -text
@ -124,6 +126,7 @@ prive/themes/spip/images/pensebete-edit-32.png -text
prive/themes/spip/images/pensebete-new-16.png -text
prive/themes/spip/images/pensebete-new-24.png -text
prive/themes/spip/images/pensebete-new-32.png -text
prive/themes/spip/images/pictonew-16.png -text
prive/themes/spip2/images/agenda-16.png -text
prive/themes/spip2/images/agenda-24.png -text
prive/themes/spip2/images/annonce-16.png -text

180
inc/messages.php

@ -0,0 +1,180 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/filtres');
include_spip('base/abstract_sql');
if (!defined('_EMAIL_GENERAL'))
define('_EMAIL_GENERAL','general'); // permet aux admin d'envoyer un email a tout le monde
/**
* Fonction generique de verification de la saisie
* lors de l'envoi d'un message ou de recommander
*
* @param array $obligatoires
* @return array
*/
function messagerie_verifier($obligatoires = array()){
$erreurs = array();
foreach($obligatoires as $obli)
if (!_request($obli))
$erreurs[$obli] = (isset($erreurs[$obli])?$erreurs[$obli]:'') . _T('formulaires:info_obligatoire_rappel');
$dests = _request('destinataires');
if (!count($dests)
AND !count( $dests = pipeline('messagerie_destiner',$dests)))
$erreurs[$obli='destinataire'] = (isset($erreurs[$obli])?$erreurs[$obli]:'') . _T('formulaires:info_obligatoire_rappel');
return $erreurs;
}
/**
* Selectionner les destinataires en distinguant emails et id_auteur
*
* @param unknown_type $dests
* @return unknown
*/
function messagerie_destiner($dests){
$dests = pipeline('messagerie_destiner',$dests);
// separer les destinataires auteur des destinataires email
$auteurs_dest = array();
$email_dests = array();
foreach ($dests as $id){
// il se peut que l'id recupere l'ancre qui suit avec certains ie ... :(
if (preg_match(',[0-9]+#[a-z_0-9]+,',$id))
$id = intval($id);
if (is_numeric($id))
$auteurs_dest[] = $id;
elseif ($id!=_EMAIL_GENERAL)
$email_dests[] = $id;
}
if (count($email_dests)) {
// retrouver les id des emails
$res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests).')');
$auteurs_dest_found = array();
while ($row = spip_fetch_array($res)){
$auteurs_dest_found[] = $row['id_auteur'];
}
$auteurs_dest = array_merge($auteurs_dest,$auteurs_dest_found);
}
return array($auteurs_dest,$email_dests);
}
/**
* Envoyer un message par la messagerie interne
*
* @param string $objet
* @param string $texte
* @param array $auteurs_dest
* @param bool $type
* @return int
*/
function messagerie_messager($objet, $texte, $auteurs_dest=array(),$type = ''){
$type = substr($type,0,6);
if (!in_array($type,array('normal','genera','pb','affich')))
$type = 'normal';
$out = false;
if (count($auteurs_dest) OR $general){
// envoyons le message
$id_message = sql_insertq('spip_messages',array(
'titre' => safehtml($objet),
'texte' => safehtml($texte),
'type' => $type,
'date_heure' => 'NOW()',
'date_fin' => 'NOW()',
'rv' => 'non',
'statut' => 'publie',
'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'],
));
if ($id_message) {
$insert = array();
if (!$general) {
foreach($auteurs_dest as $id)
$insert[] = array('id_objet'=>$id_message,'objet'=>'message','id_auteur'=>$id,'vu'=>'non');
}
else {
$res = sql_select('id_auteur','spip_auteurs');
while ($row = sql_fetch($res))
$insert[] = array('id_objet'=>$id_message,'objet'=>'message','id_auteur'=>$row['id_auteur'],'vu'=>'non');
}
sql_insertq_multi('spip_auteurs_liens',$insert);
$out = $id_message;
}
}
return $out;
}
/**
* Envoyer un message par mail
*
* @param string $objet
* @param string $texte
* @param array $emails_dest
* @return bool
*/
function messagerie_mailer($objet, $texte, $emails_dest=array()){
if (count($emails_dest)) {
$from = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
$envoyer_mail = charger_fonction('envoyer_mail','inc');
foreach($emails_dest as $email)
$envoyer_mail($email,$objet,$texte,$from);
return true;
}
return false;
}
/**
* Marquer un message comme lu
*
* @param int $id_auteur
* @param array $liste
*/
function messagerie_marquer_lus($id_auteur,$liste){
$liste = array_map('intval',$liste);
sql_updateq('spip_auteurs_liens',array('vu'=>'oui'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
include_spip('inc/invalideur');
suivre_invalideur("message/".implode(',',$liste));
}
/**
* Marquer un message comme non lu
*
* @param int $id_auteur
* @param array $liste
*/
function messagerie_marquer_non_lus($id_auteur,$liste){
$liste = array_map('intval',$liste);
sql_updateq('spip_auteurs_liens',array('vu'=>'non'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
include_spip('inc/invalideur');
suivre_invalideur("message/".implode(',',$liste));
}
/**
* Effacer un message
*
* @param int $id_auteur
* @param array $liste
*/
function messagerie_effacer($id_auteur,$liste){
$liste = array_map('intval',$liste);
sql_updateq('spip_auteurs_liens',array('vu'=>'pou'),array('id_auteur='.intval($id_auteur),"objet='message'",sql_in('id_message',$liste)));
include_spip('inc/invalideur');
suivre_invalideur("message/".implode(',',$liste));
}
?>

16
lang/organiseur_fr.php

@ -11,8 +11,22 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cal_par_mois' => 'mois',
'cal_par_semaine' => 'semaine',
// I
'info_message_de' => 'De',
'info_type_message_rv' => 'Rendez-vous',
'info_type_message_affich' => 'Annonce',
'info_type_message_pb' => 'Pense-bête',
'info_type_message_normal' => 'Message',
'info_message_non_lu' => 'Nouveau message',
'info_1_message_nonlu' => '1 nouveau message',
'info_nb_messages_nonlus' => '@nb@ nouveaus messages',
// L
'loading' => 'Chargement...'
'loading' => 'Chargement...',
// T
'titre_boite_reception' => 'Boîte de reception',
'titre_boite_envoi' => 'Boîte d\'envoi',
);
?>

23
organiseur_fonctions.php

@ -22,8 +22,27 @@ function critere_MESSAGES_destinataire_dist($idb, &$boucles, $crit) {
$boucle->from_type['auteurs_liens'] = 'LEFT';
$boucle->where[] =
array("'OR'",
array("'='","'auteurs_liens.id_auteur'","sql_quote($_auteur)"),
array("'='","'".$boucle->id_table.".type'","sql_quote('affich')"),
array(
"'AND'",
array("'='","'auteurs_liens.id_auteur'","sql_quote($_auteur)"),
array("'!='","'auteurs_liens.vu'","'\'pou\''"),
),
array("'OR'",
array("'='","'".$boucle->id_table.".type'","sql_quote('affich')"),
array(
"'AND'",
array("'='","'".$boucle->id_table.".type'","sql_quote('pb')"),
array("'='","'".$boucle->id_table.".id_auteur'","sql_quote($_auteur)"),
)
)
);
}
function critere_MESSAGES_non_lu_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$boucle->where[] =
array("'OR'",
"'auteurs_liens.vu IS NULL'",
"sql_in('auteurs_liens.vu',array('pou','oui'),'NOT',\$connect)"
);
}

2
plugin.xml

@ -16,7 +16,7 @@
<titre>Agenda interne</titre>
</bouton>
<bouton id='messagerie' parent="outils_collaboratifs">
<icone>images/message-16.png</icone>
<icone>images/messagerie-16.png</icone>
<titre>info_messagerie_interne</titre>
</bouton>

57
prive/objets/liste/messages-recus.html

@ -0,0 +1,57 @@
[(#SET{defaut_tri,#ARRAY{
date_heure,#ENV{date_sens,-1},
titre,1,
id_article,1
}})
]#SET{icone_type,#ARRAY{pb,pensebete-16.png,affich,annonce-16.png}}
<BOUCLE_compte_non_lus(MESSAGES auteurs){destinataire #ENV{id_auteur}}{type!=pb}{type?}{where?}{statut?}{recherche?}{non_lu}>[(#NOM|vide)]</BOUCLE_compte_non_lus>
#SET{nonlus,#TOTAL_BOUCLE}
<//B_compte_non_lus>
<B_mess_rec>
#ANCRE_PAGINATION
<div class="liste-objets messages">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GET{nonlus}|singulier_ou_pluriel{organiseur:info_1_message_nonlu,organiseur:info_nb_messages_nonlus}
|sinon{#GRAND_TOTAL|singulier_ou_pluriel{info_1_message,info_nb_messages}}
})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='new'></th>
<th class='type'>[(#TRI{type,<span title="<:organiseur:lien_trier_type|attribut_html:>">#</span>,ajax})]</th>
<th class='isrv'>[(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})]</th>
<th class='from'>[(#TRI{nom,<:organiseur:info_message_de:>,ajax})]</th>
<th class='titre principale'>[(#TRI{titre,<:info_titre:>,ajax})]</th>
<th class='date secondaire'>[(#TRI{date_heure,<:date:>,ajax})]</th>
<th class=''></th>
</tr>
</thead>
<tbody>
<BOUCLE_mess_rec(MESSAGES auteurs){destinataire #ENV{id_auteur}}{type?}{where?}{statut?}{recherche?}{tri #ENV{par,date_heure},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
[(#SET{vu,[(#TYPE|=={pb}|ou{#VU|match{^(oui|pou)$}})]})]
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][(#GET{vu}|non)new]">
<td class='new'>[(#GET{vu}|?{'',#CHEMIN_IMAGE{pictonew-16.png}|balise_img{<:organiseur:info_message_non_lu:>}})]</td>
<td class='type'>[(#CHEMIN_IMAGE{#GET{icone_type}|table_valeur{#TYPE}|sinon{message-16.png}}|balise_img{#VAL{organiseur:info_type_message_}|concat{#TYPE}|_T})]</td>
<td class='isrv'>[(#RV|=={oui}|oui)[(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})]]</td>
<td class="from"><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></td>
<td class='titre principale'>
<a
href="[(#ID_MESSAGE|generer_url_entite{message})]">#TITRE</a>
</td>
<td class='date secondaire'>
[(#RV|=={oui}|?{
[(#DATE_HEURE|affdate_debut_fin{#DATE_FIN,oui,abbr})]
,
[(#DATE_HEURE|affdate_jourcourt)]
})]
</td>
<td class=''></td>
</tr>
</BOUCLE_mess_rec>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_mess_rec>[
<div class="liste-objets messages"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_mess_rec>

8
prive/squelettes/contenu/messages.html

@ -0,0 +1,8 @@
<h1 class="grostitre"><:info_messagerie_interne:></h1>
<div class='onglets_simple clearfix'>
<ul>
<li>[(#URL_ECRIRE{messages,quoi=reception}|lien_ou_expose{<:organiseur:titre_boite_reception:>,#ENV{quoi,reception}|=={reception},ajax})]</li>
<li>[(#URL_ECRIRE{messages,quoi=envoi}|lien_ou_expose{<:organiseur:titre_boite_envoi:>,#ENV{quoi,reception}|=={envoi},ajax})]</li>
</ul>
</div>
<INCLURE{fond=prive/squelettes/inclure/organiseur-#ENV{quoi,reception},id_auteur=#SESSION{id_auteur},ajax} />

0
prive/squelettes/inclure/organiseur-envoi.html

1
prive/squelettes/inclure/organiseur-reception.html

@ -0,0 +1 @@
<INCLURE{fond=prive/objets/liste/messages-recus,id_auteur=#ENV{id_auteur}, ajax} />

3
prive/squelettes/navigation/messages.html

@ -0,0 +1,3 @@
#BOITE_OUVRIR{'',info}
<:info_gauche_messagerie:>
#BOITE_FERMER

7
prive/style_prive_plugin_organiseur.html

@ -30,4 +30,9 @@
.message_edit .box {margin:20px 0;}
.item.message .rv {color:#666;font-size:0.9em;padding-#GET{left}:20px;background:url(#CHEMIN_IMAGE{heure-16.png}) no-repeat [(#GET{left}) ]top;}
.item.message .rv.on {color:#000;background-image:url(#CHEMIN_IMAGE{heure-on-16.png});}
.item.message .rv.on {color:#000;background-image:url(#CHEMIN_IMAGE{heure-on-16.png});}
.liste-objets.messages tr > .new,
.liste-objets.messages tr > .type,
.liste-objets.messages tr > .isrv {width: 16px; padding-left:2px;padding-right:2px;text-align:center;}
.liste-objets.messages tr.new td {font-weight: bold;}

BIN
prive/themes/spip/images/message-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

After

Width:  |  Height:  |  Size: 781 B

BIN
prive/themes/spip/images/message-add-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 B

BIN
prive/themes/spip/images/message-del-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 B

BIN
prive/themes/spip/images/message-edit-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

BIN
prive/themes/spip/images/message-new-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 B

BIN
prive/themes/spip/images/pictonew-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Loading…
Cancel
Save