Import ics et icalendar : besoin de tests pour nouvelle version

Bonjour à toutes et tous,

je suis en train de travailler sur une nouvelle version des plugins « icalendar » et « import ics » et j’aurais besoin de personne pour tester (mais tests en local sont plutot concluants).

Je ping @RealET @chankalan @Philippe_Boussin qui sont je sais des utilisateurices de certains de ces plugins.

Et j’explique donc le pourquoi et le quoi

Le pourquoi

La libraire Icalcreator qui était inclus dans le plugin icalendar était dans une version ancienne, pas maintenu, etc. A chaque maj PHP il fallait faire nous même à la main les modifications.

Or il se trouve que la librairie est tjr maintenu, mais ailleurs.

Du coup :

  • une branche v1 du plugin icalendar avec la librairie à jour, et la possibilité de suivre plus facilement les maj grace à composer
  • pas mal d’adaptation à faire sur les squelettes et le plugin import_ics qui utilisait la librairie
  • Dans tous les cas les nouvelles versions nécessite (SPIP 4.1 + PHP 8) OU (SPIP 4.2, qui intègre un polyfill PHP 8).

Le comment tester

Si vous avez fait vos propres devs

Comme dit la librairie est plus à jour, plus robuste, plus strict aussi… on va vers du meilleurs, mais ca nécessite des changements.

Explications des principaux changement :

Merci pour vos retours

Hello

Tests en local sur un spip 4.1.10 et php 8.1.2

  1. Avec les plugins des branches master
    quand 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.
    erreur php : 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

  2. Avec les plugins des branches à tester
    le formulaire s’affiche bien mais à la validation du formulaire, j’ai une page blanche
    erreur php :
    Warning: Trying to access array offset on value of type null in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/formulaires/editer_almanach.php on line 112

Warning: Trying to access array offset on value of type null in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/formulaires/editer_almanach.php on line 113

Warning: Trying to access array offset on value of type null in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/formulaires/editer_almanach.php on line 114

Warning: Trying to access array offset on value of type null in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/formulaires/editer_almanach.php on line 115

Fatal error: Uncaught Error: Class « vcalendar » not found in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/inc/import_ics.php:40 Stack trace: #0 /var/www/html/EscalV4/plugins/import_ics-master/import_ics/formulaires/editer_almanach.php(141): importer_almanach() #1 /var/www/html/EscalV4/ecrire/public/aiguiller.php(289): formulaires_editer_almanach_traiter_dist() #2 /var/www/html/EscalV4/ecrire/index.php(71): traiter_formulaires_dynamiques() #3 {main} thrown in /var/www/html/EscalV4/plugins/import_ics-master/import_ics/inc/import_ics.php on line 40

Edit : A noter que l’almanach est bien créé mais non publié et que la tentative de mettre à jour l’almanach aboutit à la même erreur.

  1. C’est normal puisque justement les branches de dev visenet à aller vers une compat PHP 8.
  2. Par contre le second je pense que tu as du prendre la mauvaise branche sur import_ics, et que tu es tjr sur master et pas sur v8

Tu as raison, je n’avais pas pris la bonne version d’import_ics. Cela fonctionne parfaitement avec la nouvelle version. de dev. Merci encore une fois Maïeul !

Merci @J-C

j’attend d’autres retours, et si pas de retours en fin de semaine je merge et release.

Bonjour,

J’ai testé avec un flux de messe Info (comme il y a une clé d’API, je ne peux pas le mettre ici, mais en MP si besoin).

En soumettant le flux, j’ai eu :


Fatal error: Uncaught InvalidArgumentException: Invalid email mailto:http://messes.info/communaute/av/84/jonquieres in C:\laragon\_spipmu4_\plugins\_plugin_spipmu_prod_\plugins\icalendar\vendor\kigkonsult\icalcreator\src\Util\CalAddressFactory.php on line *84*
( ! ) InvalidArgumentException: Invalid email mailto:http://messes.info/communaute/av/84/jonquieres in C:\laragon\_spipmu4_\plugins\_plugin_spipmu_prod_\plugins\icalendar\vendor\kigkonsult\icalcreator\src\Util\CalAddressFactory.php on line *84*
Call Stack
# Time Memory Function Location
1 0.4042 377680 {main}( ) ...\index.php**:**0
2 0.4871 1604136 traiter_formulaires_dynamiques( $get = ??? ) ...\index.php**:**71
3 0.5035 1650464 formulaires_editer_almanach_traiter_dist( $id_almanach = '0', $retour = 'http://spipmu4.localhost/ecrire/?exec=almanach&id_almanach=0', $lier_trad = '', $config_fonc = ???, $row = ???, $hidden = ??? ) ...\aiguiller.php**:**289
4 0.7021 1830088 importer_almanach( $id_almanach = 2, $url = 'https://messes.info/horaires/ville%20JONQUIERES%20paroisse%20JONQUIERES%20.fr%2084%2084150%20diocese:av%20all-celebration.ics?limit=100&userkey=cleAPI', $id_article = '129', $decalage = ['ete' => '2', 'hiver' => '1'], $dtstart_exclu = '', $dtend_inclus = '' ) ...\editer_almanach.php**:**146
5 1.1775 1990264 Kigkonsult\Icalcreator\Vcalendar->parse( $unParsedText = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//CEF//MessesInfo//FR\nCALSCALE:GREGORIAN\nX-WR-CALNAME:MessesInfo\nBEGIN:VEVENT\nUID:20011798\nDTSTAMP:20230511T140700Z\nLAST-MODIFIED:20230511T140700Z\nSUMMARY:Messe dominicale\nDTSTART:20230618T083000Z\nDURATION:PT1H\nLOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : égl\n ise de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, \n fr\nGEO:44.114426;4.899348\nATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0\n Z2gih'... ) ...\import_ics.php**:**56
6 1.1986 1991744 Kigkonsult\Icalcreator\Parser\VcalendarParser->parse( $unParsedText = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//CEF//MessesInfo//FR\nCALSCALE:GREGORIAN\nX-WR-CALNAME:MessesInfo\nBEGIN:VEVENT\nUID:20011798\nDTSTAMP:20230511T140700Z\nLAST-MODIFIED:20230511T140700Z\nSUMMARY:Messe dominicale\nDTSTART:20230618T083000Z\nDURATION:PT1H\nLOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : égl\n ise de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, \n fr\nGEO:44.114426;4.899348\nATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0\n Z2gih'... ) ...\Vcalendar.php**:**575
7 1.1990 2010088 Kigkonsult\Icalcreator\Parser\VcalendarParser->parse2intoComps( $rows = [0 => 'BEGIN:VCALENDAR', 1 => 'VERSION:2.0', 2 => 'PRODID:-//CEF//MessesInfo//FR', 3 => 'CALSCALE:GREGORIAN', 4 => 'X-WR-CALNAME:MessesInfo', 5 => 'BEGIN:VEVENT', 6 => 'UID:20011798', 7 => 'DTSTAMP:20230511T140700Z', 8 => 'LAST-MODIFIED:20230511T140700Z', 9 => 'SUMMARY:Messe dominicale', 10 => 'DTSTART:20230618T083000Z', 11 => 'DURATION:PT1H', 12 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 13 => 'GEO:44.114426;4.899348', 14 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 15 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 16 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 17 => 'END:VEVENT', 18 => 'BEGIN:VEVENT', 19 => 'UID:20011799', 20 => 'DTSTAMP:20230511T140700Z', 21 => 'LAST-MODIFIED:20230511T140700Z', 22 => 'SUMMARY:Messe dominicale', 23 => 'DTSTART:20230625T083000Z', 24 => 'DURATION:PT1H', 25 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 26 => 'GEO:44.114426;4.899348', 27 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 28 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 29 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 30 => 'END:VEVENT', 31 => 'BEGIN:VEVENT', 32 => 'UID:20011800', 33 => 'DTSTAMP:20230511T140700Z', 34 => 'LAST-MODIFIED:20230511T140700Z', 35 => 'SUMMARY:Messe dominicale', 36 => 'DTSTART:20230702T083000Z', 37 => 'DURATION:PT1H', 38 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 39 => 'GEO:44.114426;4.899348', 40 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 41 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 42 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 43 => 'END:VEVENT', 44 => 'BEGIN:VEVENT', 45 => 'UID:20011801', 46 => 'DTSTAMP:20230511T140800Z', 47 => 'LAST-MODIFIED:20230511T140800Z', 48 => 'SUMMARY:Messe dominicale', 49 => 'DTSTART:20230709T083000Z', 50 => 'DURATION:PT1H', 51 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 52 => 'GEO:44.114426;4.899348', 53 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 54 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 55 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 56 => 'END:VEVENT', 57 => 'BEGIN:VEVENT', 58 => 'UID:20011802', 59 => 'DTSTAMP:20230511T140800Z', 60 => 'LAST-MODIFIED:20230511T140800Z', 61 => 'SUMMARY:Messe dominicale', 62 => 'DTSTART:20230716T083000Z', 63 => 'DURATION:PT1H', 64 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 65 => 'GEO:44.114426;4.899348', 66 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 67 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 68 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 69 => 'END:VEVENT', 70 => 'BEGIN:VEVENT', 71 => 'UID:20011803', 72 => 'DTSTAMP:20230511T140800Z', 73 => 'LAST-MODIFIED:20230511T140800Z', 74 => 'SUMMARY:Messe dominicale', 75 => 'DTSTART:20230723T083000Z', 76 => 'DURATION:PT1H', 77 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 78 => 'GEO:44.114426;4.899348', 79 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 80 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 81 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 82 => 'END:VEVENT', 83 => 'BEGIN:VEVENT', 84 => 'UID:20011804', 85 => 'DTSTAMP:20230511T140800Z', 86 => 'LAST-MODIFIED:20230511T140800Z', 87 => 'SUMMARY:Messe dominicale', 88 => 'DTSTART:20230730T083000Z', 89 => 'DURATION:PT1H', 90 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 91 => 'GEO:44.114426;4.899348', 92 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 93 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 94 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 95 => 'END:VEVENT', 96 => 'BEGIN:VEVENT', 97 => 'UID:20011805', 98 => 'DTSTAMP:20230511T140800Z', 99 => 'LAST-MODIFIED:20230511T140800Z', 100 => 'SUMMARY:Messe dominicale', 101 => 'DTSTART:20230806T083000Z', 102 => 'DURATION:PT1H', 103 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 104 => 'GEO:44.114426;4.899348', 105 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 106 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 107 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres', 108 => 'END:VEVENT', 109 => 'END:VCALENDAR'] ) ...\VcalendarParser.php**:**83
8 1.5806 2224672 Kigkonsult\Icalcreator\Parser\ComponentParser->parse( $unParsedText = ??? ) ...\VcalendarParser.php**:**223
9 1.5806 2225112 Kigkonsult\Icalcreator\Parser\ComponentParser->parse2intoComps( $rows = [0 => 'UID:20011798', 1 => 'DTSTAMP:20230511T140700Z', 2 => 'LAST-MODIFIED:20230511T140700Z', 3 => 'SUMMARY:Messe dominicale', 4 => 'DTSTART:20230618T083000Z', 5 => 'DURATION:PT1H', 6 => 'LOCATION;ALTREP="http://messes.info/lieu/84/jonquieres/eglise":église : église de Jonquières (Saint Mapalice)\\, Rue de l\'église\\, 84150 JONQUIERES\\, fr', 7 => 'GEO:44.114426;4.899348', 8 => 'ATTACH;FMTTYPE=image/jpeg:https://lh3.googleusercontent.com/f-GzLwVyE03VVX0Z2gihHnpY_isgT01qk1_Eap5TeJ9fwpk7QUJFAKjVddP6Fpaup7Fq8GvWQBE2yHqXN_UzAcAZScZwTUHgEMDHVw=s85', 9 => 'URL:http://messes.info/lieu/84/jonquieres/eglise', 10 => 'ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://messes.info/communaute/av/84/jonquieres'] ) ...\ComponentParser.php**:**63
10 1.5809 2227000 Kigkonsult\Icalcreator\Parser\ComponentParser->parse3thisProperties( ) ...\ComponentParser.php**:**198
11 1.5930 2244840 Kigkonsult\Icalcreator\Vevent->setOrganizer( $value = 'http://messes.info/communaute/av/84/jonquieres', $params = ['CN' => '"Paroisse : église de Jonquières (Saint Mapalice)"'] ) ...\ComponentParser.php**:**299
12 1.6026 2246464 Kigkonsult\Icalcreator\Util\CalAddressFactory::assertCalAddress( $calAddress = 'mailto:http://messes.info/communaute/av/84/jonquieres' ) ...\ORGANIZERtrait.php**:**125
  • import_ics en branche v6
  • icalendar en branche maj_librairie
  • spip 4.1.10 GIT

Je vais être très peu disponible cette semaine pour tester :frowning:

Le message est relativement clair : le flux ICAL indique comme email ce qui est en réalité autre chose.

mailto:http://messes.info/communaute/av/84/jonquieres

La librairie est beaucoup plus stricte qu’avant, et du coup il y a des choses qui ne passent plus/pas.

Je vais ouvrir un ticket pour demander des modes moins stricts, mais je crois qu’en attendant on va être obligé de faire des pre correction manuelles.

Si tu peux m’envoyer par email le flux ical en question…

C’est fait :wink:
Merci

en attendant

Ça a l’air de se baser sur cette ligne dans le fichier .ics récupéré :

ORGANIZER;CN="Paroisse : église de Jonquières (Saint Mapalice)":http://mess
 es.info/communaute/av/84/jonquieres

oui cest bien cela @RealET. Normalement il faut une adresse email dans ce champs.

Et comme la librairie est plus stricte.

En attendant voici ce que j’ai fait

  1. Deja comme on n’est pas à l’abri d’autres casses, on va sauvegarder toutes les fois ou ca passe pas en BDD, avec le message d’erreur
  2. Ensuite j’ai mis un pre parseur qui fait du nettoyage, notamment en supprimant les ORGANIZERS sans arobase. Des tests unitaires nous permettrons normalement de nous assurer de la cohérence avec le tps.

C’est poussé sur la zone

1 « J'aime »

Je viens de tester avec la version v6 de ce matin, et c’est bon, ça passe. Merci @maieul

super.

bon j’ai mis en prod sur un autre site. On va laisser en test 2 semaines, et après je publierai.

1 « J'aime »

Et donc en prod cela marchait.

Cela étant la personne qui maintenait la librairie a corrigé les 2 bugs de parsing. Du coup je viens de supprimer les contournements dans import ics.

Mais pour mettre à jour la nouvelle librairie, j’ai du dire qu’il fallait utiliser l’extension intl (qu’à mon avis SPIP utilisera dans un futur proche vu la volonté, saine, de déléguer un max de chose).

Bref tout cela pour dire que je viens de sortir

Pour PHP 5-7 uniquement

  • import ics v5.2.3, compatible SPIP 4.2
  • icalendar v0.5.13 compatible SPIP 4.2 ET où je met une borne PHP max en PHP 7, pour ne pas avoir des gens qui ralent que pas compatible PHP 8

→ Ces deux versions ne seront plus maintenu

Pour PHP 8++ uniquement

  • import ics v6, compatible SPIP4.1->4.2
  • icalendar v1

On se remet donc d’équerre en se basant sur une librairie maintenue.

1 « J'aime »