= $filter_ts_from && $timestamp <= $filter_ts_to && ( in_array('*', $filter_users) || in_array($entry['username'], $filter_users) ) ) { $tmp_entries[] = array( 'id' => $id, 'timestamp' => $timestamp, 'username' => $entry['username'], 'statement' => $entry['statement'] ); } $id++; } return($tmp_entries); } $entries = array(); // Filtering data definition statements if ($_REQUEST['logtype'] == 'schema' || $_REQUEST['logtype'] == 'schema_and_data') { $entries = array_merge($entries, PMA_filter_tracking($data['ddlog'], $filter_ts_from, $filter_ts_to, $filter_users)); } // Filtering data manipulation statements if ($_REQUEST['logtype'] == 'data' || $_REQUEST['logtype'] == 'schema_and_data') { $entries = array_merge($entries, PMA_filter_tracking($data['dmlog'], $filter_ts_from, $filter_ts_to, $filter_users)); } // Sort it foreach ($entries as $key => $row) { $ids[$key] = $row['id']; $timestamps[$key] = $row['timestamp']; $usernames[$key] = $row['username']; $statements[$key] = $row['statement']; } array_multisort($timestamps, SORT_ASC, $ids, SORT_ASC, $usernames, SORT_ASC, $statements, SORT_ASC, $entries); } // Export as file download if (isset($_REQUEST['report_export']) && $_REQUEST['export_type'] == 'sqldumpfile') { @ini_set('url_rewriter.tags',''); $dump = "# " . sprintf($strTrackingReportForTable, htmlspecialchars($_REQUEST['table'])) . "\n" . "# " . date('Y-m-d H:i:s') . "\n"; foreach($entries as $entry) { $dump .= $entry['statement']; } $filename = 'log_' . htmlspecialchars($_REQUEST['table']) . '.sql'; header('Content-Type: text/x-sql'); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Content-Disposition: attachment; filename="' . $filename . '"'); if (PMA_USR_BROWSER_AGENT == 'IE') { header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Pragma: no-cache'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); } echo $dump; exit(); } /** * Gets tables informations */ /** * Displays top menu links */ require_once './libraries/tbl_links.inc.php'; echo '
'; /** * Actions */ // Create tracking version if (isset($_REQUEST['submit_create_version'])) { $tracking_set = ''; if ($_REQUEST['alter_table'] == true) { $tracking_set .= 'ALTER TABLE,'; } if ($_REQUEST['rename_table'] == true) { $tracking_set .= 'RENAME TABLE,'; } if ($_REQUEST['create_table'] == true) { $tracking_set .= 'CREATE TABLE,'; } if ($_REQUEST['drop_table'] == true) { $tracking_set .= 'DROP TABLE,'; } if ($_REQUEST['create_index'] == true) { $tracking_set .= 'CREATE INDEX,'; } if ($_REQUEST['drop_index'] == true) { $tracking_set .= 'DROP INDEX,'; } if ($_REQUEST['insert'] == true) { $tracking_set .= 'INSERT,'; } if ($_REQUEST['update'] == true) { $tracking_set .= 'UPDATE,'; } if ($_REQUEST['delete'] == true) { $tracking_set .= 'DELETE,'; } if ($_REQUEST['truncate'] == true) { $tracking_set .= 'TRUNCATE,'; } $tracking_set = rtrim($tracking_set, ','); if (PMA_Tracker::createVersion($GLOBALS['db'], $GLOBALS['table'], $_REQUEST['version'], $tracking_set )) { $msg = PMA_Message::success(sprintf($strTrackingVersionCreated, $_REQUEST['version'], $GLOBALS['db'], $GLOBALS['table'])); $msg->display(); } } // Deactivate tracking if (isset($_REQUEST['submit_deactivate_now'])) { if (PMA_Tracker::deactivateTracking($GLOBALS['db'], $GLOBALS['table'], $_REQUEST['version'])) { $msg = PMA_Message::success(sprintf($strTrackingVersionDeactivated, $GLOBALS['db'], $GLOBALS['table'], $_REQUEST['version'])); $msg->display(); } } // Activate tracking if (isset($_REQUEST['submit_activate_now'])) { if (PMA_Tracker::activateTracking($GLOBALS['db'], $GLOBALS['table'], $_REQUEST['version'])) { $msg = PMA_Message::success(sprintf($strTrackingVersionActivated, $GLOBALS['db'], $GLOBALS['table'], $_REQUEST['version'])); $msg->display(); } } // Export as SQL execution if (isset($_REQUEST['report_export']) && $_REQUEST['export_type'] == 'execution') { foreach($entries as $entry) { $sql_result = PMA_DBI_query( "/*NOTRACK*/\n" . $entry['statement'] ); } $msg = PMA_Message::success($strTrackingSQLExecuted); $msg->display(); } // Export as SQL dump if (isset($_REQUEST['report_export']) && $_REQUEST['export_type'] == 'sqldump') { $new_query = "# " . $strTrackingYouCanExecute . "\n" . "# " . $strTrackingCommentOut . "\n" . "\n" . "CREATE database IF NOT EXISTS pma_temp_db; \n" . "USE pma_temp_db; \n" . "\n"; foreach($entries as $entry) { $new_query .= $entry['statement']; } $msg = PMA_Message::success($strTrackingSQLExported); $msg->display(); $db_temp = $db; $table_temp = $table; $db = $table = ''; $GLOBALS['js_include'][] = 'functions.js'; require_once './libraries/sql_query_form.lib.php'; PMA_sqlQueryForm($new_query, 'sql'); $db = $db_temp; $table = $table_temp; } /* * Schema snapshot */ if (isset($_REQUEST['snapshot'])) { ?>

[]

$field) { ?> ' . $field['Field'] . '' . "\n"; } else { echo '' . "\n"; } ?>
' . $field['Field'] . '
0) { ?>

$index) { if ($index['Non_unique'] == 0) { $str_unique = $strYes; } else { $str_unique = $strNo; } if ($index['Packed'] != '') { $str_packed = $strYes; } else { $str_packed = $strNo; } ?>



[]



' . '' . '' . '' . ''; $str2 = ''; $str3 = ''; $str4 = ''; $str5 = ''; printf($strTrackingShowLogDateUsers, $str1, $str2, $str3, $str4, $str5); /* * First, list tracked data definition statements */ $i = 1; if ($selection_schema || $selection_both ) { ?> $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) { $statement = substr($entry['statement'], 0, $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) . '[...]'; } else { $statement = PMA_formatSql(PMA_SQP_parse($entry['statement'])); } $timestamp = strtotime($entry['date']); if ($timestamp >= $filter_ts_from && $timestamp <= $filter_ts_to && ( in_array('*', $filter_users) || in_array($entry['username'], $filter_users) ) ) { ?>
#
0) { ?> $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) { $statement = substr($entry['statement'], 0, $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) . '[...]'; } else { $statement = PMA_formatSql(PMA_SQP_parse($entry['statement'])); } $timestamp = strtotime($entry['date']); if ($timestamp >= $filter_ts_from && $timestamp <= $filter_ts_to && ( in_array('*', $filter_users) || in_array($entry['username'], $filter_users) ) ) { ?>
#
' . '' . '' . '' . ''; $str_export2 = ''; ?>
" . sprintf($strTrackingExportAs, $str_export1) . $str_export2 . "
"; ?>



\n"; } // end of report /* * List selectable tables */ $sql_query = " SELECT DISTINCT db_name, table_name FROM " . PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) . "." . PMA_backquote($GLOBALS['cfg']['Server']['tracking']) . " WHERE " . PMA_backquote('db_name') . " = '" . PMA_sqlAddslashes($GLOBALS['db']) . "' " . " ORDER BY ". PMA_backquote('db_name') . ", " . PMA_backquote('table_name'); $sql_result = PMA_query_as_controluser($sql_query); if (PMA_DBI_num_rows($sql_result) > 0) { ?>

0) { ?>
|

ALTER TABLE
RENAME TABLE
CREATE TABLE
DROP TABLE

CREATE INDEX
DROP INDEX

INSERT
UPDATE
DELETE
TRUNCATE