Le plugin icalendar contient la librairie iCalcreator de Kjell-Inge Gustafsson (disponible sur le site http://www.kigkonsult.se/iCalcreator/ en licence GNU/GPL 2.1 ou ultérieure). Cette librairie permet notamment d’écrire et de lire des fichiers au format iCalendar (RFC 2445). C’est le format d’échange qu’utilisent la plupart des logiciels de calendrier, qu’ils soient « de bureau » ou « en ligne ». Vous pouvez utiliser ce plugin pour exploiter la librairie en PHP.
Mais le plus intéressant de ce plugin est peut-être le format qu’il offre pour la boucle (DATA) (cf. Les Itérateurs pour SPIP 2.1).
Avec ce format il devient possible de boucler sur les événements d’un calendrier géré depuis un logiciel spécialisé, ou publié sur un site internet.
Voici un exemple de boucle en faisant usage.
Boucle :
<BOUCLE_vacances(DATA)
{source ics, http://media.education.gouv.fr/ics/Calendrier_Scolaire_Zone_B.ics}
{par dtstart/str}
>
<dt>
[(#SET{date,#VALEUR{dtstart/str}})]
[(#GET{date}|jour) ][(#GET{date}|nom_mois)]
[(#SET{date,#VALEUR{dtend/str}})]
[ — (#GET{date}|jour) ][(#GET{date}|nom_mois)]
</dt>
<dd>[(#VALEUR{summary/value}|replace{- Zone.*$})]</dd>
</BOUCLE_vacances>Résultat :
- 18 décembre — 3 janvier
- Vacances de Noël
- 19 février — 7 mars
- Vacances d'hiver
- 16 avril — 2 mai
- Vacances de printemps
- 2 juillet — 5 septembre
- Vacances d'été
- 22 octobre — 3 novembre
- Vacances de la Toussaint
(Une fois le plugin installé, vous pouvez visualiser l’adresse spip.php?page=demo/iterateurs&demo=iter_icalendar pour une version élaborée de cet exemple.)
Données accessibles
Comme le montre l’exemple ci-dessus, la date de début de chaque événement se trouve au format YYYY-MM-DD hh:mm:ss dans le datapath (chemin XPath) dtstart/str.
Pour aller plus loin on peut aussi récupérer l’année, le mois etc. dans les variables dtstart/value/year, dtstart/value/month et dtstart/value/day, dtstart/value/hour, dtstart/value/min, dtstart/value/sec et dtstart/value/tz (time zone).
La date de fin figure, de même, dans le tableau dtend ; la définition du format ics veut que, lorsque l’événement dure une journée entière, dtend soit la date du lendemain (autrement dit, on indique mardi à 00h00 plutôt que lundi à 23h59).
Pour trier par date de début de l’événement, on utilisera :
{par dtstart/str}.
Le résumé (titre) de l’événement se trouve dans summary/value.
Les données possibles sont nombreuses ; pour les explorer dans une boucle icalendar, il suffit d’indiquer [<pre>(#VALEUR|print_r{1})</pre>]. On voit alors apparaître un enregistrement complet, où l’on peut lire le datapath de chaque élément.
Par exemple, le code ci-dessous indique que le contenu du champ description peut s’obtenir via #VALEUR{description/0/value} :
[description] => Array
(
[0] => Array
(
[value] => Vacances d'hiver
[params] =>
)
)En procédant ainsi on peut trouver notamment :
— created : date de création de l’événement dans le calendrier ;
— lastmodified : date de mise à jour de l’événement ;
— location/value : lieu de l’événement ;
— uid/value : identifiant unique de l’événement ;
— rrule/0/value/FREQ : fréquence de récurrence (pour les événements se répétant à intervalle défini)
— etc.
Si vous utilisez ce plugin, n’hésitez pas à partager vos trouvailles dans le forum ci-dessous.



icalendar.zip
Vos commentaires
# Le 9 février à 01:53, par erational
En réponse à : Plugin iCalendar
Bonjour Fil,
Est ce que tu crois qu’il serait possible de partir de ce plugin pour réaliser un plugin d’import d’iCal vers le plugin Agenda (à la manière qu’une syndication de sites) ?
# Le 9 février à 07:21, par Fil
En réponse à : Plugin iCalendar
Il y a certainement une bonne base de travail, oui, mais il faut voir précisément ce que signifie « importer » ; est-ce en une fois, ou en continu (avec des problématiques de rendez-vous qui changent d’heure etc)
Répondre à ce message
# Le 4 octobre 2011 à 10:19, par Stéphane Santon
En réponse à : Plugin iCalendar
Bonjour,
J’ai dû trouver un bug dans ics_to_array.php :
function inc_ics_to_array($u) {[...]
$table_valeur = function_exists('Iterateurs_table_valeur')
? 'Iterateurs_table_valeur' : 'table_valeur';
[...]
$date = $table_valeur($w, "/value");
$date renvoie toujours 0000/00/00 00:00:00 si le plugin iterateurs n’est pas installé.
# Le 8 octobre 2011 à 08:41, par Stéphane Santon
En réponse à : Plugin iCalendar
Bon en fait c’est très bizarre,
j’ai installé le plugin Iterateurs, et un coup sur2 à peu près, les champ date en [str] me renvoient 0000-00-00 00:00:00 bien que les champs individuels de date soient correctement remplis...
Répondre à ce message
# Le 27 septembre 2011 à 09:29, par Stéphane Santon
En réponse à : Plugin iCalendar
Bonjour,
En php, quand on a le résultat issu de la fonction inc_ics_to_array, comment récupère-t-on une donnée de l’événement ?
J’ai trouvé ceci, mais y a-t-il plus simple, avec un XPath par exemple ?
$laEvent = inc_ics_to_array( $lsEvent);echo $laEvent[0]->description[0][value];
[[
]]
Répondre à ce message
# Le 5 janvier 2011 à 07:51, par Boyquotes
En réponse à : Plugin iCalendar
Bonjour,
Merci ( pour les itérateurs en général ), il est noté dans cet article :
Donne une erreur 404, j’ai regardé vite fait le plugin ce serait plutôt :
/demo/iter_icalendar.html
mais ça donne rien non plus.
PS/ La page de démo des itérateurs fonctionne correctement.
Nicolas.
# Le 5 janvier 2011 à 07:58, par Boyquotes
En réponse à : Plugin iCalendar
Petite précision, je suis en php 5.2, spip 2.2.0-dev SVN [15979], si je copie/colle le code de la boucle ci-dessus, j’obtiens bien les informations mais le code à l’air « de sauter » vers replace :
extrait.
1er septembre(Rentrée scolaire des enseignants - Zone B|replace{- Zone.*$})
2 septembre
(Rentrée scolaire des élèves - Zone B|replace{- Zone.*$})
25 octobre — 6 novembre
C’est mon copié/collé qui à déconné ou bien ?
Merci,
Nicolas.
# Le 5 janvier 2011 à 09:27, par Fil
En réponse à : Plugin iCalendar
j’ai corrigé le code et le lien vers la démo
merci
Répondre à ce message