Plugin iCalendar

Libraire iCalcreator

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.

Utilisation avec les itérateurs de SPIP

Vous pouvez alors utiliser le plugin avec 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_vacances(DATA)
{source ics, https://fr.ftp.opendatasoft.com/openscol/fr-en-calendrier-scolaire/Zone-A.ics}
{par dtstart/str}
{description/0/value != ''}
{dtend/str>=#GET{today}}
{dtstart/str<=#GET{nextyear}}
>
	<h3>#VALEUR{description/0/value}</h3>
	<dt>
	[(#SET{date,#VALEUR{dtstart/str}})]
	[(#GET{date}|jour) ][(#GET{date}|nom_mois)][ (#GET{date}|annee{#_zone0:VALEUR})]
	[(#SET{date,#VALEUR{dtend/str}})]
	[ &mdash; (#GET{date}|jour) ][(#GET{date}|nom_mois)][ (#GET{date}|annee{#_zone0:VALEUR})]
	</dt>
	[<dd>(#VALEUR{summary/0/value})</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/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.

 

Trouvailles

Si vous utilisez ce plugin, n’hésitez pas à partager vos trouvailles dans le forum ci-dessous.

modèle « prochainement »

C’est ce qu’à fait Jérome. Dès lors, le plugin propose désormais un modèle simple sous modeles/prochainement.html. Il récupère un flux iCal et retourne les événements futurs.

Insérez ce modèle comme tout autre (voir http://www.spip.net/fr_article3454.html) en lui passant un paramètre ics pointant vers l’url d’un flux ical. Par exemple : <prochainement|ics=http://www.demosphere.eu/events.ics> pour afficher les événements à l’agenda de Démosphère dans un texte. Ou encore [(#MODELE{prochainement}{ics=http://www.demosphere.eu/events.ics})] dans un squelette.

Discussion

Une discussion

  • 3

    Je rencontre un soucis en important, via import_ics le flux d’événements de mon compte facebook.
    Pour certaines pages que je suis (du verbe suivre),, l’import se passe normalement et les modifications de l’événéments sont préservées.
    Pour d’autres pages, les événements sont systématiquement écrasés, alors même qu’ils ne semble pas subir de modification.

    Auriez-vous des suggestions pour débusquer la raison de cette différence de comportement ?

    • Il vaudrait mieux poser la question sur import ics.

      Mais globalemenent il faudrait voir s’il n’y a pas des problèmes dans le flux ICS fournit par FB ; Par exemple des dates de modifs incorrects/des sequence incorrect.

    • J’avoue que je ne sais pas forcément comment déterminer ce qui est conforme ou pas. Tu aurais un doc sur la façon de voir cela ?

    • La norme c’est la RFC du formal ICAL que tu peux trouver facilement.

      Mais peu de gens respectent la norme, donc le plugin icalendar utilise différenrs contournement selon les différents écarts constatés à la norme.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom