GSOC 2013 Project Ideas

From Joomla! Documentation

150px‎

Welcome![edit]

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!

Discussion of ideas and other GSoC related items is welcome on our Google Group: https://groups.google.com/forum/?fromgroups#!forum/joomla-gsoc-2013

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.

If you are interested in serving as a mentor, please fill out the Mentor Application Form 2013.

Ideas[edit]

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 2012 2010 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[edit]

Project: Build New Media Manager for CMS 3[edit]

Brief Explanation: The current media manager is outdated and limited. Build a new media manager to include a better user interface, more robust functionality, and seamless integration for extensions to use. The improvements could include:
  • Storage of media information in the database (including standard file property information, created by user and date, rights and other meta data and tracking of media as assets).
  • Allow renaming of files
  • Automated creation of thumbnails to dimensions that the webmaster can configure
  • Support for a variety of media types that addresses security concerns
  • Creation of a number of controllers for media manipulation such as cropping, resizing and filtering and implementation of their use.
  • Use of nesting for management and display of media options
  • Management of both local and remote media
  • Support for creation of collections of media for example for display in a carousel as a separate content type.


Expected Results: A new Media Manager component to improve the usability, functionality, and reusability of the extension. Work should be fully documented and include system tests as well as unit tests for all new classes.
The work will likely include creation of a new media management package in the CMS library as well as reusable controllers for media related tasks.
The work should align with other work in the content model and the student should expect to interact extensively with the team working on the Joomla 3.2 release.
Knowledge Prerequisite: PHP, MySQL, Javascript, Joomla CMS, Joomla Platform, HTML5, Usability
Difficulty: Medium

Project: Convert JavaScript from MooTools to jQuery[edit]

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.
Expected Results: Dependency on MooTools is reduced within the CMS.
Knowledge Prerequisite: Joomla CMS, PHP, JavaScript
Difficulty: Medium

Project: html contenteditable front-end editor for content, categories and modules[edit]

Brief explanation: Allow seamless ajax-driven content-editing in the fronted of existing content and allowing to insert new modules.
Expected Results: Authors with ACL permissions should be able to directly edit the content (content and categories descriptions and titles) and modules (titles and content/settings, and inserting new modules as well from the front-end. The modules and content parameters editing should not be re-invented but just use the administration interface, if possible in front-end, otherwise with links to the corresponding administration page. This would at least allow to remove the guesswork of which module outputs what result. Using an open-source html-contenteditable javascript editor would help here in the formatting.
Knowledge Prerequisite: A good knowledge of Joomla, of jQuery and Ajax techniques would help a lot here.
Difficulty: Medium to Hard

Project: Add field 'created' in frontend article edit view[edit]

Brief explanation: When creating or modifying an article via frontend, the 'created' date is set automatically. Add an input 'created' wherein the date of creation can be modified.
Expected Results: The 'created' date of an article can be modified freely and even set to a future date.
Knowledge Prerequisite: PHP, little HTML
Difficulty: Easy

Project: Add plugin 'modal'[edit]

Brief explanation: Generate a plugin that adds the modal behaviour (JHTML::_('behavior.modal');). The plugin can be deactivated by a {}tag (like {modal state=0}).
Create some buttons for backend as well, that allows to create links with the modal attribute.
Background: A link with the attribute 'class="modal"' is opened in a kind of lightbox. Thus easily galleries can be generated. Additionally prepare editor(s) (e. g. via editor.css in template folder) to offer the modal class in their link edit display.
Expected Results: The modal behaviour is always available - if plugin is published and it is not forbidden by a tag. And a link with class 'modal' can easily be generated - via button and/or via editor.
Knowledge Prerequisite: PHP, HTML, Javascript
Difficulty: Easy/Medium

Project: Add plugin 'mvc override'[edit]

Brief explanation: Generate a plugin that enables the developer to overwrite models and controllers.
Expected Results: Any model and controller can be overridden.
Knowledge Prerequisite: Joomla! CMS, PHP
Difficulty: Medium

Project: Hathor is beautiful[edit]

Brief explanation: Make the admin template 'Hathor' more beautiful. Hathor is Isis' little sister. While Isis is breathtaking, Hathor still lacks a little css: She's edgy, and pale, and boring. Yet she always does what she is told. She deserves being tended a little. No additional functionality needed, no html changes, just css beauty.
Note that for Google Summer of Code here must be substantial coding involved in the project. In the case of Hathor this would likely involve work on making Bootstrap Javascript meet accessibility standards and work on the core administrator layouts.
Expected Results: Hathor is beautiful.
Knowledge Prerequisite: Javascript, CSS, HTML, PHP
Difficulty: Easy

Project: Refactor document model containers[edit]

Brief explanation: When I say document model containers, what I'm really talking about is all those arrays in the document model that store things like metas, scripts, css, etc. Those can be rendered collectively in the template using the jdoc head tag. The project would refactor the document model to allow more robust methods of working with document containers. One solution would be to use PHP ArrayObjects instead of simple arrays.
Expected Results: A robust solution should allow methods for appending and prepending items, method chaining, and the ability to create custom containers from within extensions and templates.
Knowledge Prerequisite: Joomla! CMS, PHP, some html, some css, and some javascript.
Difficulty: Medium
References:
(the editor would not allow me to post the link)

Project: Add fieldtype 'oclock' in fields[edit]

Brief explanation: Joomla!'s form generation offers a fix group of field types, such as text, textarea, radio, calendar etc. Write another field that enables the developer to create a time field, call it 'oclock' or something else sensible. The display of the time should be configurable via a format attribute. It should have the look'n'feel of the calendar field (Calendar form field type)
Expected Results: Generation of a time field called in xml via <field type="oclock" .../>
Knowledge Prerequisite: PHP, HTML, Javascript
Difficulty: Medium

Project: Task scheduler and manager[edit]

Brief explanation: Manage ,schedule and create tasks, from CMS administrator side, such as backup, virus scan, billing, reports, emailing and so on
Expected Results:: The student will be expected to build an hosting agnostic solution that act as a framework to manage task, allowing to manage tasks from third party extensions too, and some ready to run common task
References:
Knowledge Prerequisite:: PHP, Joomla CMS, Joomla Platform, Mysql, Operating Systems.
Difficulty: Hard
Possible Mentors: Nicola Galgano

Project: Improvements to Template Manager for CMS 3[edit]

Brief explanation: Templates are one of the most important elements of the Joomla CMS but except for the addition of template styles and template copy the functionality of the template manager has not changed dramatically since 1.5. Currently users must go outside of the template manager to add CSS, to add or modify override files or to manage their LESS. This project will make working with templates easier and more user friendly.
Expected Results: By the end of the summer the student will produce fully documented and system tested code to do at least the following tasks in the template manager user interface:
  • See a list of overrides for a template
  • Edit the overrides for a template
  • Create a new override for a template (ideally with option to copy the core layout as a starting point)
  • Add a new CSS file to a template
  • Edit LESS file
  • Compile LESS
  • Upload images to a template's image
  • Provide a method of simple interaction with web based font and other providers.

Exact details to be developed in discussion with mentors.


Knowledge Prerequisite: Familiarity with the Joomla CMS and templates, PHP, file management, usability, javascript
Difficulty: Medium

Project: Remote web services management system for CMS 3[edit]

Brief explanation: Integration with remote services is a central feature of the modern web. This Joomla CMS should provide ways for webmasters to seamlessly and easily manage their interactions withe external service providers.
Expected Results: A system for managing interactions with external services. This would include but not be limited to:
  • Secure management of public and private keys using Keychain
  • Storage of relevant urls
  • Methods to safely manage embedding by front end users
  • Plugins for Google, Twitter and Facebook authentication
Knowledge Prerequisite: PHP, Javascript, Joomla CMS, Web Servics
Difficulty: Medium to Hard

Project: Redesign Users Profiles as a Form of Content for CMS 3[edit]

Brief explanation: Build a new way to manage and display user profiles as a content type stored in the core content table with a combination of systems including both he current profile plugin system and new ways of approaching this including the use of the core fields for body, images, urls and xreference. At the same time improve integration with contact data providing the ability to easily search and sort and send email as well as to have complex layouts and integration of web services.
Expected Results: A front end user profile system that provides a flexible way to create and manage use profiles. This system will follow Joomla design patterns and be fully documented, have unit tests for any classes, and have system tests.
Knowledge Prerequisite: PHP, Javascript, usability, familiarity with the Joomla CMS.
Difficulty: Medium to Hard

Project: Create com_services for front end website administration for CMS 3[edit]

Brief explanation: The user experience for beginning site administrators in particular but also all site administrators will be improved if they can carry out basic administrative tasks such as updating the site title, meta data and email address, clearing cache, setting component defaults and doing basic user management in the front end. In this project you will provide a RESTful service and front end interface to that service to allow this. Specific tasks to be implemented will be decided in discussion with the mentors.
Expected Results: A basic services based system for managing certain administrative tasks from the front end of the Joomla CMS. This will be fully documented, have automated tests, and follow Joomla development best practices. It will also be extensible so that additional tasks can be added over time. This project will not involve content, only administrative tasks.
Knowledge Prerequisite: PHP, Javascript, web services, security practices, Joomla CMS and framework.
Difficulty: Hard

Project: Webdriver system tests for CMS[edit]

Brief explanation: Automated system tests allow us to test the CMS by automatically running Joomla from a browser, selecting menu options, and evaluating results. At present, most of the system tests are written using the now-outdated Selenium RC program. A small number of tests are currently completed using the newer Selenium Webdriver technology and using the Page Objects pattern to separate the page objects from the test objects. This project will build on the current base of Webdriver tests and expand the test coverage to include more of the CMS.
Expected Results: The student will complete the following tasks.
  1. Create a strategy & roadmap for Joomla system tests. This will include things like:
    1. How to organize the tests.
    2. How to cover the critical back-end and front-end functionality of Joomla.
  2. Write the reusable foundation classes for the expanded test coverage. These classes will be used to create the page object classes and test classes for the various portions of the CMS.
  3. Begin the implementation of the roadmap.
Knowledge Prerequisite: PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML
Difficulty: Medium
Possible Mentors: Mark Dexter

Project: Create a translating tool extension for Joomla[edit]

Brief explanation: Projects like Facebook (see insidefacebook.com/...), RememberTheMilk (http://www.rememberthemilk.com/...) or other projects using [2] are taking advantage of their communities in order to localize their software. Joomla is being translated by its community into 64 languages but there is plenty of space for more languages and more community participation.

At the same time many Joomla 3rd party developers are searching for a solution on how their communities can contribute in the translation of their extensions.

Expected Results: It is a Goal for this GSoC 2013 project to create an improved tool based in com_localise that allows to translators to easily translate and upload their translations to a GitHub repository using JGithub package. The tool also should allow frontend community members to suggest translated strings just like Facebook or Rememerthemilk does.
Knowledge Prerequisite: PHP, Git/Github, Joomla CMS and framework.
Difficulty: Medium-Hard
Posible mentors: Javier Gómez, Jean Marie Simonet


Joomla Framework[edit]

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.

References:

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

Project: Platform Unit Testing[edit]

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[edit]

Explanation: Implementation of Object Relational Mapping to provide an exiting new basis for building (complex) applications on or within Joomla.
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 will use a shared table for all content and a specialised table per content type. In order to implement that a JData class was made to store data in and a JDataMapper to map the database tables to the data. In terms of Martin Fowler's Patterns of Enterprise Architecture Patterns: Class Table Inheritance. This UCM would be a replacement for the current JTable classes.
Object Relational Mapping, especially when one-to-many and many-to-many relations are in play, has already been worked out in the PHP-world with ORM-frameworks like Propel and Doctrine. No need to reinvent a complete new wheel. Some work has been done to use Doctrine ORM in Joomla extensions, but it could be made more generally usable and easily available.
Expected Results:
The focus for such a GSOC-project could be one of the following:
  • a more general ORM interface in which specific ORM packages could fit; be it a "native" JDataMapper or other 3rd party ORM packages.
  • or a specific implementation (like Doctrine) with which core CMS extensions could be refactored. This would be a UCM-implementation using an existing ORM package.
Both the Joomla Platform/Framework and the CMS would benefit from such projects.
Knowledge Prerequisite: Object Relational Mapping theory.
References:
Difficulty: Medium to Hard
Possible Mentors: Herman Peeren

Project: Expand Google API coverage[edit]

Brief explanation: The JGoogle package provides a basic structure for using Google APIs in Joomla based code. However it only includes classes for a limited set of APIs. Your task is to dramatically expand the coverage of Google data. Specific APIs to be agreed upon with mentors, with some preference for those of immediate usefulness to the Joomla CMS.
Expected Results: A set of well coded, fully unit tested and documented implementations for a range of Google data.
Knowledge Prerequisite: Github, PHPUnit, familiarity with web services and the Joomla CMS.
Difficulty: Medium