Merge remote-tracking branch 'origin/master'
[phpmyadmin/ammaryasir.git] / js / server_synchronize.js
blobe327a7b40406957f4bf4163ddf5ce4c2e6bce5c5
1 /* vim: set expandtab sw=4 ts=4 sts=4: */
2 /**
3 * for server_synchronize.php
5 */
7 // Global variable row_class is set to even
8 var row_class = 'even';
10 /**
11 * Generates a row dynamically in the differences table displaying
12 * the complete statistics of difference in table like number of
13 * rows to be updated, number of rows to be inserted, number of
14 * columns to be added, number of columns to be removed, etc.
16 * @param index index of matching table
17 * @param update_size number of rows/column to be updated
18 * @param insert_size number of rows/coulmns to be inserted
19 * @param remove_size number of columns to be removed
20 * @param insert_index number of indexes to be inserted
21 * @param remove_index number of indexes to be removed
22 * @param img_obj image object
23 * @param table_name name of the table
26 function showDetails(i, update_size, insert_size, remove_size, insert_index, remove_index, img_obj, table_name)
28 // a jQuery object
29 var $img = $(img_obj);
31 $img.toggleClass('selected');
33 // The image source is changed when the showDetails function is called.
34 if ($img.hasClass('selected')) {
35 if ($img.hasClass('struct_img')) {
36 $img.attr('src', pmaThemeImage + 'new_struct_selected.jpg');
38 if ($img.hasClass('data_img')) {
39 $img.attr('src', pmaThemeImage + 'new_data_selected.jpg');
41 } else {
42 if ($img.hasClass('struct_img')) {
43 $img.attr('src', pmaThemeImage + 'new_struct.jpg');
45 if ($img.hasClass('data_img')) {
46 $img.attr('src', pmaThemeImage + 'new_data.jpg');
50 var div = document.getElementById("list");
51 var table = div.getElementsByTagName("table")[0];
52 var table_body = table.getElementsByTagName("tbody")[0];
54 //Global variable row_class is being used
55 if (row_class == 'even') {
56 row_class = 'odd';
57 } else {
58 row_class = 'even';
60 // If the red or green button against a table name is pressed then append a new row to show the details of differences of this table.
61 if ($img.hasClass('selected')) {
62 var newRow = document.createElement("tr");
63 newRow.setAttribute("class", row_class);
64 newRow.className = row_class;
65 // Id assigned to this row element is same as the index of this table name in the matching_tables/source_tables_uncommon array
66 newRow.setAttribute("id" , i);
68 var table_name_cell = document.createElement("td");
69 table_name_cell.align = "center";
70 table_name_cell.innerHTML = table_name ;
72 newRow.appendChild(table_name_cell);
74 var create_table = document.createElement("td");
75 create_table.align = "center";
77 var add_cols = document.createElement("td");
78 add_cols.align = "center";
80 var remove_cols = document.createElement("td");
81 remove_cols.align = "center";
83 var alter_cols = document.createElement("td");
84 alter_cols.align = "center";
86 var add_index = document.createElement("td");
87 add_index.align = "center";
89 var delete_index = document.createElement("td");
90 delete_index.align = "center";
92 var update_rows = document.createElement("td");
93 update_rows.align = "center";
95 var insert_rows = document.createElement("td");
96 insert_rows.align = "center";
98 var tick_image = document.createElement("img");
99 tick_image.src = pmaThemeImage + "s_success.png";
101 if (update_size == '' && insert_size == '' && remove_size == '') {
103 This is the case when the table needs to be created in target database.
105 create_table.appendChild(tick_image);
106 add_cols.innerHTML = "--";
107 remove_cols.innerHTML = "--";
108 alter_cols.innerHTML = "--";
109 delete_index.innerHTML = "--";
110 add_index.innerHTML = "--";
111 update_rows.innerHTML = "--";
112 insert_rows.innerHTML = "--";
114 newRow.appendChild(create_table);
115 newRow.appendChild(add_cols);
116 newRow.appendChild(remove_cols);
117 newRow.appendChild(alter_cols);
118 newRow.appendChild(delete_index);
119 newRow.appendChild(add_index);
120 newRow.appendChild(update_rows);
121 newRow.appendChild(insert_rows);
123 } else if (update_size == '' && remove_size == '') {
125 This is the case when data difference is displayed in the
126 table which is present in source but absent from target database
128 create_table.innerHTML = "--";
129 add_cols.innerHTML = "--";
130 remove_cols.innerHTML = "--";
131 alter_cols.innerHTML = "--";
132 add_index.innerHTML = "--";
133 delete_index.innerHTML = "--";
134 update_rows.innerHTML = "--";
135 insert_rows.innerHTML = insert_size;
137 newRow.appendChild(create_table);
138 newRow.appendChild(add_cols);
139 newRow.appendChild(remove_cols);
140 newRow.appendChild(alter_cols);
141 newRow.appendChild(delete_index);
142 newRow.appendChild(add_index);
143 newRow.appendChild(update_rows);
144 newRow.appendChild(insert_rows);
146 } else if (remove_size == '') {
148 This is the case when data difference between matching_tables is displayed.
150 create_table.innerHTML = "--";
151 add_cols.innerHTML = "--";
152 remove_cols.innerHTML = "--";
153 alter_cols.innerHTML = "--";
154 add_index.innerHTML = "--";
155 delete_index.innerHTML = "--";
156 update_rows.innerHTML = update_size;
157 insert_rows.innerHTML = insert_size;
159 newRow.appendChild(create_table);
160 newRow.appendChild(add_cols);
161 newRow.appendChild(remove_cols);
162 newRow.appendChild(alter_cols);
163 newRow.appendChild(delete_index);
164 newRow.appendChild(add_index);
165 newRow.appendChild(update_rows);
166 newRow.appendChild(insert_rows);
168 } else {
170 This is the case when structure difference between matching_tables id displayed
172 create_table.innerHTML = "--";
173 add_cols.innerHTML = insert_size;
174 remove_cols.innerHTML = remove_size;
175 alter_cols.innerHTML = update_size;
176 delete_index.innerHTML = remove_index;
177 add_index.innerHTML = insert_index;
178 update_rows.innerHTML = "--";
179 insert_rows.innerHTML = "--";
181 newRow.appendChild(create_table);
182 newRow.appendChild(add_cols);
183 newRow.appendChild(remove_cols);
184 newRow.appendChild(alter_cols);
185 newRow.appendChild(delete_index);
186 newRow.appendChild(add_index);
187 newRow.appendChild(update_rows);
188 newRow.appendChild(insert_rows);
190 table_body.appendChild(newRow);
192 } else {
193 //The case when the row showing the details need to be removed from the table i.e. the difference button is deselected now.
194 var table_rows = table_body.getElementsByTagName("tr");
195 var j;
196 var index = 0;
197 for (j=0; j < table_rows.length; j++)
199 if (table_rows[j].id == i) {
200 index = j;
201 table_rows[j].parentNode.removeChild(table_rows[j]);
204 //The table row css is being adjusted. Class "odd" for odd rows and "even" for even rows should be maintained.
205 for(index = 0; index < table_rows.length; index++)
207 row_class_element = table_rows[index].getAttribute('class');
208 if (row_class_element == "even") {
209 table_rows[index].setAttribute("class","odd"); // for Mozilla firefox
210 table_rows[index].className = "odd"; // for IE browser
211 } else {
212 table_rows[index].setAttribute("class","even"); // for Mozilla firefox
213 table_rows[index].className = "even"; // for IE browser
220 * Generates the URL containing the list of selected table ids for synchronization and
221 * a variable checked for confirmation of deleting previous rows from target tables
223 * @param token the token generated for each PMA form
226 function ApplySelectedChanges(token)
228 var div = document.getElementById("list");
229 var table = div.getElementsByTagName('table')[0];
230 var table_body = table.getElementsByTagName('tbody')[0];
231 // Get all the rows from the details table
232 var table_rows = table_body.getElementsByTagName('tr');
233 var x = table_rows.length;
234 var i;
236 Append the token at the beginning of the query string followed by
237 Table_ids that shows that "Apply Selected Changes" button is pressed
239 var append_string = "?token="+token+"&Table_ids="+1;
240 for(i=0; i<x; i++){
241 append_string += "&";
242 append_string += i+"="+table_rows[i].id;
245 // Getting the value of checkbox delete_rows
246 var checkbox = document.getElementById("delete_rows");
247 if (checkbox.checked){
248 append_string += "&checked=true";
249 } else {
250 append_string += "&checked=false";
252 //Appending the token and list of table ids in the URL
253 location.href += token;
254 location.href += append_string;
258 * Displays an error message if any text field
259 * is left empty other than the port field.
261 * @param string the form name
262 * @param object the form
264 * @return boolean whether the form field is empty or not
266 function validateConnection(form_name, form_obj)
268 var check = true;
269 var src_hostfilled = true;
270 var trg_hostfilled = true;
272 for (var i=1; i<form_name.elements.length; i++)
274 // All the text fields are checked excluding the port field because the default port can be used.
275 if ((form_name.elements[i].type == 'text') && (form_name.elements[i].name != 'src_port') && (form_name.elements[i].name != 'trg_port')) {
276 check = emptyFormElements(form_obj, form_name.elements[i].name);
277 if (check==false) {
278 element = form_name.elements[i].name;
279 if (form_name.elements[i].name == 'src_host') {
280 src_hostfilled = false;
281 continue;
283 if (form_name.elements[i].name == 'trg_host') {
284 trg_hostfilled = false;
285 continue;
287 if ((form_name.elements[i].name == 'src_socket' && src_hostfilled==false) || (form_name.elements[i].name == 'trg_socket' && trg_hostfilled==false))
288 break;
289 else
290 continue;
294 if (!check) {
295 form_obj.reset();
296 element.select();
297 alert(PMA_messages['strFormEmpty']);
298 element.focus();
300 return check;
303 $(document).ready(function() {
304 $('.server_selector').change(function(evt) {
305 var server = $(evt.target).val();
306 if (server == 'cur') {
307 $(this).closest('tbody').children('.current-server').css('display', '');
308 $(this).closest('tbody').children('.remote-server').css('display', 'none');
309 } else if (server == 'rmt') {
310 $(this).closest('tbody').children('.current-server').css('display', 'none');
311 $(this).closest('tbody').children('.remote-server').css('display', '');
312 } else {
313 $(this).closest('tbody').children('.current-server').css('display', 'none');
314 $(this).closest('tbody').children('.remote-server').css('display', '');
315 var parts = server.split('||||');
316 $(this).closest('tbody').find('.server-host').val(parts[0]);
317 $(this).closest('tbody').find('.server-port').val(parts[1]);
318 $(this).closest('tbody').find('.server-socket').val(parts[2]);
319 $(this).closest('tbody').find('.server-user').val(parts[3]);
320 $(this).closest('tbody').find('.server-pass').val('');
321 $(this).closest('tbody').find('.server-db').val(parts[4])
325 $('.struct_img').hover(
326 // pmaThemeImage comes from js/messages.php
327 function() {
328 // mouse enters the element
329 var $img = $(this);
330 $img.addClass('hover');
331 if ($img.hasClass('selected')) {
332 $img.attr('src', pmaThemeImage + 'new_struct_selected_hovered.jpg');
333 } else {
334 $img.attr('src', pmaThemeImage + 'new_struct_hovered.jpg');
337 function() {
338 // mouse leaves the element
339 var $img = $(this);
340 $img.removeClass('hover');
341 if ($img.hasClass('selected')) {
342 $img.attr('src', pmaThemeImage + 'new_struct_selected.jpg');
343 } else {
344 $img.attr('src', pmaThemeImage + 'new_struct.jpg');
349 $('.data_img').hover(
350 function() {
351 // mouse enters the element
352 var $img = $(this);
353 $img.addClass('hover');
354 if ($img.hasClass('selected')) {
355 $img.attr('src', pmaThemeImage + 'new_data_selected_hovered.jpg');
356 } else {
357 $img.attr('src', pmaThemeImage + 'new_data_hovered.jpg');
360 function() {
361 // mouse leaves the element
362 var $img = $(this);
363 $img.removeClass('hover');
364 if ($img.hasClass('selected')) {
365 $img.attr('src', pmaThemeImage + 'new_data_selected.jpg');
366 } else {
367 $img.attr('src', pmaThemeImage + 'new_data.jpg');