Welcome!

Welcome to the Joomla! Google Summer of Code (GSoC) 2013 project ideas page. As we move forward with the 2013 version of the Joomla! GSoC, we will use this page to develop possible project ideas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. Thanks!

If you are interested in participating as a student please review the materials on applying that are available at [1]. We strongly encourage you to ask questions about process and ideas on the mailing list.

Ideas

Opportunities exist for students to work with projects from either the Joomla CMS, the Joomla Platform or in some cases a combination of both.

In addition to this ideas list, the Joomla! Community is able to voice their opinion on features they would like to see via the Joomla! Idea Pool. Those wishing to add ideas to this listing are encouraged to review the Idea Pool and base their idea on the input received there. You can also view the past lists for 20122010 and 2009, which may be useful for reference. We ask that you keep ideas realistic for the time frame that students will have to complete their projects.

Unless a mentor has proposed a specific project, mentors from the mentor pool will be matched with student projects. However members of the mentor pool are available to answer questions on the Joomla GSoC mailing list.

Joomla CMS

Project: Refactor Media Manager

Brief Explanation: The current media manager is outdated and limited. Refactor the media manager to include a better user interface, more robust functionality, and seemless integration for extensions to use. The improvements could include: add other not yet supported medias (PDF, MP·,...), providing a folder tree, file property information, upload capabilities, move/rename files and folders, use of JImage for image basic processing (resize, crop).

Expected Results: Refactor the Media Manager to improve the usability, functionality, and reusability of the extension.

Knowledge Prerequisite: Joomla Platform, PHP, MySQL, Javascript

Difficulty: Medium

Project: Convert JavaScript from MooTools to jQuery

Brief explanation: Version 3 of the CMS introduced Twitter Bootstrap and jQuery to the core code base. Previous versions of the CMS had been using MooTools as the preferred JavaScript library. Currently, both JavaScript libraries are shipped and used within the CMS, which occasionally causes conflicts with a user's JavaScript functionality. The CMS would like to reduce the dependency on MooTools by converting its core JavaScript behaviors from MooTools to jQuery.

Joomla Platform

The Joomla Platform allows for ideas that can work within the Joomla CMS, or could be completely separate applications that have no connection at all. The Joomla Platform allows for applications to be built for the command line, process daemons and the web. The follow list outlines some ideas that will be immediately useful for the Joomla Platform project that a student may consider taking on. In addition to PHP libraries, the Joomla Platform also ships with MooTools and project ideas can be related to client-side operations as well as server-side. One emphasis on this year's list is on the incorporation of packages for accessing web services, however other ideas for libraries and packages are welcome. In some instances multiple students may work on different aspects of the project. Two examples of this are unit testing and JStemmer.

All code contributions must follow Joomla coding standards and include full unit test coverage.

Project: Platform Unit Testing

Brief explanation: The Joomla Platform has a good suite of automated Unit Tests, but code coverage is lacking in some areas. The goal of this project is to improve the code coverage by writing unit tests for the Joomla Platform.

Expected Results: The student will be expected to review the current code coverage report for the Joomla Platform and write and agreed-upon number of unit tests with particular attention to packages that are below 50% coverage. Preference should be given to non-deprecated classes but the student may choose from either the core tree (/libraries/joomla) or the legacy tree (/libraries/legacy).

Knowledge Prerequisite: PHP, PHPUnit

Difficulty: Medium

Project: Object Relational Mapping (ORM) in Joomla

Explanation:Joomla uses an Active Record implementation. Via JTable and JTableNested data are CRUDded in models to and from database tables. Tables for different content types share the same kind of data and therefore code is duplicated. There are plans to solve this with a Unified Content Model (UCM), which would use a shared table for all content and a specialised table per content type. In order to implement that the MVC was simplified and decoupled from several dependecies. A JData class was made to store data in and a JDataMapper to map the database tables (the general content table and the specialised tabel for the content type) to the data. In terms of Martin Fowler's Patterns of Enterprise Architecture Patterns (PEAA, page 285-292): Class Table Inheritance. This UCM would be a replacement for the current JTable classes.

This new model still has aspects of the Active Record pattern. A more general Data Mapper would make some implementations easier, especially when one-to-many and many-to-many relations are in play. A lot of this has already been worked out in the PHP-world with ORM-frameworks like Propel and Doctrine. No need to reinvent a complete new wheel; nowadays you can easily integrate other frameworks using Composer/Packagist. Some work has been done to use Doctrine ORM in Joomla extensions, but a more general approach would be great. The JDataMapper-class could eventually be a special case of this. The UCM-plans would be realised, but in a more general, object oriented and extendible way.

Expected Results:The focus for a GSOC-project could be on a more general ORM interface in which specific ORM packages could fit, or could be a specific implementation (like Doctrine) with which core CMS extensions could be refactored. Both the Joomla Platform and the CMS would benefit from this project.