Planet phpMyAdmin

December 01, 2015

Michal Čihař

Time for change

It has been seven years since I've joined SUSE (for second time, but that's different story). As everything has to come to the end, I've decided to make a change in my life and leave safety net of being employed and go for new experience with freelancer life.

This will give me more time to spend on free software projects where I'm involved. Of course I need to earn some money to live, so many decisions about where to spend my time will be backed by money...

First of all I will work on phpMyAdmin, where I was chosen as a contractor (of two for this year). This will be half time job for me and you will see weekly reports in my blog, similar to what Madhura is doing.

Second priority will be Weblate, especially the hosting solution. I believe that this is something what can work quite well in the long term, but the tool needs some development to make it as great as I would like to have it. If you want me to extend hosting for free software projects, you can do it by money :-).

And nobody knows what projects come next. There is some work to be done on Gammu and Wammu, but given that I don't have any recent device to use it, it's sometimes hard to fix the bugs there. Of course this can change if I get some money to work on that.

PS: It's not that SUSE would be bad place to work. It's actually pretty great if you're looking for work with free software. You work there on free software, with great people and you get quite some freedom. As bonus once or twice in a year, there is Hackweek which you can spend on anything. And of course they have lot of open positions :-).

Filed under: English Gammu phpMyAdmin SUSE Weblate | 0 comments

by Michal Čihař ( at December 01, 2015 08:09 AM

November 30, 2015

Michal Čihař

Gammu 1.36.7

Yesterday, Gammu 1.36.7 has been released.

This time the list of changes got bigger, improving compatibility with many devices:

  • Support devices which do not report full network status.
  • Disable Huawei unsolicited messages on startup.
  • Various improvements for Huawei modems.
  • Fixed compilation on Windows.
  • Fixed regression with Siemens AX75.
  • Improved decoding of USSD responses.
  • Properly decode emojis to console or files backend.
  • Added support for proxying the connection through arbitrary command.
  • SMSD now tracks retries count per message.

You an support further Gammu development at Bountysource salt.

Filed under: English Gammu Wammu | 0 comments

by Michal Čihař ( at November 30, 2015 08:09 AM

November 29, 2015

Madhura Jayaratne

phpMyAdmin work during eighth and ninth weeks

Last two weeks were dedicated completely to code refactoring where I converted a couple of server level page to MVC architecture. This is a continuation of what started during the last GSoC where we started to take up MVC architecture.

I started with server_variables.php page and created a new controller named ServerVariablesController to handle all interactions from the page. Refactoring included moving the HTML generation to 'View' (using templating) and organizing previous functions into methods and introducing instance variables where appropriate. 

Server databases page was also refactored in a similar manner. Additionally, the functionalities of display_create_database.lib.php, db_create.php and build_html_for_db.lib.php were integrated into the new controller. Moreover, some functionalities that supported both ajax and non-ajax behavior (that used to facilitate scenarios with JavaScript disabled) was simplified. Towards the end of the period, server charsets page was refactored in a similar manner.

Code refactoring
Refactor server variables page to use MVC architecture
Refactor server databases page to use MVC architecture
Simplify database dropping
Merge the functionalities of display_create_database.lib.php, db_create.php and build_html_for_db.lib.php into ServerDatabasesController
Refactor server charsets page to use MVC architecture
Organize controllers into a better package hierarchy

I also engaged in fixing coding style violations, both introduced by refactoring as well as the ones that already existed. Further, I updated the test suite to account for newly introduced controller classes and now removed functions.

Coding style improvements
Fix coding style violations

Unit testing
Update unit tests for new controller classes

by Madhura ( at November 29, 2015 08:05 PM

November 24, 2015

Michal Čihař

Wammu 0.40

Yesterday, Wammu 0.40 has been released.

The list of changes is not really huge:

  • Correctly escape XML output.
  • Make error message selectable.
  • Fixed spurious D-Bus error message.
  • Translation updates.

I will not make any promises for future releases (if there will be any) as the tool is not really in active development.

Filed under: English Gammu Wammu | 0 comments

by Michal Čihař ( at November 24, 2015 08:09 AM

November 23, 2015

Madhura Jayaratne

phpMyAdmin work during sixth and seventh weeks

During the two week I attended to a combination of bugs, features/improvements, code refactoring as well as code quality improvements. However, most of the time was spent on bugs as there were number of bugs being reported. Following are the bugs fixed and investigated during the two weeks.

Bugs fixed
issue #11476 Errors instead of git info when PHP has no gzip support
issue #11630 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
issue #11632 Exporting GIS visualization ignores start and row count
issue #11639 Bug with the MainBackground Color
issue #11647 Restrict configuration NavigationTreeDbSeparator to strings
Indicate when there are no parameters for parameter binding in SQL query box
Profiling checkbox is missing

Bugs investigated
issue #11637 "AS" from the main table of the query is being deleted when you are exporting a query
issue #11651 Issue while creating tables
issue #11659 Totally turn off autocomplete and sql syntax check

Among the new features implemented, issue #11641, which requested to disable one of the relational features, was discussed during the team meeting and it was suggested to use a special value for the same configuration directive to disable the feature. This was implemented targeting future 4.6 release. Additionally, as part of minimizing the upload footprint, GIS features were adjusted to function without bulky OpenLayers library. Moreover, profiling chart now uses the generic charting mechanism which facilitate moving to a new charting library with less hassle.

New features/Improvements
issue #11641 Ability to disable the navigationhiding Feature
issue #11654 Use a slider for Internal relations
Make OpenLayers library optional for GIS visualization
Link license.php
Use generic charting mechanism for profiling chart as well

Additionally, following refactoring and code quality improvement work was carried out during the period.

Code Refactoring
Refactoring GIS visualization page
Move controllers to appropriate packages

Code quality
Fix style violations in JS code

by Madhura ( at November 23, 2015 12:35 AM

November 11, 2015

Deven Bansod

Cherry on the cake!

As I had posted in the last post, I successfully completed my Google Summer of Code 2015 with phpMyAdmin and today, I was unanimously accepted into the development team of phpMyAdmin, which is also its Project Leadership commitee (PLC). I will continue to contribute to the project with new features, bug-fixes, testing patches and more, […]

by Deven Bansod at November 11, 2015 06:11 PM

November 08, 2015

Madhura Jayaratne

phpMyAdmin work during first and second weeks

I started my second year as a contract developer for phpMyAdmin project on 1st of October 2015. However, this year I have limited my hours, working only on part time basis. I hope to work for 20 hours a week. Since there were only two days on the first week I am combining the work done on the first week with that of the second. 

The first two weeks was totally focused on bug fixes since there was a constant steam of bugs from the newly released 4.5 version. Most of the bugs were related to the rewritten parser and I got good insight on the new parser while trying to fix some of these bugs. Following are the bugs fixed.

Bug fixes
issue #11521 Notice of undefined variable when performing SHOW CREATE
issue #11522 Strange behavior on table rename
issue #11526 Foreign key to other database's tables fails
issue #11539 Rename table does not result in refresh in left panel
issue #11544 Notices about undefined indexes on structure pages of information_schema tables
issue #11546 "Visualize GIS data" seems to be broken
issue #11548 Confirm box on "Reset slave" option
Fix notices while changing from HASH type to RANGE type
UI does not support inserting multiple values for JSON functions
Tracking does not make sense for information_schema
Fix cookies clearing on version change

Moreover, following bugs were investigated during the period.

Bugs investigated
issue #11515 Multi source replication is not recognized
issue #11538 Copy multiple tables to database
issue #11536 Format of exports looses SQL on 2nd export
issue #11547 "distinct" removed from query while query result export to excel

I plan to spend more time on refactoring in the coming weeks.

Leave days - 7th Oct

by Madhura ( at November 08, 2015 07:36 AM

November 01, 2015

Madhura Jayaratne

phpMyAdmin work during third, fourth and fifth weeks

I did not engage in phpMyAdmin development work during the fourth week while I was less active during the third week due to personal engagements. So, here is a combined blog post for third, fourth and fifth weeks.

During the period I worked on fixing the bugs reported by users as well as those reported by the automated error reporting mechanism. I cleaned up automatically reported errors by exporting them to GitHub tracker, linking them where necessary and by fixing them. Following are the bugs fixed and investigated during the period. 

Bugs Fixed
#11551 Fatal error when switched to master from QA_4_5
#11594 'only_db' config option bug when db names contain underscore and are grouped
#11603 Namespace clash for class Error
#11606 PMA_Util not found when changing password
#11607 Unable to change password from Login information tab
#11610 Undefined variable: res_rel
#11611 Warning while exporting schema to PDF
#11612 Undefined index: new_row_format
#11614 Undefined variable: db
#11617 Getting real row count is not allowed for views
#11622 Reloading privileges is not allowed

Bugs Investigated
#11556 Cannot create table, please enter a valid length keeps coming up
#11568 Erroneous handling of tables with FKs to other databases
#11577 Table aliases ignored when using intellisense
#11583 Cross DB foreign key constraints results in undefined offsets

A security issues was reported during the period and I contributed by coordinating and generating security announcements.

Security Issues
Content spoofing Issue in phpMyAdmin

Additionally, I engaged in some code refactoring and code quality improvements. Refactoring was on `DatabaseStructureController` as highlighted by Marc due to long method lengths. Moreover, unit tests related to PHP classes were renamed to be consistent with the corresponding names of the classes they are testing.

Refactoring and code quality improvements
Refactor DatabaseStructureController
Fix issues reported by PHPCS
Fix issues reported by JSLint

Unit testing
Rename and organize test classes

Feature enhancements
Add supported file format for Archive storage engine

by Madhura ( at November 01, 2015 10:00 AM

October 12, 2015

Michal Čihař

Gammu 1.36.6

Gammu 1.36.6 has been just released. New bugfix release with lot of improvements in the documentation.

Full list of changes:

  • Fixed installation of bash-completion script.
  • Fixed timezone manipulation in SMSD.
  • Documentation improvements.
  • Fixed licensing of helper/win32-dirent.*.
  • Increased default speed for AT connection to 115200.
  • Improve AT module initialization.

You can download it from

Support this program by donations

Filed under: English Gammu Wammu | 0 comments

by Michal Čihař ( at October 12, 2015 04:00 PM

October 05, 2015

Michal Čihař

python-suseapi 0.22

The python-suseapi 0.22 has been released last week. The version number shows nothing special, but one important change has happened - the development repository has been moved.

It's now under openSUSE project on GitHub, what makes it easier to find for potential users and also makes team maintenance a bit easier than under my personal account.

If you're curious what the module does - it's mostly usable only inside SUSE, providing access to some internal services. One major thing usable outside is the Bugzilla interface, which should be at one day replaced by python-bugzilla, but for now provides some features not available there (using web scraping).

Anyway the code has documentation on, so you can figure out yourself what it includes.

Filed under: Coding English SUSE | 0 comments

by Michal Čihař ( at October 05, 2015 10:00 AM

October 01, 2015

Michal Čihař

IMAP utils 0.5

I've just released new version of imap-utils. Main reason for new release was change on PyPI which now needs files to be hosted there.

However the new release also comes with other changes:

  • Changed license to GPL3+.
  • Various coding style fixes.

Also this is first release done from Git repository hosted on GitHub.

Filed under: Coding English IMAP | 0 comments

by Michal Čihař ( at October 01, 2015 10:00 AM

September 27, 2015

Madhura Jayaratne

phpMyAdmin work during fiftieth and fifty first weeks

During these two weeks I worked relatively lesser number of hours and had to take a couple of days off. So, I am combining the work done during the two weeks to a single blog post.

During the two weeks I concentrated mostly on feature enhancements. Two major features were implemented during the period. First of them is the ability to specify the routine level privileges and I noticed that this feature is missing when I went though the MySQL GRANT syntax. Even though this sounded easier when I started working on it, it took two full days to complete the feature. This was mostly due to the code quality of the related code segments. So, I'd put server_privileges.php file as one of the key places where refactoring can help.

The second major feature is the UI to define partition definitions. Existing create table UI has only a text area to define the partition definition. Someone who is not familiar with partition syntax would not be able to do this with the old UI. The new UI allows specifying partitioning parameters and parameters for each partitions. Additionally, I worked on making the metro theme compatible with the 4.5 version. I had accumulated commits for this for sometime. During the two week I did the final touches and the pull request was merged.

Feature enhancements
Issue #11479 Allow setting routine wise privileges
Issue #11490 UI for defining partitioning in create table window
Pull #6 Metro theme for future version 4.5
Add server plugins page
Minor UI improvements to the User accounts page

Additionally, following bugs were fixed during the two weeks.

Bugs fixed
Issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system
Issue #11475 Warnings linked to Drizzle
Issue #11487 Warning when entering Query
Issue #11491 Propose table structure broken
Do not suggest upgrading when there is no compatible versions

Leave days : 17th, 23rd

by Madhura ( at September 27, 2015 09:53 PM

September 20, 2015

Michal Čihař

Weblate 2.4

Weblate 2.4 has been released today. It comes with extended support for various file formats, extended hook scripts, better keyboard shortcuts and dozen of bug fixes.

Full list of changes for 2.4:

  • Improved support for PHP files.
  • Ability to add ACL to anonymous user.
  • Improved configurability of import_project command.
  • Added CSV dump of history.
  • Avoid copy/paste errors with whitespace chars.
  • Added support for Bitbucket webhooks.
  • Tigher control on fuzzy strings on translation upload.
  • Several URLs have changed, you might have to update your bookmarks.
  • Hook scripts are executed with VCS root as current directory.
  • Hook scripts are executed with environment variables descriping current component.
  • Add management command to optimize fulltext index.
  • Added support for error reporting to Rollbar.
  • Projects now can have multiple owners.
  • Project owners can manage themselves.
  • Added support for javascript-format used in Gettext PO.
  • Support for adding new translations in XLIFF.
  • Improved file format autodetection.
  • Extended keyboard shortcuts.
  • Improved dictionary matching for several languages.
  • Improved layout of most of pages.
  • Support for adding words to dictionary while translating.
  • Added support for filtering languages to be managed by Weblate.
  • Added support for translating and importing CSV files.
  • Rewritten handling of static files.
  • Direct login/registration links to third party service if that's the only one.
  • Commit pending changes on account removal.
  • Add management command to change site name.
  • Add option to confiugure default committer.
  • Add hook after adding new translation.
  • Add option to specify multiple files to add to commit.

If you are upgrading from older version, please follow our upgrading instructions.

You can find more information about Weblate on, the code is hosted on Github. If you are curious how it looks, you can try it out on demo server. You can login there with demo account using demo password or register your own user.

Weblate is also being used as official translating service for phpMyAdmin, Gammu, Weblate itself and other projects.

If you are free software project which would like to use Weblate, I'm happy to help you with set up or even host Weblate for you.

Further development of Weblate would not be possible without people providing donations, thanks to everybody who have helped so far!

PS: The roadmap for next release is just being prepared, you can influence this by expressing support for individual issues either by comments or by providing bounty for them.

Filed under: English phpMyAdmin SUSE Weblate | 0 comments

by Michal Čihař ( at September 20, 2015 04:15 PM

September 14, 2015

Madhura Jayaratne

phpMyAdmin work during forty eighth and forty ninth weeks

I am combining two weeks of work into this blog post. I took 3 days off work (on 1st, 7th and 11th of September) and this is mostly why I am combining work of two weeks.

Following are the bugs fixed and investigated during the period.

Bugs fixed
Issue #11445 MySQL 5.7 and Status page for an unprivileged user
Issue #11446 MySQL 5.7 and Variables page for an unprivileged user
Issue #11450 Validation fails when using functions
Issue #11451 Designer-Bug in move.js on multiple server configuration
Issue #11454 Find and replace is broken
Issue #11457 414 Request-URI Too Large
Issue #11461 Foreign key constraints for InnoDB tables with upper-case letters disabled

Bugs investigated
Issue #11453 Paste command is gone in 4.4
Issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system
Issue #11470 Impossible to cancel "Drop files here" overlay

Issue #11445 and #11446 was due to permission changes introduced in MySQL 5.7 which prevented unprivileged users from issuing SHOW commands. Issue #11454 was a regression in upcoming 4.5 version this was fixed for the release candidate. Issue #11461 was tricky to fix, however only affected the apple users.

With regard to feature enhancements, the major change was the removal of Drizzle support. Development of Drizzle has been abandoned for years and hence support for Drizzle will be removed from version 4.6.  Most of the development work of issue #6297 was carried out during earlier weeks. However, it was during this period the pull request got merged.

Feature enhancements
Issue #6297 Use GET only for read only operations
Issue #11456 Disabled storage engines
Remove Drizzle support from master branch
Mark default storage engine

A security vulnerability was reported after some time during the two weeks. The vulnerability was in code related to reCaptcha test which is an additional opt-in security feature provided in phpMyAdmin.

Security fixes
Fix reCaptcha bypass

by Madhura ( at September 14, 2015 12:43 PM

September 12, 2015

Michal Čihař

Weblate for translating everything

Weblate is not only useful for translating software, it can help in translating any content. Let's look where our users are using it.

Software translation is the most usual use case. This is actually where Weblate was used for first time and still provides great support for that. As an example (and oldest project hosted in Weblate) you can look at phpMyAdmin, where Weblate also helps to keep in sync translation for different maintenance branches. It can also help you in using same terminology in command line utility and graphical one like it is done in Gammu and Wammu translations.

Weblate also supports localization of mobile application. Android support was originally implemented for OsmAnd project, but now they also translate iOS application using Weblate.

Another use case is for translating documentation. You need to have some infrastructure to do, but there are several free software project to help here as well. For phpMyAdmin documentation or documentation for python module Odorik the Sphinx documentation generator is used, which has support for translation of the documentation. I've recently published quick howto for this setup. Another great tool for translating documentation is Publican, it is Docbook based tool and is used for translating The Debian Administrator's Handbook.

Last but not least, you can use Weblate to translate your website. For example website for Weblate itself is translated this way.

Did you miss your use case for Weblate? Please let me know.

PS: I've heard that one Linux distribution will start using Weblate soon.

Filed under: English phpMyAdmin SUSE Weblate | 0 comments

by Michal Čihař ( at September 12, 2015 10:00 AM

August 29, 2015

Madhura Jayaratne

phpMyAdmin work during forty fourth and forty fifth weeks

I took leave on first three days off on forty fourth week to visit Anuradhpura and here I am combining the work done on the rest of the two days with the work done on the forty fifth week in to a single blog post.

During the two weeks I continued to QA the development version to identify any bugs arising from the ongoing developments. So, most of the bugs were fixed in the master branch. Additionally I fixed two incompatibilities with PHP7 in the stable version of phpMyAdmin. Both these incompatibilities were in third party libraries we use and these libraries were upgraded and tested.

Bugs fixed
#11345 Token mismatch error
#11349 Table list doesn't expand when current table on different page
#11364 JS error when trying to navigate to db structure page after db creation failed
#11382 Selecting values for set field throws JS error
#11389 ReCaptcha produce deprecated messages under PHP 7
#11387 phpseclib < 2.0 produces deprecated messages on PHP 7
Fix - Counting real number of rows always return zero
Fix - Index list not updated upon dropping a column

Bugs investigated
#11384 Query formatting adds space between ! and =

The highlight in terms of feature enhancements is the improved partition support. Now you can view all the details related to table partitions and sub partitions in the table structure page. Moreover, all the partition operations can be performed from there. 

Additionally, I improved the cache invalidation on version upgrade. With the new page loading introduced in version 4.0, phpMyAdmin cached the JS files and fired the relevant event on loading a page. Now these cached files are invalidate upon version upgrade.

Feature enhancements
Improved partition support
Clear internal cache at script handler upon version upgrade
Minor UI improvements to the db operations page
Do not attach index table unnecessarily
Refactor db_designer.php

Code quality improvements
Create separate controllers from table and database structure pages
Organize templates into a meaningful structure
Fix coding style issues reported by PHPCS

by Madhura ( at August 29, 2015 11:14 PM

phpMyAdmin work during forty sixth and forty seventh weeks

During this period I moved from Colombo to Melbourne, Australia. So, I had to take couple of days off on both weeks for preparation work as well as settling down in Australia. Hence, I am combining the work done during these two weeks to a single blog post.

The bugs fixed during the time includes bugs from both stable version and the upcoming 4.5 version. 

Bugs fixed
#11404 "Switch to copied table" doesn't work
#11408 Export breaks when field name is 0
#11410 SPATIAL index option is not clickable
#11414 Unclear export options / organization / hierarchy
#11421 Stored-proc / routine - broken parameter parsing
#11436 CREATE DATABASE should be enabled by default on server exports
Remove unnecessary title after slider initialization
Fix missing template in table search page
Fix function based search for geometry columns in table search page
Fix GIS editor in table insert/edit page
Fix x coordinates of points which was the repetition of y coordinates
Respect the Auto increment checkbox in SQL export
Fix missing name for configuration read_as_multibytes
Fix - Do not export `sys` database when exporting server
Add missing 'sql_create_database' configuration to setup and user preferences

Additionally, following bugs were investigated.

Bugs investigated
#11433 '%' does not work as it is with sprintf
#11434 Class 'SqlParser\Lexer' not found

With regards to the feature enhancements, there were no major features implemented during the period. However, a number of smaller enhancements were carried out. I also went on to do some language improvements where a number of sentences that used title case were converted to sentence case to be compliant with phpMyAdmin language guide. Moreover, I started working on supporting JSON data type introduced in MySQL 5.7.8. However, this had to be postponed due to bugs in PHP with respect to JSON data type.

Feature enhancements
Improvements to partition details on table structure page
Spatial indexes with multiple columns are not allowed
Organize SQL export options
Make the SQL exports compatible for side by side comparison with old exports
Allow editing unless it's a static variable. Allow editing new dynamic variables added in MariaDB and newer versions of MySQL
Minor UI improvements in zoom search page
Language improvements - Use sentence case as per phpMyAdmin language guide

Feature requests investigated
#11438 Support JSON data type

by Madhura ( at August 29, 2015 11:14 PM

Deven Bansod

GSoC 2015 : Successfully completed!

Last night, the results for Google summer of Code, 2015 – Final evaluations were declared! And yes! I got through successfully! It was a majestic to see that mail from the melange site telling me that I have passed. After 3 awesome months with phpMyAdmin and under a great mentor in Isaac, it was indeed a […]

by Deven Bansod at August 29, 2015 01:01 PM

August 23, 2015

Dan Ungureanu

Last week

This was the last week of the Google Summer of Code program. The organizers of the program advised us to do documentation and wrap-up the project. I went over my proposal to check that all objectives were met and I have also been looking through and my code and tried spotting any errors. Most of the errors fixed were reported by Scrutinizer.

Another task I took care of was to submit my final evaluation and prepare the code samples I have to submit next week.

I would like to thank to the phpMyAdmin team and my mentor, Marc Delisle, for giving me the opportunity to participate in Google Summer of Code and spending their time with me. I believe this is one of the best work experiences I ever had and I am proud of the library I wrote, the way it turned out and how I integrated it in phpMyAdmin.

I hope that time will permit me to continue contributing to phpMyAdmin.

To see my work over the summer, you can check out my library repository or the pull requests I submitted.

August 23, 2015 12:00 AM

August 16, 2015

Dan Ungureanu

Week 12

This week, most of my work was done on sql-parser. I fixed a couple of bugs, wrote tests for the new features introduced over the last weeks, updated documentation (wiki as well) and moved the tools for tests and contexts generation to the sql-parser repository.

Next week is the last week week of Google Summer of Code and I will focus on fixing bugs and miscellaneous improvements (documentation and refactoring mostly).

To see my progress, you can check out my library repository or some of the pull requests I submitted this week.

August 16, 2015 12:00 AM

August 09, 2015

Dan Ungureanu

Week 11

This week I found and fixed a a couple of bugs and rewrote an important part of the import mechanism of phpMyAdmin.

One of the most challenging tasks of this week was probably implementing the new import mechanism. The fact that it has to process so much data made performance a top priority.

At first, I tried using the standard lexer to delimit statements, but I failed. For huge queries (that are also buffered) parsing the query over and over again to check if a statement finished was too slow. I decided to write a specialized parser (BufferedQuery) that tries to parse only the most important parts of the query (comments, strings and delimiters) in order to be able to split the statements and execute them separately. At this moment is performs well and also fixes bug #11339 which was reopened due to some edge case not being handled correctly.

For the next week, I planned on finishing the query builder and write tests.

To see my progress, you can check out my library repository or some of the pull requests I submitted this week.

August 09, 2015 12:00 AM

August 04, 2015

Zhang Hao

The OOP & refactor project weekly report 11

During the last Wednesday to now I fixed some bugs on the new StrucutureController, and start thinking of refactoring the Import/Export module.

Files Covered In This Week

  • libraries/controllers/StructureController.class
  • db_structure.php
  • tbl_structure.php

Outcomes In This Week

Fix bugs appeared in the StructureController
While testing on the StructureController, we had found some bugs that cause some functions doesn’t work properly (bulk delete, etc). After tracing the execution of the code, I found that the the scripts we directly included/required use some global variables that are not available in that context. So most problems solved after adding global declaration to them. In addition, in the future I suggest we should remove these scripts by creating individual functions for them.

What Will I Do Next

Due to the import/export module is hard to decompose and derive controllers, we decided working on recovering test coverage first.

by jasondaurus at August 04, 2015 09:34 AM

August 02, 2015

Deven Bansod

GSoC 2015 : Weekly Report #12 : RFE #1396

Week #12 Task(s) completed: RFE #1396 : Support MySQL 5.6 SHA256 secure password Tasks worked upon: None Scheduled Deadline: 9th August Completed on: 28th July Details: 1. I had started working on and completed the last feature on the timeline i.e. RFE #1396 : Support MySQL 5.6 SHA256 secure password last week. You can find the description of the feature at […]

by Deven Bansod at August 02, 2015 07:15 PM

Dan Ungureanu

Week 10

This week I found and fixed a a couple of bugs, wrote a new formatting component in the parsing library and rewrote a part of the import mechanism to use the library I wrote.

One of the most challenging tasks of this week was probably writing the formatting library. I tried a couple of designs and ended up rewriting this component for about five times. None of them worked as I expected and sometimes they relied on some cheap hacks to get the job done, thing I didn’t like at all. At this moment, the component relies on the tokens provided by the lexer and takes into account a couple of settings to format the code.

The other components of the library got some improvements as well, mostly bug fixes. I really hope that during next week I will get to write some tests and finish the query builder.

To see my progress, you can check out my library repository or some of the pull requests I submitted this week.

August 02, 2015 12:00 AM

August 01, 2015

Madhura Jayaratne

phpMyAdmin work during forty third week

During the week I mostly focused on fixing bugs. I attended to a mix of bugs that were prevalent in current stable version as well as those arose due to ongoing development targeting the next major release. 

Among the older bugs, I went on to investigate a couple of bugs related to replication features. Since I did not have a replication setup I first created such as investigated the bugs that had been reported. Bug #10307 which reported how cross database replication was broken due to the use of fully qualified table names was fixed. Other replication related bugs, which were also quite old, were mostly out of date.

Bugs that were fixed and investigated during the week are

Bugs fixed
#10307 Replication broken when using cross-database master/slave config and phpMyAdmin
#11322 Missing null checkbox when grid editing a null cell
#11324 JS error while opening a new page in Desginer
#11326 Exported schema includes all the tables of the database
#11328 Exporting table generates AUTO_INCREMENT=; for new tables
#11334 Table creation time, last update and last check column are empty
#11336 Exporting a table exports database level events
Fix various broken features due to refactoring in database structure page
Fix retrieve default storage engine correctly

Bugs investigated
#10435 Revoking non-existent Grant Option breaks MySQL 5.6 Replication
#10622 "Loading" doesn't disappear when stopping replication slave
#11325 Exporting database schema to PDF is broken
#11327 Default value for BIT column exported as b

When analyzing the JS errors reported in error reporting server, it was evident that quite a lot of them were due to caching issues on upgrading to a new phpMyAdmin version. This was addressed during the week and hopefully these issues will no longer occur.

Avoid caching JS and CSS files across phpMyAdmin versions
Upgrade TCPDF to version 6.2.9
UI improvements to replication and binary log pages
Improvements to the feature allowing to export databases and tables into separate files

by Madhura ( at August 01, 2015 04:16 AM

July 29, 2015

Zhang Hao

The OOP & refactor project weekly report 10

During the last week I refactored the structure.lib.php by creating the StructureController. So far, the controller was created and the remains being analysed.

Files Covered In This Week

  • libraries/controllers/StructureController.class.php
  • libraries/structure.lib.php
  • db_structure.php
  • tbl_structure.php
  • templates/structure

Outcomes In This Week

Create the StructureController
First I created templates for the PMA_getHtml series functions. After that, we decided to create a controller for the structure handle logics, therefore I created the StructureController. Functions that involved in the strucuture.lib.php will be moved into the controller. Some functions still require $db and $table parameter at this moment since the controller is in its initial phase. I will update the PR with optimisations and removal of the redundant parameters.

Move some functions to PMA_Table
Some functions like getColumnsWithIndex and getRealRowCountTable should be categorised as the table related functions, so it should be moved into the PMA_Table class.

What Will I Do Next

First I will finish creating and testing the StructureController, then I will start working on the Import/Export module.

by jasondaurus at July 29, 2015 08:34 AM

July 28, 2015

Madhura Jayaratne

phpMyAdmin work during forty second week

During this week I attended to a mix of bug fixes and feature enhancements.

I installed upcoming MySQL 5.7 and paid attention to areas in phpMyAdmin that needs to be updated to work with 5.7. First of all I noticed that I am unable to create phpMyAdmin configuration storage table since TIMESTAMP columns in them lacked a default value and this is not allowed in MySQL 5.7. Moreover I attended to a couple of UI bugs I happen to notice while I was working. Following are the bugs that were fixed.

Bugs fixed
#1808 "Improve table structure" generates invalid SQL
#1817 Creating configuration storage tables fail in MySQL 5.7
UI fixes in error reporting feature
Fix legend for table SQL page
Fix gutter style for normal and dark console themes

On the feature enhancement front, the major work was to improve the rtl language support. There were quite a number of instances that were broken even in the current stable version. Since Arabic is not shipped currently due to lack of translation, these were fixed in master branch. While some of these were style changes, others involved changing the DOM structure. Additionally, I attended to some UI improvements as well as improvements targeting MySQL 5.7

Feature enhancements
UI improvements in the 'Variables' and 'SQL' pages
Allow linking MySQL 5.7 document links
Terminology improvements in the 'User accounts' and 'Privileges' pages
Document SQL parameter binding feature
Improve support for rtl languages
Update ChangeLog links
Mark MySQL 5.7 'sys' schema as a system schema

Since GSoC work is ongoing, we could observer an increase in coding style violations reported by PHPCS. During the week, I attended to these violations as well.

Code quality improvements
Fix PHP coding style violations reported by PHPCS

P.S. This was a four day week with me taking leave on Thursday.

by Madhura ( at July 28, 2015 06:33 AM

July 27, 2015

Deven Bansod

GSoC 2015 : Weekly Report #11 : others

Week #11 Task(s) completed: None Tasks worked upon: RFE #1396 : Support MySQL 5.6 SHA256 secure password Scheduled Deadline: 9th August Completed on: NA Details: 1. I had started working on and completed the last feature on the timeline i.e. RFE #1396 : Support MySQL 5.6 SHA256 secure password last week. You can find the description of the feature at a […]

by Deven Bansod at July 27, 2015 05:20 AM

July 26, 2015

Dan Ungureanu

Week 9

During the past week I tried to improve the overall quality of the code base which consisted of writing a couple of tests, fixing over 200 of Scrutinizer’s issues and also fixed some old bugs regarding the parser. The library got some updates as well, including more rules to check for errors in queries, support for transactions and improved support for UNIONs.

I wish I wrote more tests during this week, but for the next one I will try to focus more on that and increase the overall code coverage.

To see my progress, you can check out my library repository, some of the pull requests #11319, #1816, #1811, #1807 or the bugs I fixed #4962, #5437, #6118.

July 26, 2015 12:00 AM

July 25, 2015

Michal Čihař

Migrating phpMyAdmin from

Some time ago we've decided to move phpMyAdmin out of services. This was mostly motivated by issues with bundling crapware with installers (though we were not affected), but also we've missed some features that we would like to have and were not possible there.

The project relied on with several services. The biggest ones being website and downloads hosting, issue tracking and mailing lists. We've chosen different approach for each of these.

As first, we've moved away website and downloads. Thanks to generous offer of, everything went quite smoothly and we now have HTTPS secured website and downloads, see our announcement. Oh and on the way we've started to PGP sign the releases as well, so you can verify the download.

Shortly after this was hit by major problems with infrastructure. Unfortunately we were not yet completely ready with rest of the migration, but this has definitely pushed us to make progress faster.

During the outage, we've opened up issue tracker on GitHub, to be able to receive bug reports from our users. On the background I've worked on the issue migration. The good news is that as of now almost all issues are migrated. There are few missing ones, but these will be hopefully handled in upcoming days as well.

Last but not least, we had mailing lists on We've shortly discussed available options and decided to run own mail server with these. It will allow us greater flexibility while still using well know software in background. Initial attempts with Mailman 3 failed, so we got back to Mailman 2, which is stable and easy to configure. See also our news posts for official announcement.

Thanks to, it has been great home for us, but now we have better places to live.

Filed under: English phpMyAdmin | 0 comments

by Michal Čihař ( at July 25, 2015 04:00 AM

July 22, 2015

Madhura Jayaratne

phpMyAdmin work during the forty first week

During this week I attended to bug fixes, new features as well as general coding improvements. 

The highlight of the week in terms bug fixes was the ability to use error reporting server. It was not usable for a long time and now that the situation has improved to Smitha, I attended to a number of bugs reported there. I noticed that a large number of bugs were due to caching issue while upgrading. This affected relational features on PHP front while a number of JS issues reported were also due to this. I also engaged in reporting issues and sending pull requests to improve the error reporting server. Bugs fixed and attended during the week are

Bugs fixed
#4979 Problem when import *.ods file
#4980 Cannot read property 'status' of null
#4981 Uncaught TypeError: Cannot read property 'attr' of null
#4984 Undefined <feature>work upon upgrade to new version
#4985 Column headers move when scrolling

Bugs investigated
#4983 Theme configurations not defined
#4986 First stack trace item missing in PHP error reports

The highlight in terms of new feature is the support for virtual columns. Support for virtual columns was initially requested for MariaDB. However my earlier attempt to implement the feature was abandoned due to lack of parser support. Virtual columns are featured in upcoming MySQL 5.7 as well and since the column expression can be extracted from information_schema in MySQL I could add support for MySQL virtual columns without parser update. After discussing this on developer mailing list GSoC student who is working on the parser rewrite added support for virtual columns to the new parser and with this I went on to extend the feature for MariaDB as well.

Feature requests implemented
#1517 Support for MariaDB virtual/persistent columns
Support MySQL 5.7.5 virtual columns

Feature requests investigated
#1658 Better Performance

To the latter part of the week I worked on improving coding style which had deteriorated a bit during the last couple of months.

Coding improvements
Centralize querying for SHOW CREATE TABLE statements
Documentation improvements on upgrading
Fix PHP coding style violations reported by PHPCS

Forty first week of my work was a four day week with me taking 16th of July as day off.

by Madhura ( at July 22, 2015 07:40 AM

July 20, 2015

Zhang Hao

The OOP & refactor project weekly report 9

Hello everyone, during last week I almost finished my work on the TableSearch class and the Table class. A TableSearchController was created for handling table searching operations such as zoom search and replacing search. But unfortunately there still some test failures, I will comment it out and fix it later. Also, I must deeply apologise for lateness in respond to the community during last week.

Files Covered In This Week

  • libraries/controllers/TableSearchController.class.php
  • libraries/Table.class.php
  • libraries/TableSearch.class.php
  • tbl_find_replace.php
  • tbl_select.php
  • tbl_zoom_select.php

Outcomes In This Week

Create the TableSearchController
After analysing the PMA_TableSearch class, we decided to create a controller to handle requests for the search function of tables. I applied similar strategies used on controllers before for tbl_select.php, tbl_zoom_select.php and tbl_replace.php.

Change some member functions in PMA_Table class to non-static
Some static member functions in PMA_Table class like isView() and isMerge() is highly related with specific tables, so it should be associated with an instance of the PMA_Table class. Therefore I made them non-static.

Fix test failures in PMA_Table_test
Test failures came as I converted some member functions to the non-static version. I believe the problem is caused by fault in creating stubs for test, but I can’t still fix it yet since the lack of knowledge on mocking objects in phpunit. If I still cannot fix the test problem before 10:00 am, July 21st 2015, I may comment the tests out first and work on it again after I finish creating templates for structure.lib.php.

What Will I Do Next

I started working on refactoring structure.lib.php. A new PR was opened, and according to the timeline submitted before, I should get it done before July 25th 2015.

by jasondaurus at July 20, 2015 06:24 PM

Deven Bansod

GSoC 2015 : Weekly Report #10 : RFE #1396 & others

Week #10 Task(s) completed: None Tasks worked upon: RFE #1396 : Support MySQL 5.6 SHA256 secure password Scheduled Deadline: 9th August Completed on: NA Details: 1. I started working on the last feature on the timeline i.e. RFE #1396 : Support MySQL 5.6 SHA256 secure password I referred extensively to the documentation. Here the versions of MySQL were quite important as […]

by Deven Bansod at July 20, 2015 03:36 AM

July 19, 2015

Dan Ungureanu

Week 8

During the past week I worked on the linter and in order to provide better analysis I had to improve the library by creating new rules that check for errors.

At this moment, any code that is written in the SQL query box or in the console goes through the library which analyzes it and provides feedback. I hope that this feature will help many users spot their errors even before executing their queries and improve their work flow. Some of the errors are pretty difficult to detect and the overhead involved isn’t worth it, which means that not all errors are detected by the library. I tried to focus on syntax as much as possible.

During the next week, I will try improve the localization of the library, make error strings translatable and increase the overall code coverage. I am not sure to which extent I will be increase the code coverage, but I hope that I will be able to increase it by at least a few percents.

To see my progress, you can check out my library repository or some of the pull requests (#1788 & #1799) I submit this week.

July 19, 2015 12:00 AM

July 17, 2015

Madhura Jayaratne

phpMyAdmn work during the fortieth week

The fortieth week of work was mostly spent on fixing the bugs in the upcoming 4.5 version. 

While implementing the export templates I noticed that lock_table directive is not repopulated similar to other directive when back button is click and this was fixed. Further, quite a lot of the links to new system variables in phpMyAdmin's Variables page  was missing, and these were also added. Bug #4854 was fixed allowing users to use multiple servers in parallel. Earlier this was not possible and a series of fixes such as introducing IV per server finally led to this fix.

Here is the list of bugs fixed and investigated.

Bugs fixed
#4854 "Error: Token mismatch" when using multiple servers in parallel
#4973 Show a warning when a user account allowing any user from localhost to connect (partial fix)
#4976 Timepicker CSS issues in Original theme
#4978 Cancelled page settings changes do not revert the UI
Correctly set lock_table directive when repopulating on back button click
All columns listed for xaxis are selected in query charts
Saved chart image does not have a proper name or an extension
Add missing links Variables page to MySQL documentation for system variables
Fix height of the selection box of monitor charts
Remove menu options that do not make sense for visual query builder
Remove unused parameter causing notices

Bugs investigated
#4864 Tried to set secure cookie on non-secure connection

Among feature improvements, the most notable one is the use of native tabs in server plugin page in place of the jQuery tabs. Additionally, the process list was updated to show additional columns for MariaDB and as discussed during the last team meeting names of some of the pmadb directives were changed. 

Feature requests implemented
#1685 mariadb processlist
Underscores are preferred to separate words in configuration storage table names/directives
Use phpmyadmin's secondary tabs instead of jQuery tabs in server plugins page
Set indeterminate for export checkboxes when either data or structure is not selected

Feature requests investigated
#1684 Use GET only for read only operations

by Madhura ( at July 17, 2015 02:16 AM

July 15, 2015

Michal Čihař

Wammu 0.39

Yesterday, Wammu 0.39 has been released.

The list of changes is not really huge:

I will not make any promises for future releases (if there will be any) as the tool is not really in active development.

Filed under: English Gammu Wammu | 0 comments

by Michal Čihař ( at July 15, 2015 04:00 AM

July 13, 2015

Michal Čihař

Odorik modul 0.5

Dnes jsem vydal novou verzi Python modulu Odorik. Přidává vylepšení hlavně při vypisování hovorů:

  • Přeložena dokumentace do češtiny.
  • Podrobnější souhrny pro hovory a zprávy.
  • Přidána možnost filtrovat hovory podle stavu a směru.

Dokumentace přeložená do češtiny za použití Weblate.

Filed under: Coding Czech Odorik | 0 comments

by Michal Čihař ( at July 13, 2015 10:00 AM

Deven Bansod

GSoC 2015 : Weekly Report #9 : RFE #1163, RFE #1396 & some corrections

Week #9 Task(s) completed: RFE #1163 : PMA not using SET NAMES on using custom charset/ collation (Not implemented, but closed) Tasks worked upon: RFE #1396 : Support MySQL 5.6 SHA256 secure password Scheduled Deadline: 9th August Completed on: NA Details: 1. We decided that since we are not able to reproduce the exact problem, even though we […]

by Deven Bansod at July 13, 2015 04:07 AM

July 12, 2015

Dan Ungureanu

Week 7

During the past week I finished replacing the old parser. The remaining part of the code that required replacing was small, so I had enough time to also test it and so far it works fine.

There were fragments of code that relied on regular expressions for analysis and some of those were replaced during the process, but I believe that some of the remaining regular expressions won’t be replaced, because they perform good and faster than the parser would.

Most of the bugs I were aware of and tested with the new parser seem to be fixed. For the next week I planned on fixing the remaining bugs and implementing new features regarding the parser. I will improve the parsers to provide better, strict error messages so I can built the linter on top of it.

To see my progress, you can check out my library repository or the pull request I submit for phpMyAdmin and was merged today.

July 12, 2015 12:00 AM

July 09, 2015

Zhang Hao

The OOP & refactor project weekly report 8

Hello, during last week I majorly spent time on the TableSearch class. In the same time, I also tested and fixed problems in the TableGisVisualizationController.

Files Covered In This Week

  • libraries/controllers/TableGisVisualizationController.class.php
  • libraries/Table.class.php

Outcomes In This Week

Test & Fix on TableGisVisualizationController
Thanks to the community’s help, finally I can test my works on the TableGisVisualizationController. By using GIS data provided in phpMyAdmin official demo, I found a problem in loading the GisVisualization class too early.

About the Table class
To convert the Table class into a completely OOPed one, we must first achieve encapsulation on it. First I moved the PMA_Table::cache to PMA_DatabaseInterface class, and provide some functions to manipulate it.

What Will I Do Next

In the following week, I will finish working on Table class and TableSearch class. I will refactor the TableSearch class to TableSearchController as my mentor suggested.

by jasondaurus at July 09, 2015 07:10 AM

July 07, 2015

Madhura Jayaratne

phpMyAdmin work during thirty eighth and thirty ninth weeks

I had to take two days off on the thirty ninth week of work. So, here I am combining it with the previous week to report what I have been up to. Continuing from the last couple of weeks we saw a decline in the number of bugs reported, indicating that the releases are much stable.

Due to the above reason I spent more time on feature requests and general coding improvements. I went on to clean the feature request tracker by investigating the feature requests and implementing them when they made sense. Here are the features implemented during the week.

Feature requests implemented
#689  Column privileges and update
#812  Store export definitions for reuse
#1531 Cant use external config file
#1552 CSV import: Allow "Columns escaped with" to be optional
#1561 Being able to use multiple servers at the same time when using cookie auth
Get default_fk_check_value on demand rather than checking the value in every script
Remove configuration storage data related to a user upon deleting the user
Upgrade CodeMirror to version 5.4.0

Additionally, following feature requests were investigated

Feature requests investigated
#757  Dropdown for special SQL like SUM, AVG and GROUP BY
#1270 Allow specifying mime types and transformations in queries
#1390 Export tables list must be ordered by constraints
#1682 Add quick action features

From the general coding improvements front, following were done.

General code improvements
OOP improvements in navigation panel
Match export parameters with the names of corresponding config values
Fix JavaScript variable scope error reported by Codacy

Even though reported in low numbers, following bugs were fixed and investigated.

Bugs fixed
#4916 Autocomplete either doesn't function at all or auto completes the original table name when joining multiple aliased tables
#4963 Improve/restore non-unique index row editing
#4966 MySQL errors are not shown when DebugSQL is enabled
#4967 Field named '0' is not recognized
#4969 Autoload from prefs_storage not behaving properly
Show build query dialog in full screen view also
Missing selected/entered values when editing active options in visual query builder
Remove character set from create_tables_drizzle.sql

Bugs investigated
#4964 New version using older files
#4968 Combine create / alter table statements
#4972 Bug when processing binary data

by Madhura ( at July 07, 2015 02:40 PM

July 06, 2015

Deven Bansod

GSoC 2015 : Weekly Report #8 : RFE #1163 & some corrections

Week #8 Task(s) completed: None Tasks worked upon: RFE #1163 : PMA not using SET NAMES on using custom charset/ collation Scheduled Deadline: 19th July Completed on: NA Details: 1. The RFE#1163 suggests that we should use SET NAMES instead of SET CHARSET while using custom collation/ charset. We were undecided last week about the […]

by Deven Bansod at July 06, 2015 06:29 AM

July 05, 2015

Dan Ungureanu

Week 6

During this week I continued replacing code that was related to the old parsing library. The new library suffered a lot of changes too. Some of the most important are: implemented a builder, improved lots of statements, the library takes into consideration the SQL mode in some operations, lots of fixes, improved the documentation and the code coverage is now over 98%.

One of the most important tasks accomplished this week is that I finished refactoring sql.lib.php, DisplayResults.class.php, Table.class.php and a huge part of the code related to export.

I hope that the next week I will finish refactoring the old code and fix as many bugs as possible.

To see my progress, you can check out my library repository or the pull request I submit for phpMyAdmin.

July 05, 2015 12:00 AM

July 01, 2015

Zhang Hao

The OOP & refactor project weekly report 7

During the last week I finished my work on the dependency injection container and a helper for the template system. Also, the mid-term evaluation was submitted. I am grateful of being one of the PMA developers :-)

Files Covered In This Week

  • libraries/ArrayHelper.class.php
  • libraries/
  • libraries/di/*

Outcomes In This Week

The helper for template system & Refactor
In order to refactor, I created this helper to simplify branching and accessing array elements. By using PMA\Util\get, it enable us access an array using dot notation. Here is an example:

require_once 'libraries/util.lib.php';
use PMA\Util;
$test = array('a' => array('b' => array('c')));
echo Util\get($test, 'a.b');

It will print the result below:


If the specified path or the value not exist, it will return a default value. The default value can be set as the third parameter of the function. It’s set to null by default.

Dependency Injection Container
First I implemented the container using closures, but phpunit failed so that I can only implement a new one in class form. The dependency container is mainly use to free us from passing plenty of parameters to construct classes.

When we use the container, we can just set up some global parameters like $GLOBAL['dbi'] and $GLOBAL['url_query'] in it. We can also register services or factories (Container::factory and Container::service). After we finish setting up dependencies, we can construct the class by calling Container::get and pass the rest of user-specified parameters for the class. We don’t need to worry about the long-long parameter list, since the container will resolve by itself.

What Will I Do Next

In the following 1 weeks, I will work on refining the Table class and TableSearch class.

by jasondaurus at July 01, 2015 02:42 PM

June 29, 2015

Deven Bansod

GSoC 2015 : Weekly Report #7 : RFE #1163 & some corrections

Week #7 Task(s) completed: None Tasks worked upon: RFE #1163 : PMA not using SET NAMES on using custom charset/ collation RFE #1060 : Designer settings like ‘Angular/ Direct Links’, ‘Snap to Grid’ etc. should be remembered Scheduled Deadline: 19th July Completed on: NA Details: 1. The RFE#1163 suggests that we should use SET NAMES […]

by Deven Bansod at June 29, 2015 05:41 AM

June 28, 2015

Dan Ungureanu

Week 5

During this week I paid a lot of attention to understanding the old code so I would not create any new bugs by mistake and I got the chance to find a few new ones (or had no knowledge of them previously).

Since most bugs are caused by edge cases that the old parser cannot handle I decided that the best approach to fixing them is to continue implementing the new library. This week the sql-parser library suffered quite a few changes and I got the chance to see how it behaves in real situations. It still lacks some functionality (e.g. query builder and query formatter) which are needed, but those are planed to be written later. For now, I implemented temporary methods that, given the conditions, seem to work as expected.

One of the most difficult parts was the code from sql.lib.php which has a high complexity, mixing some logic with view code and not being very consistent.

My task for the next two weeks is to refactor code related to the SQL library. I will definitely have to work more on sql.lib.php, being one of the key components of phpMyAdmin.

To see my progress, you can check out my library repository or the pull request I submit for phpMyAdmin.

June 28, 2015 12:00 AM

June 23, 2015

Zhang Hao

The OOP & refactor project weekly report 6

In this week I succeed in decomposing tbl_columns_definition.lib.php, and designed a structure for controller classes. Also, I have done some optimization on the GIS_Visualization.class.php. Now I am working to take logic-controlling codes out from table related scripts (tbl_*.php) to form table controllers.

Files Covered In This Week

  • tbl_columns_definition.lib.php (Decomposed)
  • GIS_Visualization.class.php
  • libraries/controllers

Outcomes In This Week

Decomposing tbl_columns_definition.lib.php
I have decomposed the PMA_getHtmlForColumnAttributes by taking its logic into a new template named “columns_definition/column_attributes”. In this template it handles the generation of $content_cells. Also, other functions that related to PMA_getHtmlForColumnAttributes was converted to templates.

Designing the Controller class
I’d like to introduce a general controller system for PMA, which was designed to handle most of logic in the program. The controller classes was designed with following structure:

Dependency Injection Container

The structure has multiple layers, in each layer it can provide some utility functions or variables that could be accessed in the lower layer. So far I created a Controller class as the base class for any other controllers and it provides $dbi and $response for general usages. And I’d like to create a $request object that helps handling $_REQUEST variable in the future of work.

Also, as the structure diagram shows, I’d like to have a dependency injection container in the future, but it’s likely to become too complex at this moment. So I’m considering whether we could have a better solution for dependency injection.

Last but not least, we should remember that the controllers should be put in libraries/controllers directory and PMA\Controllers namespace. I suggest that we should use namespaces and directories following PSR-4 rules in our future works.

The Problems We Are Facing

Test against the tbl_gis_visualization.php
Today I’ve converted the tbl_gis_visualization.php to the controller form I mentioned above. But I’m not so familiar with GIS data and I can’t find out how to test against the work. Any advice for that are welcomed.

Cleaning up messy structures
Some of codes in our code base is not so friendly :-(
We can see undefined variables (defined in somewhere we would never knows), codes that inline includes and $GLOBALS reference anywhere. We need a better way to clean up them, or it would slow down the refactor process.

A Template Helper
When I was working on I found that it was directly include in many places. But I couldn’t create template this script because there are too much logic handling codes in it. I think we can create a template helper class only holds static helper functions so that we can easily create template for such kind of scripts.

What Will I Do Next

In this week I will finish constructing Table controllers. A commit with some new controllers will be available soon.

by jasondaurus at June 23, 2015 06:07 PM

Madhura Jayaratne

phpMyAdmin work during thirty seventh week

This was a four day work week since I was on leave on Friday, 19th June.

The highlight of the week was the improvements to the Visual Query Builder. This included a number of bug fixes and improvements to the look and feel. VQB probably did not reach to the users very well, otherwise we should have got more bug reports relating to the issues fixed.

To the latter part of the week, I also engaged in fixing issues reported by Codacy (

* Code improvements
Various UI improvements to the visual query builder
Fix issues reported by Codacy

As usual I also engaged in regular bug fixes during the week. Highlight among the bugs fixed was  bug #4795. This requested phpMyAdmin to join two or more tables in Query Builder by using other tables that have not been included in the query. This was more of the feature request IMO.

Following are the bugs fixed and investigated during the week.

Bugs fixed
#4795 Query builder: missing joint for the intermediary table
#4955 Clicking on the navi logo does not always work (partial fix)
#4956 Trying to build query in visual builder throws JS error
#4958 Designer Javascript error with specially crafted table name
#4960 Table creation results in GET request with missing server parameter that invalidates the session
#4961 Javascript error when Designer is opened
#4962 insert by foreign key scrolls page to top
Visual builder: Generated query has extraneous comma at the end of group by clause
Visual builder: Add missing backquotes
Visual builder: Reset state variables on page teardown

Bugs investigated
#4959 Navigation pane mouseover oddity with specially crafted database/table names

by Madhura ( at June 23, 2015 07:02 AM

June 22, 2015

Deven Bansod

GSoC 2015 : Weekly Report #6 : RFE #342 & RFE#1060

Week #6 Task(s) completed:  RFE #342 : One file per table/ One file per Database while exporting a database/ server RFE #1060 : Designer settings like ‘Angular/ Direct Links’, ‘Snap to Grid’ etc. should be remembered Tasks worked upon: None Scheduled Deadline: 12th July Completed on: NA Details: 1. The RFE#342 suggests that we provide an option […]

by Deven Bansod at June 22, 2015 03:40 AM

June 21, 2015

Dan Ungureanu

Week 4

Unfortunately this week was slow and I did not get to do very much. Now, that I am done with school, I am going to have more time to work on phpMyAdmin.

Some of the things I did this week(end): added multiple contexts and implemented them into phpMyAdmin along with a mechanism which switches the context according to the version of the database server, edited the way keywords were handled, removed the tokens array from parser’s output (it was redundant), fixed tests, completely refactored routine methods.

My task for the upcoming week is to implement new features and fix bugs, but I’ll continue replacing calls to the old library as well.

To see my progress, you can check out my library repository or the pull request I submit for phpMyAdmin.

June 21, 2015 12:00 AM

June 15, 2015

Madhura Jayaratne

phpMyAdmin work during thirty sixth week

The highlight of the my work during the week is the general improvements work carried out. 'Query' page of the database level was improved during the week ( This included, introducing aliases and sort ordering. Additionally I worked on porting the Metro theme to the future 4.5.0 release (, so we will have an additional theme by the time new version is released.

* General improvements
Improvements to the QBE page
Porting Metro theme for future version 4.5
UI improvements to the print view and table operations page
Minor performance improvements in the navigation panel
Update sample config file

After 9 bug fix releases from the 4.4 branch, the rate at which the bugs are being reported has slowed down indicating that it's quite stable. However, on the other hand, a number of new issues could be observed mostly introduced by the ongoing GSoC work carried out targeting the 4.5 release. Following are the bugs fixed during the week. As mentioned earlier, most of them were fixed in QA_4_5 branch.

* Bugs fixed
#4510 QBE generates wrong query
#4946 When hide table structure actions is false, action should be in a row
#4947 Editing a view gives errors
#4950 Issues in database selection for replication
#4951 Trying to save chart as image crashes the browser
#4953 can't drag sql.gz file onto import input
#4954 Warnings on query results refresh
#4956 Trying to build query in visual builder throws JS error
Empty column list in display order drop down in table search
Fix notice on undefined variable 'col_extra'

Additionally, following issues were investigated.

* Bugs investigated
#4948 explain is broken in latest version
#4926 Browsing tables chokes on 30k tables in DB
#4959 Navigation pane mouseover oddity with specially crafted database/table names

by Madhura ( at June 15, 2015 10:35 AM

Deven Bansod

GSoC 2015 : Weekly Report #5 : RFE #1594 & RFE#1060

Week #5 Task(s) completed: RFE #1594 : More plain English config words Tasks worked upon: RFE #1060 : Designer settings like ‘Angular/ Direct Links’, ‘Snap to Grid’ etc. should be remembered Scheduled Deadline: 28th  June, 2015 Completed on: 12th June, 2015 Details: 1. We have config options for Default Tabs that the navigation links and icons link to. […]

by Deven Bansod at June 15, 2015 03:03 AM

June 14, 2015

Dan Ungureanu

Week 3

This week I started implementing the parsing library in phpMyAdmin. For now, my task is to implement the library and partially refactor code that is related to the old usage of the library.

So far, I replaced some of the helper functions that were defined in the old parser. I replaced PMA_SQP_isKeyword(), PMA_SQP_getAliasesFromQuery() and PMA_RTN_parseAllParameters(). The $PMA_SQPdata_forbidden_word array has been replaced to the array that holds all forbidden words from the Context class which and will benefit from multiple contexts when finished.

The library have seen some improvements as well: implemented some utilities (that replace old functions of the phpMyAdmin parser), changed tests’ format, has better parser for fields and data types, etc.

My task for the upcoming week is to finish replacing all calls to the old parsing library and remove it completely. This week, I have two last exams and as soon as I am done, I am going to have more free time to work on phpMyAdmin.

To see my progress, you can check out my library repository or the pull request I submit for phpMyAdmin.

June 14, 2015 12:00 AM

June 13, 2015

Zhang Hao

The OOP & refactor project weekly report 5

In this week I started the second phase of my work — OOPing table related scripts. I’d like to create a basic MVC structure for table related scripts. Before diving into the MVC structure, in this week I was decomposing tbl_*.lib.php for the convenience of the future work.

Files Covered In This Week

  • gis_data_editor.php
  • tbl_gis_visualization.php
  • GIS_Visualization.class.php
  • tbl_columns_definitions_form.lib.php
  • central_columns.lib.php
  • normalization.lib.php
  • Table.class.php
  • tbl_indexes.lib.php

Outcomes In This Week

The new GIS_Visualization class
First I found that the effect of the GIS_Visualization class is to convert raw data into diagrams and images. So I used Factory Pattern on it, and replace the constructor with a new private constructor. When we need to use this class, we can just use it in this way:

require_once 'libraries/gis/GIS_Visualization.class.php';
PMA_GIS_Visualization::get($sql_query, $options, $row, $pos, $data = null);

Notice: The $sql_query is the SQL using to fetch raw data from database, and the $row and $pos is the same as function PMA_GIS_modifyQuery($sql_query, $visualizationSettings, $rows = null, $pos = null) before. When we specify $data field in the constructor, other parameters except $options make no effect.

Some tbl_*.lib.php scripts decomposed
I am going to create a TableController to handle logic just I mentioned before, so I decomposed them and move these logics into corresponding tbl_*.php for convenience. Logic processing codes can be easily extracted from tbl_*.php when I started to create the TableController class with these logics represented as methods.

Somethings about the tbl_columns_definition_form.lib.php
Now there is only one functions PMA_getHtmlForColumnAttributes left in the tbl_columns_definition_form.lib.php. After I figure out ways to elimate it, I will create a new PR.

What Will I Do Next

Now I have almost finished decomposing tbl_*.lib.php scripts. In next few days I will create a TableController class for handling logic processing and communicate with the Table class to fetch data. The TableController class should available at June.18th.

by jasondaurus at June 13, 2015 07:47 AM

June 11, 2015

Michal Čihař

Improved social presence for Weblate

Up to recently, the only social presence for Weblate was my personal Twitter account. It's time to change that.

You can now follow news and information about Weblate on Twitter, Facebook or Google+.

Filed under: English phpMyAdmin SUSE Weblate | 0 comments

by Michal Čihař ( at June 11, 2015 10:00 AM

June 08, 2015

Deven Bansod

GSoC 2015 : Weekly Report #4 : RFE #701, #RFE1359 & RFE#726

Week #4 Task(s) completed: RFE #701 : Print View using CSS RFE #1359 : Ctrl Navigation in JS Grid Editor Tasks worked upon: RFE #726 : Batch change Column collations Scheduled Deadline: 21st  June, 2015 Completed on: 2nd June, 2015 Details: 1. The description about RFE #701 can be found here (my previous post) [0]. 2. The RFE#1359 mentions […]

by Deven Bansod at June 08, 2015 06:35 AM

Smita Kumari

GSoC'15 week 2: upgrade to cakephp 3.0

Week two of my GSoC project is over. So, this post is to list the accomplishment of week 2 and what I'll be working in week 3.
This week, I continued the last week work of upgrading error reporting server to use cakephp 3.0. This week, I upgraded report view page, sourceforge authentication, ticketing management and stats page. I also set up new Migrations plugin, for which all the "upgrade to cakephp 3.0" work started. Migrations plugin for cakephp 3.0 is having different directory structure and work flow than previous version so I needed to set it up from scratch. For existing system, we'll need to first create initial migration that create snapshot for existing database schema, and then other migrations for new changes can be run.
Only thing that is left is setting up phpUnit. Which I'll be doing in the 3rd week week in addition to improving performance of stats page. Also, right now related reports functionality is broken a bit so I'll fix that as well.
Before starting my 3rd week work, I think we should first try merge and setup new system on main server, just to be sure there's no other issues awaiting :-).

If you want to try out the upgraded system, You can clone/download source code from this branch. Here I'm listing quick steps,  which should help in setting up. I'm not sure this is complete list of steps needed so let me know If I'm missing something or you are having some issues setting up.

1. clone the repo
2. install mbstring (required for cake 3.0)
3. install intl extension: sudo apt-get install php5-intl //(required for cake 3.0)
4. cd application_root_dir (directory inside src, config etc directories resides)
5. mkdir tmp;
6. mkdir logs;
7. ......... set permissions for tmp and logs directory ...............
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
setfacl -R -m u:${HTTPDUSER}:rwx tmp
setfacl -R -d -m u:${HTTPDUSER}:rwx tmp
setfacl -R -m u:${HTTPDUSER}:rwx logs
setfacl -R -d -m u:${HTTPDUSER}:rwx logs

8. rename config/app_example.php to config/app.php.
9. rename config/oauth_example.php to config/oauth.php

10. Change database settings in config/app.php
11. update github and sourceforge credentials in config/oauth.php
......For existing systems: update and run migrations  .........
sudo bin/cake migrations mark_migrated 20150607191654
sudo bin/cake migrations migrate

............For new system: just run migration........
sudo bin/cake migrations migrate

by Smita Kumari ( at June 08, 2015 06:02 AM

June 07, 2015

Madhura Jayaratne

phpMyAdmin work during thirty fifth week

The bug fixes carried out during the week was mostly on the master branch and most of them were due to the ongoing developments by GSoC students. Additionally a couple of bugs on the stable branch reported by the users were fixed. Following are the bugs fixed during the week.

Bugs fixed
#4932 Drizzle version numbers
#4936 utf8mb4 fields show only ????s for 4-byte Unicode characters after import
#4937 Custom export with backquotes off is not working
#4939 Connection input field not hidden when adding a new table
#4940 Notices in GIS visualization page
#4941 Table structure multi submit is broken
#4942 Export to gzip saves plain text under Chrome

Moreover, following bugs were investigated

Bugs investigated
#4933 INSERT validation issues with MySQL functions
#4935 Eliminate remaining occurences of eval() in phpMyAdmin to make it work on machines where eval() is disabled

On the new features front, rfe #1634 was discussed during the last IRC meeting and received the green light to be implemented. This rfe requested not to group items in the navigation panel when there is only a single group and no other items or groups in a particular sub tree.

Bug #4934 reported the shift + click to apply selected function to all rows in insert/edit page was not functioning in some browsers. Since shift + click event was non standard on browsers we decided to remove the feature altogether. This was also carried out during the week.

Feature requests implemented
#1634 Don't group tables in tree if the result has only one group
#1677 Support spatial indexes in table create form
Remove support for Shift + Click on function name to apply to all rows in insert/edit page

During the latter part of the week, I engaged in analyzing the performance issues and fixing them. This was based on the profiling carried out earlier using xdebug. I attended to table browse, insert and edit pages since they showed highest performance deterioration competed to 3.x series.

General coding improvements
Fix coding styles violations reported by PHPCS
Performance improvements for table browse, insert and edit pages

by Madhura ( at June 07, 2015 05:53 PM

Dan Ungureanu

Week 2

Today is the last day of the second week of Google Summer of Code. My task for this week was to continue working on the parser and the analyzer. Since last week, I got to rewrite a few parts of the library that required improvements, wrote unit tests that account for more than 90% of the code, wrote more explicit documentation, made sure that my code follows the PSR-2 standard, implemented new statement types (CREATE FUNCTION, RENAME, REPLACE, etc).

For the next two weeks, I planned to make use of the library I wrote during the past weeks in phpMyAdmin and refactor the code that uses it.

If you want to check out the code I wrote during the past weeks, you can find it in its repository here.

NOTE: The last commit is still “Initial commit” because I amended my last commit and did a force push.

June 07, 2015 12:00 AM

June 04, 2015

Michal Čihař

python-gammu 2.3

New version of python-gammu has been released yesterday.

The most important change is that it changes license to GNU GPL version 2 or later. This is only cosmetic change and mostly affects only Python code as the C side can not really be changed due to Gammu license.

Full list of changes:

  • License changed tp GPL version 2 or later.
  • Documentation improvements.

Filed under: English Gammu python-gammu Wammu | 0 comments

by Michal Čihař ( at June 04, 2015 10:00 AM