phpgroupware-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-developers] My goals for phpGW's future


From: Dan Kuykendall
Subject: [Phpgroupware-developers] My goals for phpGW's future
Date: Fri, 23 Aug 2002 19:34:40 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1b) Gecko/20020721

I want to start of by making it clear that this only represents my opinions and is not a dictate of how the project will move. I have my influence and such on the direction of the project, but since this is a Free Software project I am fully aware that everyone involved in developing phpGW has a voice and can impact the direction of the project greatly.

I have spent the last year or so mostly away from the phpGW code. I have kept an eye on how things have progressed but havent really written alot. The time I have spent on phpGW has been in trying to understand the direction the industry is taking. I have written dozens of chunks of experimental code to find ways to dramaticly improve phpGW. I have searched for various technologies and standards that could help phpGW move into other areas and not just be a web app.

PHP3 support: My plan is to have 0.9.14 (planned for release this weekend) be the last version of phpGW that will be compatible with PHP3. The FSF is finally going to declare PHP 4.1.2 and up as Free Software and that allows us as a GNU Project to finally be able to abandon PHP3 support. PHP4 has sooooo many benefits in how it handles OOP and XML that we will be able to really improve the performance and features of phpGW dramticly.

Web Services: This is an area that can offer phpGW the chance to really break out and broaden the usefulness of the code. We have tons of logic in phpGW and we need to just make it more avaible outside of the phpGW web interface. We have started with some decent XML-RPC support which is a great start, but much needs to be re-worked in phpGW for it to really become useful. I have stopped thinking of the various parts of our code as "classes" and started to think of them as "services". For example, instead of our accounts "classes" I think of them as accounts "services". To bring this to a more functional use I have been working on a method for all "services" to be registered in phpGW and then have a single way to interact with "services". This is done via my new ExecMethod() function. First the services all get registered. The registration indicates what protocol is to be used, and the location/url. If the service is a PHP class file like we have now (I consider this as protocol "PHP"), then ExecMethod() will make sure it gets include()'d and will execute the requested function. In the past ExecMethod() has been considered too slow because it used exec() to execute the function and exec() tends to be a drag on performance. PHP4 has a perfect solution in call_user_func_array() and call_user_func(). These function will do exactly what we need. The real benefit of the new ExecMethod() is that it will have web services clients for it to use. So if a service is registered with protocol XMLRPC and it has the URL, then it would be possible to have all the accounts functions on some remote web services server. Of course this wont always work transparently because the web services server might not have the functions and return format we expect, so wrappers can be written. I have considered just using wrappers, and in the end that may be what happends, but I think the new ExecMethod() may become more flexible because it will more easily allow for having the phpGW server broken up for load balancing and such.

XML: I have been fully xml-ized over the last year. I have written a function that will convert any param into useful XML. For some reason none of the array2xml type functions I could find would give me usable XML, so I wrote my own that is fantastic if I can say so myself :-p I wrote it for the new templates class I wrote. XML will be be everywhere in phpGW, from the templates system to the web services interfaces and may places in between.

Templates/XSLT: I wrote a new templates class that has some minor similarities to the current PHPLIB ones we use today, but the new templates class uses XSLT templates which give the templates the work of building the HTML interface. XSLT can essentially take over the entire UI layer of phpGW. Its a forward-compatible technology and offers tremendous flexibility in what the template designer wants to do with the data. Basicly the api and apps just feed the templates class its variables. Generally this would be arrays of the information reguested. The templates class will then convert all of this data into an XML doc. It also takes the list of XSL files needed for this and merges them together. Then it passes this off to PHP's XSLT engine to process and generate HTML. Mozilla 1.0 and IE6 have XSLT engines built into them but mozilla's is very instable so its not good to be used. But as time goes on it will be fixed. What this allows us to do is to simply pass the browser the raw xml data doc and tell it how to get the XSL doc from phpGW and then the browser is responsible for processing that into HTML for the user. This can take a load off the server at that point.

1.0: I want 0.9.14 to not only be the last of the PHP3 compatible versions, but I also want it to be the last of the "perpetual beta" versions. I want to get the API and core apps to be fully using the new templates system, provide all of its public functions out over XMLRPC and SOAP and work well and then make it 1.0

Offline mode and palm sync: This is an issue that plauges me, haunts my nightmares, etc etc... The palm sync thing appears to be on its way to being solved. The Axisgroupware guys have gotten it to work. Right now its some perl code that writes directly to the database, but that can be ported to talk over xmlrpc soon enough. Offline mode is another story and not one easily solved. I am still searching for a solution, but I think its going to require putting some created/last_modified fields in each of the tables for the apps so that users can basicly copy out all of their data to a local database of some sort (maybe even xml files). The local data source can possibly handle some changes to the data, and then be synced back up by compairing the time stamps involved. This is going to be important to at least make the table changes now, so that post 1.0 release the pieces will be in place for it to be solved.

There is lots of other little things, like using register_shutdown_function() from the API startup process instead of requiring apps to have
$GLOBALS['phpgw']->common->phpgw_footer();
as their last line in the files. Stupid things like this can make it easier for app developers to focus on their apps and have a super easy way to plugin to phpGW. I am also going to make certain that I finish the few changes that are needed so that apps can be easily turned into stand alone apps, but simply including a few limited parts of the phpgwAPI into their app dir. I think this will make many developers of robust PHP apps more comfortable to port their apps to work within phpGW.

Soo much to do, but it can all be done if we want it so.

I look forward to comments, and suggestions. This is by no means a complete list, but it covers the most important issues I can think of at the moment.

Seek3r





reply via email to

[Prev in Thread] Current Thread [Next in Thread]