
commit
cd27bd205c
220 changed files with 40354 additions and 0 deletions
@ -0,0 +1,218 @@
|
||||
* text=auto !eol |
||||
action/effacer_messagerecu.php -text |
||||
action/envoyer_message.php -text |
||||
action/quete_autocomplete.php -text |
||||
action/quete_calendrier_prive.php -text |
||||
action/supprimer_message.php -text |
||||
base/organiseur.php -text |
||||
/calendrier.css -text |
||||
/calendrier_quete.json.html -text |
||||
/calendrier_quete.json_fonctions.php -text |
||||
contenu/calendrier.html -text |
||||
formulaires/configurer_messagerie_agenda.html -text |
||||
formulaires/configurer_messagerie_agenda.php -text |
||||
formulaires/editer_message.html -text |
||||
formulaires/editer_message.js -text |
||||
formulaires/editer_message.php -text |
||||
formulaires/inc-destinataires-message.html -text |
||||
inc/date_gestion.php -text |
||||
inc/messages.php -text |
||||
inc/quete_calendrier.php -text |
||||
lang/organiseur.xml -text |
||||
lang/organiseur_ar.php -text |
||||
lang/organiseur_de.php -text |
||||
lang/organiseur_en.php -text |
||||
lang/organiseur_es.php -text |
||||
lang/organiseur_fa.php -text |
||||
lang/organiseur_fr.php -text |
||||
lang/organiseur_fr_fem.php -text |
||||
lang/organiseur_fr_tu.php -text |
||||
lang/organiseur_it.php -text |
||||
lang/organiseur_nl.php -text |
||||
lang/organiseur_oc_ni_mis.php -text |
||||
lang/organiseur_pt.php -text |
||||
lang/organiseur_pt_br.php -text |
||||
lang/organiseur_ru.php -text |
||||
lang/organiseur_sk.php -text |
||||
lang/organiseur_uk.php -text |
||||
lang/paquet-organiseur.xml -text |
||||
lang/paquet-organiseur_ar.php -text |
||||
lang/paquet-organiseur_de.php -text |
||||
lang/paquet-organiseur_en.php -text |
||||
lang/paquet-organiseur_es.php -text |
||||
lang/paquet-organiseur_fa.php -text |
||||
lang/paquet-organiseur_fr_fem.php -text |
||||
lang/paquet-organiseur_fr_tu.php -text |
||||
lang/paquet-organiseur_it.php -text |
||||
lang/paquet-organiseur_lb.php -text |
||||
lang/paquet-organiseur_nl.php -text |
||||
lang/paquet-organiseur_oc_ni_mis.php -text |
||||
lang/paquet-organiseur_pt.php -text |
||||
lang/paquet-organiseur_pt_br.php -text |
||||
lang/paquet-organiseur_ru.php -text |
||||
lang/paquet-organiseur_sk.php -text |
||||
lang/paquet-organiseur_uk.php -text |
||||
lib/fullcalendar/fullcalendar.css -text |
||||
lib/fullcalendar/fullcalendar.js -text |
||||
lib/fullcalendar/fullcalendar.min.css -text |
||||
lib/fullcalendar/fullcalendar.min.js -text |
||||
lib/fullcalendar/fullcalendar.print.css -text |
||||
lib/fullcalendar/fullcalendar.print.min.css -text |
||||
lib/fullcalendar/gcal.js -text |
||||
lib/fullcalendar/gcal.min.js -text |
||||
lib/fullcalendar/locale-all.js -text |
||||
lib/moment/moment-with-locales.js -text |
||||
lib/moment/moment-with-locales.min.js -text |
||||
lib/moment/moment.js -text |
||||
lib/moment/moment.min.js -text |
||||
notifications/instituermessage.php -text |
||||
notifications/message_affich_publie.html -text |
||||
notifications/message_normal_publie.html -text |
||||
/organiseur_administrations.php -text |
||||
/organiseur_autoriser.php -text |
||||
/organiseur_fonctions.php -text |
||||
/organiseur_ieconfig.php -text |
||||
/organiseur_pipelines.php -text |
||||
prive/objets/contenu/message.html -text |
||||
prive/objets/liste/messages-envoyes.html -text |
||||
prive/objets/liste/messages-recus.html -text |
||||
prive/rss/messages.html -text |
||||
prive/squelettes/contenu/calendrier.html -text |
||||
prive/squelettes/contenu/message.html -text |
||||
prive/squelettes/contenu/message_edit.html -text |
||||
prive/squelettes/contenu/messages.html -text |
||||
prive/squelettes/inclure/configurer_messagerie.html -text |
||||
prive/squelettes/inclure/organiseur-autocomplete-auteur.html -text |
||||
prive/squelettes/inclure/organiseur-envoi.html -text |
||||
prive/squelettes/inclure/organiseur-interventions.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/inclure/organiseur-rv.html -text |
||||
prive/squelettes/navigation/message.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 |
||||
prive/themes/spip/images/agenda-24.png -text |
||||
prive/themes/spip/images/agenda-32.png -text |
||||
prive/themes/spip/images/agenda-add-16.png -text |
||||
prive/themes/spip/images/agenda-add-24.png -text |
||||
prive/themes/spip/images/agenda-add-32.png -text |
||||
prive/themes/spip/images/agenda-del-16.png -text |
||||
prive/themes/spip/images/agenda-del-24.png -text |
||||
prive/themes/spip/images/agenda-del-32.png -text |
||||
prive/themes/spip/images/agenda-edit-16.png -text |
||||
prive/themes/spip/images/agenda-edit-24.png -text |
||||
prive/themes/spip/images/agenda-edit-32.png -text |
||||
prive/themes/spip/images/agenda-new-16.png -text |
||||
prive/themes/spip/images/agenda-new-24.png -text |
||||
prive/themes/spip/images/agenda-new-32.png -text |
||||
prive/themes/spip/images/annonce-16.png -text |
||||
prive/themes/spip/images/annonce-24.png -text |
||||
prive/themes/spip/images/annonce-32.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-add-32.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-del-32.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-edit-32.png -text |
||||
prive/themes/spip/images/annonce-new-16.png -text |
||||
prive/themes/spip/images/annonce-new-24.png -text |
||||
prive/themes/spip/images/annonce-new-32.png -text |
||||
prive/themes/spip/images/calendrier-16.png -text |
||||
prive/themes/spip/images/calendrier-24.png -text |
||||
prive/themes/spip/images/calendrier-32.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-add-32.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-del-32.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-edit-32.png -text |
||||
prive/themes/spip/images/calendrier-new-16.png -text |
||||
prive/themes/spip/images/calendrier-new-24.png -text |
||||
prive/themes/spip/images/calendrier-new-32.png -text |
||||
prive/themes/spip/images/heure-16.png -text |
||||
prive/themes/spip/images/heure-24.png -text |
||||
prive/themes/spip/images/heure-32.png -text |
||||
prive/themes/spip/images/heure-on-16.png -text |
||||
prive/themes/spip/images/heure-on-24.png -text |
||||
prive/themes/spip/images/heure-on-32.png -text |
||||
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-32.png -text |
||||
prive/themes/spip/images/message-del-16.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-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-32.png -text |
||||
prive/themes/spip/images/messagerie-16.png -text |
||||
prive/themes/spip/images/messagerie-24.png -text |
||||
prive/themes/spip/images/messagerie-32.png -text |
||||
prive/themes/spip/images/pense-bete-16.png -text |
||||
prive/themes/spip/images/pense-bete-24.png -text |
||||
prive/themes/spip/images/pensebete-16.png -text |
||||
prive/themes/spip/images/pensebete-24.png -text |
||||
prive/themes/spip/images/pensebete-32.png -text |
||||
prive/themes/spip/images/pensebete-add-16.png -text |
||||
prive/themes/spip/images/pensebete-add-24.png -text |
||||
prive/themes/spip/images/pensebete-add-32.png -text |
||||
prive/themes/spip/images/pensebete-del-16.png -text |
||||
prive/themes/spip/images/pensebete-del-24.png -text |
||||
prive/themes/spip/images/pensebete-del-32.png -text |
||||
prive/themes/spip/images/pensebete-edit-16.png -text |
||||
prive/themes/spip/images/pensebete-edit-24.png -text |
||||
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 |
||||
prive/themes/spip2/images/annonce-24.png -text |
||||
prive/themes/spip2/images/annonce-add-16.png -text |
||||
prive/themes/spip2/images/annonce-add-24.png -text |
||||
prive/themes/spip2/images/annonce-del-16.png -text |
||||
prive/themes/spip2/images/annonce-del-24.png -text |
||||
prive/themes/spip2/images/annonce-edit-16.png -text |
||||
prive/themes/spip2/images/annonce-edit-24.png -text |
||||
prive/themes/spip2/images/annonce-new-16.png -text |
||||
prive/themes/spip2/images/annonce-new-24.png -text |
||||
prive/themes/spip2/images/calendrier-16.png -text |
||||
prive/themes/spip2/images/calendrier-24.png -text |
||||
prive/themes/spip2/images/calendrier-add-16.png -text |
||||
prive/themes/spip2/images/calendrier-add-24.png -text |
||||
prive/themes/spip2/images/calendrier-del-16.png -text |
||||
prive/themes/spip2/images/calendrier-del-24.png -text |
||||
prive/themes/spip2/images/calendrier-edit-16.png -text |
||||
prive/themes/spip2/images/calendrier-edit-24.png -text |
||||
prive/themes/spip2/images/calendrier-new-16.png -text |
||||
prive/themes/spip2/images/calendrier-new-24.png -text |
||||
prive/themes/spip2/images/message-16.png -text |
||||
prive/themes/spip2/images/message-24.png -text |
||||
prive/themes/spip2/images/message-add-16.png -text |
||||
prive/themes/spip2/images/message-add-24.png -text |
||||
prive/themes/spip2/images/message-del-16.png -text |
||||
prive/themes/spip2/images/message-del-24.png -text |
||||
prive/themes/spip2/images/message-edit-16.png -text |
||||
prive/themes/spip2/images/message-edit-24.png -text |
||||
prive/themes/spip2/images/message-envoyer-16.png -text |
||||
prive/themes/spip2/images/message-envoyer-24.png -text |
||||
prive/themes/spip2/images/message-new-16.png -text |
||||
prive/themes/spip2/images/message-new-24.png -text |
||||
prive/themes/spip2/images/messagerie-16.png -text |
||||
prive/themes/spip2/images/messagerie-24.png -text |
||||
prive/themes/spip2/images/pensebete-16.png -text |
||||
prive/themes/spip2/images/pensebete-24.png -text |
@ -0,0 +1,36 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* @param int $id_auteur |
||||
* @param int $id_message |
||||
* @return void |
||||
*/ |
||||
function action_effacer_messagerecu_dist($id_auteur = null, $id_message = null) { |
||||
if (is_null($id_auteur) or is_null($id_message)) { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
list($id_auteur, $id_message) = explode('-', $arg); |
||||
} |
||||
|
||||
|
||||
include_spip('inc/autoriser'); |
||||
if (autoriser('effacer', 'messagerecu', $id_message, null, array('id_auteur' => $id_auteur))) { |
||||
include_spip('inc/messages'); |
||||
messagerie_effacer_message_recu($id_auteur, $id_message); |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* @param int $id_message |
||||
* @return void |
||||
*/ |
||||
function action_envoyer_message_dist($id_message = null) { |
||||
|
||||
if (is_null($id_message)) { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$id_message = $securiser_action(); |
||||
} |
||||
|
||||
include_spip('inc/autoriser'); |
||||
if (intval($id_message) |
||||
and $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message)) |
||||
and autoriser('envoyermessage', $type, $id_message) |
||||
) { |
||||
include_spip('action/editer_objet'); |
||||
objet_modifier('message', $id_message, array('statut' => 'publie')); |
||||
} |
||||
} |
@ -0,0 +1,30 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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 action_quete_autocomplete_dist() { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
if ($arg |
||||
and $arg == $GLOBALS['visiteur_session']['id_auteur'] |
||||
) { |
||||
include_spip('inc/actions'); |
||||
include_spip('inc/json'); |
||||
echo ajax_retour( |
||||
recuperer_fond('prive/squelettes/inclure/organiseur-autocomplete-auteur', array('term' => _request('term'))), |
||||
'application/json' |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,185 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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. * |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* Gestion de l'action de quête des événements du calendrier |
||||
* |
||||
* @package SPIP\Organiseur\Action |
||||
**/ |
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) { |
||||
return; |
||||
} |
||||
|
||||
/** |
||||
* Fournir une liste d'"evenements" entre deux dates start et end |
||||
* au format json |
||||
* |
||||
* Utilisé pour l'affichage du calendrier privé et public |
||||
* |
||||
* @pipeline_appel quete_calendrier_prive |
||||
* @uses quete_calendrier_interval_rv() |
||||
* @uses quete_calendrier_interval() |
||||
* @uses convert_fullcalendar_quete_calendrier_interval_rv() |
||||
* @uses convert_fullcalendar_quete_calendrier_interval() |
||||
* |
||||
* @return void |
||||
*/ |
||||
function action_quete_calendrier_prive_dist() { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$securiser_action(); |
||||
|
||||
$start = strtotime(_request('start')); |
||||
$end = strtotime(_request('end')); |
||||
$quoi = _request('quoi'); |
||||
|
||||
include_spip('inc/quete_calendrier'); |
||||
|
||||
$evt = array(); |
||||
|
||||
// recuperer la liste des evenements au format ics |
||||
$start = date('Y-m-d H:i:s', $start); |
||||
$end = date('Y-m-d H:i:s', $end); |
||||
$limites = array(sql_quote($start), sql_quote($end)); |
||||
|
||||
// on fonction de quoi on récupère : tout (rv + publication) ou l'un ou l'autre. |
||||
$entier = $duree = array(); |
||||
|
||||
if (!$quoi or $quoi == 'rv') { |
||||
$duree = quete_calendrier_interval_rv(reset($limites), end($limites)); |
||||
$evt = convert_fullcalendar_quete_calendrier_interval_rv($duree, $evt); |
||||
} |
||||
|
||||
if (!$quoi or $quoi == 'publication') { |
||||
list($entier, ) = quete_calendrier_interval($limites); |
||||
$evt = convert_fullcalendar_quete_calendrier_interval($entier, $evt); |
||||
} |
||||
|
||||
|
||||
// permettre aux plugins d'afficher leurs evenements dans ce calendrier |
||||
$evt = pipeline( |
||||
'quete_calendrier_prive', |
||||
array( |
||||
'args' => array('start' => $start, 'end' => $end, 'quoi' => $quoi), |
||||
'data' => $evt, |
||||
) |
||||
); |
||||
|
||||
// format json |
||||
include_spip('inc/json'); |
||||
echo json_encode($evt); |
||||
} |
||||
|
||||
/** |
||||
* Convertir une date au format ical renvoyée par quete_calendrier_interval |
||||
* dans le format attendu par fullcalendar : yyyy-mm-dd H:i:s |
||||
* |
||||
* @param $dateical |
||||
* @return string |
||||
*/ |
||||
function convert_dateical($dateical) { |
||||
$d = explode('T', $dateical); |
||||
$amj = reset($d); |
||||
$s = substr($amj, 0, 4) . '-' . substr($amj, 4, 2) . '-' . substr($amj, 6, 2); |
||||
if (count($d) > 1) { |
||||
$his = end($d); |
||||
$s .= ' ' . substr($his, 0, 2) . ':' . substr($his, 2, 2) . ':' . substr($his, 4, 2); |
||||
} |
||||
|
||||
return $s; |
||||
} |
||||
|
||||
/** |
||||
* Convertir une sortie événement de quète calendrier_interval |
||||
* dans le format attendu par fullcalendar |
||||
* |
||||
* @param array $messages |
||||
* Les événements / messages au format de la quete calendrier_interval |
||||
* @param array $evt |
||||
* Les événements au format fullcalendar déjà présents |
||||
* @return array |
||||
* Les événements au format fullcalendar |
||||
**/ |
||||
function convert_fullcalendar_quete_calendrier_interval($messages, $evt = array()) { |
||||
if (!$messages) { |
||||
return $evt; |
||||
} |
||||
|
||||
// la retransformer au format attendu par fullcalendar |
||||
// facile : chaque evt n'est mentionne qu'une fois, a une date |
||||
foreach ($messages as $amj => $l) { |
||||
$date = substr($amj, 0, 4) . '-' . substr($amj, 4, 2) . '-' . substr($amj, 6, 2); |
||||
foreach ($l as $e) { |
||||
$evt[] = array( |
||||
'id' => 0, |
||||
'title' => $e['SUMMARY'], |
||||
'allDay' => true, |
||||
'start' => $date, |
||||
'end' => $date, |
||||
'url' => str_replace('&', '&', $e['URL']), |
||||
'className' => 'calendrier-event ' . $e['CATEGORIES'], |
||||
'description' => $e['DESCRIPTION'], |
||||
); |
||||
} |
||||
} |
||||
|
||||
return $evt; |
||||
} |
||||
|
||||
/** |
||||
* Convertir une sortie événement de quete calendrier_interval_rv |
||||
* dans le format attendu par fullcalendar |
||||
* |
||||
* @use convert_dateical() |
||||
* |
||||
* @param array $messages |
||||
* Les événements / messages au format issu de la quete calendrier_interval_rv |
||||
* @param array $evt |
||||
* Les événements au format fullcalendar déjà présents |
||||
* @return array |
||||
* Les événements au format fullcalendar |
||||
**/ |
||||
function convert_fullcalendar_quete_calendrier_interval_rv($messages, $evt = array()) { |
||||
if (!$messages) { |
||||
return $evt; |
||||
} |
||||
|
||||
// ici il faut faire attention : un evt apparait N fois |
||||
// mais on a son id |
||||
$seen = array(); |
||||
|
||||
// toutes les messages déjà inscrits qu'on ne remet pas |
||||
foreach ($evt as $e) { |
||||
$seen[$e['url']] = true; |
||||
} |
||||
|
||||
foreach ($messages as $l) { |
||||
foreach ($l as $id => $e) { |
||||
$url = str_replace('&', '&', $e['URL']); |
||||
if (!isset($seen[$url])) { |
||||
$evt[] = array( |
||||
'id' => $id, |
||||
'title' => $e['SUMMARY'], |
||||
'allDay' => false, |
||||
'start' => convert_dateical($e['DTSTART']), //Ymd\THis |
||||
'end' => convert_dateical($e['DTEND']), // Ymd\THis |
||||
'url' => $url, |
||||
'className' => 'calendrier-event ' . $e['CATEGORIES'], |
||||
'description' => $e['DESCRIPTION'], |
||||
); |
||||
$seen[$url] = true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return $evt; |
||||
} |
@ -0,0 +1,34 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* @param int $id_message |
||||
* @return void |
||||
*/ |
||||
function action_supprimer_message_dist($id_message = null) { |
||||
if (is_null($id_message)) { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$id_message = $securiser_action(); |
||||
} |
||||
|
||||
|
||||
include_spip('inc/autoriser'); |
||||
if (autoriser('supprimer', 'message', $id_message)) { |
||||
include_spip('action/editer_objet'); |
||||
objet_modifier('message', $id_message, array('statut' => 'poub')); |
||||
} |
||||
} |
@ -0,0 +1,93 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Declaration des champs complementaires sur la table auteurs, pour les clients |
||||
* |
||||
* @param array $tables |
||||
* @return array |
||||
*/ |
||||
function organiseur_declarer_tables_objets_sql($tables) { |
||||
|
||||
$tables['spip_auteurs']['field']['imessage'] = 'VARCHAR(3)'; |
||||
$tables['spip_auteurs']['field']['messagerie'] = 'VARCHAR(3)'; |
||||
|
||||
$tables['spip_messages'] = array( |
||||
'page' => false, |
||||
'texte_modifier' => 'icone_modifier_message', |
||||
'texte_creer' => 'icone_ecrire_nouveau_message', |
||||
'texte_objets' => 'organiseur:messages', |
||||
'texte_objet' => 'organiseur:message', |
||||
'info_aucun_objet' => 'info_aucun_message', |
||||
'info_1_objet' => 'info_1_message', |
||||
'info_nb_objets' => 'info_nb_messages', |
||||
|
||||
'principale' => 'oui', |
||||
'champs_editables' => array( |
||||
'titre', 'texte', 'type', 'date_heure', 'date_fin', 'rv', 'id_auteur', 'destinataires' |
||||
), |
||||
'field' => array( |
||||
'id_message' => 'bigint(21) NOT NULL', |
||||
'titre' => "text DEFAULT '' NOT NULL", |
||||
'texte' => "longtext DEFAULT '' NOT NULL", |
||||
// normal, |
||||
// pb (pense bete) |
||||
// affich (annonce publique) |
||||
'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) DEFAULT 0 NOT NULL', |
||||
'destinataires' => "text DEFAULT '' NOT NULL", |
||||
'maj' => 'TIMESTAMP' |
||||
), |
||||
'key' => array( |
||||
'PRIMARY KEY' => 'id_message', |
||||
'KEY id_auteur' => 'id_auteur' |
||||
), |
||||
'titre' => "titre, '' AS lang", |
||||
'date' => 'date_heure', |
||||
'statut' => array( |
||||
array( |
||||
'champ' => 'statut', |
||||
'publie' => 'publie', |
||||
'previsu' => '!', |
||||
'exception' => array('statut', 'tout') |
||||
), |
||||
), |
||||
'rechercher_champs' => array( |
||||
'titre' => 8, |
||||
'texte' => 1 |
||||
), |
||||
|
||||
); |
||||
|
||||
return $tables; |
||||
} |
||||
|
||||
/** |
||||
* Interfaces des tables agenda et messagerie |
||||
* |
||||
* @param array $interfaces |
||||
* @return array |
||||
*/ |
||||
function organiseur_declarer_tables_interfaces($interfaces) { |
||||
$interfaces['table_des_tables']['messages'] = 'messages'; |
||||
|
||||
return $interfaces; |
||||
} |
@ -0,0 +1,68 @@
|
||||
/* ------------------------------------------ */ |
||||
/* Styles pour l'agenda de SPIP |
||||
/* ------------------------------------------ */ |
||||
#calendrier-loading {position:absolute;top:20px;left:350px;padding:5px 30px;border:1px solid #ddd;background:#eee;z-index:100;} |
||||
@media (max-width: 640px) {#calendrier-loading {left:20px;}} |
||||
|
||||
.calendrier-noir { color: #000; } /* style anar */ |
||||
.calendrier-nb { background-color: #FFF; border: 1px solid #000; color: #000; } /* style cinemat(yp)ographe */ |
||||
.fc-head table { margin-bottom:0; } |
||||
|
||||
.calendrier-event {word-wrap:break-word;} |
||||
|
||||
.calendrier-couleur1, |
||||
.calendrier-couleur1 .fc-widget-content { background-color: #CD006F; border-color: #CD006F; color: #fff; } /* Fushia */ |
||||
.calendrier-couleur1i, |
||||
.calendrier-couleur1i .fc-widget-content { background-color: #FDE5F2; border-color: #FDE5F2; color: #CD006F; } /* Fushia */ |
||||
.calendrier-couleur2, |
||||
.calendrier-couleur2 .fc-widget-content { background-color: #5da7c5; border-color: #5da7c5; color: #fff; } /* Bleu */ |
||||
.calendrier-couleur2i, |
||||
.calendrier-couleur2i .fc-widget-content { background-color: #EDF3FE; border-color: #EDF3FE; color: #5da7c5; } /* Bleu */ |
||||
.calendrier-couleur3, |
||||
.calendrier-couleur3 .fc-widget-content { background-color: #766CF6; border-color: #766CF6; color: #fff; } /* Bleu pastel */ |
||||
.calendrier-couleur3i, |
||||
.calendrier-couleur3i .fc-widget-content { background-color: #EBE9FF; border-color: #EBE9FF; color: #766CF6; } /* Bleu pastel */ |
||||
.calendrier-couleur4, |
||||
.calendrier-couleur4 .fc-widget-content { background-color: #FA9A00; border-color: #FA9A00; color: #fff; } /* Orange */ |
||||
.calendrier-couleur4i, |
||||
.calendrier-couleur4i .fc-widget-content { background-color: #fec; border-color: #fec; color: #FA9A00; } /* Orange */ |
||||
.calendrier-couleur5, |
||||
.calendrier-couleur5 .fc-widget-content { background-color: #F00; border-color: #F00; color: #FFF; } /* Rouge (Vermillon) */ |
||||
.calendrier-couleur5i, |
||||
.calendrier-couleur5i .fc-widget-content { background-color: #FFEDED; border-color: #FFEDED; color: #F00; } /* Rouge (Vermillon) */ |
||||
.calendrier-couleur6, |
||||
.calendrier-couleur6 .fc-widget-content { background-color: #E95503; border-color: #E95503; color: #FFF; } /* Orange */ |
||||
.calendrier-couleur6i, |
||||
.calendrier-couleur6i .fc-widget-content { background-color: #FFF2EB; border-color: #FFF2EB; color: #E95503; } /* Orange */ |
||||
.calendrier-couleur7, |
||||
.calendrier-couleur7 .fc-widget-content { background-color: #ccaa00; border-color: #ccaa00; color: #fff; } /* Jaune */ |
||||
.calendrier-couleur7i, |
||||
.calendrier-couleur7i .fc-widget-content { background-color: #FFE; border-color: #FFE; color: #ccaa00; } /* Jaune */ |
||||
.calendrier-couleur8, |
||||
.calendrier-couleur8 .fc-widget-content { background-color: #009F3C; border-color: #009F3C; color: #fff; } /* Vert pastel */ |
||||
.calendrier-couleur8i, |
||||
.calendrier-couleur8i .fc-widget-content { background-color: #E2FDEC; border-color: #E2FDEC; color: #009F3C; } /* Vert pastel */ |
||||
.calendrier-couleur9, |
||||
.calendrier-couleur9 .fc-widget-content { background-color: #9DBA00; border-color: #9DBA00; color: #fff; } /* Vert */ |
||||
.calendrier-couleur9i, |
||||
.calendrier-couleur9i .fc-widget-content { background-color: #e5fd63; border-color: #e5fd63; color: #9DBA00; } /* Vert */ |
||||
.calendrier-couleur10, |
||||
.calendrier-couleur10 .fc-widget-content { background-color: #640707; border-color: #640707; color: #fff; } /* Rouge (Bordeaux) */ |
||||
.calendrier-couleur10i, |
||||
.calendrier-couleur10i .fc-widget-content { background-color: #FFE0E0; border-color: #FFE0E0; color: #640707; } /* Rouge (Bordeaux) */ |
||||
.calendrier-couleur11, |
||||
.calendrier-couleur11 .fc-widget-content { background-color: #3F3F3F; border-color: #3F3F3F; color: #fff; } /* Gris */ |
||||
.calendrier-couleur11i, |
||||
.calendrier-couleur11i .fc-widget-content { background-color: #F2F2F2; border-color: #F2F2F2; color: #3F3F3F; } /* Gris */ |
||||
.calendrier-couleur12, |
||||
.calendrier-couleur12 .fc-widget-content { background-color: #AAA; border-color: #AAA; color: #fff; } |
||||
.calendrier-couleur12i, |
||||
.calendrier-couleur12i .fc-widget-content { background-color: #AAA; border-color: #AAA; color: #000; } |
||||
.calendrier-couleur13, |
||||
.calendrier-couleur13 .fc-widget-content { background-color: #666500; border-color: #666500; color: #fff; } /* Caca d'oie */ |
||||
.calendrier-couleur13i, |
||||
.calendrier-couleur13i .fc-widget-content { background-color: #FFFFE0; border-color: #FFFFE0; color: #666500; } /* Caca d'oie */ |
||||
.calendrier-couleur14, |
||||
.calendrier-couleur14 .fc-widget-content { background-color: #8C6635; border-color: #8C6635; color: #fff; } /* Marron */ |
||||
.calendrier-couleur14i, |
||||
.calendrier-couleur14i .fc-widget-content { background-color: #F5EEE5; border-color: #F5EEE5; color: #8C6635; } /* Marron */ |
@ -0,0 +1,6 @@
|
||||
#HTTP_HEADER{Content-type:text/javascript;} |
||||
[<BOUCLE_periode(ARTICLES){id_mot?}{id_rubrique?} |
||||
{agenda date, periode, |
||||
#ENV{start}|todate|affdate{Y}, #ENV{start}|todate|affdate{m}, #ENV{start}|todate|affdate{d}, |
||||
#ENV{end}|todate|affdate{Y}, #ENV{end}|todate|affdate{m}, #ENV{end}|todate|affdate{d}}{', '}> |
||||
[(#ARRAY{id,#ID_ARTICLE,title,[(#TITRE|html2unicode|unicode2charset)],allDay,#EVAL{false},start,#DATE,end,#DATE,url,#URL_ARTICLE,className,calendrier-couleur6,description,[(#INTRODUCTION|html2unicode|unicode2charset)]}|json_encode)]</BOUCLE_periode>] |
@ -0,0 +1,11 @@
|
||||
<?php |
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) { |
||||
return; |
||||
} |
||||
|
||||
include_spip('inc/json'); |
||||
|
||||
function todate($t) { |
||||
return date('Y-m-d H:i:s', $t); |
||||
} |
@ -0,0 +1,32 @@
|
||||
<div id="calendrier-loading" style="display:none;"><:organiseur:loading:></div> |
||||
<div id="calendrier"></div> |
||||
<link rel='stylesheet' type='text/css' href='#CHEMIN{lib/fullcalendar/fullcalendar.min.css}' /> |
||||
<link rel="stylesheet" type="text/css" href="#CHEMIN{calendrier.css}" /> |
||||
<script type='text/javascript' src='#CHEMIN{lib/moment/moment-with-locales.min.js}'></script> |
||||
<script type='text/javascript' src='#CHEMIN{lib/fullcalendar/fullcalendar.min.js}'></script> |
||||
<script type='text/javascript' src='#CHEMIN{lib/fullcalendar/locale-all.js}'></script> |
||||
<script type="text/javascript">/*<![CDATA[*/ |
||||
jQuery(function($) { |
||||
|
||||
// page is now ready, initialize the calendar... |
||||
$('#calendrier').fullCalendar({ |
||||
locale: '[(#LANG|strtolower)]', |
||||
editable: false, |
||||
navLinks: true, |
||||
eventLimit: true, |
||||
events: "[(#URL_PAGE{calendrier_quete.json}|parametre_url{id_mot,#ENV{id_mot,''}}|parametre_url{id_rubrique,#ENV{id_rubrique,''}})]", |
||||
header: { |
||||
left: 'prevYear,prev,next,nextYear today', |
||||
center: 'title', |
||||
right: 'month,agendaWeek,agendaDay' |
||||
}, |
||||
fixedWeekCount: false, |
||||
loading: function(bool) { |
||||
if (bool) $('#calendrier-loading').show(); |
||||
else $('#calendrier-loading').hide(); |
||||
}, |
||||
allDayHtml:'<:organiseur:cal_jour_entier|texte_script:>', |
||||
}) |
||||
|
||||
}); |
||||
/*]]>*/</script> |
@ -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}'><div> |
||||
[(#REM) declarer les hidden qui declencheront le service du formulaire |
||||
parametre : url d'action ] |
||||
#ACTION_FORMULAIRE |
||||
<div class="editer-groupe"> |
||||
#SET{name,messagerie_agenda}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<div class="editer 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> |
||||
</div> |
||||
</div> |
||||
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] |
||||
<!--extra--> |
||||
<p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> |
||||
</div></form> |
||||
] |
||||
</div> |
@ -0,0 +1,40 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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() { |
||||
$valeurs = array(); |
||||
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; |
||||
} |
@ -0,0 +1,88 @@
|
||||
<div class="ajax formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> |
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] |
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] |
||||
[(#ENV{editable}) |
||||
<form method='post' action='#ENV{action}'><div> |
||||
[(#REM) declarer les hidden qui declencheront le service du formulaire |
||||
parametre : url d'action ] |
||||
#ACTION_FORMULAIRE |
||||
#SET{fl,organiseur} |
||||
<div class="editer-groupe"> |
||||
[(#ENV{_destiner}|oui) |
||||
#SET{name,destinataires}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[ |
||||
<span class='erreur_message'>(#GET{erreurs})</span> |
||||
] |
||||
#INCLURE{fond=formulaires/inc-destinataires-message,name=#GET{name},env} |
||||
</div> |
||||
] |
||||
#SET{name,titre}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[ |
||||
<span class='erreur_message'>(#GET{erreurs})</span> |
||||
]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/> |
||||
</div> |
||||
<div class="editer editer_rv[ (#ENV**{erreurs}|table_valeur{rv}|oui)erreur]"> |
||||
<div class="choix"> |
||||
<input type='checkbox' name='rv' id='rv' value='oui' [(#ENV{rv}|=={oui}|oui)checked='checked'] |
||||
onclick="if (this.checked==true) { $('.editer_date_debut_fin').show('fast');} else {$('.editer_date_debut_fin').hide('fast');}" /> |
||||
<label for="rv"><:item_afficher_calendrier:></label>[ |
||||
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{rv})</span> |
||||
] |
||||
</div> |
||||
</div> |
||||
<div class="editer editer_date_debut editer_date_debut_fin[ (#ENV**{erreurs}|table_valeur{date_debut}|oui)erreur][(#ENV{rv}|=={oui}|non)none]"> |
||||
<label for="date_debut"><:organiseur:info_message_date_debut:></label>[ |
||||
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{date_debut})</span> |
||||
]<input type='text' class='text date' name='date_debut' id='date_debut' size='10' maxlength='10' value="[(#ENV{date_debut})]" /> |
||||
<input type='text' class='text heure' name='heure_debut' id='heure_debut' size='4' maxlength='5' value="[(#ENV{heure_debut})]" |
||||
/> |
||||
</div> |
||||
<div class="editer editer_date_fin editer_date_debut_fin[ (#ENV**{erreurs}|table_valeur{date_fin}|oui)erreur][(#ENV{rv}|=={oui}|non)none]"> |
||||
<label for="date_fin" class='date_fin'><:organiseur:info_message_date_fin:></label>[ |
||||
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{date_fin})</span> |
||||
]<input type='text' class='text date' name='date_fin' id='date_fin' size='10' maxlength='10' value="[(#ENV{date_fin})]" /> |
||||
<input type='text' class='text heure' name='heure_fin' id='heure_fin' size='4' maxlength='5' value="[(#ENV{heure_fin})]" /> |
||||
</div> |
||||
#SET{name,texte}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[ |
||||
<span class='erreur_message'>(#GET{erreurs})</span> |
||||
]<textarea class="textarea" name="#GET{name}" rows="10"> |
||||
#ENV*{#GET{name}}</textarea> |
||||
</div> |
||||
[(#REM) Piege a robots spammeurs ] |
||||
#SET{name,antispam}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<div class="editer none editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="nobotnobot-#ID"><:antispam_champ_vide:></label>[ |
||||
<span class='erreur_message'>(#GET{erreurs})</span> |
||||
]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name}}" id="nobotnobot-#ID" /> |
||||
</div> |
||||
</div> |
||||
<!--extra--> |
||||
<p class='boutons'><span class='image_loading'> </span> |
||||
[(#ENV{statut}|=={publie}|non) |
||||
<input type='submit' class='submit' name="draft" value='<:organiseur:bouton_enregistrer_brouillon:>' /> |
||||
] |
||||
<input type='submit' class='submit' name="send" value='<:organiseur:bouton_envoyer_message:>' /> |
||||
</p> |
||||
</div></form> |
||||
#INCLURE{fond=formulaires/dateur/inc-dateur} |
||||
] |
||||
</div> |
||||
[(#ENV{_destiner}|oui) |
||||
<script type="text/javascript"> |
||||
if (typeof formulaire_editer_message_init=="undefined"){ |
||||
var formulaire_editer_message_init=''; // eviter double dl si plusieurs forms dans la page |
||||
var url_trouver_destinataire = '[(#URL_ACTION_AUTEUR{quete_autocomplete,#SESSION{id_auteur}}|replace{&,&})]'; |
||||
jQuery.getScript('[(#CHEMIN{prive/javascript/ui/widget.js}|timestamp)]',function(){ |
||||
jQuery.getScript('[(#CHEMIN{prive/javascript/ui/position.js}|timestamp)]',function(){ |
||||
jQuery.getScript('[(#CHEMIN{prive/javascript/ui/menu.js}|timestamp)]',function(){ |
||||
jQuery.getScript('[(#CHEMIN{prive/javascript/ui/autocomplete.js}|timestamp)]',function(){ |
||||
jQuery.getScript('[(#CHEMIN{formulaires/editer_message.js}|timestamp)]'); |
||||
}); |
||||
});});}); |
||||
} |
||||
</script> |
||||
] |
@ -0,0 +1,49 @@
|
||||
function formulaire_editer_message_set_dest(input,item){ |
||||
var id_auteur; |
||||
var box = jQuery(input).siblings('.selected'); |
||||
if (item.value) { |
||||
id_auteur = item.value; |
||||
var nom = item.label; |
||||
if (box.find('input[value='+id_auteur+']').length==0){ |
||||
box.find('.on').removeClass('on'); |
||||
box.append(" <span class='dest on'>" |
||||
+ nom |
||||
+"<input type='hidden' name='" |
||||
+ jQuery(input).attr('data-name') |
||||
+ "' value='"+id_auteur+"' /> " |
||||
+ $(box).find('span.dest:first').html() |
||||
+"</span>"); |
||||
} |
||||
else { |
||||
box.find('input[value='+id_auteur+']').closest('span').addClass('on').siblings('.on').removeClass('on'); |
||||
} |
||||
} |
||||
jQuery(input).val('');//.get(0).focus();
|
||||
} |
||||
function formulaire_editer_message_init(){ |
||||
jQuery("input.destinataires:not(.autocompleted)").each(function(){ |
||||
var me = this; |
||||
jQuery(me) |
||||
.autocomplete({ |
||||
source: url_trouver_destinataire,
|
||||
minLength:2, |
||||
/*autoFocus:1,*/ |
||||
select: function(event,ui){ |
||||
event.preventDefault(); |
||||
formulaire_editer_message_set_dest(me, ui.item); |
||||
}, |
||||
focus: function(event, ui){ |
||||
event.preventDefault(); |
||||
jQuery(me).val(ui.item.label); |
||||
}, |
||||
}) |
||||
.parent().on('click', function(){jQuery(me).get(0).focus();}); |
||||
}) |
||||
.addClass('autocompleted'); |
||||
} |
||||
if (window.jQuery){ |
||||
jQuery(function(){ |
||||
formulaire_editer_message_init(); |
||||
onAjaxLoad(formulaire_editer_message_init); |
||||
}); |
||||
} |
@ -0,0 +1,209 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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/editer'); |
||||
|
||||
|
||||
function formulaires_editer_message_charger_dist( |
||||
$id_message = 'new', |
||||
$type = 'message', |
||||
$retour = '', |
||||
$accepter_email = 'oui', |
||||
$destinataires = '', |
||||
$titre = '', |
||||
$texte = '' |
||||
) { |
||||
include_spip('inc/autoriser'); |
||||
if ( |
||||
(!intval($id_message) and !autoriser('envoyermessage', $type)) |
||||
or |
||||
(intval($id_message) and !autoriser('modifier', 'message', $id_message)) |
||||
) { |
||||
return false; |
||||
} |
||||
|
||||
$valeurs = formulaires_editer_objet_charger('message', $id_message, 0, 0, $retour, ''); |
||||
|
||||
// les destinataires sont stockes en chaine separe par une virgule dans la base |
||||
if (strlen($valeurs['destinataires'])) { |
||||
$valeurs['destinataires'] = explode(',', $valeurs['destinataires']); |
||||
} |
||||
|
||||
if (!intval($id_message)) { |
||||
$valeurs['type'] = $type; |
||||
$valeurs['destinataires'] = ($destinataires ? explode(',', $destinataires) : array()); |
||||
$valeurs['titre'] = $titre; |
||||
$valeurs['texte'] = $texte; |
||||
$t = time(); |
||||
$valeurs['date_heure'] = date('Y-m-d H:i:00', $t); |
||||
$valeurs['date_fin'] = date('Y-m-d H:i:00', $t + 3600); |
||||
$valeurs['rv'] = ''; |
||||
} |
||||
|
||||
$id_message_origine = intval(_request('id_message_origine')); |
||||
if (autoriser('voir', 'message', $id_message_origine)) { |
||||
$v = formulaires_editer_objet_charger('message', $id_message_origine, 0, 0, $retour, ''); |
||||
$valeurs['titre'] = _T('organiseur:re') . ' : ' . $v['titre']; |
||||
$valeurs['texte'] = '<quote>' . $v['texte'] . '</quote>'; |
||||
} |
||||
|
||||
// dispatcher date et heure |
||||
list($valeurs['date_debut'], $valeurs['heure_debut']) = explode( |
||||
' ', |
||||
date('d/m/Y H:i', strtotime($valeurs['date_heure'])) |
||||
); |
||||
list($valeurs['date_fin'], $valeurs['heure_fin']) = explode( |
||||
' ', |
||||
date('d/m/Y H:i', strtotime($valeurs['date_fin'])) |
||||
); |
||||
|
||||
if (in_array($valeurs['type'], array('pb', 'affich'))) { |
||||
$valeurs['_destiner'] = ''; |
||||
} else { |
||||
$valeurs['_destiner'] = ' '; |
||||
} |
||||
|
||||
return $valeurs; |
||||
} |
||||
|
||||
|
||||
function formulaires_editer_message_verifier_dist( |
||||
$id_message = 'new', |
||||
$type = 'message', |
||||
$retour = '', |
||||
$accepter_email = 'oui', |
||||
$destinataires = '', |
||||
$titre = '', |
||||
$texte = '' |
||||
) { |
||||
|
||||
$oblis = array('titre'); |
||||
if (!_request('draft')) { |
||||
$oblis[] = 'texte'; |
||||
} |
||||
if (intval($id_message) and $t = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message))) { |
||||
$type = $t; |
||||
} |
||||
if (!in_array($type, array('pb', 'affich')) |
||||
// pas de destinataire obligatoire pour un brouillon |
||||
and !_request('draft') |
||||
) { |
||||
$oblis['destinataires'] = 'destinataires'; |
||||
} |
||||
|
||||
if ($d = _request('destinataires')) { |
||||
set_request('destinataires', implode(',', $d)); |
||||
} |
||||
$erreurs = formulaires_editer_objet_verifier('message', $id_message, $oblis); |
||||
if ($d) { |
||||
set_request('destinataires', $d); |
||||
} |
||||
include_spip('inc/messages'); |
||||
if ( |
||||
(!isset($erreurs['destinataires']) or !$erreurs['destinataires']) |
||||
and isset($oblis['destinataires']) |
||||
and $e = messagerie_verifier_destinataires( |
||||
_request('destinataires'), |
||||
array('accepter_email' => ($accepter_email == 'oui')) |
||||
)) { |
||||
$erreurs['destinataires'] = implode(', ', $e); |
||||
} |
||||
|
||||
if (_request('rv') == 'oui') { |
||||
include_spip('inc/date_gestion'); |
||||
$date_debut = verifier_corriger_date_saisie('debut', true, $erreurs); |
||||
$date_fin = verifier_corriger_date_saisie('fin', true, $erreurs); |
||||
|
||||
if ($date_debut and $date_fin and $date_fin < $date_debut) { |
||||
$erreurs['date_fin'] = _T('organiseur:erreur_date_avant_apres'); |
||||
} |
||||
} else { |
||||
set_request('rv', ''); |
||||
} |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_editer_message_traiter_dist( |
||||
$id_message = 'new', |
||||
$type = 'message', |
||||
$retour = '', |
||||
$accepter_email = 'oui', |
||||
$destinataires = '', |
||||
$titre = '', |
||||
$texte = '' |
||||
) { |
||||
// preformater le post |
||||
// fixer le type de message |
||||
// sans modifier le type d'un message existant |
||||
if (intval($id_message) and $t = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message))) { |
||||
$type = $t; |
||||
} |
||||
set_request('type', $type); |
||||
|
||||
// formater les destinataires |
||||
$d = _request('destinataires'); |
||||
if (!$d) { |
||||
$d = array(); |
||||
} |
||||
include_spip('inc/messages'); |
||||
$d = messagerie_nettoyer_destinataires($d); |
||||
// si email non acceptes, extraire les seuls id_auteur de la liste proposee |
||||
if ($accepter_email !== 'oui') { |
||||
// separer id_auteur et email |
||||
$d = messagerie_destiner($d); |
||||
// ne conserver que les id_auteur |
||||
$d = reset($d); |
||||
} |
||||
// reinjecter sous forme de chaine |
||||
set_request('destinataires', implode(',', $d)); |
||||
|
||||
// fixer l'auteur ! |
||||
set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']); |
||||
|
||||
if (_request('rv') == 'oui') { |
||||
include_spip('inc/date_gestion'); |
||||
$erreurs = array(); |
||||
$date_debut = verifier_corriger_date_saisie('debut', true, $erreurs); |
||||
$date_fin = verifier_corriger_date_saisie('fin', true, $erreurs); |
||||
set_request('date_heure', date('Y-m-d H:i:s', $date_debut)); |
||||
set_request('date_fin', date('Y-m-d H:i:s', $date_fin)); |
||||
} else { |
||||
set_request('date_heure'); |
||||
set_request('date_fin'); |
||||
} |
||||
|
||||
// on gere par les traitements standard |
||||
// la diffusion du message se fait par pipeline post_edition sur instituer |
||||
// et notification |
||||
$res = formulaires_editer_objet_traiter('message', $id_message, 0, 0, $retour, ''); |
||||
|
||||
if ($id_message = $res['id_message'] |
||||
and !_request('draft') |
||||
) { |
||||
include_spip('action/editer_objet'); |
||||
objet_modifier('message', $id_message, array('statut' => 'publie', 'date_heure' => _request('date_heure'))); |
||||
// apres en message envoyes, retourner sur la boite d'envoi plutot que sur le message |
||||
if (isset($res['redirect']) |
||||
and ($res['redirect'] == generer_url_ecrire('message', 'id_message=' . $id_message))) { |
||||
$res['redirect'] = generer_url_ecrire('messages', 'quoi=envoi'); |
||||
} |
||||
} |
||||
|
||||
set_request('destinataires', explode(',', _request('destinataires'))); |
||||
|
||||
return $res; |
||||
} |
@ -0,0 +1,13 @@
|
||||
<div class="fake-input clearfix"> |
||||
<span class="selected"> |
||||
[(#REM) Premier element vide et cache qui sert de modele pour le js] |
||||
<span class="dest" style="display: none;"><img |
||||
src='#CHEMIN_IMAGE{supprimer-12.png}' width="12" height="12" onclick="jQuery(this).parent().remove();" /></span> |
||||
<BOUCLE_d(POUR){tableau #ENV{#ENV{name}}}> |
||||
<span class="dest"><input type="hidden" name="#ENV{name}[]" value="#VALEUR" /> |
||||
<BOUCLE_a(AUTEURS){id_auteur=#VALEUR}{tout}>#NOM</BOUCLE_a>#VALEUR<//B_a> <img |
||||
src='#CHEMIN_IMAGE{supprimer-12.png}' width="12" height="12" onclick="jQuery(this).parent().remove();" /></span> |
||||
</BOUCLE_d> |
||||
</span> |
||||
<input type="text" class="text destinataires" data-name="#ENV{name}[]" value="" id="#ENV{name}" /> |
||||
</div> |
@ -0,0 +1,50 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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; |
||||
} |
||||
|
||||
/** |
||||
* Recuperer les champs date_xx et heure_xx, verifier leur coherence et les reformater |
||||
* |
||||
* @param string $suffixe |
||||
* @param bool $horaire |
||||
* @param array $erreurs |
||||
* @return int |
||||
*/ |
||||
function verifier_corriger_date_saisie($suffixe, $horaire, &$erreurs) { |
||||
include_spip('inc/filtres'); |
||||
$date = _request("date_$suffixe") . ($horaire ? ' ' . trim(_request("heure_$suffixe")) . ':00' : ''); |
||||
$date = recup_date($date); |
||||
if (!$date) { |
||||
return ''; |
||||
} |
||||
$ret = null; |
||||
if (!$ret = mktime(0, 0, 0, $date[1], $date[2], $date[0])) { |
||||
$erreurs["date_$suffixe"] = _T('organiseur:erreur_date'); |
||||
} elseif (!$ret = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0])) { |
||||
$erreurs["date_$suffixe"] = _T('organiseur:erreur_heure'); |
||||
} |
||||
if ($ret) { |
||||
if (trim(_request("date_$suffixe") !== ($d = date('d/m/Y', $ret)))) { |
||||
$erreurs["date_$suffixe"] = _T('organiseur:erreur_date_corrigee'); |
||||
set_request("date_$suffixe", $d); |
||||
} |
||||
if ($horaire and trim(_request("heure_$suffixe") !== ($h = date('H:i', $ret)))) { |
||||
$erreurs["heure_$suffixe"] = _T('organiseur:erreur_heure_corrigee'); |
||||
set_request("heure_$suffixe", $h); |
||||
} |
||||
} |
||||
|
||||
return $ret; |
||||
} |
@ -0,0 +1,220 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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 |
||||
|
||||
/** |
||||
* Lister les statuts des auteurs pouvant recevoir un message |
||||
* c'est tous les auteurs au moins redacteur |
||||
* |
||||
* @return array |
||||
*/ |
||||
function messagerie_statuts_destinataires_possibles() { |
||||
include_spip('inc/filtres_ecrire'); |
||||
|
||||
return pipeline('messagerie_statuts_destinataires_possibles', auteurs_lister_statuts('redacteurs', false)); |
||||
} |
||||
|
||||
/** |
||||
* Nettoyer une liste de destinataires |
||||
* |
||||
* @param $destinataires |
||||
* @return array |
||||
*/ |
||||
function messagerie_nettoyer_destinataires($destinataires) { |
||||
foreach ($destinataires as $k => $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)) { |
||||
$destinataires[$k] = intval($id); |
||||
} |
||||
} |
||||
|
||||
return $destinataires; |
||||
} |
||||
|
||||
/** |
||||
* Fonction generique de verification des destinataires |
||||
* lors de l'envoi d'un message ou de recommander |
||||
* un destinataire peut etre un id_auteur numerique |
||||
* ou une adresse mail valide, si l'options accepter_email est true |
||||
* |
||||
* @param array $destinataires |
||||
* @param array $options |
||||
* @return array |
||||
*/ |
||||
function messagerie_verifier_destinataires($destinataires, $options = array('accepter_email' => true)) { |
||||
$erreurs = array(); |
||||
|
||||
$destinataires = messagerie_nettoyer_destinataires($destinataires); |
||||
foreach ($destinataires as $id) { |
||||
if (is_numeric($id)) { |
||||
if (!$id) { |
||||
$erreurs[] = _T('organiseur:erreur_destinataire_invalide', array('dest' => entites_html($id))); |
||||
} |
||||
} else { |
||||
if (!$options['accepter_email'] |
||||
or !email_valide($id) |
||||
) { |
||||
$erreurs[] = _T('organiseur:erreur_destinataire_invalide', array('dest' => entites_html($id))); |
||||
} |
||||
} |
||||
} |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
/** |
||||
* Selectionner les destinataires en distinguant emails et id_auteur |
||||
* |
||||
* @param array $dests |
||||
* @return array |
||||
*/ |
||||
function messagerie_destiner($dests) { |
||||
// separer les destinataires auteur des destinataires email |
||||
$auteurs_dest = array(); |
||||
$email_dests = array(); |
||||
|
||||
$dests = messagerie_nettoyer_destinataires($dests); |
||||
foreach ($dests as $id) { |
||||
if (is_numeric($id)) { |
||||
$auteurs_dest[] = $id; |
||||
} elseif (defined('_MESSAGERIE_EMAIL_GENERAL') and $id != _MESSAGERIE_EMAIL_GENERAL) { |
||||
$email_dests[] = $id; |
||||
} |
||||
} |
||||
if (count($email_dests)) { |
||||
// retrouver les id des emails pour ceux qui sont en base |
||||
$res = sql_select('id_auteur,email', 'spip_auteurs', sql_in('email', $email_dests)); |
||||
$auteurs_dest_found = array(); |
||||
while ($row = sql_fetch($res)) { |
||||
$auteurs_dest_found[] = $row['id_auteur']; |
||||
} |
||||
$auteurs_dest = array_merge($auteurs_dest, $auteurs_dest_found); |
||||
} |
||||
|
||||
return array($auteurs_dest, $email_dests); |
||||
} |
||||
|
||||
/** |
||||
* Diffuser un message par la messagerie interne |
||||
* |
||||
* @param int $id_message |
||||
* @param array $auteurs_dest |
||||
* @return bool|int |
||||
*/ |
||||
function messagerie_diffuser_message($id_message, $auteurs_dest = array()) { |
||||
$out = false; |
||||
if ($id_message = intval($id_message) |
||||
and count($auteurs_dest) |
||||
) { |
||||
include_spip('action/editer_liens'); |
||||
$out = objet_associer(array('auteur' => $auteurs_dest), array('message' => $id_message), array('vu' => 'non')); |
||||
} |
||||
|
||||
return $out; |
||||
} |
||||
|
||||
/** |
||||
* Envoyer un message par mail pour les destinataires externes |
||||
* |
||||
* @param int $id_message |
||||
* @param array $emails_dest |
||||
* @return bool |
||||
*/ |
||||
function messagerie_mailer_message($id_message, $emails_dest = array()) { |
||||
if ($id_message = intval($id_message) |
||||
and count($emails_dest) |
||||
) { |
||||
if ($row = sql_fetsel('titre,texte,id_auteur', 'spip_messages', 'id_message=' . intval($id_message))) { |
||||
$from = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']); |
||||
foreach ($emails_dest as $email) { |
||||
job_queue_add( |
||||
'envoyer_mail', |
||||
'messagerie mail', |
||||
array($email, $row['titre'], array('texte' => $row['texte'], 'from' => $from)), |
||||
'inc/' |
||||
); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* Marquer un message dans l'etat indique par $vu |
||||
* |
||||
* @param int $id_auteur |
||||
* @param array $liste |
||||
* @param string $vu |
||||
* @return void |
||||
*/ |
||||
function messagerie_marquer_message($id_auteur, $liste, $vu) { |
||||
include_spip('action/editer_liens'); |
||||
if (!is_array($liste)) { |
||||
$liste = array($liste); |
||||
} |
||||
// completer les liens qui n'existent pas encore |
||||
// ex : pour marquer lue une annonce, on ajoute le lien d'abord (n'existe pas) |
||||
// puis on le marque 'oui' |
||||
$liens = objet_trouver_liens(array('auteur' => $id_auteur), array('message' => $liste)); |
||||
$l = array(); |
||||
foreach ($liens as $lien) { |
||||
$l[] = $lien['message']; |
||||
} |
||||
objet_associer(array('auteur' => $id_auteur), array('message' => array_diff($liste, $l)), array('vu' => $vu)); |
||||
// puis les marquer tous lus |
||||
objet_qualifier_liens(array('auteur' => $id_auteur), array('message' => $liste), array('vu' => $vu)); |
||||
include_spip('inc/invalideur'); |
||||
suivre_invalideur('message/' . implode(',', $liste)); |
||||
} |
||||
|
||||
/** |
||||
* Marquer un message comme lu |
||||
* |
||||
* @param int $id_auteur |
||||
* @param array $liste_id_message |
||||
*/ |
||||
function messagerie_marquer_lus($id_auteur, $liste_id_message) { |
||||
messagerie_marquer_message($id_auteur, $liste_id_message, 'oui'); |
||||
} |
||||
|
||||
/** |
||||
* Marquer un message comme non lu |
||||
* |
||||
* @param int $id_auteur |
||||
* @param array $liste_id_message |
||||
*/ |
||||
function messagerie_marquer_non_lus($id_auteur, $liste_id_message) { |
||||
messagerie_marquer_message($id_auteur, $liste_id_message, 'non'); |
||||
} |
||||
|
||||
/** |
||||
* Effacer un message recu |
||||
* |
||||
* @param int $id_auteur |
||||
* @param array $liste_id_message |
||||
*/ |
||||
function messagerie_effacer_message_recu($id_auteur, $liste_id_message) { |
||||
messagerie_marquer_message($id_auteur, $liste_id_message, 'poub'); |
||||
} |
@ -0,0 +1,393 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* 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. * |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* Fonctions de quêtes pour les calendriers : obtient les listes |
||||
* des éléments à afficher dans des périodes données |
||||