[dev] Exposing timeobjects to caldav

Jan Schneider jan at horde.org
Thu Aug 3 13:58:00 UTC 2017


Zitat von Ralf Lang <lang at b1-systems.de>:

> Hallo,
>
> I wanted to expose a certain application's data (basically events)  
> to caldav without removing kronolith nor nag. I am a little unsure  
> which way to go, here is what I found:
>
>
> * Horde_Dav_Calendar_Backend scans the registry for apps providing  
> the "calendar" and "tasks" interfaces. As each interface (at the  
> root level) can only be exposed by one application, this limits the  
> number of applications providing caldav calendars to two.
>
> * An application must expose $application::davGetCollections() to be  
> able to provide arrays describing caldav folders
>
> * An application must expose  
> $application::davGetObjects($collection) to be able to provide  
> arrays describing caldav events or tasks
>
> * Kronolith does consume timeobjects providers as external calendars  
> (listTimeObjects, listTimeObjectCategories) but does not expose them  
> to caldav
>
>
> Solutions:
>
> * Make the application owner of the "tasks" api and pull nag's tasks  
> , internally to this new interface. No change of horde upstream code  
> needed, but very lame.

Would be a nice workaround, but not a clean solution.

> * Patching Kronolith is tempting, but I don't think it's wise to  
> just expose random timeobjects providers to caldav interface without  
> letting the admin or user decide. Kronolith is complicated and a  
> prime horde app.

I still think this is still the way to go. We should expose all  
calendar backends to CalDAV, limiting their features where necessary,  
like marking them read-only. Remote calendars might be an exception,  
since they can be exposed directly to clients using the  
"subscriptions" CalDAV extension.
If necessary, we could add a preference to allow users to only select  
a number of calendar types (or even individual calendars) to be  
exposed for synchronization.

> * Horde_Dav_Calendar_Backend could grab more applications from  
> registry, either by hardcoding a downstream patch for an additional  
> interface or by providing an upstream patch to run  
> hasMethod('tobedefined') over all apps. This could be added as a  
> feature patch to H5 and allow a bc-breaking removal of the hardcoded  
> method in H6.
>
> Why was the hardcoded limit to these two interfaces introduced? Is  
> it a performance consideration?

It was a natural choice, and it didn't require us to instantiate every  
application object.

For the future we should use interfaces and reflections to detect the  
capabilities that an application provides.


-- 
Jan Schneider
The Horde Project
https://www.horde.org/



More information about the dev mailing list