Under the mentorship of Benjamin Trenkle and inspired by earlier efforts in this direction, Website Cronjobs is a project made possible by the OSPP '21 program from ISCAS.
About Me
I'm a Computer Science undergrad from India. Being all in on Open-source software as a user, I had long wanted to contribute to a popular Open-source project in a significant way. This was made possible by two events - I got into programming over the past year, and secondly I came across a Q&A for Joomla’s OSPP '21 projects. Organized by alumni from my university along with veteran Joomla! contributors, the journey since had me learning about Joomla!, drafting a rather hasty project proposal (which, I'm relieved to say has stood the test of time), bonding with the community and my would-be mentor, and developing a simple Joomla! plugin as part of my selection process.
About The Project
Not all web hosts offer access to the native Unix Cron. Moreover if they do, Joomla! has no way of managing these jobs from within the administrator backend.
Consequently, some in the community come up with their own solutions while others yet develop their own hacks to fit their personal use-case. It is also worthwhile to note that other major content management systems already have at least some form of native scheduling capabilities built-in. This means a hard time for Joomla! users and a competitive disadvantage to Joomla! itself.
Owing to these facts, Website Cronjobs was one of the projects Joomla! offered to prospective student developers under the OSPP 2021 program. As I went through Joomla’s project list, this project stood out to me the most, in part owing to my experiences with UNIX operating systems and in part because the problem this project is trying to solve is one I could relate with.
Project Goals
The project has one primary goal: to offer ways to schedule tasks from within Joomla’s ecosystem. The basis of the scheduling ecosystem is a component and a system plugin - currently under development in the project repository. The component itself is responsible for scheduling and managing configurable plugin routines, which are then triggered into action by an accompanying system plugin.
The goals for the component include a graphical interface to manage jobs on the administrator backend and integrating with the Joomla CLI to offer ways to configure and run jobs directly from the command line.
As for ways to schedule and trigger routines, we aim to provide 2 major options: a pseudo-cron as a way of lazy scheduling when native Cron is not available, and an integration with native Cron.
Development Timeline
The timeline that was part of my proposal was a tad incoherent, in part due to my inexperience with Joomla! and consequently, ignorance about the order in which I'll end up working on things.
At the moment, the MVC for managing jobs is mostly done and the Plugin API has been implemented. The management MVC is due to be wrapped up this week, post which I'll begin working on the main Cron Jobs plugin and the Web API. The goal, right now, is to have the functional management workflow and the Web API trigger be ready for the first evaluation round, due 16 August).
In the latter half of the timeline, I plan to work on the remaining parts of the plugin API, the command line interface, the native cron integration, the console plugin (to offer execution of scripts or programs), along with some other plugins to offer common routines found in the /cli folder in Joomla! 3.x.
I publish detailed weekly, sometimes biweekly reports on the Joomla volunteer portal here.
With this, we come to the end of this blog post. I hope the project and where it's headed is as exciting for the Joomla community as it is for me. I would like to take this opportunity to thank my mentor Benjamin Trenkle, who has left no stone unturned to guide me in the right direction and keep up the momentum.
If you have questions or suggestions, or would like to guide the development of the project, I'm available on Twitter (@ditsuke00) and RingCentral. I'm also open to code reviews on the project repository on GitHub.