File "quete_calendrier_prive.php"
Full path: /home/argothem/www/v4_old/fichiers_obsoletes_20220627_043105/plugins-dist/organiseur/action/quete_calendrier_prive.php
File size: 5.26 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2020 *
* 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;
}