The branch, master has been updated
       via  a8afc24b425ef85b5deccc0b04163cc381a67947 (commit)
       via  143b830a7df4c6b53cc990f8783d4d4fe1a54cac (commit)
       via  92b179bf43c58c59deaad5342e6ca5bcb1239579 (commit)
       via  a63532c666bfb8d4bb16e679744ffbee86c64a4b (commit)
      from  f9ff30171adfb3637a2b135f178ffed5320535a2 (commit)


- Log -----------------------------------------------------------------
commit a8afc24b425ef85b5deccc0b04163cc381a67947
Author: Michal Čihař <[email protected]>
Date:   Tue Feb 8 11:54:51 2011 +0100

    Changelog entry

commit 143b830a7df4c6b53cc990f8783d4d4fe1a54cac
Author: Michal Čihař <[email protected]>
Date:   Tue Feb 8 11:54:02 2011 +0100

    Make copy separate column

commit 92b179bf43c58c59deaad5342e6ca5bcb1239579
Author: Michal Čihař <[email protected]>
Date:   Tue Feb 8 11:53:28 2011 +0100

    Whitespace cleanup

commit a63532c666bfb8d4bb16e679744ffbee86c64a4b
Author: Jan Prachař <[email protected]>
Date:   Fri Feb 4 01:21:32 2011 +0100

    Add direct link to copy row of the displayed table.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                     |    1 +
 js/sql.js                     |   30 +++++++++++-----------
 libraries/display_tbl.lib.php |   54 +++++++++++++++++++++++++++++++++-------
 tbl_change.php                |   16 ++++++++++++
 4 files changed, 76 insertions(+), 25 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 10d1b73..a283d89 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -133,6 +133,7 @@
 - [interface] Add link to documentation for status variables.
 - [security] Redirect external links to avoid Referer leakage.
 - [interface] Default to not count tables in database.
+- patch #3172172 [interface] Shortcut for copying table row.
 
 3.3.10.0 (not yet released)
 - patch #3147400 [structure] Aria table size printed as unknown,
diff --git a/js/sql.js b/js/sql.js
index 593cbe7..5593446 100644
--- a/js/sql.js
+++ b/js/sql.js
@@ -60,7 +60,7 @@ function appendInlineAnchor() {
 
     if (disp_mode == 'vertical') {
         // there can be one or two tr containing this class, depending
-        // on the ModifyDeleteAtLeft and ModifyDeleteAtRight cfg parameters 
+        // on the ModifyDeleteAtLeft and ModifyDeleteAtRight cfg parameters
         $('#table_results tr')
             .find('.edit_row_anchor')
             .removeClass('.edit_row_anchor')
@@ -108,8 +108,8 @@ function appendInlineAnchor() {
 
         $('#rowsDeleteForm').find('thead, tbody').find('th').each(function() {
             var $this_th = $(this);
-            if ($this_th.attr('colspan') == 3) {
-                $this_th.attr('colspan', '4')
+            if ($this_th.attr('colspan') == 4) {
+                $this_th.attr('colspan', '5')
             }
         });
     }
@@ -203,7 +203,7 @@ $(document).ready(function() {
             return false;
         })
     }
-    
+
     /**
      * Ajax Event handler for 'SQL Query Submit'
      *
@@ -226,9 +226,9 @@ $(document).ready(function() {
 
         $.post($(this).attr('action'), $(this).serialize() , function(data) {
             if(data.success == true) {
-                // fade out previous success message, if any 
+                // fade out previous success message, if any
                 $('.success').fadeOut();
-                // show a message that stays on screen 
+                // show a message that stays on screen
                 $('#sqlqueryform').before(data.message);
                 $('#sqlqueryresults').show();
                 // this happens if a USE command was typed
@@ -243,7 +243,7 @@ $(document).ready(function() {
                 }
             }
             else if (data.success == false ) {
-                // show an error message that stays on screen 
+                // show an error message that stays on screen
                 $('#sqlqueryform').before(data.error);
                 $('#sqlqueryresults').hide();
             }
@@ -276,7 +276,7 @@ $(document).ready(function() {
         event.preventDefault();
 
         PMA_ajaxShowMessage();
-        
+
         /**
          * @var $the_form    Object referring to the form element that 
paginates the results table
          */
@@ -400,7 +400,7 @@ $(document).ready(function() {
 
             // We need to retrieve the value from the server for 
truncated/relation fields
             // Find the field name
-            
+
             /**
              * @var this_field  Object referring to this field (<td>)
              */
@@ -524,8 +524,8 @@ $(document).ready(function() {
         event.preventDefault();
 
         /**
-         * @var $this_td    Object referring to the td containing the 
-         * "Inline Edit" link that was clicked to save the row that is 
+         * @var $this_td    Object referring to the td containing the
+         * "Inline Edit" link that was clicked to save the row that is
          * being edited
          *
          */
@@ -718,7 +718,7 @@ $(document).ready(function() {
                             new_value = $test_element.text();
                         }
 
-                        
+
                         if($this_sibling.is('.relation')) {
                             var field_name = getFieldName($this_sibling, 
disp_mode);
                             $.each(data.relations, function(key, value) {
@@ -727,7 +727,7 @@ $(document).ready(function() {
                                     return false;
                                 }
                             })
-                        } 
+                        }
                         if($this_sibling.is('.enum')) {
                             new_html = new_value;
                         }
@@ -770,14 +770,14 @@ $(document).ready(function() {
      * vertical column highlighting in horizontal mode when hovering over the 
column header
      */
     $('.column_heading').live('hover', function() {
-        PMA_changeClassForColumn($(this), 'hover'); 
+        PMA_changeClassForColumn($(this), 'hover');
         });
 
     /**
      * vertical column marking in horizontal mode when clicking the column 
header
      */
     $('.column_heading').live('click', function() {
-        PMA_changeClassForColumn($(this), 'marked'); 
+        PMA_changeClassForColumn($(this), 'marked');
         });
 })
 
diff --git a/libraries/display_tbl.lib.php b/libraries/display_tbl.lib.php
index 7d0299c..54d124e 100644
--- a/libraries/display_tbl.lib.php
+++ b/libraries/display_tbl.lib.php
@@ -641,11 +641,11 @@ function PMA_displayTableHeaders(&$is_display, 
&$fields_meta, $fields_cnt = 0, $
     if ($_SESSION['tmp_user_values']['disp_direction'] == 'horizontal'
      || $_SESSION['tmp_user_values']['disp_direction'] == 'horizontalflipped') 
{
         $colspan  = ($is_display['edit_lnk'] != 'nn' && $is_display['del_lnk'] 
!= 'nn')
-                  ? ' colspan="3"'
+                  ? ' colspan="4"'
                   : '';
     } else {
         $rowspan  = ($is_display['edit_lnk'] != 'nn' && $is_display['del_lnk'] 
!= 'nn')
-                  ? ' rowspan="3"'
+                  ? ' rowspan="4"'
                   : '';
     }
 
@@ -1158,9 +1158,11 @@ function PMA_displayTableBody(&$dt_result, &$is_display, 
$map, $analyzed_sql) {
                     'sql_query'        => $url_sql_query,
                     'goto'             => 'sql.php',
                 );
-                $edit_url = 'tbl_change.php' . 
PMA_generate_common_url($_url_params);
+                $edit_url = 'tbl_change.php' . 
PMA_generate_common_url($_url_params + array('default_action' => 'update'));
+                $copy_url = 'tbl_change.php' . 
PMA_generate_common_url($_url_params + array('default_action' => 'insert'));
 
                 $edit_str = PMA_getIcon('b_edit.png', __('Edit'), true);
+                $copy_str = PMA_getIcon('b_insrow.png', __('Copy'), true);
 
                 // Class definitions required for inline editing jQuery scripts
                 $edit_anchor_class = "edit_row_anchor";
@@ -1224,7 +1226,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, 
$map, $analyzed_sql) {
                 if (! isset($js_conf)) {
                     $js_conf = '';
                 }
-                echo PMA_generateCheckboxAndLinks('left', $del_url, 
$is_display, $row_no, $where_clause, $where_clause_html, $del_query, 'l', 
$edit_url, $edit_anchor_class, $edit_str, $del_str, $js_conf);
+                echo PMA_generateCheckboxAndLinks('left', $del_url, 
$is_display, $row_no, $where_clause, $where_clause_html, $del_query, 'l', 
$edit_url, $copy_url, $edit_anchor_class, $edit_str, $copy_str, $del_str, 
$js_conf);
             } // end if (1.3)
         } // end if (1)
 
@@ -1439,7 +1441,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, 
$map, $analyzed_sql) {
                 if (! isset($js_conf)) {
                     $js_conf = '';
                 }
-                echo PMA_generateCheckboxAndLinks('right', $del_url, 
$is_display, $row_no, $where_clause, $where_clause_html, $del_query, 'r', 
$edit_url, $edit_anchor_class, $edit_str, $del_str, $js_conf);
+                echo PMA_generateCheckboxAndLinks('right', $del_url, 
$is_display, $row_no, $where_clause, $where_clause_html, $del_query, 'r', 
$edit_url, $copy_url, $edit_anchor_class, $edit_str, $copy_str, $del_str, 
$js_conf);
         } // end if (3)
 
         if ($_SESSION['tmp_user_values']['disp_direction'] == 'horizontal'
@@ -1471,7 +1473,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, 
$map, $analyzed_sql) {
         }
 
         if (isset($edit_url)) {
-            $vertical_display['edit'][$row_no]   .= 
PMA_generateEditLink($edit_url, $alternating_color_class . ' ' . 
$edit_anchor_class . $vertical_class, $edit_str, $where_clause, 
$where_clause_html);
+            $vertical_display['edit'][$row_no]   .= 
PMA_generateEditLink($edit_url, $copy_url, $alternating_color_class . ' ' . 
$edit_anchor_class . $vertical_class, $edit_str, $where_clause, 
$where_clause_html);
         } else {
             unset($vertical_display['edit'][$row_no]);
         }
@@ -2490,7 +2492,7 @@ function PMA_generateCheckboxForMulti($del_url, 
$is_display, $row_no, $where_cla
 function PMA_generateEditLink($edit_url, $class, $edit_str, $where_clause, 
$where_clause_html) {
     $ret = '';
     if (! empty($edit_url)) {
-        $ret .= '<td class="' . $class . '" align="center" ' . ' >'
+        $ret .= '<td class="' . $class . '" align="center" ' . ' ><span 
class="nowrap">'
            . PMA_linkOrButton($edit_url, $edit_str, array(), FALSE);
         /*
          * Where clause for selecting this row uniquely is provided as
@@ -2499,7 +2501,34 @@ function PMA_generateEditLink($edit_url, $class, 
$edit_str, $where_clause, $wher
         if(! empty($where_clause)) {
             $ret .= '<input type="hidden" class="where_clause" value ="' . 
$where_clause_html . '" />';
         }
-        $ret .= '</td>';
+        $ret .= '</span></td>';
+    }
+    return $ret;
+}
+
+/**
+ * Generates an Copy link
+ *
+ * @uses    PMA_linkOrButton()
+ * @param   string  $copy_url
+ * @param   string  $copy_str
+ * @param   string  $where_clause
+ * @param   string  $where_clause_html
+ * @return  string  the generated HTML
+ */
+function PMA_generateCopyLink($copy_url, $copy_str, $where_clause, 
$where_clause_html) {
+    $ret = '';
+    if (! empty($copy_url)) {
+        $ret .= '<td align="center" ' . ' ><span class="nowrap">'
+           . PMA_linkOrButton($copy_url, $copy_str, array(), FALSE);
+        /*
+         * Where clause for selecting this row uniquely is provided as
+         * a hidden input. Used by jQuery scripts for handling inline editing
+         */
+        if(! empty($where_clause)) {
+            $ret .= '<input type="hidden" class="where_clause" value ="' . 
$where_clause_html . '" />';
+        }
+        $ret .= '</span></td>';
     }
     return $ret;
 }
@@ -2543,13 +2572,14 @@ function PMA_generateDeleteLink($del_url, $del_str, 
$js_conf, $class) {
  * @param   string  $del_query
  * @param   string  $id_suffix
  * @param   string  $edit_url
+ * @param   string  $copy_url
  * @param   string  $class
  * @param   string  $edit_str
  * @param   string  $del_str
  * @param   string  $js_conf
  * @return  string  the generated HTML
  */
-function PMA_generateCheckboxAndLinks($position, $del_url, $is_display, 
$row_no, $where_clause, $where_clause_html, $del_query, $id_suffix, $edit_url, 
$class, $edit_str, $del_str, $js_conf) {
+function PMA_generateCheckboxAndLinks($position, $del_url, $is_display, 
$row_no, $where_clause, $where_clause_html, $del_query, $id_suffix, $edit_url, 
$copy_url, $class, $edit_str, $copy_str, $del_str, $js_conf) {
     $ret = '';
 
     if ($position == 'left') {
@@ -2557,12 +2587,16 @@ function PMA_generateCheckboxAndLinks($position, 
$del_url, $is_display, $row_no,
 
         $ret .= PMA_generateEditLink($edit_url, $class, $edit_str, 
$where_clause, $where_clause_html, '');
 
+        $ret .= PMA_generateCopyLink($copy_url, $copy_str, $where_clause, 
$where_clause_html, '');
+
         $ret .= PMA_generateDeleteLink($del_url, $del_str, $js_conf, '', '');
 
     } elseif ($position == 'right') {
         $ret .= PMA_generateDeleteLink($del_url, $del_str, $js_conf, '', '');
 
-        $ret .= PMA_generateEditLink($edit_url, $class, $edit_str, 
$where_clause, $where_clause_html, '');
+        $ret .= PMA_generateCopyLink($copy_url, $copy_str, $where_clause, 
$where_clause_html, '');
+
+        $ret .= PMA_generateEditLink($edit_url, $copy_url, $class, $edit_str, 
$where_clause, $where_clause_html, '');
 
         $ret .= PMA_generateCheckboxForMulti($del_url, $is_display, $row_no, 
$where_clause_html, $del_query, $id_suffix='_right', '', '', '');
     }
diff --git a/tbl_change.php b/tbl_change.php
index d77ae86..d18f59d 100644
--- a/tbl_change.php
+++ b/tbl_change.php
@@ -43,6 +43,9 @@ if (isset($_REQUEST['ShowFunctionFields'])) {
 if (isset($_REQUEST['ShowFieldTypesInDataEditView'])) {
     $cfg['ShowFieldTypesInDataEditView'] = 
$_REQUEST['ShowFieldTypesInDataEditView'];
 }
+if (isset($_REQUEST['default_action'])) {
+    $default_action = $_REQUEST['default_action'];
+}
 
 /**
  * file listing
@@ -184,6 +187,7 @@ if (isset($where_clause)) {
             }
             unset($unique_condition, $tmp_clause_is_unique);
         }
+
     }
 } else {
     // no primary key given, just load first row - but what happens if table 
is empty?
@@ -192,6 +196,11 @@ if (isset($where_clause)) {
     $rows = array_fill(0, $cfg['InsertRows'], false);
 }
 
+// Copying a row - fetched data will be inserted as a new row, therefore the 
where clause is needless.
+if (isset($default_action) && $default_action === 'insert') {
+    unset($where_clause, $where_clauses);
+}
+
 // retrieve keys into foreign fields, if any
 $foreigners  = PMA_getForeigners($db, $table);
 
@@ -488,6 +497,13 @@ foreach ($rows as $row_id => $vrow) {
 
                 $data            = $vrow[$field['Field']];
             } // end if... else...
+
+            //when copying row, it is useful to empty auto-increment column to 
prevent duplicate key error
+            if (isset($default_action) && $default_action === 'insert') {
+                if ($field['Key'] === 'PRI' && strpos($field['Extra'], 
'auto_increment') !== FALSE) {
+                    $data = $special_chars_encoded = $special_chars = NULL;
+                }
+            }
             // If a timestamp field value is not included in an update
             // statement MySQL auto-update it to the current timestamp;
             // however, things have changed since MySQL 4.1, so


hooks/post-receive
-- 
phpMyAdmin

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Phpmyadmin-git mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/phpmyadmin-git

Reply via email to