Browse Source

Extension organiseur qui regroupe agenda et messagerie du core, a completer

svn/root/tags/plugins/organiseur/0.1.0 v0.1.0
cedric@yterium.com 12 years ago
parent
commit
bfe60da8a2
  1. 54
      .gitattributes
  2. 202
      action/editer_message.php
  3. 62
      base/organiseur.php
  4. 115
      base/organiseur_upgrade.php
  5. 67
      exec/calendrier.php
  6. 38
      exec/menu_agenda.php
  7. 371
      exec/message.php
  8. 179
      exec/message_edit.php
  9. 123
      exec/messagerie.php
  10. 99
      filtres/agenda.php
  11. 31
      formulaires/configurer_messagerie_agenda.html
  12. 36
      formulaires/configurer_messagerie_agenda.php
  13. 1565
      inc/agenda.php
  14. 136
      inc/message_select.php
  15. 19
      organiseur_autoriser.php
  16. 170
      organiseur_pipelines.php
  17. 64
      plugin.xml
  18. 48
      prive/rss/messagerie.html
  19. 3
      prive/squelettes/inclure/configurer_messagerie.html
  20. BIN
      prive/themes/spip/images/agenda-16.png
  21. BIN
      prive/themes/spip/images/agenda-24.png
  22. BIN
      prive/themes/spip/images/annonce-16.png
  23. BIN
      prive/themes/spip/images/annonce-24.png
  24. BIN
      prive/themes/spip/images/annonce-add-16.png
  25. BIN
      prive/themes/spip/images/annonce-add-24.png
  26. BIN
      prive/themes/spip/images/annonce-del-16.png
  27. BIN
      prive/themes/spip/images/annonce-del-24.png
  28. BIN
      prive/themes/spip/images/annonce-edit-16.png
  29. BIN
      prive/themes/spip/images/annonce-edit-24.png
  30. BIN
      prive/themes/spip/images/annonce-new-16.png
  31. BIN
      prive/themes/spip/images/annonce-new-24.png
  32. BIN
      prive/themes/spip/images/calendrier-16.png
  33. BIN
      prive/themes/spip/images/calendrier-24.png
  34. BIN
      prive/themes/spip/images/calendrier-add-16.png
  35. BIN
      prive/themes/spip/images/calendrier-add-24.png
  36. BIN
      prive/themes/spip/images/calendrier-del-16.png
  37. BIN
      prive/themes/spip/images/calendrier-del-24.png
  38. BIN
      prive/themes/spip/images/calendrier-edit-16.png
  39. BIN
      prive/themes/spip/images/calendrier-edit-24.png
  40. BIN
      prive/themes/spip/images/calendrier-new-16.png
  41. BIN
      prive/themes/spip/images/calendrier-new-24.png
  42. BIN
      prive/themes/spip/images/message-16.png
  43. BIN
      prive/themes/spip/images/message-24.png
  44. BIN
      prive/themes/spip/images/message-add-16.png
  45. BIN
      prive/themes/spip/images/message-add-24.png
  46. BIN
      prive/themes/spip/images/message-del-16.png
  47. BIN
      prive/themes/spip/images/message-del-24.png
  48. BIN
      prive/themes/spip/images/message-edit-16.png
  49. BIN
      prive/themes/spip/images/message-edit-24.png
  50. BIN
      prive/themes/spip/images/message-envoyer-16.png
  51. BIN
      prive/themes/spip/images/message-envoyer-24.png
  52. BIN
      prive/themes/spip/images/message-new-16.png
  53. BIN
      prive/themes/spip/images/message-new-24.png
  54. BIN
      prive/themes/spip/images/messagerie-16.png
  55. BIN
      prive/themes/spip/images/messagerie-24.png

54
.gitattributes vendored

@ -1 +1,55 @@
* text=auto !eol
action/editer_message.php -text
base/organiseur.php -text
base/organiseur_upgrade.php -text
exec/calendrier.php -text
exec/menu_agenda.php -text
exec/message.php -text
exec/message_edit.php -text
exec/messagerie.php -text
filtres/agenda.php -text
formulaires/configurer_messagerie_agenda.html -text
formulaires/configurer_messagerie_agenda.php -text
inc/agenda.php -text
inc/message_select.php -text
/organiseur_autoriser.php -text
/organiseur_pipelines.php -text
/plugin.xml -text
prive/rss/messagerie.html -text
prive/squelettes/inclure/configurer_messagerie.html -text
prive/themes/spip/images/agenda-16.png -text
prive/themes/spip/images/agenda-24.png -text
prive/themes/spip/images/annonce-16.png -text
prive/themes/spip/images/annonce-24.png -text
prive/themes/spip/images/annonce-add-16.png -text
prive/themes/spip/images/annonce-add-24.png -text
prive/themes/spip/images/annonce-del-16.png -text
prive/themes/spip/images/annonce-del-24.png -text
prive/themes/spip/images/annonce-edit-16.png -text
prive/themes/spip/images/annonce-edit-24.png -text
prive/themes/spip/images/annonce-new-16.png -text
prive/themes/spip/images/annonce-new-24.png -text
prive/themes/spip/images/calendrier-16.png -text
prive/themes/spip/images/calendrier-24.png -text
prive/themes/spip/images/calendrier-add-16.png -text
prive/themes/spip/images/calendrier-add-24.png -text
prive/themes/spip/images/calendrier-del-16.png -text
prive/themes/spip/images/calendrier-del-24.png -text
prive/themes/spip/images/calendrier-edit-16.png -text
prive/themes/spip/images/calendrier-edit-24.png -text
prive/themes/spip/images/calendrier-new-16.png -text
prive/themes/spip/images/calendrier-new-24.png -text
prive/themes/spip/images/message-16.png -text
prive/themes/spip/images/message-24.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-del-16.png -text
prive/themes/spip/images/message-del-24.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-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/messagerie-16.png -text
prive/themes/spip/images/messagerie-24.png -text

202
action/editer_message.php

@ -0,0 +1,202 @@
<?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');
// http://doc.spip.org/@action_editer_message_dist
function action_editer_message_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
if (preg_match(',^(\d+)$,', $arg, $r))
action_editer_message_post_vieux($arg);
elseif (preg_match(',^-(\d+)$,', $arg, $r))
action_editer_message_post_supprimer($r[1]);
elseif (preg_match(',^(\d+)\W$,', $arg, $r))
action_editer_message_post_choisir($r[1]);
elseif (preg_match(',^(\d+)\W@(\d+)$,', $arg, $r))
action_editer_message_post_ajouter($r[1], $r[2]);
elseif (preg_match(',^(\d+)\W:(\d+)$,', $arg, $r))
action_editer_message_post_vu($r[1], $r[2]);
elseif (preg_match(',^(\d+)\W-(\d+)$,', $arg, $r))
action_editer_message_post_retirer($r[1], $r[2]);
elseif (preg_match(',^(\d+)\W(\w+)$,', $arg, $r))
action_editer_message_post_envoyer($r[1], $r[2]);
elseif (preg_match(',^(\w+)$,', $arg, $r))
action_editer_message_post_nouveau($arg);
elseif (preg_match(',^(\w+)\W(\d+)$,', $arg, $r))
action_editer_message_post_nouveau($r[1], $r[2]);
elseif (preg_match(',^(\w+)\W(\d+-\d+-\d+)$,', $arg, $r))
action_editer_message_post_nouveau($r[1], '', $r[2]);
else spip_log("action_editer_message_dist $arg pas compris");
}
// http://doc.spip.org/@action_editer_message_post_supprimer
function action_editer_message_post_supprimer($id_message) {
sql_delete("spip_messages", "id_message=".sql_quote($id_message));
include_spip('action/editer_auteur');
auteur_dissocier('*', array('message'=>$id_message));
}
// http://doc.spip.org/@action_editer_message_post_vu
function action_editer_message_post_vu($id_message, $id_auteur) {
include_spip('action/editer_auteur');
auteur_qualifier($id_auteur,array('message'=>$id_message),array("vu" => 'oui'));
}
// http://doc.spip.org/@action_editer_message_post_retirer
function action_editer_message_post_retirer($id_message, $id_auteur) {
include_spip('action/editer_auteur');
auteur_dissocier($id_auteur, array('message'=>$id_message));
}
// http://doc.spip.org/@action_editer_message_post_ajouter
function action_editer_message_post_ajouter($id_message, $id_auteur) {
include_spip('action/editer_auteur');
auteur_associer($id_auteur, array('message'=>$id_message),array('vu'=>'non'));
// Ne pas notifier ici, car si on se trompe d'auteur, on veut avoir le temps
// de supprimer celui qu'on vient d'ajouter... c'est fait en cron
}
// http://doc.spip.org/@action_editer_message_post_choisir
function action_editer_message_post_choisir($id_message) {
if ($id_auteur = _request('nouv_auteur'))
action_editer_message_post_ajouter($id_message, $id_auteur);
else {
include_spip('inc/ressembler');
include_spip('inc/charsets'); // pour tranlitteration
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
$cherche_auteur= _request('cherche_auteur');
$query = sql_select("id_auteur, nom", "spip_auteurs", "messagerie<>'non' AND id_auteur<>'$id_auteur' AND pass<>'' AND login<>''");
$table_auteurs = array();
$table_ids = array();
while ($row = sql_fetch($query)) {
$table_auteurs[] = $row['nom'];
$table_ids[] = $row['id_auteur'];
}
$res = mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
$n = count($res);
if ($n == 1)
# Bingo
action_editer_message_post_ajouter($id_message, $res[0]);
# renvoyer la valeur ==> formulaire de choix si n !=1
# notification que $res[0] a ete rajoute sinon
redirige_par_entete(parametre_url(urldecode(_request('redirect')),
'cherche_auteur', $cherche_auteur, '&'));
}
}
// http://doc.spip.org/@action_editer_message_post_envoyer
function action_editer_message_post_envoyer($id_message, $statut) {
sql_updateq("spip_messages", array("statut" => $statut), "id_message=$id_message");
sql_updateq("spip_messages", array("date_heure" => date('Y-m-d H:i:s')), "id_message=$id_message AND rv<>'oui'");
}
// http://doc.spip.org/@action_editer_message_post_nouveau
function action_editer_message_post_nouveau($type, $dest='', $rv='')
{
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
$mydate = date("YmdHis", time() - 2 * 24 * 3600);
sql_delete("spip_messages", "(statut = 'redac') AND (date_heure < $mydate)");
if ($type == 'pb') $statut = 'publie';
else $statut = 'redac';
$titre = filtrer_entites(_T('texte_nouveau_message'));
$vals = array('titre' => $titre,
'statut' => $statut,
'type' => $type,
'id_auteur' => $id_auteur);
if (!$rv)
$vals['date_heure'] = date('Y-m-d H:i:s');
else {
$vals['date_heure'] = "$rv 12:00:00";
$vals['date_fin'] = "$rv 13:00:00";
$vals['rv'] = 'oui';
}
$id_message = sql_insertq("spip_messages", $vals);
include_spip('action/editer_auteur');
if ($type != "affich"){
auteur_associer($id_auteur, array('message'=>$id_message),array('vu'=>'oui'));
if ($dest)
auteur_associer($dest, array('message'=>$id_message),array('vu'=>'non'));
}
redirige_url_ecrire('message_edit', "id_message=$id_message&new=oui&dest=$dest");
}
// http://doc.spip.org/@action_editer_message_post_vieux
function action_editer_message_post_vieux($id_message)
{
sql_updateq('spip_messages', array('titre'=>_request('titre'), 'texte' => _request('texte')), "id_message=$id_message");
sql_updateq('spip_messages', array('rv' => _request('rv')), "id_message=$id_message");
if (_request('jour'))
change_date_message($id_message, _request('heures'),_request('minutes'),_request('mois'), _request('jour'), _request('annee'), _request('heures_fin'),_request('minutes_fin'),_request('mois_fin'), _request('jour_fin'), _request('annee_fin'));
}
// Convertir dates a calendrier correct
// (exemple: 31 fevrier devient debut mars, 24h12 devient 00h12 du lendemain)
// http://doc.spip.org/@change_date_message
function change_date_message($id_message, $heures,$minutes,$mois, $jour, $annee, $heures_fin,$minutes_fin,$mois_fin, $jour_fin, $annee_fin)
{
$date = date("Y-m-d H:i:s", mktime($heures,$minutes,0,$mois, $jour, $annee));
$jour = journum($date);
$mois = mois($date);
$annee = annee($date);
$heures = heures($date);
$minutes = minutes($date);
// Verifier que la date de fin est bien posterieure au debut
$unix_debut = date("U", mktime($heures,$minutes,0,$mois, $jour, $annee));
$unix_fin = date("U", mktime($heures_fin,$minutes_fin,0,$mois_fin, $jour_fin, $annee_fin));
if ($unix_fin <= $unix_debut) {
$jour_fin = $jour;
$mois_fin = $mois;
$annee_fin = $annee;
$heures_fin = $heures + 1;
$minutes_fin = $minutes;
}
$date_fin = date("Y-m-d H:i:s", mktime($heures_fin,$minutes_fin,0,$mois_fin, $jour_fin, $annee_fin));
$jour_fin = journum($date_fin);
$mois_fin = mois($date_fin);
$annee_fin = annee($date_fin);
$heures_fin = heures($date_fin);
$minutes_fin = minutes($date_fin);
sql_updateq('spip_messages', array('date_heure'=>"$annee-$mois-$jour $heures:$minutes:00", 'date_fin'=>"$annee_fin-$mois_fin-$jour_fin $heures_fin:$minutes_fin:00"), "id_message=$id_message");
}
?>

62
base/organiseur.php

@ -0,0 +1,62 @@
<?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;
/**
* Interfaces des tables agenda et messagerie
*
* @param array $interfaces
* @return array
*/
function organiseur_declarer_tables_interfaces($interfaces){
$interfaces['table_des_tables']['messages']='messages';
$interfaces['table_titre']['messages']= "titre, '' AS lang";
$interfaces['table_date']['messages'] = 'date_heure';
return $interfaces;
}
/**
* Table principale messagerie
*
* @param array $tables_principales
* @return array
*/
function organiseur_declarer_tables_principales($tables_principales){
$spip_messages = array(
"id_message" => "bigint(21) NOT NULL",
"titre" => "text DEFAULT '' NOT NULL",
"texte" => "longtext DEFAULT '' NOT NULL",
"type" => "varchar(6) DEFAULT '' NOT NULL",
"date_heure" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"date_fin" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"rv" => "varchar(3) DEFAULT '' NOT NULL",
"statut" => "varchar(6) DEFAULT '0' NOT NULL",
"id_auteur" => "bigint(21) NOT NULL",
"maj" => "TIMESTAMP");
$spip_messages_key = array(
"PRIMARY KEY" => "id_message",
"KEY id_auteur" => "id_auteur");
$tables_principales['spip_messages'] =
array('field' => &$spip_messages, 'key' => &$spip_messages_key);
$tables_principales['spip_auteurs']["field"]["imessage"] = "VARCHAR(3)";
$tables_principales['spip_auteurs']["field"]["messagerie"] = "VARCHAR(3)";
return $tables_principales;
}
?>

115
base/organiseur_upgrade.php

@ -0,0 +1,115 @@
<?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;
/**
* Installation/maj des tables messagerie
*
* @param string $nom_meta_base_version
* @param string $version_cible
*/
function organiseur_upgrade($nom_meta_base_version,$version_cible){
$current_version = 0.0;
if ( (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
|| (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
if ($current_version==0.0){
include_spip('base/create');
// creer les tables
creer_base();
sql_alter('TABLE spip_auteurs ADD imessage VARCHAR(3)');
sql_alter('TABLE spip_auteurs ADD messagerie VARCHAR(3)');
// mettre les metas par defaut
$config = charger_fonction('config','inc');
$config();
ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
}
}
}
/**
* Desinstallation/suppression des tables mots et groupes de mots
*
* @param string $nom_meta_base_version
*/
function organiseur_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_messages");
sql_alter("TABLE spip_auteurs DROP imessage");
sql_alter("TABLE spip_auteurs DROP messagerie");
effacer_meta('messagerie_agenda');
effacer_meta($nom_meta_base_version);
}
/**
* Reunir en une seule table les liens de mots dans spip_mots_liens
* Passe spip_mots_xx(id_mot, id_xx) dans spip_mots_liens(objet, id_objet, id_mot)
* (peut fonctionner pour d'autres table spip_xx_liens).
*
* @param array $objets : liste d'objets à transférer.
* @param string $destination : table de destination (se terminant par _liens).
* @param bool $supprimer_ancienne_table : supprimer l'ancienne table une fois la copie réalisée ?.
* @return
**/
function organiseur_maj_tables_liaisons ($objets, $destination='spip_mots_liens', $supprimer_ancienne_table = true) {
// creer la table spip_mots_liens manquante
include_spip('base/create');
creer_base();
$trouver_table = charger_fonction('trouver_table','base');
// Recopier les donnees
foreach ($objets as $objet) {
$table_objet = table_objet($objet);
if ($table_objet == 'forums') $table_objet = 'forum'; // #naze #bug #forum
$_id_objet = id_table_objet($objet);
$source = substr($destination, 0, -5) . $table_objet; // spip_mots_xx
spip_log("Transfert SQL de : '$source' vers '$destination'");
if (!$trouver_table($source)) continue; // la source n'existe pas... ne rien tenter...
if ($s = sql_select('*', $source)) {
$tampon = array();
while ($t = sql_fetch($s)) {
// transformer id_xx=N en (id_objet=N, objet=xx)
$t['id_objet'] = $t[$_id_objet];
$t['objet'] = $objet;
unset($t[$_id_objet]);
unset($t['maj']);
$tampon[] = $t;
if (count($tampon)>10000) {
sql_insertq_multi($destination, $tampon);
$tampon = array();
}
}
if (count($tampon)) {
sql_insertq_multi($destination, $tampon);
}
if ($supprimer_ancienne_table) {
sql_drop_table($source);
}
}
}
}
?>

67
exec/calendrier.php

@ -0,0 +1,67 @@
<?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/presentation');
include_spip('inc/agenda');
// http://doc.spip.org/@exec_calendrier_dist
function exec_calendrier_dist()
{
if ($date = _request('date')){
$time = explode('-', $date);
if (count($time) <= 2) $time[]=1;
if (count($time) <= 2) $time[]=1;
$time = array_reverse($time);
} else {
$time = array(_request('jour'), _request('mois'), _request('annee'));
if ($time[1] AND $time[0] AND $time[2])
$date = mktime(1,1,1, $time[1], $time[0], $time[2]);
else $date = date("Y-m-d", $timem = time());
}
$type = _request('type');
if ($type == 'semaine') {
$GLOBALS['afficher_bandeau_calendrier_semaine'] = true;
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
}
elseif ($type == 'jour') {
$titre = nom_jour($date)." ". affdate_jourcourt($date);
} else {
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
$type = 'mois';
}
$ancre = 'calendrier-1';
$r = generer_url_ecrire('calendrier', "type=$type") . "#$ancre";
$r = http_calendrier_init($time, $type, _request('echelle'), _request('partie_cal'), $r);
if (_AJAX) {
ajax_retour($r);
} else {
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page($titre, "accueil", "calendrier");
// ne produit rien par defaut, mais est utilisee par le plugin agenda
echo barre_onglets("calendrier", "calendrier");
echo debut_grand_cadre(true);
echo "\n<div>&nbsp;</div>\n<div id='", $ancre, "'>",$r,'</div>';
echo fin_grand_cadre(true);
echo fin_page();
}
}
?>

38
exec/menu_agenda.php

@ -0,0 +1,38 @@
<?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/presentation');
include_spip('inc/agenda');
// http://doc.spip.org/@exec_menu_agenda_dist
function exec_menu_agenda_dist() {
list($evtm, $evtt, $evtr) = http_calendrier_messages(date("Y"), date("m"), date("d"));
$ret = "<table><tr>"
. "<td style='width: 200px; vertical-align: top;' >"
. "<div>"
. $evtm
. "</div>"
. "</td>"
. (!$evtt ? '' :
( "<td style='width: 10px; vertical-align: top'> &nbsp; </td>"
. "<td style='width: 200px; color: black; vertical-align: top'>"
. "<div>&nbsp;</div>$evtt</td>"))
. "</tr></table>";
ajax_retour($ret);
}
?>

371
exec/message.php

@ -0,0 +1,371 @@
<?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/presentation');
include_spip('inc/ressembler'); // mots_ressemblants()
include_spip('inc/agenda');
// http://doc.spip.org/@exec_message_dist
function exec_message_dist()
{
exec_message_args(intval(_request('id_message')),_request('forcer_dest'), _request('cherche_auteur'));
}
// http://doc.spip.org/@exec_message_args
function exec_message_args($id_message, $forcer_dest, $cherche_auteur)
{
global $connect_id_auteur;
$res = sql_getfetsel("type", "spip_messages", "id_message=$id_message");
if ($res AND $res != "affich")
$res = sql_fetsel("vu", "spip_auteurs_liens", "id_auteur=$connect_id_auteur AND objet='message' AND id_objet=$id_message");
if (!$res) {
include_spip('inc/minipres');
echo minipres();
} else {
// Marquer le message vu pour le visiteur
if (is_array($res) AND $res['vu'] != 'oui') {
include_spip('inc/headers');
redirige_par_entete(redirige_action_auteur("editer_message","$id_message/:$connect_id_auteur", 'message', "id_message=$id_message", true));
}
exec_affiche_message_dist($id_message, $cherche_auteur, $forcer_dest);
}
}
// http://doc.spip.org/@http_afficher_rendez_vous
function http_afficher_rendez_vous($date_heure, $date_fin)
{
global $spip_lang_rtl;
$dirpuce = _DIR_RACINE . 'dist';
if (jour($date_heure) == jour($date_fin) AND mois($date_heure) == mois($date_fin) AND annee($date_heure) == annee($date_fin)) {
echo "<p class='verdana2' style='text-align: center'>"._T('titre_rendez_vous')." ".majuscules(nom_jour($date_heure))." <b>".majuscules(affdate($date_heure))."</b><br />\n<b>".heures($date_heure)." "._T('date_mot_heures')." ".minutes($date_heure)."</b>";
echo " &nbsp; <img src='$dirpuce/puce$spip_lang_rtl.gif' alt=' ' style='border: 0px;' /> &nbsp; ".heures($date_fin)." "._T('date_mot_heures')." ".minutes($date_fin)."</p>";
} else {
echo "<p class='verdana2' style='text-align: center'>"._T('titre_rendez_vous')."<br />\n".majuscules(nom_jour($date_heure))." <b>".majuscules(affdate($date_heure))."</b>, <b>".heures($date_heure)." "._T('date_mot_heures')." ".minutes($date_heure)."</b>";
echo "<br />\n<img src='$dirpuce/puce$spip_lang_rtl.gif' alt=' ' style='border: 0px;' /> ".majuscules(nom_jour($date_fin))." ".majuscules(affdate($date_fin)).", <b>".heures($date_fin)." "._T('date_mot_heures')." ".minutes($date_fin)."</b></p>";
}
}
// http://doc.spip.org/@http_auteurs_ressemblants
function http_auteurs_ressemblants($cherche_auteur, $id_message)
{
$cherche_auteur = htmlspecialchars($cherche_auteur);
global $connect_id_auteur;
$query = sql_select("id_auteur, nom", "spip_auteurs", "messagerie<>'non' AND id_auteur<>'$connect_id_auteur' AND pass<>'' AND login<>''");
$table_auteurs = array();
$table_ids = array();
while ($row = sql_fetch($query)) {
$table_auteurs[] = $row['nom'];
$table_ids[] = $row['id_auteur'];
}
$resultat = mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
if (!$resultat) {
return '<b>' . _T('info_recherche_auteur_zero', array('cherche_auteur' => $cherche_auteur))."</b><br />";
}
else if (count($resultat) == 1) {
// action/editer_message a du prendre en compte ce cas
list(, $nouv_auteur) = each($resultat);
$nom_auteur = sql_getfetsel("nom", "spip_auteurs", "id_auteur=$nouv_auteur");
return "<b>"._T('info_ajout_participant')."</b><br />" .
"<ul><li><span class='verdana1 spip_small'><b><span class='spip_medium'>$nom_auteur</span></b></span></li>\n</ul>";
}
else if (count($resultat) < 16) {
$res = '';
$query = sql_select("*", "spip_auteurs", "id_auteur IN (" . join(',', $resultat) . ")", "", "nom");
while ($row = sql_fetch($query)) {
$id_auteur = $row['id_auteur'];
$nom_auteur = $row['nom'];
$email_auteur = $row['email'];
$bio_auteur = $row['bio'];
$res .= "\n<li><span class='spip_medium verdana1'><b>$nom_auteur</b></span>" .
($email_auteur ? " ($email_auteur)" : '') .
"\n <a href='" . redirige_action_auteur("editer_message","$id_message/@$id_auteur", 'message', "id_message=$id_message")
. "'>"
. _T('lien_ajout_destinataire').
"</a>" .
(!trim($bio_auteur) ? '' :
("<br />\n<span class='spip_x-small'>".propre(couper($bio_auteur, 100))."</span>\n")) .
"</li>\n";
}
return "<b>"._T('info_recherche_auteur_ok', array('cherche_auteur' => $cherche_auteur))."</b><br />" .($res ? "<ul>$res</ul>" : '');
}
else {
return "<b>"._T('info_recherche_auteur_a_affiner', array('cherche_auteur' => $cherche_auteur))."</b><br />";
}
}
// http://doc.spip.org/@http_ajouter_participants
function http_ajouter_participants($ze_auteurs, $id_message)
{
include_spip('inc/editer_auteurs');
$cond = auteurs_autorises($ze_auteurs, "messagerie<>'non'");
$all = objet_auteur_select($cond);
if (!$all) return '';
$res = "<span class='verdana1 spip_small'><b><label for='id_message'>" .
_T('bouton_ajouter_participant') ."</label> &nbsp; </b></span>\n" .
"<input type='hidden' name='id_message' id='id_message' value=\"$id_message\" />";
if (is_numeric($all)) {
$res .= "\n<input type='text' name='cherche_auteur' id='cherche_auteur' class='fondl' value='' size='20' />";
$res .= "\n<input type='submit' value='"._T('bouton_chercher')."' class='fondo' />";
} else {
$res .= "<select name='nouv_auteur' id='nouv_auteur' size='1' style='width: 150px' class='fondl'>"
. $all
. "</select>"
. "<input type='submit' value='"._T('bouton_ajouter')."' class='fondo' />";
}
return redirige_action_post('editer_message', "$id_message,", 'message', "id_message=$id_message", "<div style='text-align: left'>\n$res</div>\n");
}
// http://doc.spip.org/@http_message_avec_participants
function http_message_avec_participants($id_message, $statut, $forcer_dest, $cherche_auteur, $expediteur='')
{
global $connect_id_auteur ;
if ($cherche_auteur) {
echo "\n<div style='text-align: left' class='cadre-info'>"
. http_auteurs_ressemblants($cherche_auteur , $id_message)
. "\n</div>";
}
$bouton = bouton_block_depliable(_T('info_nombre_partcipants'),true,"auteurs,ajouter_auteur");
echo debut_cadre_enfonce("auteur-24.png", true, '', $bouton, 'participants');
//
// Liste des participants
//
$result = sql_allfetsel("A.*", "spip_auteurs AS A, spip_auteurs_liens AS L", "L.objet='message' AND L.id_objet=$id_message AND L.id_auteur=A.id_auteur");
$total_dest = count($result);
if ($total_dest > 0) {
$ifond = 0;
$res = '';
$formater_auteur = charger_fonction('formater_auteur', 'inc');
$t = _T('lien_retrait_particpant');
foreach($result as $k => $row) {
$id_auteur = $row["id_auteur"];
list($status, $mail, $nom, $site,) = $formater_auteur($id_auteur, $row);
if ($id_auteur == $expediteur) {
$nom = "<span class='arial0' style='margin-left: 10px'>"
. _T('info_auteur_message')
. "</span> $nom";
}
$class = alterner (++$ifond,'row_even','row_odd');
$res .= "<tr class='$class'>\n<td class='nom'>$status $mail $nom $site$exp</td>"
. "\n<td align='right' class='lien'>"
. (($id_auteur == $connect_id_auteur) ? "&nbsp;" : ("[<a href='" . redirige_action_auteur("editer_message","$id_message/-$id_auteur", 'message', "id_message=$id_message") . "'>$t</a>]")) . "</td></tr>\n";
$result[$k] = $id_auteur;
}
echo
debut_block_depliable(true,"auteurs"),
"\n<table class='spip' width='100%'>",
$res,
"</table>\n",
fin_block();
}
if ($statut == 'redac' OR $forcer_dest)
echo http_ajouter_participants($result, $id_message);
else {
echo
debut_block_depliable(true,"ajouter_auteur"),
"<br />\n<div style='text-align: right' class='verdana1 spip_small'><a href='" . generer_url_ecrire("message","id_message=$id_message&forcer_dest=oui") . "'>"._T('lien_ajouter_participant')."</a></div>",
fin_block();
}
echo fin_cadre_enfonce(true);
return $total_dest;
}
// http://doc.spip.org/@http_affiche_message
function http_affiche_message($id_message, $expediteur, $statut, $type, $texte, $titre, $rv, $date_heure, $date_fin, $cherche_auteur, $forcer_dest)
{
global $connect_id_auteur,$connect_statut, $les_notes;
if ($type == 'normal') {
$le_type = _T('info_message_2').aide ("messut");
$la_couleur = "#02531b";
$fond = "#cffede";
}
else if ($type == 'pb') {
$le_type = _T('info_pense_bete').aide ("messpense");
$la_couleur = "#3874b0";
$fond = "#edf3fe";
}
else if ($type == 'affich') {
$le_type = _T('info_annonce');
$la_couleur = "#ccaa00";
$fond = "#ffffee";
}
// affichage des caracteristiques du message
echo "<div style='border: 1px solid $la_couleur; background-color: $fond; padding: 5px;'>"; // debut cadre de couleur
//echo debut_cadre_relief("messagerie-24.png", true);
echo "\n<table width='100%' border='0'>";
echo "<tr><td>"; # uniques
echo "<span style='color: $la_couleur' class='verdana1 spip_small'><b>$le_type</b></span><br />";
echo "<span class='verdana1 spip_large'><b>$titre</b></span>";
if ($statut == 'redac') {
echo "<br /><span style='color: red;' class='verdana1 spip_small'><b>"._T('info_redaction_en_cours')."</b></span>";
}
else if ($rv == 'non') {
echo "<br /><span style='color: #666666;' class='verdana1 spip_small'><b>".nom_jour($date_heure).' '.affdate_heure($date_heure)."</b></span>";
}
//////////////////////////////////////////////////////
// Message avec participants
//
if ($type == 'normal')
$total_dest = http_message_avec_participants($id_message, $statut, $forcer_dest, $cherche_auteur, $expediteur);
if ($rv != "non") http_afficher_rendez_vous($date_heure, $date_fin);
//////////////////////////////////////////////////////
// Le message lui-meme
//
echo "\n<br />"
. "<div class='serif'>$texte</div>";
if ($les_notes) {
echo debut_cadre_relief('', true);
echo "<div dir=" . lang_dir() ."' class='arial11'>";
echo justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes);
echo "</div>";
echo fin_cadre_relief(true);
}
if ($expediteur == $connect_id_auteur AND $statut == 'redac') {
if ($type == 'normal' AND $total_dest < 2) {
echo "<p style='color: #666666; text-align: right;' class='verdana1 spip_small'><b>"._T('avis_destinataire_obligatoire')."</b></p>";
} else {
echo "\n<div class='centered'>";
echo icone_inline(_T('icone_envoyer_message'), redirige_action_auteur('editer_message', "$id_message/publie", "message","id_message=$id_message"), "messagerie-24.png", "new");
echo "</div>";
}
}
echo "</td></tr></table>\n";
// echo "</td></tr></table>\n"; //echo fin_cadre_relief(true);
echo "</div>"; // fin du cadre de couleur
// Les boutons
$aut = ($expediteur == $connect_id_auteur);
$aff = ($type == 'affich' AND $connect_statut == '0minirezo');
echo "\n<table width='100%'><tr><td>";
// bouton de suppression
if ($aut AND ($statut == 'redac' OR $type == 'pb') OR $aff) {
echo icone_inline(_T('icone_supprimer_message'), redirige_action_auteur("editer_message","-$id_message", 'messagerie'), "messagerie-24.png", "del", 'left');
}
// bouton retrait de la discussion
if ($statut == 'publie' AND $type == 'normal') {
echo icone_inline(_T('icone_arret_discussion'), redirige_action_auteur("editer_message","$id_message/-$connect_id_auteur", 'messagerie', "id_message=$id_message"), "messagerie-24.png", "del", 'left');
}
// bouton modifier ce message
if ($aut OR $aff) {
echo icone_inline(_T('icone_modifier_message'), (generer_url_ecrire("message_edit","id_message=$id_message")), "messagerie-24.png", "edit", 'right');
}
echo "</td></tr></table>";
}
// http://doc.spip.org/@exec_affiche_message_dist
function exec_affiche_message_dist($id_message, $cherche_auteur, $forcer_dest)
{
$row = sql_fetsel("*", "spip_messages", "id_message=$id_message");
if ($row) {
$id_message = $row['id_message'];
$date_heure = $row["date_heure"];
$date_fin = $row["date_fin"];
$titre = typo($row["titre"]);
$texte = propre($row["texte"]);
$type = $row["type"];
$statut = $row["statut"];
$rv = $row["rv"];
$expediteur = $row['id_auteur'];
$lejour=journum($row['date_heure']);
$lemois = mois($row['date_heure']);
$lannee = annee($row['date_heure']);
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page($titre, "accueil", "messagerie");
echo debut_gauche('', true);
if ($rv != 'non')
echo http_calendrier_agenda ($lannee, $lemois, $lejour, $lemois, $lannee,false, generer_url_ecrire('calendrier'));
echo "<br />";
echo http_calendrier_rv(quete_calendrier_taches_annonces(),"annonces");
echo http_calendrier_rv(quete_calendrier_taches_pb(),"pb");
echo http_calendrier_rv(quete_calendrier_taches_rv(), "rv");
if ($rv != "non") {
list ($sh, $ah) = quete_calendrier_interval(quete_calendrier_jour($lannee,$lemois, $lejour));
foreach ($ah as $k => $v)
{
foreach ($v as $l => $e)
{
if (preg_match(",=$id_message$,", $e['URL']))
{
$ah[$k][$l]['CATEGORIES'] = "calendrier-nb";
break;
}
}
}
echo creer_colonne_droite('', true);
echo http_calendrier_ics_titre($lannee,$lemois,$lejour,generer_url_ecrire('calendrier'));
echo http_calendrier_ics($lannee,$lemois, $lejour, '', '', 90, array($sh, $ah));
}
echo debut_droite('', true);
http_affiche_message($id_message, $expediteur, $statut, $type, $texte, $titre, $rv, $date_heure, $date_fin, $cherche_auteur, $forcer_dest);
// reponses et bouton poster message
// appel de la fonction discuter() de l'extension forum, si presente uniquement
// a revoir au profit d'un pipeline
// ou a evacuer completement, meme (formu sur messages = messages de reponse)
$discuter = charger_fonction('discuter', 'inc', true);
if ($discuter) echo $discuter($id_message, 'message', 'id_message', "perso");
}
echo fin_gauche(), fin_page();
}
?>

179
exec/message_edit.php

@ -0,0 +1,179 @@
<?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/presentation');
include_spip('inc/date');
include_spip('inc/agenda');
// http://doc.spip.org/@exec_message_edit_dist
function exec_message_edit_dist()
{
exec_message_edit_args(intval(_request('id_message')),
_request('new'),
intval(_request('dest')));
}
// http://doc.spip.org/@exec_message_edit_args
function exec_message_edit_args($id_message, $new, $dest)
{
global $connect_id_auteur, $connect_statut;
if ($new == 'oui') {
$onfocus = "\nonfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
} else $onfocus = '';
$row = sql_fetsel("*", "spip_messages", "id_message=$id_message");
$id_message = $row['id_message'];
$date_heure = $row["date_heure"];
$date_fin = $row["date_fin"];
$titre = entites_html($row["titre"]);
$texte = entites_html($row["texte"]);
$type = $row["type"];
$statut = $row["statut"];
$rv = $row["rv"];
$expediteur = $row["id_auteur"];
if (!($expediteur == $connect_id_auteur OR ($type == 'affich' AND $connect_statut == '0minirezo'))) {
include_spip('inc/minipres');
echo minipres();
} else {
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_page_message_edit'), "accueil", "messagerie");
if ($type == 'normal') {
$le_type = _T('bouton_envoi_message_02');
$logo = "message";
}
if ($type == 'pb') {
$le_type = _T('bouton_pense_bete');
$logo = "pense-bete";
}
if ($type == 'affich') {
$le_type = _T('bouton_annonce');
$logo = "annonce";
}
echo debut_gauche('', true);
if($type == 'normal' AND $dest) {
$email = sql_getfetsel("email", "spip_auteurs", "id_auteur=$dest");
if (strlen($email) > 3) {
echo icone_inline(_T('info_envoyer_message_prive'), "mailto:".$email, "envoi-message-24.gif");
}
}
echo debut_droite('', true);
$res = "<div class='arial2'>"
. "<span style='color:green' class='verdana1 spip_small'><b>$le_type</b></span>";
if ($type == "affich")
$res .="<p style='color:red;' class='verdana1 spip_x-small'>" . _T('texte_message_edit')."</p>";
$res .= '<br /><br />'."<label for='titre'>" . _T('texte_titre_obligatoire')."</label><br />\n";
$res .="<input type='text' class='formo' name='titre' id='titre' value=\"$titre\" size='40' $onfocus />";
if (!$dest) {
if ($type == 'normal') {
$res .="<br /><label for='cherche_auteur'><b>"._T('info_nom_destinataire')."</b></label><br />\n";
$res .="<input type='text' class='formo' name='cherche_auteur' id='cherche_auteur' value='' size='40'/>";
}
} else {
$nom = sql_getfetsel("nom", "spip_auteurs", "id_auteur=$dest");
$res .= "<br /><b>" .
_T('info_nom_destinataire') .
"</b>&nbsp;:&nbsp;&nbsp; " .
$nom .
"<br /><br />\n";
}
$res .= '<br />';
//////////////////////////////////////////////////////
// Fixer rendez-vous?
//
if ($rv == "oui") $fonction = "rv.gif"; else $fonction = "";
$res .= debut_cadre_trait_couleur($logo.".gif", true, $fonction, _T('titre_rendez_vous'))
. afficher_si_rdv($date_heure, $date_fin, ($rv == "oui"))
. fin_cadre_trait_couleur(true)
. "\n<p><label for='texte'><b>"
. _T('info_texte_message_02')
. "</b></label><br />"
. "<textarea name='texte' id='texte' rows='20' class='formo' cols='40'>"
. $texte
. "</textarea></p><br />\n"
. "\n<div style='text-align: right'><input type='submit' value='"
. _T('bouton_valider')
. "' class='fondo'/></div>"
. "\n</div>";
echo redirige_action_post('editer_message', $id_message, 'message',"id_message=$id_message", $res);
echo fin_gauche(), fin_page();
}
}
// http://doc.spip.org/@afficher_si_rdv
function afficher_si_rdv($date_heure, $date_fin, $choix)
{
$heures_debut = heures($date_heure);
$minutes_debut = minutes($date_heure);
$heures_fin = heures($date_fin);
$minutes_fin = minutes($date_fin);
if ($date_fin == "0000-00-00 00:00:00") {
$date_fin = $date_heure;
$heures_fin = $heures_debut + 1;
}
if ($heures_fin >=24){
$heures_fin = 23;
$minutes_fin = 59;
}
$lib = _T('item_non_afficher_calendrier');
if (!$choix) $lib = "<b>$lib</b>";
$res = "\n<div><input type='radio' name='rv' value='non' id='rv_off'" .
(!$choix ? " checked='checked' " : '')
. "\nonclick=\"changeVisible(this.checked, 'heure-rv', 'none', 'block');\"/>"
. "<label for='rv_off'>"
. $lib
. "</label>"
. "</div>";
$lib = _T('item_afficher_calendrier');
if ($choix) $lib = "<b>$lib</b>";
$res .= "\n<div><input type='radio' name='rv' value='oui' id='rv_on' " .
($choix ? " checked='checked' " : '') .
"\nonclick=\"changeVisible(this.checked, 'heure-rv', 'block', 'none');\"/>" .
"<label for='rv_on'>"
. $lib
. "</label>"
. '</div>';
$display = ($choix ? "block" : "none");
return $res .
"\n<div id='heure-rv' style='display: $display; padding-top: 4px; padding-left: 24px;'>" .
afficher_jour_mois_annee_h_m($date_heure, $heures_debut, $minutes_debut) .
"<br />".
afficher_jour_mois_annee_h_m($date_fin, $heures_fin, $minutes_fin, '_fin') .
"</div>";
}
?>

123
exec/messagerie.php

@ -0,0 +1,123 @@
<?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/presentation');
include_spip('inc/message_select');
include_spip('inc/agenda');
// http://doc.spip.org/@exec_messagerie_dist
function exec_messagerie_dist()
{
global $connect_id_auteur, $connect_statut, $spip_lang_rtl;
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_page_messagerie'), "accueil", "messagerie");
echo debut_gauche("messagerie",true);
echo debut_boite_info(true);
echo _T('info_gauche_messagerie');
echo "<p>".http_img_pack("m_envoi$spip_lang_rtl.gif", 'V', "style='width: 14px; height: 7px; border: 0px'") .' ' . _T('info_symbole_vert'), '</p>';
echo aide ("messut");
echo "<p>".http_img_pack("m_envoi_bleu$spip_lang_rtl.gif", 'B', "style='width: 14px; height: 7px; border: 0px'") .' ' . _T('info_symbole_bleu'), '</p>';
echo aide ("messpense");
echo "<p>".http_img_pack("m_envoi_jaune$spip_lang_rtl.gif", 'J', "style='width: 14px; height: 7px; border: 0px'") .' ' . _T('info_symbole_jaune'), '</p>';
echo fin_boite_info(true);
echo creer_colonne_droite('', true);
echo debut_cadre_relief("messagerie-24.png", true);
echo icone_horizontale(_T('lien_nouvea_pense_bete'),generer_action_auteur("editer_message","pb"), "pense-bete-24.png", "", false);
echo icone_horizontale(_T('lien_nouveau_message'),generer_action_auteur("editer_message","normal"), "message-24.png", "", false);
if ($connect_statut == "0minirezo") {
echo icone_horizontale(_T('lien_nouvelle_annonce'),generer_action_auteur("editer_message","affich"), "annonce-24.png", "", false);
}
echo fin_cadre_relief(true);
# Affiche l'encadre "lien iCal"
echo
debut_cadre_enfonce('',true) .
icone_horizontale(_T('icone_suivi_activite'),generer_url_ecrire("synchro"), "synchro-24.png", "", false) .
fin_cadre_enfonce(true);
echo debut_droite("messagerie", true);
$messages_vus = array();
echo afficher_ses_messages('<b>' . _T('infos_vos_pense_bete') . '</b>', '', "id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND (" . sql_date_proche('date_fin', -1, 'DAY') . " OR rv != 'oui')", $messages_vus, false, true,'pense-bete');
echo afficher_ses_messages('<b>' . _T('info_nouveaux_message') . '</b>', ", spip_auteurs_liens AS A", "A.objet='message' AND A.id_auteur=$connect_id_auteur AND vu='non' AND statut='publie' AND A.id_objet=M.id_message", $messages_vus, true, true,'message');
echo afficher_ses_messages('<b>' . _T('info_discussion_cours') . '</b>', ", spip_auteurs_liens AS A", "A.objet='message' AND A.id_auteur=$connect_id_auteur AND statut='publie' AND type='normal' AND A.id_objet=M.id_message AND (" . sql_date_proche('date_fin', -1, 'DAY') . " OR rv != 'oui')", $messages_vus, true, false,'message');
// Afficher le lien RSS
echo bouton_spip_rss('messagerie', array('id_auteur' => $connect_id_auteur));
echo afficher_ses_messages('<b>' . _T('info_message_en_redaction') . '</b>', '', "id_auteur=$connect_id_auteur AND statut='redac'", $messages_vus, true, false,'message');
$result = sql_select('A.id_auteur, A.nom, COUNT(*) AS total', 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS D ON (D.objet=\'message\' AND A.id_auteur=D.id_auteur) LEFT JOIN spip_messages AS M ON D.id_objet=M.id_message LEFT JOIN spip_auteurs_liens AS S ON (S.objet=\'message\' AND S.id_objet=M.id_message)', "(S.id_auteur = $connect_id_auteur AND M.statut = 'publie' AND (M.rv != 'oui' OR M.date_fin > ".sql_quote(date('Y-m-d H:i:s'))." )) AND D.id_auteur != $connect_id_auteur", "A.id_auteur", 'total DESC', 10);
$cor = array();
while($row = sql_fetch($result)) {
$id_auteur = $row['id_auteur'];
$nom = typo($row["nom"]);
$total = $row["total"];
$cor[]= "<div class='tr_liste'\nonmouseover=\"changeclass(this,'tr_liste_over');\"\nonmouseout=\"changeclass(this,'tr_liste');\"\nstyle='padding: 2px; padding-left: 10px; border-bottom: 1px solid #cccccc;'><div class='verdana1'><img src='" . chemin_image('auteur-16.png') . "'\nstyle='border: 0px' alt=' ' /> <a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur") . "'>$nom,</a> ($total)</div></div>";
}
if ($cor) {
echo "<div style='height: 12px;'></div>";
$bouton = bouton_block_depliable(_T('info_principaux_correspondants'),true,'principaux');
echo debut_cadre('liste',"auteur-24.png",'',$bouton);
echo debut_block_depliable(true,'principaux');
echo "<table width='100%'>";
echo "<tr><td valign='top' style='width: 50%'>";
$count = ceil(count($cor)/2);
echo join("\n",array_slice($cor, 0, $count));
echo "</td><td valign='top' style='width: 50%'>";
echo join("\n",array_slice($cor, $count));
echo "</td></tr></table>";
echo fin_block();
echo fin_cadre('liste');
}
echo afficher_ses_messages('<b>' . _T('info_pense_bete_ancien') . '</b>', '', "id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND rv!='oui'", $messages_vus, false, false);
echo afficher_ses_messages('<b>' . _T('info_tous_redacteurs') . '</b>', '', "statut='publie' AND type='affich' AND (" . sql_date_proche('date_fin', -1, 'DAY') . " OR rv != 'oui')", $messages_vus, false, false);
echo fin_gauche(), fin_page();
}
?>

99
filtres/agenda.php

@ -0,0 +1,99 @@
<?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;
// http://doc.spip.org/@agenda_connu
function agenda_connu($type)
{
return in_array($type, array('jour','mois','semaine','periode')) ? ' ' : '';
}
// Cette fonction memorise dans un tableau indexe par son 5e arg
// un evenement decrit par les 4 autres (date, descriptif, titre, URL).
// Appellee avec une date nulle, elle renvoie le tableau construit.
// l'indexation par le 5e arg autorise plusieurs calendriers dans une page
// http://doc.spip.org/@agenda_memo
function agenda_memo($date=0 , $descriptif='', $titre='', $url='', $cal='')
{
static $agenda = array();
if (!$date) return $agenda;
$idate = date_ical($date);
$cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!!
$agenda[$cal][(date_anneemoisjour($date))][] = array(
'CATEGORIES' => $cal,
'DTSTART' => $idate,
'DTEND' => $idate,
'DESCRIPTION' => texte_script($descriptif),
'SUMMARY' => texte_script($titre),
'URL' => $url);
// toujours retourner vide pour qu'il ne se passe rien
return "";
}
// Cette fonction recoit:
// - un nombre d'evenements,
// - une chaine a afficher si ce nombre est nul,
// - un type de calendrier
// -- et une suite de noms N.
// Elle demande a la fonction precedente son tableau
// et affiche selon le type les elements indexes par N dans ce tableau.
// Si le suite de noms est vide, tout le tableau est pris
// Ces noms N sont aussi des classes CSS utilisees par http_calendrier_init
// Cette fonction recupere aussi par _request les parametres
// jour, mois, annee, echelle, partie_cal (a ameliorer)
// http://doc.spip.org/@agenda_affiche
function agenda_affiche($i)
{
include_spip('inc/agenda');
$args = func_get_args();
// date ou nombre d'evenements (on pourrait l'afficher)
$nb = array_shift($args);
$evt = array_shift($args);
$type = array_shift($args);
spip_log("evt $nb");
if (!$nb) {
$d = array(time());
} else {
$agenda = agenda_memo(0);
$evt = array();
foreach (($args ? $args : array_keys($agenda)) as $k) {
if (is_array($agenda[$k]))
foreach($agenda[$k] as $d => $v) {
$evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
}
}
$d = array_keys($evt);
}
if (count($d)){
$mindate = min($d);
$start = strtotime($mindate);
} else {
$mindate = ($j=_request('jour')) * ($m=_request('mois')) * ($a=_request('annee'));
if ($mindate)
$start = mktime(0,0,0, $m, $j, $a);
else $start = mktime(0,0,0);
}
if ($type != 'periode')
$evt = array('', $evt);
else {
$min = substr($mindate,6,2);
$max = $min + ((strtotime(max($d)) - $start) / (3600 * 24));
if ($max < 31) $max = 0;
$evt = array('', $evt, $min, $max);
$type = 'mois';
}
return http_calendrier_init($start, $type, _request('echelle'), _request('partie_cal'), self('&'), $evt);
}

31
formulaires/configurer_messagerie_agenda.html

@ -0,0 +1,31 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}">
<h3 class='titrem'><img src="#CHEMIN_IMAGE{messagerie-24.png}" class="cadre-icone" /><:titre_messagerie_agenda:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<p><:texte_messagerie_agenda:></p>
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
#SET{name,messagerie_agenda}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
[
<span class='erreur_message'>(#GET{erreurs})</span>
]<div class="choix">
<input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui"
[(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_messagerie_agenda:></label>
</div>
<div class="choix">
<input type="radio" name="#GET{name}" id="#GET{name}_non" value="non"
[(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_messagerie_agenda:></label>
</div>
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

36
formulaires/configurer_messagerie_agenda.php

@ -0,0 +1,36 @@
<?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;
function formulaires_configurer_messagerie_agenda_charger_dist(){
foreach(array(
"messagerie_agenda",
) as $m)
$valeurs[$m] = $GLOBALS['meta'][$m];
return $valeurs;
}
function formulaires_configurer_messagerie_agenda_traiter_dist(){
$res = array('editable'=>true);
foreach(array(
"messagerie_agenda",
) as $m)
if (!is_null($v=_request($m)))
ecrire_meta($m, $v=='oui'?'oui':'non');
$res['message_ok'] = _T('config_info_enregistree');
return $res;
}

1565
inc/agenda.php

File diff suppressed because it is too large Load Diff

136
inc/message_select.php

@ -0,0 +1,136 @@
<?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;
// $messages_vus en reference pour interdire l'affichage de message en double
function afficher_ses_messages($titre, $join, $where, &$messages_vus, $afficher_auteurs = true, $important = false, $type='messagerie') {
$requete = array('SELECT' => 'M.id_message, M.date_heure, M.date_fin, M.titre, M.type, M.rv', 'FROM' => "spip_messages AS M$join", 'WHERE' => $where .(!$messages_vus ? '' : ' AND M.id_message NOT IN ('.join(',', $messages_vus).')'), 'ORDER BY'=> 'date_heure DESC');
if ($afficher_auteurs) {
$styles = array(array('arial2'), array('arial1', 130), array('arial1', 20), array('arial1', 120));
} else {
$styles = array(array('arial2'), array('arial1', 20), array('arial1', 120));
}
$presenter_liste = charger_fonction('presenter_liste', 'inc');
$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
// cette variable est passe par reference et recevra les valeurs du champ indique
$les_messages = 'id_message';
$res = $presenter_liste($requete, 'presenter_message_boucles', $les_messages, $afficher_auteur, $important, $styles, $tmp_var, $titre, "$type-24.gif");
$messages_vus = array_merge($messages_vus, $les_messages);
if (!$res) return '';
else
return
(debut_cadre_couleur('',true)
. $res
. fin_cadre_couleur(true));
}
function presenter_message_boucles($row, $afficher_auteurs)
{
global $connect_id_auteur, $spip_lang_left, $spip_lang_rtl;
$vals = array();
$id_message = $row['id_message'];
$date = $row["date_heure"];
$date_fin = $row["date_fin"];
$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
$type = $row["type"];
$rv = $row["rv"];
//
// Titre
//
$s = "<a href='" . generer_url_ecrire("message","id_message=$id_message") . "' style='display: block;'>";
switch ($type) {
case 'pb' :
$puce = "m_envoi_bleu$spip_lang_rtl.gif";
break;
case 'memo' :
$puce = "m_envoi_jaune$spip_lang_rtl.gif";
break;
case 'affich' :
$puce = "m_envoi_jaune$spip_lang_rtl.gif";
break;
case 'normal':
default:
$puce = "m_envoi$spip_lang_rtl.gif";
break;
}
$s .= http_img_pack("$puce", "", "width='14' height='7'");
$s .= "&nbsp;&nbsp;".typo($titre)."</a>";
$vals[] = $s;
//
// Auteurs
if ($afficher_auteurs) {
$auteurs = sql_allfetsel("A.id_auteur, A.nom", "spip_auteurs AS A, spip_auteurs_liens AS L", "L.objet='message' AND L.id_objet=$id_message AND L.id_auteur!=$connect_id_auteur AND L.id_auteur=A.id_auteur");
foreach ($auteurs as $k => $row_auteurs) {
$id_auteur = $row_auteurs['id_auteur'];
$auteurs[$k] = "<a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur") . "'>".typo($row_auteurs['nom'])."</a>";
}
if ($auteurs AND $type == 'normal') {
$s = "<span class='arial1 spip_x-small'>" . join(', ', $auteurs) . "</span>";
} else $s = "&nbsp;";
$vals[] = $s;
}
//
// Messages de forums
if (test_plugin_actif('forum')
AND $total_forum = sql_countsel('spip_forum', "id_message=$id_message")>0)
$vals[] = "($total_forum)";
else
$vals[] = "";
//
// Date
//
$s = affdate($date);
if ($rv == 'oui') {
$jour=journum($date);
$mois=mois($date);
$annee=annee($date);
$heure = heures($date).":".minutes($date);
if (affdate($date) == affdate($date_fin))
$heure_fin = heures($date_fin).":".minutes($date_fin);
else
$heure_fin = "...";
$s = "<div " .
http_style_background('rv-12.gif', "$spip_lang_left center no-repeat; padding-$spip_lang_left: 15px") .
"><a href='" . generer_url_ecrire("calendrier","type=jour&jour=$jour&mois=$mois&annee=$annee") . "'><b style='color: black;'>$s</b><br />$heure-$heure_fin</a></div>";
} else {
$s = "<span style='color: #999999'>$s</span>";
}
$vals[] = $s;
return $vals;
}
?>

19
organiseur_autoriser.php

@ -0,0 +1,19 @@
<?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;
/**
* Fonction vide pour charger ce fichier sans declencher de warning
* @return void
*/
function organiseur_autoriser(){}

170
organiseur_pipelines.php

@ -0,0 +1,170 @@
<?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 dist