ParticipantsThe original idea was a local code sprint with participants from Freiburg. But fortunately the event attracted also participants from other regions:
- Steffen Gebert
- Nico de Haen
- Johannes Klug
- Thomas Maroschik
- Steffen Müller
- Hans Christian Reinl
- Ingo Renner
- Ingmar Schlecht
- Fabien Udriot
- Andreas Wolf
TopicsWe worked in teams of 2-3 people on the following topics:
- TYPO3 Logging
- sys_collection and sys_categories
- File Abstraction Layer (FAL)
- Extension- and Package-Builder
- PHP class refactorer / Refactoring class names in TYPO3
Goals and Results
LoggingThe Logging project overall goals are:
- streamline the existing Logging with a single logging API,
- optimize/redesign the user interface of the Log module,
- create and maintain suitable documentation for the different target groups
- cleanup logging configuration
Ingo, Steffen G. and Steffen M. discussed, optimized, tested, and reviewed this new API for the TYPO3 core. The decision was to deliver good quality, including high unit test coverage, documentation, and a demo extension, before the API is going to be pushed to Gerrit. So far we have ~70% unit test coverage. The documentation, the new log module, and the demo extension are still work in progress. As soon as these tasks are completed, things will enter gerrit. This is planned before the release of 6.0.0-beta1. Stay tuned!
sys_collection and sys_categoriesA common use case in every advanced website is to be able to categorize records. Besides that, there is the need to share categories across records. So far, each extension had to bring its own category implementation which was not an ideal situation.
To fill the gap, a new category record type was introduced along with an API where extension developers can register their own tables to be categorized. The relations get stored within "mm" tables as a less time consuming approach. In the code sprint, Fabien continued to work on this topic and it was merged into the core on friday
File Abstraction Layer (FAL)The goal in the FAL department was to create a possibility to extend FAL by additional fields. The concept of Property Bags has been implemented, which enables extensions to ship additional file properties in so called "bags" of properties. Independent of the bag definition, separate services to extract meta information (such as exif data) out of files are used to actually determine the values of the property bags in the case of automatically detected information. It is planned - though not yet implemented - to create a compatibility layer between the old DAM meta data extraction services and the new architecture. In general, good progress on the issue has been made during the code sprint, but forther work is still necessary, which Andreas and Ingmar will follow up on during the coming weeks.
Extension- and Package-BuilderThe team aimed to continue the modeler and the backend code creation of the PackageBuilder and to migrate the ExtensionBuilder classes. The PackageBuilder can now render file content based on Fluid Templates and create the directory structure and the resulting files. Besides that the refactoring was started to be independant of the current framework context.The Modeller based on jsPlumb was integrated in PackageBuilder to create domain-objects with properties which interact with the user-interface of the TYPO3.Ice-package. It's also possible to define relations between different domain-objects. The modeller can be found on GitHub.
PHP class refactorer / Refactoring class names in TYPO3The stated aim was to continue the concept and implementation of a refactorer for PHP classes. The tool already left the proof of concept state and is able to refactor class names and references to class names. Further it can introduce, change and remove namespaces. It aims to be a central part of all forward- and backporting demands including automated code migrations. Based upon a modified PHPParser the refactorer will also be used extensively by the new Package- and ExtensionBuilder. The current progress is visible at GitHub. As a sideproject a vibrant discussion was started by Tom and is ongoing, if many TYPO3v6 class names could be cleaned up and clarified.
LoggingOnce the Logging API was merged, we will start to replace the existing logging functions/calls with the new API. Beside that, we will write and publish extensions to provide additional LogWriters (e.g. to email, Graylog2) and LogProcessors (additional system information) and finish the Backend module.
sys_collection and sys_categoriesWe have to create some buzz to demonstate the categorization feature and hopefully will see a growing number of extensions adapting it. A category tree could be build based on the page tree.
Extension BuilderThe next steps for the Modeller are refining the behavior of relations and domain-objects and their interaction with other parts of the PackageBuilder.
Refactoring class names in TYPO3After the PHPParser has reached a stable state, it will replace the regex based class parser in the Package- and ExtensionBuilder. We will take the chance of the 6.0 release and try to clean up TYPO3 class names using the PHPParser. A discussion about that is going on in the TYPO3 core-mailinglist.
Community spiritThe event was a great success. We had a lot of fun spending our time on the TYPO3 project. Working in teams and meeting developers was very motivating and increased productivity. We hope to see more code sprints in the future.
Thanks to our sponsorsWe are very happy that all expenses were covered by our sponsors. This once again proved that the TYPO3 project is run by real community players. Thanks to:
- TYPO3 Association for covering travel costs
- jweiland.net for sponsoring the food for three days and the social event
- /gebrüderheitz for the location and all drinks
- ndh-websolutions and Maria Müller Übersetzungen for accommodation
- dkd internet Service for the day off for Ingo
- Volker Graubaum from e-net Consulting for the spontaneously taking over the BBQ costs
- Steffen Müller for organization
- Robert Weißgraeber for offering clubmate/beer, which we didn't drink in the end