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.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
The Horde 4 PHP framework
1. 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
2. Components
Components = 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
3. The Horde 4 PHP framework
There 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
4. Groupware
Photo: Denise Chan [http://www.flickr.com/photos/denn/5005046/ ]
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 4 / 44
5. Groupware
Definition
“[...] groupware [...] is computer software designed to
help people involved in a common task achieve their
goals [...].”a
a
http://en.wikipedia.org/wiki/Groupware
Remote
It is usually associated with
team members not physically
co-located.
Asynchronous
Communication between team
members is primarily
asynchronous.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44
6. Groupware
Definition
“[...] groupware [...] is computer software designed to
help people involved in a common task achieve their
goals [...].”a
a
http://en.wikipedia.org/wiki/Groupware
Remote
It is usually associated with
team members not physically
co-located.
Asynchronous
Communication between team
members is primarily
asynchronous.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44
7. Groupware
Definition
“[...] groupware [...] is computer software designed to
help people involved in a common task achieve their
goals [...].”a
a
http://en.wikipedia.org/wiki/Groupware
Remote
It is usually associated with
team members not physically
co-located.
Asynchronous
Communication between team
members is primarily
asynchronous.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 5 / 44
8. E-mail
An 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
9. Demo Time - E-Mail
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 7 / 44
10. Demo Time - Mobile
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 8 / 44
11. PHP + IMAP
PEAR-Net IMAP
Pro
Runs on any PHP
installation.
Available as a separate
component.
Contra
Extremely slow.
Very limited IMAP
featureset.
Has a fair amount of
issues.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44
12. PHP + IMAP
PEAR-Net IMAP
Pro
Runs on any PHP
installation.
Available as a separate
component.
Contra
Extremely slow.
Very limited IMAP
featureset.
Has a fair amount of
issues.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44
13. PHP + IMAP
PEAR-Net IMAP
Pro
Runs on any PHP
installation.
Available as a separate
component.
Contra
Extremely slow.
Very limited IMAP
featureset.
Has a fair amount of
issues.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44
14. PHP + IMAP
PEAR-Net IMAP
Pro
Runs on any PHP
installation.
Available as a separate
component.
Contra
Extremely slow.
Very limited IMAP
featureset.
Has a fair amount of
issues.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44
15. PHP + IMAP
PEAR-Net IMAP
Pro
Runs on any PHP
installation.
Available as a separate
component.
Contra
Extremely slow.
Very limited IMAP
featureset.
Has a fair amount of
issues.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 9 / 44
16. PHP + IMAP
PHP IMAP extension - based on the c-client library
Pro
Coded in C
Available by default in
many PHP installations.
Contra
Suprisingly slow for many
of the IMAP calls.
Not maintained anymore.
Very limited IMAP
featureset.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44
17. PHP + IMAP
PHP IMAP extension - based on the c-client library
Pro
Coded in C
Available by default in
many PHP installations.
Contra
Suprisingly slow for many
of the IMAP calls.
Not maintained anymore.
Very limited IMAP
featureset.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44
18. PHP + IMAP
PHP IMAP extension - based on the c-client library
Pro
Coded in C
Available by default in
many PHP installations.
Contra
Suprisingly slow for many
of the IMAP calls.
Not maintained anymore.
Very limited IMAP
featureset.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44
19. PHP + IMAP
PHP IMAP extension - based on the c-client library
Pro
Coded in C
Available by default in
many PHP installations.
Contra
Suprisingly slow for many
of the IMAP calls.
Not maintained anymore.
Very limited IMAP
featureset.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44
20. PHP + IMAP
PHP IMAP extension - based on the c-client library
Pro
Coded in C
Available by default in
many PHP installations.
Contra
Suprisingly slow for many
of the IMAP calls.
Not maintained anymore.
Very limited IMAP
featureset.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 10 / 44
21. PHP + IMAP
Roundcube IMAP code
Pro
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Decent IMAP featureset.
Contra
Not available as a
separate component.
No documentation.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44
22. PHP + IMAP
Roundcube IMAP code
Pro
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Decent IMAP featureset.
Contra
Not available as a
separate component.
No documentation.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44
23. PHP + IMAP
Roundcube IMAP code
Pro
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Decent IMAP featureset.
Contra
Not available as a
separate component.
No documentation.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44
24. PHP + IMAP
Roundcube IMAP code
Pro
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Decent IMAP featureset.
Contra
Not available as a
separate component.
No documentation.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44
25. PHP + IMAP
Roundcube IMAP code
Pro
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Decent IMAP featureset.
Contra
Not available as a
separate component.
No documentation.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 11 / 44
26. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
27. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
28. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
29. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
30. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
31. PHP + IMAP
Horde Imap Client
Pro
Available as a separate
component.
Runs on any PHP
installation.
Very quick for a pure
PHP implementation.
Extensive support for
modern IMAP features.
Contra
Minimal documentation.
Complex library.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 12 / 44
33. Horde Imap Client
Installing the Horde Imap Client is trivial
# E n s u r e t h e Horde PEAR s e r v e r i s known
p e a r c h a n n e l −d i s c o v e r p e a r . h o r d e . o r g
# I n s t a l l t h e H o r d e A u t o l o a d e r component
pear i n s t a l l horde / Horde A utoloader
# I n s t a l l t h e H o r d e I m a p C l i e n t component
pear i n s t a l l horde / Horde Imap Client
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 14 / 44
34. Horde Imap Client
Listing your IMAP mailboxes ...
<?php
// P r o v i d e a u t o l o a d i n g o f c l a s s e s
r e q u i r e o n c e ’ Horde / A u t o l o a d e r / D e f a u l t . php ’ ;
// C r e a t e c l i e n t
°c = H o r d e I m a p C l i e n t : : f a c t o r y (
’ Socket ’ ,
a r r a y ( ’ us erna me ’ => ’ t e s t ’ , ’ p a s s w o r d ’ => ’ t e s t ’ )
);
// P r i n t m a i l b o x l i s t
p r i n t j o i n ( ”n” , a r r a y k e y s ( ° c−>l i s t M a i l b o x e s ( ’ ¶ ’ ) ) ) ;
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 15 / 44
35. Horde Imap Client
Listing your IMAP mailboxes ...
INBOX
INBOX/ A uf ga ben
INBOX/ D r a f t s
INBOX/ K a l e n d e r
INBOX/ K o n t a k t e
INBOX/ L e d g e r /2011/01/ company
INBOX/ L e d g e r /2011/02/ company
INBOX/Neue N o t i z e n
INBOX/ N o t i z e n
INBOX/ S ent
INBOX/ T e s t
INBOX/ s t e s t
INBOX/ t e s t
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 16 / 44
36. Invitations
Interface 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
37. Demo Time - Invitations
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 18 / 44
38. Horde Itip
Installing the Horde Itip is trivial
# E n s u r e t h e Horde PEAR s e r v e r i s known
p e a r c h a n n e l −d i s c o v e r p e a r . h o r d e . o r g
# I n s t a l l t h e H o r d e A u t o l o a d e r component
pear i n s t a l l horde / Horde A utoloader
# I n s t a l l t h e H o r d e I t i p component
pear i n s t a l l horde / H o r d e I t i p
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 19 / 44
39. Horde Itip
BEGIN : VCALENDAR
PRODID:−// M i c r o s o f t C o r p o r a t i o n // O u t l o o k 1 1 . 0 MIMEDIR//EN
VERSION : 2 . 0
METHOD: REQUEST
BEGIN : VEVENT
ATTENDEE ; ROLE=REQ −PARTICIPANT ; RSVP=TRUE : MAILTO: j o h n . doe @e xam pl e . o r g
ORGANIZER : MAILTO : t e s t @ e x a m p l e . o r g
DTSTART: 2 0 0 8 1 1 2 2 T190000Z
DTEND: 2 0 0 8 1 1 2 2 T193000Z
SEQUENCE : 0
UID : 0 4 0 0 0 0 0 0 8 2 0 0 E00074C5B7101A82E0080000000020D533ED0E4CC9010000000000000000100
00000094 C5C0A65E8CC4DB1AEC47FD1255FCD
DTSTAMP: 2 0 0 8 1 1 2 1 T182534Z
DESCRIPTION: Z e i t : Samstag , 2 2 . November 2008 20: 00 − 20: 30 (GMT+01: 00)
Amsterdam , B e r l i n , Be rn , Rom , Stoc k hol m ,
Wien. nn ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ ˜ ¶ nnn
SUMMARY: i n v i t a t i o n t e s t 2
END : VEVENT
END : VCALENDAR
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 20 / 44
40. Horde Itip
Answering the iTip request
<?php
// P r o v i d e a u t o l o a d i n g o f c l a s s e s
r e q u i r e o n c e ’ Horde / A u t o l o a d e r / D e f a u l t . php ’ ;
// P a r s e i T i p i n v i t a t i o n
° v C a l = new H o r d e I c a l e n d a r ( ) ;
° vC al− a r s e v C a l e n d a 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 ’ ) ) ;
>p
// D e s c r i b e t h e i n v i t e d p e r s o n
° r e s o u r c e = new H o r d e I t i p R e s o u r c e B a s e ( ’ j o h n . doe @e xam pl e . com ’ , ’ John Doe ’ ) ;
// i T i p H a n d l e r
° i T i p = H o r d e I t i p : : f a c t o r y ( ° vC al , ° r e s o u r c e ) ;
// Send r e s p o n s e
° i T i p− e n d S i n g l e p a r t R e s p o n s e (
>s
new H o r d e I t i p R e s p o n s e T y p e A c c e p t ( ) ,
new H o r d e I t i p R e s p o n s e O p t i o n s H o r d e ( ) ,
new H o r d e M a i l T r a n s p o r t M o c k ( )
);
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 21 / 44
41. Calendar
Photo: Ion-Bogdan Dumitrescu [http://www.flickr.com/photos/bitzi/265052661/ ]
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 22 / 44
42. Demo Time - Calendar
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 23 / 44
43. Demo Time - Mobile Calendar
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 24 / 44
45. Meeting time
Photo: Andrew Wipple [http://www.flickr.com/photos/andrewwippler/4428945418/ ]
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 26 / 44
46. Meeting time
Do you arrange a meeting time like this ...
We should talk about the
LinuxTag feedback sometime
during 16th and 22nd of
May 2011.
Sure. What about the 17th
May of 2011?
Sounds good. I’m available
from 8 am to 12 am that
day.
Lets say 9 am. That would
work fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44
47. Meeting time
Do you arrange a meeting time like this ...
We should talk about the
LinuxTag feedback sometime
during 16th and 22nd of
May 2011.
Sure. What about the 17th
May of 2011?
Sounds good. I’m available
from 8 am to 12 am that
day.
Lets say 9 am. That would
work fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44
48. Meeting time
Do you arrange a meeting time like this ...
We should talk about the
LinuxTag feedback sometime
during 16th and 22nd of
May 2011.
Sure. What about the 17th
May of 2011?
Sounds good. I’m available
from 8 am to 12 am that
day.
Lets say 9 am. That would
work fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44
49. Meeting time
Do you arrange a meeting time like this ...
We should talk about the
LinuxTag feedback sometime
during 16th and 22nd of
May 2011.
Sure. What about the 17th
May of 2011?
Sounds good. I’m available
from 8 am to 12 am that
day.
Lets say 9 am. That would
work fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 27 / 44
50. Meeting time
or rather like this ...
We should talk about the
LinuxTag feedback sometime
during next week.
Sure. What about tuesday?
Sounds good. I’m available
the whole morning that day.
Lets say 9. That would work
fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44
51. Meeting time
or rather like this ...
We should talk about the
LinuxTag feedback sometime
during next week.
Sure. What about tuesday?
Sounds good. I’m available
the whole morning that day.
Lets say 9. That would work
fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44
52. Meeting time
or rather like this ...
We should talk about the
LinuxTag feedback sometime
during next week.
Sure. What about tuesday?
Sounds good. I’m available
the whole morning that day.
Lets say 9. That would work
fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44
53. Meeting time
or rather like this ...
We should talk about the
LinuxTag feedback sometime
during next week.
Sure. What about tuesday?
Sounds good. I’m available
the whole morning that day.
Lets say 9. That would work
fine for me.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 28 / 44
54. Entering dates
How might the widget look like?
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 29 / 44
55. Demo Time - Quick Add
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 30 / 44
56. Horde Date Parser
Installing the Horde Date Parser is trivial
# E n s u r e t h e Horde PEAR s e r v e r i s known
p e a r c h a n n e l −d i s c o v e r p e a r . h o r d e . o r g
# I n s t a l l t h e H o r d e A u t o l o a d e r component
pear i n s t a l l horde / Horde A utoloader
# I n s t a l l t h e H o r d e D a t e P a r s e r component
pear i n s t a l l horde / Horde Date Parser
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 31 / 44
57. Horde Date Parser
Parsing your language...
<?php
// P r o v i d e a u t o l o a d i n g o f c l a s s e s
r e q u i r e o n c e ’ Horde / A u t o l o a d e r / D e f a u l t . php ’ ;
°date = Horde Date Parser : : parse (
’ n e x t week t u e s d a y morni ng ’
);
echo ° d a t e . ” n” ;
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 32 / 44
58. Horde Date Parser
... to make your computer understand you.
2011−05−17 0 9 : 0 0 : 0 0
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 33 / 44
59. Components
The webmail application has been the core element for 13 years now.
Webmail
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 34 / 44
60. Components
Calendaring is just another application.
Webmail Calendar
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 35 / 44
61. Components
But 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
62. Components
Not 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
63. 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
64. Components
And 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
65. Components
The 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
66. Flexible
Horde 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
67. Summary
Horde 4 PHP framework
The Horde 4 PHP framework is independent of the Horde
applications.
The Horde 4 architecture is extremely modular.
Horde Applications
Horde can be adapted to the workflow instead of the other way
around.
The groupware can be embedded into many different types of
infrastructure.
Simply the most flexible web groupware system around.
Gunnar Wrobel (wrobel@horde.org) Horde 4 May, 13th 2011 42 / 44