[dev] WebDAV package v0.1

Jan Schneider jan at horde.org
Thu Oct 22 17:15:42 UTC 2009


Zitat von Evert Pot <evertpot at gmail.com>:

> Sorry for the late responses, I was on a trip for a week with very  
> little internet access.
>
>>> I want to add a dedicated Web/SabreDAV interface to Kronolith,  
>>> replacing the existing methods from the RPC system. One suggestion  
>>> is to add a new method to to Kronolith_API, called something like  
>>> getWebDAVTree, or add a new file called Kronolith_DAV, which is  
>>> automatically discovered(not sure how that would work within  
>>> horde??)
>>
>> What do you mean by replacing the existing methods? The existing  
>> webdav code? Or the API methods themselves?
>>
>> We have autoloading; what would Kronolith_DAV need to be discovered  
>> by? I guess I'm not following the overall shape of your suggestion.
>
> This is a brief overview of how the webdav system works right now:
>
> The top level directory is a listing of all horde applications. Only  
> horde applications that have the 'browse' rpc method are added to  
> this list.
> This RPC class has a number of methods, such as get, put,  
> path_delete and mkcol that all take a path argument, and internally  
> handle the API method based on the path.
>
> All these methods in every API class (Kronolith_Api, Nag_Api, etc..)  
> will have to maintain some sort of translation of this path to an  
> internal controller. The datasource of a 'browse' on a list of  
> users, will have to originate from a very different subsystem than  
> for example a list of calendar objects, or directory tree in Gollem.
>
>
> How SabreDAV was designed is very different, it could definitely be  
> argued there are cons to this approach, but I do feel it helps  
> keeping things simpler.
> Simply put SabreDAV has three node classes:
>
> Node
> File (extends Node)
> Directory (extends Node)
>
> The File class adds methods such as 'get' and 'put, and the  
> Directory class adds methods such as 'getChildren' and 'createFile'.
> The biggest difference is that there is no central API class that  
> handles all HTTP methods for various paths, but every single file or  
> directory is represented by 1 object.
>
> The implication is that the Dav api's for every Horde application  
> will likely consist of a couple of classes, every class representing  
> a different type of object within horde (1 for a file in gollem, 1  
> for a directory in gollem, 1 for a list of kronolith users, and so  
> on..). This will result in more classes, but smaller chunks of  
> simple functionality.
>
> One way to approach this, is for example a class such as this:
>
> class Kronolith_Dav {
>
>   function getRootNode() {
>
>     return new Kronolith_Dav_UserList();
>
>   }
>
> }
>
> Here are some stubs of classes that would appear within Kronolith:
>
> class Kronolith_Dav_UserList extends Sabre_DAV_Directory {
>
>   function getChildren() {
>
>     // logic for listing all the users
>
>   }
>
>   function getChild($name) {
>
>     // logic for returning a single users' object.
>
>   }
>
>   function getName() {
>
>     // the path name that will be used in the webdav directory structure.
>     return 'kronolith';
>
>   }
>
> }
>
> class Kronolith_Dav_User extends Sabre_DAV_Directory {
>
>   function getChildren() {
>
>     // logic for listing all a users calendars
>
>   }
>
>   function getName() {
>
>     // This is probably a username
>     return 'chuck';
>
>   }
>
>   function createCalendar($name) {
>
>     // Creates a new calendar with the supplied filename.
>
>   }
>
> }
>
> And another one:
>
> class Kronolith_Dav_CalendarObject extends Sabre_DAV_File {
>
>   function get() {
>
>      // returns the current iCalendar object
>
>   }
>
>   function put() {
>
>      // updates the current iCalendar object
>
>   }
>
> }
>
> Does this make sense at all? I'm not sure if I'm explaining this well..

That sounds like a clean approach to me. OTOH we still need similar  
functionality for internal browsing, but it doesn't make sense to use  
objects extending Sabre_DAV classes for that purpose.
Does Sabre require those objects to extend the Sabre classes, or is it  
sufficient to implement a certain object API?

Jan.

-- 
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/



More information about the dev mailing list