GSOC 2016 Project Ideas: Difference between revisions

From Joomla! Documentation

Created page with "== Welcome to GSoC 2016 Ideas Page == Welcome to the Joomla! Google Summer of Code (GSoC) 2016 project ideas page. As we move forward with the 2016 version of the Joomla! GSo..."
 
m forgot mailto:
 
(63 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Welcome to GSoC 2016 Ideas Page ==
== Welcome to GSoC 2016 Ideas Page ==
Welcome to the [[GSOC_2016|Joomla! Google Summer of Code (GSoC) 2016 project]] ideas page. As we move forward with the 2016 version of the Joomla! GSoC, we will post ideas that have been submitted to the GSoC Team below.


Welcome to the Joomla! Google Summer of Code (GSoC) 2016 project ideas page. As we move forward with the 2016 version of the Joomla! GSoC, we will post ideas that have been submitted to the GSoC Team below.
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!


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 [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page Google].  We strongly encourage you to ask questions about process and ideas on our [https://groups.google.com/forum/#!forum/jgsoc-2016 joomla-gsoc mailing list].


If you are interested in participating as a student please review the materials on applying that are available at [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.
Guidelines for sending proposal are present on our [https://docs.joomla.org/GSOC_2016 GSoC Home Page]


Find examples of other years at https://docs.joomla.org/GSOC_2014_Project_Ideas
Find examples of other years at https://docs.joomla.org/GSOC_2014_Project_Ideas


== Important Guidelines on Submitting Ideas ==
<!--== Important Guidelines on Submitting Ideas ==


You do not have to be a GSoC student or mentor to suggest possible project ideas.
You do not have to be a GSoC student or mentor to suggest possible project ideas.
If you have ideas for the Joomla Google Summer of Code Program please send them to us at this form:  
If you have ideas for the Joomla Google Summer of Code Program please send them to us at this form:  
 
<br><br>
'''[https://docs.google.com/forms/d/1gheaUgNjGl7F9uuKl9HoWclhhjZ0aQZe1Oi7TXGYEeI/viewform?usp=send_form Click for Ideas Submit Form]'''
::'''[https://docs.google.com/forms/d/1VfQwcEq-apsHqpPRYjwPKzN5R5zNLmbJKa5Wfpp7oQI/viewform?c=0&w=1 Click for Ideas Submit Form]'''
 
<br>
There are some important guidelines to submit ideas, please read these carefully before adding your ideas:
There are some important guidelines to submit ideas, please read these carefully before adding your ideas:
* Ensure your idea is able to be completed in a fixed period of time. GSoC runs officially '''between May 25th 2015 and August 17th 2015.''' This is a very short period of actual coding time. Ideas should respect the time that students have available for the program.  
* Ensure your idea is able to be completed in a fixed period of time. GSoC runs officially '''between May 23th 2016 and August 30th 2016.''' This is a very short period of actual coding time. Ideas should respect the time that students have available for the program.  
* Keep ideas realistic. The ideas on this list should maintain a realistic amount of work for a single student, junior level-developer, who is working with a compressed timeline and a fixed completion ('pencils down') date.  
* Keep ideas realistic. The ideas on this list should maintain a realistic amount of work for a single student, junior level-developer, who is working with a compressed timeline and a fixed completion ('pencils down') date.  
* Keep ideas core. The purpose of GSoC is to improve Joomla itself. This is not the time to add ideas for new extensions or features that may not be included by the PLT. If the idea is related to the framework, please consult the framework team directly about new ideas to ensure there is interest in having the package included as an official Joomla Framework package.  
* Keep ideas core. The purpose of GSoC is to improve Joomla itself. This is not the time to add ideas for new extensions or features that may not be included by the PLT. If the idea is related to the framework, please consult the framework team directly about new ideas to ensure there is interest in having the package included as an official Joomla Framework package.  
* Joomla 4. Currently there is not a baseline for what Joomla 4 is and what it could be. Ideas centered around Joomla 4 would not fit in well with the goal of GSoC 2015.
* Joomla 4. Ideas centered around Joomla 4 would not fit in well with the goal of GSoC 2016, we would recommend to discuss the idea on our mailing lists before suggesting.
* When in doubt, reach out. If you're unsure if your idea belongs on this list, please post to the GSoC 2015 mailing list and ask about the community's interest.  
* When in doubt, reach out. If you're unsure if your idea belongs on this list, please post to the GSoC 2016 mailing list and ask about the community's interest.  
* No documentation-focused projects. Google Summer of ''Code'' is a program about code. We expect our students to document their work, but writing documentation for Joomla as a project does not align with the goals of GSoC.
* No documentation-focused projects. Google Summer of ''Code'' is a program about code. We expect our students to document their work, but writing documentation for Joomla as a project does not align with the goals of GSoC. -->


[[Image:Gsoc2016.png|250px|center|link=GSOC 2016]]
== Idea Pool ==
== Idea Pool ==


=== Joomla CMS Ideas ===
=== Joomla CMS Ideas ===


==== Refactor Joomla CMS to use Dependency Injection ====
====Project I: Improved multi-lingual content management ====
'''Brief Description:''' Joomla's CMS currently runs on a factory based design for allowing developers to access the application and shared library resources. This causes major issues when trying to utilize more modern approaches like auto-loading php libraries and adding in other vendor's libraries.  
  <table border="0" style="width:100%">
  <tr>
    <th>'''Project Description:'''</th>
  </tr>
  <tr>
    <td>The idea is that when users want to translate content items on a multi-language site, they can have the articles side-by-side (dual-pane). This way you don't have to switch back and forth between articles. Respect also the ACL settings. So someone assigned for Dutch cannot translate any French documents for example.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>A dual-pane translation screen<br>An ACL setting for allowing access to language based articles</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, Joomla CMS multi-lingual system, JavaScript, Joomla ACL, '''Needs MVC knowledge and ability to set up a basic multilingual Joomla site'''</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to Hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:rob@pollen-8.co.uk Rob Clayburn],[mailto:jean-marie.simonet@community.joomla.org Jean-Marie Simonet]</td>
  </tr>
</table>
 
[[Image:Gsoc2016.png|50px|center]]
----
 
====Project II: Shareable Draft Content ====
 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>There is currently no easy way to share a draft version of an unpublished article with people who do not have Administrator access.  This project would add elements to the Articles: Edit user interface that would support the generation of a shareable link that would allow those with the link to view a draft version of an article. This project would be a complete new feature that could be merged into Joomla 3.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>The details of the user interface would be subject to change/discussion, but could look something like the following:
A new "Save as Draft" toolbar button on the Articles: Edit page.  When clicked the article will be saved as a draft in the content version history.  The version history page will need to be modified to show this special version of the article.
A new "Share" toolbar button on the same page.  When clicked, the draft version of the article opens in a new tab with a special URL which can be copy-pasted so that the draft may be shared prior to publication.
Bonus points for adding a "Preview" toolbar button that will open a new browser tab with a preview of the article currently being edited, without needing to save the article first.
Code must be accompanied by documentation in the form of wiki pages and full help screens. Code must be accompanied by appropriate tests.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, Joomla CMS</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:theachalaggarwal@gmail.com Achal Aggarwal], [mailto:coolbung@gmail.com Ashwin Date]</td>
  </tr>
</table>
 
[[Image:Gsoc2016.png|50px|center]]
----
 
====Project III: Administrator Menu Editor ====
 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>This has been discussed at some length here: https://issues.joomla.org/tracker/joomla-cms/5492</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>An appropriately coded extension that could be merged into Joomla 3.x.
Code must be accompanied by documentation in the form of wiki pages and full help screens.
Code must be accompanied by appropriate tests.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, Joomla CMS</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:peter.martin@community.joomla.org Peter Martin], [mailto:llewellyn@vdm.io Llewellyn], [mailto:tharuna.b@gmail.com Tharuna Balaji]</td>
  </tr>
</table>
 
[[Image:Gsoc2016.png|50px|center]]
----
 
====Project IV: Embedded Content Done Right! ====
 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Develop a unified framework for adding any form of embedded content.  A standardised syntax for embedded content tags would be used to call a content plugin that would parse the tag and call plugins in a new embed group to return the appropriate embed code.
 
This builds on the idea of oembed(http://oembed.com/) but with the capability of overcoming the problems of invalid content associated with some oembed providers.  It is not restricted to oembed providers and can be used to embed any kind of content for which an embed plugin can be written.  Support for new data sources can be added by writing an embed plugin, making it easy for site builders to integrate new embed sources to their sites.  We would gain a powerful, extendable method of embedding content anywhere that supports content plugins.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>An appropriately coded set of plugins that could be merged into Joomla 3.x, including a selection of embed extensions for popular services such as YouTube, Vimeo, Slideshare, Twitter, Facebook, MediaWiki, etc.
 
Bonus points for writing a JavaScript extension for TinyMCE to make it even easier to embed content.
 
Code must be accompanied by documentation in the form of wiki pages and full help screens.
 
Code must be accompanied by appropriate tests.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, Joomla CMS</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Possible mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:ruchikanagarkar@outlook.com Ruchika Nagarkar]</td>
  </tr>
</table>
 
[[Image:Gsoc2016.png|50px|center]]
----
 
====Project V: NoSQL Database Driver (Redis, MongoDB) ====
 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>The goal of this is project is to add a lightweight database driver for the most commonly used NoSQL databases (Redis, MongoDB) to the Joomla CMS,
and not to write yet another ORM, that is outside the scope of this project dued to the 8 weeks timeframe.</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Important Links:'''</th>
  </tr>
  <tr><td>The original pull request: “implementation of Redis caching”  https://github.com/joomla/joomla-cms/pull/3615 merged on Joomla 3.4</td></tr>
    <tr><td>An open pull request “Redis sessions handler” https://github.com/joomla/joomla-cms/pull/7659</td></tr>
    <tr><td>The PHP Driver https://github.com/phpredis/phpredis</td><tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>Starting from version 3.4, Joomla already has a Redis cache management.
The student is expected to extend the actual cache and session management
allowing the storage with the NoSQL (mongodb, redis). As a wanted side effect, the code written (drivers) should became  an easy starting point for developers, to write extensions that can store data on NoSQL databases.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>Joomla, PHP, SQL, Nosql, data model(relational, key-value, document), Redis, MongoDB, Github</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to Hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:optimus4joomla@gmail.com Nicola Galgano], [mailto:theachalaggarwal@gmail.com Achal Aggarwal]</td>
  </tr>
</table>
 
[[Image:Gsoc2016.png|50px|center]]
----
 
====Project VI: Improve Acceptance Tests with PageObjects ====
 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Joomla! currently does not have a viable system test coverage. That leads to regression bugs all the time. The project needs acceptance tests urgently. Using PageObjects as the main concept in this test class will enable us to re-use the tests in future versions, thus to provide better backward compatibility between major versions.
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>Coverage of the backend pages with PageObjects, Coverage of core frontend pages with PageObjects, A reasonable coverage of the backend with system tests
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, OOP. Basic knowledge about Docker and CodeCeption would be an advantage.</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Easy</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:nbraczek@bsds.de Niels Braczek], [mailto:yves@compojoom.com Yves Hoppe]</td>
  </tr>
</table>


This project will have the following requirements:
[[Image:Gsoc2016.png|50px|center]]
- Develop a standard for using dependency injection within the CMS
----
- Develop a proxy, backwards compatible way to use Joomla's JFactory function


'''Expected Results:'''
====Project VII: Create Menu Item From Article or Other Component ====
At the end of this project we expect to have the ability to autoload Joomla's libraries (if compatible), as well as have a backwards-compatible way to continue using the old factory methods until they are depreciated and removed.


'''Necessary Skills:'''
  <table border="0" style="width:100%">
php, object oriented programming, joomla cms and joomla framework, php autoloading, composer, vendor packaging
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Return to the old option to Link Menu (V! 1.0.11) facilitating the creation of menus from the creation of an article. Bolder would allow this menu created from other components, such as index search, contact, and even extensions.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>1. Could be a plugin, with an option to choose which parent menu item and the specific content would be linked.
2. To save the item, add the field to the menu.


'''Difficulty:'''
3. There could be a inputText to enter the title menu
Medium - Hard
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, OOP, Javascript
</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Easy</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:pedrorenan@gmail.com Pedro Renan], [mailto:ittoufiq@gmail.com Md. Toufiqur Rahman], [mailto:peter.martin@community.joomla.org Peter Martin]</td>
  </tr>
</table>


====Accessibility Template====
[[Image:Gsoc2016.png|50px|center]]
'''Brief Description:'''
----
Create a new, improved fully accessible administrator template using Joomla's built in User Interface Libraries. This task should holistically address accessibility in Joomla's backend admin area. This project will create a new template, and update or improve associated libraries and scripts as needed to help improve the accessibility of Joomla.


'''Expected Results:'''
====Project VIII: Browser Automated Tests for Joomla! CMS (covering Users and Content features) ====
Once completed the project should have a new admin template for Joomla as well as updated libraries which have built-in accessibility features.


'''Necessary Skills:'''
  <table border="0" style="width:100%">
CSS, Accessibility Standards, javascript
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>The idea behind the project is to create the system tests for joomla User Management and Content features(For Joomla 3.x). The suggested technology for developing the tests layer is the Codeception Open Source Testing Framework (more info at http://codeception.com).


'''Difficulty:'''
Test will have to cover the User cases of: creating, editing, removing, publishing articles of content and being modified by different user roles. Also the student is asked to create the integration tests that links the Administrator, the Frontend (by creating menu items) and the Modules and Plugins applications that are related to the Users and Content Features. For example: create an article in frontend, listing all the featured articles, show the articles of an specific category or create a menu item that links to an article.
Medium


==== JavaScript Unit Tests and Automation ====
Joomla is a Mobile Ready CMS, therefore the tests will have to cover different screen resolutions and the different positions of the elements.
'''Brief Explanation:'''
In Joomla JavaScript is increasingly becoming complex and difficult to maintain without having proper unit tests. Adding unit tests to JavaScript will help us for future enhancements of JavaScript as well as to do library migrations (e.g. MooTools to JQuery) with less impact to existing functionality.


'''Expected End Result:'''
The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing the Joomla Core. The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.
Write unit tests for existing JavaScript libraries (Custom written for Joomla). Automate unit test results to be added to Travis Build.


'''Necessary Skills:'''
To read more about using Codeception with Joomla! Read here: https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception
JavaScript, Joomla CMS (from a user point of view), JavaScript Unit Testing Tools and Technologies (like Jasmine). JQuery, MooTools


'''Difficulty:'''
More details about the project at https://groups.google.com/d/msg/jgsoc-2016/nzLDqY-chYA/V6ByOHalBQAJ
Medium - Hard
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>At the end of the project the student should create a Pull request against the Joomla-cms repository (https://github.com/joomla/joomla-cms) providing the system tests for the Users and Content features.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic Git usage.


'''Potential Mentors:'''
Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Javascript and Knowledge on linux console and Docker Containers.
Roberto Segura, Ashan Fernando, Achal Aggarwal


==== System Tests for Joomla Extensions (Covering the Official supported extensions) ====
Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://github.com/joomla-extensions/weblinks#tests
'''Brief Description:'''
"The current roadmap of Joomla is focused on getting a light core, see: http://developer.joomla.org/cms/roadmap.html. Given that several Core components will be moved to independent extensions, the Joomla project needs to define a way to tests extensions. The present project consist in creating the system tests for the officially maintained extensions including: Weblinks, Contacts, Finder, Messages, Newsfeeds, Redirect, Search and PatchTester (see https://docs.joomla.org/Component_Patchtester_for_Testers). For example, the student is asked to: create the tests that install the Weblinks component in Joomla, create links in Administrator, interact with these links in Frontend. All the mentioned extensions features should be covered by the tests.


The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing extensions with the Codeception PHP testing framework (more info at http://codeception.com). The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.


To read more about using Codeception with Joomla! Read here:
</td>
https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to Hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:javier.gomez@community.joomla.org Javier Gomez], [mailto:yves@compojoom.com Yves Hoppe]</td>
  </tr>
</table>


'''Expected Results:'''
[[Image:Gsoc2016.png|50px|center]]
At the end of the project the student should create a Pull request against the different repositories of each extension providing the system tests that covers all the features of: Weblinks, Contacts, Finder, Messages, Newsfeeds, Redirect, Search and PatchTester.
----


'''Knowledge Perquisites:'''
====Project IX: One-click Multiple Images Adding Into Article ====
"PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic git usage.


Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Knowledge on linux console and [[Docker Container for System Tests|Docker Containers]].
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Current workflow for adding images to article is costly for human time and efforts:
1. Before you start create article you have to create folder for new images in Media Manager.  


Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://docs.joomla.org/Running_Automated_Tests_for_the_Joomla_CMS
2. At article creating screen you need to open extra window to upload images in necessary folder or in root of media folder.


'''Difficulty:'''
3. You can upload multiple files here, but you can't paste more than one image into article, so if you have upload image in path like /2015/02/20/something - you have navigate into this folder again.
Medium to Hard


'''Possible Mentors:'''
And now multiple it on ~10 articles in day.</td>
Javier Gomez, Puneet Kala
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>One-click multiple images adding into article.
Image folders should be created automatically by template.
And as result, end-users are not wasting time with files/folders/pop-ups juggling.
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>Usability, user experience, programmer-free outlook on life.
PHP, AJAX, Jquery, cross-browser JavaScript.</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:shams.bd71@gmail.com Abu Huraira Bin Aman], [mailto:rishi_vishwakarma@hotmail.com Rishi Vishwakarma], [mailto:rob@pollen-8.co.uk Rob Clayburn]</td>
  </tr>
</table>


==== System Tests for Joomla! CMS (covering Users and Content features) ====
[[Image:Gsoc2016.png|50px|center]]
'''Brief Description:'''
----
The idea behind the project is to create the system tests for joomla User Management and Content features with the Codeception Testing Framework. Including the User cases of: creating, editing, removing, publishing articles of content and being modified by different user roles. Also the student is asked to create the integration tests that links the Administrator, the Frontend (by creating menu items) and the Modules and Plugins applications that are related to the Users and Content Features. For example: create an article in frontend, listing all the featured articles, show the articles of an specific category or create a menu item that links to an article.


The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing the Joomla Core with the Codeception PHP testing framework (more info at http://codeception.com). The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.
====Project X: JavaScript Unit Tests ====


To read more about using Codeception with Joomla! Read here:
  <table border="0" style="width:100%">
https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Joomla uses a collection of custom written JavaScript libraries for its core functionality. This keeps on increasing and it makes it difficult to do enhancements and upgrades for these libraries without conducting extensive manual testing for dependent features in CMS. The goal of this project is to write unit tests for custom JavaScript libraries in Joomla and integrate it with its build system(Travis) to build a solid foundation for future enhancements of these libraries.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>Setup a JavaScript Unit Testing framework and a test runner to evaluate Unit Tests on Travis Build. Write Unit Tests to increase the test coverage above 90% for custom JavaScript libraries written for Joomla. Document JavaScript Unit Test Guide for Joomla.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>Understanding Unit Testing,  Unit Testing Frameworks for JavaScript, JavaScript, jQuery, PHP, Travis CI</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:ashanf@99x.lk Ashan Fernando]</td>
  </tr>
</table>
[[Image:Gsoc2016.png|50px|center]]


'''Expected Results:'''
----


At the end of the project the student should create a Pull request against the Joomla-cms repository (https://github.com/joomla/joomla-cms) providing the system tests for the Users and Content features.
====Project XI: Introduction of Accessibility Standards & Code ====


'''Knowledge Perquisites:'''
  <table border="0" style="width:100%">
PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic git usage.
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Joomla has a lot of accessibility capabilities for visually impaired users but there are a lot of areas where it can improve. Currently there is a lot of work to bring the CMS to WCAG 2.0 AA standards and bringing it closer to being a listed ATAG 2.0 resource for content publishing.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td> All templates distributed in Joomla to meet WCAG 2.0 AA standards
Template and coding guidelines to help developers create standards compliant code that will meet WCAG 2.0 AA</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>Strong front end development skills, bootstrap 2, JS, Joomla dev & accessibility testing and coding skills.</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to Hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:akarawuth.t@gmail.com Akarawuth Tamrareang], [mailto:Gunjan.ce2009@gmail.com Gunjan Patel], [mailto:buipy001@gmail.com Peter Bui]</td>
  </tr>
</table>
[[Image:Gsoc2016.png|50px|center]]
----


Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Knowledge on linux console and [[Docker Container for System Tests|Docker Containers]].
=== Extension Ideas ===


Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://docs.joomla.org/Running_Automated_Tests_for_the_Joomla_CMS


'''Difficulty:'''
====Project XI: Larger Joomla ACL publication ====
Medium to Hard


'''Possible Mentors:'''
  <table border="0" style="width:100%">
Javier Gomez, Puneet Kala
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Add to new levels publishing stream: author, reviewer, publisher, supervisor. Where you can determine the profiles, according to the category of the content. essential tool for large projects where there are various teams and responsibilities.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>1. A publishing stream screen, linked to categories (com_categories)<br>
2. Adding action buttons Approve / Review<br>
3. Flag for the backend module, to-do items for review / approval, according to the user profile
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>php, oo, javascript</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:roberson.augusto@gmail.com Roberson Augusto], [mailto:nbraczek@bsds.de Niels Braczek]</td>
  </tr>
</table>


==== Refractor Form Manifest Loading ====
[[Image:Gsoc2016.png|50px|center]]
----


'''Brief Description: '''
====Project XII: Recording actions logs, accessible by super admin ====
Joomla's form library currently builds its forms from XML manifest files. We would like to extend the form class so that it can use other file formats such as JSON, YAML etc.


'''Expected Results:'''
  <table border="0" style="width:100%">
At the end of this project we expect to have extended Joomla's form class so that it can read in various file formats and construct HTML form's from their content. Unit tests should also be provided to cover all formats that the class accepts.
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Store the tasks performed by any user, informing those who did, where did when did and what made within the project.</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>A component to map The Croods within the CMS, with filters by date, extension and user</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>php, oo, javascript</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:allan.walker@community.joomla.org Allan Walker], [mailto:llewellyn@vdm.io Llewellyn]</td>
  </tr>
</table>


'''Necessary Skills:'''
[[Image:Gsoc2016.png|50px|center]]
php, object oriented programming, joomla cms, JSON
----


'''Difficulty:'''
====Project XIII: Double marking position for modules ====
Medium


=== Issue Tracker Ideas ===
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>Allow a module to be used in two or more menu items, but in different positions. often módulso need to be duplicated in order to be used in more than one menu item and / or home site. allowing tow module and position + menu reduce the amount of unnecessary duplication</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>Option interface to change the position, the selected menu item</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>php, oo, javascript</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Possible mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:nils@rueckmann.com Nils Ruckmann]</td>
  </tr>
</table>
[[Image:Gsoc2016.png|50px|center]]
----


In addition to the Joomla CMS, the Joomla Project also maintains a piece of software called "JIssue tracker". This is Joomla's issue tracker which handles how bugs in the CMS are identified and fixed. The Issue Tracker relies heavily on Joomla's own framework packages.


[http://issues.joomla.org Visit the Joomla Issue Tracker]
[[Category:Google Summer of Code 2016]]


There are two major enhancement projects for the issue tracker.  NOTE: Because each of these projects are 'smaller' in scale, students should plan to implement both features as a single project during the GSoC period.
====Project XIV: Improve Joomla front and back-end performance through better compatibility with reverse proxies and PageSpeed Module ====


[https://groups.google.com/forum/#!topic/joomla-gsoc-2015/dUZ8Zoi8SMA For more information please see this mailing list discussion]
  <table border="0" style="width:100%">
  <tr>
    <th>'''Brief explanation:'''</th>
  </tr>
  <tr>
    <td>The CMS Joomla has a good native cache system that improves back-end performance in order to accelerate the HTML generation by 2 to 4 times. With the help of third-party extensions, you can increase the front-end performance (e.g how fast the site seems to load to the user, as well as savings in file transfer), however such extensions can harm back-end performance.


==== Part 1: Implement Activity Charts ====
Websites with Joomla CMS focused in high performance, with big amounts of traffic, or with the requirement of generating HTML in less than 100ms, usually use Joomla without performance-enhancing extensions, and implement those tweaks at the webserver level with the PageSpeed module. Furthermore, it is common to employ a caching system like Varnish (or similar) to do a complete ephemeral storage of the resulting HTML response. Such system is greatly appreciated
''''Brief Description:''''
Create an activity log chart for users based on their contributions on the issue tracker. This would look at user contributed issues, comments, commits, and other issue activity to create a chart of their activity. More details at: https://github.com/joomla/jissues/pull/491


'''Expected Result:'''
Joomla, by default (without third-party extensions), does not allow reverse proxy caching. With the use of extensions in Joomla it’s possible, however it's still not a trivial process nor a pleasant experience, and in some cases - in order to completely disable unnecessary features - might even require changing the core of Joomla, like disabling the use of sessions for guests and hit counts on articles.
Several feature areas where users can view their activity, other users' activity, and a leaderboard of activities across all users.


'''Difficulty:'''
This idea is about using the Joomla CMS for what it does best: managing content. To do this we need to trust the cache and HTML/CSS/JS/images optimization to the webserver, in order to allow Joomla to run even faster and spending less money with hosting and CPU time.
Easy - Medium
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Expected Results:'''</th>
  </tr>
  <tr>
    <td>It is expected that - as an additional option and not by default - you make Joomla able to control the HTTP caching headers to set a different caching time to one or more reverse proxies, just as the cache time sent to the visitor's browser. This feature should obligatorily be tested and functional for the main reverse proxies that are typically used in the market. Ideally, but not necessarily required, compatibility with services that deliver HTML caching as a service (like possibly CloudFlare and Fastly ®) could also be sought.


'''Necessary Skills:'''
If enabled, when a manager create, edit or delete Joomla articles, it will trigger an event to automatically detect major typically changed URLs (for example, the article page itself, the listing page of the categories and the site's homepage) and thereby allow immediate cache invalidation on those URLs, and on those URLs only, in order to reduce the Joomla administrator’s burden that has to manually invalidate each cached URL- which is a major discouraging aspect of the use of cache invalidation in itself. (Note: The CMS Joomla allows triggers, see https://docs.joomla.org/Plugin/Events)
PHP, Object oriented programming, javascript, basic math and algorithms. SQL and database queries. Joomla Framework


==== Part 2: Releases View====
As to these triggers, it is not required to implement the functionality in a way that automatically use these triggers to effectively invalidate the main reverse proxies’s cache, only allow - in the future - people can use this code base to extend this functionality. However, it tends to be interesting to choose at least one effective example, like Varnish-cache, so this functionality can be througly tested.
Create a releases view on the issue tracker which has some automated tools for helping with a Joomla release. There are several features this will implement. More Details at: https://github.com/joomla/jissues/issues/506


- List issues closed during the release cycle. This is essentially a filter of issues.  This can integrate with GitHub's milestones but will require more hands on activity from JBS or other project teams that might use the application; only items that were fixed for a release cycle should ultimately be listed with a milestone and other issues be moved to another milestone or unassigned.
Compatibility with Pagespeed Module probably shouldn’t need special changes, but this project should be tested presuming the module is enabled. In case of incompatibilities with the default settings, the produced PHP code should work around these, or there should be produced specific documentation warning about the caveats. A good example of a PageSpeed-related change is to disable content optimizations inside the CMS for specific browsers, such as conversion of images to WEBP - which could provide a cached image that would not work on incompatible browsers.


- List contributors during a release cycle. his would show a list of all users with activity between two releases, be it code committed or tracker activity. We'll need to write some sort of API for this, but at the basic level it could be two queries: a query of the issues table and joined to the activities and milestones tables, filtered on a milestone ID and unique usernames for all issues processed in a period and a query strictly on the activities table filtered on a start/end timeframe and unique usernames.  
In addition to the code produced, it is expected that the student create benchmarks comparing before-and-after performance, and also comparing your solution with the solutions using the old native Joomla Caching. At the end of the project, there will be required documentation on how to use the solution, including the provision of configuration suggestions that are relevant to the server, in order to achieve the expected result.


- Release metadata - Devise a method of tracking the number of issues open at the start and end of each release period, number of issues submitted during the period, number of issues closed during the period (and under what status; fixed, known issue, etc.), additional numbers as we think of it.  
IMPORTANT: In additional improvements that changes the Joomla core, which are not needed when you have full page cache like the option to disable hit count in Joomla articles and session creation for guest users, the student will have help from mentors and the Joomla developer community to decide whether it’s worth being implemented. Both this, and other expected results, may change if a strong technical impediment is detected beyond the scope expected for a student during the GSoC period.
</td>
  </tr>
</table> 
  <table border="0" style="width:100%">
  <tr>
    <th>'''Knowledge Prerequisite:'''</th>
  </tr>
  <tr>
    <td>It is recommended to already know how to use a POSIX-like operating system, and it is essential to know how to deal with the command line. You must also have previous knowledge in PHP.


'''Expected Result:'''
It is not necessary to have prior knowledge with Joomla CMS itself, since this you can learn from us. It is also not required to have previous experience with reverse proxies and the PageSpeed Module, but you must be willing to learn about it, and be pro-active after initial support. Of course, you will have help from mentors in complex situations that will likely arise.
A view and associated functionality as a sort of 'dashboard' for handling releases on issues.joomla.org. This will be where releases can be generated, and necessary data compiled to help with the release.  


'''Necessary Skills:'''
This is more of a DevOps project (https://en.wikipedia.org/wiki/DevOps) than a programmer-only idea. It will be less about just coding in PHP, and will be required to be capable of setting enviroments to test and benchmark the resulting performance. This can be a particularly good project depending on the area you want to work professionally, mainly because having such experience in this area is rar. Finally, it is expected that you have commitment to the idea and the Joomla community.</td>
PHP, Joomla Framework, SQL, Github, Github API
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Difficulty:'''</th>
  </tr>
  <tr>
    <td>Medium to Hard</td>
  </tr>
</table>
<table border="0" style="width:100%">
  <tr>
    <th>'''Mentors:'''</th>
  </tr>
  <tr>
    <td>[mailto:emerson@alligo.com.br Emerson Rocha Luiz], [mailto:bcdonadio@bcdonadio.com Bernardo Donadio]</td>
  </tr>
</table>


'''Potential Mentors:'''
[[Image:Gsoc2016.png|50px|center]]
Michael Babker, Nicola Galgano
----


[[Category:Google Summer of Code 2015]]
[https://groups.google.com/forum/#!forum/jgsoc-2016 For more information please see this mailing list discussion]

Latest revision as of 05:43, 28 March 2016

Welcome to GSoC 2016 Ideas Page

Welcome to the Joomla! Google Summer of Code (GSoC) 2016 project ideas page. As we move forward with the 2016 version of the Joomla! GSoC, we will post ideas that have been submitted to the GSoC Team below.

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 Google. We strongly encourage you to ask questions about process and ideas on our joomla-gsoc mailing list.

Guidelines for sending proposal are present on our GSoC Home Page

Find examples of other years at https://docs.joomla.org/GSOC_2014_Project_Ideas


Idea Pool

Joomla CMS Ideas

Project I: Improved multi-lingual content management

Project Description:
The idea is that when users want to translate content items on a multi-language site, they can have the articles side-by-side (dual-pane). This way you don't have to switch back and forth between articles. Respect also the ACL settings. So someone assigned for Dutch cannot translate any French documents for example.
Expected Results:
A dual-pane translation screen
An ACL setting for allowing access to language based articles
Knowledge Prerequisite:
PHP, Joomla CMS multi-lingual system, JavaScript, Joomla ACL, Needs MVC knowledge and ability to set up a basic multilingual Joomla site
Difficulty:
Medium to Hard
Mentors:
Rob Clayburn,Jean-Marie Simonet

Project II: Shareable Draft Content

Brief explanation:
There is currently no easy way to share a draft version of an unpublished article with people who do not have Administrator access. This project would add elements to the Articles: Edit user interface that would support the generation of a shareable link that would allow those with the link to view a draft version of an article. This project would be a complete new feature that could be merged into Joomla 3.
Expected Results:
The details of the user interface would be subject to change/discussion, but could look something like the following:

A new "Save as Draft" toolbar button on the Articles: Edit page. When clicked the article will be saved as a draft in the content version history. The version history page will need to be modified to show this special version of the article. A new "Share" toolbar button on the same page. When clicked, the draft version of the article opens in a new tab with a special URL which can be copy-pasted so that the draft may be shared prior to publication. Bonus points for adding a "Preview" toolbar button that will open a new browser tab with a preview of the article currently being edited, without needing to save the article first.

Code must be accompanied by documentation in the form of wiki pages and full help screens. Code must be accompanied by appropriate tests.
Knowledge Prerequisite:
PHP, Joomla CMS
Difficulty:
Medium
Mentors:
Achal Aggarwal, Ashwin Date

Project III: Administrator Menu Editor

Brief explanation:
This has been discussed at some length here: https://issues.joomla.org/tracker/joomla-cms/5492
Expected Results:
An appropriately coded extension that could be merged into Joomla 3.x.

Code must be accompanied by documentation in the form of wiki pages and full help screens.

Code must be accompanied by appropriate tests.
Knowledge Prerequisite:
PHP, Joomla CMS
Difficulty:
Medium
Mentors:
Peter Martin, Llewellyn, Tharuna Balaji

Project IV: Embedded Content Done Right!

Brief explanation:
Develop a unified framework for adding any form of embedded content. A standardised syntax for embedded content tags would be used to call a content plugin that would parse the tag and call plugins in a new embed group to return the appropriate embed code. This builds on the idea of oembed(http://oembed.com/) but with the capability of overcoming the problems of invalid content associated with some oembed providers. It is not restricted to oembed providers and can be used to embed any kind of content for which an embed plugin can be written. Support for new data sources can be added by writing an embed plugin, making it easy for site builders to integrate new embed sources to their sites. We would gain a powerful, extendable method of embedding content anywhere that supports content plugins.
Expected Results:
An appropriately coded set of plugins that could be merged into Joomla 3.x, including a selection of embed extensions for popular services such as YouTube, Vimeo, Slideshare, Twitter, Facebook, MediaWiki, etc.

Bonus points for writing a JavaScript extension for TinyMCE to make it even easier to embed content.

Code must be accompanied by documentation in the form of wiki pages and full help screens.

Code must be accompanied by appropriate tests.
Knowledge Prerequisite:
PHP, Joomla CMS
Difficulty:
Medium
Possible mentors:
Ruchika Nagarkar

Project V: NoSQL Database Driver (Redis, MongoDB)

Brief explanation:
The goal of this is project is to add a lightweight database driver for the most commonly used NoSQL databases (Redis, MongoDB) to the Joomla CMS, and not to write yet another ORM, that is outside the scope of this project dued to the 8 weeks timeframe.
Important Links:
The original pull request: “implementation of Redis caching” https://github.com/joomla/joomla-cms/pull/3615 merged on Joomla 3.4
An open pull request “Redis sessions handler” https://github.com/joomla/joomla-cms/pull/7659
The PHP Driver https://github.com/phpredis/phpredis
Expected Results:
Starting from version 3.4, Joomla already has a Redis cache management.

The student is expected to extend the actual cache and session management

allowing the storage with the NoSQL (mongodb, redis). As a wanted side effect, the code written (drivers) should became an easy starting point for developers, to write extensions that can store data on NoSQL databases.
Knowledge Prerequisite:
Joomla, PHP, SQL, Nosql, data model(relational, key-value, document), Redis, MongoDB, Github
Difficulty:
Medium to Hard
Mentors:
Nicola Galgano, Achal Aggarwal

Project VI: Improve Acceptance Tests with PageObjects

Brief explanation:
Joomla! currently does not have a viable system test coverage. That leads to regression bugs all the time. The project needs acceptance tests urgently. Using PageObjects as the main concept in this test class will enable us to re-use the tests in future versions, thus to provide better backward compatibility between major versions.
Expected Results:
Coverage of the backend pages with PageObjects, Coverage of core frontend pages with PageObjects, A reasonable coverage of the backend with system tests
Knowledge Prerequisite:
PHP, OOP. Basic knowledge about Docker and CodeCeption would be an advantage.
Difficulty:
Easy
Mentors:
Niels Braczek, Yves Hoppe

Project VII: Create Menu Item From Article or Other Component

Brief explanation:
Return to the old option to Link Menu (V! 1.0.11) facilitating the creation of menus from the creation of an article. Bolder would allow this menu created from other components, such as index search, contact, and even extensions.
Expected Results:
1. Could be a plugin, with an option to choose which parent menu item and the specific content would be linked.

2. To save the item, add the field to the menu.

3. There could be a inputText to enter the title menu

Knowledge Prerequisite:
PHP, OOP, Javascript
Difficulty:
Easy
Mentors:
Pedro Renan, Md. Toufiqur Rahman, Peter Martin

Project VIII: Browser Automated Tests for Joomla! CMS (covering Users and Content features)

Brief explanation:
The idea behind the project is to create the system tests for joomla User Management and Content features(For Joomla 3.x). The suggested technology for developing the tests layer is the Codeception Open Source Testing Framework (more info at http://codeception.com).

Test will have to cover the User cases of: creating, editing, removing, publishing articles of content and being modified by different user roles. Also the student is asked to create the integration tests that links the Administrator, the Frontend (by creating menu items) and the Modules and Plugins applications that are related to the Users and Content Features. For example: create an article in frontend, listing all the featured articles, show the articles of an specific category or create a menu item that links to an article.

Joomla is a Mobile Ready CMS, therefore the tests will have to cover different screen resolutions and the different positions of the elements.

The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing the Joomla Core. The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.

To read more about using Codeception with Joomla! Read here: https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception

More details about the project at https://groups.google.com/d/msg/jgsoc-2016/nzLDqY-chYA/V6ByOHalBQAJ

Expected Results:
At the end of the project the student should create a Pull request against the Joomla-cms repository (https://github.com/joomla/joomla-cms) providing the system tests for the Users and Content features.
Knowledge Prerequisite:
PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic Git usage.

Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Javascript and Knowledge on linux console and Docker Containers.

Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://github.com/joomla-extensions/weblinks#tests


Difficulty:
Medium to Hard
Mentors:
Javier Gomez, Yves Hoppe

Project IX: One-click Multiple Images Adding Into Article

Brief explanation:
Current workflow for adding images to article is costly for human time and efforts:

1. Before you start create article you have to create folder for new images in Media Manager.

2. At article creating screen you need to open extra window to upload images in necessary folder or in root of media folder.

3. You can upload multiple files here, but you can't paste more than one image into article, so if you have upload image in path like /2015/02/20/something - you have navigate into this folder again.

And now multiple it on ~10 articles in day.
Expected Results:
One-click multiple images adding into article.

Image folders should be created automatically by template. And as result, end-users are not wasting time with files/folders/pop-ups juggling.

Knowledge Prerequisite:
Usability, user experience, programmer-free outlook on life. PHP, AJAX, Jquery, cross-browser JavaScript.
Difficulty:
Medium
Mentors:
Abu Huraira Bin Aman, Rishi Vishwakarma, Rob Clayburn

Project X: JavaScript Unit Tests

Brief explanation:
Joomla uses a collection of custom written JavaScript libraries for its core functionality. This keeps on increasing and it makes it difficult to do enhancements and upgrades for these libraries without conducting extensive manual testing for dependent features in CMS. The goal of this project is to write unit tests for custom JavaScript libraries in Joomla and integrate it with its build system(Travis) to build a solid foundation for future enhancements of these libraries.
Expected Results:
Setup a JavaScript Unit Testing framework and a test runner to evaluate Unit Tests on Travis Build. Write Unit Tests to increase the test coverage above 90% for custom JavaScript libraries written for Joomla. Document JavaScript Unit Test Guide for Joomla.
Knowledge Prerequisite:
Understanding Unit Testing, Unit Testing Frameworks for JavaScript, JavaScript, jQuery, PHP, Travis CI
Difficulty:
Medium to hard
Mentors:
Ashan Fernando

Project XI: Introduction of Accessibility Standards & Code

Brief explanation:
Joomla has a lot of accessibility capabilities for visually impaired users but there are a lot of areas where it can improve. Currently there is a lot of work to bring the CMS to WCAG 2.0 AA standards and bringing it closer to being a listed ATAG 2.0 resource for content publishing.
Expected Results:
All templates distributed in Joomla to meet WCAG 2.0 AA standards Template and coding guidelines to help developers create standards compliant code that will meet WCAG 2.0 AA
Knowledge Prerequisite:
Strong front end development skills, bootstrap 2, JS, Joomla dev & accessibility testing and coding skills.
Difficulty:
Medium to Hard
Mentors:
Akarawuth Tamrareang, Gunjan Patel, Peter Bui

Extension Ideas

Project XI: Larger Joomla ACL publication

Brief explanation:
Add to new levels publishing stream: author, reviewer, publisher, supervisor. Where you can determine the profiles, according to the category of the content. essential tool for large projects where there are various teams and responsibilities.
Expected Results:
1. A publishing stream screen, linked to categories (com_categories)

2. Adding action buttons Approve / Review
3. Flag for the backend module, to-do items for review / approval, according to the user profile

Knowledge Prerequisite:
php, oo, javascript
Difficulty:
Medium
Mentors:
Roberson Augusto, Niels Braczek

Project XII: Recording actions logs, accessible by super admin

Brief explanation:
Store the tasks performed by any user, informing those who did, where did when did and what made within the project.
Expected Results:
A component to map The Croods within the CMS, with filters by date, extension and user
Knowledge Prerequisite:
php, oo, javascript
Difficulty:
Medium
Mentors:
Allan Walker, Llewellyn

Project XIII: Double marking position for modules

Brief explanation:
Allow a module to be used in two or more menu items, but in different positions. often módulso need to be duplicated in order to be used in more than one menu item and / or home site. allowing tow module and position + menu reduce the amount of unnecessary duplication
Expected Results:
Option interface to change the position, the selected menu item
Knowledge Prerequisite:
php, oo, javascript
Difficulty:
Medium to hard
Possible mentors:
Nils Ruckmann

Project XIV: Improve Joomla front and back-end performance through better compatibility with reverse proxies and PageSpeed Module

Brief explanation:
The CMS Joomla has a good native cache system that improves back-end performance in order to accelerate the HTML generation by 2 to 4 times. With the help of third-party extensions, you can increase the front-end performance (e.g how fast the site seems to load to the user, as well as savings in file transfer), however such extensions can harm back-end performance.

Websites with Joomla CMS focused in high performance, with big amounts of traffic, or with the requirement of generating HTML in less than 100ms, usually use Joomla without performance-enhancing extensions, and implement those tweaks at the webserver level with the PageSpeed module. Furthermore, it is common to employ a caching system like Varnish (or similar) to do a complete ephemeral storage of the resulting HTML response. Such system is greatly appreciated

Joomla, by default (without third-party extensions), does not allow reverse proxy caching. With the use of extensions in Joomla it’s possible, however it's still not a trivial process nor a pleasant experience, and in some cases - in order to completely disable unnecessary features - might even require changing the core of Joomla, like disabling the use of sessions for guests and hit counts on articles.

This idea is about using the Joomla CMS for what it does best: managing content. To do this we need to trust the cache and HTML/CSS/JS/images optimization to the webserver, in order to allow Joomla to run even faster and spending less money with hosting and CPU time.

Expected Results:
It is expected that - as an additional option and not by default - you make Joomla able to control the HTTP caching headers to set a different caching time to one or more reverse proxies, just as the cache time sent to the visitor's browser. This feature should obligatorily be tested and functional for the main reverse proxies that are typically used in the market. Ideally, but not necessarily required, compatibility with services that deliver HTML caching as a service (like possibly CloudFlare and Fastly ®) could also be sought.

If enabled, when a manager create, edit or delete Joomla articles, it will trigger an event to automatically detect major typically changed URLs (for example, the article page itself, the listing page of the categories and the site's homepage) and thereby allow immediate cache invalidation on those URLs, and on those URLs only, in order to reduce the Joomla administrator’s burden that has to manually invalidate each cached URL- which is a major discouraging aspect of the use of cache invalidation in itself. (Note: The CMS Joomla allows triggers, see https://docs.joomla.org/Plugin/Events)

As to these triggers, it is not required to implement the functionality in a way that automatically use these triggers to effectively invalidate the main reverse proxies’s cache, only allow - in the future - people can use this code base to extend this functionality. However, it tends to be interesting to choose at least one effective example, like Varnish-cache, so this functionality can be througly tested.

Compatibility with Pagespeed Module probably shouldn’t need special changes, but this project should be tested presuming the module is enabled. In case of incompatibilities with the default settings, the produced PHP code should work around these, or there should be produced specific documentation warning about the caveats. A good example of a PageSpeed-related change is to disable content optimizations inside the CMS for specific browsers, such as conversion of images to WEBP - which could provide a cached image that would not work on incompatible browsers.

In addition to the code produced, it is expected that the student create benchmarks comparing before-and-after performance, and also comparing your solution with the solutions using the old native Joomla Caching. At the end of the project, there will be required documentation on how to use the solution, including the provision of configuration suggestions that are relevant to the server, in order to achieve the expected result.

IMPORTANT: In additional improvements that changes the Joomla core, which are not needed when you have full page cache like the option to disable hit count in Joomla articles and session creation for guest users, the student will have help from mentors and the Joomla developer community to decide whether it’s worth being implemented. Both this, and other expected results, may change if a strong technical impediment is detected beyond the scope expected for a student during the GSoC period.

Knowledge Prerequisite:
It is recommended to already know how to use a POSIX-like operating system, and it is essential to know how to deal with the command line. You must also have previous knowledge in PHP.

It is not necessary to have prior knowledge with Joomla CMS itself, since this you can learn from us. It is also not required to have previous experience with reverse proxies and the PageSpeed Module, but you must be willing to learn about it, and be pro-active after initial support. Of course, you will have help from mentors in complex situations that will likely arise.

This is more of a DevOps project (https://en.wikipedia.org/wiki/DevOps) than a programmer-only idea. It will be less about just coding in PHP, and will be required to be capable of setting enviroments to test and benchmark the resulting performance. This can be a particularly good project depending on the area you want to work professionally, mainly because having such experience in this area is rar. Finally, it is expected that you have commitment to the idea and the Joomla community.
Difficulty:
Medium to Hard
Mentors:
Emerson Rocha Luiz, Bernardo Donadio

For more information please see this mailing list discussion