On m'a demandé si c'était possible et après une rapide recherche, je n'ai rien trouvé qui permettait de faire ça : je n'ai pas réussi à utiliser https://icalfilter.com/
Je serai curieux de savoir si c'est possible de le faire avec un https://framagenda.org mais en utilisant un parseur et un formatteur PHP c'est plutôt simple.
Si ça peut être utile à d'autres.
Dans le fichier composer.json
{
"require": {
"johngrogg/ics-parser": "^2",
"jsvrcek/ics": "*@dev"
}
}
On installe tout ce qu'il faut avec
composer install
Dans un fichier index.php
<?php
require_once 'vendor/autoload.php';
use ICal\ICal;
use Jsvrcek\ICS\Model\Calendar;
use Jsvrcek\ICS\Model\CalendarEvent;
use Jsvrcek\ICS\Model\Relationship\Attendee;
use Jsvrcek\ICS\Model\Relationship\Organizer;
use Jsvrcek\ICS\Utility\Formatter;
use Jsvrcek\ICS\CalendarStream;
use Jsvrcek\ICS\CalendarExport;
try {
$ical = new ICal('https://raw.githubusercontent.com/u01jmg3/ics-parser/master/examples/ICal.ics', array(
'defaultSpan' => 2, // Default value
'defaultTimeZone' => 'UTC',
'defaultWeekStart' => 'MO', // Default value
'disableCharacterReplacement' => false, // Default value
'filterDaysAfter' => null, // Default value
'filterDaysBefore' => null, // Default value
'replaceWindowsTimeZoneIds' => false, // Default value
'skipRecurrence' => false, // Default value
'useTimeZoneWithRRules' => false, // Default value
));
} catch (\Exception $e) {
die($e);
}
$forceTimeZone = false;
$newCal = new Calendar();
$newCal->setProdId($ical->cal['VCALENDAR']['PRODID']);
$newCal->setVersion($ical->cal['VCALENDAR']['VERSION']);
$newCal->setName($ical->cal['VCALENDAR']['X-WR-CALNAME']);
$newCal->setCalendarScale($ical->cal['VCALENDAR']['CALSCALE']);
$newCal->setMethod($ical->cal['VCALENDAR']['METHOD']);
$newCal->setCustomHeaders(["X-WR-TIMEZONE" => $ical->cal['VCALENDAR']['X-WR-TIMEZONE']]);
$events = $ical->events();
foreach ($events as $event) {
// add custom filter here
if (preg_match('/.*DST*/', $event->summary)) {
$newEvent = new CalendarEvent();
$newEvent->setStart(new DateTime($event->dtstart));
$newEvent->setEnd(new DateTime($event->dtend));
$newEvent->setSummary($event->summary);
$newEvent->setUid($event->uid);
$newEvent->setStatus($event->status);
$newCal->addEvent($newEvent);
}
}
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
$calendarExport->addCalendar($newCal);
header('Content-type: text/calendar; charset=utf-8');
echo $calendarExport->getStream();
?>