Page-related settings and other user interface improvements

Organization: phpMyAdmin

Abstract: The project is about implementing several feature requests. Majority of these feature requests are affecting user interface. The feature requests planned for the project are listed below. - rfe#1559 Page-related settings - rfe#1541 Disable foreign key checks in some operations - rfe#1551 Integrate SQL debugging into the console - rfe#1557 Option to remove functions and procedures from navigation tree - rfe#1603 Export: per-table structure/data

Name

Nisarg Jhaveri

Location

Location: India

Timezone: IST (UTC+05:30)

Education

2nd year, B.Tech in CSE and MS by Research in CSE at International Institute of Information Technology, Hyderabad

Email / IRC / Jabber

Email: nisargjhaveri@gmail.com

Preferred IRC nick: nisargjhaveri

WWW / Blog

I will be setting up my blog at http://nisargjhaveri.com/

Synopsis

The project is about implementing several feature requests. Majority of these feature requests are affecting user interface.

The feature requests planned for the project are listed below.

Benefits to the users

rfe#1559 Page-related settings

It brings a much easier way to tweak phpMyAdmin as per personal needs and preferences. This will add the ability to set several configuration parameters related to the current active page from right there for many pages.

Right now, we already have a central settings page, but it is not always convenient to go to central page, change some settings, come back and test/use new settings.

This will also enable us to advertise the configuration options for each feature. Many users don't know about the availability of these configuration options (I didn't for years :P).

rfe#1541 Disable foreign key checks in some operations

The use cases and benefits to users by this RFE is well described in the RFE itself.

rfe#1551 Integrate SQL debugging into the console

It probably won't help end-users much, but it'll help developers debug SQL queries generated by phpMyAdmin as mentioned in the RFE.

rfe#1557 Option to remove functions and procedures from navigation tree

Currently, phpMyAdmin shows groups for Events, Functions, Procedures, Tables and Views in the navigation panel.

Is is quite possible that a user doesn't use the navigation panel to edit some of these, for example Functions, and hence wants to hide all the Functions from the navigation panel.

This will add the possibility to hide any group from the navigation panel, either via a global configuration option, or from the navigation panel itself (Database specific).

rfe#1603 Export: per-table structure/data

The RFE describes the use case pretty well. It is a pretty common scenario for many users.

This would help them save a lot of effort of first exporting structure, then exporting data, and finally merging structure and relevant tables from data export.

Project Details

As described earlier, the project is about implementing several feature requests.

I'll be trying to modularize code wherever possible. Also, I will take special care to separate views from the back-end. This will help us or at least save us a little trouble when we migrate to MVC or something similar.

However, some of these feature requests involve building on existing code and so it might not always be possible to follow this. If the time-frame allows, I'll also try to improve some of the existing code.

Following are the details for each feature request.

rfe#1559 Page-related settings

  • Make a framework, as described in the section on deliverables.
  • The framework must support dynamic (at php runtime) adding and removing of configuration options that are displayed for an instance of in-page settings.
  • This will support multiple instances per page-load. This will be useful if we want to show multiple localized settings in one page. For example, one for browse table and one for console in the same page.
  • Study, improve and make use of libraries used by current settings pages.
  • Add provision for adding non-central configuration options to the settings panel. For example, the "Number of rows to show" for an individual table might be easily added to the same settings panel.


rfe#1541 Disable foreign key checks in some operations

  • Refer sections for benefits and deliverables.


rfe#1551 Integrate SQL debugging into the console

  • Refer sections for benefits and deliverables.


rfe#1557 Option to remove functions and procedures from navigation tree

  • Also refer sections on deliverables.
  • Try to fit the per-database hiding of groups in the same architecture as the current hiding mechanism of individual tables and other items (Seems possible from a quick overview).
  • Also add a configuration option to hide some groups globally (from all databases).
  • The configuration option has more priority than per-database hiding. As in, if the configuration option is set to hide something, the per-database preference is ignored.


rfe#1603 Export: per-table structure/data

  • Add option to select if one wants to export only data or only structure or both for each table.
  • One possible option is replacing the current select box for tables with multiple checkboxes to provide finer control over what the user wants to export. Or since it is more export format specific, we can separately ask for this in format specific preferences while exporting.
  • Depending on user's preference, export only the part that user wants.

Deliverables

rfe#1559 Page-related settings

  • A framework (library) to easily integrate in-page or feature-wise configuration mechanism.
  • In-page, page-related settings for browse/edit table, Database structure page, Table structure page, SQL query page, Import and Export pages using above mentioned framework.


rfe#1541 Disable foreign key checks in some operations

  • An option, possibly checkbox to disable foreign keys checks on import and in SQL query page.


rfe#1551 Integrate SQL debugging into the console

  • If the SQL debugging in turned on, SQL debugging info should be shown for execution of each query in the console.


rfe#1557 Option to remove functions and procedures from navigation tree

  • A configuration option for removing one or more of Events, Functions, Procedures, Tables, Views from navigation panel.
  • An option similar to current hiding mechanism for individual tables, etc (The bulb icon in current navigation panel) to hide complete group (Events, Functions, Procedures, Tables, Views etc) for a given database.


rfe#1603 Export: per-table structure/data

  • Option to select if user wants to export structure or data or both for each table while exporting.

Project Schedule

Week 1: 25-31 May, 2015

  • UI base for page-related settings.
  • Finalize design for the framework.

Week 2: 1-7 June, 2015

  • Implement framework for page-related settings.

Week 3: 8-14 June, 2015

  • Identify and add global configuration options to page-related settings to different pages/features in phpMyAdmin.

Week 4: 15-21 June, 2015

  • Identify and add some local non-configuration options for different features and pages.

Week 5: 22-28 June, 2015

  • Make up week.
  • Fix small remaining things and finalize for mid evaluation.

Mid evaluation: 26 June-3 July, 2015

Week 6: 29 June-5 July, 2015

  • Write remaining tests, user documentation, improve in-code or developer documentation for page-related settings.

Week 7: 6-12 July, 2015

  • Implement rfe#1541 Disable foreign key checks in some operations

Week 8: 13-19 July, 2015

  • Implement rfe#1551 Integrate SQL debugging into the console

Week 9: 20-26 July, 2015

  • Start implementing rfe#1557 Option to remove functions and procedures from navigation tree. See details in deliverables as they are slightly different than original feature request.
  • Have the global configuration option ready by end of this week.
  • Start working on per-database group hiding mechanism.

Week 10: 27 July-2 Aug, 2015

  • (continue...) Complete per-database group hiding.
  • Start working on rfe#1603 Export: per-table structure/data. Have UI ready by end of this week.

Week 11: 3-9 Aug, 2015

  • Implement rfe#1603 Export: per-table structure/data.

Week 12: 10-16 Aug, 2015

  • Make up week.
    Write remaining tests, documentation etc.
    Polish code wherever needed.

Finalize code: 17-21 Aug, 2015

  • Review the code, once more.
  • Fix missed mistakes about coding standards or anything else.

Final evaluation: 21-28 Aug, 2015

Notes:

In the case that nothing falls behind schedule, I will possibly pick up other small bugs or feature requests during the make up time after discussing with the mentor.

I'll be writing tests on-the-go. In weeks 6 and 12 I'll finalize and polish tests, documentation etc.

Time

I can spend around 5 hours a day for 6 days in a week. That comes to around 30 hours a week.

The time I can give to the project is highly flexible and it can easily scale up/down as required.

Motivation

I enjoy coding, especially on projects that I can directly use. GSoC gives me the opportunity to do this in a structured manner with the guidance of experienced mentors. I have no doubt that this will be a fun learning experience. And, also a nice paycheck. :P

Bio

I started coding from around 8th grade out of interest and since then, I enjoy developing something that can be of direct use to us. For around 5 years now, I have been developing various web-apps. My interests also include making systems intelligent, automating regular tasks, natural language processing etc. IoT and other concepts that may affect our daily lives outside of computers also attracts me.

Experiences

I am familiar with the web technologies that phpMyAdmin uses. I've done various projects involving use of PHP, MySQL, JavaScript, jQuery, HTML, CSS etc.

I'm also comfortable with VCS like git.

For experience in past, I've listed few projects for reference.

  • A Humanoid Graphing Calculator, a web application, completely written by me in vanilla JS. It can understand many mathematical expressions without excessive use of brackets to guide the program, and plots the expression on a virtual graph paper(canvas). Technologies used were HTML5, JavaScript, CSS.
  • An online office application. My contribution was a whole online presentation application, supporting animations, slideshow, remote control for slideshow, etc. I also worked on cloud file storage and management system and base framework to accommodate different application in same UI and structure. Technologies used were HTML, JavaScript (with jQuery), PHP (with CodeIgniter MVC framework), MySQL, CSS, Git.
  • Created website for our college fest, Felicity 2k15. The website is built upon a minimal MVC framework developed by me. Also, the website is highly dynamic and is back-boned by an in-house CMS developed by us to make data management easier for those who don't want to touch code for every single change in the website content. Technologies used were HTML5, JavaScript (with jQuery), PHP, MySQL, CSS, Git with GitHub.
  • And many more small projects and experiments with different technologies.

Open source contributions

I've worked on a couple of established open-source projects including phpMyAdmin and also published and worked on a few small open-source projects.

My open-source contributions can be seen at https://github.com/nisargjhaveri

phpMyAdmin contributions

I've been involved and contributing to phpMyAdmin for past several months.

I've fixed a few bugs and implemented a few feature requests for phpMyAdmin.

Pull requests to phpMyAdmin by me can be found here.

Favorite phpMyAdmin feature

The fact that it is so easy and intuitive to use.

Also, the ease to manage (edit, delete) data in a table and managing table structures so easily.

phpMyAdmin improvement

Some better, more intuitive and more reliable way to manage and visualize relations.