jsvrcek/ics

创建多字节安全的 RFC 5545 兼容 .ics 文件的抽象层

0.8.5 2023-01-17 22:16 UTC

This package is auto-updated.

Last update: 2024-08-23 18:49:24 UTC


README

Build status

ICS

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

  • 此项目尚不支持 .ics 格式的所有功能。

安装

使用 composer

composer require jsvrcek/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('[email protected]')
	->setName('Moe Smith');
$eventOne->addAttendee($attendee);

//set the Organizer
$organizer = new Organizer(new Formatter());
$organizer->setValue('[email protected]')
	->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) 2022 Justin Svrcek

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人免费使用软件的权利,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人以本协议规定的条件进行此类行为

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

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