Le besoin
Le plugin Agenda permet de gérer des évènements. Il peut être utile de récupérer automatiquement des évènements d’un site distant qui fournirait un fichier .ics
[1], afin de proposer un site agrégeant les calendriers de différents sites.
Exemple de cas d’application :
- des séminaires de recherche de plusieurs organismes diffusés sur le même site ;
- un site d’information locale reprenant les évènements des associations et entreprises locales ;
- un site d’association affichant les évènements de ses partenaires.
Note sur la présente documentation
Le présent article documente la version 4.6.0 du plugin.
Configuration requise
Le plugin nécessite les plugins suivants :
- Agenda
- Icalendar
- Saisies
- Champs extra core
Ce plugin permet de s’abonner à un calendrier distant. L’abonnement se fait via la création d’un nouvel objet « Almanach ». Celui-ci est lié à un fichier ics
distant. Le plugin lira régulièrement ce fichier et ajoutera automatiquement des évènements dans la base de données du site SPIP local. Les évènements créés sont du même type que ceux gérés par le plugin Agenda.
Les évènements ainsi ajoutés seront liés :
- à l’almanach ;
- à l’article choisi lors de la création de l’almanach ;
Ce plugin ajoute donc une entrée « Almanachs » au menu « Édition » ainsi qu’un bouton d’ajout rapide d’almanach. Les évènements importés sont liés à ces objets.
La page Almanachs permet de lister les almanachs présents sur le site et de les administrer.
Configuration du plugin
Une fois le plugin installé, il existe deux possibilités de configurer le plugin :
- soit à travers le formulaire accessible à travers le lien de configuration sur la page de gestion des plugins ;
- soit par des constantes PHP mises dans le fichier mes_options.php
– ou dans un fichier options.php
d’un plugin. Ceci permet de déployer rapidement à grande échelle une configuration du plugin [2].
La configuration PHP l’emporte sur la configuration par formulaire.
Voici la liste des paramètres configurables :
- Archiver automatiquement les évènements distants qui ne sont plus présents dans le fichier ics
distant lors de la vérification de celui-ci. En PHP define ('_IMPORT_ICS_DEPUBLIER_ANCIENS_EVTS','on');
.
- Définir l’article par défaut. Pas de constante PHP.
Ajouter un almanach
L’ajout d’un almanach est simple. Il suffit de remplir le formulaire d’ajout dans lequel tous les champs sont obligatoires.
L’url du flux peut être de la forme http ou webcal.
Une fois le formulaire validé, les évènements importés apparaissent dans la page récapitulative de l’almanach. Si ces évènements sont trop nombreux, la liste est paginée. Le plugin récupérera à intervalle régulier la nouvelle version du flux pour mettre à jour la liste des évènements.
A noter :
- si un évènement apparait dans plusieurs flux avec le même uid (identifiant unique distant), il ne sera pas réimporté.
- afin que la reconnaissance de l’heure d’été / d’hiver puisse fonctionner, il est nécessaire que la configuration PHP ait un timezone correspondant à un pays où le changement d’heure est effectué. Vous pouvez utiliser le plugin Timezone si vous ne disposez pas de l’accès à la configuration php.
Supprimer un almanach
Pour supprimer un almanach, le passer en statut « à la poubelle ». Tous les évènements liés sont alors basculés en « à la poubelle ».
Comme pour les articles, SPIP supprime régulièrement les évènements et les almanachs à la poubelle.
Statut des évènements
Les évènements possèdent le statut de l’almanach :
- si l’almanach est publié, les évènements sont automatiquement publiés (modération a posteriori), à condition que l’article lui-même soit publié ;
- si l’almanach est proposé, les évènements sont proposés, et il vous faut les publier manuellement (modération a priori).
Lorsque vous modifier le statut d’un almanach, les évènements voient leurs statuts modifiés.
Lorsque vous modifier le statut d’un article, les évènements et almanachs liés voient leurs statuts modifiés.
Le plugin ajoute également un statut « archivé » aux évènements, pour les évènements qui ne sont plus présents sur le flux distant. Une fois un évènement archivé, il n’est plus jamais désarchivé, sauf intervention manuel d’un
e rédacteur ctrice.Mots-clé
Dans la configuration des mots-clé, vous pouvez activer l’ajout de mots-clés aux almanachs.
Les évènements associés à un almanach reçoivent automatiquement les mots-clé de l’almanach. Si les mots-clé de l’almanach changent, les mots-clé des évènements sont automatiquement modifiés.
Outils pour squelette
Le plugin ajoute le critère {id_almanach}
sur la boucle (EVENEMENTS)
pour sélectionner les évènements liés à un almanach précis.
Usages avancés
Champs extras, adresse, gestion des inscriptions
Depuis la version 3.32.0 du plugin Agenda, le flux ICAL de celui-ci peut transmettre, sous forme de propriété supplémentaire :
- l’adresse (et pas seulement le lieu)
- le nombre de places et s’il faut gérer les inscriptions
- les éventuels champs extras
Pour ce faire il faut definir à true
la constant PHP _EVENEMENT_ICAL_X_PROPERTIES
.
Techniquement, ces champs sont passés dans le flux ICAL sous forme de propriétés préfixées par X. Dans l’exemple ci-dessous, est indiqué l’adresse, le nombre de place, la gestion de la réservation ainsi qu’un champ extra ’public’.
X-ADRESSE:3 place Babel
X-INSCRIPTION:1
X-PLACES:10
X-PLACES-RESERVEES:6
X-PLACES-RESTANTES:4
X-PUBLIC:enfants
Un site SPIP peut abonné à flux distant peut également insérer la valeur de ces champs dans sa base de données depuis la version 4.6.0 du plugin import ICS. Les champs synchronisés sont :
- adresse
- nombre d’inscriptions
- gestion des inscriptions
- champs extra, s’ils existent sur le site receveur, L’identification se base par homonymie. Ainsi dans l’exemple précédent,
X-PUBLIC
alimentera le champpublic
.
Pipeline
Le principe du plugin est de convertir des champs d’un flux ICAL en champ SQL. Le plugin propose des équivalences par défaut. Mais il est possible, depuis la version 4.6.0, de modifier cela, en utilisant le pipeline evenement_ical_to_sql
. Ce pipeline reçoit en argument :
-
data
la valeur des champs SQL qui seront mis en base ; -
args
un tableau regroupant différents paramètres :-
objet_evenement
un objet PHP décrivant l’évènement, généré par la librairie IcalCreator -
decalage
: les infos à propos du décalage horaire pour l’almanach courant -
dtend_inclus
: si leDTEND
est inclus dans l’évènement pour l’almanach courant -
xprops
les propriétés ICAL d’évènements préfixées parX
; qui sont difficiles à récupérer depuisobjet_evenement
-
champs_x
la liste des champs SQL ayant des équivalents potentiels dans les propriétés ICAL préfixées par X (champs extra, gestion des inscriptions, etc).
-
Exemple : pour un site, je souhaite que la synchronisation des évènements récupère dans le champ places
le nombre de places restantes, et non pas le nombre de places totales.
Après avoir déclarer dans paquet.xml
l’emploi du pipeline, je le règle ainsi
function formations_evenement_ical_to_sql($flux = array()) {
if (isset($flux['data']['places'])) {
$flux['data']['places'] = $flux['args']['xprops']['X-PLACES-RESTANTES'];
}
return $flux;
}
Discussions par date d’activité
3 discussions
Bonjour,
J’ai une erreur :
Got error 'PHP message: PHP Fatal error: Uncaught Error: Undefined constant Kigkonsult\\Icalcreator\\Vcalendar::PRIVATE in /home/mutu/web/_mutu/plugins/auto/import_ics/v4.2.1/inc/import_ics.php:75 Stack trace: #0 /home/mutu/web/_mutu/plugins/auto/import_ics/v4.2.1/genie/import_ics_synchro.php(55): importer_almanach() #1 /home/mutu/web/_mutu/ecrire/inc/queue.php(265): genie_import_ics_synchro_dist() #2 /home/mutu/web/_mutu/ecrire/inc/queue.php(360): queue_start_job() #3 /home/mutu/web/_mutu/ecrire/inc/genie.php(98): queue_schedule() #4 /home/mutu/web/_mutu/ecrire/inc/utils.php(1104): inc_genie_dist() #5 /home/mutu/web/_mutu/ecrire/inc/utils.php(1072): cron() #6 /home/mutu/web/_mutu/ecrire/public/aiguiller.php(80): action_cron() #7 /home/mutu/web/_mutu/ecrire/public.php(98): traiter_appels_actions() #8 /home/mutu/web/_mutu/spip.php(20): include('...') #9 {main} thrown in /home/mutu/web/_mutu/plugins/auto/import_ics/v4.2.1/inc/import_ics.php on line 75'
Je ne sais pas quoi faire pour aller plus loin.
corrigé en v6.1.1
Répondre à ce message
Bonjour
Je teste ce plugin en local sur un spip 4.1.10 et j’ai un souci : qaud je veux créer un almanach, la page ecrire/ ?exec=almanach_edit&new=oui ne m’affiche que « Créer un almanach / Sans titre » sans le formulaire de création.
La même page sur un site en ligne en spip 4.2.3 m’affiche bien les éléments du formulaire à compléter.
Je n’arrive pas à trouver d’où cela peut venir. Une piste ?
La comme cela je ne vois pas, mais afficher les erreurs php pourrait aider
Voici l’erreur php affichée :
Fatal error : Array and string offset access syntax with curly braces is no longer supported in /var/www/html/EscalV4/plugins/auto/icalendar/v0.5.10/lib/iCalcreator.class.php on line 1765
Mouais, tu dois plus avoir la même version de PHP en local et en distant.
De toute facon on va faire une mise à jour globale de la librairie. Je t’invite à lire ce fil de discussion et à faire tes tests / réponses là bas.
https://discuter.spip.net/t/import-ics-et-icalendar-besoin-de-tests-pour-nouvelle-version/169940
PHP Version 8.1.2 en local (où j’ai l’erreur) et Version 7.4.33 en distant (où ça fonctionne).
Je vais tester la nouvelle version en local.
Test concluant : la nouvelle version corrige le problème.
Merci Maïeul.
Super,
je sortirait tout cela dans quelques semaines, je veux encore voir ce que cela donne en prod.
Répondre à ce message
Bonjour,
Est-ce que c’est une erreur de ma part, ou est-ce que ce plugin ne gère pas les événements récurrents ?
En effet, j’ai essayé d’importer un agenda qui a été configuré en 2015 avec une date le 14 septembre, répétée chaque année et seule la date de 14/09/2015 est enregistrée.
Je suppose que c’est parce que le plugin Agenda de SPIP ne gère pas les récurrences automatiques.
oui, le plugin ne gère pas la récurrence des evenements, précisement à cause du fait qu’agenda spip ne le gère pas. Il faudrait imaginer un système pour gerer la recurrence jusqu’a une certaine date, mais c’est compliqué et pas évident.
Est-ce qu’il serait imaginable de créer les prochaines répétions jusqu’à +365 jours ?
tout est imaginable, reste à avoir du temps. Mais je pensais plutot à une extension d’agenda qui gérerait la récurrence par date, et crééerai tous seul la recurrence.
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 :
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.
Suivre les commentaires : |