mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2025-02-12 20:36:42 +00:00
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
/* EasyPeasyICS
|
|
/* ------------------------------------------------------------------------ */
|
|
/* Manuel Reinhard, manu@sprain.ch
|
|
/* Twitter: @sprain
|
|
/* Web: www.sprain.ch
|
|
/*
|
|
/* Built with inspiration by
|
|
/" http://stackoverflow.com/questions/1463480/how-can-i-use-php-to-dynamically-publish-an-ical-file-to-be-read-by-google-calend/1464355#1464355
|
|
/* ------------------------------------------------------------------------ */
|
|
/* History:
|
|
/* 2010/12/17 - Manuel Reinhard - when it all started
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
class EasyPeasyICS {
|
|
|
|
protected $calendarName;
|
|
protected $events = array();
|
|
|
|
|
|
/**
|
|
* Constructor
|
|
* @param string $calendarName
|
|
*/
|
|
public function __construct($calendarName=""){
|
|
$this->calendarName = $calendarName;
|
|
}//function
|
|
|
|
|
|
/**
|
|
* Add event to calendar
|
|
* @param string $calendarName
|
|
*/
|
|
public function addEvent($start, $end, $summary="", $description="", $url=""){
|
|
$this->events[] = array(
|
|
"start" => $start,
|
|
"end" => $end,
|
|
"summary" => $summary,
|
|
"description" => $description,
|
|
"url" => $url
|
|
);
|
|
}//function
|
|
|
|
|
|
public function render($output = true){
|
|
|
|
//start Variable
|
|
$ics = "";
|
|
|
|
//Add header
|
|
$ics .= "BEGIN:VCALENDAR
|
|
METHOD:PUBLISH
|
|
VERSION:2.0
|
|
X-WR-CALNAME:".$this->calendarName."
|
|
PRODID:-//hacksw/handcal//NONSGML v1.0//EN";
|
|
|
|
//Add events
|
|
foreach($this->events as $event){
|
|
$ics .= "
|
|
BEGIN:VEVENT
|
|
UID:". md5(uniqid(mt_rand(), true)) ."@EasyPeasyICS.php
|
|
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
|
|
DTSTART:".gmdate('Ymd', $event["start"])."T".gmdate('His', $event["start"])."Z
|
|
DTEND:".gmdate('Ymd', $event["end"])."T".gmdate('His', $event["end"])."Z
|
|
SUMMARY:".str_replace("\n", "\\n", $event['summary'])."
|
|
DESCRIPTION:".str_replace("\n", "\\n", $event['description'])."
|
|
URL;VALUE=URI:".$event['url']."
|
|
END:VEVENT";
|
|
}//foreach
|
|
|
|
|
|
//Footer
|
|
$ics .= "
|
|
END:VCALENDAR";
|
|
|
|
|
|
if ($output) {
|
|
//Output
|
|
header('Content-type: text/calendar; charset=utf-8');
|
|
header('Content-Disposition: inline; filename='.$this->calendarName.'.ics');
|
|
echo $ics;
|
|
} else {
|
|
return $ics;
|
|
}
|
|
|
|
}//function
|
|
|
|
}//class
|