Crilles Schemascript

Detta schemascript kan du använda för att automatiskt prenumerera på ditt schema i Google Calendar. Du kan välja om du är personal eller om du läser ett program. I de flesta fall vill du ha ett schema i iCal-format. Sista kluringen är steg 3. Är du personal matar du in din signatur, exempelvis "coh" och om du läser ett program matar du exempelvis in "TGWEM-H19-". Programkoden måste matas in exakt rätt, det avslutande strecket skall vara med. När du gjort detta klickar du på "Fixa URL"-knappen och du får en länk som du matar in i Google Calendar, välj alternativet "från webbadress" på Google, vänta en halvminut, och vips funkar det. JAg har även spelat in en lite film om hur man gör som du kan se nedan.

Steg 1: Vem är du?

Personal
Läser program
Läser en kurs

Steg 2: Vilket format vill du ha?

ICAL (Bra för kalendrar)
XML (Bara för att det går)
JSON (För att det är det nya svarta)

Steg 3: Ange din signatur/program/kurs (hjälp att hitta)

Resultat

Sweet! nu har du en länk, Kopiera den och klistra in den i Google Calendar. Klicka i vänstermenyn på "Andra kalendrar" och sedan "Lägg till webbadress" så har du ditt schema tillgängligt i Google Calendar och alla tjänster som använder Googles kalender.

'; die(""); } /* ================================================================================ Genererar en XML-fil */ function printXML ($lines) { header ("Content-type: application/json; charset=iso-8859-1"); // Gå igenom filen rad för rad och behandla den foreach ($lines as $line_num => $line) { if (stristr($line, "BEGIN:VCALENDAR")) { echo ''; } else if (stristr($line, "BEGIN:VEVENT")) { echo ''; } else if (stristr($line, "DTSTART")) { $orginal = substr($line, 8, 16); $tid = strtotime ($orginal); $datum = date('Ymd', $tid); $tid = date('Hi', $tid); echo '' . $datum . ''; echo '' . $tid . ''; } else if (stristr($line, "DTEND")) { $orginal = substr($line, 6, 16); $tid = strtotime ($orginal); $datum = date('Ymd', $tid); $tid = date('Hi', $tid); echo '' . $datum . ''; echo '' . $tid . ''; } else if (stristr($line, "LOCATION")) { echo '' . trim(utf8_decode(substr($line, 9, 5))) . ''; } else if (stristr($line, "SUMMARY")) { list($del1, $del2) = explode ("Aktivitetstyp", $line); list($del1, $moment) = explode ("Moment", $del1); list($del1, $signatur) = explode ("Sign", $del1); list($del1, $kurs) = explode ("Kurs.grp", $del1); list($del1, $program) = explode ("Program", $del1); echo '' . trim(utf8_decode(substr($program, 2))) . ''; echo '' . utf8_decode(substr($kurs, 2, 6)) . ''; $signatur = trim(utf8_decode(substr($signatur, 2))); if (strlen ($signatur) > 50) echo 'All personal'; else echo '' . $signatur . ''; echo '' . trim(utf8_decode (substr($moment, 2))) . ''; } else if (stristr($line, "END:VEVENT")) { echo ''; } else if (stristr($line, "END:VCALENDAR")) { echo ''; } } } /* ================================================================================ Genererar en JSON-fil */ function printJSON ($lines) { header ("Content-type: application/json; charset=iso-8859-1"); // Gå igenom filen rad för rad och behandla den foreach ($lines as $line_num => $line) { if (stristr($line, "BEGIN:VCALENDAR")) { echo '['; } else if (stristr($line, "BEGIN:VEVENT")) { echo '{'; } else if (stristr($line, "DTSTART")) { $orginal = substr($line, 8, 16); $tid = strtotime ($orginal); $datum = date('Ymd', $tid); $vecka = date('W', $tid); $tid = date('Hi', $tid); echo '"Vecka":"' . $vecka . '",'; echo '"StartDatum":"' . $datum . '",'; echo '"StartTid":"' . $tid . '",'; } else if (stristr($line, "DTEND")) { $orginal = substr($line, 6, 16); $tid = strtotime ($orginal); $datum = date('Ymd', $tid); $tid = date('Hi', $tid); echo '"SlutDatum":"' . $datum . '",'; echo '"SlutTid":"' . $tid . '",'; } else if (stristr($line, "LOCATION")) { echo '"Sal":"' . trim(utf8_decode(substr($line, 9, 5))) . '",'; } else if (stristr($line, "SUMMARY")) { list($del1, $del2) = explode ("Aktivitetstyp", $line); list($del1, $moment) = explode ("Moment", $del1); list($del1, $signatur) = explode ("Sign", $del1); list($del1, $kurs) = explode ("Kurs.grp", $del1); list($del1, $program) = explode ("Program", $del1); echo '"Program":"' . trim(utf8_decode(substr($program, 2))) . '",'; echo '"Kurs":"' . utf8_decode(substr($kurs, 2, 6)) . '",'; $signatur = trim(utf8_decode(substr($signatur, 2))); if (strlen ($signatur) > 50) echo '"Signatur":"All personal",'; else echo '"Signatur":"' . $signatur . '",'; echo '"Moment":"' . trim(utf8_decode (substr($moment, 2))) . '"'; } else if (stristr($line, "END:VEVENT")) { // Är detta den näst sista raden? if ($line_num+2 != count($lines)) echo '},'; else echo '}'; } else if (stristr($line, "END:VCALENDAR")) { echo ']'; } } } /* ================================================================================ Genererar en ICAL-fil */ function printICAL ($lines, $Signatur_indata) { // Gå igenom filen rad för rad och behandla den foreach ($lines as $line_num => $line) { // Sätt produktid if (stristr($line, "PRODID")) { echo "PRODID: -//Crille Schema//Crille 4.0//EN\n"; } // Byt ut kalendernamnet else if (stristr($line, "X-WR-CALNAME")) { echo "X-WR-CALNAME: Hogskolan (" . utf8_decode(substr($Signatur_indata, 2, 10)) . ")\n"; echo "X-WR-CALDESC:Hamtar data fran schema.hv.se till iCal-format\n"; } // Splitta upp SUMMARY-raden för att kunna plocka ut de vesäntliga delarna else if (stristr($line, "SUMMARY")) { list($del1, $del2) = explode ("Aktivitetstyp", $line); list($del1, $moment) = explode ("Moment", $del1); list($del1, $signatur) = explode ("Sign", $del1); list($del1, $kurs) = explode ("Kurs.grp", $del1); list($del1, $program) = explode ("Program", $del1); $signatur = trim(utf8_decode(substr($signatur, 2))); echo "SUMMARY:" . substr($kurs, 2, 6) . ":" . str_replace (";", "\;", str_replace(",", "\,", (substr($moment, 2)))) . "\n"; echo "DESCRIPTION:" . substr(utf8_decode($program), 2) . "(" . utf8_decode($signatur) .")\n"; } // Aktuell rad är inte speciell, bara skriv ut den else { echo utf8_decode ($line); } } } /* ================================================================================ Genererar en ICAL-fil */ function printDebug ($lines, $Signatur_indata, $url) { // Gå igenom filen rad för rad och behandla den echo "Schema för: " . $Signatur_indata . "
"; echo "URL: " . $url . "
"; echo "
";
    foreach ($lines as $line_num => $line)   
        echo utf8_decode ($line);
	echo "
"; } // Kolla vilken typ av schema som eftersöks och skapa variabel för detta $Signatur_indata = ""; if (isset ($_REQUEST['signatur'])) $Signatur_indata = "s." . htmlentities($_REQUEST['signatur']); else if (isset ($_REQUEST['klass'])) $Signatur_indata = "p." . htmlentities($_REQUEST['klass']); else if (isset ($_REQUEST['kurs'])) $Signatur_indata = "k." . htmlentities($_REQUEST['kurs']); // Inget schema söktes; visa istället info-sidan else { printHelp (); } // Litet hack för att få schemat att funka över nyår. // Som standard söks schema ut för 6 månader i förväg $month = date("n"); $last_month = date("n")-1; $year = date("Y"); $next_year = date("Y")+1; /* Gammal variant Orsakade problem med att schema syntes bara för det aktuella halvåret vilket ledde till problem med att man inte såg nästa års schema förrän den 1:e jan ------------------------------------------------------------------------------------ if($month < 7){ $startdatum = $year ."-01-01"; $slutdatum = $next_year ."-01-01"; } else { $startdatum = $year ."-07-01"; $slutdatum = $next_year ."-07-01"; } */ $startdatum = $year . "-" . $last_month . "-01"; // Skapa en URL vi kan läsa schemat ifrån $url = "https://schema.hv.se/setup/jsp/SchemaICAL.ics?startDatum=" . $startdatum ."&intervallTyp=m&intervallAntal=6&sprak=SV&sokMedAND=true&forklaringar=true&resurser=" . $Signatur_indata; // Läs in schemat som en textfil $lines = file ($url); // Vilken typ av utdata önskas? if (isset ($_REQUEST['format'])) { $format = htmlentities($_REQUEST['format']); switch ($format) { case "xml" : printXML ($lines); break; case "json" : printJSON ($lines); break; case "ical" : printICAL ($lines, $Signatur_indata); break; case "debug" : printDebug ($lines, $Signatur_indata, $url); break; default : printHelp ($lines); break; } } else { printHelp (); } ?>