我使用用户数据库和共享日历(事件)审核数据库运行PHP网站。为网站会员发布CalDav事件并管理参与者
我想在iCal发布这些事件/的CalDAV让议员:
- 获取所有日历事件,同步,与认证(私人网址...)
- 加入事件
- (但不能创建或修改的事件)
该应用程序将利用现有的用户&日历数据库的网站。
我看着在PHP & Python中CalDav的实现,他们都显得太复杂了这个简单的用法:
如何做到这一点?
- 使用CalDAV/iCal库进行了改造?任何想做图书馆的想法?
- 编写我自己的CalDAV/iCal服务器,存在客户端支持不佳的风险。
编辑:相关链接使用剑/ DAV与现有的网站数据库:
编辑:改进:
虽然它按预期工作,saber/DAV的方式太慢在创建一个服务器端事件与邀请约100本地人(“校长”)。它会为每个被邀请者生成99x无用的副本。花了8秒钟处理邀请(30多秒xdebug分析,它崩溃了!)。
使用共享日历,有只有两个标准的可能性关于:要么给被邀请者读写存取权限,这样他就可以读 - 加入该活动(而且还改变/删除它!),或者给他只能访问...但他不能加入它。所以我已经玩
Sabre\CalDAV\Backend\PDO::updateCalendarObject()
限制事件编辑给参与者PARTSTAT
。
但无论解决方案,有一个与问题冲突:
当参与者A修改了日历项说它参与(
PARTSTAT ACCEPTED
),军刀/ DAV过程通过更新此信息所有用户日历中的所有日历对象。这样做时,SabreDAV递增所有这些日历的SYNC标记。因此,当参与者B试图加入一个事件,但不同步的是参与者A在此期间加入了该事件的信息,有冲突和参与者B加入信息LOST。
冲突的解决方案:
RFC 6638定义了一种方法,通过使用一个
schedule-tag
避免这样的冲突。这仅适用于v3.3的Sabre/DAV路线图。我已经开发了对saber/dav here的实验性支持,但仍然,我测试过的所有Android客户端都不支持此RFC,只有iOS才支持!无论如何,即使使用schedule-tag
,如果组织者更改了事件数据或使用共享日历,某些参与者加入信息也会丢失。因此,我已经制作了自己的saber/dav实现,大多数情况下从不松散参与者加入信息(除了事件重新计划时):sabre/dav partstat-only-calendar。基本上,它的工作原理是考虑到用户发送的冲突EVENT,并且只记录服务器事件中的参与者PARSTAT信息,而不是通常推送PreconditionFailed异常。我仍然需要发布一个利用所有功能的服务器运行脚本示例。
谢谢,你让我使用SabreDAV。它可以使用自定义的'authentication','principal'和'calendar'后台来设置,所以这就是使用现有站点数据库的方法。文档没有例子,但[帮助](https://github.com/fruux/sabre-dav/issues/322#issuecomment-15311433)。 – KrisWebDev