Browse Source

Report de r68389 : mise en fonction de code pouvant être réexploité par des plugins.

svn/root/tags/plugins/organiseur/0.8.8 v0.8.8
marcimat@rezo.net 10 years ago
parent
commit
b9504f30b5
  1. 142
      action/quete_calendrier_prive.php
  2. 2
      paquet.xml

142
action/quete_calendrier_prive.php

@ -35,59 +35,21 @@ function action_quete_calendrier_prive_dist(){
$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));
foreach(array('publication','rv') as $q){
$entier = $duree = array();
switch($q){
case 'rv':
if (!$quoi OR $quoi=='rv')
$duree = quete_calendrier_interval_rv(reset($limites), end($limites));
break;
case 'publication':
if (!$quoi OR $quoi=='publication')
list($entier,) = quete_calendrier_interval($limites);
break;
}
// la retransformer au format attendu par fullcalendar
// facile : chaque evt n'est mentionne qu'une fois, a une date
foreach($entier 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'],
);
}
}
// ici il faut faire attention : un evt apparait N fois
// mais on a son id
$seen = array();
foreach($duree as $amj=>$l){
foreach($l as $id=>$e){
if (!isset($seen[$e['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' => str_replace('&','&',$e['URL']),
'className' => "calendrier-event ".$e['CATEGORIES'],
'description' => $e['DESCRIPTION'],
);
$seen[$e['URL']] = true;
}
}
}
// 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(
@ -117,3 +79,83 @@ function convert_dateical($dateical){
}
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
*
* @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 $amj=>$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;
}

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="organiseur"
categorie="date"
version="0.8.7"
version="0.8.8"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/calendrier-32.png"

Loading…
Cancel
Save