mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-30 01:36:21 +00:00
96d4a3ecf7
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
|