Ça fait un moment que l'on entend parler d'agendas ou de calendriers partagés, notamment avec l'apparition de Google Agenda (ou Google Calendar). Le principe est simple : vous maintenez votre agenda personnel, avec vos rendez-vous, vos disponibilités ; cet agenda permet – en utilisant plusieurs protocoles dont l'e-mail – de fixer des rendez-vous avec d'autres utilisateurs d'agendas numériques ; vous rendez public votre agenda (ce qui ne veut pas dire que tout est public : vous pouvez définir certains évènement comme confidentiels, la seule informations publique sera que vous n'êtes pas disponible à ce moment-là) ; vous vous abonnez à / consultez sur le web d'autres agendas publics, pour voir les disponibilités d'une personne donnée, où les évènements concernant un sujet.

Le fait que l'agenda soit public implique qu'il soit disponible via un serveur Internet. Deux possibilités : ou votre agenda est hébergé sur un serveur dont vous pouvez maîtriser le contenu, l'accès, le fonctionnement (ce qui est – plus ou moins – le cas avec un hébergement qui vous appartient, et en y installant des logiciels que vous contrôlez, à savoir que vous installez et configurez vous et dont le code source est ouvert), ou vous utilisez une plate-forme qui se charge de la partie technique pour vous. Cette second possibilité a l'inconvénient que vous ne contrôlez pas ce qui est fait de vos données. Mais quelle importance – me direz-vous – puisque ces données sont destinées à être publiques ? Justement, pas toutes. Je doute que vous ayez envie de publier tous les détails de votre vie sur Internet. Votre agenda, comme je l'ai dit plus haut, peut contenir des évènements confidentiels ou privés, et qui dont la teneur ne sera pas publique. Mais l'éventuel prestataire auquel vous allez confier vos données y aura accès.

C'est pourquoi, alors que l'envie subite de mettre en place une solution d'agenda m'a pris ce soir, j'ai décidé de tirer un trait sur Google Agenda et consorts. Ayant tout de même un compte Gmail, j'ai activé l'agenda, car je connais un certain nombre de personnes qui l'utilisent, et je voulais m'assurer d'une compatibilité la plus complète avec ce service.

Restait à choisir les solutions logicielles. J'ai préféré choisir d'avoir un client logiciel pour l'édition d'agenda et une application serveur qui se contente de mettre à disposition sur le web l'agenda (et éventuellement servir pour centraliser l'agenda et permettre l'édition depuis plusieurs clients). En matière d'agendas, le standard est le format ouvert iCalendar. J'ai donc choisi des solutions implémentant ce format. Voici les logiciels sur lesquels mon choix s'est porté :

Mozilla Calendar ‑ Lightning

Le projet Mozilla Calendar vis à créer un logiciel de gestion d'agendas libre et multi-plateforme. Ce logiciel est disponible sous deux formes, Mozilla Sunbird, une application unique, et Mozilla Lightning, une extension pour Mozilla Thunderbird. Utilisant ce dernier logiciel, j'ai choisi Lightning.

Attention : ces logiciels, en version 0.5 au moment où j'écris ces lignes, ne sont pas considérés comme stables.

Lightning propose une interface classique d'agenda, ni trop surchargée, ni trop légère. La création d'évènements s'effectue par simple cliqué-glissé, les possibilités de détailler, classer et organiser les évènements sont assez nombreuses. De plus, on peut ajouter les adresses e-mail des participants à un évènement et leur envoyer une invitation. À ce titre, l'intégration dans Mozilla Thunderbird est très bonne, puisque les mails contenant des invitations sont automatiquement détectés – tels les mails chiffrés ou signés avec Enigmail – et un bandeau propose d'ajouter l'évènement en question dans son propre agenda (ce que ne propose pas Gmail, pourtant associé à Google Agenda).

Capture d'écran du bandeau d'invitation.

Cependant, cette version est encore en développement, et elle possède encore quelques défauts de jeunesses. Il arrive que les évènements ne soient plus affichés, et qu'un redémarrage du logiciel soit nécessaire. Je regrette aussi que lors de la modification d'un évènement, les participants dont les adresses mail ont été entrées n'en soit pas automatiquement averti – ce qui est le cas dans Google Agenda, par exemple. Mais le plus génant – à mon avis – est que les agendas distants ne soient pas accessibles hors-ligne (du moins Lightning est complètement bugué sur ce point). Un cache comme Thunderbird le fait pour l'IMAP serait formidable !

À noter, pour ceux qui désirent utiliser Lightning avec Google Agenda, qu'il existe une extension pour cela : Provider for Google Calendar.

PHP iCalendar

PHP iCalendar est un logiciel libre qui permet de gérer et d'afficher un agenda iCalendar sur votre espace web. Il ne permet pas d'éditer les agendas, ne possède pas d'AJAX et n'est donc pas un équivalent à Google Agenda. Il doit s'utiliser en complément d'un client logiciel, tel que Mozilla Calendar.

Cependant, PHP iCalendar permet d'afficher un ou plusieurs agendas de façon agréable, d'effectuer des recherches, d'obtenir un résumé prêt à imprimer, de s'abonner à des fils de syndication, de restreindre l'accès à certains agenda à des utilisateurs authentifier, et bien sûr d'héberger votre agenda.

J'ai installé PHP iCalendar sur mon serveur web. Vous pouvez dors et déjà consulter mon agenda partagé. Cependant l'installation n'a pas été aussi facile que la documentation le décrit, aussi vais-je détailler les étapes que j'ai parcouru.

Faire fonctionner Mozilla Lightning et PHP iCalendar ensemble

Après avoir installé Mozilla Lightning et PHP iCalendar (en suivant la documentation, et notamment la page sur la configuration), si l'on suit les instructions de la méthode publish.php avec les compléments disponibles sur la page consacré à MacOS X (et qui sont indépendants du système d'exploitation, on se retrouve avec un problème d'authentification. Pour indication, la méthode publish.php permet d'éviter de passer par WebDAV ou par un accès FTP pour synchroniser votre agenda.

Voici donc la méthode pour faire fonctionner PHP iCalendar en passant par le fichier publish.php pour la synchronisation de l'agenda :

  1. Le fichier publish.php doit se trouver dans le dossier où seront stockés vos agendas (fichiers *.ics). J'ai choisi de garder le dossier par défaut, calendars.
  2. Vérifiez (via votre client FTP/SSH) que ce dossier est bien accessible en écriture pour les scripts PHP.
  3. Activez l'option publication du style WebDAV (par opposition au vrai WebDAV) dans votre fichier config.inc.php :

    $phpicalendar_publishing = '1';

    (Les étapes suivantes sont adaptées du post de dyfrin sur le forum de PHP iCalendar.)

  4. Créez dans le dossier des agendas un fichier .htpasswd.
  5. Utilisez un des nombreux générateurs de fichiers .htpasswd. Entrez-y un nom d'utilisateur et un mot de passe, et copiez la ligne fournie dans le fichier .htpasswd que vous venez de créer.
  6. Créez un fichier .htaccess toujours dans le même dossier. Placez-y le contenu suivant :
    <Files publish.php>
    
    AuthUserFile /chemin/absolu/du/fichier/.htpasswd
    AuthGroupFile /dev/null
    AuthName CalendarPublish
    AuthType Basic
    
    <limit PUT>
    require valid-user
    </Limit>
    
    <limit GET>
    require valid-user
    </Limit>
    
    </Files>
    

    Cela va restreindre l'accès au fichier publish.php aux utilisateurs définis dans .htaccess. (Attention, je ne suis pas un guru des .htaccess, d'aucuns me corrigeront peut-être.)

  7. Ouvrez Lightning. Ouvrez Fichier > Nouveau > Agenda. Choisissez un agenda disponible sur le réseau, au format iCalendar.
  8. Entrez une adresse de la forme : http://example.com/phpicalendar/calendars/publish.php/mon_agenda.ics

    mon_agenda.ics est le nom de votre futur agenda public.

  9. Validez, entrez quelques évènements, et admirez le résultat.

Pour finir...

Vous pouvez désormais utiliser votre agenda tel un utilisateur de Google Agenda, mais libre. Si un utilisateur de Google Agenda souhaite ajouter votre agenda dans son interface, il lui suffit de récupérer l'adresse de votre fichier *.ics (un clique-droit sur le lien télécharger de PHP iCalendar, par exemple). Ensuite, il a la possibilité d'ajouter cette adresse en tant qu'agenda.

Et de même, vous pouvez ajouter dans Lightning des agendas de Google Agenda, via Fichier > Nouveau > Agenda. L'adresse a y coller est celle obtenue, dans Google Agenda, en allant dans les détails d'un agenda, et en copiant l'adresse disponible sur le bouton iCal. En fouillant le moteur de recherche d'agenda, on peut même trouver des agendas intéressants... à ajouter dans Lightning. Deux exemples (avec l'adresse iCal, pour ceux qui n'ont pas de compte chez Google) :

C'est tout pour aujourd'hui ! Je vais aller ajouter un évènement dormir à mon agenda...