Calendrier

From Tmplab

Basé sur le système mis en place par le loop [1] nous avons mis en place un calendrier basé sur les solutions libres Davical et Caldavzap.

Cet article présente le fonctionnement du système et le processus d'installation.


Fonctionnement et accès

Le calendrier public est accessible sur http://calendar.tmplab.org/public en lecture seule.

Pour s'abonner au calendrier via le protocole CALDAV l'URL http://calendrar.tmplab.org/public.php/public/calendar


Installation

Afin d'avoir les dernières versions, les logiciels sont installés via les sources.

. Davical [2]

. Caldavzap [3]

Les problèmes rencontrés lors de l'installation ont été les suivants :

- Davical : Classe invalide qu'il a fallu patcher à la main

- Davical : Compréhension du système des droits et des calendriers

- Caldavzap : Compréhension et réglage du fichier de configuration

L'installation commence par le logiciel Davical qui est le gestionnaire des utilisateurs et des calendriers.

Davical

Problème de librairie


Davical a une dépendance envers une librairie nommée awl dont le dépôt est [4]

Cette librairie est disponible dans apt mais une fois encore on l'installe depuis les sources (dans /usr/share/awl dans notre cas) et on ajoute dans le fichier index.php une ligne

   set_include_path( get_include_path().":./inc:/usr/share/awl:/usr/share/awl/inc");


Il a fallu également ajouter les lignes suivantes dans le fichier /usr/share/awl/inc/AwlDatabase.php, ligne 61 dans notre cas

 // Missing from lib !
 const HttpDateFormat="'Dy, DD Mon IYYY HH24:MI:SS \"GMT\"'";


Compréhension du système des droits et des calendriers

Une fois davical et avec l'accès admin, on accède à l'interface qui est tout sauf intuitive.

Le fonctionnement de DAViCal est compliqué. Tout est basé sur des "principals", qui sont de type User, Resource ou Group.

Dans notre cas, nous avons fini avec 3 comptes Users ( le compte Admin, un compte pour les membres du /tmp/lab et un compte Caldavzap pour l'accès web ) et une Resource ( le calendrier public ) et enfin un calendrier privé associé au compte pour les membres.

Nous avons donné sur le calendrier public un accès en lecture seule au compte Caldavzap et un accès en écriture / lecture au compte des membres.


Caldavzap

On a créé un dossier pour héberger CaldavZap dans lequel on a décompressé l'archive

 /var/www/alternc/t/tmplat/davical/htdocs/public 


Compréhension et réglage du fichier de configuration

Le fichier de configuration de Caldavzap est entré dans la galerie des pires fichiers de configuration jamais distribués.

Il faut comprendre que la configuration par défaut fournie par CaldavZap marche "out of the box" dans cette configuration, sauf qu'elle ne permet pas d'accéder au calendrier sans mot de passe ce qui est une des fonctionnalités recherchées.

Il faut comprendre que les trois directives globalAccountSettings, globalNetworkCheckSettings et globalNetworkAccountSettings sont incompatibles entre elles !

Pour la partie publique

Dans ce cas, on a commenté la ligne

             //var globalNetworkCheckSettings={href: 'http://lion.server.com:8008/principals/users/', hrefLabel: null, crossDomain: null, additionalResources: [], forceReadOnly: null, withCredentials: false, showHeader: true, settingsAccount: true, syncInterval: 60000, timeOut: 30000, lockTimeOut: 10000, delegation: false, backgroundCalendars: [], ignoreAlarms: false}

et ajouté ces lignes

           var globalAccountSettings = 
               [
                   {
                       href: 'http://calendar.tmplab.org/caldav.php/caldavzap/', 
                       hrefLabel: null, 
                       crossDomain: null, 
                       forceReadOnly: null, 
                       withCredentials: false, 
                       showHeader: true, 
                       settingsAccount: true, 
                       checkContentType: true, 
                       userAuth: {userName: 'caldavzap', userPassword: 'nopassword'}, 
                       syncInterval: 60000, 
                       timeOut: 30000, 
                       lockTimeOut: 10000, 
                       delegation: false, 
                       ignoreAlarms: false, 
                       backgroundCalendars: []
                   },
                   {
                       href: 'http://calendar.tmplab.org/caldav.php/public/', 
                       hrefLabel: null, 
                       crossDomain: null, 
                       forceReadOnly: null, 
                       withCredentials: false, 
                       showHeader: true, 
                       settingsAccount: false, 
                       checkContentType: true, 
                       userAuth: {userName: 'caldavzap', userPassword: 'nopassword'}, 
                       syncInterval: 60000, 
                       timeOut: 30000, 
                       lockTimeOut: 10000, 
                       delegation: false, 
                       ignoreAlarms: false, 
                       backgroundCalendars: []
                   }
               ];

Pour la partie privée

On a mis une autre instance avec une configuration par défaut, dans laquelle on a juste ajouté dans le paramètre additionalResources la chaîne "public" pour signifier qu'il faut charger le calendrier public

           var globalNetworkCheckSettings={href: location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: )+location.pathname.replace(RegExp('/+[^/]+/*(index\.html)?$'),)+'/caldav.php/', hrefLabel: null, crossDomain: null, additionalResources: ['public'], forceReadOnly: null, withCredentials: false, showHeader: true, settingsAccount: true, checkContentType: true, syncInterval: 60000, timeOut: 30000, lockTimeOut: 10000, delegation: false, ignoreAlarms: false, backgroundCalendars: []}