Basic design concepts
The new installer backend would utilise the power of Symfony services as it will solve a lot of performance and extendability issues by itself. Because these services should not be part of the production environment it seems necessary that we introduce a new one dedicated for installing phpBB.
The installer will consist of three (types of) parts:
- The installer
- The installer modules
- The installer tasks
An installer task is an object which performs a specific task (checking if config.php is writable, or installing the database schema). A module is an object which wraps a collection of tasks to be performed and managing their execution (it would make sure that everything is executed in the correct order and would also manage time in a similarly to database_update.php in the current installer package. Finally, the installer would be a collection of modules.
The modules and tasks would share certain properties, as both types of services could be marked essential or non-essential which means that the installer will have support for different install profiles as well as the ability to only provide the option to certain tasks if the functionality on the web host is provided (for example if we implement a task to download extensions from phpbb.com this option would only be displayed on hosts where some PHP functionality is enabled to connect to remote sites).
AJAX based installer frontend which reqiures way less user interaction. So only requiring the user to enter relevant data after the requirements were checked. If requirements are not met, the installer notifies the user and exists.
Refactoring the current installer
The current installer would be refactored to four modules
- Checking if requirements are met for essential modules (file writeability etc), if not then displaying an error message
- Collecting data from user that required for installing phpBB and checking it
- Actually installing phpBB, at this point all requirements should have been checked in the previous two points, so there should be no user interaction required
- Collecting data for admin account and setting it up