[auth] Add custom port configuration in signon
[phpmyadmin/madhuracj.git] / server_synchronize.php
blob824d38f29b4d527307911d5f5c82251d4f8782a4
1 <?php
3 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 /**
6 * @version $Id$
7 * @package phpMyAdmin
8 */
10 /**
13 require_once './libraries/common.inc.php';
15 /**
16 * Does the common work
17 */
18 $GLOBALS['js_include'][] = 'functions.js';
19 $GLOBALS['js_include'][] = 'mootools.js';
20 require_once './libraries/server_common.inc.php';
22 /**
23 * Contains all the functions specific to synchronization
25 require './libraries/server_synchronize.lib.php';
27 /**
28 * Increases the time limit up to the configured maximum
30 @set_time_limit($cfg['ExecTimeLimit']);
32 /**
33 * Displays the links
35 require './libraries/server_links.inc.php';
37 /**
38 * Enables warnings on the page
40 //$cfg['Error_Handler']['display'] = true;
41 //$cfg['Error_Handler']['gather'] = true;
43 /**
44 * Save the value of token generated for this page
46 if (isset($_REQUEST['token'])) {
47 $_SESSION['token'] = $_REQUEST['token'];
50 // variable for code saving
51 $cons = array ("src", "trg");
53 /**
54 * Displays the page when 'Go' is pressed
57 if ((isset($_REQUEST['submit_connect']))) {
58 foreach ($cons as $con) {
59 ${"{$con}_host"} = $_REQUEST[$con.'_host'];
60 ${"{$con}_username"} = $_REQUEST[$con.'_username'];
61 ${"{$con}_password"} = $_REQUEST[$con.'_pass'];
62 ${"{$con}_port"} = $_REQUEST[$con.'_port'];
63 ${"{$con}_socket"} = $_REQUEST[$con.'_socket'];
64 ${"{$con}_db"} = $_REQUEST[$con.'_db'];
65 ${"{$con}_type"} = $_REQUEST[$con.'_type'];
67 if (${"{$con}_type"} == 'cur') {
68 ${"{$con}_connection"} = null;
69 ${"{$con}_server"} = null;
70 ${"{$con}_db"} = $_REQUEST[$con.'_db_sel'];
71 continue;
74 if (isset(${"{$con}_socket"}) && ! empty(${"{$con}_socket"})) {
75 ${"{$con}_server"}['socket'] = ${"{$con}_socket"};
76 } else {
77 ${"{$con}_server"}['host'] = ${"{$con}_host"};
78 if (isset(${"{$con}_port"}) && ! empty(${"{$con}_port"}) && ((int)${"{$con}_port"} * 1) > 0) {
79 ${"{$con}_server"}['port'] = ${"{$con}_port"};
83 ${"{$con}_connection"} = PMA_DBI_connect(${"{$con}_username"}, ${"{$con}_password"}, $is_controluser = false, ${"{$con}_server"});
84 } // end foreach ($cons as $con)
86 if ((! $src_connection && $src_type=='rmt') || (! $trg_connection && $trg_type=='rmt')) {
87 /**
88 * Displays the connection error string if
89 * connections are not established
92 echo '<div class="error">' . "\n" ;
93 if(! $src_connection) {
94 echo $GLOBALS['strCouldNotConnectSource'].'<br />';
96 if(! $trg_connection){
97 echo $GLOBALS['strCouldNotConnectTarget'];
99 echo '</div>';
100 unset($_REQUEST['submit_connect']);
102 } else {
104 * Creating the link object for both source and target databases and
105 * selecting the source and target databases using these links
107 foreach ($cons as $con) {
108 if (${"{$con}_connection"} != null) {
109 ${"{$con}_link"} = PMA_DBI_connect(${"{$con}_username"}, ${"{$con}_password"}, $is_controluser = false, ${"{$con}_server"});
110 } else {
111 ${"{$con}_link"} = null;
113 ${"{$con}_db_selected"} = PMA_DBI_select_db(${"{$con}_db"}, ${"{$con}_link"});
114 } // end foreach ($cons as $con)
116 if (($src_db_selected != 1) || ($trg_db_selected != 1)) {
118 * Displays error string if the database(s) did not exist
120 echo '<div class="error">' . "\n" ;
121 if ($src_db_selected != 1) {
122 echo sprintf($GLOBALS['strDatabaseNotExisting'], $src_db);
124 if ($trg_db_selected != 1) {
125 echo sprintf($GLOBALS['strDatabaseNotExisting'], $trg_db);
127 echo '</div>';
128 unset($_REQUEST['submit_connect']);
130 } else if (($src_db_selected == 1) && ($trg_db_selected == 1)) {
133 * Using PMA_DBI_get_tables() to get all the tables
134 * from target and source databases.
136 $src_tables = PMA_DBI_get_tables($src_db, $src_link);
137 $source_tables_num = sizeof($src_tables);
139 $trg_tables = PMA_DBI_get_tables($trg_db, $trg_link);
140 $target_tables_num = sizeof($trg_tables);
143 * initializing arrays to save matching and non-matching
144 * table names from target and source databases.
146 $unmatched_num_src = 0;
147 $source_tables_uncommon = array();
148 $unmatched_num_trg = 0;
149 $target_tables_uncommon = array();
150 $matching_tables = array();
151 $matching_tables_num = 0;
154 * Using PMA_getMatchingTables to find which of the tables' names match
155 * in target and source database.
157 PMA_getMatchingTables($trg_tables, $src_tables, $matching_tables, $source_tables_uncommon);
159 * Finding the uncommon tables for the target database
160 * using function PMA_getNonMatchingTargetTables()
162 PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, $target_tables_uncommon);
165 * Initializing several arrays to save the data and structure
166 * difference between the source and target databases.
168 $row_count = array(); //number of rows in source table that needs to be created in target database
169 $fields_num = array(); //number of fields in each matching table
170 $delete_array = array(); //stores the primary key values for target tables that have excessive rows than corresponding source tables.
171 $insert_array = array(array(array()));// stores the primary key values for the rows in each source table that are not present in target tables.
172 $update_array = array(array(array())); //stores the primary key values, name of field to be updated, value of the field to be updated for
173 // each row of matching table.
174 $matching_tables_fields = array(); //contains the fields' names for each matching table
175 $matching_tables_keys = array(); //contains the primary keys' names for each matching table
176 $uncommon_tables_fields = array(); //coantains the fields for all the source tables that are not present in target
177 $matching_tables_num = sizeof($matching_tables);
179 $source_columns = array(); //contains the full columns' information for all the source tables' columns
180 $target_columns = array(); //contains the full columns' information for all the target tables' columns
181 $uncommon_columns = array(); //contains names of columns present in source table but absent from the corresponding target table
182 $source_indexes = array(); //contains indexes on all the source tables
183 $target_indexes = array(); //contains indexes on all the target tables
184 $add_indexes_array = array(); //contains the indexes name present in source but absent from target tables
185 $target_tables_keys = array(); //contains the keys of all the target tables
186 $alter_indexes_array = array(); //contains the names of all the indexes for each table that need to be altered in target database
187 $remove_indexes_array = array(); //contains the names of indexes that are excessive in target tables
188 $alter_str_array = array(array()); //contains the criteria for each column that needs to be altered in target tables
189 $add_column_array = array(array()); //contains the name of columns that need to be added in target tables
191 * The criteria array contains all the criteria against which columns are compared for differences.
193 $criteria = array('Field', 'Type', 'Null', 'Collation', 'Key', 'Default', 'Comment');
195 for($i = 0; $i < sizeof($matching_tables); $i++) {
197 * Finding out all the differences structure, data and index diff for all the matching tables only
199 PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $matching_tables_fields, $update_array, $insert_array,
200 $delete_array, $fields_num, $i, $matching_tables_keys);
202 PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns,
203 $target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $target_tables_keys, $i);
205 PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes,
206 $add_indexes_array, $alter_indexes_array,$remove_indexes_array, $i);
209 for($j = 0; $j < sizeof($source_tables_uncommon); $j++) {
211 * Finding out the number of rows to be added in tables that need to be added in target database
213 PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_link, $j, $row_count);
216 * Storing all arrays in session for use when page is reloaded for each button press
218 $_SESSION['matching_tables'] = $matching_tables;
219 $_SESSION['update_array'] = $update_array;
220 $_SESSION['insert_array'] = $insert_array;
221 $_SESSION['src_db'] = $src_db;
222 $_SESSION['trg_db'] = $trg_db;
223 $_SESSION['matching_fields'] = $matching_tables_fields;
224 $_SESSION['src_uncommon_tables'] = $source_tables_uncommon;
225 $_SESSION['src_username'] = $src_username ;
226 $_SESSION['trg_username'] = $trg_username;
227 $_SESSION['src_password'] = $src_password;
228 $_SESSION['trg_password'] = $trg_password;
229 $_SESSION['trg_password'] = $trg_password;
230 $_SESSION['src_server'] = $src_server;
231 $_SESSION['trg_server'] = $trg_server;
232 $_SESSION['src_type'] = $src_type;
233 $_SESSION['trg_type'] = $trg_type;
234 $_SESSION['matching_tables_keys'] = $matching_tables_keys;
235 $_SESSION['uncommon_tables_fields'] = $uncommon_tables_fields;
236 $_SESSION['uncommon_tables_row_count'] = $row_count;
237 $_SESSION['target_tables_uncommon'] = $target_tables_uncommon;
238 $_SESSION['uncommon_tables'] = $source_tables_uncommon;
239 $_SESSION['delete_array'] = $delete_array;
240 $_SESSION['uncommon_columns'] = $uncommon_columns;
241 $_SESSION['source_columns'] = $source_columns;
242 $_SESSION['alter_str_array'] = $alter_str_array;
243 $_SESSION['target_tables_keys'] = $target_tables_keys;
244 $_SESSION['add_column_array'] = $add_column_array;
245 $_SESSION['criteria'] = $criteria;
246 $_SESSION['target_tables'] = $trg_tables;
247 $_SESSION['add_indexes_array'] = $add_indexes_array;
248 $_SESSION['alter_indexes_array'] = $alter_indexes_array;
249 $_SESSION['remove_indexes_array'] = $remove_indexes_array;
250 $_SESSION['source_indexes'] = $source_indexes;
251 $_SESSION['target_indexes'] = $target_indexes;
254 * Displays the sub-heading and icons showing Structure Synchronization and Data Synchronization
256 echo '<form name="synchronize_form" id="synchronize_form" method="POST" action="server_synchronize.php">'
257 . PMA_generate_common_hidden_inputs('', '');
258 echo '<table id="serverstatustraffic" class="data" width = "50%">
259 <tr>
260 <td> <h2>' . "\n"
261 . ($GLOBALS['cfg']['MainPageIconic']
262 ? '<img class="icon" src="' . $pmaThemeImage . 'new_struct.jpg" width="32"'
263 . ' height="32" alt="" />' . "\n"
264 : '')
265 . $strStructureSyn . "\n"
266 .'</h2>' . "\n" .'</td>';
267 echo '<td> <h2>' . "\n"
268 . ($GLOBALS['cfg']['MainPageIconic']
269 ? '<img class="icon" src="' . $pmaThemeImage . 'new_data.jpg" width="32"'
270 . ' height="32" alt="" />' . "\n"
271 : '')
272 . $strDataSyn . "\n"
273 . '</h2>' . "\n" .'</td>';
274 echo '</tr>
275 </table>';
278 * Displays the tables containing the source tables names, their difference with the target tables and target tables names
280 echo '<div id="serverstatus" style = "overflow: auto; width: 1020px; height: 220px;
281 border-left: 1px gray solid; border-bottom: 1px gray solid;
282 padding:0px; margin-bottom: 1em "> ';
284 echo '<table id="serverstatustraffic" class="data" width = "55%" >
285 <tr>
286 <th> Source Database: '. $src_db .'</th>
287 <th> Difference </th>
288 </tr>';
289 $odd_row = false;
291 * Display the matching tables' names and difference, first
293 for($i = 0; $i < count($matching_tables); $i++) {
294 $num_of_updates = 0;
295 $num_of_insertions = 0;
297 * Calculating the number of updates for each matching table
299 if (isset($update_array[$i])) {
300 if (isset($update_array[$i][0][$matching_tables_keys[$i][0]])) {
301 if (isset($update_array[$i])) {
302 $num_of_updates = sizeof($update_array[$i]);
303 } else {
304 $num_of_updates = 0;
306 } else {
307 $num_of_updates = 0;
311 * Calculating the number of insertions for each matching table
313 if (isset($insert_array[$i])) {
314 if (isset($insert_array[$i][0][$matching_tables_keys[$i][0]])) {
315 if (isset($insert_array[$i])) {
316 $num_of_insertions = sizeof($insert_array[$i]);
317 } else {
318 $num_of_insertions = 0;
320 } else {
321 $num_of_insertions = 0;
325 * Displays the name of the matching table
327 $odd_row = ! $odd_row;
328 echo '<tr height="32" class=" ';
329 echo $odd_row ? 'odd' : 'even';
330 echo '">
331 <td>' . $matching_tables[$i]. "\n" . '</td>
332 <td align="center">';
334 * Calculating the number of alter columns, number of columns to be added, number of columns to be removed,
335 * number of index to added and renmoved.
337 $num_alter_cols = 0;
338 $num_insert_cols = 0;
339 $num_remove_cols = 0;
340 $num_add_index = 0;
341 $num_remove_index = 0;
343 if (isset($alter_str_array[$i])) {
344 $num_alter_cols = sizeof($alter_str_array[$i]);
346 if (isset($add_column_array[$i])) {
347 $num_insert_cols = sizeof($add_column_array[$i]);
349 if (isset($uncommon_columns[$i])) {
350 $num_remove_cols = sizeof($uncommon_columns[$i]);
352 if (isset($add_indexes_array[$i])) {
353 $num_add_index = sizeof($add_indexes_array[$i]);
355 if (isset($remove_indexes_array[$i])) {
356 $num_remove_index = sizeof($remove_indexes_array[$i]);
359 * Display the red button of structure synchronization if there exists any structure difference or index difference.
361 if (($num_alter_cols > 0) || ($num_insert_cols > 0) || ($num_remove_cols > 0) || ($num_add_index > 0) ||($num_remove_index > 0)) {
363 echo '<img class="icon" src="' . $pmaThemeImage . 'new_struct.jpg" width="29" height="29"
364 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
365 onClick="showDetails('."'MS".$i."'".','."'".$num_alter_cols."'".','."'".$num_insert_cols.
366 "'".','."'".$num_remove_cols."'".','."'".$num_add_index."'".','."'".$num_remove_index."'"
367 .', this ,'."'". $matching_tables[$i] ."'".')"/>'. "\n" ;
371 * Display the green button of data synchronization if there exists any data difference.
373 if (isset($update_array[$i]) || isset($insert_array[$i])) {
374 if (isset($update_array[$i][0][$matching_tables_keys[$i][0]]) || isset($insert_array[$i][0][$matching_tables_keys[$i][0]])) {
376 echo '<img class="icon" src="' . $pmaThemeImage . 'new_data.jpg" width="29" height="29"
377 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
378 onClick="showDetails('."'MD".$i."'".','."'".$num_of_updates."'".','."'".$num_of_insertions.
379 "'".','."'".null."'".','."'".null."'".','."'".null."'".', this ,'."'". $matching_tables[$i] ."'".')" />'. "\n";
382 echo '</td>
383 </tr>';
386 * Displays the tables' names present in source but missing from target
388 for ($j = 0; $j < count($source_tables_uncommon); $j++) {
389 $odd_row = !$odd_row;
390 echo '<tr height="32" class=" ';
391 echo $odd_row ? 'odd' : 'even';
392 echo '">
393 <td> + ' .$source_tables_uncommon[$j]. "\n" . '</td> ';
395 echo '<td align="center"><img class="icon" src="' . $pmaThemeImage . 'new_struct.jpg" width="29" height="29"
396 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
397 onClick="showDetails('."'US".$j."'".','."'".null."'".','."'".null."'".','."'".null."'".','."'".null."'".','."'".null."'".', this ,'
398 ."'". $source_tables_uncommon[$j] ."'".')"/>'. "\n" ;
400 if ($row_count[$j] > 0)
402 echo '<img class="icon" src="' . $pmaThemeImage . 'new_data.jpg" width="29"'.' height="29"
403 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
404 onClick="showDetails('."'UD".$j."'".','."'".null."'".','."'".$row_count[$j]."'".','."'".null.
405 "'".','."'".null."'".','."'".null."'".', this ,'."'". $source_tables_uncommon[$j] ."'".')" />'. "\n";
407 echo '</td>
408 </tr>';
410 foreach ($target_tables_uncommon as $tbl_nc_name) {
411 $odd_row = ! $odd_row;
412 echo '<tr height="32" class=" ';
413 echo $odd_row ? 'odd' : 'even';
414 echo '">
415 <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td></td>';
416 echo '</tr>';
419 * Displays the target tables names
421 echo '</table>';
422 echo '<table id="serverstatusconnections" class="data" width="43%" >
423 <tr>
424 <th>Target Database: ' . $trg_db . '</th>
425 </tr>';
426 $odd_row = false;
427 foreach ($matching_tables as $tbl_name) {
428 $odd_row = ! $odd_row;
429 echo '<tr height="32" class=" ';
430 echo $odd_row ? 'odd' : 'even';
431 echo '">
432 <td> ' .$tbl_name . '</td>';
433 echo '</tr>';
435 foreach ($source_tables_uncommon as $tbl_nc_name) {
436 $odd_row = ! $odd_row;
437 echo '<tr height="32" class=" ';
438 echo $odd_row ? 'odd' : 'even';
439 echo '">
440 <td>' .$tbl_nc_name . "\n" . ' (Not present)</td>
441 </tr>';
443 foreach ($target_tables_uncommon as $tbl_nc_name) {
444 $odd_row = ! $odd_row;
445 echo '<tr height="32" class=" ';
446 echo $odd_row ? 'odd' : 'even';
447 echo '">
448 <td> - ' .$tbl_nc_name . '</td>';
449 echo '</tr>';
451 echo '</table>';
452 echo '</div>';
455 * This "list" div will contain a table and each row will depict information about structure/data diffrence in tables.
456 * Rows will be generated dynamically as soon as the colored buttons "D" or "S" are clicked.
459 echo '<div id="list" style = "overflow: auto; width: 1020px; height: 140px;
460 border-left: 1px gray solid; border-bottom: 1px gray solid;
461 padding:0px; margin: 0px">
463 <table>
464 <thead>
465 <tr style="width: 100%;">
466 <th id="table_name" style="width: 10%;" colspan="1">'. $strTable .' </th>
467 <th id="str_diff" style="width: 65%;" colspan="6">'. $strStructureDiff .' </th>
468 <th id="data_diff" style="width: 20%;" colspan="2">'. $strDataDiff .'</th>
469 </tr>
470 <tr style="width: 100%;">
471 <th style="width: 10%; background-color:#CCCCCC">'. $strTableName .'</th>
472 <th style="width: 10%; background-color:#CCCCCC">'. $strCreateTable .'</th>
473 <th style="width: 11%; background-color:#CCCCCC">'. $strTableAddColumn .'</th>
474 <th style="width: 13%; background-color:#CCCCCC">'. $strTableRemoveColumn .'</th>
475 <th style="width: 11%; background-color:#CCCCCC">'. $strTableAlterColumn .'</th>
476 <th style="width: 12%; background-color:#CCCCCC">'. $strTableRemoveIndex .'</th>
477 <th style="width: 11%; background-color:#CCCCCC">'. $strTableApplyIndex .'</th>
478 <th style="width: 10%; background-color:#CCCCCC">'. $strTableUpdateRow .'</th>
479 <th style="width: 10%; background-color:#CCCCCC">'. $strTableInsertRow .'</th>
480 </tr>
481 </thead>
482 <tbody></tbody>
483 </table>
484 </div>';
486 * This fieldset displays the checkbox to confirm deletion of previous rows from target tables
488 echo '<fieldset>
489 <p><input type= "checkbox" name="delete_rows" id ="delete_rows" />' . $strTableDeleteRows . ' </p>
490 </fieldset>
491 <fieldset class="tblFooters">' . "\n";
492 echo '<input type="button" name="apply_changes" value="' . $GLOBALS['strApplyChanges']
493 .'" onClick ="ApplySelectedChanges('."'". $_SESSION['token'] ."'".')" />';
494 echo '<input type="submit" name="synchronize_db" value="'. $GLOBALS['strSynchronizeDb'] .'" />'
495 . "\n" . '</fieldset>' . "\n";
496 echo '</form>';
499 } // end if ((isset($_REQUEST['submit_connect'])))
502 * Display the page when 'Apply Selected Changes' is pressed
504 if (isset($_REQUEST['Table_ids'])) {
506 * Displays success message
508 echo '<div class="success">Selected target tables have been synchronized with source tables. </div>';
510 $src_db = $_SESSION['src_db'];
511 $trg_db = $_SESSION['trg_db'];
512 $update_array = $_SESSION['update_array'];
513 $insert_array = $_SESSION['insert_array'];
514 $src_username = $_SESSION['src_username'];
515 $trg_username = $_SESSION['trg_username'];
516 $src_password = $_SESSION['src_password'];
517 $trg_password = $_SESSION['trg_password'];
518 $src_server = $_SESSION['src_server'];
519 $trg_server = $_SESSION['trg_server'];
520 $src_type = $_SESSION['src_type'];
521 $trg_type = $_SESSION['trg_type'];
522 $uncommon_tables = $_SESSION['uncommon_tables'];
523 $matching_tables = $_SESSION['matching_tables'];
524 $matching_tables_keys = $_SESSION['matching_tables_keys'];
525 $matching_tables_fields = $_SESSION['matching_fields'];
526 $source_tables_uncommon = $_SESSION['src_uncommon_tables'];
527 $uncommon_tables_fields = $_SESSION['uncommon_tables_fields'];
528 $target_tables_uncommon = $_SESSION['target_tables_uncommon'];
529 $row_count = $_SESSION['uncommon_tables_row_count'];
530 $target_tables = $_SESSION['target_tables'];
532 $delete_array = $_SESSION['delete_array'];
533 $uncommon_columns = $_SESSION['uncommon_columns'];
534 $source_columns = $_SESSION['source_columns'];
535 $alter_str_array = $_SESSION['alter_str_array'];
536 $criteria = $_SESSION['criteria'];
537 $target_tables_keys = $_SESSION['target_tables_keys'];
538 $add_column_array = $_SESSION['add_column_array'];
539 $add_indexes_array = $_SESSION['add_indexes_array'];
540 $alter_indexes_array = $_SESSION['alter_indexes_array'];
541 $remove_indexes_array = $_SESSION['remove_indexes_array'];
542 $source_indexes = $_SESSION['source_indexes'];
543 $target_indexes = $_SESSION['target_indexes'];
544 $uncommon_cols = $uncommon_columns;
547 * Creating link object for source and target databases
549 foreach ($cons as $con) {
550 if (${"{$con}_type"}=="rmt") {
551 ${"{$con}_link"} = PMA_DBI_connect(${"{$con}_username"}, ${"{$con}_password"}, $is_controluser = false, ${"{$con}_server"});
552 } else {
553 ${"{$con}_link"} = null;
555 } // end foreach ($cons as $con)
558 * Initializing arrays to save the table ids whose data and structure difference is to be applied
560 $matching_table_data_diff = array(); //stores id of matching table having data difference
561 $matching_table_structure_diff = array(); //stores id of matching tables having structure difference
562 $uncommon_table_structure_diff = array(); //stores id of uncommon tables having structure difference
563 $uncommon_table_data_diff = array(); //stores id of uncommon tables having data difference
565 for ($i = 0; isset($_REQUEST[$i]); $i++ ) {
566 if (isset($_REQUEST[$i])) {
567 $table_id = split("US", $_REQUEST[$i]);
568 if (isset($table_id[1])) {
569 $uncommon_table_structure_diff[] = $table_id[1];
571 $table_id = split("UD", $_REQUEST[$i]);
572 if (isset($table_id[1])) {
573 $uncommon_table_data_diff[] = $table_id[1];
575 $table_id = split("MS", $_REQUEST[$i]);
576 if (isset($table_id[1])) {
577 $matching_table_structure_diff[] = $table_id[1];
580 $table_id = split("MD", $_REQUEST[$i]);
581 if (isset($table_id[1])) {
582 $matching_table_data_diff[] = $table_id[1];
585 } // end for
587 * Applying the structure difference on selected matching tables
589 for($q = 0 ; $q < sizeof($matching_table_structure_diff); $q++)
591 if (isset($alter_str_array[$matching_table_structure_diff[$q]])) {
593 PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, $source_columns, $alter_str_array, $matching_tables_fields,
594 $criteria, $matching_tables_keys, $target_tables_keys, $matching_table_structure_diff[$q], false);
596 unset($alter_str_array[$matching_table_structure_diff[$q]]);
598 if (isset($add_column_array[$matching_table_structure_diff[$q]])) {
600 PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $matching_table_structure_diff[$q], $target_tables_keys,
601 $matching_tables_keys, $trg_db, $trg_link, $src_db, $src_link);
603 if (isset($delete_array[$matching_table_structure_diff[$q]])) {
605 PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $matching_table_structure_diff[$q], $target_tables_keys, $delete_array, false);
607 unset($delete_array[$matching_table_structure_diff[$q]]);
609 PMA_addColumnsInTargetTable($src_db, $trg_db,$src_link, $trg_link, $matching_tables, $source_columns, $add_column_array, $matching_tables_fields,
610 $criteria, $matching_tables_keys, $target_tables_keys, $uncommon_tables,$uncommon_tables_fields, $matching_table_structure_diff[$q], $uncommon_cols, false);
612 unset($add_column_array[$matching_table_structure_diff[$q]]);
614 if (isset($uncommon_columns[$matching_table_structure_diff[$q]])) {
616 PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $matching_table_structure_diff[$q], false);
618 unset($uncommon_columns[$matching_table_structure_diff[$q]]);
620 if (isset($add_indexes_array[$matching_table_structure_diff[$q]]) || isset($remove_indexes_array[$matching_table_structure_diff[$q]])
621 || isset($alter_indexes_array[$matching_table_structure_diff[$q]])) {
623 PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array,
624 $remove_indexes_array, $matching_table_structure_diff[$q], false);
626 unset($add_indexes_array[$matching_table_structure_diff[$q]]);
627 unset($alter_indexes_array[$matching_table_structure_diff[$q]]);
628 unset($remove_indexes_array[$matching_table_structure_diff[$q]]);
632 * Applying the data difference. First checks if structure diff is applied or not.
633 * If not, then apply structure difference first then apply data difference.
635 for($p = 0; $p < sizeof($matching_table_data_diff); $p++)
637 if ($_REQUEST['checked'] == 'true') {
639 PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $matching_table_data_diff[$p], $target_tables_keys,
640 $matching_tables_keys, $trg_db, $trg_link, $src_db, $src_link);
642 if (isset($delete_array[$matching_table_data_diff[$p]])) {
644 PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $matching_table_data_diff[$p], $target_tables_keys, $delete_array, false);
646 unset($delete_array[$matching_table_data_diff[$p]]);
649 if (isset($alter_str_array[$matching_table_data_diff[$p]])) {
651 PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, $source_columns, $alter_str_array, $matching_tables_fields,
652 $criteria, $matching_tables_keys, $target_tables_keys, $matching_table_data_diff[$p], false);
654 unset($alter_str_array[$matching_table_data_diff[$p]]);
656 if (isset($add_column_array[$matching_table_data_diff[$p]])) {
658 PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $matching_table_data_diff[$p], $target_tables_keys,
659 $matching_tables_keys, $trg_db, $trg_link, $src_db, $src_link);
661 if (isset($delete_array[$matching_table_data_diff[$p]])) {
663 PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $matching_table_data_diff[$p], $target_tables_keys, $delete_array, false);
665 unset($delete_array[$matching_table_data_diff[$p]]);
667 PMA_addColumnsInTargetTable($src_db, $trg_db,$src_link, $trg_link, $matching_tables, $source_columns, $add_column_array, $matching_tables_fields,
668 criteria, $matching_tables_keys, $target_tables_keys, $uncommon_tables, $uncommon_tables_fields, $matching_table_data_diff[$p], $uncommon_cols, false);
670 unset($add_column_array[$matching_table_data_diff[$p]]);
672 if (isset($uncommon_columns[$matching_table_data_diff[$p]])) {
674 PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $matching_table_data_diff[$p], false);
676 unset($uncommon_columns[$matching_table_data_diff[$p]]);
678 if (isset($add_indexes_array[$matching_table_structure_diff[$q]]) || isset($remove_indexes_array[$matching_table_structure_diff[$q]])
679 || isset($alter_indexes_array[$matching_table_structure_diff[$q]])) {
681 PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array,
682 $remove_indexes_array, $matching_table_structure_diff[$q], false);
684 unset($add_indexes_array[$matching_table_structure_diff[$q]]);
685 unset($alter_indexes_array[$matching_table_structure_diff[$q]]);
686 unset($remove_indexes_array[$matching_table_structure_diff[$q]]);
689 * Applying the data difference.
691 PMA_updateTargetTables($matching_tables, $update_array, $src_db, $trg_db, $trg_link, $matching_table_data_diff[$p], $matching_tables_keys, false);
693 PMA_insertIntoTargetTable($matching_tables, $src_db, $trg_db, $src_link, $trg_link , $matching_tables_fields, $insert_array,
694 $matching_table_data_diff[$p], $matching_tables_keys, $source_columns, $add_column_array, $criteria, $target_tables_keys,
695 $uncommon_tables, $uncommon_tables_fields, $uncommon_cols, $alter_str_array, $source_indexes, $target_indexes, $add_indexes_array,
696 $alter_indexes_array, $delete_array, $update_array, false);
699 * Updating the session variables to the latest values of the arrays.
701 $_SESSION['delete_array'] = $delete_array;
702 $_SESSION['uncommon_columns'] = $uncommon_columns;
703 $_SESSION['alter_str_array'] = $alter_str_array;
704 $_SESSION['add_column_array'] = $add_column_array;
705 $_SESSION['add_indexes_array'] = $add_indexes_array;
706 $_SESSION['remove_indexes_array'] = $remove_indexes_array;
707 $_SESSION['insert_array'] = $insert_array;
708 $_SESSION['update_array'] = $update_array;
711 * Applying structure difference to selected non-matching tables (present in Source but absent from Target).
713 for($s = 0; $s < sizeof($uncommon_table_structure_diff); $s++)
715 PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $uncommon_tables, $uncommon_table_structure_diff[$s], $uncommon_tables_fields, false);
716 $_SESSION['uncommon_tables_fields'] = $uncommon_tables_fields;
718 unset($uncommon_tables[$uncommon_table_structure_diff[$s]]);
721 * Applying data difference to selected non-matching tables (present in Source but absent from Target).
722 * Before data synchronization, structure synchronization is confirmed.
724 for($r = 0; $r < sizeof($uncommon_table_data_diff); $r++)
726 if (!(in_array($uncommon_table_data_diff[$r], $uncommon_table_structure_diff))) {
727 if (isset($uncommon_tables[$uncommon_table_data_diff[$r]])) {
729 PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $uncommon_tables, $uncommon_table_data_diff[$r], $uncommon_tables_fields, false);
730 $_SESSION['uncommon_tables_fields'] = $uncommon_tables_fields;
732 unset($uncommon_tables[$uncommon_table_data_diff[$r]]);
735 PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $uncommon_table_data_diff[$r],
736 $_SESSION['uncommon_tables_fields'], false);
738 unset($row_count[$uncommon_table_data_diff[$r]]);
741 * Again all the tables from source and target database are displayed with their differences.
742 * The differences have been removed from tables that have been synchronized
744 echo '<form name="applied_difference" id="synchronize_form" method="POST" action="server_synchronize.php">'
745 . PMA_generate_common_hidden_inputs('', '');
747 echo '<div id="serverstatus" style = "overflow: auto; width: 1020px; height: 220px;
748 border-left: 1px gray solid; border-bottom: 1px gray solid;
749 padding:0px; margin-bottom: 1em"> ';
751 echo '<table id="serverstatustraffic" class="data" width= "55%">
752 <tr>
753 <th> Source Database: '. $src_db .'</th>
754 <th> Difference </th>
755 </tr>';
756 $odd_row = false;
757 for($i = 0; $i < count($matching_tables); $i++) {
758 $odd_row = !$odd_row;
759 echo '<tr height="32" class=" ';
760 echo $odd_row ? 'odd' : 'even';
761 echo '">
762 <td align="center">' . $matching_tables[$i]. "\n" . '</td>
763 <td align="center">';
765 $num_alter_cols = 0;
766 $num_insert_cols = 0;
767 $num_remove_cols = 0;
768 $num_add_index = 0;
769 $num_remove_index = 0;
771 if (isset($alter_str_array[$i])) {
772 $num_alter_cols = sizeof($alter_str_array[$i]);
774 if (isset($add_column_array[$i])) {
775 $num_insert_cols = sizeof($add_column_array[$i]);
777 if (isset($uncommon_columns[$i])) {
778 $num_remove_cols = sizeof($uncommon_columns[$i]);
780 if (isset($add_indexes_array[$i])) {
781 $num_add_index = sizeof($add_indexes_array[$i]);
783 if (isset($remove_indexes_array[$i])) {
784 $num_remove_index = sizeof($remove_indexes_array[$i]);
787 if (($num_alter_cols > 0) || ($num_insert_cols > 0) || ($num_remove_cols > 0) || ($num_add_index > 0) ||($num_remove_index > 0)) {
788 echo '<img class="icon" src="' . $pmaThemeImage . 'new_struct.jpg" width="29" height="29"
789 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
790 onClick="showDetails('."'MS".$i."'".','."'".$num_alter_cols."'".','."'".$num_insert_cols."'"
791 .','."'".$num_remove_cols."'".','."'".$num_add_index."'".','."'".$num_remove_index."'".',
792 this ,'."'". $matching_tables[$i] ."'".')"/>'. "\n" ;
794 if (!(in_array($i, $matching_table_data_diff))) {
796 if (isset($update_array[$i][0][$matching_tables_keys[$i][0]])) {
797 if (isset($update_array[$i])) {
798 $num_of_updates = sizeof($update_array[$i]);
799 } else {
800 $num_of_updates = 0;
802 } else {
803 $num_of_updates = 0;
805 if (isset($insert_array[$i][0][$matching_tables_keys[$i][0]])) {
806 if (isset($insert_array[$i])) {
807 $num_of_insertions = sizeof($insert_array[$i]);
808 } else {
809 $num_of_insertions = 0;
811 } else {
812 $num_of_insertions = 0;
815 if (isset($update_array[$i][0][$matching_tables_keys[$i][0]]) || isset($insert_array[$i][0][$matching_tables_keys[$i][0]])) {
816 echo '<img class="icon" src="' . $pmaThemeImage . 'new_data.jpg" width="29" height="29"
817 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
818 onClick="showDetails('."'MD".$i."'".','."'".$num_of_updates."'".','."'".$num_of_insertions.
819 "'".','."'".null."'".','."'".null."'".','."'".null."'".', this ,'."'". $matching_tables[$i] ."'".')" />';
821 } else {
822 unset($update_array[$i]);
823 unset($insert_array[$i]);
825 echo '</td>
826 </tr>';
829 * placing updated value of arrays in session
832 $_SESSION['update_array'] = $update_array;
833 $_SESSION['insert_array'] = $insert_array;
835 for ($j = 0; $j < count($source_tables_uncommon); $j++) {
836 $odd_row = ! $odd_row;
837 echo '<tr height="32" class=" ';
838 echo $odd_row ? 'odd' : 'even';
839 echo '">
840 <td align="center"> + ' .$source_tables_uncommon[$j]. "\n" . '</td>
841 <td align="center">';
843 * Display the difference only when it has not been applied
845 if (!(in_array($j, $uncommon_table_structure_diff))) {
846 if (isset($uncommon_tables[$j])) {
847 echo '<img class="icon" src="' . $pmaThemeImage .'new_struct.jpg" width="29" height="29"
848 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
849 onClick="showDetails('."'US".$j."'".','."'".null."'".','."'".null."'".','."'".null."'"
850 .','."'".null."'".','."'".null."'".', this ,'."'". $source_tables_uncommon[$j] ."'".')"/>' . "\n" .' ';
852 } else {
853 unset($uncommon_tables[$j]);
856 * Display the difference only when it has not been applied
858 if (!(in_array($j, $uncommon_table_data_diff))) {
859 if (isset($row_count[$j]) && ($row_count > 0)) {
860 echo '<img class="icon" src="' . $pmaThemeImage . 'new_data.jpg" width="29"'.' height="29"
861 alt="Click to Select" onmouseover="change_Image(this);" onmouseout="change_Image(this);"
862 onClick="showDetails('."'UD".$j."'".','."'".null."'".','."'".$row_count[$j]."'".','."'"
863 .null."'".','."'".null."'".','."'".null."'".', this ,'."'". $source_tables_uncommon[$j] ."'".')" />'. "\n";
865 } else {
866 unset($row_count[$j]);
869 echo '</td>
870 </tr>';
873 * placing the latest values of arrays in session
876 $_SESSION['uncommon_tables'] = $uncommon_tables;
877 $_SESSION['uncommon_tables_row_count'] = $row_count;
881 * Displaying the target database tables
883 foreach ($target_tables_uncommon as $tbl_nc_name) {
884 $odd_row = ! $odd_row;
885 echo '<tr height="32" class=" ';
886 echo $odd_row ? 'odd' : 'even';
887 echo '">
888 <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td></td>';
889 echo '</tr>';
891 echo '</table>';
892 echo '<table id="serverstatusconnections" class="data" width="42%" >
893 <tr>
894 <th>Target Database: ' . $trg_db . '</th>
895 </tr>';
896 $odd_row = false;
897 foreach ($matching_tables as $tbl_name) {
898 $odd_row = ! $odd_row;
899 echo '<tr height="32" class=" ';
900 echo $odd_row ? 'odd' : 'even';
901 echo '">
902 <td> ' .$tbl_name . '</td>';
903 echo '</tr>';
905 foreach ($source_tables_uncommon as $tbl_nc_name) {
906 $odd_row = ! $odd_row;
907 echo '<tr height="32" class=" ';
908 echo $odd_row ? 'odd' : 'even';
909 echo '">';
910 if (in_array($tbl_nc_name, $uncommon_tables)) {
911 echo '<td>' .$tbl_nc_name . "\n" . '(Not present) </td>';
912 } else {
913 echo '<td>' .$tbl_nc_name . "\n" . '</td>';
915 echo '
916 </tr>';
918 foreach ($target_tables_uncommon as $tbl_nc_name) {
919 $odd_row = ! $odd_row;
920 echo '<tr height="32" class=" ';
921 echo $odd_row ? 'odd' : 'even';
922 echo '">
923 <td> - ' .$tbl_nc_name . '</td>';
924 echo '</tr>';
926 echo '</table>
927 </div>';
930 * This "list" div will contain a table and each row will depict information about structure/data diffrence in tables.
931 * Rows will be generated dynamically as soon as the colored buttons "D" or "S" are clicked.
934 echo '<div id="list" style = "overflow: auto; width: 1020px; height: 140px;
935 border-left: 1px gray solid; border-bottom: 1px gray solid;
936 padding:0px; margin: 0px">';
938 echo '<table>
939 <thead>
940 <tr style="width: 100%;">
941 <th id="table_name" style="width: 10%;" colspan="1">'. $strTable .' </th>
942 <th id="str_diff" style="width: 65%;" colspan="6">'. $strStructureDiff .' </th>
943 <th id="data_diff" style="width: 20%;" colspan="2">'. $strDataDiff .'</th>
944 </tr>
945 <tr style="width: 100%;">
946 <th style="width: 10%; background-color:#CCCCCC">'. $strTableName .'</th>
947 <th style="width: 10%; background-color:#CCCCCC">'. $strCreateTable .'</th>
948 <th style="width: 11%; background-color:#CCCCCC">'. $strTableAddColumn .'</th>
949 <th style="width: 13%; background-color:#CCCCCC">'. $strTableRemoveColumn .'</th>
950 <th style="width: 11%; background-color:#CCCCCC">'. $strTableAlterColumn .'</th>
951 <th style="width: 12%; background-color:#CCCCCC">'. $strTableRemoveIndex .'</th>
952 <th style="width: 11%; background-color:#CCCCCC">'. $strTableApplyIndex .'</th>
953 <th style="width: 10%; background-color:#CCCCCC">'. $strTableUpdateRow .'</th>
954 <th style="width: 10%; background-color:#CCCCCC">'. $strTableInsertRow .'</th>
955 </tr>
956 </thead>
957 <tbody></tbody>
958 </table>
959 </div>';
962 * This fieldset displays the checkbox to confirm deletion of previous rows from target tables
964 echo '<fieldset>
965 <p><input type= "checkbox" name="delete_rows" id ="delete_rows" />' . $strTableDeleteRows . ' </p>
966 </fieldset>';
968 echo '<fieldset class="tblFooters">' . "\n";
969 echo '<input type="button" name="apply_changes" value="' . $GLOBALS['strApplyChanges'].'"
970 onClick ="ApplySelectedChanges('."'". $_SESSION['token'] ."'".')" />';
971 echo '<input type="submit" name="synchronize_db" value="'. $GLOBALS['strSynchronizeDb'] .'" />'
972 . "\n" . '</fieldset>' . "\n";
973 echo '</form>';
977 * Displays the page when 'Synchronize Databases' is pressed.
980 if (isset($_REQUEST['synchronize_db'])) {
982 $src_db = $_SESSION['src_db'];
983 $trg_db = $_SESSION['trg_db'];
984 $update_array = $_SESSION['update_array'];
985 $insert_array = $_SESSION['insert_array'];
986 $src_username = $_SESSION['src_username'];
987 $trg_username = $_SESSION['trg_username'];
988 $src_password = $_SESSION['src_password'];
989 $trg_password = $_SESSION['trg_password'];
990 $matching_tables = $_SESSION['matching_tables'];
991 $matching_tables_keys = $_SESSION['matching_tables_keys'];
992 $matching_tables_fields = $_SESSION['matching_fields'];
993 $source_tables_uncommon = $_SESSION['src_uncommon_tables'];
994 $uncommon_tables_fields = $_SESSION['uncommon_tables_fields'];
995 $target_tables_uncommon = $_SESSION['target_tables_uncommon'];
996 $row_count = $_SESSION['uncommon_tables_row_count'];
997 $uncommon_tables = $_SESSION['uncommon_tables'];
998 $target_tables = $_SESSION['target_tables'];
1000 $delete_array = $_SESSION['delete_array'];
1001 $uncommon_columns = $_SESSION['uncommon_columns'];
1002 $source_columns = $_SESSION['source_columns'];
1003 $alter_str_array = $_SESSION['alter_str_array'];
1004 $criteria = $_SESSION['criteria'];
1005 $target_tables_keys = $_SESSION['target_tables_keys'];
1006 $add_column_array = $_SESSION['add_column_array'];
1007 $add_indexes_array = $_SESSION['add_indexes_array'];
1008 $alter_indexes_array = $_SESSION['alter_indexes_array'];
1009 $remove_indexes_array = $_SESSION['remove_indexes_array'];
1010 $source_indexes = $_SESSION['source_indexes'];
1011 $target_indexes = $_SESSION['target_indexes'];
1012 $uncommon_cols = $uncommon_columns;
1015 * Display success message.
1017 echo '<div class="success">Target database has been synchronized with source database. </div>';
1019 * Displaying all the tables of source and target database and now no difference is there.
1021 echo '<div id="serverstatus" style = "overflow: auto; width: 1050px; height: 250px;
1022 border-left: 1px gray solid; border-bottom: 1px gray solid;
1023 padding:0px; margin: 0px"> ';
1025 echo '<table id="serverstatustraffic" class="data" width ="55%">
1026 <tr>
1027 <th> Source Database: '. $src_db .'</th>
1028 <th> Difference </th>
1029 </tr>';
1030 $odd_row = false;
1031 for($i = 0; $i < count($matching_tables); $i++)
1033 $odd_row = !$odd_row;
1034 echo '<tr height="32" class=" ';
1035 echo $odd_row ? 'odd' : 'even';
1036 echo '">
1037 <td>' . $matching_tables[$i]. "\n" . '</td>
1038 <td></td>
1039 </tr>';
1041 for ($j = 0; $j < count($source_tables_uncommon); $j++) {
1042 $odd_row = ! $odd_row;
1043 echo '<tr height="32" class=" ';
1044 echo $odd_row ? 'odd' : 'even';
1045 echo '">
1046 <td> + ' .$source_tables_uncommon[$j]. "\n" . '</td> ';
1047 echo '<td></td>
1048 </tr>';
1050 foreach ($target_tables_uncommon as $tbl_nc_name) {
1051 $odd_row = ! $odd_row;
1052 echo '<tr height="32" class=" ';
1053 echo $odd_row ? 'odd' : 'even';
1054 echo '">
1055 <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td></td>';
1056 echo '</tr>';
1058 echo '</table>';
1059 echo '<table id="serverstatusconnections" class="data" width="42%" >
1060 <tr>
1061 <th>Target Database: ' . $trg_db . '</th>
1062 </tr>';
1063 $odd_row = false;
1064 foreach ($matching_tables as $tbl_name) {
1065 $odd_row = ! $odd_row;
1066 echo '<tr height="32" class=" ';
1067 echo $odd_row ? 'odd' : 'even';
1068 echo '">
1069 <td> ' .$tbl_name . '</td>';
1070 echo '</tr>';
1072 foreach ($source_tables_uncommon as $tbl_nc_name) {
1073 $odd_row = !$odd_row;
1074 echo '<tr height="32" class=" ';
1075 echo $odd_row ? 'odd' : 'even';
1076 echo '">
1077 <td>' .$tbl_nc_name . "\n" . ' </td>
1078 </tr>';
1080 foreach ($target_tables_uncommon as $tbl_nc_name) {
1081 $odd_row = ! $odd_row;
1082 echo '<tr height="32" class=" ';
1083 echo $odd_row ? 'odd' : 'even';
1084 echo '">
1085 <td> ' .$tbl_nc_name . '</td>';
1086 echo '</tr>';
1088 echo '</table> </div>';
1091 * connecting the source and target servers
1093 if ('rmt' == $_SESSION['src_type']) {
1094 $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false, $_SESSION['src_server']);
1095 } else {
1096 $src_link = $GLOBALS['userlink'];
1098 if ('rmt' == $_SESSION['trg_type']) {
1099 $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false, $_SESSION['trg_server']);
1100 } else {
1101 $trg_link = $GLOBALS['userlink'];
1105 * Displaying the queries.
1107 echo '<h5>' . $GLOBALS['strQueriesExecuted'] . '</h5>';
1108 echo '<div id="serverstatus" style = "overflow: auto; width: 1050px; height: 180px;
1109 border-left: 1px gray solid; border-bottom: 1px gray solid; padding: 0px; margin: 0px"> ';
1111 * Applying all sorts of differences for each matching table
1113 for($p = 0; $p <sizeof($matching_tables); $p++) {
1115 * If the check box is checked for deleting previous rows from the target database tables then
1116 * first find out rows to be deleted and then delete the rows.
1118 if (isset($_REQUEST['delete_rows'])) {
1119 PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $p, $target_tables_keys, $matching_tables_keys,
1120 $trg_db, $trg_link, $src_db, $src_link);
1122 if (isset($delete_array[$p])) {
1123 PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $p, $target_tables_keys, $delete_array, true);
1124 unset($delete_array[$p]);
1127 if (isset($alter_str_array[$p])) {
1129 PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, $source_columns, $alter_str_array, $matching_tables_fields,
1130 $criteria, $matching_tables_keys, $target_tables_keys, $p, true);
1131 unset($alter_str_array[$p]);
1133 if (isset($add_column_array[$p])) {
1135 PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $p, $target_tables_keys, $matching_tables_keys,
1136 $trg_db, $trg_link, $src_db, $src_link);
1138 if (isset($delete_array[$p])) {
1139 PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $p, $target_tables_keys, $delete_array, true);
1140 unset($delete_array[$p]);
1142 PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns, $add_column_array, $matching_tables_fields,
1143 $criteria, $matching_tables_keys, $target_tables_keys, $uncommon_tables,$uncommon_tables_fields, $p, $uncommon_cols, true);
1144 unset($add_column_array[$p]);
1146 if (isset($uncommon_columns[$p])) {
1148 PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $p, true);
1149 unset($uncommon_columns[$p]);
1151 if (isset($add_indexes_array[$matching_table_structure_diff[$q]]) || isset($remove_indexes_array[$matching_table_structure_diff[$q]])
1152 || isset($alter_indexes_array[$matching_table_structure_diff[$q]])) {
1154 PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array,
1155 $remove_indexes_array, $matching_table_structure_diff[$q], true);
1157 unset($add_indexes_array[$matching_table_structure_diff[$q]]);
1158 unset($alter_indexes_array[$matching_table_structure_diff[$q]]);
1159 unset($remove_indexes_array[$matching_table_structure_diff[$q]]);
1162 PMA_updateTargetTables($matching_tables, $update_array, $src_db, $trg_db, $trg_link, $p, $matching_tables_keys, true);
1164 PMA_insertIntoTargetTable($matching_tables, $src_db, $trg_db, $src_link, $trg_link , $matching_tables_fields, $insert_array,$p, $matching_tables_keys,
1165 $matching_tables_keys,$source_columns, $add_column_array, $criteria, $target_tables_keys,$uncommon_tables, $uncommon_tables_fields,$uncommon_cols,
1166 $alter_str_array,$source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $delete_array, $update_array, true);
1170 * Creating and populating tables present in source but absent from target database.
1172 for($q = 0; $q < sizeof($source_tables_uncommon) ;$q++) {
1173 if (isset($uncommon_tables[$q])) {
1174 PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, true);
1176 if (isset($row_count[$q])) {
1177 PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, true);
1180 echo "</div>";
1184 * Displays the main page when none of the following buttons is pressed
1187 if (!isset($_REQUEST['submit_connect']) && !isset($_REQUEST['synchronize_db']) && !isset($_REQUEST['Table_ids']) )
1189 /**
1190 * Displays the sub-page heading
1192 echo '<h2>' . "\n"
1193 . ($GLOBALS['cfg']['MainPageIconic']
1194 ? '<img class="icon" src="' . $pmaThemeImage . 's_sync.png" width="18"'
1195 .' height="18" alt="" />'
1196 : '')
1197 . $strSynchronize . "\n"
1198 .'</h2>' . "\n";
1200 echo '<div id="serverstatus">
1201 <form name="connection_form" id="connection_form" method="POST" action="server_synchronize.php"
1202 >' // TODO: add check if all var. are filled in
1203 . PMA_generate_common_hidden_inputs('', '');
1204 echo '<fieldset>'."\n";
1205 echo '<legend>'. $GLOBALS['strSynchronize']. '</legend>'."\n";
1207 * Displays the forms
1210 $databases = PMA_DBI_get_databases_full(null, false, null, 'SCHEMA_NAME',
1211 'ASC', 0, true);
1213 foreach ($cons as $type) {
1214 echo '<table id="serverconnection_'.$type.'_remote" class="data">
1215 <tr>
1216 <th colspan="2">'. $GLOBALS['strDatabase_'.$type] .'</th>
1217 </tr>
1218 <tr class="odd">
1219 <td colspan="2" style="text-align: center">
1220 <select name="'.$type.'_type" id="'.$type.'_type">
1221 <option value="rmt">'.$GLOBALS['strRemoteServer'].'</option>
1222 <option value="cur">'.$GLOBALS['strCurrentServer'].'</option>
1223 </select>
1224 </td>
1225 </tr>
1226 <tr class="even" id="'.$type.'tr1">
1227 <td>'. $GLOBALS['strHost']. '</td>
1228 <td><input type="text" name="'.$type.'_host" /></td>
1229 </tr>
1230 <tr class="odd" id="'.$type.'tr2">
1231 <td>'. $GLOBALS['strPort']. '</td>
1232 <td><input type="text" name="'.$type.'_port" value="3306" maxlength="5" size="5" /></td>
1233 </tr>
1234 <tr class="even" id="'.$type.'tr3">
1235 <td>'. $GLOBALS['strSocket']. '</td>
1236 <td><input type="text" name="'.$type.'_socket" /></td>
1237 </tr>
1238 <tr class="odd" id="'.$type.'tr4">
1239 <td>'. $GLOBALS['strUserName']. '</td>
1240 <td><input type="text" name="'.$type.'_username" /></td>
1241 </tr>
1242 <tr class="even" id="'.$type.'tr5">
1243 <td>'. $GLOBALS['strPassword']. '</td>
1244 <td><input type="password" name="'.$type.'_pass" /> </td>
1245 </tr>
1246 <tr class="odd" id="'.$type.'tr6">
1247 <td>'. $GLOBALS['strDatabase']. '</td>
1248 <td><input type="text" name="'.$type.'_db" /></td>
1249 </tr>
1250 <tr class="even" id="'.$type.'tr7" style="display: none;">
1251 <td>'. $GLOBALS['strDatabase']. '</td>
1252 <td>
1253 <select name="'.$type.'_db_sel">
1255 foreach ($databases as $db) {
1256 if ($db['SCHEMA_NAME'] != 'mysql'
1257 && $db['SCHEMA_NAME'] != 'information_schema') {
1258 echo ' <option>' . $db['SCHEMA_NAME'] . '</option>'."\n";
1261 echo '
1262 </select>
1263 </td>
1264 </tr>
1265 </table>';
1267 // Add JS to show/hide rows based on the selection
1268 PMA_js(''.
1269 '$(\''.$type.'_type\').addEvent(\'change\',function() {'."\n".
1270 ' if ($(\''.$type.'tr1\').getStyle(\'display\')=="none") {'."\n".
1271 ' for (var i=1; i<7; i++)'."\n".
1272 ' $(\''.$type.'tr\'+i).tween(\'display\', \'table-row\');'."\n".
1273 ' $(\''.$type.'tr7\').tween(\'display\', \'none\');'."\n".
1274 ' }'."\n".
1275 ' else {'."\n".
1276 ' for (var i=1; i<7; i++)'."\n".
1277 ' $(\''.$type.'tr\'+i).tween(\'display\', \'none\');'."\n".
1278 ' $(\''.$type.'tr7\').tween(\'display\', \'table-row\');'."\n".
1279 ' }'."\n".
1280 '});'."\n"
1283 unset ($types, $type);
1285 echo '
1286 </fieldset>
1287 <fieldset class="tblFooters">
1288 <input type="submit" name="submit_connect" value="' .$GLOBALS['strGo'] .'" id="buttonGo" />
1289 </fieldset>
1290 </form>
1291 </div>
1292 <div class="notice">' . $strSynchronizationNote . '</div>';
1296 * Displays the footer
1298 require_once './libraries/footer.inc.php';