Join GitHub today
List of ideas for Google Summer of Code 2015. Our development efforts aim towards the release of phpMyAdmin 4.5.
For details about participating in the Summer of Code for the phpMyAdmin project, please refer to our GSoC 2015 Applicant Guide.
Possible mentors are listed for each idea; however, mentors generally do not wish to help a student drafting his proposal. You can use the phpmyadmin-devel mailing list to ask specific questions about these ideas.
For a general reference about Refactoring, see http://en.wikipedia.org/wiki/Refactoring.
The parser/analyzer component (libraries/sqlparser.data.php and libraries/sqlparser.lib.php) needs a major rewrite. We need this component for several features. For example, when browsing a table and sorting on a column, we need to extract the sorting part of the query to determine whether a column is part of the sort expression. This is difficult to do with regexp matching, as the keywords we are searching for may be part of database/table/column names (this would be a potential pitfall).
Specifically, the goals of this rewrite are:
- refactor and modularize the code
- improve variable names
- possibly find a better parsing algorithm
- reduce the three parsing loops to just one
- support https://sourceforge.net/p/phpmyadmin/feature-requests/262/
- support https://sourceforge.net/p/phpmyadmin/feature-requests/1419/
- ensure that everyplace in the whole codebase we are using preg_match(), there is not pitfall
- if a pitfall is found, replace preg_match with the parser/analyzer
- cover all of the code with unit tests
We are open to integrating an already existing library for some parts of this project.
Mentor: User: Lem9
It would be great if phpMyAdmin included functionality to synchronize multiple databases, including between two hosts. This feature was implemented in phpMyAdmin 3.3.0, but some problems developed requiring it to be removed. Successfully returning the feature will deal properly with numerous obstacles such as PHP timeout and resource limits, slow or interrupted network connectivity, and differing MySQL versions. Another difficulty is deciding how to address conflicts; for instance how will the software handle if a new auto increment row is added to both instances (thereby occupying the same ID)?
Mentor: User: Ibennetch
User interface improvements
- Disable foreign key checks in some operations: https://sourceforge.net/p/phpmyadmin/feature-requests/1541/
- Integrate SQL debugging into the console: https://sourceforge.net/p/phpmyadmin/feature-requests/1551/
- Option to remove functions and procedures from navigation tree: https://sourceforge.net/p/phpmyadmin/feature-requests/1557/
- Page-related settings: https://sourceforge.net/p/phpmyadmin/feature-requests/1559/
- Export: per-table structure/data: https://sourceforge.net/p/phpmyadmin/feature-requests/1603/
Feature request project enhancements
This project aims to implement several requested features. You're welcome to add to or modify this list when submitting your proposal; these are simply our suggestions
- One file per table export: https://sourceforge.net/p/phpmyadmin/feature-requests/342/
- Batch changing collation: https://sourceforge.net/p/phpmyadmin/feature-requests/726/
Warn before silent data truncation: https://sourceforge.net/p/phpmyadmin/feature-requests/763/
- Change collation without changing data: https://sourceforge.net/p/phpmyadmin/feature-requests/946/
- Designer should remember settings: https://sourceforge.net/p/phpmyadmin/feature-requests/1060/
- SET NAMES on custom collation/charset: https://sourceforge.net/p/phpmyadmin/feature-requests/1163/
- CTRL-navigation in table editor: https://sourceforge.net/p/phpmyadmin/feature-requests/1359/
- Support MySQL 5.6 SHA256 passwords: https://sourceforge.net/p/phpmyadmin/feature-requests/1396/
- Add drop partition in partition maintenance: https://sourceforge.net/p/phpmyadmin/feature-requests/1485/
- Alter privileges when renaming database/table/field: https://sourceforge.net/p/phpmyadmin/feature-requests/657/
- Print view CSS: https://sourceforge.net/p/phpmyadmin/feature-requests/701/
Mentor: User: Ibennetch
Codebase Improvements: OOP and refactoring
PMA has had many refactoring projects in last GSoC years which primarily converted most HTML-PHP mix into meaningful functions, separated concerns at places and broke bulky functions into smaller ones, all this is mostly organized into libraries/*.lib.php files. Further, some of such code got converted to OOP in libraries/*.class.php files. So this project expects further refactoring of codebase, giving it a more pronounced object-oriented form.
Based on applicability, broad guidelines may be:- 1. allowing for more code sharing. 2. using getter and setter methods wherever required. 3. make increased use of inheritance with overridden methods. 4. logical component-wise restructuring of existing class and library files.
Examples of concrete deliverables expected:-
By OOPing, we don't expect plainly putting a class keyword over renamed functions, but it should be done logically, extending re-usability, also keeping in view the actual component you are dealing with and its linkages.
- Table related functionality: OOPing of following lib.php files related to table functionality and restructuring using above concepts.
libraries/Table.class.php, TableSearch.class.php (these are already classes, just ought to fit into your new Table class scheme)
libraries/tbl_chart.lib.php, tbl_columns_definition_form.lib.php, tbl_gis_visualization.lib.php, tbl_indexes.lib.php,
tbl_printview.lib.php, tbl_relation.lib.php, tbl_views.lib.php
- Similarly for database related scripts..
libraries/DbSearch.class.php, libraries/DBQbe.class.php (Look for possible overlaps with Table search functionality)
- In the same line, libraries/structure.lib.php handles 'Structure' component of PMA tables and databases, so OOPing it and integrating it with new Table and Database classes of previous points.
- For Server=>Status component:-
libraries/server_status_monitor.lib.php, server_status_processes.lib.php, server_status_queries.lib.php, server_status_variables.lib.php,
- For Export/Import component:-
The idea is open-ended and will be part of a work in progress, feel free to self-analyze the codebase, suggest better improvements and accordingly modify the idea. Also, while making above changes, it is to be incrementally made sure that application runs unaffected after merging the changes.
Update: The actual project being implemented based on this idea in GSoC 2015 is https://wiki.phpmyadmin.net/pma/GSoC_2015_Projects#Codebase_Improvements:_OOP_and_refactoring_-_Zhang
Mentor: User: zixtor
Do you have passion for maintainable code? Then this project might be great for you.
phpMyAdmin already has quite good code coverage by unit tests, but our functional tests still need improvements. The goal of this project is to have reliable functional tests for most frequently used features.
We currently perform functional tests by Selenium and use BrowserStack to execute them on various browsers, but you can bring another technologies to use, the only condition is that it should seamlessly integrate with our automated testing done on Travis-CI.
Requirements: PHP and MySQL knowledge, unit testing experience welcome.
Error reporting server
phpMyAdmin's error reporting server is a service which collects failures happening on the phpMyAdmin installations all around the word. It's implemented in CakePHP and is serving us already few years.
However the server would need quite some improvements (see it's issue tracker), for example:
- Performance improvements
- Improved stats page
- Mass operations on incidents
- Public read only interface
- Maintaining state and microhistory
See it's code at https://github.com/phpmyadmin/error-reporting-server/
Requirements: PHP and MySQL knowledge, CakePHP experience welcome.
Multi-table query generator
We currently have this feature (open a database and click on Query) but we are looking for an improved UI. The way the UI works, leads to inconsistencies like the one described in https://sourceforge.net/p/phpmyadmin/bugs/4795/. We are not sure whether the improvement should take the form of the current visual builder, or something else. So we seek a student with creativity for this.
None of above did attract you? Feel free to come up with your own idea, you can take inspiration from our feature requests: https://sourceforge.net/p/phpmyadmin/feature-requests/
Please note that the project is supposed to take whole summer, so you will most likely have to combine several feature requests to get big enough project.