Hello,
I'm sending my changes for synchronization GUI. Changelog: *Fixed bug with different port than 3306 *Fixed support for other server than localhost *Added support for sockets *Fixed GUI bugs - strings (localization), table, fieldset... *new PNG transparent icon.16x16
Remains: *Add support for current PMA server - to be able to choose from available databases
I still have to make some changes in backend, so it can work with replication.
Tomas
Marc Delisle wrote:
zahranaeem@users.sourceforge.net a écrit :
Revision: 12877 http://phpmyadmin.svn.sourceforge.net/phpmyadmin/?rev=12877&view=rev Author: zahranaeem Date: 2009-08-24 17:23:14 +0000 (Mon, 24 Aug 2009)
Log Message:
Removed spaces that were used to align text boxes in the form.
Modified Paths:
trunk/phpMyAdmin/server_synchronize.php
Modified: trunk/phpMyAdmin/server_synchronize.php
--- trunk/phpMyAdmin/server_synchronize.php 2009-08-24 17:00:31 UTC (rev 12876) +++ trunk/phpMyAdmin/server_synchronize.php 2009-08-24 17:23:14 UTC (rev 12877) @@ -68,7 +68,7 @@ */ echo '<div class="error">' . "\n" ; if(!$src_connection) {
echo "Could not connect to the source</br>";
echo "Could not connect to the source<br/>"; } if(!$trg_connection){ echo "Could not connect to the target";
Hello Zahra, These messages are not extracted to message files?
Index: lang/english-utf-8.inc.php =================================================================== --- lang/english-utf-8.inc.php (revision 12874) +++ lang/english-utf-8.inc.php (working copy) @@ -1560,4 +1560,10 @@ $strZeroRemovesTheLimit = 'Note: Setting these options to 0 (zero) removes the limit.'; $strZip = '"zipped"';
+// TOMS - sync +$strPort = 'Port'; +$strSocket = 'Socket'; +$strCouldNotConnectSource = 'Could not connect to the source'; +$strCouldNotConnectTarget = 'Could not connect to the target'; +$strDatabaseNotExisting = ''%s' database does not exist.'; ?> Index: themes/original/img/s_sync.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: server_synchronize.php =================================================================== --- server_synchronize.php (revision 12874) +++ server_synchronize.php (working copy) @@ -47,31 +47,44 @@ */
if ((isset($_REQUEST['submit_connect']))) { - $src_host = $_REQUEST['src_host']; - $src_username = $_REQUEST['src_username']; - $src_password = $_REQUEST['src_pass']; - $src_port = $_REQUEST['src_port']; - $src_db = $_REQUEST['src_db']; - $src_connection = @mysql_connect($src_host, $src_username, $src_password); + $cons = array ("src", "trg"); + foreach ($cons as $con) { + ${"{$con}_host"} = $_REQUEST[$con.'_host']; + ${"{$con}_username"} = $_REQUEST[$con.'_username']; + ${"{$con}_password"} = $_REQUEST[$con.'_pass']; + ${"{$con}_port"} = $_REQUEST[$con.'_port']; + ${"{$con}_socket"} = $_REQUEST[$con.'_socket']; + ${"{$con}_db"} = $_REQUEST[$con.'_db']; + ${"{$con}_url"} = ''; + + if (isset(${"{$con}_socket"}) && !empty(${"{$con}_socket"})) { + ${"{$con}_url"} = ':'.${"{$con}_socket"}; + ${"{$con}_server"}['socket'] = ${"{$con}_socket"}; + } else { + ${"{$con}_url"} = ${"{$con}_host"}; + ${"{$con}_server"}['host'] = ${"{$con}_host"}; + if (isset(${"{$con}_port"}) && !empty(${"{$con}_port"}) && ((int)${"{$con}_port"}*1)>0) { + ${"{$con}_url"} .= ':' . ${"{$con}_port"}; + ${"{$con}_server"}['port'] = ${"{$con}_port"}; + } + } + + ${"{$con}_connection"} = @mysql_connect(${"{$con}_url"}, ${"{$con}_username"}, ${"{$con}_password"}); + } + unset ($con, $cons);
- $trg_host = $_REQUEST['trg_host']; - $trg_username = $_REQUEST['trg_username']; - $trg_password = $_REQUEST['trg_pass']; - $trg_port = $_REQUEST['trg_port']; - $trg_db = $_REQUEST['trg_db']; - $trg_connection = @mysql_connect($trg_host, $trg_username, $trg_password); - if (!($src_connection) || !($trg_connection)) { /** * Displays the connection error string if * connections are not established */ + echo '<div class="error">' . "\n" ; if(!$src_connection) { - echo "Could not connect to the source</br>"; + echo $GLOBALS['strCouldNotConnectSource'].'<br />'; } if(!$trg_connection){ - echo "Could not connect to the target"; + echo $GLOBALS['strCouldNotConnectTarget']; } echo '</div>'; unset($_REQUEST['submit_connect']); @@ -81,22 +94,22 @@ * Creating the link object for both source and target databases and * selecting the source and target databases using these links */ - $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false); - $src_db_selected = PMA_DBI_select_db($src_db, $src_link); + $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false, $src_server); + $src_connection = PMA_DBI_select_db($src_db, $src_link); + + $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false, $trg_server); + $trg_connection = PMA_DBI_select_db($trg_db, $trg_link);
- $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false); - $trg_db_selected = PMA_DBI_select_db($trg_db, $trg_link); - if (($src_db_selected != 1) || ($trg_db_selected != 1)) { /** * Displays error string if the database(s) did not exist */ - echo '<div class="error">' . "\n" ; + echo '<div class="error">' . "\n" ; if ($src_db_selected != 1) { - echo "'".$src_db."' database does not exists</br>"; + echo sprintf($GLOBALS['strDatabaseNotExisting'], $src_db); } if ($trg_db_selected != 1) { - echo "'".$trg_db."' database does not exists</br>"; + echo sprintf($GLOBALS['strDatabaseNotExisting'], $trg_db); } echo '</div>'; unset($_REQUEST['submit_connect']); @@ -203,6 +216,8 @@ $_SESSION['src_password'] = $src_password; $_SESSION['trg_password'] = $trg_password; $_SESSION['trg_password'] = $trg_password; + $_SESSION['src_server'] = $src_server; + $_SESSION['trg_server'] = $trg_server; $_SESSION['matching_tables_keys'] = $matching_tables_keys; $_SESSION['uncommon_tables_fields'] = $uncommon_tables_fields; $_SESSION['uncommon_tables_row_count'] = $row_count; @@ -493,6 +508,8 @@ $trg_username = $_SESSION['trg_username']; $src_password = $_SESSION['src_password']; $trg_password = $_SESSION['trg_password']; + $src_server = $_SESSION['src_server']; + $trg_server = $_SESSION['trg_server']; $uncommon_tables = $_SESSION['uncommon_tables']; $matching_tables = $_SESSION['matching_tables']; $matching_tables_keys = $_SESSION['matching_tables_keys']; @@ -520,8 +537,8 @@ /** * Creating link object for source and target databases */ - $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false); - $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false); + $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false, $src_server); + $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false, $trg_server);
/** * Initializing arrays to save the table ids whose data and structure difference is to be applied @@ -1177,56 +1194,76 @@
echo '<div id="serverstatus"> <form name="connection_form" id="connection_form" method="POST" action="server_synchronize.php" - onsubmit="return validateConnection(connection_form,this)">' + >' // TODO: add check if all var. are filled in . PMA_generate_common_hidden_inputs('', ''); + echo '<fieldset>'."\n"; + echo '<legend>Synchronization</legend>'."\n"; /** * Displays the form for source server */ echo '<table id="serverstatustraffic" class="data" > <tr> - <th>Source Database</th> + <th colspan="2">Source Database</th> </tr> <tr class="odd"> - <td>Host: <input type="text" name="src_host"></td> + <td>'. $GLOBALS['strHost']. '</td> + <td><input type="text" name="src_host" /></td> </tr> <tr class="even"> - <td>Username: <input type="text" name="src_username"/></td> + <td>'. $GLOBALS['strPort']. '</td> + <td><input type="text" name="src_port" value="3306" maxlength="5" size="5" /></td> </tr> <tr class="odd"> - <td>Password: <input type="password" name="src_pass" /> </td> + <td>'. $GLOBALS['strSocket']. '</td> + <td><input type="text" name="src_socket" /></td> </tr> <tr class="even"> - <td>Port: <input type="text" name="src_port" value="3306"></td> + <td>'. $GLOBALS['strUserName']. '</td> + <td><input type="text" name="src_username" /></td> </tr> <tr class="odd"> - <td>Database: <input type="text" name="src_db"></td> + <td>'. $GLOBALS['strPassword']. '</td> + <td><input type="password" name="src_pass" /> </td> </tr> + <tr class="even"> + <td>'. $GLOBALS['strDatabase']. '</td> + <td><input type="text" name="src_db" /></td> + </tr> </table>';
/** * Displays the form for target server */ - echo '<table id="serverstatusconnection" class="data"> + echo '<table id="serverstatusconnection" class="data"> <tr> - <th>Target Database</th> + <th colspan="2">Target Database</th> </tr> <tr class="odd"> - <td>Host: <input type="text" name="trg_host"></td> + <td>'. $GLOBALS['strHost']. '</td> + <td><input type="text" name="trg_host" /></td> </tr> <tr class="even"> - <td>Username: <input type="text" name="trg_username"></td> + <td>'. $GLOBALS['strPort']. '</td> + <td><input type="text" name="trg_port" value="3306" maxlength="5" size="5" /></td> </tr> <tr class="odd"> - <td>Password: <input type="password" name="trg_pass"></td> + <td>'. $GLOBALS['strSocket']. '</td> + <td><input type="text" name="trg_socket" /></td> </tr> <tr class="even"> - <td>Port: <input type="text" name="trg_port" value="3306"></td> + <td>'. $GLOBALS['strUserName']. '</td> + <td><input type="text" name="trg_username" /></td> </tr> <tr class="odd"> - <td>Database: <input type="text" name="trg_db"></td> + <td>'. $GLOBALS['strPassword']. '</td> + <td><input type="password" name="trg_pass" /></td> </tr> + <tr class="even"> + <td>'. $GLOBALS['strDatabase']. '</td> + <td><input type="text" name="trg_db" /></td> + </tr> </table> - + </fieldset> <fieldset class="tblFooters"> <input type="submit" name="submit_connect" value="' .$GLOBALS['strGo'] .'" id="buttonGo" /> </fieldset> Index: libraries/dbi/mysqli.dbi.lib.php =================================================================== --- libraries/dbi/mysqli.dbi.lib.php (revision 12874) +++ libraries/dbi/mysqli.dbi.lib.php (working copy) @@ -54,23 +54,38 @@ * @param string $user mysql user name * @param string $password mysql user password * @param boolean $is_controluser + * @param array $server host/port/socket * @return mixed false on error or a mysqli object on success */ -function PMA_DBI_connect($user, $password, $is_controluser = false) +function PMA_DBI_connect($user, $password, $is_controluser = false, $server = null) { - $server_port = (empty($GLOBALS['cfg']['Server']['port'])) - ? false - : (int) $GLOBALS['cfg']['Server']['port']; + if ($server) { + $server_port = (empty($server['port'])) + ? '' + : (int)$server['port']; + $server_socket = (empty($server['socket'])) + ? '' + : $server['socket']; + $server['host'] = (empty($server['host'])) + ? 'localhost' + : $server['host']; + } else { + $server_port = (empty($GLOBALS['cfg']['Server']['port'])) + ? false + : (int) $GLOBALS['cfg']['Server']['port']; + $server_socket = (empty($GLOBALS['cfg']['Server']['socket'])) + ? null + : $GLOBALS['cfg']['Server']['socket']; + }
+ if (strtolower($GLOBALS['cfg']['Server']['connect_type']) == 'tcp') { $GLOBALS['cfg']['Server']['socket'] = ''; }
// NULL enables connection to the default socket - $server_socket = (empty($GLOBALS['cfg']['Server']['socket'])) - ? null - : $GLOBALS['cfg']['Server']['socket'];
+ $link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true); @@ -86,21 +101,25 @@ if ($GLOBALS['cfg']['Server']['ssl'] && defined('MYSQLI_CLIENT_SSL')) { $client_flags |= MYSQLI_CLIENT_SSL; } + + if (!$server) { + $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, $password, false, $server_port, $server_socket, $client_flags);
- $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, $password, false, $server_port, $server_socket, $client_flags); - - // Retry with empty password if we're allowed to - if ($return_value == false && isset($cfg['Server']['nopassword']) && $cfg['Server']['nopassword'] && !$is_controluser) { - $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, '', false, $server_port, $server_socket, $client_flags); + // Retry with empty password if we're allowed to + if ($return_value == false && isset($cfg['Server']['nopassword']) && $cfg['Server']['nopassword'] && !$is_controluser) { + $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, '', false, $server_port, $server_socket, $client_flags); + } + } else { + $return_value = @mysqli_real_connect($link, $server['host'], $user, $password, false, $server_port, $server_socket); }
if ($return_value == false) { - if ($is_controluser) { - trigger_error($GLOBALS['strControluserFailed'], E_USER_WARNING); - return false; - } - PMA_log_user($user, 'mysql-denied'); - PMA_auth_fails(); + if ($is_controluser) { + trigger_error($GLOBALS['strControluserFailed'], E_USER_WARNING); + return false; + } + PMA_log_user($user, 'mysql-denied'); + PMA_auth_fails(); } // end if
PMA_DBI_postConnect($link, $is_controluser); Index: libraries/dbi/mysql.dbi.lib.php =================================================================== --- libraries/dbi/mysql.dbi.lib.php (revision 12874) +++ libraries/dbi/mysql.dbi.lib.php (working copy) @@ -21,18 +21,18 @@ unset($client_api); }
-function PMA_DBI_real_connect($server, $user, $password, $client_flags) +function PMA_DBI_real_connect($server, $user, $password, $client_flags, $persistant=false) { global $cfg;
if (empty($client_flags)) { - if ($cfg['PersistentConnections']) { + if ($cfg['PersistentConnections'] || $persistant) { $link = @mysql_pconnect($server, $user, $password); } else { $link = @mysql_connect($server, $user, $password); } } else { - if ($cfg['PersistentConnections']) { + if ($cfg['PersistentConnections'] || $persistant) { $link = @mysql_pconnect($server, $user, $password, $client_flags); } else { $link = @mysql_connect($server, $user, $password, false, $client_flags); @@ -41,23 +41,40 @@
return $link; } - -function PMA_DBI_connect($user, $password, $is_controluser = false) +/** + * @param string $user mysql user name + * @param string $password mysql user password + * @param boolean $is_controluser + * @param array $server host/port/socket/persistant + * @return mixed false on error or a mysqli object on success + */ +function PMA_DBI_connect($user, $password, $is_controluser = false, $server = null) { global $cfg, $php_errormsg; - - $server_port = (empty($cfg['Server']['port'])) + + if ($server) { + $server_port = (empty($server['port'])) ? '' - : ':' . $cfg['Server']['port']; + : ':' . (int)$server['port']; + $server_socket = (empty($server['socket'])) + ? '' + : ':' . $server['socket']; + $server_persistant = (empty($server['persistant'])) + ? false + : true; + } else { + $server_port = (empty($cfg['Server']['port'])) + ? '' + : ':' . (int)$cfg['Server']['port']; + $server_socket = (empty($cfg['Server']['socket'])) + ? '' + : ':' . $cfg['Server']['socket']; + }
if (strtolower($cfg['Server']['connect_type']) == 'tcp') { $cfg['Server']['socket'] = ''; }
- $server_socket = (empty($cfg['Server']['socket'])) - ? '' - : ':' . $cfg['Server']['socket']; - $client_flags = 0;
// always use CLIENT_LOCAL_FILES as defined in mysql_com.h @@ -74,14 +91,20 @@ if (defined('MYSQL_CLIENT_SSL') && $cfg['Server']['ssl']) { $client_flags |= MYSQL_CLIENT_SSL; } + + if (!$server) { + $link = PMA_DBI_real_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, empty($client_flags) ? NULL : $client_flags);
- $link = PMA_DBI_real_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, empty($client_flags) ? NULL : $client_flags); - - // Retry with empty password if we're allowed to - if (empty($link) && $cfg['Server']['nopassword'] && !$is_controluser) { - $link = PMA_DBI_real_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, '', empty($client_flags) ? NULL : $client_flags); + // Retry with empty password if we're allowed to + if (empty($link) && $cfg['Server']['nopassword'] && !$is_controluser) { + $link = PMA_DBI_real_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, '', empty($client_flags) ? NULL : $client_flags); + } + } else { + if (!isset($server['host'])) + $link = PMA_DBI_real_connect($server_socket, $user, $password, NULL, $server_persistant); + else + $link = PMA_DBI_real_connect($server['host'] . $server_port . $server_socket, $user, $password, NULL, $server_persistant); } - if (empty($link)) { if ($is_controluser) { trigger_error($GLOBALS['strControluserFailed'], E_USER_WARNING); @@ -90,9 +113,9 @@ PMA_log_user($user, 'mysql-denied'); PMA_auth_fails(); } // end if + if (!$server) + PMA_DBI_postConnect($link, $is_controluser);
- PMA_DBI_postConnect($link, $is_controluser); - return $link; }
@@ -173,7 +196,6 @@ } $_SESSION['debug']['queries'][$hash]['trace'][] = $trace; } - if($r != FALSE and PMA_Tracker::isActive() == TRUE ) PMA_Tracker::handleQuery($query);
Tomas Srnka a écrit :
Hello,
I'm sending my changes for synchronization GUI. Changelog: *Fixed bug with different port than 3306 *Fixed support for other server than localhost *Added support for sockets *Fixed GUI bugs - strings (localization), table, fieldset... *new PNG transparent icon.16x16
Remains: *Add support for current PMA server - to be able to choose from available databases
I still have to make some changes in backend, so it can work with replication.
Tomas
Hello Tomas, you are sending these changes to the devel list, because you want use to look at them before merging? If so, please next time open an artifact on the Patches tracker.
If the goal is not that you want some review, you could merge these changes to trunk directly, now that Zahra'a code is in trunk.
Hello,
I sent them here, because I did not know, that I can commit to trunk directly and I did not wanted to open "Patch" on SF.
Tomas
Marc Delisle wrote:
Tomas Srnka a écrit :
Hello,
I'm sending my changes for synchronization GUI. Changelog: *Fixed bug with different port than 3306 *Fixed support for other server than localhost *Added support for sockets *Fixed GUI bugs - strings (localization), table, fieldset... *new PNG transparent icon.16x16
Remains: *Add support for current PMA server - to be able to choose from available databases
I still have to make some changes in backend, so it can work with replication.
Tomas
Hello Tomas, you are sending these changes to the devel list, because you want use to look at them before merging? If so, please next time open an artifact on the Patches tracker.
If the goal is not that you want some review, you could merge these changes to trunk directly, now that Zahra'a code is in trunk.
Tomas Srnka a écrit :
Hello,
I sent them here, because I did not know, that I can commit to trunk directly and I did not wanted to open "Patch" on SF.
Yes you can. Please don't forget to add any new image to the darkblue_orange theme.