Merge remote-tracking branch 'origin/master' into drizzle

This commit is contained in:
Piotr Przybylski 2011-07-13 12:25:06 +02:00
commit bf9469ec18
58 changed files with 4885 additions and 3295 deletions

View File

@ -1,40 +1,33 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Events management.
*
* @package phpMyAdmin
*/
/**
* Include required files
*/
require_once './libraries/common.inc.php';
require_once './libraries/common.lib.php';
/**
* Include JavaScript libraries
*/
$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js';
$GLOBALS['js_include'][] = 'db_events.js';
$GLOBALS['js_include'][] = 'jquery/timepicker.js';
$GLOBALS['js_include'][] = 'rte/common.js';
$GLOBALS['js_include'][] = 'rte/events.js';
/**
* Create labels for the list
* Include all other files
*/
$titles = PMA_buildActionTitles();
require_once './libraries/rte/rte_events.lib.php';
/**
* Displays the header
* Do the magic
*/
require_once './libraries/db_common.inc.php';
/**
* Displays the tabs
*/
require_once './libraries/db_info.inc.php';
/**
* Displays the list of events
*/
require_once './libraries/db_events.inc.php';
/**
* Displays the footer
*/
require './libraries/footer.inc.php';
require_once './libraries/rte/rte_main.inc.php';
?>

View File

@ -11,7 +11,6 @@
*/
require_once './libraries/common.inc.php';
require_once './libraries/common.lib.php';
require_once './libraries/db_routines.lib.php';
require_once './libraries/mysql_charsets.lib.php';
if (PMA_DRIZZLE) {
require_once './libraries/data_drizzle.inc.php';
@ -24,432 +23,17 @@ if (PMA_DRIZZLE) {
*/
$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js';
$GLOBALS['js_include'][] = 'jquery/timepicker.js';
$GLOBALS['js_include'][] = 'db_routines.js';
$GLOBALS['js_include'][] = 'rte/common.js';
$GLOBALS['js_include'][] = 'rte/routines.js';
/**
* Create labels for the list
* Include all other files
*/
$titles = PMA_buildActionTitles();
if ($GLOBALS['is_ajax_request'] != true) {
/**
* Displays the header
*/
require_once './libraries/db_common.inc.php';
/**
* Displays the tabs
*/
require_once './libraries/db_info.inc.php';
} else {
if (strlen($db)) {
PMA_DBI_select_db($db);
if (! isset($url_query)) {
$url_query = PMA_generate_common_url($db);
}
}
}
require_once './libraries/rte/rte_routines.lib.php';
/**
* Process all requests
* Do the magic
*/
// Some definitions
$param_directions = array('IN',
'OUT',
'INOUT');
$param_opts_num = array('UNSIGNED',
'ZEROFILL',
'UNSIGNED ZEROFILL');
$param_sqldataaccess = array('NO SQL',
'CONTAINS SQL',
'READS SQL DATA',
'MODIFIES SQL DATA');
/**
* Generate the conditional classes that will be used to attach jQuery events to links.
*/
$ajax_class = array(
'add' => '',
'edit' => '',
'exec' => '',
'drop' => '',
'export' => ''
);
if ($GLOBALS['cfg']['AjaxEnable']) {
$ajax_class['add'] = 'class="add_routine_anchor"';
$ajax_class['edit'] = 'class="edit_routine_anchor"';
$ajax_class['exec'] = 'class="exec_routine_anchor"';
$ajax_class['drop'] = 'class="drop_routine_anchor"';
$ajax_class['export'] = 'class="export_routine_anchor"';
}
/**
* Keep a list of errors that occured while processing an 'Add' or 'Edit' operation.
*/
$routine_errors = array();
/**
* Handle all user requests other than the default of listing routines
*/
if (! empty($_REQUEST['execute_routine']) && ! empty($_REQUEST['routine_name'])) {
// Build the queries
$routine = PMA_RTN_getRoutineDataFromName($db, $_REQUEST['routine_name'], false);
if ($routine !== false) {
$queries = array();
$end_query = array();
$args = array();
for ($i=0; $i<$routine['num_params']; $i++) {
if (isset($_REQUEST['params'][$routine['param_name'][$i]])) {
$value = $_REQUEST['params'][$routine['param_name'][$i]];
if (is_array($value)) { // is SET type
$value = implode(',', $value);
}
$value = PMA_sqlAddSlashes($value);
if (! empty($_REQUEST['funcs'][$routine['param_name'][$i]])
&& in_array($_REQUEST['funcs'][$routine['param_name'][$i]], $cfg['Functions'])) {
$queries[] = "SET @p$i={$_REQUEST['funcs'][$routine['param_name'][$i]]}('$value');\n";
} else {
$queries[] = "SET @p$i='$value';\n";
}
$args[] = "@p$i";
} else {
$args[] = "@p$i";
}
if ($routine['type'] == 'PROCEDURE') {
if ($routine['param_dir'][$i] == 'OUT' || $routine['param_dir'][$i] == 'INOUT') {
$end_query[] = "@p$i AS " . PMA_backquote($routine['param_name'][$i]);
}
}
}
if ($routine['type'] == 'PROCEDURE') {
$queries[] = "CALL " . PMA_backquote($routine['name'])
. "(" . implode(', ', $args) . ");\n";
if (count($end_query)) {
$queries[] = "SELECT " . implode(', ', $end_query) . ";\n";
}
} else {
$queries[] = "SELECT " . PMA_backquote($routine['name'])
. "(" . implode(', ', $args) . ") "
. "AS " . PMA_backquote($routine['name']) . ";\n";
}
// Execute the queries
$affected = 0;
$result = null;
$outcome = true;
foreach ($queries as $num => $query) {
$resource = PMA_DBI_try_query($query);
if ($resource === false) {
$outcome = false;
break;
}
while (true) {
if(! PMA_DBI_more_results()) {
break;
}
PMA_DBI_next_result();
}
if (substr($query, 0, 6) == 'SELECT') {
$result = $resource;
} else if (substr($query, 0, 4) == 'CALL') {
$affected = PMA_DBI_affected_rows() - PMA_DBI_num_rows($resource);
}
}
// Generate output
if ($outcome) {
$message = __('Your SQL query has been executed successfully');
if ($routine['type'] == 'PROCEDURE') {
$message .= '<br />';
$message .= sprintf(_ngettext('%d row affected by the last statement inside the procedure', '%d rows affected by the last statement inside the procedure', $affected), $affected);
}
$message = PMA_message::success($message);
// Pass the SQL queries through the "pretty printer"
$output = '<code class="sql" style="margin-bottom: 1em;">';
$output .= PMA_SQP_formatHtml(PMA_SQP_parse(implode($queries)));
$output .= '</code>';
// Display results
if ($result) {
$output .= "<fieldset><legend>";
$output .= sprintf(__('Execution results of routine %s'),
PMA_backquote(htmlspecialchars($routine['name'])));
$output .= "</legend>";
$output .= "<table><tr>";
foreach (PMA_DBI_get_fields_meta($result) as $key => $field) {
$output .= "<th>" . htmlspecialchars($field->name) . "</th>";
}
$output .= "</tr>";
// Stored routines can only ever return ONE ROW.
$data = PMA_DBI_fetch_single_row($result);
foreach ($data as $key => $value) {
if ($value === null) {
$value = '<i>NULL</i>';
} else {
$value = htmlspecialchars($value);
}
$output .= "<td class='odd'>" . $value . "</td>";
}
$output .= "</table></fieldset>";
} else {
$notice = __('MySQL returned an empty result set (i.e. zero rows).');
$output .= PMA_message::notice($notice)->getDisplay();
}
} else {
$output = '';
$message = PMA_message::error(sprintf(__('The following query has failed: "%s"'), $query) . '<br /><br />'
. __('MySQL said: ') . PMA_DBI_getError(null));
}
// Print/send output
if ($GLOBALS['is_ajax_request']) {
$extra_data = array('dialog' => false);
PMA_ajaxResponse($message->getDisplay() . $output, $message->isSuccess(), $extra_data);
} else {
echo $message->getDisplay() . $output;
if ($message->isError()) {
// At least one query has failed, so shouldn't
// execute any more queries, so we quit.
exit;
}
unset($_POST);
// Now deliberately fall through to displaying the routines list
}
} else {
$message = __('Error in processing request') . ' : '
. sprintf(__('No routine with name %1$s found in database %2$s'),
htmlspecialchars(PMA_backquote($_REQUEST['routine_name'])),
htmlspecialchars(PMA_backquote($db)));
$message = PMA_message::error($message);
if ($GLOBALS['is_ajax_request']) {
PMA_ajaxResponse($message, $message->isSuccess());
} else {
echo $message->getDisplay();
unset($_POST);
}
}
} else if (! empty($_GET['execute_dialog']) && ! empty($_GET['routine_name'])) {
/**
* Display the execute form for a routine.
*/
$routine = PMA_RTN_getRoutineDataFromName($db, $_GET['routine_name'], false);
if ($routine !== false) {
$form = PMA_RTN_getExecuteForm($routine, $GLOBALS['is_ajax_request']);
if ($GLOBALS['is_ajax_request'] == true) {
$extra_data = array();
$extra_data['dialog'] = true;
$extra_data['title'] = __("Execute routine") . " ";
$extra_data['title'] .= PMA_backquote(htmlentities($_GET['routine_name'], ENT_QUOTES));
PMA_ajaxResponse($form, true, $extra_data);
} else {
echo "\n\n<h2>" . __("Execute routine") . "</h2>\n\n";
echo $form;
require './libraries/footer.inc.php';
// exit;
}
} else if (($GLOBALS['is_ajax_request'] == true)) {
$message = __('Error in processing request') . ' : '
. sprintf(__('No routine with name %1$s found in database %2$s'),
htmlspecialchars(PMA_backquote($_REQUEST['routine_name'])),
htmlspecialchars(PMA_backquote($db)));
$message = PMA_message::error($message);
PMA_ajaxResponse($message, false);
}
} else if (! empty($_GET['exportroutine']) && ! empty($_GET['routine_name'])) {
/**
* Display the export for a routine.
*/
$routine_name = htmlspecialchars(PMA_backquote($_GET['routine_name']));
$routine_type = PMA_DBI_fetch_value("SELECT ROUTINE_TYPE "
. "FROM INFORMATION_SCHEMA.ROUTINES "
. "WHERE ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' "
. "AND SPECIFIC_NAME='" . PMA_sqlAddSlashes($_GET['routine_name']) . "';");
if (! empty($routine_type) && $create_proc = PMA_DBI_get_definition($db, $routine_type, $_GET['routine_name'])) {
$create_proc = '<textarea cols="40" rows="15" style="width: 100%;">' . htmlspecialchars($create_proc) . '</textarea>';
if ($GLOBALS['is_ajax_request']) {
$extra_data = array('title' => sprintf(__('Export of routine %s'), $routine_name));
PMA_ajaxResponse($create_proc, true, $extra_data);
} else {
echo '<fieldset>' . "\n"
. ' <legend>' . sprintf(__('Export of routine %s'), $routine_name) . '</legend>' . "\n"
. $create_proc . "\n"
. '</fieldset>';
}
} else {
$response = __('Error in processing request') . ' : '
. sprintf(__('No routine with name %1$s found in database %2$s'),
$routine_name, htmlspecialchars(PMA_backquote($db)));
$response = PMA_message::error($response);
if ($GLOBALS['is_ajax_request']) {
PMA_ajaxResponse($response, false);
} else {
$response->display();
}
}
} else if (! empty($_REQUEST['routine_process_addroutine']) || ! empty($_REQUEST['routine_process_editroutine'])) {
/**
* Handle a request to create/edit a routine
*/
$sql_query = '';
$routine_query = PMA_RTN_getQueryFromRequest();
if (! count($routine_errors)) { // set by PMA_RTN_getQueryFromRequest()
// Execute the created query
if (! empty($_REQUEST['routine_process_editroutine'])) {
if (! in_array($_REQUEST['routine_original_type'], array('PROCEDURE', 'FUNCTION'))) {
$routine_errors[] = sprintf(__('Invalid routine type: "%s"'), htmlspecialchars($_REQUEST['routine_original_type']));
} else {
// Backup the old routine, in case something goes wrong
$create_routine = PMA_DBI_get_definition($db, $_REQUEST['routine_original_type'], $_REQUEST['routine_original_name']);
$drop_routine = "DROP {$_REQUEST['routine_original_type']} " . PMA_backquote($_REQUEST['routine_original_name']) . ";\n";
$result = PMA_DBI_try_query($drop_routine);
if (! $result) {
$routine_errors[] = sprintf(__('The following query has failed: "%s"'), $drop_routine) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$result = PMA_DBI_try_query($routine_query);
if (! $result) {
$routine_errors[] = sprintf(__('The following query has failed: "%s"'), $routine_query) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
// We dropped the old routine, but were unable to create the new one
// Try to restore the backup query
$result = PMA_DBI_try_query($create_routine);
if (! $result) {
// OMG, this is really bad! We dropped the query, failed to create a new one
// and now even the backup query does not execute!
// This should not happen, but we better handle this just in case.
$routine_errors[] = __('Sorry, we failed to restore the dropped routine.') . '<br />'
. __('The backed up query was:') . "\"$create_routine\"" . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
}
} else {
$message = PMA_Message::success(__('Routine %1$s has been modified.'));
$message->addParam(PMA_backquote($_REQUEST['routine_name']));
$sql_query = $drop_routine . $routine_query;
}
}
}
} else {
// 'Add a new routine' mode
$result = PMA_DBI_try_query($routine_query);
if (! $result) {
$routine_errors[] = sprintf(__('The following query has failed: "%s"'), $routine_query) . '<br /><br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$message = PMA_Message::success(__('Routine %1$s has been created.'));
$message->addParam(PMA_backquote($_REQUEST['routine_name']));
$sql_query = $routine_query;
}
}
}
if (count($routine_errors)) {
$message = PMA_Message::error(__('<b>One or more errors have occured while processing your request:</b>'));
$message->addString('<ul>');
foreach ($routine_errors as $num => $string) {
$message->addString('<li>' . $string . '</li>');
}
$message->addString('</ul>');
}
$output = PMA_showMessage($message, $sql_query);
if ($GLOBALS['is_ajax_request']) {
$extra_data = array();
if ($message->isSuccess()) {
$columns = "`SPECIFIC_NAME`, `ROUTINE_NAME`, `ROUTINE_TYPE`, `DTD_IDENTIFIER`, `ROUTINE_DEFINITION`";
$where = "ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' AND ROUTINE_NAME='" . PMA_sqlAddSlashes($_REQUEST['routine_name']) . "'";
$routine = PMA_DBI_fetch_single_row("SELECT $columns FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE $where;");
$extra_data['name'] = htmlspecialchars(strtoupper($_REQUEST['routine_name']));
$extra_data['new_row'] = PMA_RTN_getRowForRoutinesList($routine, 0, true);
$response = $output;
} else {
$response = $message;
}
PMA_ajaxResponse($response, $message->isSuccess(), $extra_data);
}
}
/**
* Display a form used to add/edit a routine, if necessary
*/
if (count($routine_errors) || ( empty($_REQUEST['routine_process_addroutine']) && empty($_REQUEST['routine_process_editroutine']) &&
(! empty($_REQUEST['addroutine']) || ! empty($_REQUEST['editroutine'])
|| ! empty($_REQUEST['routine_addparameter']) || ! empty($_REQUEST['routine_removeparameter'])
|| ! empty($_REQUEST['routine_changetype'])))) { // FIXME: this must be simpler than that
// Handle requests to add/remove parameters and changing routine type
// This is necessary when JS is disabled
$operation = '';
if (! empty($_REQUEST['routine_addparameter'])) {
$operation = 'add';
} else if (! empty($_REQUEST['routine_removeparameter'])) {
$operation = 'remove';
} else if (! empty($_REQUEST['routine_changetype'])) {
$operation = 'change';
}
// Get the data for the form (if any)
if (! empty($_REQUEST['addroutine'])) {
$title = __("Create routine");
$routine = PMA_RTN_getRoutineDataFromRequest();
$mode = 'add';
} else if (! empty($_REQUEST['editroutine'])) {
$title = __("Edit routine");
if (! $operation && ! empty($_REQUEST['routine_name']) && empty($_REQUEST['routine_process_editroutine'])) {
$routine = PMA_RTN_getRoutineDataFromName($db, $_REQUEST['routine_name']);
if ($routine !== false) {
$routine['original_name'] = $routine['name'];
$routine['original_type'] = $routine['type'];
}
} else {
$routine = PMA_RTN_getRoutineDataFromRequest();
}
$mode = 'edit';
}
if ($routine !== false) {
// Show form
$editor = PMA_RTN_getEditorForm($mode, $operation, $routine, $routine_errors, $GLOBALS['is_ajax_request']);
if ($GLOBALS['is_ajax_request']) {
$template = PMA_RTN_getParameterRow();
$extra_data = array('title' => $title, 'param_template' => $template, 'type' => $routine['type']);
PMA_ajaxResponse($editor, true, $extra_data);
}
echo "\n\n<h2>$title</h2>\n\n$editor";
require './libraries/footer.inc.php';
// exit;
} else {
$message = __('Error in processing request') . ' : '
. sprintf(__('No routine with name %1$s found in database %2$s'),
htmlspecialchars(PMA_backquote($_REQUEST['routine_name'])),
htmlspecialchars(PMA_backquote($db)));
$message = PMA_message::error($message);
if ($GLOBALS['is_ajax_request']) {
PMA_ajaxResponse($message, false);
} else {
$message->display();
}
}
}
/**
* Display a list of available routines
*/
echo PMA_RTN_getRoutinesList();
/**
* Display the form for adding a new routine, if the user has the privileges.
*/
echo PMA_RTN_getAddRoutineLink();
/**
* Display a warning for users with PHP's old "mysql" extension.
*/
if ($GLOBALS['cfg']['Server']['extension'] === 'mysql') {
trigger_error(__('You are using PHP\'s deprecated \'mysql\' extension, '
. 'which is not capable of handling multi queries. '
. '<b>The execution of some stored routines may fail!</b> '
. 'Please use the improved \'mysqli\' extension to '
. 'avoid any problems.'), E_USER_WARNING);
}
if ($GLOBALS['is_ajax_request'] != true) {
/**
* Displays the footer
*/
require './libraries/footer.inc.php';
}
require_once './libraries/rte/rte_main.inc.php';
?>

View File

@ -1,38 +1,32 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Triggers management.
*
* @package phpMyAdmin
*/
/**
*
* Include required files
*/
require_once './libraries/common.inc.php';
require_once './libraries/common.lib.php';
/**
* Include JavaScript libraries
*/
$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js';
$GLOBALS['js_include'][] = 'display_triggers.js';
$GLOBALS['js_include'][] = 'rte/common.js';
$GLOBALS['js_include'][] = 'rte/triggers.js';
/**
* Create labels for the list
* Include all other files
*/
$titles = PMA_buildActionTitles();
require_once './libraries/rte/rte_triggers.lib.php';
/**
* Displays the header
* Do the magic
*/
require_once './libraries/db_common.inc.php';
/**
* Displays the tabs
*/
require_once './libraries/db_info.inc.php';
/**
* Displays the list of triggers
*/
require_once './libraries/display_triggers.inc.php';
/**
* Displays the footer
*/
require './libraries/footer.inc.php';
require_once './libraries/rte/rte_main.inc.php';
?>

View File

@ -125,8 +125,7 @@ $time_start = time();
* Output handler for all exports, if needed buffering, it stores data into
* $dump_buffer, otherwise it prints thems out.
*
* @param string the insert statement
*
* @param string $line the insert statement
* @return bool Whether output suceeded
*/
function PMA_exportOutputHandler($line)
@ -512,7 +511,7 @@ if ($export_type == 'server') {
}
if (function_exists('PMA_exportRoutines') && strpos($GLOBALS['sql_structure_or_data'], 'structure') !== false && isset($GLOBALS['sql_procedure_function'])) {
PMA_exportRoutines($db);
PMA_exportRoutines($db);
}
$i = 0;

View File

@ -1,2 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */

View File

@ -1,568 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Validate routine editor form fields.
*
* @param syntaxHiglighter an object containing the reference to the
* codemirror editor. This will be used to
* focus the form on the codemirror editor
* if it contains invalid data.
*/
function validateRoutineEditor(syntaxHiglighter) {
/**
* @var inputname Will contain the value of the name
* attribute of input fields being checked.
*/
var inputname = '';
/**
* @var $elm a jQuery object containing the reference
* to an element that is being validated.
*/
var $elm = null;
/**
* @var isError Stores the outcome of the validation.
*/
var isError = false;
$elm = $('.rte_table').last().find('input[name=routine_name]');
if ($elm.val() == '') {
$elm.focus();
isError = true;
} else if ($elm.val().length > 64) {
alert(PMA_messages['strValueTooLong']);
$elm.focus().select();
return false;
}
if (! isError) {
$elm = $('.rte_table').find('textarea[name=routine_definition]');
if ($elm.val() == '') {
syntaxHiglighter.focus();
isError = true;
}
}
if (! isError) {
$('.routine_params_table').last().find('tr').each(function() {
if (! isError) {
$(this).find(':input').each(function() {
inputname = $(this).attr('name');
if (inputname.substr(0, 17) == 'routine_param_dir' ||
inputname.substr(0, 18) == 'routine_param_name' ||
inputname.substr(0, 18) == 'routine_param_type') {
if ($(this).val() == '') {
$(this).focus();
isError = true;
return false;
}
}
});
}
});
}
if (! isError) {
// SET, ENUM, VARCHAR and VARBINARY fields must have length/values
$('.routine_params_table').last().find('tr').each(function() {
var $inputtyp = $(this).find('select[name^=routine_param_type]');
var $inputlen = $(this).find('input[name^=routine_param_length]');
if ($inputtyp.length && $inputlen.length) {
if (($inputtyp.val() == 'ENUM' || $inputtyp.val() == 'SET' || $inputtyp.val().substr(0,3) == 'VAR')
&& $inputlen.val() == '') {
$inputlen.focus();
isError = true;
return false;
}
}
});
}
if (! isError && $('select[name=routine_type]').find(':selected').val() == 'FUNCTION') {
// The length/values of return variable for functions must
// be set, if the type is SET, ENUM, VARCHAR or VARBINARY.
var $returntyp = $('select[name=routine_returntype]');
var $returnlen = $('input[name=routine_returnlength]');
if (($returntyp.val() == 'ENUM' || $returntyp.val() == 'SET' || $returntyp.val().substr(0,3) == 'VAR')
&& $returnlen.val() == '') {
$returnlen.focus();
isError = true;
}
}
if (! isError && $('select[name=routine_type]').find(':selected').val() == 'FUNCTION') {
if ($('.rte_table').find('textarea[name=routine_definition]').val().toLowerCase().indexOf('return') < 0) {
syntaxHiglighter.focus();
alert(PMA_messages['MissingReturn']);
return false;
}
}
if (! isError) {
$elm = $('.rte_table').last().find('input[name=routine_comment]');
if ($elm.val().length > 64) {
alert(PMA_messages['strValueTooLong']);
$elm.focus().select();
return false;
}
}
if (! isError) {
return true;
} else {
alert(PMA_messages['strFormEmpty']);
return false;
}
} // end validateRoutineEditor()
/**
* Enable/disable the "options" dropdown and "length" input for
* parameters and the return variable in the routine editor
* as necessary.
*
* @param $type a jQuery object containing the reference
* to the "Type" dropdown box
* @param $len a jQuery object containing the reference
* to the "Length" input box
* @param $text a jQuery object containing the reference
* to the dropdown box with options for
* parameters of text type
* @param $num a jQuery object containing the reference
* to the dropdown box with options for
* parameters of numeric type
*/
function setOptionsForParameter($type, $len, $text, $num) {
// Process for parameter options
switch ($type.val()) {
case 'TINYINT':
case 'SMALLINT':
case 'MEDIUMINT':
case 'INT':
case 'BIGINT':
case 'DECIMAL':
case 'FLOAT':
case 'DOUBLE':
case 'REAL':
$text.parent().hide();
$num.parent().show();
break;
case 'TINYTEXT':
case 'TEXT':
case 'MEDIUMTEXT':
case 'LONGTEXT':
case 'CHAR':
case 'VARCHAR':
case 'SET':
case 'ENUM':
$text.parent().show();
$text.show();
$num.parent().hide();
break;
default:
$text.parent().show();
$text.hide();
$num.parent().hide();
break;
}
// Process for parameter length
switch ($type.val()) {
case 'DATE':
case 'DATETIME':
case 'TIME':
case 'TINYBLOB':
case 'TINYTEXT':
case 'BLOB':
case 'TEXT':
case 'MEDIUMBLOB':
case 'MEDIUMTEXT':
case 'LONGBLOB':
case 'LONGTEXT':
$len.hide();
break;
default:
$len.show();
break;
}
}
/**
* Attach Ajax event handlers for the Routines functionalities.
*
* @see $cfg['AjaxEnable']
*/
$(document).ready(function() {
/**
* @var $ajaxDialog jQuery object containing the reference to the
* dialog that contains the routine editor.
*/
var $ajaxDialog = null;
/**
* @var param_template This variable contains the template for one row
* of the parameters table that is attached to the
* dialog when a new parameter is added.
*/
var param_template = '';
/**
* @var syntaxHiglighter Reference to the codemirror editor.
*/
var syntaxHiglighter = null;
/**
* @var button_options Object containing options for jQueryUI dialog buttons
*/
var button_options = {};
/**
* Attach Ajax event handlers for the Add/Edit routine functionality.
*
* @uses PMA_ajaxShowMessage()
* @uses PMA_ajaxRemoveMessage()
*
* @see $cfg['AjaxEnable']
*/
$('.add_routine_anchor, .edit_routine_anchor').live('click', function(event) {
event.preventDefault();
/**
* @var $edit_row jQuery object containing the reference to
* the row of the the routine being edited
* from the list of routines .
*/
var $edit_row = null;
if ($(this).hasClass('edit_routine_anchor')) {
// Remeber the row of the routine being edited for later,
// so that if the edit is successful, we can replace the
// row with info about the modified routine.
$edit_row = $(this).parents('tr');
}
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user.
*/
var $msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
$.get($(this).attr('href'), {'ajax_request': true}, function(data) {
if(data.success == true) {
PMA_ajaxRemoveMessage($msg);
button_options[PMA_messages['strGo']] = function() {
syntaxHiglighter.save();
// Validate editor and submit request, if passed.
if (validateRoutineEditor(syntaxHiglighter)) {
/**
* @var data Form data to be sent in the AJAX request.
*/
var data = $('.rte_form').last().serialize();
$msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
$.post('db_routines.php', data, function (data) {
if(data.success == true) {
// Routine created successfully
PMA_ajaxRemoveMessage($msg);
PMA_slidingMessage(data.message);
$ajaxDialog.dialog('close');
// If we are in 'edit' mode, we must remove the reference to the old row.
if (mode == 'edit') {
$edit_row.remove();
}
// Insert the new row at the correct location in the list of routines
/**
* @var text Contains the name of a routine from the list
* that is used in comparisons to find the correct
* location where to insert a new row.
*/
var text = '';
/**
* @var inserted Whether a new has been inserted
* in the list of routines or not.
*/
var inserted = false;
$('table.data').find('tr').each(function() {
text = $(this).children('td').eq(0).find('strong').text().toUpperCase();
if (text != '' && text > data.name) {
$(this).before(data.new_row);
inserted = true;
return false;
}
});
if (! inserted) {
$('table.data').append(data.new_row);
}
// Fade-in the new row
$('.ajaxInsert').show('slow').removeClass('ajaxInsert');
// Now we have inserted the row at the correct position, but surely
// at least some row classes are wrong now. So we will itirate
// throught all rows and assign correct classes to them.
/**
* @var ct Count of processed rows.
*/
var ct = 0;
$('table.data').find('tr').has('td').each(function() {
rowclass = (ct % 2 == 0) ? 'even' : 'odd';
$(this).removeClass().addClass(rowclass);
ct++;
});
// If this is the first routine being added, remove the
// "No routines" message and show the list of routines.
if ($('table.data').find('tr').has('td').length > 0 && $('#nothing2display').is(':visible')) {
$('#nothing2display').hide("slow", function () {
$('table.data').show("slow");
});
}
} else {
PMA_ajaxShowMessage(data.error);
}
});
}
} // end of function that handles the submission of the Editor
button_options[PMA_messages['strClose']] = function() {
$(this).dialog("close");
}
/**
* Display the dialog to the user
*/
$ajaxDialog = $('<div>'+data.message+'</div>').dialog({
width: 700, // TODO: make a better decision about the size
height: 550, // of the dialog based on the size of the viewport
buttons: button_options,
title: data.title,
modal: true,
close: function () {
$(this).remove();
}
});
$ajaxDialog.find('input[name=routine_name]').focus();
/**
* @var mode Used to remeber whether the editor is in
* "Edit Routine" or "Add Routine" mode.
*/
var mode = 'add';
if ($('input[name=routine_process_editroutine]').length > 0) {
mode = 'edit';
}
// Cache the template for a parameter table row
param_template = data.param_template;
// Make adjustments in the dialog to make it AJAX compatible
$('.routine_param_remove').show();
$('input[name=routine_removeparameter]').remove();
$('input[name=routine_addparameter]').css('width', '100%');
// Enable/disable the 'options' dropdowns for parameters as necessary
$('.routine_params_table').last().find('th[colspan=2]').attr('colspan', '1');
$('.routine_params_table').last().find('tr').has('td').each(function() {
setOptionsForParameter(
$(this).find('select[name^=routine_param_type]'),
$(this).find('input[name^=routine_param_length]'),
$(this).find('select[name^=routine_param_opts_text]'),
$(this).find('select[name^=routine_param_opts_num]')
);
});
// Enable/disable the 'options' dropdowns for function return value as necessary
setOptionsForParameter(
$('.rte_table').last().find('select[name=routine_returntype]'),
$('.rte_table').last().find('input[name=routine_returnlength]'),
$('.rte_table').last().find('select[name=routine_returnopts_text]'),
$('.rte_table').last().find('select[name=routine_returnopts_num]')
);
// Attach syntax highlited editor to routine definition
/**
* @var $elm jQuery object containing the reference to
* the "Routine Definition" textarea.
*/
var $elm = $('textarea[name=routine_definition]').last();
/**
* @var opts Options to pass to the codemirror editor.
*/
var opts = {lineNumbers: true, matchBrackets: true, indentUnit: 4, mode: "text/x-mysql"};
syntaxHiglighter = CodeMirror.fromTextArea($elm[0], opts);
// Hack to prevent the syntax highlighter from expanding beyond dialog boundries
$('.CodeMirror-scroll').find('div').first().css('width', '1px');
} else {
PMA_ajaxShowMessage(data.error);
}
}) // end $.get()
}); // end $.live()
/**
* Attach Ajax event handlers for the "Add parameter to routine" functionality.
*
* @see $cfg['AjaxEnable']
*/
$('input[name=routine_addparameter]').live('click', function(event) {
event.preventDefault();
/**
* @var $routine_params_table jQuery object containing the reference
* to the routine parameters table.
*/
var $routine_params_table = $('.routine_params_table').last();
/**
* @var $new_param_row A string containing the HTML code for the
* new row for the routine paramaters table.
*/
var new_param_row = param_template.replace(/%s/g, $routine_params_table.find('tr').length-1);
$routine_params_table.append(new_param_row);
if ($('.rte_table').find('select[name=routine_type]').val() == 'FUNCTION') {
$('.routine_return_row').show();
$('.routine_direction_cell').hide();
}
/**
* @var $newrow jQuery object containing the reference to the newly
* inserted row in the routine parameters table.
*/
var $newrow = $('.routine_params_table').last().find('tr').has('td').last();
setOptionsForParameter(
$newrow.find('select[name^=routine_param_type]'),
$newrow.find('input[name^=routine_param_length]'),
$newrow.find('select[name^=routine_param_opts_text]'),
$newrow.find('select[name^=routine_param_opts_num]')
);
}); // end $.live()
/**
* Attach Ajax event handlers for the "Remove parameter from routine" functionality.
*
* @see $cfg['AjaxEnable']
*/
$('.routine_param_remove_anchor').live('click', function (event) {
event.preventDefault();
$(this).parent().parent().remove();
// After removing a parameter, the indices of the name attributes in
// the input fields lose the correct order and need to be reordered.
/**
* @var index Counter used for reindexing the input
* fields in the routine parameters table.
*/
var index = 0;
$('.routine_params_table').last().find('tr').has('td').each(function() {
$(this).find(':input').each(function() {
/**
* @var inputname The value of the name attribute of
* the input field being reindexed.
*/
var inputname = $(this).attr('name');
if (inputname.substr(0, 17) == 'routine_param_dir') {
$(this).attr('name', inputname.substr(0, 17) + '[' + index + ']');
} else if (inputname.substr(0, 18) == 'routine_param_name') {
$(this).attr('name', inputname.substr(0, 18) + '[' + index + ']');
} else if (inputname.substr(0, 18) == 'routine_param_type') {
$(this).attr('name', inputname.substr(0, 18) + '[' + index + ']');
} else if (inputname.substr(0, 20) == 'routine_param_length') {
$(this).attr('name', inputname.substr(0, 20) + '[' + index + ']');
} else if (inputname.substr(0, 23) == 'routine_param_opts_text') {
$(this).attr('name', inputname.substr(0, 23) + '[' + index + ']');
} else if (inputname.substr(0, 22) == 'routine_param_opts_num') {
$(this).attr('name', inputname.substr(0, 22) + '[' + index + ']');
}
});
index++;
});
}); // end $.live()
/**
* Attach Ajax event handlers for the "Change routine type" functionality.
*
* @see $cfg['AjaxEnable']
*/
$('select[name=routine_type]').live('change', function() {
$('.routine_return_row, .routine_direction_cell').toggle();
}); // end $.live()
/**
* Attach Ajax event handlers for the "Change parameter type" functionality.
*
* @see $cfg['AjaxEnable']
*/
$('select[name^=routine_param_type]').live('change', function() {
/**
* @var $row jQuery object containing the reference to
* a row in the routine parameters table.
*/
var $row = $(this).parents('tr').first();
setOptionsForParameter(
$row.find('select[name^=routine_param_type]'),
$row.find('input[name^=routine_param_length]'),
$row.find('select[name^=routine_param_opts_text]'),
$row.find('select[name^=routine_param_opts_num]')
);
});
/**
* Attach Ajax event handlers for the "Change the type of return
* variable of function" functionality.
*
* @see $cfg['AjaxEnable']
*/
$('select[name=routine_returntype]').live('change', function() {
setOptionsForParameter(
$('.rte_table').find('select[name=routine_returntype]'),
$('.rte_table').find('input[name=routine_returnlength]'),
$('.rte_table').find('select[name=routine_returnopts_text]'),
$('.rte_table').find('select[name=routine_returnopts_num]')
);
});
/**
* Attach Ajax event handlers for the Execute routine functionality.
*
* @uses PMA_ajaxShowMessage()
* @uses PMA_ajaxRemoveMessage()
*
* @see $cfg['AjaxEnable']
*/
$('.exec_routine_anchor').live('click', function(event) {
event.preventDefault();
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user.
*/
var $msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
$.get($(this).attr('href'), {'ajax_request': true}, function(data) {
if(data.success == true) {
PMA_ajaxRemoveMessage($msg);
if (data.dialog) {
button_options[PMA_messages['strGo']] = function() {
/**
* @var data Form data to be sent in the AJAX request.
*/
var data = $('.rte_form').last().serialize();
$msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
$.post('db_routines.php', data, function (data) {
if(data.success == true) {
// Routine executed successfully
PMA_ajaxRemoveMessage($msg);
PMA_slidingMessage(data.message);
$ajaxDialog.dialog('close');
} else {
PMA_ajaxShowMessage(data.error);
}
});
}
button_options[PMA_messages['strClose']] = function() {
$(this).dialog("close");
}
/**
* Display the dialog to the user
*/
$ajaxDialog = $('<div>'+data.message+'</div>').dialog({
width: 650, // TODO: make a better decision about the size
// of the dialog based on the size of the viewport
buttons: button_options,
title: data.title,
modal: true,
close: function () {
$(this).remove();
}
});
$ajaxDialog.find('input[name^=params]').first().focus();
} else {
// Routine executed successfully
PMA_slidingMessage(data.message);
}
} else {
PMA_ajaxShowMessage(data.error);
}
});
});
/**
* Attach Ajax event handlers for input fields in the routines editor
* and the routine execution dialog used to submit the Ajax request
* when the ENTER key is pressed.
*
* @see $cfg['AjaxEnable']
*/
$('input[name^=routine], input[name^=params]').live('keydown', function(e) {
if (e.which == 13) {
e.preventDefault();
if (typeof button_options[PMA_messages['strGo']] == 'function') {
button_options[PMA_messages['strGo']].call();
}
}
});
}); // end of $(document).ready() for the Routine Functionalities

View File

@ -1,2 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */

View File

@ -1816,6 +1816,76 @@ $(document).ready(function() {
}, 'top.frame_content'); //end $(document).ready for 'Create Table'
/**
* jQuery coding for 'Change Table'. Used on tbl_structure.php *
* Attach Ajax Event handlers for Change Table
*/
$(document).ready(function() {
/**
*Ajax action for submitting the column change form
**/
$("#append_fields_form input[name=do_save_data]").live('click', function(event) {
event.preventDefault();
/**
* @var the_form object referring to the export form
*/
var $form = $("#append_fields_form");
/*
* First validate the form; if there is a problem, avoid submitting it
*
* checkTableEditForm() needs a pure element and not a jQuery object,
* this is why we pass $form[0] as a parameter (the jQuery object
* is actually an array of DOM elements)
*/
if (checkTableEditForm($form[0], $form.find('input[name=orig_num_fields]').val())) {
// OK, form passed validation step
if ($form.hasClass('ajax')) {
PMA_prepareForAjaxRequest($form);
//User wants to submit the form
$.post($form.attr('action'), $form.serialize()+"&do_save_data=Save", function(data) {
if ($("#sqlqueryresults").length != 0) {
$("#sqlqueryresults").remove();
} else if ($(".error").length != 0) {
$(".error").remove();
}
if (data.success == true) {
PMA_ajaxShowMessage(data.message);
$("<div id='sqlqueryresults'></div>").insertAfter("#topmenucontainer");
$("#sqlqueryresults").html(data.sql_query);
$("#result_query .notice").remove();
$("#result_query").prepend((data.message));
if ($("#change_column_dialog").length > 0) {
$("#change_column_dialog").dialog("close").remove();
}
/*Reload the field form*/
$.post($("#fieldsForm").attr('action'), $("#fieldsForm").serialize()+"&ajax_request=true", function(form_data) {
$("#fieldsForm").remove();
var $temp_div = $("<div id='temp_div'><div>").append(form_data);
if ($("#sqlqueryresults").length != 0) {
$temp_div.find("#fieldsForm").insertAfter("#sqlqueryresults");
} else {
$temp_div.find("#fieldsForm").insertAfter(".error");
}
/*Call the function to display the more options in table*/
displayMoreTableOpts();
});
} else {
var $temp_div = $("<div id='temp_div'><div>").append(data);
var $error = $temp_div.find(".error code").addClass("error");
PMA_ajaxShowMessage($error);
}
}) // end $.post()
} else {
// non-Ajax submit
$form.append('<input type="hidden" name="do_save_data" value="Save" />');
$form.submit();
}
}
}) // end change table button "do_save_data"
}, 'top.frame_content'); //end $(document).ready for 'Change Table'
/**
* Attach Ajax event handlers for Drop Database. Moved here from db_structure.js
* as it was also required on db_create.php
@ -2355,6 +2425,136 @@ function PMA_init_slider() {
});
}
/**
* var toggleButton This is a function that creates a toggle
* sliding button given a jQuery reference
* to the correct DOM element
*/
var toggleButton = function ($obj) {
// In rtl mode the toggle switch is flipped horizontally
// so we need to take that into account
if ($('.text_direction', $obj).text() == 'ltr') {
var right = 'right';
} else {
var right = 'left';
}
/**
* var h Height of the button, used to scale the
* background image and position the layers
*/
var h = $obj.height();
$('img', $obj).height(h);
$('table', $obj).css('bottom', h-1);
/**
* var on Width of the "ON" part of the toggle switch
* var off Width of the "OFF" part of the toggle switch
*/
var on = $('.toggleOn', $obj).width();
var off = $('.toggleOff', $obj).width();
// Make the "ON" and "OFF" parts of the switch the same size
$('.toggleOn > div', $obj).width(Math.max(on, off));
$('.toggleOff > div', $obj).width(Math.max(on, off));
/**
* var w Width of the central part of the switch
*/
var w = parseInt(($('img', $obj).height() / 16) * 22, 10);
// Resize the central part of the switch on the top
// layer to match the background
$('table td:nth-child(2) > div', $obj).width(w);
/**
* var imgw Width of the background image
* var tblw Width of the foreground layer
* var offset By how many pixels to move the background
* image, so that it matches the top layer
*/
var imgw = $('img', $obj).width();
var tblw = $('table', $obj).width();
var offset = parseInt(((imgw - tblw) / 2), 10);
// Move the background to match the layout of the top layer
$obj.find('img').css(right, offset);
/**
* var offw Outer width of the "ON" part of the toggle switch
* var btnw Outer width of the central part of the switch
*/
var offw = $('.toggleOff', $obj).outerWidth();
var btnw = $('table td:nth-child(2)', $obj).outerWidth();
// Resize the main div so that exactly one side of
// the switch plus the central part fit into it.
$obj.width(offw + btnw + 2);
/**
* var move How many pixels to move the
* switch by when toggling
*/
var move = $('.toggleOff', $obj).outerWidth();
// If the switch is initialized to the
// OFF state we need to move it now.
if ($('.container', $obj).hasClass('off')) {
if (right == 'right') {
$('table, img', $obj).animate({'left': '-=' + move + 'px'}, 0);
} else {
$('table, img', $obj).animate({'left': '+=' + move + 'px'}, 0);
}
}
// Attach an 'onclick' event to the switch
$('.container', $obj).click(function () {
if ($(this).hasClass('isActive')) {
return false;
} else {
$(this).addClass('isActive');
}
var $msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
var $container = $(this);
var callback = $('.callback', this).text();
// Perform the actual toggle
if ($(this).hasClass('on')) {
if (right == 'right') {
var operator = '-=';
} else {
var operator = '+=';
}
var url = $(this).find('.toggleOff > span').text();
var removeClass = 'on';
var addClass = 'off';
} else {
if (right == 'right') {
var operator = '+=';
} else {
var operator = '-=';
}
var url = $(this).find('.toggleOn > span').text();
var removeClass = 'off';
var addClass = 'on';
}
$.post(url, {'ajax_request': true}, function(data) {
if(data.success == true) {
PMA_ajaxRemoveMessage($msg);
$container
.removeClass(removeClass)
.addClass(addClass)
.animate({'left': operator + move + 'px'}, function () {
$container.removeClass('isActive');
});
eval(callback);
} else {
PMA_ajaxShowMessage(data.error);
$container.removeClass('isActive');
}
});
});
};
/**
* Initialise all toggle buttons
*/
$(window).load(function () {
$('.toggleAjax').each(function () {
$(this)
.show()
.find('.toggleButton')
toggleButton($(this));
});
});
/**
* Vertical pointer
*/
@ -2458,44 +2658,6 @@ $(document).ready(function() {
}) // end of $(document).ready()
/**
* Attach Ajax event handlers for Export of Routines, Triggers and Events.
*
* @uses PMA_ajaxShowMessage()
* @uses PMA_ajaxRemoveMessage()
*
* @see $cfg['AjaxEnable']
*/
$(document).ready(function() {
$('.export_routine_anchor, .export_trigger_anchor, .export_event_anchor').live('click', function(event) {
event.preventDefault();
var $msg = PMA_ajaxShowMessage(PMA_messages['strLoading']);
$.get($(this).attr('href'), {'ajax_request': true}, function(data) {
if(data.success == true) {
PMA_ajaxRemoveMessage($msg);
/**
* @var button_options Object containing options for jQueryUI dialog buttons
*/
var button_options = {};
button_options[PMA_messages['strClose']] = function() {$(this).dialog("close").remove();}
/**
* Display the dialog to the user
*/
var $ajaxDialog = $('<div>'+data.message+'</div>').dialog({
width: 500,
buttons: button_options,
title: data.title
});
// Attach syntax highlited editor to export dialog
var elm = $ajaxDialog.find('textarea');
CodeMirror.fromTextArea(elm[0], {lineNumbers: true, matchBrackets: true, indentUnit: 4, mode: "text/x-mysql"});
} else {
PMA_ajaxShowMessage(data.error);
}
}) // end $.get()
}); // end $.live()
}); // end of $(document).ready() for Export of Routines, Triggers and Events.
/**
* Creates a message inside an object with a sliding effect
*
@ -2573,69 +2735,6 @@ function PMA_slidingMessage(msg, $obj) {
return true;
} // end PMA_slidingMessage()
/**
* Attach Ajax event handlers for Drop functionality of Routines, Triggers and Events.
*
* @uses $.PMA_confirm()
* @uses PMA_ajaxShowMessage()
* @see $cfg['AjaxEnable']
*/
$(document).ready(function() {
$('.drop_routine_anchor, .drop_trigger_anchor, .drop_event_anchor').live('click', function(event) {
event.preventDefault();
/**
* @var $curr_row Object containing reference to the current row
*/
var $curr_row = $(this).parents('tr');
/**
* @var question String containing the question to be asked for confirmation
*/
var question = $('<div></div>').text($curr_row.children('td').children('.drop_sql').html());
$(this).PMA_confirm(question, $(this).attr('href'), function(url) {
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user.
*/
var $msg = PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']);
$.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) {
if(data.success == true) {
/**
* @var $table Object containing reference to the main list of elements.
*/
var $table = $curr_row.parent();
if ($table.find('tr').length == 2) {
$table.hide("slow", function () {
$(this).find('tr.even, tr.odd').remove();
$('#nothing2display').show("slow");
});
} else {
$curr_row.hide("slow", function () {
$(this).remove();
// Now we have removed the row from the list, but maybe
// some row classes are wrong now. So we will itirate
// throught all rows and assign correct classes to them.
/**
* @var ct Count of processed rows.
*/
var ct = 0;
$table.find('tr').has('td').each(function() {
rowclass = (ct % 2 == 0) ? 'even' : 'odd';
$(this).removeClass().addClass(rowclass);
ct++;
});
});
}
// Show the query that we just executed
PMA_ajaxRemoveMessage($msg);
PMA_slidingMessage(data.sql_query);
} else {
PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error);
}
}) // end $.get()
}) // end $.PMA_confirm()
}); // end $.live()
}); //end $(document).ready() for Drop functionality of Routines, Triggers and Events.
/**
* Attach Ajax event handlers for Drop Table.
*

View File

@ -122,7 +122,6 @@ $js_messages['strDeleting'] = __('Deleting');
/* For db_routines.js */
$js_messages['MissingReturn'] = __('The definition of a stored function must contain a RETURN statement!');
$js_messages['strValueTooLong'] = __('Value too long in the form!');
/* For import.js */
$js_messages['strImportCSV'] = __('Note: If the file contains multiple tables, they will be combined into one');

380
js/rte/common.js Normal file
View File

@ -0,0 +1,380 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @var RTE a JavaScript namespace containing the functionality
* for Routines, Triggers and Events.
*
* This namespace is extended by the functionality required
* to handle a specific item (a routine, trigger or event)
* in the relevant javascript files in this folder.
*/
var RTE = {
/**
* @var $ajaxDialog jQuery object containing the reference to the
* dialog that contains the editor.
*/
$ajaxDialog: null,
/**
* @var syntaxHiglighter Reference to the codemirror editor.
*/
syntaxHiglighter: null,
/**
* @var buttonOptions Object containing options for
* the jQueryUI dialog buttons
*/
buttonOptions: {},
/**
* Validate editor form fields.
*/
validate: function () {
/**
* @var $elm a jQuery object containing the reference
* to an element that is being validated.
*/
var $elm = null;
// Common validation. At the very least the name
// and the definition must be provided for an item
$elm = $('.rte_table').last().find('input[name=item_name]');
if ($elm.val() === '') {
$elm.focus();
alert(PMA_messages['strFormEmpty']);
return false;
}
$elm = $('.rte_table').find('textarea[name=item_definition]');
if ($elm.val() === '') {
this.syntaxHiglighter.focus();
alert(PMA_messages['strFormEmpty']);
return false;
}
// The validation has so far passed, so now
// we can validate item-specific fields.
return RTE.validateCustom();
}, // end validate()
/**
* Validate custom editor form fields.
* This function can be overridden by
* other files in this folder.
*/
validateCustom: function () {
return true;
}, // end validateCustom()
/**
* Execute some code after the ajax
* dialog for the ditor is shown.
* This function can be overridden by
* other files in this folder.
*/
postDialogShow: function () {
// Nothing by default
} // end postDialogShow()
}; // end RTE namespace
/**
* Attach Ajax event handlers for the Routines, Triggers and Events editor.
*
* @see $cfg['AjaxEnable']
*/
$(document).ready(function () {
/**
* Attach Ajax event handlers for the Add/Edit functionality.
*/
$('.ajax_add_anchor, .ajax_edit_anchor').live('click', function (event) {
event.preventDefault();
/**
* @var $edit_row jQuery object containing the reference to
* the row of the the item being edited
* from the list of items .
*/
var $edit_row = null;
if ($(this).hasClass('ajax_edit_anchor')) {
// Remeber the row of the item being edited for later,
// so that if the edit is successful, we can replace the
// row with info about the modified item.
$edit_row = $(this).parents('tr');
}
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user.
*/
var $msg = PMA_ajaxShowMessage();
$.get($(this).attr('href'), {'ajax_request': true}, function (data) {
if (data.success === true) {
// We have successfully fetched the editor form
PMA_ajaxRemoveMessage($msg);
// Now define the function that is called when
// the user presses the "Go" button
RTE.buttonOptions[PMA_messages['strGo']] = function () {
// Move the data from the codemirror editor back to the
// textarea, where it can be used in the form submission.
RTE.syntaxHiglighter.save();
// Validate editor and submit request, if passed.
if (RTE.validate()) {
/**
* @var data Form data to be sent in the AJAX request.
*/
var data = $('.rte_form').last().serialize();
$msg = PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']);
$.post($('.rte_form').last().attr('action'), data, function (data) {
if (data.success === true) {
// Item created successfully
PMA_ajaxRemoveMessage($msg);
PMA_slidingMessage(data.message);
RTE.$ajaxDialog.dialog('close');
// If we are in 'edit' mode, we must remove the reference to the old row.
if (mode === 'edit') {
$edit_row.remove();
}
// Sometimes, like when moving a trigger from a table to
// another one, the new row should not be inserted into the
// list. In this case "data.insert" will be set to false.
if (data.insert) {
// Insert the new row at the correct location in the list of items
/**
* @var text Contains the name of an item from the list
* that is used in comparisons to find the correct
* location where to insert a new row.
*/
var text = '';
/**
* @var inserted Whether a new item has been inserted
* in the list or not.
*/
var inserted = false;
$('table.data').find('tr').each(function () {
text = $(this)
.children('td')
.eq(0)
.find('strong')
.text()
.toUpperCase();
text = $.trim(text);
if (text !== '' && text > data.name) {
$(this).before(data.new_row);
inserted = true;
return false;
}
});
if (! inserted) {
// If we didn't manage to insert the row yet,
// it must belong at the end of the list,
// so we insert it there.
$('table.data').append(data.new_row);
}
// Fade-in the new row
$('.ajaxInsert').show('slow').removeClass('ajaxInsert');
} else if ($('table.data').find('tr').has('td').length === 0) {
// If we are not supposed to insert the new row, we will now
// check if the table is empty and needs to be hidden. This
// will be the case if we were editing the only item in the
// list, which we removed and will not be inserting something
// else in its place.
$('table.data').hide("slow", function () {
$('#nothing2display').show("slow");
});
}
// Now we have inserted the row at the correct position, but surely
// at least some row classes are wrong now. So we will itirate
// throught all rows and assign correct classes to them.
/**
* @var ct Count of processed rows.
*/
var ct = 0;
/**
* @var rowclass Class to be attached to the row
* that is being processed
*/
var rowclass = '';
$('table.data').find('tr').has('td').each(function () {
rowclass = (ct % 2 === 0) ? 'even' : 'odd';
$(this).removeClass().addClass(rowclass);
ct++;
});
// If this is the first item being added, remove
// the "No items" message and show the list.
if ($('table.data').find('tr').has('td').length > 0
&& $('#nothing2display').is(':visible')) {
$('#nothing2display').hide("slow", function () {
$('table.data').show("slow");
});
}
} else {
PMA_ajaxShowMessage(data.error);
}
}); // end $.post()
} // end "if (RTE.validate())"
}; // end of function that handles the submission of the Editor
RTE.buttonOptions[PMA_messages['strClose']] = function () {
$(this).dialog("close");
};
/**
* Display the dialog to the user
*/
RTE.$ajaxDialog = $('<div>' + data.message + '</div>').dialog({
width: 700,
height: 555,
buttons: RTE.buttonOptions,
title: data.title,
modal: true,
close: function () {
$(this).remove();
}
});
RTE.$ajaxDialog.find('input[name=item_name]').focus();
RTE.$ajaxDialog.find('.datefield, .datetimefield').each(function () {
PMA_addDatepicker($(this).css('width', '95%'));
});
/**
* @var mode Used to remeber whether the editor is in
* "Edit" or "Add" mode.
*/
var mode = 'add';
if ($('input[name=editor_process_edit]').length > 0) {
mode = 'edit';
}
// Attach syntax highlited editor to the definition
/**
* @var $elm jQuery object containing the reference to
* the Definition textarea.
*/
var $elm = $('textarea[name=item_definition]').last();
/**
* @var opts Options to pass to the codemirror editor.
*/
var opts = {lineNumbers: true, matchBrackets: true, indentUnit: 4, mode: "text/x-mysql"};
RTE.syntaxHiglighter = CodeMirror.fromTextArea($elm[0], opts);
// Hack to prevent the syntax highlighter from expanding beyond dialog boundries
$('.CodeMirror-scroll').find('div').first().css('width', '1px');
// Execute item-specific code
RTE.postDialogShow(data);
} else {
PMA_ajaxShowMessage(data.error);
}
}); // end $.get()
}); // end $.live()
/**
* Attach Ajax event handlers for input fields in the editor
* and the routine execution dialog used to submit the Ajax
* request when the ENTER key is pressed.
*/
$('.rte_table').find('input[name^=item], input[name^=params]').live('keydown', function (e) {
if (e.which === 13) { // 13 is the ENTER key
e.preventDefault();
if (typeof RTE.buttonOptions[PMA_messages['strGo']] === 'function') {
RTE.buttonOptions[PMA_messages['strGo']].call();
}
}
}); // end $.live()
/**
* Attach Ajax event handlers for Export of Routines, Triggers and Events.
*/
$('.ajax_export_anchor').live('click', function (event) {
event.preventDefault();
var $msg = PMA_ajaxShowMessage();
// Fire the ajax request straight away
$.get($(this).attr('href'), {'ajax_request': true}, function (data) {
if (data.success === true) {
PMA_ajaxRemoveMessage($msg);
/**
* @var button_options Object containing options for jQueryUI dialog buttons
*/
var button_options = {};
button_options[PMA_messages['strClose']] = function () {
$(this).dialog("close").remove();
};
/**
* Display the dialog to the user
*/
var $ajaxDialog = $('<div>' + data.message + '</div>').dialog({
width: 500,
buttons: button_options,
title: data.title
});
// Attach syntax highlited editor to export dialog
/**
* @var $elm jQuery object containing the reference
* to the Export textarea.
*/
var $elm = $ajaxDialog.find('textarea');
/**
* @var opts Options to pass to the codemirror editor.
*/
var opts = {lineNumbers: true, matchBrackets: true, indentUnit: 4, mode: "text/x-mysql"};
CodeMirror.fromTextArea($elm[0], opts);
} else {
PMA_ajaxShowMessage(data.error);
}
}); // end $.get()
}); // end $.live()
/**
* Attach Ajax event handlers for Drop functionality of Routines, Triggers and Events.
*/
$('.ajax_drop_anchor').live('click', function (event) {
event.preventDefault();
/**
* @var $curr_row Object containing reference to the current row
*/
var $curr_row = $(this).parents('tr');
/**
* @var question String containing the question to be asked for confirmation
*/
var question = $('<div></div>').text($curr_row.children('td').children('.drop_sql').html());
// We ask for confirmation first here, before submitting the ajax request
$(this).PMA_confirm(question, $(this).attr('href'), function (url) {
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user.
*/
var $msg = PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']);
$.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function (data) {
if (data.success === true) {
/**
* @var $table Object containing reference to the main list of elements.
*/
var $table = $curr_row.parent();
// Check how many rows will be left after we remove
// the one that the user has requested us to remove
if ($table.find('tr').length === 2) {
// If there are two rows left, it means that they are
// the header of the table and the rows that we are
// about to remove, so after the removal there will be
// nothing to show in the table, so we hide it.
$table.hide("slow", function () {
$(this).find('tr.even, tr.odd').remove();
$('#nothing2display').show("slow");
});
} else {
$curr_row.hide("slow", function () {
$(this).remove();
// Now we have removed the row from the list, but maybe
// some row classes are wrong now. So we will itirate
// throught all rows and assign correct classes to them.
/**
* @var ct Count of processed rows.
*/
var ct = 0;
/**
* @var rowclass Class to be attached to the row
* that is being processed
*/
var rowclass = '';
$table.find('tr').has('td').each(function () {
rowclass = (ct % 2 === 0) ? 'even' : 'odd';
$(this).removeClass().addClass(rowclass);
ct++;
});
});
}
// Get rid of the "Loading" message
PMA_ajaxRemoveMessage($msg);
// Show the query that we just executed
PMA_slidingMessage(data.sql_query);
} else {
PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error);
}
}); // end $.get()
}); // end $.PMA_confirm()
}); // end $.live()
}); // end of $(document).ready()

43
js/rte/events.js Normal file
View File

@ -0,0 +1,43 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Overriding the validateCustom() function defined in common.js
*/
RTE.validateCustom = function () {
/**
* @var $elm a jQuery object containing the reference
* to an element that is being validated.
*/
var $elm = null;
if ($('select[name=item_type]').find(':selected').val() === 'RECURRING') {
// The interval field must not be empty for recurring events
$elm = $('input[name=item_interval_value]');
if ($elm.val() === '') {
$elm.focus();
alert(PMA_messages['strFormEmpty']);
return false;
}
} else {
// The execute_at field must not be empty for "once off" events
$elm = $('input[name=item_execute_at]');
if ($elm.val() === '') {
$elm.focus();
alert(PMA_messages['strFormEmpty']);
return false;
}
}
return true;
}; // end RTE.validateCustom()
/**
* Attach Ajax event handlers for the "Change event type"
* functionality in the events editor, so that the correct
* rows are shown in the editor when changing the event type
*
* @see $cfg['AjaxEnable']
*/
$(document).ready(function () {
$('select[name=item_type]').live('change', function () {
$('.recurring_event_row, .onetime_event_row').toggle();
}); // end $.live()
}); // end of $(document).ready()

395
js/rte/routines.js Normal file
View File

@ -0,0 +1,395 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @var param_template This variable contains the template for one row
* of the parameters table that is attached to the
* dialog when a new parameter is added.
*/
RTE.param_template = '';
/**
* Overriding the postDialogShow() function defined in common.js
*
* @param data JSON-encoded data from the ajax request
*/
RTE.postDialogShow = function (data) {
// Cache the template for a parameter table row
RTE.param_template = data.param_template;
// Make adjustments in the dialog to make it AJAX compatible
$('.routine_param_remove').show();
$('input[name=routine_removeparameter]').remove();
$('input[name=routine_addparameter]').css('width', '100%');
// Enable/disable the 'options' dropdowns for parameters as necessary
$('.routine_params_table').last().find('th[colspan=2]').attr('colspan', '1');
$('.routine_params_table').last().find('tr').has('td').each(function () {
RTE.setOptionsForParameter(
$(this).find('select[name^=item_param_type]'),
$(this).find('input[name^=item_param_length]'),
$(this).find('select[name^=item_param_opts_text]'),
$(this).find('select[name^=item_param_opts_num]')
);
});
// Enable/disable the 'options' dropdowns for
// function return value as necessary
RTE.setOptionsForParameter(
$('.rte_table').last().find('select[name=item_returntype]'),
$('.rte_table').last().find('input[name=item_returnlength]'),
$('.rte_table').last().find('select[name=item_returnopts_text]'),
$('.rte_table').last().find('select[name=item_returnopts_num]')
);
}; // end RTE.postDialogShow()
/**
* Overriding the validateCustom() function defined in common.js
*/
RTE.validateCustom = function () {
/**
* @var isSuccess Stores the outcome of the validation
*/
var isSuccess = true;
/**
* @var inputname The value of the "name" attribute for
* the field that is being processed
*/
var inputname = '';
$('.routine_params_table').last().find('tr').each(function () {
// Every parameter of a routine must have
// a non-empty direction, name and type
if (isSuccess) {
$(this).find(':input').each(function () {
inputname = $(this).attr('name');
if (inputname.substr(0, 17) === 'item_param_dir' ||
inputname.substr(0, 18) === 'item_param_name' ||
inputname.substr(0, 18) === 'item_param_type') {
if ($(this).val() === '') {
$(this).focus();
isSuccess = false;
return false;
}
}
});
} else {
return false;
}
});
if (! isSuccess) {
alert(PMA_messages['strFormEmpty']);
return false;
}
$('.routine_params_table').last().find('tr').each(function () {
// SET, ENUM, VARCHAR and VARBINARY fields must have length/values
var $inputtyp = $(this).find('select[name^=item_param_type]');
var $inputlen = $(this).find('input[name^=item_param_length]');
if ($inputtyp.length && $inputlen.length) {
if (($inputtyp.val() === 'ENUM' || $inputtyp.val() === 'SET' || $inputtyp.val().substr(0, 3) === 'VAR')
&& $inputlen.val() === '') {
$inputlen.focus();
isSuccess = false;
return false;
}
}
});
if (! isSuccess) {
alert(PMA_messages['strFormEmpty']);
return false;
}
if ($('select[name=item_type]').find(':selected').val() === 'FUNCTION') {
// The length/values of return variable for functions must
// be set, if the type is SET, ENUM, VARCHAR or VARBINARY.
var $returntyp = $('select[name=item_returntype]');
var $returnlen = $('input[name=item_returnlength]');
if (($returntyp.val() === 'ENUM' || $returntyp.val() === 'SET' || $returntyp.val().substr(0, 3) === 'VAR')
&& $returnlen.val() === '') {
$returnlen.focus();
alert(PMA_messages['strFormEmpty']);
return false;
}
}
if ($('select[name=item_type]').find(':selected').val() === 'FUNCTION') {
// A function must contain a RETURN statement in its definition
if ($('.rte_table').find('textarea[name=item_definition]').val().toUpperCase().indexOf('RETURN') < 0) {
RTE.syntaxHiglighter.focus();
alert(PMA_messages['MissingReturn']);
return false;
}
}
return true;
}; // end RTE.validateCustom()
/**
* Enable/disable the "options" dropdown and "length" input for
* parameters and the return variable in the routine editor
* as necessary.
*
* @param $type a jQuery object containing the reference
* to the "Type" dropdown box
* @param $len a jQuery object containing the reference
* to the "Length" input box
* @param $text a jQuery object containing the reference
* to the dropdown box with options for
* parameters of text type
* @param $num a jQuery object containing the reference
* to the dropdown box with options for
* parameters of numeric type
*/
RTE.setOptionsForParameter = function ($type, $len, $text, $num) {
/**
* @var $no_opts a jQuery object containing the reference
* to an element to be displayed when no
* options are available
*/
var $no_opts = $text.parent().parent().find('.no_opts');
/**
* @var $no_len a jQuery object containing the reference
* to an element to be displayed when no
* "length/values" field is available
*/
var $no_len = $len.parent().parent().find('.no_len');
// Process for parameter options
switch ($type.val()) {
case 'TINYINT':
case 'SMALLINT':
case 'MEDIUMINT':
case 'INT':
case 'BIGINT':
case 'DECIMAL':
case 'FLOAT':
case 'DOUBLE':
case 'REAL':
$text.parent().hide();
$num.parent().show();
$no_opts.hide();
break;
case 'TINYTEXT':
case 'TEXT':
case 'MEDIUMTEXT':
case 'LONGTEXT':
case 'CHAR':
case 'VARCHAR':
case 'SET':
case 'ENUM':
$text.parent().show();
$num.parent().hide();
$no_opts.hide();
break;
default:
$text.parent().hide();
$num.parent().hide();
$no_opts.show();
break;
}
// Process for parameter length
switch ($type.val()) {
case 'DATE':
case 'DATETIME':
case 'TIME':
case 'TINYBLOB':
case 'TINYTEXT':
case 'BLOB':
case 'TEXT':
case 'MEDIUMBLOB':
case 'MEDIUMTEXT':
case 'LONGBLOB':
case 'LONGTEXT':
$len.parent().hide();
$no_len.show();
break;
default:
$len.parent().show();
$no_len.hide();
break;
}
}; // end RTE.setOptionsForParameter()
/**
* Attach Ajax event handlers for the Routines functionalities.
*
* @see $cfg['AjaxEnable']
*/
$(document).ready(function () {
/**
* Attach Ajax event handlers for the "Add parameter to routine" functionality.
*/
$('input[name=routine_addparameter]').live('click', function (event) {
event.preventDefault();
/**
* @var $routine_params_table jQuery object containing the reference
* to the routine parameters table.
*/
var $routine_params_table = $('.routine_params_table').last();
/**
* @var $new_param_row A string containing the HTML code for the
* new row for the routine paramaters table.
*/
var new_param_row = RTE.param_template.replace(/%s/g, $routine_params_table.find('tr').length - 1);
// Append the new row to the parameters table
$routine_params_table.append(new_param_row);
// Make sure that the row is correctly shown according to the type of routine
if ($('.rte_table').find('select[name=item_type]').val() === 'FUNCTION') {
$('.routine_return_row').show();
$('.routine_direction_cell').hide();
}
/**
* @var $newrow jQuery object containing the reference to the newly
* inserted row in the routine parameters table.
*/
var $newrow = $('.routine_params_table').last().find('tr').has('td').last();
// Enable/disable the 'options' dropdowns for parameters as necessary
RTE.setOptionsForParameter(
$newrow.find('select[name^=item_param_type]'),
$newrow.find('input[name^=item_param_length]'),
$newrow.find('select[name^=item_param_opts_text]'),
$newrow.find('select[name^=item_param_opts_num]')
);
}); // end $.live()
/**
* Attach Ajax event handlers for the "Remove parameter from routine" functionality.
*/
$('.routine_param_remove_anchor').live('click', function (event) {
event.preventDefault();
$(this).parent().parent().remove();
// After removing a parameter, the indices of the name attributes in
// the input fields lose the correct order and need to be reordered.
/**
* @var index Counter used for reindexing the input
* fields in the routine parameters table.
*/
var index = 0;
$('.routine_params_table').last().find('tr').has('td').each(function () {
$(this).find(':input').each(function () {
/**
* @var inputname The value of the name attribute of
* the input field being reindexed.
*/
var inputname = $(this).attr('name');
if (inputname.substr(0, 17) === 'item_param_dir') {
$(this).attr('name', inputname.substr(0, 17) + '[' + index + ']');
} else if (inputname.substr(0, 18) === 'item_param_name') {
$(this).attr('name', inputname.substr(0, 18) + '[' + index + ']');
} else if (inputname.substr(0, 18) === 'item_param_type') {
$(this).attr('name', inputname.substr(0, 18) + '[' + index + ']');
} else if (inputname.substr(0, 20) === 'item_param_length') {
$(this).attr('name', inputname.substr(0, 20) + '[' + index + ']');
} else if (inputname.substr(0, 23) === 'item_param_opts_text') {
$(this).attr('name', inputname.substr(0, 23) + '[' + index + ']');
} else if (inputname.substr(0, 22) === 'item_param_opts_num') {
$(this).attr('name', inputname.substr(0, 22) + '[' + index + ']');
}
});
index++;
});
}); // end $.live()
/**
* Attach Ajax event handlers for the "Change routine type"
* functionality in the routines editor, so that the correct
* fields are shown in the editor when changing the routine type
*/
$('select[name=item_type]').live('change', function () {
$('.routine_return_row, .routine_direction_cell').toggle();
}); // end $.live()
/**
* Attach Ajax event handlers for the "Change parameter type"
* functionality in the routines editor, so that the correct
* option/length fields, if any, are shown when changing
* a parameter type
*/
$('select[name^=item_param_type]').live('change', function () {
/**
* @var $row jQuery object containing the reference to
* a row in the routine parameters table
*/
var $row = $(this).parents('tr').first();
RTE.setOptionsForParameter(
$row.find('select[name^=item_param_type]'),
$row.find('input[name^=item_param_length]'),
$row.find('select[name^=item_param_opts_text]'),
$row.find('select[name^=item_param_opts_num]')
);
}); // end $.live()
/**
* Attach Ajax event handlers for the "Change the type of return
* variable of function" functionality, so that the correct fields,
* if any, are shown when changing the function return type type
*/
$('select[name=item_returntype]').live('change', function () {
RTE.setOptionsForParameter(
$('.rte_table').find('select[name=item_returntype]'),
$('.rte_table').find('input[name=item_returnlength]'),
$('.rte_table').find('select[name=item_returnopts_text]'),
$('.rte_table').find('select[name=item_returnopts_num]')
);
}); // end $.live()
/**
* Attach Ajax event handlers for the Execute routine functionality.
*/
$('.ajax_exec_anchor').live('click', function (event) {
event.preventDefault();
/**
* @var $msg jQuery object containing the reference to
* the AJAX message shown to the user
*/
var $msg = PMA_ajaxShowMessage();
$.get($(this).attr('href'), {'ajax_request': true}, function (data) {
if (data.success === true) {
PMA_ajaxRemoveMessage($msg);
// If 'data.dialog' is true we show a dialog with a form
// to get the input parameters for routine, otherwise
// we just show the results of the query
if (data.dialog) {
// Define the function that is called when
// the user presses the "Go" button
RTE.buttonOptions[PMA_messages['strGo']] = function () {
/**
* @var data Form data to be sent in the AJAX request.
*/
var data = $('.rte_form').last().serialize();
$msg = PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']);
$.post('db_routines.php', data, function (data) {
if (data.success === true) {
// Routine executed successfully
PMA_ajaxRemoveMessage($msg);
PMA_slidingMessage(data.message);
$ajaxDialog.dialog('close');
} else {
PMA_ajaxShowMessage(data.error);
}
});
};
RTE.buttonOptions[PMA_messages['strClose']] = function () {
$(this).dialog("close");
};
/**
* Display the dialog to the user
*/
$ajaxDialog = $('<div>' + data.message + '</div>').dialog({
width: 650,
buttons: RTE.buttonOptions,
title: data.title,
modal: true,
close: function () {
$(this).remove();
}
});
$ajaxDialog.find('input[name^=params]').first().focus();
/**
* Attach the datepickers to the relevant form fields
*/
$ajaxDialog.find('.datefield, .datetimefield').each(function () {
PMA_addDatepicker($(this).css('width', '95%'));
});
} else {
// Routine executed successfully
PMA_slidingMessage(data.message);
}
} else {
PMA_ajaxShowMessage(data.error);
}
}); // end $.get()
}); // end $.live()
}); // end of $(document).ready() for the Routine Functionalities

8
js/rte/triggers.js Normal file
View File

@ -0,0 +1,8 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* So far it looks like triggers don't need
* any special treatment as far as JavaScript
* goes, but leaving this file here in case
* the need for custom code will arise.
*/

View File

@ -18,7 +18,7 @@
*
*/
$(document).ready(function() {
/**
* Attach Event Handler for 'Drop Column'
*
@ -181,53 +181,6 @@ $(document).ready(function() {
changeColumns(action,url);
});
/**
*Ajax action for submitting the column change form
**/
$("#append_fields_form input[name=do_save_data].ajax").live('click', function(event) {
event.preventDefault();
/**
* @var the_form object referring to the export form
*/
var $form = $("#append_fields_form");
PMA_prepareForAjaxRequest($form);
//User wants to submit the form
$.post($form.attr('action'), $form.serialize()+"&do_save_data=Save", function(data) {
if ($("#sqlqueryresults").length != 0) {
$("#sqlqueryresults").remove();
} else if ($(".error").length != 0) {
$(".error").remove();
}
if (data.success == true) {
PMA_ajaxShowMessage(data.message);
$("<div id='sqlqueryresults'></div>").insertAfter("#topmenucontainer");
$("#sqlqueryresults").html(data.sql_query);
$("#result_query .notice").remove();
$("#result_query").prepend((data.message));
if ($("#change_column_dialog").length > 0) {
$("#change_column_dialog").dialog("close").remove();
}
/*Reload the field form*/
$.post($("#fieldsForm").attr('action'), $("#fieldsForm").serialize()+"&ajax_request=true", function(form_data) {
$("#fieldsForm").remove();
var $temp_div = $("<div id='temp_div'><div>").append(form_data);
if ($("#sqlqueryresults").length != 0) {
$temp_div.find("#fieldsForm").insertAfter("#sqlqueryresults");
} else {
$temp_div.find("#fieldsForm").insertAfter(".error");
}
/*Call the function to display the more options in table*/
displayMoreTableOpts();
});
} else {
var $temp_div = $("<div id='temp_div'><div>").append(data);
var $error = $temp_div.find(".error code").addClass("error");
PMA_ajaxShowMessage($error);
}
}) // end $.post()
}) // end insert table button "do_save_data"
/**
*Ajax event handler for index edit
**/
@ -239,7 +192,11 @@ $(document).ready(function() {
}
url = url + "&ajax_request=true";
var div = $('<div id="edit_index_dialog"></div>');
/*Remove the hidden dialogs if there are*/
if ($('#edit_index_dialog').length != 0) {
$('#edit_index_dialog').remove();
}
var $div = $('<div id="edit_index_dialog"></div>');
/**
* @var button_options Object that stores the options passed to jQueryUI
@ -256,7 +213,7 @@ $(document).ready(function() {
$.get( "tbl_indexes.php" , url , function(data) {
//in the case of an error, show the error message returned.
if (data.success != undefined && data.success == false) {
div
$div
.append(data.error)
.dialog({
title: PMA_messages['strEdit'],
@ -267,7 +224,7 @@ $(document).ready(function() {
buttons : button_options_error
})// end dialog options
} else {
div
$div
.append(data)
.dialog({
title: PMA_messages['strEdit'],
@ -280,6 +237,7 @@ $(document).ready(function() {
//Remove the top menu container from the dialog
.find("#topmenucontainer").hide()
; // end dialog options
checkIndexType();
checkIndexName("index_frm");
}
PMA_ajaxRemoveMessage($msgbox);
@ -311,22 +269,22 @@ $(document).ready(function() {
/*Reload the field form*/
$("#table_index").remove();
var temp_div = $("<div id='temp_div'><div>").append(data.index_table);
$(temp_div).find("#table_index").insertAfter("#index_header");
var $temp_div = $("<div id='temp_div'><div>").append(data.index_table);
$temp_div.find("#table_index").insertAfter("#index_header");
if ($("#edit_index_dialog").length > 0) {
$("#edit_index_dialog").dialog("close").remove();
}
} else {
if(data.error != undefined) {
var temp_div = $("<div id='temp_div'><div>").append(data.error);
if($(temp_div).find(".error code").length != 0) {
var error = $(temp_div).find(".error code").addClass("error");
var $temp_div = $("<div id='temp_div'><div>").append(data.error);
if ($temp_div.find(".error code").length != 0) {
var $error = $temp_div.find(".error code").addClass("error");
} else {
var error = temp_div;
var $error = $temp_div;
}
}
PMA_ajaxShowMessage(error);
PMA_ajaxShowMessage($error);
}
}) // end $.post()
@ -346,8 +304,8 @@ $(document).ready(function() {
//User wants to submit the form
$.post($form.attr('action'), $form.serialize()+"&add_fields=Go", function(data) {
$("#index_columns").remove();
var temp_div = $("<div id='temp_div'><div>").append(data);
$(temp_div).find("#index_columns").appendTo("#index_edit_fields");
var $temp_div = $("<div id='temp_div'><div>").append(data);
$temp_div.find("#index_columns").appendTo("#index_edit_fields");
}) // end $.post()
}) // end insert table button "Go"
@ -394,7 +352,7 @@ function changeColumns(action,url) {
if ($('#change_column_dialog').length != 0) {
$('#change_column_dialog').remove();
}
var div = $('<div id="change_column_dialog"></div>');
var $div = $('<div id="change_column_dialog"></div>');
/**
* @var button_options Object that stores the options passed to jQueryUI
@ -411,7 +369,7 @@ function changeColumns(action,url) {
$.get( action , url , function(data) {
//in the case of an error, show the error message returned.
if (data.success != undefined && data.success == false) {
div
$div
.append(data.error)
.dialog({
title: PMA_messages['strChangeTbl'],
@ -422,7 +380,7 @@ function changeColumns(action,url) {
buttons : button_options_error
})// end dialog options
} else {
div
$div
.append(data)
.dialog({
title: PMA_messages['strChangeTbl'],

View File

@ -194,9 +194,10 @@ class PMA_Index
// $columns[names][]
// $columns[sub_parts][]
foreach ($columns['names'] as $key => $name) {
$sub_part = isset($columns['sub_parts'][$key]) ? $columns['sub_parts'][$key] : '';
$_columns[] = array(
'Column_name' => $name,
'Sub_part' => $columns['sub_parts'][$key],
'Sub_part' => $sub_part,
);
}
} else {

View File

@ -363,6 +363,7 @@ $goto_whitelist = array(
'db_create.php',
'db_datadict.php',
'db_sql.php',
'db_events.php',
'db_export.php',
'db_importdocsql.php',
'db_qbe.php',

View File

@ -2406,6 +2406,87 @@ function PMA_generate_slider_effect($id, $message)
<?php
}
/**
* Creates an AJAX sliding toggle button (or and equivalent form when AJAX is disabled)
*
* @param string $action The URL for the request to be executed
* @param string $select_name The name for the dropdown box
* @param array $options An array of options (see rte_footer.lib.php)
* @param string $callback A JS snippet to execute when the request is
* successfully processed
*
* @return string HTML code for the toggle button
*/
function PMA_toggleButton($action, $select_name, $options, $callback)
{
// Do the logic first
$link_on = "$action&amp;$select_name=" . urlencode($options[1]['value']);
$link_off = "$action&amp;$select_name=" . urlencode($options[0]['value']);
if ($options[1]['selected'] == true) {
$state = 'on';
} else if ($options[0]['selected'] == true) {
$state = 'off';
} else {
$state = 'on';
}
$selected1 = '';
$selected0 = '';
if ($options[1]['selected'] == true) {
$selected1 = " selected='selected'";
} else if ($options[0]['selected'] == true) {
$selected0 = " selected='selected'";
}
// Generate output
$retval = "<!-- TOGGLE START -->\n";
if ($GLOBALS['cfg']['AjaxEnable']) {
$retval .= "<noscript>\n";
}
$retval .= "<div class='wrapper'>\n";
$retval .= " <form action='$action' method='post'>\n";
$retval .= " <select name='$select_name'>\n";
$retval .= " <option value='{$options[1]['value']}'$selected1>";
$retval .= " {$options[1]['label']}\n";
$retval .= " </option>\n";
$retval .= " <option value='{$options[0]['value']}'$selected0>";
$retval .= " {$options[0]['label']}\n";
$retval .= " </option>\n";
$retval .= " </select>\n";
$retval .= " <input type='submit' value='" . __('Change') . "'/>\n";
$retval .= " </form>\n";
$retval .= "</div>\n";
if ($GLOBALS['cfg']['AjaxEnable']) {
$retval .= "</noscript>\n";
$retval .= "<div class='wrapper toggleAjax hide'>\n";
$retval .= " <div class='toggleButton'>\n";
$retval .= " <div title='" . __('Click to toggle') . "' class='container $state'>\n";
$retval .= " <img src='{$GLOBALS['pmaThemeImage']}toggle-{$GLOBALS['text_dir']}.png'\n";
$retval .= " alt='' />\n";
$retval .= " <table cellspacing='0' cellpadding='0'><tr>\n";
$retval .= " <tbody>\n";
$retval .= " <td class='toggleOn'>\n";
$retval .= " <span class='hide'>$link_on</span>\n";
$retval .= " <div>";
$retval .= str_replace(' ', '&nbsp;', $options[1]['label']) . "</div>\n";
$retval .= " </td>\n";
$retval .= " <td><div>&nbsp;</div></td>\n";
$retval .= " <td class='toggleOff'>\n";
$retval .= " <span class='hide'>$link_off</span>\n";
$retval .= " <div>";
$retval .= str_replace(' ', '&nbsp;', $options[0]['label']) . "</div>\n";
$retval .= " </div>\n";
$retval .= " </tbody>\n";
$retval .= " </tr></table>\n";
$retval .= " <span class='hide callback'>$callback</span>\n";
$retval .= " <span class='hide text_direction'>{$GLOBALS['text_dir']}</span>\n";
$retval .= " </div>\n";
$retval .= " </div>\n";
$retval .= "</div>\n";
}
$retval .= "<!-- TOGGLE END -->";
return $retval;
} // end PMA_toggleButton()
/**
* Clears cache content which needs to be refreshed on user change.
*/

View File

@ -1592,7 +1592,7 @@ function PMA_DBI_get_triggers($db, $table = '', $delimiter = '//')
// Note: in http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html
// their example uses WHERE TRIGGER_SCHEMA='dbname' so let's use this
// instead of WHERE EVENT_OBJECT_SCHEMA='dbname'
$query = "SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= '" . PMA_sqlAddSlashes($db,true) . "';";
$query = "SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, DEFINER FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= '" . PMA_sqlAddSlashes($db,true) . "';";
if (! empty($table)) {
$query .= " AND EVENT_OBJECT_TABLE = '" . PMA_sqlAddSlashes($table, true) . "';";
}
@ -1611,12 +1611,15 @@ function PMA_DBI_get_triggers($db, $table = '', $delimiter = '//')
$trigger['EVENT_MANIPULATION'] = $trigger['Event'];
$trigger['EVENT_OBJECT_TABLE'] = $trigger['Table'];
$trigger['ACTION_STATEMENT'] = $trigger['Statement'];
$trigger['DEFINER'] = $trigger['Definer'];
}
$one_result = array();
$one_result['name'] = $trigger['TRIGGER_NAME'];
$one_result['table'] = $trigger['EVENT_OBJECT_TABLE'];
$one_result['action_timing'] = $trigger['ACTION_TIMING'];
$one_result['event_manipulation'] = $trigger['EVENT_MANIPULATION'];
$one_result['definition'] = $trigger['ACTION_STATEMENT'];
$one_result['definer'] = $trigger['DEFINER'];
// do not prepend the schema name; this way, importing the
// definition into another schema will work
@ -1627,6 +1630,14 @@ function PMA_DBI_get_triggers($db, $table = '', $delimiter = '//')
$result[] = $one_result;
}
}
// Sort results by name
$name = array();
foreach($result as $key => $value) {
$name[] = $value['name'];
}
array_multisort($name, SORT_ASC, $result);
return($result);
}

View File

@ -1,150 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
$events = PMA_DBI_fetch_result('SELECT EVENT_NAME, EVENT_TYPE FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddSlashes($db,true) . '\';');
$conditional_class_add = '';
$conditional_class_drop = '';
$conditional_class_export = '';
if ($GLOBALS['cfg']['AjaxEnable']) {
$conditional_class_add = 'class="add_event_anchor"';
$conditional_class_drop = 'class="drop_event_anchor"';
$conditional_class_export = 'class="export_event_anchor"';
}
/**
* Display the export for a event. This is for when JS is disabled.
*/
if (! empty($_GET['exportevent']) && ! empty($_GET['eventname'])) {
$event_name = htmlspecialchars(PMA_backquote($_GET['eventname']));
if ($create_event = PMA_DBI_get_definition($db, 'EVENT', $_GET['eventname'])) {
$create_event = '<textarea cols="40" rows="15" style="width: 100%;">' . $create_event . '</textarea>';
if (! empty($_REQUEST['ajax_request'])) {
$extra_data = array('title' => sprintf(__('Export of event %s'), $event_name));
PMA_ajaxResponse($create_event, true, $extra_data);
} else {
echo '<fieldset>' . "\n"
. ' <legend>' . sprintf(__('Export of event "%s"'), $event_name) . '</legend>' . "\n"
. $create_event
. '</fieldset>';
}
} else {
$response = __('Error in Processing Request') . ' : '
. sprintf(__('No event with name %s found in database %s'),
$event_name, htmlspecialchars(PMA_backquote($db)));
$response = PMA_message::error($response);
if (! empty($_REQUEST['ajax_request'])) {
PMA_ajaxResponse($response, false);
} else {
$response->display();
}
}
}
/**
* Display a list of available events
*/
echo "\n\n<span id='js_query_display'></span>\n\n";
echo '<fieldset>' . "\n";
echo ' <legend>' . __('Events') . '</legend>' . "\n";
if (! $events) {
echo __('There are no events to display.');
} else {
echo '<div class="hide" id="nothing2display">' . __('There are no events to display.') . '</div>';
echo '<table class="data">';
echo sprintf('<tr>
<th>%s</th>
<th colspan="3">%s</th>
<th>%s</th>
</tr>',
__('Name'),
__('Action'),
__('Type'));
$ct=0;
$delimiter = '//';
foreach ($events as $event) {
// information_schema (at least in MySQL 5.1.22) does not return
// the full CREATE EVENT statement in a way that could be useful for us
// so we rely on PMA_DBI_get_definition() which uses SHOW CREATE EVENT
$create_event = PMA_DBI_get_definition($db, 'EVENT', $event['EVENT_NAME']);
$definition = 'DROP EVENT IF EXISTS ' . PMA_backquote($event['EVENT_NAME'])
. $delimiter . "\n" . $create_event . "\n";
$sqlDrop = 'DROP EVENT ' . PMA_backquote($event['EVENT_NAME']);
echo sprintf('<tr class="%s">
<td><span class="drop_sql" style="display:none;">%s</span><strong>%s</strong></td>
<td>%s</td>
<td><div class="create_sql" style="display: none;">%s</div>%s</td>
<td>%s</td>
<td>%s</td>
</tr>',
($ct%2 == 0) ? 'even' : 'odd',
$sqlDrop,
$event['EVENT_NAME'],
! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&amp;sql_query=' . urlencode($definition) . '&amp;show_query=1&amp;db_query_force=1&amp;delimiter=' . urlencode($delimiter), $titles['Edit']) : '&nbsp;',
$create_event,
'<a ' . $conditional_class_export . ' href="db_events.php?' . $url_query
. '&amp;exportevent=1'
. '&amp;eventname=' . urlencode($event['EVENT_NAME'])
. '">' . $titles['Export'] . '</a>',
'<a ' . $conditional_class_drop . ' href="sql.php?' . $url_query . '&amp;sql_query=' . urlencode($sqlDrop) . '" >' . $titles['Drop'] . '</a>',
$event['EVENT_TYPE']);
$ct++;
}
echo '</table>';
}
echo '</fieldset>' . "\n";
/**
* If there has been a request to change the state
* of the event scheduler, process it now.
*/
if (! empty($_GET['toggle_scheduler'])) {
$new_scheduler_state = $_GET['toggle_scheduler'];
if ($new_scheduler_state === 'ON' || $new_scheduler_state === 'OFF') {
PMA_DBI_query("SET GLOBAL event_scheduler='$new_scheduler_state'");
}
}
/**
* Prepare to show the event scheduler fieldset, if necessary
*/
$tableStart = '';
$schedulerFieldset = '';
$es_state = PMA_DBI_fetch_value("SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", 0, 1);
if ($es_state === 'ON' || $es_state === 'OFF') {
$es_change = ($es_state == 'ON') ? 'OFF' : 'ON';
$tableStart = '<table style="width: 100%;"><tr><td style="width: 50%;">';
$schedulerFieldset = '</td><td><fieldset style="margin: 1em 0;">' . "\n"
. PMA_getIcon('b_events.png')
. ($es_state === 'ON' ? __('The event scheduler is enabled') : __('The event scheduler is disabled')) . ':'
. ' <a href="db_events.php?' . $url_query . '&amp;toggle_scheduler=' . $es_change . '">'
. ($es_change === 'ON' ? __('Turn it on') : __('Turn it off'))
. '</a>' . "\n"
. '</fieldset></td></tr></table>' . "\n";
}
/**
* Display the form for adding a new event
*/
echo $tableStart . '<fieldset style="margin: 1em 0;">' . "\n"
. ' <a href="db_events.php?' . $url_query . '&amp;addevent=1" ' . $conditional_class_add . '>' . "\n"
. PMA_getIcon('b_event_add.png') . __('Add an event') . '</a>' . "\n"
. '</fieldset>' . "\n";
/**
* Display the state of the event scheduler
* and offer an option to toggle it.
*/
echo $schedulerFieldset;
?>

View File

@ -125,12 +125,14 @@ if (! $db_is_information_schema) {
$tabs[] =& $tab_routines;
}
if (PMA_MYSQL_INT_VERSION >= 50106 && ! PMA_DRIZZLE) {
// Temporarily hiding this unfinished feature
// $tabs[] =& $tab_events;
if (PMA_currentUserHasPrivilege('EVENT', $db)) {
$tabs[] =& $tab_events;
}
}
if (PMA_MYSQL_INT_VERSION >= 50002 && ! PMA_DRIZZLE) {
// Temporarily hiding this unfinished feature
// $tabs[] =& $tab_triggers;
if (PMA_currentUserHasPrivilege('TRIGGER', $db)) {
$tabs[] =& $tab_triggers;
}
}
}
if (PMA_Tracker::isActive()) {

File diff suppressed because it is too large Load Diff

View File

@ -1,123 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
$url_query .= '&amp;goto=tbl_triggers.php';
$triggers = PMA_DBI_get_triggers($db, $table);
$conditional_class_add = '';
$conditional_class_drop = '';
$conditional_class_export = '';
if ($GLOBALS['cfg']['AjaxEnable']) {
$conditional_class_add = 'class="add_trigger_anchor"';
$conditional_class_drop = 'class="drop_trigger_anchor"';
$conditional_class_export = 'class="export_trigger_anchor"';
}
/**
* Display the export for a trigger. This is for when JS is disabled.
*/
if (! empty($_GET['exporttrigger']) && ! empty($_GET['triggername'])) {
$success = false;
foreach ($triggers as $trigger) {
if ($trigger['name'] === $_GET['triggername']) {
$success = true;
$trigger_name = htmlspecialchars(PMA_backquote($_GET['triggername']));
$create_trig = '<textarea cols="40" rows="15" style="width: 100%;">' . $trigger['create'] . '</textarea>';
if (! empty($_REQUEST['ajax_request'])) {
$extra_data = array('title' => sprintf(__('Export of trigger %s'), $trigger_name));
PMA_ajaxResponse($create_trig, true, $extra_data);
} else {
echo '<fieldset>' . "\n"
. ' <legend>' . sprintf(__('Export of trigger "%s"'), $trigger_name) . '</legend>' . "\n"
. $create_trig
. '</fieldset>';
}
}
}
if (! $success) {
$response = __('Error in Processing Request') . ' : '
. sprintf(__('No trigger with name %s found'), $event_name);
$response = PMA_message::error($response);
if (! empty($_REQUEST['ajax_request'])) {
PMA_ajaxResponse($response, false);
} else {
$response->display();
}
}
}
/**
* Display a list of available triggers
*/
echo "\n\n<span id='js_query_display'></span>\n\n";
echo '<fieldset>' . "\n";
echo ' <legend>' . __('Triggers') . '</legend>' . "\n";
if (! $triggers) {
echo __('There are no triggers to display.');
} else {
echo '<div class="hide" id="nothing2display">' . __('There are no triggers to display.') . '</div>';
echo '<table class="data">' . "\n";
// Print table header
echo "<tr>\n<th>" . __('Name') . "</th>\n";
if (empty($table)) {
// if we don't have a table name, we will be showing the per-database list.
// so we must specify which table each trigger belongs to
echo "<th>" . __('Table') . "</th>\n";
}
echo "<th colspan='3'>" . __('Action') . "</th>\n";
echo "<th>" . __('Time') . "</th>\n";
echo "<th>" . __('Event') . "</th>\n";
echo "</tr>";
$ct=0;
$delimiter = '//';
// Print table contents
foreach ($triggers as $trigger) {
$drop_and_create = $trigger['drop'] . $delimiter . "\n" . $trigger['create'] . "\n";
$row = ($ct%2 == 0) ? 'even' : 'odd';
$editlink = PMA_linkOrButton('tbl_sql.php?' . $url_query . '&amp;sql_query='
. urlencode($drop_and_create) . '&amp;show_query=1&amp;delimiter=' . urlencode($delimiter), $titles['Edit']);
$exprlink = '<a ' . $conditional_class_export . ' href="db_triggers.php?' . $url_query
. '&amp;exporttrigger=1'
. '&amp;triggername=' . urlencode($trigger['name'])
. '">' . $titles['Export'] . '</a>';
$droplink = '<a ' . $conditional_class_drop . ' href="sql.php?' . $url_query . '&amp;sql_query='
. urlencode($trigger['drop']) . '" >' . $titles['Drop'] . '</a>';
echo "<tr class='noclick $row'>\n";
echo "<td><span class='drop_sql' style='display:none;'>{$trigger['drop']}</span>";
echo "<strong>{$trigger['name']}</strong></td>\n";
if (empty($table)) {
echo "<td><a href='tbl_triggers.php?db=$db&amp;table={$trigger['table']}'>";
echo $trigger['table'] . "</a></td>\n";
}
echo "<td>$editlink</td>\n";
echo "<td><div class='create_sql' style='display: none;'>{$trigger['create']}</div>$exprlink</td>\n";
echo "<td>$droplink</td>\n";
echo "<td>{$trigger['action_timing']}</td>\n";
echo "<td>{$trigger['event_manipulation']}</td>\n";
echo "</tr>\n";
$ct++;
}
echo '</table>';
}
echo '</fieldset>';
/**
* Display the form for adding a new trigger
*/
echo '<fieldset>' . "\n"
. ' <a href="tbl_triggers.php?' . $url_query . '&amp;addtrigger=1" class="' . $conditional_class_add . '">' . "\n"
. PMA_getIcon('b_trigger_add.png') . __('Add a trigger') . '</a>' . "\n"
. '</fieldset>' . "\n";
?>

View File

@ -46,18 +46,6 @@ if (isset($plugin_list)) {
* Set of functions used to build exports of tables
*/
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text)
{
return true;
}
/**
* Outputs export footer
*
@ -85,8 +73,7 @@ function PMA_exportHeader()
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -99,8 +86,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -111,10 +97,9 @@ function PMA_exportDBFooter($db)
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -127,12 +112,11 @@ function PMA_exportDBCreate($db)
/**
* Outputs the content of a table in NHibernate format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -35,17 +35,6 @@ if (isset($plugin_list)) {
);
} else {
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -107,8 +96,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -120,8 +108,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -131,10 +118,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -146,12 +132,11 @@ function PMA_exportDBCreate($db) {
/**
* Outputs the content of a table in CSV format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -34,17 +34,6 @@ if (isset($plugin_list)) {
);
} else {
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -80,8 +69,7 @@ xmlns="http://www.w3.org/TR/REC-html40">
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -93,8 +81,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -104,10 +91,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -117,14 +103,13 @@ function PMA_exportDBCreate($db) {
}
/**
* Outputs the content of a table in CSV format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in HTML (Microsoft Word) format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public
@ -182,7 +167,28 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
return true;
}
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $dummy)
/**
* Outputs table's structure
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $do_relation whether to include relation comments
* @param bool $do_comments whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param bool $do_mime whether to include mime comments
* @param bool $dates whether to include creation/update/check dates
* @param string $export_mode 'create_table', 'triggers', 'create_view', 'stand_in'
* @param string $export_type 'server', 'database', 'table'
* @return bool Whether it suceeded
*
* @access public
*/
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $export_mode, $export_type)
{
global $cfgRelation;

View File

@ -34,19 +34,6 @@ if (isset($plugin_list)) {
* Set of functions used to build exports of tables
*/
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text)
{
PMA_exportOutputHandler('/* ' . $text . ' */' . $GLOBALS['crlf']);
return true;
}
/**
* Outputs export footer
*
@ -80,8 +67,7 @@ function PMA_exportHeader()
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -95,8 +81,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -107,10 +92,9 @@ function PMA_exportDBFooter($db)
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -121,14 +105,13 @@ function PMA_exportDBCreate($db)
}
/**
* Outputs the content of a table in YAML format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in JSON format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -100,17 +100,6 @@ function PMA_texEscape($string) {
return $string;
}
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return PMA_exportOutputHandler('% ' . $text . $GLOBALS['crlf']);
}
/**
* Outputs export footer
*
@ -143,7 +132,7 @@ function PMA_exportHeader() {
}
$head .= $crlf
. '% ' . __('Generation Time') . ': ' . PMA_localisedDate() . $crlf
. '% ' . __('Server version') . ': ' . substr(PMA_MYSQL_INT_VERSION, 0, 1) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 1, 2) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 3) . $crlf
. '% ' . __('Server version') . ': ' . PMA_MYSQL_STR_VERSION . $crlf
. '% ' . __('PHP Version') . ': ' . phpversion() . $crlf;
return PMA_exportOutputHandler($head);
}
@ -151,8 +140,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -168,8 +156,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -179,10 +166,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -194,12 +180,11 @@ function PMA_exportDBCreate($db) {
/**
* Outputs the content of a table in LaTeX table/sideways table environment
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public
@ -290,23 +275,27 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query) {
} // end getTableLaTeX
/**
* Returns $table's structure as LaTeX
* Outputs table's structure
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param boolean whether to include relation comments
* @param boolean whether to include column comments
* @param boolean whether to include mime comments
* @param string future feature: support view dependencies
*
* @return bool Whether it suceeded
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $do_relation whether to include relation comments
* @param bool $do_comments whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param bool $do_mime whether to include mime comments
* @param bool $dates whether to include creation/update/check dates
* @param string $export_mode 'create_table', 'triggers', 'create_view', 'stand_in'
* @param string $export_type 'server', 'database', 'table'
* @return bool Whether it suceeded
*
* @access public
*/
// @@@ Table structure
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $dummy)
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $export_mode, $export_type)
{
global $cfgRelation;

View File

@ -24,17 +24,6 @@ if (isset($plugin_list)) {
);
} else {
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -60,8 +49,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -73,8 +61,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -84,10 +71,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -99,12 +85,11 @@ function PMA_exportDBCreate($db) {
/**
* Outputs the content of a table in MediaWiki format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -33,17 +33,6 @@ if (isset($plugin_list)) {
$GLOBALS['ods_buffer'] = '';
require_once './libraries/opendocument.lib.php';
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -113,8 +102,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -126,8 +114,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -137,10 +124,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -150,14 +136,13 @@ function PMA_exportDBCreate($db) {
}
/**
* Outputs the content of a table in CSV format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in ODS format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -65,17 +65,6 @@ if (isset($plugin_list)) {
$GLOBALS['odt_buffer'] = '';
require_once './libraries/opendocument.lib.php';
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -111,8 +100,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -125,8 +113,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -136,10 +123,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -149,14 +135,13 @@ function PMA_exportDBCreate($db) {
}
/**
* Outputs the content of a table in CSV format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in ODT format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public
@ -222,23 +207,27 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query) {
}
/**
* Returns $table's structure as Open Document Text
* Outputs table's structure
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param boolean whether to include relation comments
* @param boolean whether to include column comments
* @param boolean whether to include mime comments
* @param string future feature: support view dependencies
*
* @return bool Whether it suceeded
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $do_relation whether to include relation comments
* @param bool $do_comments whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param bool $do_mime whether to include mime comments
* @param bool $dates whether to include creation/update/check dates
* @param string $export_mode 'create_table', 'triggers', 'create_view', 'stand_in'
* @param string $export_type 'server', 'database', 'table'
* @return bool Whether it suceeded
*
* @access public
*/
// @@@ Table structure
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $dummy)
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $export_mode, $export_type)
{
global $cfgRelation;

View File

@ -358,18 +358,6 @@ class PMA_PDF extends TCPDF
$pdf = new PMA_PDF('L', 'pt', 'A3');
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text)
{
return true;
}
/**
* Finalize the pdf.
*
@ -420,8 +408,7 @@ function PMA_exportHeader()
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -434,8 +421,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -446,10 +432,9 @@ function PMA_exportDBFooter($db)
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -462,13 +447,11 @@ function PMA_exportDBCreate($db)
/**
* Outputs the content of a table in PDF format
*
* @todo user-defined page orientation, paper size
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -34,19 +34,6 @@ if (isset($plugin_list)) {
* Set of functions used to build exports of tables
*/
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text)
{
PMA_exportOutputHandler('// ' . $text . $GLOBALS['crlf']);
return true;
}
/**
* Outputs export footer
*
@ -81,8 +68,7 @@ function PMA_exportHeader()
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -96,8 +82,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -108,10 +93,9 @@ function PMA_exportDBFooter($db)
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -122,14 +106,13 @@ function PMA_exportDBCreate($db)
}
/**
* Outputs the content of a table in YAML format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table as a fragment of PHP code
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -297,9 +297,10 @@ if (! isset($sql_backquotes)) {
/**
* Exports routines (procedures and functions)
*
* @param string $db
* @param string $db
* @return bool Whether it suceeded
*
* @return bool Whether it suceeded
* @access public
*/
function PMA_exportRoutines($db) {
global $crlf;
@ -357,9 +358,10 @@ function PMA_exportRoutines($db) {
/**
* Possibly outputs comment
*
* @param string Text of comment
*
* @param string $text Text of comment
* @return string The formatted comment
*
* @access private
*/
function PMA_exportComment($text = '')
{
@ -375,10 +377,11 @@ function PMA_exportComment($text = '')
* Possibly outputs CRLF
*
* @return string $crlf or nothing
*
* @access private
*/
function PMA_possibleCRLF()
{
if (isset($GLOBALS['sql_include_comments']) && $GLOBALS['sql_include_comments']) {
return $GLOBALS['crlf'];
} else {
@ -457,7 +460,7 @@ function PMA_exportHeader()
$head .= PMA_exportComment($host_string);
$head .= PMA_exportComment(__('Generation Time')
. ': ' . PMA_localisedDate())
. PMA_exportComment(__('Server version') . ': ' . substr(PMA_MYSQL_INT_VERSION, 0, 1) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 1, 2) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 3))
. PMA_exportComment(__('Server version') . ': ' . PMA_MYSQL_STR_VERSION)
. PMA_exportComment(__('PHP Version') . ': ' . phpversion())
. PMA_possibleCRLF();
@ -518,10 +521,9 @@ function PMA_exportHeader()
}
/**
* Outputs CREATE DATABASE database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -557,8 +559,7 @@ function PMA_exportDBCreate($db)
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -574,8 +575,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -626,15 +626,13 @@ function PMA_exportDBFooter($db)
return $result;
}
/**
* Returns a stand-in CREATE definition to resolve view dependencies
*
* @param string the database name
* @param string the view name
* @param string the end of line sequence
*
* @return string resulting definition
* @param string $db the database name
* @param string $view the view name
* @param string $crlf the end of line sequence
* @return string resulting definition
*
* @access public
*/
@ -662,20 +660,15 @@ function PMA_getTableDefStandIn($db, $view, $crlf) {
/**
* Returns $table's CREATE definition
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param boolean whether to include creation/update/check dates
* @param boolean whether to add semicolon and end-of-line at the end
* @param boolean whether we're handling view
*
* @param string $db the database name
* @param string $table the table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $show_dates whether to include creation/update/check dates
* @param bool $add_semicolon whether to add semicolon and end-of-line at the end
* @param bool $view whether we're handling a view
* @return string resulting schema
*
* @global boolean whether to add 'drop' statements or not
* @global boolean whether to use backquotes to allow the use of special
* characters in database, table and fields names or not
*
* @access public
*/
function PMA_getTableDef($db, $table, $crlf, $error_url, $show_dates = false, $add_semicolon = true, $view = false)
@ -877,21 +870,19 @@ function PMA_getTableDef($db, $table, $crlf, $error_url, $show_dates = false, $a
return $schema_create . ($add_semicolon ? ';' . $crlf : '');
} // end of the 'PMA_getTableDef()' function
/**
* Returns $table's comments, relations etc.
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param boolean whether to include relation comments
* @param boolean whether to include mime comments
*
* @param string $db database name
* @param string $table table name
* @param string $crlf end of line sequence
* @param bool $do_relation whether to include relation comments
* @param bool $do_mime whether to include mime comments
* @return string resulting comments
*
* @access public
* @access private
*/
function PMA_getTableComments($db, $table, $crlf, $do_relation = false, $do_mime = false)
function PMA_getTableComments($db, $table, $crlf, $do_relation = false, $do_mime = false)
{
global $cfgRelation;
global $sql_backquotes;
@ -951,21 +942,21 @@ function PMA_getTableComments($db, $table, $crlf, $do_relation = false, $do_mim
/**
* Outputs table's structure
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param boolean whether to include relation comments
* @param boolean whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param boolean whether to include mime comments
* @param string 'stand_in', 'create_table', 'create_view'
* @param string 'server', 'database', 'table'
*
* @return bool Whether it suceeded
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $relation whether to include relation comments
* @param bool $comments whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param bool $mime whether to include mime comments
* @param bool $dates whether to include creation/update/check dates
* @param string $export_mode 'create_table', 'triggers', 'create_view', 'stand_in'
* @param string $export_type 'server', 'database', 'table'
* @return bool Whether it suceeded
*
* @access public
*/
@ -1027,26 +1018,16 @@ function PMA_exportStructure($db, $table, $crlf, $error_url, $relation = false,
}
/**
* Dispatches between the versions of 'getTableContent' to use depending
* on the php version
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in SQL format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @global boolean whether to use backquotes to allow the use of special
* characters in database, table and fields names or not
* @global integer the number of records
* @global integer the current record position
*
* @access public
*
* @see PMA_getTableContentFast(), PMA_getTableContentOld()
*
*/
function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
{

View File

@ -32,17 +32,6 @@ if (isset($plugin_list)) {
);
} else {
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -68,8 +57,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -81,8 +69,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -92,10 +79,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -105,14 +91,13 @@ function PMA_exportDBCreate($db) {
}
/**
* Outputs the content of a table in CSV format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in Texy format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public
@ -164,7 +149,28 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
return true;
}
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $dummy)
/**
* Outputs table's structure
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param bool $do_relation whether to include relation comments
* @param bool $do_comments whether to include the pmadb-style column comments
* as comments in the structure; this is deprecated
* but the parameter is left here because export.php
* calls PMA_exportStructure() also for other export
* types which use this parameter
* @param bool $do_mime whether to include mime comments
* @param bool $dates whether to include creation/update/check dates
* @param string $export_mode 'create_table', 'triggers', 'create_view', 'stand_in'
* @param string $export_type 'server', 'database', 'table'
* @return bool Whether it suceeded
*
* @access public
*/
function PMA_exportStructure($db, $table, $crlf, $error_url, $do_relation = false, $do_comments = false, $do_mime = false, $dates = false, $export_mode, $export_type)
{
global $cfgRelation;

View File

@ -36,17 +36,6 @@ set_include_path(get_include_path() . PATH_SEPARATOR . getcwd() . '/libraries/PH
require_once './libraries/PHPExcel/PHPExcel.php';
require_once './libraries/PHPExcel/PHPExcel/Writer/Excel5.php';
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -102,8 +91,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -117,8 +105,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -128,10 +115,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -143,12 +129,11 @@ function PMA_exportDBCreate($db) {
/**
* Outputs the content of a table in XLS format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -36,17 +36,6 @@ set_include_path(get_include_path() . PATH_SEPARATOR . getcwd() . '/libraries/PH
require_once './libraries/PHPExcel/PHPExcel.php';
require_once './libraries/PHPExcel/PHPExcel/Writer/Excel2007.php';
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return true;
}
/**
* Outputs export footer
*
@ -101,8 +90,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -116,8 +104,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -127,10 +114,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -142,12 +128,11 @@ function PMA_exportDBCreate($db) {
/**
* Outputs the content of a table in XLSX format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -48,17 +48,6 @@ if (isset($plugin_list)) {
$plugin_list['xml']['options'][] = array('type' => 'end_group');
} else {
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text) {
return PMA_exportOutputHandler('<!-- ' . $text . ' -->' . $GLOBALS['crlf']);
}
/**
* Outputs export footer
*
@ -108,7 +97,7 @@ function PMA_exportHeader() {
}
$head .= $crlf
. '- ' . __('Generation Time') . ': ' . PMA_localisedDate() . $crlf
. '- ' . __('Server version') . ': ' . substr(PMA_MYSQL_INT_VERSION, 0, 1) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 1, 2) . '.' . (int) substr(PMA_MYSQL_INT_VERSION, 3) . $crlf
. '- ' . __('Server version') . ': ' . PMA_MYSQL_STR_VERSION . $crlf
. '- ' . __('PHP Version') . ': ' . phpversion() . $crlf
. '-->' . $crlf . $crlf;
@ -243,8 +232,7 @@ function PMA_exportHeader() {
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -270,8 +258,7 @@ function PMA_exportDBHeader($db) {
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -290,10 +277,9 @@ function PMA_exportDBFooter($db) {
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -302,16 +288,14 @@ function PMA_exportDBCreate($db) {
return true;
}
/**
* Outputs the content of a table
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
* Outputs the content of a table in XML format
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -35,19 +35,6 @@ if (isset($plugin_list)) {
* Set of functions used to build exports of tables
*/
/**
* Outputs comment
*
* @param string Text of comment
*
* @return bool Whether it suceeded
*/
function PMA_exportComment($text)
{
PMA_exportOutputHandler('# ' . $text . $GLOBALS['crlf']);
return true;
}
/**
* Outputs export footer
*
@ -77,8 +64,7 @@ function PMA_exportHeader()
/**
* Outputs database header
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -91,8 +77,7 @@ function PMA_exportDBHeader($db)
/**
* Outputs database footer
*
* @param string Database name
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -103,10 +88,9 @@ function PMA_exportDBFooter($db)
}
/**
* Outputs create database database
*
* @param string Database name
* Outputs CREATE DATABASE statement
*
* @param string $db Database name
* @return bool Whether it suceeded
*
* @access public
@ -119,12 +103,11 @@ function PMA_exportDBCreate($db)
/**
* Outputs the content of a table in YAML format
*
* @param string the database name
* @param string the table name
* @param string the end of line sequence
* @param string the url to go back in case of error
* @param string SQL query for obtaining data
*
* @param string $db database name
* @param string $table table name
* @param string $crlf the end of line sequence
* @param string $error_url the url to go back in case of error
* @param string $sql_query SQL query for obtaining data
* @return bool Whether it suceeded
*
* @access public

View File

@ -0,0 +1,567 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Functions for event management.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* This function is defined in: rte_routines.lib.php, rte_triggers.lib.php and
* rte_events.lib.php. It is used to retreive some language strings that are
* used in functionalities that are common to routines, triggers and events.
*
* @param string $index The index of the string to get
*
* @return string The requested string or an empty string, if not available
*/
function PMA_RTE_getWord($index)
{
$words = array(
'add' => __('Add event'),
'docu' => 'EVENTS',
'export' => __('Export of event %s'),
'human' => __('event'),
'no_create' => __('You do not have the necessary privileges to create a new event'),
'not_found' => __('No event with name %1$s found in database %2$s'),
'nothing' => __('There are no events to display.'),
'title' => __('Events'),
);
return isset($words[$index]) ? $words[$index] : '';
} // end PMA_RTE_getWord()
/**
* Main function for the events functionality
*/
function PMA_RTE_main()
{
global $db;
/**
* Process all requests
*/
PMA_EVN_handleEditor();
PMA_EVN_handleExport();
/**
* Display a list of available events
*/
$columns = "`EVENT_NAME`, `EVENT_TYPE`, `STATUS`";
$where = "EVENT_SCHEMA='" . PMA_sqlAddSlashes($db) . "'";
$query = "SELECT $columns FROM `INFORMATION_SCHEMA`.`EVENTS` "
. "WHERE $where ORDER BY `EVENT_NAME` ASC;";
$items = PMA_DBI_fetch_result($query);
echo PMA_RTE_getList('event', $items);
/**
* Display a link for adding a new event, if
* the user has the privileges and a link to
* toggle the state of the event scheduler.
*/
echo PMA_EVN_getFooterLinks();
} // end PMA_RTE_main()
/**
* Handles editor requests for adding or editing an item
*/
function PMA_EVN_handleEditor()
{
global $_REQUEST, $_POST, $errors, $db, $table;
if (! empty($_REQUEST['editor_process_add'])
|| ! empty($_REQUEST['editor_process_edit'])
) {
$sql_query = '';
$item_query = PMA_EVN_getQueryFromRequest();
if (! count($errors)) { // set by PMA_RTN_getQueryFromRequest()
// Execute the created query
if (! empty($_REQUEST['editor_process_edit'])) {
// Backup the old trigger, in case something goes wrong
$create_item = PMA_DBI_get_definition(
$db,
'EVENT',
$_REQUEST['item_original_name']
);
$drop_item = "DROP EVENT " . PMA_backquote($_REQUEST['item_original_name']) . ";\n";
$result = PMA_DBI_try_query($drop_item);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $drop_item) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$result = PMA_DBI_try_query($item_query);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $item_query) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
// We dropped the old item, but were unable to create the new one
// Try to restore the backup query
$result = PMA_DBI_try_query($create_item);
if (! $result) {
// OMG, this is really bad! We dropped the query, failed to create a new one
// and now even the backup query does not execute!
// This should not happen, but we better handle this just in case.
$errors[] = __('Sorry, we failed to restore the dropped event.') . '<br />'
. __('The backed up query was:') . "\"$create_item\"" . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
}
} else {
$message = PMA_Message::success(__('Event %1$s has been modified.'));
$message->addParam(PMA_backquote($_REQUEST['item_name']));
$sql_query = $drop_item . $item_query;
}
}
} else {
// 'Add a new item' mode
$result = PMA_DBI_try_query($item_query);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $item_query) . '<br /><br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$message = PMA_Message::success(__('Event %1$s has been created.'));
$message->addParam(PMA_backquote($_REQUEST['item_name']));
$sql_query = $item_query;
}
}
}
if (count($errors)) {
$message = PMA_Message::error(__('<b>One or more errors have occured while processing your request:</b>'));
$message->addString('<ul>');
foreach ($errors as $num => $string) {
$message->addString('<li>' . $string . '</li>');
}
$message->addString('</ul>');
}
$output = PMA_showMessage($message, $sql_query);
if ($GLOBALS['is_ajax_request']) {
$extra_data = array();
if ($message->isSuccess()) {
$columns = "`EVENT_NAME`, `EVENT_TYPE`, `STATUS`";
$where = "EVENT_SCHEMA='" . PMA_sqlAddSlashes($db) . "' "
. "AND EVENT_NAME='" . PMA_sqlAddSlashes($_REQUEST['item_name']) . "'";
$query = "SELECT $columns FROM `INFORMATION_SCHEMA`.`EVENTS` WHERE $where;";
$event = PMA_DBI_fetch_single_row($query);
$extra_data['name'] = htmlspecialchars(strtoupper($_REQUEST['item_name']));
$extra_data['new_row'] = PMA_EVN_getRowForList($event);
$extra_data['insert'] = ! empty($event);
$response = $output;
} else {
$response = $message;
}
PMA_ajaxResponse($response, $message->isSuccess(), $extra_data);
}
}
/**
* Display a form used to add/edit a trigger, if necessary
*/
if (count($errors) || ( empty($_REQUEST['editor_process_add']) && empty($_REQUEST['editor_process_edit'])
&& (! empty($_REQUEST['add_item']) || ! empty($_REQUEST['edit_item'])
|| ! empty($_REQUEST['item_changetype'])))
) { // FIXME: this must be simpler than that
$operation = '';
if (! empty($_REQUEST['item_changetype'])) {
$operation = 'change';
}
// Get the data for the form (if any)
if (! empty($_REQUEST['add_item'])) {
$title = __("Create event");
$item = PMA_EVN_getDataFromRequest();
$mode = 'add';
} else if (! empty($_REQUEST['edit_item'])) {
$title = __("Edit event");
if (! empty($_REQUEST['item_name'])
&& empty($_REQUEST['editor_process_edit'])
&& empty($_REQUEST['item_changetype'])
) {
$item = PMA_EVN_getDataFromName($_REQUEST['item_name']);
if ($item !== false) {
$item['item_original_name'] = $item['item_name'];
}
} else {
$item = PMA_EVN_getDataFromRequest();
}
$mode = 'edit';
}
if ($item !== false) {
// Show form
$editor = PMA_EVN_getEditorForm($mode, $operation, $item);
if ($GLOBALS['is_ajax_request']) {
$extra_data = array('title' => $title);
PMA_ajaxResponse($editor, true, $extra_data);
} else {
echo "\n\n<h2>$title</h2>\n\n$editor";
unset($_POST);
require './libraries/footer.inc.php';
}
// exit;
} else {
$message = __('Error in processing request') . ' : ';
$message .= sprintf(
PMA_RTE_getWord('not_found'),
htmlspecialchars(PMA_backquote($_REQUEST['item_name'])),
htmlspecialchars(PMA_backquote($db))
);
$message = PMA_message::error($message);
if ($GLOBALS['is_ajax_request']) {
PMA_ajaxResponse($message, false);
} else {
$message->display();
}
}
}
} // end PMA_EVN_handleEditor()
/**
* This function will generate the values that are required to for the editor
*
* @return array Data necessary to create the editor.
*/
function PMA_EVN_getDataFromRequest()
{
$retval = array();
$indices = array('item_name',
'item_original_name',
'item_status',
'item_execute_at',
'item_interval_value',
'item_interval_field',
'item_starts',
'item_ends',
'item_definition',
'item_preserve',
'item_comment',
'item_definer');
foreach ($indices as $key => $index) {
$retval[$index] = isset($_REQUEST[$index]) ? $_REQUEST[$index] : '';
}
$retval['item_type'] = 'ONE TIME';
$retval['item_type_toggle'] = 'RECURRING';
if (isset($_REQUEST['item_type']) && $_REQUEST['item_type'] == 'RECURRING') {
$retval['item_type'] = 'RECURRING';
$retval['item_type_toggle'] = 'ONE TIME';
}
return $retval;
} // end PMA_EVN_getDataFromRequest()
/**
* This function will generate the values that are required to complete
* the "Edit event" form given the name of a event.
*
* @param string $name The name of the event.
*
* @return array Data necessary to create the editor.
*/
function PMA_EVN_getDataFromName($name)
{
global $db;
$retval = array();
$columns = "`EVENT_NAME`, `STATUS`, `EVENT_TYPE`, `EXECUTE_AT`, "
. "`INTERVAL_VALUE`, `INTERVAL_FIELD`, `STARTS`, `ENDS`, "
. "`EVENT_DEFINITION`, `ON_COMPLETION`, `DEFINER`, `EVENT_COMMENT`";
$where = "EVENT_SCHEMA='" . PMA_sqlAddSlashes($db) . "' "
. "AND EVENT_NAME='" . PMA_sqlAddSlashes($name) . "'";
$query = "SELECT $columns FROM `INFORMATION_SCHEMA`.`EVENTS` WHERE $where;";
$item = PMA_DBI_fetch_single_row($query);
if (! $item) {
return false;
}
$retval['item_name'] = $item['EVENT_NAME'];
$retval['item_status'] = $item['STATUS'];
$retval['item_type'] = $item['EVENT_TYPE'];
if ($retval['item_type'] == 'RECURRING') {
$retval['item_type_toggle'] = 'ONE TIME';
} else {
$retval['item_type_toggle'] = 'RECURRING';
}
$retval['item_execute_at'] = $item['EXECUTE_AT'];
$retval['item_interval_value'] = $item['INTERVAL_VALUE'];
$retval['item_interval_field'] = $item['INTERVAL_FIELD'];
$retval['item_starts'] = $item['STARTS'];
$retval['item_ends'] = $item['ENDS'];
$retval['item_preserve'] = '';
if ($item['ON_COMPLETION'] == 'PRESERVE') {
$retval['item_preserve'] = " checked='checked'";
}
$retval['item_definition'] = $item['EVENT_DEFINITION'];
$retval['item_definer'] = $item['DEFINER'];
$retval['item_comment'] = $item['EVENT_COMMENT'];
return $retval;
} // end PMA_EVN_getDataFromName()
/**
* Displays a form used to add/edit an event
*
* @param string $mode If the editor will be used edit an event
* or add a new one: 'edit' or 'add'.
* @param string $operation If the editor was previously invoked with
* JS turned off, this will hold the name of
* the current operation
* @param array $item Data for the event returned by
* PMA_EVN_getDataFromRequest() or
* PMA_EVN_getDataFromName()
*
* @return string HTML code for the editor.
*/
function PMA_EVN_getEditorForm($mode, $operation, $item)
{
global $db, $table, $titles, $event_status, $event_type, $event_interval;
// Escape special characters
$need_escape = array(
'item_original_name',
'item_name',
'item_type',
'item_execute_at',
'item_interval_value',
'item_starts',
'item_ends',
'item_definition',
'item_definer',
'item_comment'
);
foreach ($need_escape as $key => $index) {
$item[$index] = htmlentities($item[$index], ENT_QUOTES);
}
$original_data = '';
if ($mode == 'edit') {
$original_data = "<input name='item_original_name' "
. "type='hidden' value='{$item['item_original_name']}'/>\n";
}
// Handle some logic first
if ($operation == 'change') {
if ($item['item_type'] == 'RECURRING') {
$item['item_type'] = 'ONE TIME';
$item['item_type_toggle'] = 'RECURRING';
} else {
$item['item_type'] = 'RECURRING';
$item['item_type_toggle'] = 'ONE TIME';
}
}
if ($item['item_type'] == 'ONE TIME') {
$isrecurring_class = ' hide';
$isonetime_class = '';
} else {
$isrecurring_class = '';
$isonetime_class = ' hide';
}
// Create the output
$retval = "";
$retval .= "<!-- START " . strtoupper($mode) . " EVENT FORM -->\n\n";
$retval .= "<form class='rte_form' action='db_events.php' method='post'>\n";
$retval .= "<input name='{$mode}_item' type='hidden' value='1' />\n";
$retval .= $original_data;
$retval .= PMA_generate_common_hidden_inputs($db, $table) . "\n";
$retval .= "<fieldset>\n";
$retval .= "<legend>" . __('Details') . "</legend>\n";
$retval .= "<table class='rte_table' style='width: 100%'>\n";
$retval .= "<tr>\n";
$retval .= " <td style='width: 20%;'>" . __('Event name') . "</td>\n";
$retval .= " <td><input type='text' name='item_name' \n";
$retval .= " value='{$item['item_name']}'\n";
$retval .= " maxlength='64' /></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Status') . "</td>\n";
$retval .= " <td>\n";
$retval .= " <select name='item_status'>\n";
foreach ($event_status['display'] as $key => $value) {
$selected = "";
if (! empty($item['item_status']) && $item['item_status'] == $value) {
$selected = " selected='selected'";
}
$retval .= "<option$selected>$value</option>";
}
$retval .= " </select>\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Event type') . "</td>\n";
$retval .= " <td>\n";
if ($GLOBALS['is_ajax_request']) {
$retval .= " <select name='item_type'>";
foreach ($event_type as $key => $value) {
$selected = "";
if (! empty($item['item_type']) && $item['item_type'] == $value) {
$selected = " selected='selected'";
}
$retval .= "<option$selected>$value</option>";
}
$retval .= " </select>\n";
} else {
$retval .= " <input name='item_type' type='hidden' \n";
$retval .= " value='{$item['item_type']}' />\n";
$retval .= " <div style='width: 49%; float: left; text-align: center; font-weight: bold;'>\n";
$retval .= " {$item['item_type']}\n";
$retval .= " </div>\n";
$retval .= " <input style='width: 49%;' type='submit'\n";
$retval .= " name='item_changetype'\n";
$retval .= " value='";
$retval .= sprintf(__('Change to %s'), $item['item_type_toggle']);
$retval .= "' />\n";
}
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr class='onetime_event_row $isonetime_class'>\n";
$retval .= " <td>" . __('Execute at') . "</td>\n";
$retval .= " <td class='nowrap'>\n";
$retval .= " <input type='text' name='item_execute_at'\n";
$retval .= " value='{$item['item_execute_at']}'\n";
$retval .= " class='datetimefield' />\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr class='recurring_event_row $isrecurring_class'>\n";
$retval .= " <td>" . __('Execute every') . "</td>\n";
$retval .= " <td>\n";
$retval .= " <input style='width: 49%;' type='text'\n";
$retval .= " name='item_interval_value'\n";
$retval .= " value='{$item['item_interval_value']}' />\n";
$retval .= " <select style='width: 49%;' name='item_interval_field'>";
foreach ($event_interval as $key => $value) {
$selected = "";
if (! empty($item['item_interval_field'])
&& $item['item_interval_field'] == $value
) {
$selected = " selected='selected'";
}
$retval .= "<option$selected>$value</option>";
}
$retval .= " </select>\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr class='recurring_event_row$isrecurring_class'>\n";
$retval .= " <td>" . __('Start') . "</td>\n";
$retval .= " <td class='nowrap'>\n";
$retval .= " <input type='text'\n name='item_starts'\n";
$retval .= " value='{$item['item_starts']}'\n";
$retval .= " class='datetimefield' />\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr class='recurring_event_row$isrecurring_class'>\n";
$retval .= " <td>" . __('End') . "</td>\n";
$retval .= " <td class='nowrap'>\n";
$retval .= " <input type='text' name='item_ends'\n";
$retval .= " value='{$item['item_ends']}'\n";
$retval .= " class='datetimefield' />\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Definition') . "</td>\n";
$retval .= " <td><textarea name='item_definition' rows='15' cols='40'>";
$retval .= $item['item_definition'];
$retval .= "</textarea></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('On completion preserve') . "</td>\n";
$retval .= " <td><input type='checkbox' name='item_preserve'{$item['item_preserve']} /></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Definer') . "</td>\n";
$retval .= " <td><input type='text' name='item_definer'\n";
$retval .= " value='{$item['item_definer']}' /></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Comment') . "</td>\n";
$retval .= " <td><input type='text' name='item_comment' maxlength='64'\n";
$retval .= " value='{$item['item_comment']}' /></td>\n";
$retval .= "</tr>\n";
$retval .= "</table>\n";
$retval .= "</fieldset>\n";
if ($GLOBALS['is_ajax_request']) {
$retval .= "<input type='hidden' name='editor_process_{$mode}'\n";
$retval .= " value='true' />\n";
$retval .= "<input type='hidden' name='ajax_request' value='true' />\n";
} else {
$retval .= "<fieldset class='tblFooters'>\n";
$retval .= " <input type='submit' name='editor_process_{$mode}'\n";
$retval .= " value='" . __('Go') . "' />\n";
$retval .= "</fieldset>\n";
}
$retval .= "</form>\n\n";
$retval .= "<!-- END " . strtoupper($mode) . " EVENT FORM -->\n\n";
return $retval;
} // end PMA_EVN_getEditorForm()
/**
* Composes the query necessary to create an event from an HTTP request.
*
* @return string The CREATE EVENT query.
*/
function PMA_EVN_getQueryFromRequest()
{
global $_REQUEST, $db, $errors, $event_status, $event_type, $event_interval;
$query = 'CREATE ';
if (! empty($_REQUEST['item_definer'])) {
if (strpos($_REQUEST['item_definer'], '@') !== false) {
$arr = explode('@', $_REQUEST['item_definer']);
$query .= 'DEFINER=' . PMA_backquote($arr[0]);
$query .= '@' . PMA_backquote($arr[1]) . ' ';
} else {
$errors[] = __('The definer must be in the "username@hostname" format');
}
}
$query .= 'EVENT ';
if (! empty($_REQUEST['item_name'])) {
$query .= PMA_backquote($_REQUEST['item_name']) . ' ';
} else {
$errors[] = __('You must provide an event name');
}
$query .= 'ON SCHEDULE ';
if (! empty($_REQUEST['item_type']) && in_array($_REQUEST['item_type'], $event_type)) {
if ($_REQUEST['item_type'] == 'RECURRING') {
if (! empty($_REQUEST['item_interval_value'])
&& !empty($_REQUEST['item_interval_field'])
&& in_array($_REQUEST['item_interval_field'], $event_interval)
) {
$query .= 'EVERY ' . intval($_REQUEST['item_interval_value']) . ' ';
$query .= $_REQUEST['item_interval_field'] . ' ';
} else {
$errors[] = __('You must provide a valid interval value for the event.');
}
if (! empty($_REQUEST['item_starts'])) {
$query .= "STARTS '" . PMA_sqlAddSlashes($_REQUEST['item_starts']) . "' ";
}
if (! empty($_REQUEST['item_ends'])) {
$query .= "ENDS '" . PMA_sqlAddSlashes($_REQUEST['item_ends']) . "' ";
}
} else {
if (! empty($_REQUEST['item_execute_at'])) {
$query .= "AT '" . PMA_sqlAddSlashes($_REQUEST['item_execute_at']) . "' ";
} else {
$errors[] = __('You must provide a valid execution time for the event.');
}
}
} else {
$errors[] = __('You must provide a valid type for the event.');
}
$query .= 'ON COMPLETION ';
if (empty($_REQUEST['item_preserve'])) {
$query .= 'NOT ';
}
$query .= 'PRESERVE ';
if (! empty($_REQUEST['item_status'])) {
foreach ($event_status['display'] as $key => $value) {
if ($value == $_REQUEST['item_status']) {
$query .= $event_status['query'][$key] . ' ';
break;
}
}
}
$query .= 'DO ';
if (! empty($_REQUEST['item_definition'])) {
$query .= $_REQUEST['item_definition'];
} else {
$errors[] = __('You must provide an event definition.');
}
return $query;
} // end PMA_EVN_getQueryFromRequest()
?>

View File

@ -0,0 +1,107 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Common functions for the export functionality for Routines, Triggers and Events.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* This function is called from one of the other functions in this file
* and it completes the handling of the export functionality.
*
* @param string $item_name The name of the item that we are exporting
* @param string $export_data The SQL query to create the requested item
*/
function PMA_RTE_handleExport($item_name, $export_data)
{
global $db, $table;
$item_name = htmlspecialchars(PMA_backquote($_GET['item_name']));
if ($export_data !== false) {
$export_data = '<textarea cols="40" rows="15" style="width: 100%;">'
. htmlspecialchars(trim($export_data)) . '</textarea>';
$title = sprintf(PMA_RTE_getWord('export'), $item_name);
if ($GLOBALS['is_ajax_request'] == true) {
$extra_data = array('title' => $title);
PMA_ajaxResponse($export_data, true, $extra_data);
} else {
echo "<fieldset>\n"
. "<legend>$title</legend>\n"
. $export_data
. "</fieldset>\n";
}
} else {
$_db = htmlspecialchars(PMA_backquote($db));
$response = __('Error in Processing Request') . ' : '
. sprintf(PMA_RTE_getWord('not_found'), $item_name, $_db);
$response = PMA_message::error($response);
if ($GLOBALS['is_ajax_request'] == true) {
PMA_ajaxResponse($response, false);
} else {
$response->display();
}
}
} // end PMA_RTE_handleExport()
/**
* If necessary, prepares event information and passes
* it to PMA_RTE_handleExport() for the actual export.
*/
function PMA_EVN_handleExport()
{
global $_GET, $db;
if (! empty($_GET['export_item']) && ! empty($_GET['item_name'])) {
$item_name = $_GET['item_name'];
$export_data = PMA_DBI_get_definition($db, 'EVENT', $item_name);
PMA_RTE_handleExport($item_name, $export_data);
}
} // end PMA_EVN_handleExport()
/**
* If necessary, prepares routine information and passes
* it to PMA_RTE_handleExport() for the actual export.
*/
function PMA_RTN_handleExport()
{
global $_GET, $db;
if (! empty($_GET['export_item']) && ! empty($_GET['item_name'])) {
$item_name = $_GET['item_name'];
$type = PMA_DBI_fetch_value(
"SELECT ROUTINE_TYPE " .
"FROM INFORMATION_SCHEMA.ROUTINES " .
"WHERE ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' " .
"AND SPECIFIC_NAME='" . PMA_sqlAddSlashes($item_name) . "';"
);
$export_data = PMA_DBI_get_definition($db, $type, $item_name);
PMA_RTE_handleExport($item_name, $export_data);
}
} // end PMA_RTN_handleExport()
/**
* If necessary, prepares trigger information and passes
* it to PMA_RTE_handleExport() for the actual export.
*/
function PMA_TRI_handleExport()
{
global $_GET, $db, $table;
if (! empty($_GET['export_item']) && ! empty($_GET['item_name'])) {
$item_name = $_GET['item_name'];
$triggers = PMA_DBI_get_triggers($db, $table, '');
$export_data = false;
foreach ($triggers as $trigger) {
if ($trigger['name'] === $item_name) {
$export_data = $trigger['create'];
break;
}
}
PMA_RTE_handleExport($item_name, $export_data);
}
} // end PMA_TRI_handleExport()
?>

View File

@ -0,0 +1,127 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Common functions for generating the footer for Routines, Triggers and Events.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* Creates a fieldset for adding a new item, if the user has the privileges.
*
* @param string $docu String used to create a link to the MySQL docs
* @param string $priv Privilege to check for adding a new item
* @param string $name MySQL name of the item
*
* @return string An HTML snippet with the link to add a new item
*/
function PMA_RTE_getFooterLinks($docu, $priv, $name)
{
global $db, $url_query, $ajax_class;
$icon = 'b_' . strtolower($name) . '_add.png';
$retval = "";
$retval .= "<!-- ADD " . $name . " FORM START -->\n";
$retval .= "<fieldset class='left'>\n";
$retval .= " <legend>" . __('New'). "</legend>\n";
$retval .= " <div class='wrap'>\n";
if (PMA_currentUserHasPrivilege($priv, $db)) {
$retval .= " <a {$ajax_class['add']} ";
$retval .= "href='db_" . strtolower($name) . "s.php";
$retval .= "?$url_query&amp;add_item=1'>";
$retval .= PMA_getIcon($icon);
$retval .= PMA_RTE_getWord('add') . "</a>\n";
} else {
$retval .= " " . PMA_getIcon($icon);
$retval .= PMA_RTE_getWord('no_create') . "\n";
}
$retval .= " " . PMA_showMySQLDocu('SQL-Syntax', $docu) . "\n";
$retval .= " </div>\n";
$retval .= "</fieldset>\n";
$retval .= "<!-- ADD " . $name . " FORM END -->\n\n";
return $retval;
} // end PMA_RTE_getFooterLinks()
/**
* Creates a fieldset for adding a new routine, if the user has the privileges.
*
* @return string HTML code with containing the fotter fieldset
*/
function PMA_RTN_getFooterLinks()
{
return PMA_RTE_getFooterLinks('CREATE_PROCEDURE', 'CREATE ROUTINE', 'ROUTINE');
}// end PMA_RTN_getFooterLinks()
/**
* Creates a fieldset for adding a new trigger, if the user has the privileges.
*
* @return string HTML code with containing the fotter fieldset
*/
function PMA_TRI_getFooterLinks()
{
return PMA_RTE_getFooterLinks('CREATE_TRIGGER', 'TRIGGER', 'TRIGGER');
} // end PMA_TRI_getFooterLinks()
/**
* Creates a fieldset for adding a new event, if the user has the privileges.
*
* @return string HTML code with containing the fotter fieldset
*/
function PMA_EVN_getFooterLinks()
{
global $db, $url_query, $ajax_class;
/**
* For events, we show the usual 'Add event' form and also
* a form for toggling the state of the event scheduler
*/
// Init options for the event scheduler toggle functionality
$es_state = PMA_DBI_fetch_value(
"SHOW GLOBAL VARIABLES LIKE 'event_scheduler'",
0,
1
);
$es_state = strtolower($es_state);
$options = array(
0 => array(
'label' => __('OFF'),
'value' => "SET GLOBAL event_scheduler=\"OFF\"",
'selected' => ($es_state != 'on')
),
1 => array(
'label' => __('ON'),
'value' => "SET GLOBAL event_scheduler=\"ON\"",
'selected' => ($es_state == 'on')
)
);
// Generate output
$retval = "<!-- FOOTER LINKS START -->\n";
$retval .= "<div class='doubleFieldset'>\n";
// show the usual footer
$retval .= PMA_RTE_getFooterLinks('CREATE_EVENT', 'EVENT', 'EVENT');
$retval .= " <fieldset class='right'>\n";
$retval .= " <legend>\n";
$retval .= " " . __('Event scheduler status') . "\n";
$retval .= " </legend>\n";
$retval .= " <div class='wrap'>\n";
// show the toggle button
$retval .= PMA_toggleButton(
"sql.php?$url_query&amp;goto=db_events.php" . urlencode("?db=$db"),
'sql_query',
$options,
'PMA_slidingMessage(data.sql_query);'
);
$retval .= " </div>\n";
$retval .= " </fieldset>\n";
$retval .= " <div style='clear: both;'></div>\n";
$retval .= "</div>";
$retval .= "<!-- FOOTER LINKS END -->\n";
return $retval;
} // end PMA_EVN_getFooterLinks()
?>

View File

@ -0,0 +1,338 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Common functions for generating lists of Routines, Triggers and Events.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* Creates a list of items containing the relevant
* information and some action links.
*
* @param string $type One of ['routine'|'trigger'|'event']
* @param array $items An array of items
*
* @return string HTML code of the list of items
*/
function PMA_RTE_getList($type, $items)
{
/**
* Conditional classes switch the list on or off
*/
$class1 = 'hide';
$class2 = '';
if (! $items) {
$class1 = '';
$class2 = ' hide';
}
/**
* Generate output
*/
$retval = "<!-- LIST OF " . PMA_RTE_getWord('docu') . " START -->\n";
$retval .= "<fieldset>\n";
$retval .= " <legend>\n";
$retval .= " " . PMA_RTE_getWord('title') . "\n";
$retval .= " " . PMA_showMySQLDocu('SQL-Syntax', PMA_RTE_getWord('docu')) . "\n";
$retval .= " </legend>\n";
$retval .= " <div class='$class1' id='nothing2display'>\n";
$retval .= " " . PMA_RTE_getWord('nothing') . "\n";
$retval .= " </div>\n";
$retval .= " <table class='data$class2'>\n";
$retval .= " <!-- TABLE HEADERS -->\n";
$retval .= " <tr>\n";
switch ($type) {
case 'routine':
$retval .= " <th>" . __('Name') . "</th>\n";
$retval .= " <th colspan='4'>" . __('Action') . "</th>\n";
$retval .= " <th>" . __('Type') . "</th>\n";
$retval .= " <th>" . __('Returns') . "</th>\n";
break;
case 'trigger':
$retval .= " <th>" . __('Name') . "</th>\n";
$retval .= " <th>" . __('Table') . "</th>\n";
$retval .= " <th colspan='3'>" . __('Action') . "</th>\n";
$retval .= " <th>" . __('Time') . "</th>\n";
$retval .= " <th>" . __('Event') . "</th>\n";
break;
case 'event':
$retval .= " <th>" . __('Name') . "</th>\n";
$retval .= " <th>" . __('Status') . "</th>\n";
$retval .= " <th colspan='3'>" . __('Action') . "</th>\n";
$retval .= " <th>" . __('Type') . "</th>\n";
break;
default:
break;
}
$retval .= " </tr>\n";
$retval .= " <!-- TABLE DATA -->\n";
$ct = 0;
foreach ($items as $item) {
$rowclass = ($ct % 2 == 0) ? 'even' : 'odd';
if ($GLOBALS['is_ajax_request']) {
$rowclass .= ' ajaxInsert hide';
}
// Get each row from the correct function
switch ($type) {
case 'routine':
$retval .= PMA_RTN_getRowForList($item, $rowclass);
break;
case 'trigger':
$retval .= PMA_TRI_getRowForList($item, $rowclass);
break;
case 'event':
$retval .= PMA_EVN_getRowForList($item, $rowclass);
break;
default:
break;
}
$ct++;
}
$retval .= " </table>\n";
$retval .= "</fieldset>\n";
$retval .= "<!-- LIST OF " . PMA_RTE_getWord('docu') . " END -->\n";
return $retval;
} // end PMA_RTE_getList()
/**
* Creates the contents for a row in the list of routines
*
* @param array $routine An array of routine data
* @param string $rowclass Empty or one of ['even'|'odd']
*
* @return string HTML code of a row for the list of routines
*/
function PMA_RTN_getRowForList($routine, $rowclass = '')
{
global $ajax_class, $url_query, $db, $titles;
$sql_drop = sprintf('DROP %s IF EXISTS %s',
$routine['ROUTINE_TYPE'],
PMA_backquote($routine['SPECIFIC_NAME']));
$retval = " <tr class='noclick $rowclass'>\n";
$retval .= " <td>\n";
$retval .= " <span class='drop_sql hide'>$sql_drop</span>\n";
$retval .= " <strong>\n";
$retval .= " " . htmlspecialchars($routine['SPECIFIC_NAME']) . "\n";
$retval .= " </strong>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if ($routine['ROUTINE_DEFINITION'] !== null
&& PMA_currentUserHasPrivilege('ALTER ROUTINE', $db)
&& PMA_currentUserHasPrivilege('CREATE ROUTINE', $db)
) {
$retval .= ' <a ' . $ajax_class['edit']
. ' href="db_routines.php?'
. $url_query
. '&amp;edit_item=1'
. '&amp;item_name=' . urlencode($routine['SPECIFIC_NAME'])
. '">' . $titles['Edit'] . "</a>\n";
} else {
$retval .= " {$titles['NoEdit']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
if ($routine['ROUTINE_DEFINITION'] !== null
&& PMA_currentUserHasPrivilege('EXECUTE', $db)
) {
// Check if he routine has any input parameters. If it does,
// we will show a dialog to get values for these parameters,
// otherwise we can execute it directly.
$routine_details = PMA_RTN_getDataFromName(
$routine['SPECIFIC_NAME'],
false
);
if ($routine !== false) {
$execute_action = 'execute_routine';
for ($i=0; $i<$routine_details['item_num_params']; $i++) {
if ($routine_details['item_type'] == 'PROCEDURE'
&& $routine_details['item_param_dir'][$i] == 'OUT'
) {
continue;
}
$execute_action = 'execute_dialog';
break;
}
$retval .= ' <a ' . $ajax_class['exec']
. ' href="db_routines.php?'
. $url_query
. '&amp;' . $execute_action . '=1'
. '&amp;item_name=' . urlencode($routine['SPECIFIC_NAME'])
. '">' . $titles['Execute'] . "</a>\n";
}
} else {
$retval .= " {$titles['NoExecute']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= ' <a ' . $ajax_class['export']
. ' href="db_routines.php?'
. $url_query
. '&amp;export_item=1'
. '&amp;item_name=' . urlencode($routine['SPECIFIC_NAME'])
. '">' . $titles['Export'] . "</a>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if (PMA_currentUserHasPrivilege('EVENT', $db)) {
$retval .= ' <a ' . $ajax_class['drop']
. ' href="sql.php?'
. $url_query
. '&amp;sql_query=' . urlencode($sql_drop)
. '&amp;goto=db_events.php' . urlencode("?db={$db}")
. '" >' . $titles['Drop'] . "</a>\n";
} else {
$retval .= " {$titles['NoDrop']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " {$routine['ROUTINE_TYPE']}\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " " . htmlspecialchars($routine['DTD_IDENTIFIER']) . "\n";
$retval .= " </td>\n";
$retval .= " </tr>\n";
return $retval;
} // end PMA_RTN_getRowForList()
/**
* Creates the contents for a row in the list of triggers
*
* @param array $trigger An array of routine data
* @param string $rowclass Empty or one of ['even'|'odd']
*
* @return string HTML code of a cell for the list of triggers
*/
function PMA_TRI_getRowForList($trigger, $rowclass = '')
{
global $ajax_class, $url_query, $db, $table, $titles;
$retval = " <tr class='noclick $rowclass'>\n";
$retval .= " <td>\n";
$retval .= " <span class='drop_sql hide'>{$trigger['drop']}</span>\n";
$retval .= " <strong>\n";
$retval .= " " . htmlspecialchars($trigger['name']) . "\n";
$retval .= " </strong>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " <a href='db_triggers.php?db={$db}"
. "&amp;table={$trigger['table']}'>"
. $trigger['table'] . "</a>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if (PMA_currentUserHasPrivilege('TRIGGER', $db, $table)) {
$retval .= ' <a ' . $ajax_class['edit']
. ' href="db_triggers.php?'
. $url_query
. '&amp;edit_item=1'
. '&amp;item_name=' . urlencode($trigger['name'])
. '">' . $titles['Edit'] . "</a>\n";
} else {
$retval .= " {$titles['NoEdit']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= ' <a ' . $ajax_class['export']
. ' href="db_triggers.php?'
. $url_query
. '&amp;export_item=1'
. '&amp;item_name=' . urlencode($trigger['name'])
. '">' . $titles['Export'] . "</a>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if (PMA_currentUserHasPrivilege('TRIGGER', $db)) {
$retval .= ' <a ' . $ajax_class['drop']
. ' href="sql.php?'
. $url_query
. '&amp;sql_query=' . urlencode($trigger['drop'])
. '&amp;goto=db_triggers.php' . urlencode("?db={$db}")
. '" >' . $titles['Drop'] . "</a>\n";
} else {
$retval .= " {$titles['NoDrop']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " {$trigger['action_timing']}\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " {$trigger['event_manipulation']}\n";
$retval .= " </td>\n";
$retval .= " </tr>\n";
return $retval;
} // end PMA_TRI_getRowForList()
/**
* Creates the contents for a row in the list of events
*
* @param array $event An array of routine data
* @param string $rowclass Empty or one of ['even'|'odd']
*
* @return string HTML code of a cell for the list of events
*/
function PMA_EVN_getRowForList($event, $rowclass = '')
{
global $ajax_class, $url_query, $db, $titles;
$sql_drop = sprintf(
'DROP EVENT IF EXISTS %s',
PMA_backquote($event['EVENT_NAME'])
);
$retval = " <tr class='noclick $rowclass'>\n";
$retval .= " <td>\n";
$retval .= " <span class='drop_sql hide'>$sql_drop</span>\n";
$retval .= " <strong>\n";
$retval .= " " . htmlspecialchars($event['EVENT_NAME']) . "\n";
$retval .= " </strong>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " {$event['STATUS']}\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if (PMA_currentUserHasPrivilege('EVENT', $db)) {
$retval .= ' <a ' . $ajax_class['edit']
. ' href="db_events.php?'
. $url_query
. '&amp;edit_item=1'
. '&amp;item_name=' . urlencode($event['EVENT_NAME'])
. '">' . $titles['Edit'] . "</a>\n";
} else {
$retval .= " {$titles['NoEdit']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= ' <a ' . $ajax_class['export']
. ' href="db_events.php?'
. $url_query
. '&amp;export_item=1'
. '&amp;item_name=' . urlencode($event['EVENT_NAME'])
. '">' . $titles['Export'] . "</a>\n";
$retval .= " </td>\n";
$retval .= " <td>\n";
if (PMA_currentUserHasPrivilege('EVENT', $db)) {
$retval .= ' <a ' . $ajax_class['drop']
. ' href="sql.php?'
. $url_query
. '&amp;sql_query=' . urlencode($sql_drop)
. '&amp;goto=db_events.php' . urlencode("?db={$db}")
. '" >' . $titles['Drop'] . "</a>\n";
} else {
$retval .= " {$titles['NoDrop']}\n";
}
$retval .= " </td>\n";
$retval .= " <td>\n";
$retval .= " {$event['EVENT_TYPE']}\n";
$retval .= " </td>\n";
$retval .= " </tr>\n";
return $retval;
} // end PMA_EVN_getRowForList()
?>

View File

@ -0,0 +1,135 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Common code for Routines, Triggers and Events.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* Include all other files that are common
* to routines, triggers and events.
*/
require_once './libraries/rte/rte_export.lib.php';
require_once './libraries/rte/rte_list.lib.php';
require_once './libraries/rte/rte_footer.lib.php';
if ($GLOBALS['is_ajax_request'] != true) {
/**
* Displays the header and tabs
*/
if (! empty($table) && in_array($table, PMA_DBI_get_tables($db))) {
require_once './libraries/tbl_common.php';
require_once './libraries/tbl_links.inc.php';
} else {
$table = '';
require_once './libraries/db_common.inc.php';
require_once './libraries/db_info.inc.php';
}
} else {
/**
* Since we did not include some libraries, we need
* to manually select the required database and
* create the missing $url_query variable
*/
if (strlen($db)) {
PMA_DBI_select_db($db);
if (! isset($url_query)) {
$url_query = PMA_generate_common_url($db, $table);
}
}
}
/**
* Generate the conditional classes that will
* be used to attach jQuery events to links
*/
$ajax_class = array('add' => '',
'edit' => '',
'exec' => '',
'drop' => '',
'export' => '');
if ($GLOBALS['cfg']['AjaxEnable']) {
$ajax_class = array('add' => 'class="ajax_add_anchor"',
'edit' => 'class="ajax_edit_anchor"',
'exec' => 'class="ajax_exec_anchor"',
'drop' => 'class="ajax_drop_anchor"',
'export' => 'class="ajax_export_anchor"');
}
/**
* Create labels for the list
*/
$titles = PMA_buildActionTitles();
/**
* Keep a list of errors that occured while
* processing an 'Add' or 'Edit' operation.
*/
$errors = array();
// Some definitions for triggers
$action_timings = array('BEFORE',
'AFTER');
$event_manipulations = array('INSERT',
'UPDATE',
'DELETE');
// Some definitions for routines
$param_directions = array('IN',
'OUT',
'INOUT');
$param_opts_num = array('UNSIGNED',
'ZEROFILL',
'UNSIGNED ZEROFILL');
$param_sqldataaccess = array('NO SQL',
'CONTAINS SQL',
'READS SQL DATA',
'MODIFIES SQL DATA');
// Some definitions for events
$event_status = array(
'query' => array('ENABLE',
'DISABLE',
'DISABLE ON SLAVE'),
'display' => array('ENABLED',
'DISABLED',
'SLAVESIDE_DISABLED')
);
$event_type = array('RECURRING',
'ONE TIME');
$event_interval = array('YEAR',
'QUARTER',
'MONTH',
'DAY',
'HOUR',
'MINUTE',
'WEEK',
'SECOND',
'YEAR_MONTH',
'DAY_HOUR',
'DAY_MINUTE',
'DAY_SECOND',
'HOUR_MINUTE',
'HOUR_SECOND',
'MINUTE_SECOND');
/**
* The below function is defined in rte_routines.lib.php,
* rte_triggers.lib.php and rte_events.lib.php
*
* The appropriate function will now be called based on which one
* of these files was included earlier in the top-level folder
*/
PMA_RTE_main();
/**
* Display the footer, if necessary
*/
if ($GLOBALS['is_ajax_request'] != true) {
require './libraries/footer.inc.php';
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,435 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Functions for trigger management.
*
* @package phpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
/**
* This function is defined in: rte_routines.lib.php, rte_triggers.lib.php and
* rte_events.lib.php. It is used to retreive some language strings that are
* used in functionalities that are common to routines, triggers and events.
*
* @param string $index The index of the string to get
*
* @return string The requested string or an empty string, if not available
*/
function PMA_RTE_getWord($index)
{
$words = array(
'add' => __('Add trigger'),
'docu' => 'TRIGGERS',
'export' => __('Export of trigger %s'),
'human' => __('trigger'),
'no_create' => __('You do not have the necessary privileges to create a new trigger'),
'not_found' => __('No trigger with name %1$s found in database %2$s'),
'nothing' => __('There are no triggers to display.'),
'title' => __('Triggers'),
);
return isset($words[$index]) ? $words[$index] : '';
} // end PMA_RTE_getWord()
/**
* Main function for the triggers functionality
*/
function PMA_RTE_main()
{
global $db, $table;
/**
* Process all requests
*/
PMA_TRI_handleEditor();
PMA_TRI_handleExport();
/**
* Display a list of available triggers
*/
$items = PMA_DBI_get_triggers($db, $table);
echo PMA_RTE_getList('trigger', $items);
/**
* Display a link for adding a new trigger,
* if the user has the necessary privileges
*/
echo PMA_TRI_getFooterLinks();
} // end PMA_RTE_main()
/**
* Handles editor requests for adding or editing an item
*/
function PMA_TRI_handleEditor()
{
global $_REQUEST, $_POST, $errors, $db, $table;
if (! empty($_REQUEST['editor_process_add'])
|| ! empty($_REQUEST['editor_process_edit'])
) {
$sql_query = '';
$item_query = PMA_TRI_getQueryFromRequest();
if (! count($errors)) { // set by PMA_RTN_getQueryFromRequest()
// Execute the created query
if (! empty($_REQUEST['editor_process_edit'])) {
// Backup the old trigger, in case something goes wrong
$trigger = PMA_TRI_getDataFromName($_REQUEST['item_original_name']);
$create_item = $trigger['create'];
$drop_item = $trigger['drop'] . ';';
$result = PMA_DBI_try_query($drop_item);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $drop_item) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$result = PMA_DBI_try_query($item_query);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $item_query) . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
// We dropped the old item, but were unable to create the new one
// Try to restore the backup query
$result = PMA_DBI_try_query($create_item);
if (! $result) {
// OMG, this is really bad! We dropped the query, failed to create a new one
// and now even the backup query does not execute!
// This should not happen, but we better handle this just in case.
$errors[] = __('Sorry, we failed to restore the dropped trigger.') . '<br />'
. __('The backed up query was:') . "\"$create_item\"" . '<br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
}
} else {
$message = PMA_Message::success(__('Trigger %1$s has been modified.'));
$message->addParam(PMA_backquote($_REQUEST['item_name']));
$sql_query = $drop_item . $item_query;
}
}
} else {
// 'Add a new item' mode
$result = PMA_DBI_try_query($item_query);
if (! $result) {
$errors[] = sprintf(__('The following query has failed: "%s"'), $item_query) . '<br /><br />'
. __('MySQL said: ') . PMA_DBI_getError(null);
} else {
$message = PMA_Message::success(__('Trigger %1$s has been created.'));
$message->addParam(PMA_backquote($_REQUEST['item_name']));
$sql_query = $item_query;
}
}
}
if (count($errors)) {
$message = PMA_Message::error(__('<b>One or more errors have occured while processing your request:</b>'));
$message->addString('<ul>');
foreach ($errors as $num => $string) {
$message->addString('<li>' . $string . '</li>');
}
$message->addString('</ul>');
}
$output = PMA_showMessage($message, $sql_query);
if ($GLOBALS['is_ajax_request']) {
$extra_data = array();
if ($message->isSuccess()) {
$items = PMA_DBI_get_triggers($db, $table, '');
$trigger = false;
foreach ($items as $key => $value) {
if ($value['name'] == $_REQUEST['item_name']) {
$trigger = $value;
}
}
$extra_data['insert'] = false;
if (empty($table) || ($trigger !== false && $table == $trigger['table'])) {
$extra_data['insert'] = true;
$extra_data['new_row'] = PMA_TRI_getRowForList($trigger);
$extra_data['name'] = htmlspecialchars(
strtoupper($_REQUEST['item_name'])
);
}
$response = $output;
} else {
$response = $message;
}
PMA_ajaxResponse($response, $message->isSuccess(), $extra_data);
}
}
/**
* Display a form used to add/edit a trigger, if necessary
*/
if (count($errors) || ( empty($_REQUEST['editor_process_add']) && empty($_REQUEST['editor_process_edit'])
&& (! empty($_REQUEST['add_item']) || ! empty($_REQUEST['edit_item']))) // FIXME: this must be simpler than that
) {
// Get the data for the form (if any)
if (! empty($_REQUEST['add_item'])) {
$title = __("Create trigger");
$item = PMA_TRI_getDataFromRequest();
$mode = 'add';
} else if (! empty($_REQUEST['edit_item'])) {
$title = __("Edit trigger");
if (! empty($_REQUEST['item_name'])
&& empty($_REQUEST['editor_process_edit'])
) {
$item = PMA_TRI_getDataFromName($_REQUEST['item_name']);
if ($item !== false) {
$item['item_original_name'] = $item['item_name'];
}
} else {
$item = PMA_TRI_getDataFromRequest();
}
$mode = 'edit';
}
if ($item !== false) {
// Show form
$editor = PMA_TRI_getEditorForm($mode, $item);
if ($GLOBALS['is_ajax_request']) {
$extra_data = array('title' => $title);
PMA_ajaxResponse($editor, true, $extra_data);
} else {
echo "\n\n<h2>$title</h2>\n\n$editor";
unset($_POST);
require './libraries/footer.inc.php';
}
// exit;
} else {
$message = __('Error in processing request') . ' : ';
$message .= sprintf(
PMA_RTE_getWord('not_found'),
htmlspecialchars(PMA_backquote($_REQUEST['item_name'])),
htmlspecialchars(PMA_backquote($db))
);
$message = PMA_message::error($message);
if ($GLOBALS['is_ajax_request']) {
PMA_ajaxResponse($message, false);
} else {
$message->display();
}
}
}
} // end PMA_TRI_handleEditor()
/**
* This function will generate the values that are required to for the editor
*
* @return array Data necessary to create the editor.
*/
function PMA_TRI_getDataFromRequest()
{
$retval = array();
$indices = array('item_name',
'item_table',
'item_original_name',
'item_action_timing',
'item_event_manipulation',
'item_definition',
'item_definer');
foreach ($indices as $key => $index) {
$retval[$index] = isset($_REQUEST[$index]) ? $_REQUEST[$index] : '';
}
return $retval;
} // end PMA_TRI_getDataFromRequest()
/**
* This function will generate the values that are required to complete
* the "Edit trigger" form given the name of a trigger.
*
* @param string $name The name of the trigger.
*
* @return array Data necessary to create the editor.
*/
function PMA_TRI_getDataFromName($name)
{
global $db, $table, $_REQUEST;
$temp = array();
$items = PMA_DBI_get_triggers($db, $table, '');
foreach ($items as $key => $value) {
if ($value['name'] == $name) {
$temp = $value;
}
}
if (empty($temp)) {
return false;
} else {
$retval = array();
$retval['create'] = $temp['create'];
$retval['drop'] = $temp['drop'];
$retval['item_name'] = $temp['name'];
$retval['item_table'] = $temp['table'];
$retval['item_action_timing'] = $temp['action_timing'];
$retval['item_event_manipulation'] = $temp['event_manipulation'];
$retval['item_definition'] = $temp['definition'];
$retval['item_definer'] = $temp['definer'];
return $retval;
}
} // end PMA_TRI_getDataFromName()
/**
* Displays a form used to add/edit a trigger
*
* @param string $mode If the editor will be used edit a trigger
* or add a new one: 'edit' or 'add'.
* @param array $item Data for the trigger returned by
* PMA_TRI_getDataFromRequest() or
* PMA_TRI_getDataFromName()
*
* @return string HTML code for the editor.
*/
function PMA_TRI_getEditorForm($mode, $item)
{
global $db, $table, $titles, $event_manipulations, $action_timings;
// Escape special characters
$need_escape = array(
'item_original_name',
'item_name',
'item_definition',
'item_definer'
);
foreach ($need_escape as $key => $index) {
$item[$index] = htmlentities($item[$index], ENT_QUOTES);
}
$original_data = '';
if ($mode == 'edit') {
$original_data = "<input name='item_original_name' "
. "type='hidden' value='{$item['item_original_name']}'/>\n";
}
// Create the output
$retval = "";
$retval .= "<!-- START " . strtoupper($mode) . " TRIGGER FORM -->\n\n";
$retval .= "<form class='rte_form' action='db_triggers.php' method='post'>\n";
$retval .= "<input name='{$mode}_item' type='hidden' value='1' />\n";
$retval .= $original_data;
$retval .= PMA_generate_common_hidden_inputs($db, $table) . "\n";
$retval .= "<fieldset>\n";
$retval .= "<legend>" . __('Details') . "</legend>\n";
$retval .= "<table class='rte_table' style='width: 100%'>\n";
$retval .= "<tr>\n";
$retval .= " <td style='width: 20%;'>" . __('Trigger name') . "</td>\n";
$retval .= " <td><input type='text' name='item_name' maxlength='64'\n";
$retval .= " value='{$item['item_name']}' /></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Table') . "</td>\n";
$retval .= " <td>\n";
$retval .= " <select name='item_table'>\n";
foreach (PMA_DBI_get_tables($db) as $key => $value) {
$selected = "";
if ($value == $item['item_table']) {
$selected = " selected='selected'";
}
$retval .= " <option$selected>$value</option>\n";
}
$retval .= " </select>\n";
$retval .= " </td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Time') . "</td>\n";
$retval .= " <td><select name='item_timing'>\n";
foreach ($action_timings as $key => $value) {
$selected = "";
if (! empty($item['item_action_timing'])
&& $item['item_action_timing'] == $value
) {
$selected = " selected='selected'";
}
$retval .= "<option$selected>$value</option>";
}
$retval .= " </select></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Event') . "</td>\n";
$retval .= " <td><select name='item_event'>\n";
foreach ($event_manipulations as $key => $value) {
$selected = "";
if (! empty($item['item_event_manipulation'])
&& $item['item_event_manipulation'] == $value
) {
$selected = " selected='selected'";
}
$retval .= "<option$selected>$value</option>";
}
$retval .= " </select></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Definition') . "</td>\n";
$retval .= " <td><textarea name='item_definition' rows='15' cols='40'>";
$retval .= $item['item_definition'];
$retval .= "</textarea></td>\n";
$retval .= "</tr>\n";
$retval .= "<tr>\n";
$retval .= " <td>" . __('Definer') . "</td>\n";
$retval .= " <td><input type='text' name='item_definer'\n";
$retval .= " value='{$item['item_definer']}' /></td>\n";
$retval .= "</tr>\n";
$retval .= "</table>\n";
$retval .= "</fieldset>\n";
if ($GLOBALS['is_ajax_request']) {
$retval .= "<input type='hidden' name='editor_process_{$mode}'\n";
$retval .= " value='true' />\n";
$retval .= "<input type='hidden' name='ajax_request' value='true' />\n";
} else {
$retval .= "<fieldset class='tblFooters'>\n";
$retval .= " <input type='submit' name='editor_process_{$mode}'\n";
$retval .= " value='" . __('Go') . "' />\n";
$retval .= "</fieldset>\n";
}
$retval .= "</form>\n\n";
$retval .= "<!-- END " . strtoupper($mode) . " TRIGGER FORM -->\n\n";
return $retval;
} // end PMA_TRI_getEditorForm()
/**
* Composes the query necessary to create a trigger from an HTTP request.
*
* @return string The CREATE TRIGGER query.
*/
function PMA_TRI_getQueryFromRequest()
{
global $_REQUEST, $db, $errors, $action_timings, $event_manipulations;
$query = 'CREATE ';
if (! empty($_REQUEST['item_definer'])) {
if (strpos($_REQUEST['item_definer'], '@') !== false) {
$arr = explode('@', $_REQUEST['item_definer']);
$query .= 'DEFINER=' . PMA_backquote($arr[0]);
$query .= '@' . PMA_backquote($arr[1]) . ' ';
} else {
$errors[] = __('The definer must be in the "username@hostname" format');
}
}
$query .= 'TRIGGER ';
if (! empty($_REQUEST['item_name'])) {
$query .= PMA_backquote($_REQUEST['item_name']) . ' ';
} else {
$errors[] = __('You must provide a trigger name');
}
if (! empty($_REQUEST['item_timing']) && in_array($_REQUEST['item_timing'], $action_timings)) {
$query .= $_REQUEST['item_timing'] . ' ';
} else {
$errors[] = __('You must provide a valid timing for the trigger');
}
if (! empty($_REQUEST['item_event']) && in_array($_REQUEST['item_event'], $event_manipulations)) {
$query .= $_REQUEST['item_event'] . ' ';
} else {
$errors[] = __('You must provide a valid event for the trigger');
}
$query .= 'ON ';
if (! empty($_REQUEST['item_table']) && in_array($_REQUEST['item_table'], PMA_DBI_get_tables($db))) {
$query .= PMA_backQuote($_REQUEST['item_table']);
} else {
$errors[] = __('You must provide a valid table name');
}
$query .= ' FOR EACH ROW ';
if (! empty($_REQUEST['item_definition'])) {
$query .= $_REQUEST['item_definition'];
} else {
$errors[] = __('You must provide a trigger definition.');
}
return $query;
} // end PMA_TRI_getQueryFromRequest()
?>

View File

@ -98,10 +98,11 @@ if(PMA_Tracker::isActive()) {
$tabs['tracking']['link'] = 'tbl_tracking.php';
}
if (! $db_is_information_schema && PMA_MYSQL_INT_VERSION >= 50002 && ! PMA_DRIZZLE) {
// Temporarily hiding this unfinished feature
// $tabs['triggers']['link'] = 'tbl_triggers.php';
// $tabs['triggers']['text'] = __('Triggers');
// $tabs['triggers']['icon'] = 'b_triggers.png';
if (PMA_currentUserHasPrivilege('TRIGGER', $db, $table)) {
$tabs['triggers']['link'] = 'tbl_triggers.php';
$tabs['triggers']['text'] = __('Triggers');
$tabs['triggers']['icon'] = 'b_triggers.png';
}
}
/**

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 3.5.0-dev\n"
"Report-Msgid-Bugs-To: phpmyadmin-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-07-07 15:16+0200\n"
"PO-Revision-Date: 2011-07-10 19:45+0200\n"
"PO-Revision-Date: 2011-07-11 20:39+0200\n"
"Last-Translator: <fulup.jakez@ofis-bzh.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: br\n"
@ -2825,7 +2825,7 @@ msgstr "Bannoù gronnet gant"
#: libraries/config/messages.inc.php:249 libraries/import/csv.php:81
#: libraries/import/ldi.php:43
msgid "Columns escaped by"
msgstr ""
msgstr "Arouezenn dec'hout"
#: libraries/config/messages.inc.php:77 libraries/config/messages.inc.php:83
#: libraries/config/messages.inc.php:90 libraries/config/messages.inc.php:99
@ -2833,38 +2833,38 @@ msgstr ""
#: libraries/config/messages.inc.php:142 libraries/config/messages.inc.php:145
#: libraries/config/messages.inc.php:147 libraries/export/texytext.php:27
msgid "Replace NULL by"
msgstr ""
msgstr "Erlec'hiañ NULL gant"
#: libraries/config/messages.inc.php:78 libraries/config/messages.inc.php:84
msgid "Remove CRLF characters within columns"
msgstr ""
msgstr "Tennañ an arouezennoù dibenn linenn e dibarzh ar bannoù"
#: libraries/config/messages.inc.php:79 libraries/config/messages.inc.php:245
#: libraries/config/messages.inc.php:253 libraries/import/csv.php:63
#: libraries/import/ldi.php:41
msgid "Columns terminated by"
msgstr ""
msgstr "Bannoù a echu gant"
#: libraries/config/messages.inc.php:80 libraries/config/messages.inc.php:240
#: libraries/import/csv.php:86 libraries/import/ldi.php:44
msgid "Lines terminated by"
msgstr ""
msgstr "Linennoù a echu gant"
#: libraries/config/messages.inc.php:82
msgid "Excel edition"
msgstr ""
msgstr "Stumm Excel"
#: libraries/config/messages.inc.php:85
msgid "Database name template"
msgstr ""
msgstr "Patrom anv diaz roadennoù"
#: libraries/config/messages.inc.php:86
msgid "Server name template"
msgstr ""
msgstr "Patrom anv servijer"
#: libraries/config/messages.inc.php:87
msgid "Table name template"
msgstr ""
msgstr "Patrom anv taolenn"
#: libraries/config/messages.inc.php:91 libraries/config/messages.inc.php:104
#: libraries/config/messages.inc.php:113 libraries/config/messages.inc.php:137
@ -2872,74 +2872,74 @@ msgstr ""
#: libraries/export/latex.php:40 libraries/export/odt.php:32
#: libraries/export/sql.php:116 libraries/export/texytext.php:23
msgid "Dump table"
msgstr ""
msgstr "Ezporzhiañ an daolenn"
#: libraries/config/messages.inc.php:92 libraries/export/latex.php:32
msgid "Include table caption"
msgstr ""
msgstr "Enklozañ an istitloù"
#: libraries/config/messages.inc.php:95 libraries/config/messages.inc.php:101
#: libraries/export/latex.php:50 libraries/export/latex.php:74
msgid "Table caption"
msgstr ""
msgstr "Istitl eus an daolenn"
#: libraries/config/messages.inc.php:96 libraries/config/messages.inc.php:102
msgid "Continued table caption"
msgstr ""
msgstr "Enklozañ an istitloù"
#: libraries/config/messages.inc.php:97 libraries/config/messages.inc.php:103
#: libraries/export/latex.php:54 libraries/export/latex.php:78
msgid "Label key"
msgstr ""
msgstr "Alc'hwez an dikedenn"
#: libraries/config/messages.inc.php:98 libraries/config/messages.inc.php:110
#: libraries/config/messages.inc.php:134 libraries/export/odt.php:326
#: libraries/tbl_properties.inc.php:145
msgid "MIME type"
msgstr ""
msgstr "Seurt MIME"
#: libraries/config/messages.inc.php:100 libraries/config/messages.inc.php:112
#: libraries/config/messages.inc.php:136 tbl_relation.php:396
msgid "Relations"
msgstr ""
msgstr "Darempredoù"
#: libraries/config/messages.inc.php:105
msgid "Export method"
msgstr ""
msgstr "Doare ezporzhiañ"
#: libraries/config/messages.inc.php:114 libraries/config/messages.inc.php:116
msgid "Save on server"
msgstr ""
msgstr "Enrollañ war ar servijer"
#: libraries/config/messages.inc.php:115 libraries/config/messages.inc.php:117
#: libraries/display_export.lib.php:188 libraries/display_export.lib.php:214
msgid "Overwrite existing file(s)"
msgstr ""
msgstr "Frikañ ar restroù zo c'hoazh"
#: libraries/config/messages.inc.php:118
msgid "Remember file name template"
msgstr ""
msgstr "Derc'hel soñj eus patrom anv ar restr"
#: libraries/config/messages.inc.php:120
msgid "Enclose table and column names with backquotes"
msgstr ""
msgstr "Lakaat krochedoù stouet a bep tu da anvioù an taolennoù hag ar bannoù"
#: libraries/config/messages.inc.php:121 libraries/config/messages.inc.php:260
#: libraries/display_export.lib.php:346
msgid "SQL compatibility mode"
msgstr ""
msgstr "Mod kenglotañ gant SQL"
#: libraries/config/messages.inc.php:122 libraries/export/sql.php:176
msgid "<code>CREATE TABLE</code> options:"
msgstr ""
msgstr "Dibarzhioù evit <code>CREATE TABLE</code> :"
#: libraries/config/messages.inc.php:123
msgid "Creation/Update/Check dates"
msgstr ""
msgstr "Deiziad krouiñ/hizivaat/gwiriañ"
#: libraries/config/messages.inc.php:124
msgid "Use delayed inserts"
msgstr ""
msgstr "Ensoc'hadennoù gant dale"
#: libraries/config/messages.inc.php:125 libraries/export/sql.php:79
msgid "Disable foreign key checks"

View File

@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 3.5.0-dev\n"
"Report-Msgid-Bugs-To: phpmyadmin-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-07-07 15:16+0200\n"
"PO-Revision-Date: 2011-07-11 14:02+0200\n"
"PO-Revision-Date: 2011-07-11 15:49+0200\n"
"Last-Translator: <jacobkamphansen@gmail.com>\n"
"Language-Team: danish <da@li.org>\n"
"Language: da\n"
@ -2373,7 +2373,7 @@ msgstr "Der er ikke nogen filer at uploade"
#: libraries/common.lib.php:2849 libraries/common.lib.php:2850
msgid "Execute"
msgstr ""
msgstr "Udfør"
#: libraries/config.values.php:45 libraries/config.values.php:47
#: libraries/config.values.php:51
@ -2411,12 +2411,11 @@ msgstr "struktur"
#: libraries/export/latex.php:42 libraries/export/odt.php:34
#: libraries/export/sql.php:123 libraries/export/texytext.php:24
msgid "data"
msgstr ""
msgstr "data"
#: libraries/config.values.php:98 libraries/export/htmlword.php:25
#: libraries/export/latex.php:42 libraries/export/odt.php:34
#: libraries/export/sql.php:124 libraries/export/texytext.php:24
#, fuzzy
#| msgid "Structure and data"
msgid "structure and data"
msgstr "Struktur og data"
@ -2622,7 +2621,7 @@ msgstr ""
#: libraries/config/messages.inc.php:31
msgid "Bzip2"
msgstr ""
msgstr "Bzip2"
#: libraries/config/messages.inc.php:32
msgid ""
@ -2830,7 +2829,6 @@ msgstr "Komprimering"
#: libraries/export/latex.php:72 libraries/export/ods.php:25
#: libraries/export/odt.php:58 libraries/export/texytext.php:28
#: libraries/export/xls.php:25 libraries/export/xlsx.php:25
#, fuzzy
#| msgid "Put fields names in the first row"
msgid "Put columns names in the first row"
msgstr "Indsæt feltnavne i første række"
@ -2844,10 +2842,9 @@ msgstr "Felter skal adskilles med"
#: libraries/config/messages.inc.php:76 libraries/config/messages.inc.php:242
#: libraries/config/messages.inc.php:249 libraries/import/csv.php:81
#: libraries/import/ldi.php:43
#, fuzzy
#| msgid "Fields escaped by"
msgid "Columns escaped by"
msgstr "Felter escaped med"
msgstr "Kolonner escapes med"
#: libraries/config/messages.inc.php:77 libraries/config/messages.inc.php:83
#: libraries/config/messages.inc.php:90 libraries/config/messages.inc.php:99
@ -2859,21 +2856,20 @@ msgstr "Erstat NULL med"
#: libraries/config/messages.inc.php:78 libraries/config/messages.inc.php:84
msgid "Remove CRLF characters within columns"
msgstr "Fjern karakterer for linjeskift i felterne"
msgstr "Fjern CRLF-karakterer i kolonnerne"
#: libraries/config/messages.inc.php:79 libraries/config/messages.inc.php:245
#: libraries/config/messages.inc.php:253 libraries/import/csv.php:63
#: libraries/import/ldi.php:41
msgid "Columns terminated by"
msgstr "Felter afsluttes med"
msgstr "Kolonner afsluttes med"
#: libraries/config/messages.inc.php:80 libraries/config/messages.inc.php:240
#: libraries/import/csv.php:86 libraries/import/ldi.php:44
msgid "Lines terminated by"
msgstr "Linjer afsluttet med"
msgstr "Linjer afsluttes med"
#: libraries/config/messages.inc.php:82
#, fuzzy
#| msgid "Excel edition"
msgid "Excel edition"
msgstr "Excel-udgave"
@ -2884,11 +2880,11 @@ msgstr "Skabelon for databasenavn"
#: libraries/config/messages.inc.php:86
msgid "Server name template"
msgstr "Maske for servernavn"
msgstr "Skabelon for servernavn"
#: libraries/config/messages.inc.php:87
msgid "Table name template"
msgstr "Maske for tabelnavn"
msgstr "Skabelon for tabelnavn"
#: libraries/config/messages.inc.php:91 libraries/config/messages.inc.php:104
#: libraries/config/messages.inc.php:113 libraries/config/messages.inc.php:137
@ -2900,7 +2896,7 @@ msgstr "Dump tabel"
#: libraries/config/messages.inc.php:92 libraries/export/latex.php:32
msgid "Include table caption"
msgstr "Inkluder tabeloverskrift"
msgstr "Inkludér tabeloverskrift"
#: libraries/config/messages.inc.php:95 libraries/config/messages.inc.php:101
#: libraries/export/latex.php:50 libraries/export/latex.php:74
@ -2913,6 +2909,7 @@ msgstr "Fortsat tabeloverskrift"
#: libraries/config/messages.inc.php:97 libraries/config/messages.inc.php:103
#: libraries/export/latex.php:54 libraries/export/latex.php:78
#, fuzzy
msgid "Label key"
msgstr "Mærke nøgle"
@ -2928,10 +2925,9 @@ msgid "Relations"
msgstr "Relationer"
#: libraries/config/messages.inc.php:105
#, fuzzy
#| msgid "Export type"
msgid "Export method"
msgstr "Eksporttype"
msgstr "Eksport-type"
#: libraries/config/messages.inc.php:114 libraries/config/messages.inc.php:116
msgid "Save on server"
@ -2944,7 +2940,7 @@ msgstr "Overskriv eksisterende fil(er)"
#: libraries/config/messages.inc.php:118
msgid "Remember file name template"
msgstr "Husk maske for filnavn"
msgstr "Husk skabelon for filnavn"
#: libraries/config/messages.inc.php:120
msgid "Enclose table and column names with backquotes"
@ -2953,11 +2949,11 @@ msgstr "Brug \"backquotes\" omkring tabel -og feltnavne"
#: libraries/config/messages.inc.php:121 libraries/config/messages.inc.php:260
#: libraries/display_export.lib.php:346
msgid "SQL compatibility mode"
msgstr "SQL-kompatibilitetsmodus"
msgstr "SQL-kompatibilitets-tilstand"
#: libraries/config/messages.inc.php:122 libraries/export/sql.php:176
msgid "<code>CREATE TABLE</code> options:"
msgstr "Muligheder for <code>CREATE TABLE</code>:"
msgstr "Indstillinger til <code>CREATE TABLE</code>:"
#: libraries/config/messages.inc.php:123
msgid "Creation/Update/Check dates"
@ -2981,7 +2977,7 @@ msgstr "Brug ignorér inserts"
#: libraries/config/messages.inc.php:132
msgid "Syntax to use when inserting data"
msgstr "Syntaks som skal bruges, når der indsættes data"
msgstr "Syntaks der bruges, når der indsættes data"
#: libraries/config/messages.inc.php:133 libraries/export/sql.php:268
msgid "Maximal length of created query"
@ -3012,16 +3008,16 @@ msgid ""
"Sort order for items in a foreign-key dropdown box; [kbd]content[/kbd] is "
"the referenced data, [kbd]id[/kbd] is the key value"
msgstr ""
"Sorteringsrækkefølge for elementer i valgboks med fremmede nøgler; [kbd]"
"content[/kbd] er de refererede data, [kbd]id[/kbd] er nøglens værdi"
"Sorteringsrækkefølge for elementer i valgboks med fremmede nøgler; "
"[kbd]content[/kbd] er de refererede data, [kbd]id[/kbd] er nøglens værdi"
#: libraries/config/messages.inc.php:151
msgid "Foreign key dropdown order"
msgstr "Sortër fremmede nøgler i valgboks på:"
msgstr "Sortér fremmede nøgler i valgboks"
#: libraries/config/messages.inc.php:152
msgid "A dropdown will be used if fewer items are present"
msgstr "Der vil blive brugt en valgboks, hvis der er færre elementer til stede"
msgstr "Der vil blive brugt en valgboks, hvis der er få elementer til stede"
#: libraries/config/messages.inc.php:153
msgid "Foreign key limit"
@ -3064,7 +3060,7 @@ msgstr "Redigeringstilstand"
#: libraries/config/messages.inc.php:163
msgid "Customize edit mode"
msgstr "Tilpas redigerinstilstand"
msgstr "Tilpas redigeringstilstand"
#: libraries/config/messages.inc.php:165
msgid "Export defaults"
@ -3091,7 +3087,7 @@ msgstr "Bestem indstillinger for nogle af de mest anvendte valgmuligheder"
#: libraries/server_links.inc.php:69 libraries/tbl_links.inc.php:89
#: prefs_manage.php:231 setup/frames/menu.inc.php:20
msgid "Import"
msgstr "Import"
msgstr "Importér"
#: libraries/config/messages.inc.php:171
msgid "Import defaults"
@ -3146,13 +3142,12 @@ msgstr "Hovedramme"
#: libraries/config/messages.inc.php:186
msgid "Microsoft Office"
msgstr ""
msgstr "Microsoft Office"
#: libraries/config/messages.inc.php:188
#, fuzzy
#| msgid "Open Document Text"
msgid "Open Document"
msgstr "Open Document tekst"
msgstr "Open Document"
#: libraries/config/messages.inc.php:190
msgid "Other core settings"
@ -3171,14 +3166,17 @@ msgid ""
"Specify browser's title bar text. Refer to [a@Documentation."
"html#cfg_TitleTable]documentation[/a] for magic strings that can be used to "
"get special values."
msgstr "Angiv browserens titeltekst. "
msgstr ""
"Angiv browserens tekst i titelbaren. Se "
"[a@Documentation.html#cfg_TitleTable]dokumentationen[/a] for tekststrenge "
"der indeholder særlige værdier."
#: libraries/config/messages.inc.php:194
#: libraries/navigation_header.inc.php:83
#: libraries/navigation_header.inc.php:86
#: libraries/navigation_header.inc.php:89
msgid "Query window"
msgstr "Foresp. vindue"
msgstr "Forespørgselsvindue"
#: libraries/config/messages.inc.php:195
msgid "Customize query window options"
@ -3193,8 +3191,8 @@ msgid ""
"Please note that phpMyAdmin is just a user interface and its features do not "
"limit MySQL"
msgstr ""
"Bemærk venligst at phpMyAdmin blot er en brugerflade, hvis egenskaber ikke "
"begrænser MySQL"
"Bemærk venligst at phpMyAdmin blot er en brugerflade og at den ikke "
"begrænser mulighederne i MySQL"
#: libraries/config/messages.inc.php:198
msgid "Basic settings"
@ -3218,7 +3216,7 @@ msgid ""
"what they are for"
msgstr ""
"Avanceret serverkonfiguration. Lad være med at ændre disse indstillinger med "
"mindre, du ved, hvad de betyder"
"mindre du ved hvad de betyder"
#: libraries/config/messages.inc.php:203
msgid "Enter server connection parameters"
@ -3234,16 +3232,21 @@ msgid ""
"features, see [a@Documentation.html#linked-tables]phpMyAdmin configuration "
"storage[/a] in documentation"
msgstr ""
"Konfigurér phpMyAdmin configuration storage for at få adgang til flere "
"funktioner. Se dokumentationen for [a@Documentation.html#linked-"
"tables]phpMyAdmin configuration storage[/a]."
#: libraries/config/messages.inc.php:206
msgid "Changes tracking"
msgstr ""
msgstr "Ændrer sporing"
#: libraries/config/messages.inc.php:207
msgid ""
"Tracking of changes made in database. Requires the phpMyAdmin configuration "
"storage."
msgstr ""
"Sporing af ændringer i databasen er udført. phpMyAdmin configuration storage "
"er krævet."
#: libraries/config/messages.inc.php:208
msgid "Customize export options"
@ -3264,11 +3267,11 @@ msgstr ""
#: libraries/config/messages.inc.php:213 libraries/config/messages.inc.php:218
#: setup/frames/menu.inc.php:17
msgid "SQL queries"
msgstr ""
msgstr "SQL-forespørgsler"
#: libraries/config/messages.inc.php:215
msgid "SQL Query box"
msgstr ""
msgstr "SQL Query-boks"
#: libraries/config/messages.inc.php:216
msgid "Customize links shown in SQL Query boxes"
@ -3296,7 +3299,7 @@ msgstr ""
#: libraries/config/messages.inc.php:222
msgid "Startup"
msgstr ""
msgstr "Opstart"
#: libraries/config/messages.inc.php:223
msgid "Customize startup page"
@ -3304,7 +3307,7 @@ msgstr ""
#: libraries/config/messages.inc.php:224
msgid "Tabs"
msgstr ""
msgstr "Faner"
#: libraries/config/messages.inc.php:225
msgid "Choose how you want tabs to work"
@ -3328,7 +3331,7 @@ msgstr ""
#: libraries/config/messages.inc.php:230
msgid "Warnings"
msgstr ""
msgstr "Advarsler"
#: libraries/config/messages.inc.php:231
msgid "Disable some of the warnings shown by phpMyAdmin"

View File

@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 3.5.0-dev\n"
"Report-Msgid-Bugs-To: phpmyadmin-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-07-07 15:16+0200\n"
"PO-Revision-Date: 2011-07-11 09:26+0200\n"
"PO-Revision-Date: 2011-07-12 23:07+0200\n"
"Last-Translator: <mrbendig@mrbendig.com>\n"
"Language-Team: german <de@li.org>\n"
"Language: de\n"
@ -957,10 +957,11 @@ msgstr ""
msgid "The web server does not have permission to save the file %s."
msgstr "Der Webserver hat keine Schreibrechte um die Datei %s zu speichern."
# Schema is not the right word for it, because a dump contains also data, and NOT just the scheme.
#: export.php:673
#, php-format
msgid "Dump has been saved to file %s."
msgstr "Dump (Schema) wurde in Datei %s gespeichert."
msgstr "Dump wurde in Datei %s gespeichert."
#: import.php:57
#, php-format
@ -3411,7 +3412,7 @@ msgstr "Prozentwerte als Dezimalzahlen importieren (12.00% wird zu 0.12)"
#: libraries/config/messages.inc.php:258
msgid "Number of queries to skip from start"
msgstr "Anzahl der am Anfang zu überspringenden Einträge (Abfragen)"
msgstr "Anzahl der am Anfang zu überspringenden Abfragen"
#: libraries/config/messages.inc.php:259
msgid "Partial import: skip queries"
@ -4056,10 +4057,10 @@ msgid ""
"alphabetical order."
msgstr ""
"MySQL Wildcard-Symbole (% und _) sind möglich, mit \\ wird die urspüngliche "
"Bedeutung wiederhergestellt, d.h. 'my\\_db' und nicht 'my_db'. Mit dieser "
"Optionen können Datenbanklisten sortiert werden; geben Sie ihre Namen "
"sortiert ein und nutzen Sie am Ende [kbd]*[/kbd], um die übrigen in "
"alphabetischer Reihenfolge anzuzeigen."
"Bedeutung wiederhergestellt, d.h. [kbd]'my\\_db'[/kbd] und nicht "
"[kbd]'my_db'[/kbd]. Mit dieser Optionen können Datenbanklisten sortiert "
"werden; geben Sie ihre Namen sortiert ein und nutzen Sie am Ende "
"[kbd]*[/kbd], um die übrigen in alphabetischer Reihenfolge anzuzeigen."
#: libraries/config/messages.inc.php:400
msgid "Show only listed databases"
@ -5561,7 +5562,7 @@ msgstr "Unbenutzte Seiten"
#: libraries/engines/innodb.lib.php:176
msgid "Dirty pages"
msgstr "Inkonsistente Seiten (&quot;dirty&quot;)"
msgstr "Inkonsistente Seiten"
#: libraries/engines/innodb.lib.php:182
msgid "Pages containing data"
@ -7298,7 +7299,7 @@ msgstr ""
"können. In der ersten Möglichkeit benennen Sie den Dateinamen. Als zweite "
"Option wird ein Spaltenname durch den Dateinamen gesetzt. Sollte die zweite "
"Option gesetzt sein, ist es notwendig, die erste Option auf einen Leerstring "
"zu setzen ('')."
"zu setzen."
#: libraries/transformations/application_octetstream__hex.inc.php:9
msgid ""
@ -7315,8 +7316,8 @@ msgid ""
"Displays a clickable thumbnail. The options are the maximum width and height "
"in pixels. The original aspect ratio is preserved."
msgstr ""
"Ein klickbares Vorschaubild anzeigen. Optionen: Breite, Höhe in Pixeln "
"(berücksichtigt das ursprüngliche Seitenverhältnis)."
"Ein klickbares Vorschaubild anzeigen. Optionen: Breite und Höhe in Pixeln, "
"wobei das ursprüngliche Seitenverhältnis berücksichtigt wird."
#: libraries/transformations/image_jpeg__link.inc.php:9
msgid "Displays a link to download this image."
@ -8704,7 +8705,7 @@ msgstr "Transaktions-Koordinator"
#: server_status.php:285
msgid "Flush (close) all tables"
msgstr "Alle Tabellen aktualisieren und schließen"
msgstr "Alle Tabellen aktualisieren (und schließen)"
#: server_status.php:287
msgid "Show open tables"
@ -8826,8 +8827,8 @@ msgid ""
"On a busy server, the byte counters may overrun, so those statistics as "
"reported by the MySQL server may be incorrect."
msgstr ""
"Auf stark frequentierten Server können die Byte-Zähler überlaufen (wieder "
"bei 0 beginnen), deshalb können diese Werte, wie sie vom MySQL Server "
"Auf stark frequentierten Server können die Byte-Zähler überlaufen, d.h. "
"wieder bei 0 beginnen, deshalb können diese Werte, wie sie vom MySQL Server "
"ausgegeben werden, falsch sein."
#: server_status.php:681

View File

@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 3.5.0-dev\n"
"Report-Msgid-Bugs-To: phpmyadmin-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-07-07 15:16+0200\n"
"PO-Revision-Date: 2011-07-07 12:37+0200\n"
"PO-Revision-Date: 2011-07-13 09:17+0200\n"
"Last-Translator: Panagiotis Papazoglou <papaz_p@yahoo.com>\n"
"Language-Team: greek <el@li.org>\n"
"Language: el\n"
@ -5375,10 +5375,10 @@ msgid "vertical"
msgstr "κάθετη"
#: libraries/display_tbl.lib.php:452
#, fuzzy, php-format
#, php-format
#| msgid "Headers every"
msgid "Headers every %s rows"
msgstr "Κεφαλίδες κάθε"
msgstr "Κεφαλίδες κάθε %s εγγραφές"
#: libraries/display_tbl.lib.php:546
msgid "Sort by key"

View File

@ -4,15 +4,15 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 3.5.0-dev\n"
"Report-Msgid-Bugs-To: phpmyadmin-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-07-07 15:16+0200\n"
"PO-Revision-Date: 2011-07-07 11:50+0200\n"
"PO-Revision-Date: 2011-07-11 21:13+0200\n"
"Last-Translator: Domen <dbc334@gmail.com>\n"
"Language-Team: slovenian <sl@li.org>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3);\n"
"X-Generator: Pootle 2.0.5\n"
#: browse_foreigners.php:35 browse_foreigners.php:53
@ -5319,10 +5319,10 @@ msgid "vertical"
msgstr "navpičnem"
#: libraries/display_tbl.lib.php:452
#, fuzzy, php-format
#, php-format
#| msgid "Headers every"
msgid "Headers every %s rows"
msgstr "Glave vsakih"
msgstr "Glave vsakih %s vrstic"
#: libraries/display_tbl.lib.php:546
msgid "Sort by key"

View File

@ -1,35 +1 @@
<?php
/**
*
*/
require_once './libraries/common.inc.php';
require_once './libraries/common.lib.php';
$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js';
$GLOBALS['js_include'][] = 'display_triggers.js';
require_once './libraries/tbl_common.php';
/**
* Create labels for the list
*/
$titles = PMA_buildActionTitles();
/**
* Displays the header and tabs
*/
require_once './libraries/tbl_links.inc.php';
/**
* Displays the list of triggers
*/
require_once './libraries/display_triggers.inc.php';
/**
* Displays the footer
*/
require './libraries/footer.inc.php';
?>
<?php require_once './db_triggers.php'; ?>

View File

@ -1860,6 +1860,10 @@ fieldset .disabled-field td {
vertical-align: middle;
}
.rte_table tr td:nth-child(1) {
font-weight: bold;
}
.rte_table input, .rte_table select, .rte_table textarea {
width: 100%;
margin: 0;
@ -1868,6 +1872,11 @@ fieldset .disabled-field td {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.rte_table .routine_params_table {
width: 100%;
}
#placeholder .button {
position: absolute;
cursor: pointer;
@ -1880,6 +1889,56 @@ fieldset .disabled-field td {
padding: 2px;
}
.wrapper {
float: <?php echo $left; ?>;
margin-bottom: 0.5em;
}
.toggleButton {
position: relative;
cursor: pointer;
font-size: 0.8em;
text-align: center;
line-height: 1.55em;
height: 1.55em;
overflow: hidden;
border-right: 0.1em solid #888;
border-left: 0.1em solid #888;
}
.toggleButton table,
.toggleButton td,
.toggleButton img {
padding: 0;
position: relative;
}
.toggleButton .container {
position: absolute;
}
.toggleButton .toggleOn {
color: white;
padding: 0 1em;
}
.toggleButton .toggleOff {
padding: 0 1em;
}
.doubleFieldset fieldset {
width: 48%;
float: <?php echo $left; ?>;
padding: 0;
}
.doubleFieldset fieldset.left {
margin-<?php echo $right; ?>: 1%;
}
.doubleFieldset fieldset.right {
margin-<?php echo $left; ?>: 1%;
}
.doubleFieldset legend {
margin-<?php echo $left; ?>: 0.5em;
}
.doubleFieldset div.wrap {
padding: 0.5em;
}
#table_columns input, #table_columns select {
width: 14em;
box-sizing: border-box;

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

View File

@ -2222,6 +2222,10 @@ fieldset .disabled-field td {
vertical-align: middle;
}
.rte_table tr td:nth-child(1) {
font-weight: bold;
}
.rte_table input, .rte_table select, .rte_table textarea {
width: 100%;
margin: 0;
@ -2231,6 +2235,10 @@ fieldset .disabled-field td {
-webkit-box-sizing: border-box;
}
.rte_table .routine_params_table {
width: 100%;
}
#placeholder .button {
position: absolute;
cursor: pointer;
@ -2243,6 +2251,60 @@ fieldset .disabled-field td {
padding: 2px;
}
.wrapper {
float: <?php echo $left; ?>;
margin-bottom: 1.5em;
}
.toggleButton {
position: relative;
cursor: pointer;
font-size: 0.8em;
text-align: center;
line-height: 1.55em;
height: 1.55em;
overflow: hidden;
border-right: 0.1em solid #888;
border-left: 0.1em solid #888;
-webkit-border-radius: 0.3em;
-moz-border-radius: 0.3em;
border-radius: 0.3em;
}
.toggleButton table,
.toggleButton td,
.toggleButton img {
padding: 0;
position: relative;
}
.toggleButton .container {
position: absolute;
}
.toggleButton .toggleOn {
color: white;
padding: 0 1em;
text-shadow: 0px 0px 0.2em #000;
}
.toggleButton .toggleOff {
padding: 0 1em;
}
.doubleFieldset fieldset {
width: 48%;
float: <?php echo $left; ?>;
padding: 0;
}
.doubleFieldset fieldset.left {
margin-<?php echo $right; ?>: 1%;
}
.doubleFieldset fieldset.right {
margin-<?php echo $left; ?>: 1%;
}
.doubleFieldset legend {
margin-<?php echo $left; ?>: 1.5em;
}
.doubleFieldset div.wrap {
padding: 1.5em;
}
#table_columns input, #table_columns select {
width: 14em;
box-sizing: border-box;

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B