The Horde 4 PHP framework

Post on 18-Nov-2014

2.562 views 2 download

description

The Horde project offers a complete web based groupware suite coded in PHP. The center of the application is the webmailer "Imp". Born about 13 years ago it has been one of the first existing webmail solutions. It is no wonder that by today it provides millions of users with web based access to their e-mail. The next major release of the groupware suite - Horde 4 - was made available in April 2011 and offers a dynamic AJAX based e-mail as well as calendar component. Applications for task, contact and note management are included as well. There is broad support for mobile devices - ActiveSync, SyncML, mobile front ends for iPad, iPhone, Android to name just a few. This huge feature set common to modern groupware suites does require a solid backbone of small modules delivering various functionality to speak IMAP, SQL, LDAP, MIME, iCal, iTip or to handle dates, authentication, caching, sessions etc. In other words: a framework underlying the applications visible to the user. The Horde framework existed for years and has grown in time to more than a hundred distinct modules. With Horde 4 this framework has now been published component by component for the very first time. Each module is now available as a separate PEAR package with clearly defined dependencies. Thus developers can now download and use small segments of the Horde code into their own projects without having to deal with the complexities of the whole application stack. The major advantage the Horde framework has when compared with similar frameworks: the development has been driven by the needs of real world applications that are being used by millions of users on a daily basis. The Horde code quality always had high standards but Horde 4 has been a major step in that area as well. The components have test suites which are now automatically validated by a continuous integration server based on Jenkins. This also includes code style analysis and various code metrics common to PHP based Jenkins setups. The talk will touch main features of the Horde 4 groupware suite release but primarily focus on the Horde 4 framework and the huge set of powerful PHP libraries which are now available to the PHP community.

Transcript of The Horde 4 PHP framework

The Horde 4 PHP framework

Gunnar Wrobel

wrobel@horde.org

May, 13th 2011

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 1 / 44

ComponentsComponents = Modules = Libraries = Packages = ...

Photo: Rudolf Ammann [http://www.flickr.com/photos/rka/1415516/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 2 / 44

The Horde 4 PHP frameworkThere are more than 90 components available from http://pear.horde.org.

Photo: Aaron Merrifield [http://www.flickr.com/photos/spammt/4823025103/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 3 / 44

Groupware

Photo: Denise Chan [http://www.flickr.com/photos/denn/5005046/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 4 / 44

Groupware

Definition“[...] groupware [...] is computer software designed tohelp people involved in a common task achieve theirgoals [...].”a

a

http://en.wikipedia.org/wiki/Groupware

Remote

It is usually associated withteam members not physicallyco-located.

Asynchronous

Communication between teammembers is primarilyasynchronous.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44

Groupware

Definition“[...] groupware [...] is computer software designed tohelp people involved in a common task achieve theirgoals [...].”a

a

http://en.wikipedia.org/wiki/Groupware

Remote

It is usually associated withteam members not physicallyco-located.

Asynchronous

Communication between teammembers is primarilyasynchronous.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44

Groupware

Definition“[...] groupware [...] is computer software designed tohelp people involved in a common task achieve theirgoals [...].”a

a

http://en.wikipedia.org/wiki/Groupware

Remote

It is usually associated withteam members not physicallyco-located.

Asynchronous

Communication between teammembers is primarilyasynchronous.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44

E-mailAn E-Mail client is the corner stone of most groupware systems

Photo: Eole Wind [http://www.flickr.com/photos/eole/4500783172/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 6 / 44

Demo Time - E-Mail

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 7 / 44

Demo Time - Mobile

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 8 / 44

PHP + IMAPPEAR-Net IMAP

Pro

Runs on any PHPinstallation.

Available as a separatecomponent.

Contra

Extremely slow.

Very limited IMAPfeatureset.

Has a fair amount ofissues.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44

PHP + IMAPPEAR-Net IMAP

Pro

Runs on any PHPinstallation.

Available as a separatecomponent.

Contra

Extremely slow.

Very limited IMAPfeatureset.

Has a fair amount ofissues.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44

PHP + IMAPPEAR-Net IMAP

Pro

Runs on any PHPinstallation.

Available as a separatecomponent.

Contra

Extremely slow.

Very limited IMAPfeatureset.

Has a fair amount ofissues.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44

PHP + IMAPPEAR-Net IMAP

Pro

Runs on any PHPinstallation.

Available as a separatecomponent.

Contra

Extremely slow.

Very limited IMAPfeatureset.

Has a fair amount ofissues.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44

PHP + IMAPPEAR-Net IMAP

Pro

Runs on any PHPinstallation.

Available as a separatecomponent.

Contra

Extremely slow.

Very limited IMAPfeatureset.

Has a fair amount ofissues.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44

PHP + IMAPPHP IMAP extension - based on the c-client library

Pro

Coded in C

Available by default inmany PHP installations.

Contra

Suprisingly slow for manyof the IMAP calls.

Not maintained anymore.

Very limited IMAPfeatureset.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44

PHP + IMAPPHP IMAP extension - based on the c-client library

Pro

Coded in C

Available by default inmany PHP installations.

Contra

Suprisingly slow for manyof the IMAP calls.

Not maintained anymore.

Very limited IMAPfeatureset.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44

PHP + IMAPPHP IMAP extension - based on the c-client library

Pro

Coded in C

Available by default inmany PHP installations.

Contra

Suprisingly slow for manyof the IMAP calls.

Not maintained anymore.

Very limited IMAPfeatureset.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44

PHP + IMAPPHP IMAP extension - based on the c-client library

Pro

Coded in C

Available by default inmany PHP installations.

Contra

Suprisingly slow for manyof the IMAP calls.

Not maintained anymore.

Very limited IMAPfeatureset.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44

PHP + IMAPPHP IMAP extension - based on the c-client library

Pro

Coded in C

Available by default inmany PHP installations.

Contra

Suprisingly slow for manyof the IMAP calls.

Not maintained anymore.

Very limited IMAPfeatureset.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44

PHP + IMAPRoundcube IMAP code

Pro

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Decent IMAP featureset.

Contra

Not available as aseparate component.

No documentation.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44

PHP + IMAPRoundcube IMAP code

Pro

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Decent IMAP featureset.

Contra

Not available as aseparate component.

No documentation.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44

PHP + IMAPRoundcube IMAP code

Pro

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Decent IMAP featureset.

Contra

Not available as aseparate component.

No documentation.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44

PHP + IMAPRoundcube IMAP code

Pro

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Decent IMAP featureset.

Contra

Not available as aseparate component.

No documentation.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44

PHP + IMAPRoundcube IMAP code

Pro

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Decent IMAP featureset.

Contra

Not available as aseparate component.

No documentation.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPHorde Imap Client

Pro

Available as a separatecomponent.

Runs on any PHPinstallation.

Very quick for a purePHP implementation.

Extensive support formodern IMAP features.

Contra

Minimal documentation.

Complex library.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44

PHP + IMAPThe IMAP RFC specifications implemented in Horde Imap Client

RFC 2086/4314 - ACL, RFC 2087 - QUOTA, RFC2088 - LITERAL+, RFC 2195 -AUTH=CRAM-MD5, RFC 2221 -LOGIN-REFERRALS, RFC 2342 - NAMESPACE,RFC 2595/4616 - TLS & AUTH=PLAIN, RFC 2831- DIGEST-MD5 authentication mechanism., RFC2971 - ID, RFC 3348 - CHILDREN, RFC 3501 -IMAP4rev1 specification, RFC 3502 -MULTIAPPEND, RFC 3516 - BINARY, RFC 3691 -UNSELECT, RFC 4315 - UIDPLUS, RFC 4422 -SASL Authentication (for DIGEST-MD5), RFC 4466- Collected extensions (updates RFCs 2088, 3501,3502, 3516), RFC 4469/5550 - CATENATE, RFC4551 - CONDSTORE, RFC 4731 - ESEARCH, RFC4959 - SASL-IR, RFC 5032 - WITHIN, RFC 5161 -ENABLE, RFC 5162 - QRESYNC, RFC 5182 -SEARCHRES, RFC 5255 - LANGUAGE/I18NLEVEL,RFC 5256 - THREAD/SORT, RFC 5258 -LIST-EXTENDED, RFC 5267 - ESORT; PARTIALsearch return option, RFC 5464 - METADATA, RFC5530 - IMAP Response Codes, RFC 5819 -LIST-STATUS, RFC 5957 - SORT=DISPLAY, RFC6154 - SPECIAL-USE/CREATE-SPECIAL-USE, RFC6203 - SEARCH=FUZZY

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 13 / 44

Horde Imap ClientInstalling the Horde Imap Client is trivial

# Ensure the Horde PEAR s e r v e r i s knownpea r channe l−d i s c o v e r pea r . horde . org

# I n s t a l l the Horde Auto l oade r componentpea r i n s t a l l horde /Horde Auto l oade r

# I n s t a l l the Horde Imap C l i en t componentpea r i n s t a l l horde /Horde Imap C l i en t

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 14 / 44

Horde Imap ClientListing your IMAP mailboxes ...

<?php

// Prov i d e a u t o l o a d i n g o f c l a s s e sr e q u i r e o n c e ’ Horde / Auto l oade r / De f a u l t . php ’ ;

// Crea t e c l i e n t$c = Horde Imap C l i en t : : f a c t o r y (’ Socket ’ ,a r r a y ( ’ username ’ => ’ t e s t ’ , ’ password ’ => ’ t e s t ’ )

) ;

// P r i n t ma i l box l i s tp r i n t j o i n ( ”\n” , a r r a y k e y s ( $c−> l i s tM a i l b o x e s ( ’ * ’ ) ) ) ;

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 15 / 44

Horde Imap ClientListing your IMAP mailboxes ...

INBOXINBOX/AufgabenINBOX/Dra f t sINBOX/Ka lenderINBOX/KontakteINBOX/Ledger /2011/01/ companyINBOX/Ledger /2011/02/ companyINBOX/Neue Not i z enINBOX/Not i z enINBOX/SentINBOX/TestINBOX/ s t e s tINBOX/ t e s t

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 16 / 44

InvitationsInterface e-mail with calendaring

Photo: Anita Brown [http://www.flickr.com/photos/2bsquaredesigns/4786027883/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 17 / 44

Demo Time - Invitations

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 18 / 44

Horde ItipInstalling the Horde Itip is trivial

# Ensure the Horde PEAR s e r v e r i s knownpea r channe l−d i s c o v e r pea r . horde . org

# I n s t a l l the Horde Auto l oade r componentpea r i n s t a l l horde /Horde Auto l oade r

# I n s t a l l the Ho r d e I t i p componentpea r i n s t a l l horde / Ho r d e I t i p

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 19 / 44

Horde Itip

BEGIN :VCALENDARPRODID:−//M i c r o s o f t Corpo ra t i on //Out look 11 . 0 MIMEDIR//ENVERSION : 2 . 0METHOD:REQUESTBEGIN :VEVENTATTENDEE ;ROLE=REQ−PARTICIPANT ;RSVP=TRUE:MAILTO: john . doe@example . orgORGANIZER :MAILTO: t e s t@examp l e . orgDTSTART:20081122 T190000ZDTEND:20081122 T193000ZSEQUENCE:0UID:040000008200 E00074C5B7101A82E0080000000020D533ED0E4CC901000000000000000010000000094C5C0A65E8CC4DB1AEC47FD1255FCD

DTSTAMP:20081121 T182534ZDESCRIPTION: Ze i t : Samstag \ , 22 . November 2008 20:00−20:30 (GMT+01:00)

Amsterdam \ , B e r l i n \ , Bern\ , Rom\ , Stockholm \ ,Wien.\\n\\n*˜*˜*˜*˜*˜*˜*˜*˜*˜*\\ n\\n\\n

SUMMARY: i n v i t a t i o n t e s t 2END:VEVENTEND:VCALENDAR

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 20 / 44

Horde ItipAnswering the iTip request

<?php

// Prov i de au t o l o ad i n g o f c l a s s e sr e q u i r e o n c e ’ Horde / Auto l oade r /De fau l t . php ’ ;

// Parse i T i p i n v i t a t i o n$vCal = new Ho r d e I c a l e n d a r ( ) ;$vCal−>par s e vCa l e nda r ( f i l e g e t c o n t e n t s ( ’ i t i p−i n v i t a t i o n . t x t ’ ) ) ;

// De sc r i be the i n v i t e d pe r son$ r e s ou r c e = new Ho r d e I t i p R e s ou r c e Ba s e ( ’ john . doe@example . com ’ , ’ John Doe ’ ) ;

// i T i p Handle r$ i T i p = Ho r d e I t i p : : f a c t o r y ( $vCal , $ r e s ou r c e ) ;

// Send r e sponse$ iT ip−>s e ndS i n g l e p a r tR e s pon s e (new Horde I t i p Re sponse Type Acc ept ( ) ,new Ho r d e I t i p R e s pon s e Op t i o n s Ho r d e ( ) ,new Horde Mai l Transport Mock ( )

) ;

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 21 / 44

Calendar

Photo: Ion-Bogdan Dumitrescu [http://www.flickr.com/photos/bitzi/265052661/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 22 / 44

Demo Time - Calendar

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 23 / 44

Demo Time - Mobile Calendar

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 24 / 44

Entering datesEntering dates on the net today

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 25 / 44

Meeting time

Photo: Andrew Wipple [http://www.flickr.com/photos/andrewwippler/4428945418/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 26 / 44

Meeting timeDo you arrange a meeting time like this ...

We should talk about theLinuxTag feedback sometimeduring 16th and 22nd ofMay 2011.

Sure. What about the 17thMay of 2011?

Sounds good. I’m availablefrom 8 am to 12 am thatday.

Lets say 9 am. That wouldwork fine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44

Meeting timeDo you arrange a meeting time like this ...

We should talk about theLinuxTag feedback sometimeduring 16th and 22nd ofMay 2011.

Sure. What about the 17thMay of 2011?

Sounds good. I’m availablefrom 8 am to 12 am thatday.

Lets say 9 am. That wouldwork fine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44

Meeting timeDo you arrange a meeting time like this ...

We should talk about theLinuxTag feedback sometimeduring 16th and 22nd ofMay 2011.

Sure. What about the 17thMay of 2011?

Sounds good. I’m availablefrom 8 am to 12 am thatday.

Lets say 9 am. That wouldwork fine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44

Meeting timeDo you arrange a meeting time like this ...

We should talk about theLinuxTag feedback sometimeduring 16th and 22nd ofMay 2011.

Sure. What about the 17thMay of 2011?

Sounds good. I’m availablefrom 8 am to 12 am thatday.

Lets say 9 am. That wouldwork fine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44

Meeting timeor rather like this ...

We should talk about theLinuxTag feedback sometimeduring next week.

Sure. What about tuesday?

Sounds good. I’m availablethe whole morning that day.

Lets say 9. That would workfine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44

Meeting timeor rather like this ...

We should talk about theLinuxTag feedback sometimeduring next week.

Sure. What about tuesday?

Sounds good. I’m availablethe whole morning that day.

Lets say 9. That would workfine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44

Meeting timeor rather like this ...

We should talk about theLinuxTag feedback sometimeduring next week.

Sure. What about tuesday?

Sounds good. I’m availablethe whole morning that day.

Lets say 9. That would workfine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44

Meeting timeor rather like this ...

We should talk about theLinuxTag feedback sometimeduring next week.

Sure. What about tuesday?

Sounds good. I’m availablethe whole morning that day.

Lets say 9. That would workfine for me.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44

Entering datesHow might the widget look like?

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 29 / 44

Demo Time - Quick Add

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 30 / 44

Horde Date ParserInstalling the Horde Date Parser is trivial

# Ensure the Horde PEAR s e r v e r i s knownpea r channe l−d i s c o v e r pea r . horde . org

# I n s t a l l the Horde Auto l oade r componentpea r i n s t a l l horde /Horde Auto l oade r

# I n s t a l l the Horde Da t e Pa r s e r componentpea r i n s t a l l horde /Horde Da t e Pa r s e r

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 31 / 44

Horde Date ParserParsing your language...

<?php

// Prov i d e a u t o l o a d i n g o f c l a s s e sr e q u i r e o n c e ’ Horde / Auto l oade r / De f a u l t . php ’ ;$date = Horde Da t e Pa r s e r : : p a r s e (

’ nex t week tue sday morning ’) ;

echo $date . ”\n” ;

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 32 / 44

Horde Date Parser... to make your computer understand you.

2011−05−17 09 : 00 : 00

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 33 / 44

ComponentsThe webmail application has been the core element for 13 years now.

Webmail

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 34 / 44

ComponentsCalendaring is just another application.

Webmail Calendar

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 35 / 44

ComponentsBut there are applications for contacts, task, and notes as well.

Webmail Calendar Contacts Task Notes

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 36 / 44

ComponentsNot to forget the time tracker, the ticket system, a wiki, ....

Webmail Calendar Contacts Task Notes Time tracker

Tickets Wiki File manager Blogging ...

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 37 / 44

Components“horde” handles basic tasks such as authentication, permissions, ...

Webmail Calendar Contacts Task Notes ...

horde

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 38 / 44

ComponentsAnd below that live the “framework” components.

Webmail Calendar Contacts Task Notes ...

horde

Horde Core

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 39 / 44

ComponentsThe framework is independent of the applications.

Webmail Calendar Contacts Task Notes ...

horde

Horde Core

Horde Imap Client Horde Date Parser Horde Log Horde Autoloader ... 80 more ...

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 40 / 44

FlexibleHorde strives at being the most flexible groupware on the net.

Photo: Jon Lucas [http://www.flickr.com/photos/jonlucas/204150906/ ]

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 41 / 44

Summary

Horde 4 PHP framework

The Horde 4 PHP framework is independent of the Hordeapplications.

The Horde 4 architecture is extremely modular.

Horde Applications

Horde can be adapted to the workflow instead of the other wayaround.

The groupware can be embedded into many different types ofinfrastructure.

Simply the most flexible web groupware system around.

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 42 / 44

http://www.horde.org

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 43 / 44

Questions

Questions?

E-Mail: wrobel@horde.org

Support (Horde LLC)

E-Mail: info@horde.org

Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 44 / 44