用于创建多字节安全、符合RFC 5545规范的.ics文件的抽象层

0.7.1 2019-03-07 12:29 UTC

This package is auto-updated.

Last update: 2024-09-28 17:23:05 UTC


README

Build status

ICS

面向对象的PHP库,用于创建(并最终读取).ics iCal文件。

  • 该项目尚未支持所有.ics格式功能。

1. 基本用法

use Jsvrcek\ICS\Model\Calendar;
use Jsvrcek\ICS\Model\CalendarEvent;
use Jsvrcek\ICS\Model\Relationship\Attendee;
use Jsvrcek\ICS\Model\Relationship\Organizer;

use Jsvrcek\ICS\Utility\Formatter;
use Jsvrcek\ICS\CalendarStream;
use Jsvrcek\ICS\CalendarExport;

//setup an event
$eventOne = new CalendarEvent();
$eventOne->setStart(new \DateTime())
	->setSummary('Family reunion')
	->setUid('event-uid');
	
//add an Attendee
$attendee = new Attendee(new Formatter());
$attendee->setValue('moe@example.com')
	->setName('Moe Smith');
$eventOne->addAttendee($attendee);

//set the Organizer
$organizer = new Organizer(new Formatter());
$organizer->setValue('heidi@example.com')
	->setName('Heidi Merkell')
	->setLanguage('de');
$eventOne->setOrganizer($organizer);

//new event
$eventTwo = new CalendarEvent();
$eventTwo->setStart(new \DateTime())
	->setSummary('Dentist Appointment')
	->setUid('event-uid');

//setup calendar
$calendar = new Calendar();
$calendar->setProdId('-//My Company//Cool Calendar App//EN')
	->addEvent($eventOne)
	->addEvent($eventTwo);

//setup exporter
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
$calendarExport->addCalendar($calendar);

//output .ics formatted text
echo $calendarExport->getStream();

2. 批量事件提供者

基本用法示例将在内存中构建完整的.ics字符串,然后一次性输出。对于大型日历,这将会消耗大量内存。以下示例展示了如何使CalendarExport::getStream()输出ics文件生成的每一行,以及如何在导出期间分批设置构建日历事件列表的提供者。

use Jsvrcek\ICS\Model\Calendar;
use Jsvrcek\ICS\Model\CalendarEvent;

use Jsvrcek\ICS\Utility\Formatter;
use Jsvrcek\ICS\CalendarStream;
use Jsvrcek\ICS\CalendarExport;

//setup calendar
$calendar = new Calendar();
$calendar->setProdId('-//My Company//Cool Calendar App//EN');

//setup event provider to add events in batches during event iteration in $calendarExport->getStream()
$calendar->setEventsProvider(function ($startKey) use ($myDatabase) {

	//pseudo-code to get a batch of events from database
	$eventDataArray = $myDatabase->getEventsBatch($startKey);
	
	$events = array();
	
	foreach ($eventDataArray as $row) {
		$event = new CalendarEvent();
		$event->setStart($row['start_date'])
			->setSummary($row['summary'])
			->setUid($row['event_uid']);
		
		$events[] = $event;
	}
	
	return $events;
}); 

//setup exporter
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
$calendarExport->addCalendar($calendar);

//set exporter to send items directly to output instead of storing in memory
$calendarExport->getStreamObject()->setDoImmediateOutput(true);

//output .ics formatted text
echo $calendarExport->getStream();

待办事项

  • Jsvrcek\ICS\Model\CalendarTodo

参考

致谢

  • Alex Balhatchet 在 kaoru 实现了CalendarAlarm。
  • Thijs Wijnmaalen 在 thijsw 提供了批量提供者代码的灵感。

许可证

MIT许可证(MIT)

版权所有 (c) 2013 Justin Svrcek

特此授予任何人免费获得本软件及其相关文档文件(“软件”)副本的权利,无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,但受以下条件的约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,是否因软件或其使用或其他方式而产生的。