diff --git a/db_designer.php b/db_designer.php index f776cad9f4..79eb6b3732 100644 --- a/db_designer.php +++ b/db_designer.php @@ -93,13 +93,41 @@ if (isset($_REQUEST['operation'])) { && ! empty($cfgDesigner['table']) && $GLOBALS['cfgRelation']['designer_settingswork'] ) { - $query = 'INSERT INTO ' . PMA_Util::backquote($cfgDesigner['db']) - . '.' . PMA_Util::backquote($cfgDesigner['table']) - . ' VALUES("' . $cfgDesigner['user'] . '", "' - . $_REQUEST['index'] . '", "' . $_REQUEST['value'] . '") ON DUPLICATE KEY ' - . 'UPDATE `stored_value` = "' . $_REQUEST['value'] . '";'; + $orig_data_query = 'SELECT ' . PMA_Util::backquote('settings_data') + . ' FROM `' . $cfgDesigner['db'] . '`.`' . $cfgDesigner['table'] . '` WHERE ' + . PMA_Util::backquote('username') . ' = "' + . $cfgDesigner['user'] . '"'; + + $orig_data = $GLOBALS['dbi']->fetchSingleRow($orig_data_query); + + $success = false; + + if (isset($orig_data) + && ! empty($orig_data) + && $orig_data + ) { + $orig_data = json_decode($orig_data['settings_data'], true); + $orig_data[$_REQUEST['index']] = $_REQUEST['value']; + $orig_data = json_encode($orig_data); + + $save_query = 'UPDATE `' . $cfgDesigner['db'] . '`.`' + . $cfgDesigner['table'] . '` SET ' + . PMA_Util::backquote('settings_data') . ' = \'' + . $orig_data . '\' WHERE ' . PMA_Util::backquote('username') . ' = "' + . $cfgDesigner['user'] . '";'; + + $success = $GLOBALS['dbi']->query($save_query); + } else { + $save_data = array($_REQUEST['index'] => $_REQUEST['value']); + + $query = 'INSERT INTO ' . PMA_Util::backquote($cfgDesigner['db']) + . '.' . PMA_Util::backquote($cfgDesigner['table']) + . ' VALUES("' . PMA_Util::sqlAddSlashes($cfgDesigner['user']) . '", \'' + . PMA_Util::sqlAddSlashes(json_encode($save_data)) . '\');'; + + $success = $GLOBALS['dbi']->query($query); + } - $success = $GLOBALS['dbi']->query($query); $response->isSuccess($success); } } diff --git a/libraries/db_designer.lib.php b/libraries/db_designer.lib.php index 8b20b12542..00ac50f48c 100644 --- a/libraries/db_designer.lib.php +++ b/libraries/db_designer.lib.php @@ -185,61 +185,15 @@ function PMA_getSideMenuParamsArray() $cfgRelation = PMA_getRelationsParam(); if ($GLOBALS['cfgRelation']['designer_settingswork']) { - // angular_direct - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "angular_direct"'; + + $query = 'SELECT `settings_data` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' + . PMA_Util::backquote($cfgRelation['designer_settings']) + . ' WHERE ' . PMA_Util::backquote('username') . ' = "' + . $GLOBALS['cfg']['Server']['user'] . '";'; $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['angular_direct'] = $result['stored_value']; - // snap_to_grid - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "snap_to_grid"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['snap_to_grid'] = $result['stored_value']; - - // small_big_all - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "small_big_all"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['small_big_all'] = $result['stored_value']; - - // relation_lines - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "relation_lines"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['relation_lines'] = $result['stored_value']; - - // full_screen - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "full_screen"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['full_screen'] = $result['stored_value']; - - // side_menu - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "side_menu"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['side_menu'] = $result['stored_value']; - - // pin_text - $query = 'SELECT `stored_value` FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' - . PMA_Util::backquote($cfgRelation['designer_settings']) . ' WHERE ' . PMA_Util::backquote('username') . ' = "' - . $GLOBALS['cfg']['Server']['user'] . '" AND ' . PMA_Util::backquote('setting') . ' = "pin_text"'; - - $result = $GLOBALS['dbi']->fetchSingleRow($query); - $params['pin_text'] = $result['stored_value']; + $params = json_decode($result['settings_data'], true); } return $params; diff --git a/sql/create_tables.sql b/sql/create_tables.sql index 5b55d1e5d7..c24981046e 100644 --- a/sql/create_tables.sql +++ b/sql/create_tables.sql @@ -330,9 +330,8 @@ CREATE TABLE IF NOT EXISTS `pma__central_columns` ( CREATE TABLE IF NOT EXISTS `pma__designer_settings` ( `username` varchar(64) NOT NULL, - `setting` varchar(64) NOT NULL, - `stored_value` varchar(64) NOT NULL, - PRIMARY KEY (`username`,`setting`) + `settings_data` text NOT NULL, + PRIMARY KEY (`username`) ) COMMENT='Settings related to Designer' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/sql/create_tables_drizzle.sql b/sql/create_tables_drizzle.sql index e0c8342b76..707d047354 100644 --- a/sql/create_tables_drizzle.sql +++ b/sql/create_tables_drizzle.sql @@ -282,9 +282,8 @@ CREATE TABLE IF NOT EXISTS `pma__savedsearches` ( CREATE TABLE IF NOT EXISTS `pma__designer_settings` ( `username` varchar(64) NOT NULL, - `setting` varchar(64) NOT NULL, - `stored_value` varchar(64) NOT NULL, - PRIMARY KEY (`username`,`setting`) + `settings_data` text NOT NULL, + PRIMARY KEY (`username`) ) COMMENT='Settings related to Designer' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;