Events Manager

During my time at Jarbo, one of my absolute favorite things has been finding the tedious and time-consuming tasks in my coworkers' days and developing tools to make them less of a chore and more fun! ...or at least less painful.

Jarbo has a few churches as clients, and these churches have a lot of events, and they have them frequently. This means someone often has to go in and create a new event listing, which sounds simple on the surface, but it definitely wasn't. The old workflow went something like this:

  • Duplicate an event listing on the main events page, and modify the graphics, name, dates, links, and make sure you set the auto-publish and unpublish dates
  • Duplicate an event listing on the individual ministry page (kids, students, adults, etc), and modify the graphics, colors, name, dates, description, links, and make sure you set the auto-publish and unpublish dates

It doesn't look like much, but in this workflow you're hopping between a bunch of pages, and it makes it extremely easy to forget a step and introduce inconsistencies between the two listings—especially if you're in a rush or just not completely comfortable with the CMS.

How Events Manager helps

In order to streamline this process, I put together a Joomla extension that does a lot of the heavy lifting for us. Meet Events Manager!

Dashboard screen showing events in Events Manager

I know, it doesn't look like much. But the magic is in what it allows us to do. For some context, here's what an events page and ministry page might look like:

Grid of event listings on an events page

As you might have noticed earlier, there's a fair bit of redundancy. You might have even asked, "Why can't you just edit the event in one place?" which is a valid question, and exactly what we do with Events Manager!

Creating an event

Form to create an event in Events Manager

Creating an event is as easy as filling in this information. Most of these fields map to different parts of the event listings, but a couple of these fields are what helps streamline the whole process.


Events Manager includes a category system, allowing us to define custom categories and group events in them—effectively what we were manually doing on the ministry pages. This allows us to just add a module to each ministry page, select its category, and automatically populate a list of that ministry's events.

Form selecting a category to display on a ministry page

Unified publishing control

Our old process was actually nice in its use of Joomla's automatic publish and unpublish features. These allow you to specify a date and time at which a module should begin or stop being displayed on a site, which is extremely handy in that we can avoid any forgotten listing changes. So of course, Events Manager implements that functionality as well!

Technical challenges

By far the trickiest part of developing Events Manager was replicating the automatic publishing and unpublishing features of Joomla. At the time of coding, documentation was still extremely lacking for Joomla 4 and I struggled to find a way to utilize Joomla's existing system. Instead I settled on my own solution.

Every time the main events page is loaded, it has to fetch a list of events that should be published (i.e. their publish dates have passed). If we're already running this check, why not hook into this to also check if anything needs unpublished? It feels rudimentary, but it gets the job done and the impact on request time has been negligible in practice. At most we may encounter three or four events being unpublished at a time, and that's rare.

Lessons learned

As I mentioned earlier, documentation on Joomla 4 was very lacking during the development of Events Manager. Documentation is great to have to quickly guide development, especially of smaller scale projects like this. While it was frustrating at times to not have thorough (if any) documentation, I can appreciate the opportunity it presented to freshen up my PHP skills and think creatively about how to solve a problem. At the end of the day, that creative problem solving is really the joy of programming!