From 80c0ba810a9aa8119079bc4e367d50599c8e451f Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Wed, 26 Nov 2014 17:57:33 +0530 Subject: [PATCH] Allow deleting individual versions of tracking data Signed-off-by: Madhura Jayaratne --- js/messages.php | 2 + js/tbl_tracking.js | 47 +++++++++++++++++++++ libraries/Tracker.class.php | 9 ++++- libraries/tracking.lib.php | 81 ++++++++++++++++++++++++++++++++----- tbl_tracking.php | 29 ++++++++++++- 5 files changed, 156 insertions(+), 12 deletions(-) create mode 100644 js/tbl_tracking.js diff --git a/js/messages.php b/js/messages.php index 2dafbea285..e1fb92038d 100644 --- a/js/messages.php +++ b/js/messages.php @@ -39,6 +39,8 @@ $js_messages['strDropTableStrongWarning'] = __('You are about to DESTROY a compl $js_messages['strTruncateTableStrongWarning'] = __('You are about to TRUNCATE a complete table!'); $js_messages['strDeleteTrackingData'] = __('Delete tracking data for this table?'); $js_messages['strDeleteTrackingDataMultiple'] = __('Delete tracking data for these tables?'); +$js_messages['strDeleteTrackingVersion'] = __('Delete tracking data for this version?'); +$js_messages['strDeleteTrackingVersionMultiple'] = __('Delete tracking data for these versions?'); $js_messages['strDeletingTrackingData'] = __('Deleting tracking data'); $js_messages['strDroppingPrimaryKeyIndex'] = __('Dropping Primary Key/Index'); $js_messages['strDroppingForeignKey'] = __('Dropping Foreign key.'); diff --git a/js/tbl_tracking.js b/js/tbl_tracking.js new file mode 100644 index 0000000000..5640e0b86d --- /dev/null +++ b/js/tbl_tracking.js @@ -0,0 +1,47 @@ +/** + * Unbind all event handlers before tearing down the page + */ +AJAX.registerTeardown('tbl_tracking.js', function () { + $('body').off('click', '#versionsForm.ajax button[name="submit_mult"], #versionsForm.ajax input[name="submit_mult"]'); + $('body').off('click', 'a.delete_version_anchor.ajax'); +}); + +/** + * Bind event handlers + */ +AJAX.registerOnload('tbl_tracking.js', function () { + + /** + * Handles multi submit for tracking versions + */ + $('body').on('click', '#versionsForm.ajax button[name="submit_mult"], #versionsForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var submitData = $form.serialize() + '&ajax_request=true&ajax_page_request=true&submit_mult=' + $button.val(); + + if ($button.val() == 'delete_version') { + var question = PMA_messages.strDeleteTrackingVersionMultiple; + $button.PMA_confirm(question, $form.attr('action'), function (url) { + PMA_ajaxShowMessage(); + $.get(url, submitData, AJAX.responseHandler); + }); + } else { + PMA_ajaxShowMessage(); + $.get($form.attr('action'), submitData, AJAX.responseHandler); + } + }); + + /** + * Ajax Event handler for 'Delete version' + */ + $('body').on('click', 'a.delete_version_anchor.ajax', function (e) { + e.preventDefault(); + var $anchor = $(this); + var question = PMA_messages.strDeleteTrackingVersion; + $anchor.PMA_confirm(question, $anchor.attr('href'), function (url) { + PMA_ajaxShowMessage(); + $.get(url, {'ajax_page_request': true, 'ajax_request': true}, AJAX.responseHandler); + }); + }); +}); \ No newline at end of file diff --git a/libraries/Tracker.class.php b/libraries/Tracker.class.php index 0504400d77..b0a8744c31 100644 --- a/libraries/Tracker.class.php +++ b/libraries/Tracker.class.php @@ -347,16 +347,17 @@ class PMA_Tracker /** - * Removes all tracking data for a table + * Removes all tracking data for a table or a version of a table * * @param string $dbname name of database * @param string $tablename name of table + * @param string $version version * * @static * * @return int result of version insertion */ - static public function deleteTracking($dbname, $tablename) + static public function deleteTracking($dbname, $tablename, $version = '') { $sql_query = "/*NOTRACK*/\n" . "DELETE FROM " . self::$pma_table @@ -364,6 +365,10 @@ class PMA_Tracker . PMA_Util::sqlAddSlashes($dbname) . "'" . " AND `table_name` = '" . PMA_Util::sqlAddSlashes($tablename) . "'"; + if ($version) { + $sql_query .= " AND `version` = '" + . PMA_Util::sqlAddSlashes($version) . "'"; + } $result = PMA_queryAsControlUser($sql_query); return $result; diff --git a/libraries/tracking.lib.php b/libraries/tracking.lib.php index 5e9c28aa08..a9a7795428 100644 --- a/libraries/tracking.lib.php +++ b/libraries/tracking.lib.php @@ -221,26 +221,33 @@ function PMA_getListOfVersionsOfTable() /** * Function to get html for displaying last version number * - * @param array $sql_result sql result - * @param int $last_version last version - * @param array $url_params url parameters - * @param string $url_query url query + * @param array $sql_result sql result + * @param int $last_version last version + * @param array $url_params url parameters + * @param string $url_query url query + * @param string $pmaThemeImage path to theme's image folder + * @param string $text_dir text direction * * @return string */ -function PMA_getHtmlForTableVersionDetails($sql_result, $last_version, $url_params, - $url_query +function PMA_getHtmlForTableVersionDetails( + $sql_result, $last_version, $url_params, + $url_query, $pmaThemeImage, $text_dir ) { $tracking_active = false; - $html = ''; + $html = ''; + $html .= PMA_URL_getHiddenInputs($GLOBALS['db'], $GLOBALS['table']); + $html .= '
'; $html .= ''; $html .= ''; - $html .= ''; + $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; + $html .= ''; $html .= ''; $html .= ''; $html .= ''; @@ -248,6 +255,7 @@ function PMA_getHtmlForTableVersionDetails($sql_result, $last_version, $url_para $style = 'odd'; $GLOBALS['dbi']->dataSeek($sql_result, 0); + $delete = PMA_Util::getIcon('b_drop.png', __('Delete version')); while ($version = $GLOBALS['dbi']->fetchArray($sql_result)) { if ($version['version'] == $last_version) { if ($version['tracking_active'] == 1) { @@ -256,12 +264,20 @@ function PMA_getHtmlForTableVersionDetails($sql_result, $last_version, $url_para $tracking_active = false; } } + $delete_link = 'tbl_tracking.php' . $url_query . '&version=' + . htmlspecialchars($version['version']) + . '&submit_delete_version=true'; $html .= ''; - $html .= ''; + $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; + $html .= ''; $html .= '
' . __('Table') . '' . __('Version') . '' . __('Created') . '' . __('Updated') . '' . __('Status') . '' . __('Action') . '' . __('Show') . '
' . htmlspecialchars($version['table_name']) . ''; + $html .= ''; + $html .= '' . htmlspecialchars($version['version']) . '' . htmlspecialchars($version['date_created']) . '' . htmlspecialchars($version['date_updated']) . '' . PMA_getVersionStatus($version) . '' . $delete . ''; + + $html .= '' + . ''; + + $html .= '' + . __('With selected:') . ''; + + $html .= PMA_Util::getButtonOrImage( + 'submit_mult', 'mult_submit', 'submit_mult_delete_version', + __('Delete version'), 'b_drop.png', 'delete_version' + ); + + $html .= ''; + if ($tracking_active) { $html .= PMA_getHtmlForActivateDeactivateTracking( 'deactivate', $url_query, $last_version @@ -1213,6 +1247,35 @@ function PMA_getTrackingSet() return $tracking_set; } +/** + * Deletes a tracking version + * + * @param string $version tracking version + * + * @return string HTML of the success message + */ +function PMA_deleteTrackingVersion($version) +{ + $html = ''; + $versionDeleted = PMA_Tracker::deleteTracking( + $GLOBALS['db'], + $GLOBALS['table'], + $version + ); + if ($versionDeleted) { + $msg = PMA_Message::success( + sprintf( + __('Version %1$s of %2$s was deleted.'), + htmlspecialchars($version), + htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table']) + ) + ); + $html .= $msg->getDisplay(); + } + + return $html; +} + /** * Function to create the tracking version * diff --git a/tbl_tracking.php b/tbl_tracking.php index 43bd77213f..7d15ffe99a 100644 --- a/tbl_tracking.php +++ b/tbl_tracking.php @@ -11,6 +11,12 @@ require_once './libraries/common.inc.php'; require_once './libraries/tracking.lib.php'; +//Get some js files needed for Ajax requests +$response = PMA_Response::getInstance(); +$header = $response->getHeader(); +$scripts = $header->getScripts(); +$scripts->addFile('tbl_tracking.js'); + define('TABLE_MAY_BE_ABSENT', true); require './libraries/tbl_common.inc.php'; @@ -84,6 +90,26 @@ $html = '
'; /** * Actions */ +if (isset($_REQUEST['submit_mult'])) { + if (! empty($_REQUEST['selected_versions'])) { + if ($_REQUEST['submit_mult'] == 'delete_version') { + foreach ($_REQUEST['selected_versions'] as $version) { + PMA_deleteTrackingVersion($version); + } + $html .= PMA_Message::success( + __('Tracking versions deleted successfully.') + )->getDisplay(); + } + } else { + $html .= PMA_Message::notice( + __('No versions selected.') + )->getDisplay(); + } +} + +if (isset($_REQUEST['submit_delete_version'])) { + $html .= PMA_deleteTrackingVersion($_REQUEST['version']); +} // Create tracking version if (isset($_REQUEST['submit_create_version'])) { @@ -155,7 +181,8 @@ $sql_result = PMA_getListOfVersionsOfTable(); $last_version = PMA_getTableLastVersionNumber($sql_result); if ($last_version > 0) { $html .= PMA_getHtmlForTableVersionDetails( - $sql_result, $last_version, $url_params, $url_query + $sql_result, $last_version, $url_params, + $url_query, $pmaThemeImage, $text_dir ); }