Joomla 4 Report, London Super Sprint, Jan 2017
Manifest files and Service Workers
Work was continued on a manifest.json plugin that will allow developers to create custom service works for Joomla. This will continue to be worked upon in the following repository until it is ready to be merged into the Joomla 4 branch https://github.com/joomla-extensions/manifest-file . Given the service worker specification is still actively being worked on by the W3C team (see: https://w3c.github.io/ServiceWorker/), we likely will not put any major service worker plugins in the core to start with (other than possible a simple whole site caching example), however we might release some core supported plugins that we can upgrade at a faster pace as the specification evolves. This remains a decision that will be taken closer to the release of a beta.
The team reviewed the current MVC layer. There has been minimal code duplication across extensions since Joomla 1.6, there are however large amounts of code duplication in modules which are proxy views for components. Joomla’s MVC layer could still benefit from being more straightforward to use to make it more attractive to both our current and new developers.
The idea of the new MVC layer has clearly not worked out as intended and because of this we must look to improve various parts of the current MVC structure that are causing integration issues.
We came up with a 10 point plan to help improve various aspects of the MVC layer to make things more straightforward for our community.
Move the template files (like default.php) into JLayouts everywhere.The goal is to make layouts reusable, to use them in views, modules etc. and to decouple the content from the view.
JModelLegacy::getInstance() deprecation in favour of calling the model directly
By default the Controller will build the state. The model will by default set ignore_request => true.
Dispatcher as an component entry point (Class based), as an alternative to an entry file.
Add a multi-task controller interface
com_config refactor back to old MVC (this will require namespacing to be implemented first but should provide an example of frontend controllers calling backend tasks)
Component autoloading when namespaced (We will adopt the structure first proposed by the Joomla X team in odense for the extension namespace structure): https://volunteers.joomla.org/teams/joomla-4-architecture/reports/115-joomla-4-architecture-sprint-odense-dk
Calling components and especially modules in Lambda functions to control what is in the entry file scope
Controller Name should not be format dependent (controller.json.php)
Remove “view.” From the view filenames and only keep the type for new MVC / namespacing. (view.html.php -> html.php)
This PR (https://github.com/joomla/joomla-cms/pull/13684) is a first draft on concept of using JLayouts everywhere. It keeps backward compatibility by loading the old template file / override if it exists and there is no JLayout implemented following the naming conventions
Working Development strategy for 3.8 and 4
Joomla 3.8 will be the latest minor release for the Joomla 3 series - although we need formal confirmation of this from the Production Department when formed (although has been provisionally discussed within the PLT already). It will likely only contain backports from the Joomla 4 branch to help extension developers keep code that runs on both 3.x and 4.x unless the CMS Maintainers team considers the circumstances exceptional.
As namespaces should be introduced since ages, a plan was set up to not harm the extension ecosystem and make a smooth migration to namespaces for the core.
The libraries folder for the MVC layer will be moved to namespaces for Joomla 3.8, and will be placed in a libraries/src folder. Alias will be set up so that the non-namespaced classes will still work and we don’t break all 3rd party extensions. For example the class JControllerLegacy will be put into the folder libraries/src/Controller/Controller.php. We will likely not remove the alias in J4 to clean up the legacy layer but keep it as a deprecated layer and only remove it in Joomla 5. During the sprint provisional work was made on namespacing the Controller, Model, View and Table classes and subclasses, additionally, JLoader had support PSR-4 namespace registration added alongside the existing PSR-0 support.
Controllers Building State
This was started on in the sprint. It turned out to be harder than envisaged because many frontend controllers had to be created to do state population (as many just used the default component controller for displaying data). This will continue to be worked on after the sprint has finished.
Dispatcher and Controller Interface
The dispatcher was actively worked on during the sprint. This pull request introduced the base https://github.com/joomla/joomla-cms/pull/13687 dispatcher class and this pull request introduced a multi-task controller interface that the dispatcher will require to run https://github.com/joomla/joomla-cms/pull/13670
Backend Template Redesign
Since August, we’ve been working on migrating from Bootstrap 2 to Bootstrap 4, and with this, redesigning the entire admin interface, based on the designs made by Elisa Foltyn. Our goal was to use modern practices to improve performance, work flow and overall, move forward with the times.
We’ve worked closely with the UX team to help formulate ideas on usability improvements and simplify Joomla for first time users, as we’ve aware it’s too overwhelming. We discussed several demos of the installation, the edit view, the list view as well as the control panel and decisions were either established where enough information was available or postponed till the UX team comes with the results of their research.
The changes made to the Joomla 4 CMS will now involve changes in the process in contributing client side pull requests. We’re now utilising Node.JS and Grunt to install/update 3rd party client side dependencies. In addition to that, we’ve also moved from LESS to SCSS so Node will also be used for compiling
Long gone is the IcoMoon font icon pack in favour of Font Awesome, however we’ve kept backward compatibility in mind and mapped all the old classes for 3rd party extension developers, should they wish to stick with them. In addition to this, all core jQuery scripts have been re-written in vanilla JS to improve performance and we’re in the process of developing custom elements as a solution decouple the CMS from the Bootstrap framework. Custom elements are something we think will used lots over the next 5 years. We will soon be placing the work on this in the repository at https://github.com/joomla-projects/custom-elements.
In the meantime the backend template group will continue to work on the approved installation mockups and general usability improvements.
Whilst it is not planned to add webservices into Joomla 4.0 - it’s important to us that it happens in the Joomla 4.x series (possibly in the form of a GSOC project with a dedicated student this summer should we be accepted)
We agreed that of the basic idea to have a new entry point /api and a new entry point with a new custom application JApplicationWebservice rather than the previously attempted plugin approach
This will need outreach with extension developers to encourage them to move away from calling the deprecated JApplicationCms::isSite and JApplicationCms::isAdmin methods in favour of JApplicationCms::isClient($client_name).
There are certain issues to solve and discuss, for the initial release we will probably go with a simpler API providing public access to non-confidential information and authenticated access to post and put tasks. This is because having column level access control doesn’t really fit with the way our existing ACL layer works.
A special Thank you to Rowan for organizing the event! It went all great and thanks to your management everyone could focus on making Joomla better.