Создание события iCal без создания календаря - PullRequest
1 голос
/ 25 октября 2010

Я использую класс iCalCreator, чтобы создать событие для загрузки пользователем в свои личные календари. Вот информация для тех, кто с ней не знаком: http://www.kigkonsult.se/iCalcreator/

Используя документацию, прямо на главной странице, я могу создать событие и вывести его в браузер. Нет проблем. Проблема в том, что когда он импортируется (я тестирую в Outlook, но я ожидаю, что это сохранится в других программах для работы с календарями), он импортируется как новый календарь с одним событием. Я хочу, чтобы это событие прошло прямо в ваш обычный календарь.

Кто-нибудь имеет опыт работы с iCalCreator и знает, как я могу это сделать?

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Поскольку вы используете php, вы можете просто записать файл в виде микросхемы и сохранить его на своем сервере. Фактическое событие - это, по сути, текстовый файл. Вам просто нужно обновить имя, уникальные идентификаторы и обновить время, чтобы соответствовать вашему событию. Таким образом, все, что вы делаете, это создаете текстовый файл и называет его .ics. Надеюсь, это поможет.

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
VERSION:2.0
X-WR-CALNAME:Test making a generic ical event
METHOD:PUBLISH
PRODID:-//angelfilm entertainment LLC//EN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
DTSTART:20070311T020000
TZNAME:PDT
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
DTSTART:20071104T020000
TZNAME:PST
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20110720T173758Z
UID:6asdf9-asdfkjasdf-asd-asdf-sdaf33FE
DTEND;TZID=America/Los_Angeles:20110908T120000
TRANSP:OPAQUE
SUMMARY:Test making a generic ical event
DTSTART;TZID=America/Los_Angeles:20110908T110000
DTSTAMP:20110808T174507Z
SEQUENCE:3
BEGIN:VALARM
X-WR-ALARMUID:6asdf9-asdfkjasdf-asd-asdf-sdaf33Fa
TRIGGER;VALUE=DATE-TIME:20110908T105100
ATTACH;VALUE=URI:Basso
ACTION:AUDIO
END:VALARM
END:VEVENT
END:VCALENDAR

сохранить вышеуказанный текст в виде строки

$myFile = "myIcalEvent.ics";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "THE ABOVE ICAL TEXT COULD BE SAVED TO THIS VARIABLE";
fwrite($fh, $stringData);
fclose($fh);

Тогда у вас может быть страница, которая скачивает этот файл

<?php
// We'll be outputting a ICS
header('Content-type: text/calendar');

// It will be called downloaded.ics
header('Content-Disposition: attachment; filename="downloaded.ics"');

// The PDF source is in myIcalEvent.ics
readfile('myIcalEvent.ics');
?>
1 голос
/ 14 ноября 2010

Вы можете попробовать заменить строку МЕТОД: ИЗДАТЬ на МЕТОД: ЗАПРОСИТЬ.Это мое (предположительно смутное и непроверенное) понимание протокола планирования в RFC2446 , что тогда это приглашение, и Outlook может попросить пользователя принять (и войти в календарь) или отклонить его.Похоже, что работает с туберкулезом / молнией.

0 голосов
/ 10 мая 2013

Попробуйте это (от https://gist.github.com/jakebellacera/635416)

<?php
// Fetch vars
$event = array(
    'id' => $_GET['id'],
    'title' => $_GET['title'],
        'address' => $_GET['address'],
    'description' => $_GET['description'],
    'datestart' => $_GET['datestart'],
    'dateend' => $_GET['dateend'],
    'address' => $_GET['stage']
);

// iCal date format: yyyymmddThhiissZ
// PHP equiv format: Ymd\This

// The Function

function dateToCal($time) {
    return date('Ymd\This', $time) . 'Z';
}

// Build the ics file
$ical = 'BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTEND:' . dateToCal($event['dateend']) . '
UID:' . md5($event['title']) . '
DTSTAMP:' . time() . '
LOCATION:' . addslashes($event['address']) . '
DESCRIPTION:' . addslashes($event['description']) . '
URL;VALUE=URI:http://mohawkaustin.com/events/' . $event['id'] . '
SUMMARY:' . addslashes($event['title']) . '
DTSTART:' . dateToCal($event['datestart']) . '
END:VEVENT
END:VCALENDAR';

//set correct content-type-header
if($event['id']){
    header('Content-type: text/calendar; charset=utf-8');
    header('Content-Disposition: attachment; filename=mohawk-event.ics');
    echo $ical;
} else {
    // If $id isn't set, then kick the user back to home. Do not pass go, and do not collect $200.
    header('Location: /');
}
?>
...