December 18, 2008

Three ways to create Web-accessible calendars on your intranet

Author: Ben Martin

Let's take a look at three projects that are aimed at showing calendar information through a Web interface: WebCalendar, VCalendar, and CaLogic. These projects run on a LAMP server and provide a Web interface to calendar events.

For testing when one or more calendars are required I'll use the US Holidays and UK Holidays from the publicly available iCalendar files at All installation and testing was done on a 64-bit Fedora 9 machine.


WebCalendar is a written in PHP and can use many database engines as a back end. It allows single- and multi-user setups. With it, you can publish change notifications and event reminders over email, and overlay multiple calendars (potentially from different users) onto a single view.

I installed version 1.2 from source using the below steps. This works for Fedora; other distributions might store the Apache conf.d directory at a different path.

# mkdir -p /usr/local/php
# cd /usr/local/php
# tar xzvf /.../WebCalendar-1.2.0.tar.gz
# ln -s WebCalendar-1.2.0 WebCalendar
# vi /etc/httpd/conf.d/WebCalendar.conf

Alias /webcal /usr/local/php/WebCalendar

<Location /webcal>
Order deny,allow
Deny from all
Allow from
Allow from ::1

# service httpd reload
# cd /usr/local/php/WebCalendar
# chgrp apache includes
# chmod g+w includes
# chmod +s includes

To complete the procedure you should load the http://localhost/webcal into a Web browser. The Web installation is a four-step process, ending with you logged into the WebCalendar interface as the admin user. Step 1 of the install process asks you to set a settings.php password and then log in with it. In step 2 you give the type and location of the database you want WebCalendar to use. In step 3 you are offered a button to install the database schema, and step 4 asks you for the server URL, providing a guess based on how you are currently accessing the site. It prompts for which authentication you want to use, and whether a default admin account should be created. If you select the latter option, you should log in and change the admin password as your first action. Authentication can be done in many ways: through WebCalendar itself doing database username and password lookups, HTTP-auth, NIS, LDAP, or IMAP.

WebCalendar lets you define views that combine the calendar granularity (day, week, month) and layout (horizontal, vertical, timebar) with a selection of which user's calendar you wish to see in the view.

You can also add another user's calendar to your own as a layer. You can specify a color for each layer, and have WebCalendar display an event only once even if it appears on multiple layers. For example, if you are viewing holidays for the USA and UK, events like Christmas Day will appear in both calendars, but you only want to see them once.

WebCalendar can add a remote calendar as a layer by specifying not only the URL but an ID, and also, curiously, the first and last name for the remote calendar. Remote calendar functionality seems to be based on the code that supports adding another user's calendar as a layer.

The documentation mentions that two-way authenticated iCalendar (ics) sync is supported. This feature is not really advertised through the Web interface, and I suspect it is supported through the icalclient.php file, which contains a large warning about it being alpha code. I found that once enabled through the Preferences in the Web interface, I could access http://localhost/webcal/icalclient.php as a remote calendar with Mozilla Sunbird and add, rename, and cancel events. I couldn't delete an event, and the icalclient.php file mentions that you must cancel an event rather than attempt to delete it. Sometimes it took a few seconds before the Web interface would see changes made through Sunbird. I found that when using icalclient.php sometimes I would find events I did not edit through Sunbird duplicated in WebCalendar. I guess the alpha code warning holds. See the header comments in icalclient.php for details on installation and setup.

The view and layer support in WebCalendar allows you to combine many calendars into a single presentation in many ways. Being able to edit your calendar through external, dedicated calendar applications like Sunbird is a huge plus. Hopefully the issues with duplicates being created by icalclient.php will be fixed in an upcoming release. SyncML support is also cited as a to-do item.


VCalendar requires PHP 4.1 or later and MySQL 4.x or later. Windows users can work with versions of VCalendar for ASP and .Net. VCalendar has the prettiest calendar of the three projects.

I used version 1.1.5 with patch Given that the patch was released midway through 2006 it seems strange that a new version encompassing the patch has not been released yet. The manual steps to get VCalendar installed are shown below.

# cd /var/www/html/
# unzip /.../
# cd vcalendar
# unzip /.../
Archive: /.../
replace index.php? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
# chown apache.apache Common.php temp images/categories
# chmod g+w Common.php temp images/categories
# chmod +s temp

# mysql -p
mysql> create database vcalendar;
mysql> GRANT ALL ON vcalendar.* TO vcalendar@'localhost' IDENTIFIED BY 'vcalendar';

Like WebCalendar, you complete installation by loading http://localhost/vcalendar into your Web browser. That installation is just a two step process with a warning message as the third page. Step 1 checks file and directory permissions, which should be fine if you have executed the above commands. Step 2 lets you configure your database connection and optionally drop and recreate the database schema. The final step warns you that you should remove the installation files completely.

I began testing VCalendar by trying to import my Holiday calendar files for testing. It seems that VCalendar offers no import/export features. Even though the calendar information is stored in MySQL, not being able to import or export an ical file makes VCalendar more of an isolated island of event data.

You can view an entire year, month, week, or day at a time, and the little buttons scattered around the borders and headings let you change between view granularities easily. One strange user interface decision is that you have to click the little plus button to add an event to a specific day. If you happen to be viewing one date already and click "Add event" from the top menu, you still must explicitly nominate the date you want the new event to occur on. I would have thought having the currently selected day as the default when you add an event would make sense.

VCalendar does not include support for creating custom views or layering another user's calendar information over your own. If you want to allow users to maintain a calendar through a Web interface or you want to post a list of events for your organization on the Web, and only through that Web interface, then VCalendar works well -- but your users might get a little annoyed that they cannot subscribe to your calendar or export an event to ical format to import it onto their smart phone or other calendaring device.


Like VCalendar, CaLogic requires a MySQL database to store its data. CaLogic has the most spartan documentation of the three projects. On the other hand, it offers a daunting number of options that users can tweak.

The steps shown below will complete the manual part of installation.

# cd /var/www/html
# unzip /.../
# mv calogic122 calogic
# cd calogic
# chmod 777 admin

# mysql -p
mysql> create database calogic;
mysql> GRANT ALL ON calogic.* TO calogic@'localhost' IDENTIFIED BY 'calogic';

After these steps, load http://localhost/calogic/setup/setup.php into your Web browser. Step 1 of the Web install asks for database location and authentication credentials. Step 2 lists a huge number of options, including which functionality is available to users, theme settings, and the site administrator name and email address. The third and final step informs you that the admin account is created with the password admin. After completing installation through the Web interface you should remove the setup folder and change the admin directory back to being read-only.

I mostly stuck to the default settings for color scheme and theme for CaLogic, though I think that having a small border around both the days in the mini month views and the menu makes the screen appear busier than the other calendar projects'. Luckily CaLogic allows you to set the color of every calendar element through the Web interface.

When you hover over an event in the month view, a popup bubble appears showing you the event description. The bubble states that you can click the event to view or edit it, or use Ctrl-click to view it in a new window. Unfortunately neither of these actions worked for me. The only place I could click on an event was in the day view; both the month and week view did not allow me to directly click an event in Firefox 3.0.2.

I couldn't find an easy method to import or export one or more events to ical through CaLogic. The Calendar drop-down menu at the top of the interface allows you to switch which calendar you are viewing, but you can't easily combine many calendars into a single holistic view (layers).

I found creating a new user with CaLogic to be an exercise in frustration. If you leave any information out that CaLogic requires it will simply tell you that "None of the fields may be blank" and not highlight which ones you have missed. Once I did populate all the fields I got an SQL error and lost all the information I entered. I also found that email addresses for the local network were rejected by CaLogic; both ben@localhost and ben@localhost.localdomain were considered invalid.

The CaLogic Web site mentions that the current version can update its database from any previous version. As CaLogic has been available for more than five years, you should be fairly comfortable that data entered into the current CaLogic will be able to be used with future versions too.

Final words

All three projects allow you to associate custom fields with events. Only WebCalendar and VCalendar have an interface that lets you search for specific events using keywords, categories, and a date restriction; CaLogic has no search interface.

I found the color scheme of CaLogic not to be as kind on the eyes as those of WebCalendar or VCalendar. Probably the nicest was VCalendar, which completely avoided using thin lines to separate days in the month view.

The ical import and export feature of WebCalendar makes it the number one choice if you want to let your users download an event for use on mobile devices. None of the three projects supported SyncML, which means extra work for you if you want to let users edit their calendar information with a mobile device and sync it back to your Web calendar interface.

My top pick would be WebCalendar, not only for its ability to import and export ical, but also the ability to use layers to combine many calendars onto a single view. To expose a single Calendar to the Web I would use VCalendar over CaLogic because I find the default theme and color schemes of VCalendar to be more appealing.


  • Reviews
  • Internet & WWW