Flexical is a PHP/MySQL web calendar, available under the GPL. There have
been serious improvements since it was forked from phpEventCalendar, and
someday may have its own icalendar import/export functions. In lieu of that at
present, events may be exported to Google Calendar, which can export to
icalendar files. The only reason development continues is because online
portal calendars (like Google Calendar) don't provide the sort of display one
needs to print out monthly event calendars.
Some distribution archives can be found at the web site where Flexical is in
production use. The newest updates can be obtained via the gitweb interface at
git.christfor.us. The main branch
probably won't work, but the stable branch ought to. The in_use branch is used
at the production site linked above (and below). Sorry, documentation is
parse. Check the help directory for more complete information.
To see it in action, visit
the production site.
There's also a virgin demo install you can play
with. Though it's not nearly as customized, you can log in as a privileged
user and play with it.
In version 1, we used only two version numbers. Some of the new minor versions
required database changes relative to their predecessors, and those were
accomplished via the scripts in the "upgrade" folder. In version 2, we have changed to three version numbers, as follows:
- When the author thinks that FlexiCal has advanced in a thoroughly significant way, this number will be incremented and the Minor number and Tick reset to zero.
- When an upgrade requires a database change, this number will be incremented and the tick reset to zero.
- For less significant (though possibly still important) changes, this number will be incremented.
- Calendar tab, showing the classic landscape month calendar, weekdays
ordered Sunday through Saturday, with a basic interface for selecting a
different month and year, or navigating to the next, previous, and current
(present-day) month. This may be displayed using a legacy HTML table
or the CSS-based "display: table" property. Internet Explorer can
only handle the former, but does display the calendar correctly when legacy
tables are used. (I don't use Internet Explorer as a rule, so please let me
know if later versions work differently.)
- Event List tab, showing a tabular listing of events that fall within a
specified date and a number of time units (days, weeks, months, years) later.
It also allows navigation to the next or previous time span, or to the current
date as a starting point. Events within dates are listed chronologically.
- Event view tab, displaying a single event, and listing other events that
occur on the same date.
- A standard way to create other tabs or "actions" that may not be displayed
as web pages. Several examples are included, which are used by the
author to generate LaTeX code based on the calendar or a snippet of HTML
that can be incorporated into another web page to list events in the
- Categorization of events. The display of event and category names can be
tweaked with CSS, so that an event's category may be recognized at a glance.
There is an interface for administrators to configure this through the web.
Categories can be selected (or not) for the display of their events, and some
categories can be designated as "hidden," so that casual users won't ever see
them. Whole categories can be deleted with all their events at once, and their
names can be changed by an administrator.
- Instead of offering repeating events, which are more computationally
expensive, we have the ability to copy events in a sophisticated way, repeating
copies by day, week, month-by-day, month-by-date, and year. Of course, single
copies are also possible.
- Events can be associated with each other as "related" events. This allows
an event to repeat in some pattern when the copy function is used, while
retaining an association between the copies, so that they can all be
manipulated in one batch. It also allows different events to be manually
related to each other, so that they may be treated as a group. This allows a
more generalized approach to the implementation of repeating events in other
calendars. For example, repeating events must fall within the pattern of
repetition, but our related events can either fall within a pattern (via the
event copy capability mentioned above), or deviate from that pattern. Each
event remains independently editable, so that its title, description, times,
and even category may deviate from the events to which it is related. As a
convenience, related events allow navigation from one event directly to the
next or previous occurrences.
- A filter function allows the user to find particular events in the
specified time frame that match certain criteria. Filtered lists of events can
be modified or associated in one batch.
- User levels that distinguish between unauthenicated viewers, privileged
viewers, event editors, and administrators. Popup windows are avoided when
possible, and links are provided with displayed events, for privileged users,
so that the effort required to create, modify, or delete events is
- Administrators are able to backup and restore the calendar database through
- As of version 2.0.1 (the real version 2), all calendar configuration
variables can be set by administrators through the web. Old
configurations are saved and can be reused or discarded as desired.
- The new database-centered configuration system now allows for a super
easy installation and setup procedure. The only technical requirements
are that the installer must upload the distribution archive to the web
server, and obtain the required database connection information
(database server, name, and login credentials). The calendar will
automatically set itself up when first loaded, asking for all the
- A translatable (English only for now) online help system describes
the configuration and use of the calendar system.
- As of version 2.1.0, we're using jQuery for context menus and some date
selection. (In time, all date selection will be possible by a drop-down
calendar.) In addition, you can now type text into the blank spaces in
Calendar View! The text will print, but is not saved in any way. On a related
note, Calendar View is now generated exclusively as an HTML table, without
using any "display: table*" divs. Accordingly, it can no longer be toggled
between the two formats, and there is no default configuration to choose.