{"id":369,"date":"2022-11-20T13:09:21","date_gmt":"2022-11-20T12:09:21","guid":{"rendered":"https:\/\/68600.fr\/D6D\/?p=369"},"modified":"2023-01-09T18:52:22","modified_gmt":"2023-01-09T17:52:22","slug":"developpement-fichiers-ics-et-calendrier-partie-2","status":"publish","type":"post","link":"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-2\/","title":{"rendered":"D\u00e9veloppement- Fichiers ICS et Calendrier \u2013 Partie 2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">S\u00e9rie de 3 articles sur les fichiers ICS : <a href=\"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-1\/\" data-type=\"URL\" data-id=\"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-1\/\">(1) D\u00e9finition<\/a>; (2) Cr\u00e9ation et Partage; <a href=\"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-3\/\" data-type=\"URL\" data-id=\"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-3\/\">(3) Automatisation Excel &gt; Outlook<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Partie 2: Cr\u00e9ation et partage<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a des \u00e9v\u00e8nements qui sont importants et pour les garder en m\u00e9moire, ou plut\u00f4t dans la m\u00e9moire de nos assistants num\u00e9riques, il faut cliquer sur &lsquo;nouveau rendez-vous&rsquo; choisir une date de d\u00e9but, de fin, un texte, cliquer, cliquer et encore cliquer. J&rsquo;ai tellement de param\u00e8tres \u00e0 d\u00e9finir que cela me fatigue, mais aussi qu&rsquo;il faut parfois partager sans pour autant l&rsquo;entrer dans mon calendrier. Voici donc le <a href=\"https:\/\/www.68600.fr\/D6D\/ics\/\">g\u00e9n\u00e9rateur ICS<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Simple page PHP, qui demande du texte par ligne, bien entendu format\u00e9 correctement, et g\u00e9n\u00e8re en sortie un fichier ICS automatiquement pouss\u00e9 sur le navigateur client.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fonctionnement simple, basique dont voil\u00e0 la source :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n \nsetlocale(LC_TIME, 'fr_FR'); \/\/setlocale (LC_TIME, 'fr_FR.utf8','fra'); \n\n function test_input($data) {\n\t \/\/ nettoyer le texte qui sera envoy\u00e9\n  $data = trim($data);\n  $data = stripslashes($data);\n  $data = htmlspecialchars($data);\n  return $data;\n}\n\n date_default_timezone_set('Europe\/Paris');\n if (!isset($_POST&#91;'date_start'])) {  ?&gt; \n\/\/ si le formulaire est vierge.. alors continue\n &lt;!doctype html&gt;\n &lt;html lang=\"fr\"&gt;\n\n &lt;head&gt;\n &lt;meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"&gt;\n &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"&gt;\n &lt;title&gt;G\u00e9n\u00e9rateur de fichiers ICS&lt;\/title&gt;\n &lt;link rel=\"icon\" type=\"image\/x-icon\" href=\"favicon.png\"&gt;\n &lt;\/head&gt;\n &lt;body&gt;\n &lt;link rel=\"stylesheet\" href=\"style.css\" \/&gt;\n  &lt;h1&gt;G\u00e9n\u00e9rateur de fichiers ICS&lt;br&gt; &lt;?\n    echo '&lt;form method=\"post\"&gt;';\n \techo '&lt;h2&gt;Compl\u00e9tez les champs puis validez&lt;h2&gt;';\n\techo \"&lt;input class='form-control' type='text' placeholder='\".ucfirst(utf8_encode(strftime('%A %d %B %Y, %H:%M'))) .\"' readonly&gt;\"; \n\techo 'Titre - objet du rendez vous&lt;input type=text id=\"invalidCheck\" required class=\"form-control\" name=titre value=\"titre\"&gt;';\n\techo 'D\u00e9but - format Ann\u00e9e Mois Jour \"T\" Heure Minute&lt;input type=\"text\" id=\"invalidCheck\" required class=\"form-control\" name=\"date_start\" value=\"20221006T100000\"&gt;';\n\techo 'Fin - format Ann\u00e9e Mois Jour \"T\" Heure Minute&lt;input type=\"text\" id=\"invalidCheck\" required class=\"form-control\" name=\"date_end\" value=\"20221006T110000\"&gt;';\n\techo 'Description - d\u00e9tails sur le rendez-vous&lt;input type=\"text\" id=\"invalidCheck\" class=\"form-control\" name=\"description\" value=\"description longue\"&gt;';\n\techo 'Emplacement - adresse compl\u00e8te &lt;input type=\"text\" id=\"invalidCheck\" class=\"form-control\" name=\"emplacement\" value=\"adresse ou lien\"&gt;';\n\techo 'Priv\u00e9 - d\u00e9tails invisibles par les personnes ayant d\u00e9l\u00e9gation sur votre calendrier &lt;input type=\"checkbox\" id=\"invalidCheck\" class=\"form-control\" name=\"privat\"&gt;';\n\techo 'Important - rendez vous marqu\u00e9 comme tel &lt;input type=\"checkbox\" id=\"invalidCheck\" class=\"form-control\" name=\"important\"&gt;';\n?&gt;\n\n &lt;div class=\"col-12\"&gt;  &lt;button class=\"btn btn-primary\" type=\"submit\"&gt;G\u00e9n\u00e9rer&lt;\/button&gt;  &lt;\/div&gt;\n &lt;\/form&gt;\n &lt;\/body&gt;\n&lt;\/html&gt;\n&lt;?php \n}else{\n\/\/ si le formulaire n'est par vierge.. alors cr\u00e9e le fichier ICS\n    $_POST&#91;titre]=test_input($_POST&#91;titre]);\n    $_POST&#91;date_start]=test_input($_POST&#91;date_start]);\n    $_POST&#91;date_end]=test_input($_POST&#91;date_end]);\n    $_POST&#91;emplacement]=test_input($_POST&#91;emplacement]);\n    $_POST&#91;description]=test_input($_POST&#91;description]);\n    $ics_props =  'BEGIN:VCALENDAR'.\"\\r\\n\";\n    $ics_props .= 'VERSION:2.0'.\"\\r\\n\";\n    $ics_props .= 'PRODID:-\/\/68600.fr\/\/iCal Event Maker'.\"\\r\\n\";\n    $ics_props .= 'CALSCALE:GREGORIAN'.\"\\r\\n\";\n    $ics_props .= 'BEGIN:VTIMEZONE'.\"\\r\\n\";\n    $ics_props .= 'TZID:Europe\/Berlin'.\"\\r\\n\";\n    $ics_props .= 'BEGIN:STANDARD'.\"\\r\\n\";\n    $ics_props .= 'TZNAME:CET'.\"\\r\\n\";\n    $ics_props .= 'TZOFFSETFROM:+0200'.\"\\r\\n\";\n    $ics_props .= 'TZOFFSETTO:+0100'.\"\\r\\n\";\n    $ics_props .= 'DTSTART:19701025T030000'.\"\\r\\n\";\n    $ics_props .= 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU'.\"\\r\\n\";\n    $ics_props .= 'END:STANDARD'.\"\\r\\n\";\n    $ics_props .= 'BEGIN:DAYLIGHT'.\"\\r\\n\";\n    $ics_props .= 'TZNAME:CEST'.\"\\r\\n\";\n    $ics_props .= 'TZOFFSETFROM:+0100'.\"\\r\\n\";\n    $ics_props .= 'TZOFFSETTO:+0200'.\"\\r\\n\";\n    $ics_props .= 'DTSTART:19700329T020000'.\"\\r\\n\";\n    $ics_props .= 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU'.\"\\r\\n\";\n    $ics_props .= 'END:DAYLIGHT'.\"\\r\\n\";\n    $ics_props .= 'END:VTIMEZONE'.\"\\r\\n\";\n    $ics_props .= 'LAST-MODIFIED:20201011T015911Z'.\"\\r\\n\";\n    $ics_props .= 'TZURL:http:\/\/tzurl.org\/zoneinfo-outlook\/Europe\/Berlin'.\"\\r\\n\";\n    $ics_props .= 'X-LIC-LOCATION:Europe\/Berlin'.\"\\r\\n\";\n    $ics_props .= 'BEGIN:VEVENT'.\"\\r\\n\";\n\tif (isset($_POST&#91;privat]))     { $ics_props .= 'CLASS:PRIVATE'.\"\\r\\n\";}\n\tif (isset($_POST&#91;important]))  { $ics_props .= 'CATEGORIES:Important'.\"\\r\\n\";}\n\t$ics_props .= 'DTSTAMP:20220823T131634Z'.\"\\r\\n\";\n    $ics_props .= 'UID:'.uniqid().\"\\r\\n\";\n    $ics_props .= 'DTSTART;TZID=Europe\/Berlin:'.$_POST&#91;date_start].\"\\r\\n\";\n    $ics_props .= 'DTEND;TZID=Europe\/Berlin:'.$_POST&#91;date_end].\"\\r\\n\";\n    $ics_props .= 'SUMMARY:'.$_POST&#91;titre].\"\\r\\n\";\n    $ics_props .= 'DESCRIPTION:'.$_POST&#91;description].\"\\r\\n\";\n    $ics_props .= 'LOCATION:'.$_POST&#91;emplacement].\"\\r\\n\";\n    $ics_props .= 'TRANSP:OPAQUE'.\"\\r\\n\";\n    $ics_props .= 'X-MICROSOFT-CDO-BUSYSTATUS:BUSY'.\"\\r\\n\";\n    $ics_props .= 'BEGIN:VALARM'.\"\\r\\n\";\n    $ics_props .= 'ACTION:DISPLAY'.\"\\r\\n\";\n    $ics_props .= 'DESCRIPTION:Reminder'.\"\\r\\n\";\n    $ics_props .= 'TRIGGER:-PT15M'.\"\\r\\n\";\n    $ics_props .= 'END:VALARM'.\"\\r\\n\";\n    $ics_props .= 'END:VEVENT'.\"\\r\\n\";\n    $ics_props .= 'END:VCALENDAR'.\"\\r\\n\";\n\/\/ cr\u00e9ee le fichier\n    $uniqueFileName = uniqid(mt_rand(), true) . '.ics';\n\n\/\/ affiche le fichier ICS et force le navigateur \u00e0 le t\u00e9l\u00e9charger\n\n    header('Content-type: text\/calendar; charset=utf-8');\n    header(\"Content-Disposition: attachment; filename=\".$uniqueFileName);\n    echo $ics_props;\t\n}\n\n?&gt; \n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si tout va bien, vous devriez pouvoir g\u00e9n\u00e9rer vos fichiers rdv et les partager&nbsp;! <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais cela n&rsquo;est pas tout&nbsp;: ceux qui me connaissent savent que je ne jure que par Excel. C&rsquo;est mon outil de pr\u00e9dilection. Voyons comment utiliser Excel comme source &gt; Suite <a href=\"https:\/\/68600.fr\/D6D\/developpement-fichiers-ics-et-calendrier-partie-3\/\">Partie 3<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>S\u00e9rie de 3 articles sur les fichiers ICS : (1) D\u00e9finition; (2) Cr\u00e9ation et Partage; (3) Automatisation Excel &gt; Outlook Partie 2: Cr\u00e9ation et partage Il y a des \u00e9v\u00e8nements qui sont importants et pour les garder en m\u00e9moire, ou plut\u00f4t dans la m\u00e9moire de nos assistants num\u00e9riques, il faut cliquer sur &lsquo;nouveau rendez-vous&rsquo; choisir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":398,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[33,35,38,37,36,34],"class_list":["post-369","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatique","tag-developpement","tag-html","tag-icalendar","tag-ics","tag-php","tag-web"],"_links":{"self":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/comments?post=369"}],"version-history":[{"count":6,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/369\/revisions"}],"predecessor-version":[{"id":473,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/369\/revisions\/473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/media\/398"}],"wp:attachment":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/media?parent=369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/categories?post=369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/tags?post=369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}