diff --git a/classes/Misc.php b/classes/Misc.php index 4848efb64..a84f46de3 100644 --- a/classes/Misc.php +++ b/classes/Misc.php @@ -2,7 +2,7 @@ /** * Class to hold various commonly used functions * - * $Id: Misc.php,v 1.138 2007/01/10 01:56:06 soranzo Exp $ + * $Id: Misc.php,v 1.139 2007/03/03 20:00:48 xzilla Exp $ */ class Misc { @@ -1523,6 +1523,24 @@ function printUrlVars(&$vars, &$fields) { * 'vars' => Associative array of (URL variable => field name), * ), ... * ); + * @param $multiactions Actions to be provided to a series of items defined by checkboxes + * $multiactions = array( + * 'keycols' => array('table' => 'relname'), + * 'url' => "{$PHP_SELF}", + * 'actions' => array( + * 'empty' => array( + * 'action' => 'confirm_empty', + * 'title' => $lang['strempty'], + * ), + * 'drop' => array( + * 'action' => 'confirm_drop', + * 'title' => $lang['strdrop'], + * ), + * 'vacuum' => array( + * 'action' => 'confirm_vacuum', + * 'title' => $lang['strvacuum'], + * ) + * ) * @param $nodata (optional) Message to display if data set is empty. * @param $pre_fn (optional) Name of a function to call for each row, * it will be passed two params: $rowdata and $actions, @@ -1531,8 +1549,8 @@ function printUrlVars(&$vars, &$fields) { * or if nothing is returned then the standard actions are used. * (see functions.php and constraints.php for examples) */ - function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = null) { - global $data, $conf, $misc; + function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = null, &$multiactions = null) { + global $data, $conf, $misc, $lang; global $PHP_SELF; if ($tabledata->recordCount() > 0) { @@ -1547,7 +1565,7 @@ function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = // (Remove this section to keep the 'Properties' button instead of links) if (isset($actions['properties'])) { reset($columns); - $first_column = key($columns); + list($first_column) = each($columns); $columns[$first_column]['url'] = $actions['properties']['url']; $columns[$first_column]['vars'] = $actions['properties']['vars']; unset($actions['properties']); @@ -1558,10 +1576,18 @@ function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = // TODO: This should be a user option. //$columns['comment']['params']['clip'] = true; } - + + if (isset($multiactions)) { + echo "
\n"; + if (isset($multiactions['vars'])) + foreach ($multiactions['vars'] as $k => $v) + echo ""; + } + echo "\n"; echo "\n"; // Display column headings + if (isset($multiactions)) echo ""; foreach ($columns as $column_id => $column) { switch ($column_id) { case 'actions': @@ -1587,14 +1613,21 @@ function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = unset($alt_actions); if (!is_null($pre_fn)) $alt_actions = $pre_fn($tabledata, $actions); if (!isset($alt_actions)) $alt_actions =& $actions; - + echo "\n"; - + if (isset($multiactions)) { + foreach ($multiactions['keycols'] as $k => $v) + $a[$k] = $tabledata->fields[$v]; + echo "\n"; + } + foreach ($columns as $column_id => $column) { - + // Apply default values for missing parameters if (isset($column['url']) && !isset($column['vars'])) $column['vars'] = array(); - + switch ($column_id) { case 'actions': foreach ($alt_actions as $action) { @@ -1633,8 +1666,31 @@ function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = $tabledata->moveNext(); $i++; } - echo "
"; + echo ""; + echo "
\n"; + + // Multi action table footer w/ options & [un]check'em all + if (isset($multiactions)) { + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
{$lang['stractionsonmultiplelines']}
"; + echo "{$lang['strcheckall']} / "; + echo "{$lang['struncheckall']} ---> \n"; + echo "\t\n"; + echo "\n"; + echo $misc->form; + echo "
\n"; + echo '
'; + }; return true; } else { diff --git a/lang/english.php b/lang/english.php index 1f74a46a8..b9e668a48 100755 --- a/lang/english.php +++ b/lang/english.php @@ -4,7 +4,7 @@ * English language file for phpPgAdmin. Use this as a basis * for new translations. * - * $Id: english.php,v 1.200 2007/02/10 03:48:34 xzilla Exp $ + * $Id: english.php,v 1.201 2007/03/03 20:00:48 xzilla Exp $ */ // Language and character set @@ -136,6 +136,9 @@ $lang['strfile'] = 'File'; $lang['strfileimported'] = 'File imported.'; $lang['strtrycred'] = 'Use these credentials for all servers'; + $lang['stractionsonmultiplelines'] = 'Actions on multiple lines'; + $lang['strcheckall'] = 'Check All'; + $lang['struncheckall'] = 'Uncheck All'; // Database sizes $lang['strsize'] = 'Size'; diff --git a/lang/recoded/english.php b/lang/recoded/english.php index 50c97ed35..5cd3d6800 100644 --- a/lang/recoded/english.php +++ b/lang/recoded/english.php @@ -4,7 +4,7 @@ * English language file for phpPgAdmin. Use this as a basis * for new translations. * - * $Id: english.php,v 1.152 2006/12/31 16:21:27 soranzo Exp $ + * $Id: english.php,v 1.153 2007/03/03 20:00:48 xzilla Exp $ */ // Language and character set @@ -136,6 +136,9 @@ $lang['strfile'] = 'File'; $lang['strfileimported'] = 'File imported.'; $lang['strtrycred'] = 'Use these credentials for all servers'; + $lang['stractionsonmultiplelines'] = 'Actions on multiple lines'; + $lang['strcheckall'] = 'Check All'; + $lang['struncheckall'] = 'Uncheck All'; // Database sizes $lang['strsize'] = 'Size'; @@ -872,7 +875,7 @@ $lang['strvacuumcostdelay'] = 'Vacuum Cost Delay'; $lang['strvacuumcostlimit'] = 'Vacuum Cost Limit'; - // Table-level Locks + // Table-level Locks $lang['strlocks'] = 'Locks'; $lang['strtransaction'] = 'Transaction ID'; $lang['strprocessid'] = 'Process ID'; diff --git a/multiactionform.js b/multiactionform.js new file mode 100644 index 000000000..1950608a4 --- /dev/null +++ b/multiactionform.js @@ -0,0 +1,9 @@ +function checkAll(bool) { + + var inputs = document.getElementById('multi_form').getElementsByTagName('input'); + + for (var i=0; iprintTrail('table'); - $misc->printTitle($lang['strempty'],'pg.table.empty'); + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strempty'],'pg.table.empty'); - echo "

", sprintf($lang['strconfemptytable'], $misc->printVal($_REQUEST['table'])), "

\n"; + echo "
\n"; + foreach ($_REQUEST['ma'] as $v) { + $a = unserialize(html_entity_decode($v)); + echo "

", sprintf($lang['strconfemptytable'], $misc->printVal($a['table'])), "

\n"; + printf('', htmlspecialchars($a['table'])); + } + } // END mutli empty + else { + $misc->printTrail('table'); + $misc->printTitle($lang['strempty'],'pg.table.empty'); + + echo "

", sprintf($lang['strconfemptytable'], $misc->printVal($_REQUEST['table'])), "

\n"; + + echo "\n"; + echo "\n"; + } // END not mutli empty - echo "\n"; echo "\n"; - echo "\n"; echo $misc->form; echo " \n"; echo "
\n"; - } - else { - $status = $data->emptyTable($_POST['table']); - if ($status == 0) - doDefault($lang['strtableemptied']); - else - doDefault($lang['strtableemptiedbad']); - } - + } // END if confirm + else { // Do Empty + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $t) { + $status = $data->emptyTable($t); + if ($status == 0) + $msg.= sprintf('%s: %s
', $t, $lang['strtableemptied']); + else { + doDefault(sprintf('%s%s: %s
', $msg, $t, $lang['strtableemptiedbad'])); + return; + } + } + doDefault($msg); + } // END mutli empty + else { + $status = $data->emptyTable($_POST['table']); + if ($status == 0) + doDefault($lang['strtableemptied']); + else + doDefault($lang['strtableemptiedbad']); + } // END not mutli empty + } // END do Empty } /** @@ -527,36 +560,73 @@ function doDrop($confirm) { global $data, $misc; global $lang, $_reload_browser; global $PHP_SELF; - + + if (empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault('No table(s) given to drop...'); // TODO i18n + exit(); + } + if ($confirm) { - $misc->printTrail('table'); - $misc->printTitle($lang['strdrop'], 'pg.table.drop'); + //If multi drop + if (isset($_REQUEST['ma'])) { + + $misc->printTrail('schema'); + $misc->printTitle($lang['strdrop'], 'pg.table.drop'); + + echo "
\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(html_entity_decode($v)); + echo "

", sprintf($lang['strconfdroptable'], $misc->printVal($a['table'])), "

\n"; + printf('', htmlspecialchars($a['table'])); + } + } else { + + $misc->printTrail('table'); + $misc->printTitle($lang['strdrop'], 'pg.table.drop'); - echo "

", sprintf($lang['strconfdroptable'], $misc->printVal($_REQUEST['table'])), "

\n"; + echo "

", sprintf($lang['strconfdroptable'], $misc->printVal($_REQUEST['table'])), "

\n"; + + echo "\n"; + echo "\n"; + }// END if multi drop - echo "\n"; echo "\n"; - echo "\n"; echo $misc->form; // Show cascade drop option if supportd if ($data->hasDropBehavior()) { echo "

\n"; - } + } echo "\n"; echo "\n"; echo "
\n"; - } + } // END confirm else { - $status = $data->dropTable($_POST['table'], isset($_POST['cascade'])); - if ($status == 0) { + //If multi drop + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $t) { + $status = $data->dropTable($t, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s
', $t, $lang['strtabledropped']); + else { + doDefault(sprintf('%s%s: %s
', $msg, $t, $lang['strtabledroppedbad'])); + return; + } + } + // Everything went fine, back to the Default page.... $_reload_browser = true; - doDefault($lang['strtabledropped']); + doDefault($msg); + } else { + $status = $data->dropTable($_POST['table'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strtabledropped']); + } + else + doDefault($lang['strtabledroppedbad']); } - else - doDefault($lang['strtabledroppedbad']); - } - - } + } // END DROP + }// END Function /** @@ -567,15 +637,32 @@ function doVacuum($confirm) { global $lang, $_reload_browser; global $PHP_SELF; + if (empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault('No table(s) given to vacuum...'); //TODO i18n + exit(); + } if ($confirm) { - $misc->printTrail('table'); - $misc->printTitle($lang['strvacuum'], 'pg.vacuum'); + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strvacuum'], 'pg.vacuum'); - echo "

", sprintf($lang['strconfvacuumtable'], $misc->printVal($_REQUEST['table'])), "

\n"; + echo "
\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(html_entity_decode($v)); + echo "

", sprintf($lang['strconfvacuumtable'], $misc->printVal($a['table'])), "

\n"; + echo "\n"; + } + } // END if multi vacuum + else { + $misc->printTrail('table'); + $misc->printTitle($lang['strvacuum'], 'pg.vacuum'); - echo "\n"; + echo "

", sprintf($lang['strconfvacuumtable'], $misc->printVal($_REQUEST['table'])), "

\n"; + + echo "\n"; + echo "\n"; + } echo "\n"; - echo "\n"; echo $misc->form; // Show vacuum full option if supportd if ($data->hasFullVacuum()) { @@ -585,17 +672,34 @@ function doVacuum($confirm) { echo "\n"; echo "\n"; echo "
\n"; - } + } // END single vacuum else { - $status = $data->vacuumDB($_POST['table'], isset($_REQUEST['vacuum_analyze']), isset($_REQUEST['vacuum_full']), ''); - if ($status == 0) { - $_reload_browser = true; - doDefault($lang['strvacuumgood']); + //If multi drop + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $t) { + $status = $data->vacuumDB($t, isset($_REQUEST['vacuum_analyze']), isset($_REQUEST['vacuum_full']), ''); + if ($status == 0) + $msg.= sprintf('%s: %s
', $t, $lang['strvacuumgood']); + else { + doDefault(sprintf('%s%s: %s
', $msg, $t, $lang['strvacuumbad'])); + return; + } + } + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else { + $status = $data->vacuumDB($_POST['table'], isset($_REQUEST['vacuum_analyze']), isset($_REQUEST['vacuum_full']), ''); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strvacuumgood']); + } + else + doDefault($lang['strvacuumbad']); } - else - doDefault($lang['strvacuumbad']); } - } /** @@ -608,9 +712,30 @@ function doDefault($msg = '') { $misc->printTrail('schema'); $misc->printTabs('schema','tables'); $misc->printMsg($msg); - + + echo ""; + $tables = $data->getTables(); + $multiactions = array( + 'keycols' => array('table' => 'relname'), + 'url' => "{$PHP_SELF}", + 'actions' => array( + 'empty' => array( + 'action' => 'confirm_empty', + 'title' => $lang['strempty'], + ), + 'drop' => array( + 'action' => 'confirm_drop', + 'title' => $lang['strdrop'], + ), + 'vacuum' => array( + 'action' => 'confirm_vacuum', + 'title' => $lang['strvacuum'], + ) + ) + ); + $columns = array( 'table' => array( 'title' => $lang['strtable'], @@ -678,7 +803,7 @@ function doDefault($msg = '') { if (!$data->hasTablespaces()) unset($columns['tablespace']); - $misc->printTable($tables, $columns, $actions, $lang['strnotables']); + $misc->printTable($tables, $columns, $actions, $lang['strnotables'], null, $multiactions); echo "

href}\">{$lang['strcreatetable']}

\n"; }