La page de maintenance de cette extension est à cette adresse : http://jean-christophe.dubacq.fr/post/icsfeed.
Présentation
Vous l’aurez compris, le but de cette extension est d’ajouter à Dotclear 2 la capacité de gérer des événements. J’ai voulu faire simple : je ne gère que des événements ponctuels, un lieu, une date, une durée. Si on veut mettre plusieurs événements, il faut les rentrer un par un. Chaque événement est associé à un article (on peut en mettre plusieurs par article) et par défaut apparaîtra flottant à droite de l’article.
Qu’est-ce qui peut être géré ainsi ? Essentiellement, des réunions, des rendez-vous, mais aussi des concerts (pour le blog d’un groupe), des fêtes... Tout n’a pas vocation à avoir un événement associé, j’en conviens. Personnellement, je l’utilise pour diffuser les informations sur les réunions et exposés du laboratoire dans lequel j’effectue ma recherche.
Le transfert de ces informations aux logiciels d’agenda électroniques se fait par un flux ICS, qui est consulté régulièrement par l’agenda pour afficher une liste toujours à jour des événements proposés dans le blog.
Cette extension est livrée avec:
- une interface d’administration
- une possibilité accrue de recherche et d’abonnement ciblée
- une reconfiguration possible de l’apparence des pages HTML et des flux ICS
- Une complétion automatique du nom de lieu par défaut
- un widget d’abonnement pour tous les utilisateurs
- une intégration automatique (pas de template à éditer)
Installation
Utilisez le fichier zippé fourni dans la page de maintenance. La zone d’administration est dans Blog > Événements. On y trouve les préférences globales et une interface pour lister les événements rentrés.
Cette extension
Le principal concurrent est eventdata, qui a sans doute beaucoup de spécifications en commun. Toutefois l’interopérabilité avec les fichiers ICS n’est pas son but principal et ne fonctionne pas très bien, donc je maintiens pour le moment l’existence d’icsfeed. Ce jugement pourrait être revu ultérieurement. Il y avait aussi agendaPlugin, dont je ne connais pas l’étendue ou le développement actuel, mais dont je vois qu’il ne gère pas les flux ICS (ce qui m’intéressait en premier lieu...
La version courante de cette extension est 1.1.0 (local svn 341).
Cette extension est sous la licence GPL version 2.0.
Utilisation
Créer, modifier et supprimer un événement

Dans la page de modification ou rédaction d’un article, dans la colonne de gauche apparaissent des boîtes (une initialement, une plus le nombre d’événements déjà associés ensuite) pour rentrer ou modifier des événements.
Il suffit d’utiliser la boîte du haut pour créer un nouvel événement, et l’une des autres pour modifier un événement. Pour supprimer un événement, il suffit d’effacer son titre. N’oubliez pas d’enregistrer vos modifications !
La date est par défaut la date de publication du poste (et c’est ce qui sera utilisé si le format de date n’est pas correct). Elle correspond au début de l’événement.
La durée doit être rentrée de façon simple: 1h pour 1 heure, 125m pour 125 minutes, 1h30 pour 90 minutes, 2j ou 2d pour 2 jours. Si la durée est un nombre entier de jours, l’événement sera à un format spécial dans les flux ICS (all-day events). Il y a un peu de tolérance sur la façon dont on peut rentrer les durées, mais pas énormément.
Le titre est un aspect important, car c’est ce qui est affiché dans les agendas électroniques. Gardez-le suffisamment court. pour être compris dans un espace restreint.
Quant au lieu, s’il est trop court (un numéro de salle par exemple), il peut être complété automatiquement par une chaîne personnalisée.
Installation du widget

Il suffit d’utiliser le gestionnaire de widgets pour installer le widget « Calendriers ICS » dans l’une de vos barres de navigation. Le widget réagit à certains environnements en proposant un abonnement spécifique à un mot-clé par exemple.
Abonnement spécifique
Les abonnements se font par des adresses qui commencent par icsfeed/. Normalement, l’utilisateur se contente de copier l’adresse fournie par le widget (ou de cliquer sur le lien d’abonnement, ça marche parfois, notamment sur un Mac). Depuis la page d’accueil, on s’abonne à tous les événements du blog.
Toutefois, il est possible de mettre derrière plusieurs « sélecteurs » qui permettent de cibler plus ou moins bien les événements visés. On peut ainsi mettre :
- tag:truc,machin,bidule pour avoir tous les événements associés à des articles étiquetés par truc ou machin ou bidule.
- cat:8 pour avoir tous les événements associés à des articles de la catégorie 8 (pas pratique, je sais).
- lang:fr pour avoir tous les événements associés à des articles en français.
- et d’autres trucs bizarres qui ne servent probablement pas (mais plain:all peut aider à deboguer si on se pose des questions).
- on finit en général par un nom de fichier (n’importe lequel) qui se finit en .ics (les programmes sont bêtes, parfois).
Personnalisation
Pour changer la façon dont les noms de lieu sont complétés, rendez-vous dans l’interface d’administration, rubrique « Événements ». En haut vous trouverez trois champs à remplir (que j’espère suffisamment explicite). On peut compléter de façon différente dans un flux ICS car si on met une adresse suffisamment précise (trop longue pour être mise dans le petit encadré en HTML), beaucoup de logiciels d’agenda peuvent s’interfacer avec une carte électronique et pointer l’endroit du rendez-vous.
Pour changer le texte des événements dans les pages HTML, il suffit de mettre dans votre thème (dans le répertoire tpl/) un bout de code HTML nommé _events.html qui remplacera le code fourni par défaut. Pour changer non pas le texte, mais juste l’apparence, il suffit de contredire les règles CSS incluses par défaut (par exemple en mettant comme sélecteurs body #content .event. Il n’est pas prévu de changer l’apparence du widget.
L’intégration aux thèmes se fait par l’utilisation du comportement publicEntryBeforeContent. Si votre thème ne contient pas ça (s’il date d’avant Dotclear 2.0RC1 par exemple), il faut alors le modifier pour y insérer là où vous voudrez {{tpl:include src="_events.html"}}.
Pour ce qui est de savoir quelles sont les nouvelles « fonctions » apportées par l’extension, je les liste ici : EntryEvents est une boucle sur tous les événements d’un article, et pour le reste c’est auto-descriptif : EventDateTime, EventTitle, EventICS, EventDuration, EventLocation.
Un truc pratique...
Attention, la manœuvre décrite est facultative, mais j’ai vu des gens qui la demandaient expressément ! Pour bien utiliser cette extension, il est assez pratique de changer l’ordre d’affichage des billets pour mettre d’abord les billets à venir, du plus proche au plus lointain, puis ensuite les billets passés (du plus récent au plus ancien). Pour celà, deux (ou trois) interventions manuelles sont nécessaires manuellement :
- D’abord, une petite modification de Dotclear (dans le source, carrément). Il faut changer autour de la ligne 992 le fichier inc/public/class.dc.template.php (ajoutez la ligne précédée d’un + dans l’extrait suivant, sans le + devant bien sûr) :
--- inc/public/class.dc.template.php (révision 1849)
+++ inc/public/class.dc.template.php (copie de travail)
@@ -992,6 +992,7 @@
case 'selected' : $sortby = 'post_selected'; break;
case 'author' : $sortby = 'user_id'; break;
case 'date' : $sortby = 'post_dt'; break;
+ case 'futurepast' : $sortby = 'SIGN(DATEDIFF(post_dt,NOW())+1) DESC, ABS(DATEDIFF(post_dt,NOW()))'; break;
}
}
if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) {
<Entries> pour les remplacer par <Entries sortby="futurepast" order="asc"><tpl:FutureHeader><p class="subdivision">{{tpl:lang Future posts}}</p></tpl:FutureHeader>
<tpl:PastHeader><p class="subdivision">{{tpl:lang Past posts}}</p></tpl:PastHeader>
Pour signaler un bug ou aider cette extension
Le mieux est de me contacter par courrier (pour un bug) ou de laisser un commentaire (pour dire que vous avez testé cette extension). En cas de mise à jour, je modifierai ce billet.
Liste des changements
Note : ce journal est non-exhaustif, généré automatiquement, en anglais, et sans doute non-informatif avant 2009.
- Local SVN release 341 (jcdubacq,2009-04-22)
- Fix stupid typo in licence block
- Local SVN release 338 (jcdubacq,2009-04-22)
- New layout for documentation
- Change licence to GPL version 2.0
- Local SVN release 200 (jcdubacq,2008-07-20)
- Update documentation, fix licence
- Local SVN release 199 (jcdubacq,2008-07-20)
- Reindent and fix licence blob
- Local SVN release 180 (jcdubacq,2008-06-29)
- Add RC_PATH test
- Local SVN release 168 (jcdubacq,2008-05-06)
- Order plugins and themes
- Local SVN release 140 (jcdubacq,2008-05-02)
- Update version of icsfeed ; prepare posting
- Local SVN release 42 (jcdubacq,2008-02-08)
- Final version
- Local SVN release 30 (jcdubacq,2008-01-30)
- Adding project dotclear/icsfeed
Travail restant à faire
- Compatibilité avec PostgresQL à tester absolument.
- Indications sur Entries pour trier les articles selon les événements, en éliminant la deuxième occurrence d’un événement...
- Ajout de plusieurs événements d’un coup
- Suppression d’événements plus naturelle
- Édition du patron de présentation d’événement
- Image associée à chaque événement
- Gestion d’un type d’événement
