summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxzilla2007-03-03 20:00:48 +0000
committerxzilla2007-03-03 20:00:48 +0000
commit26a5b71ac13ca2763011d5611590be07e980712e (patch)
tree05f17facc1278003c4e5722d16cfff602c21ce2b
parentbdbdce92ab2f32767d4d742bfa6494c235897e05 (diff)
initial support for multi-action options with support for tables. This is based on patch from ioguix with some tweaking, the credit should go to him, any bugs can be blamed on me.
-rw-r--r--classes/Misc.php76
-rwxr-xr-xlang/english.php5
-rw-r--r--lang/recoded/english.php7
-rw-r--r--multiactionform.js9
-rw-r--r--tables.php217
5 files changed, 255 insertions, 59 deletions
diff --git a/classes/Misc.php b/classes/Misc.php
index 4848efb6..a84f46de 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 @@
* '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 @@
* 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 @@
// (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 @@
// TODO: This should be a user option.
//$columns['comment']['params']['clip'] = true;
}
-
+
+ if (isset($multiactions)) {
+ echo "<form id=\"multi_form\" action=\"{$multiactions['url']}\" method=\"post\" enctype=\"multipart/form-data\">\n";
+ if (isset($multiactions['vars']))
+ foreach ($multiactions['vars'] as $k => $v)
+ echo "<input type=\"hidden\" name=\"$k\" value=\"$v\" />";
+ }
+
echo "<table>\n";
echo "<tr>\n";
// Display column headings
+ if (isset($multiactions)) echo "<th></th>";
foreach ($columns as $column_id => $column) {
switch ($column_id) {
case 'actions':
@@ -1587,14 +1613,21 @@
unset($alt_actions);
if (!is_null($pre_fn)) $alt_actions = $pre_fn($tabledata, $actions);
if (!isset($alt_actions)) $alt_actions =& $actions;
-
+
echo "<tr>\n";
-
+ if (isset($multiactions)) {
+ foreach ($multiactions['keycols'] as $k => $v)
+ $a[$k] = $tabledata->fields[$v];
+ echo "<td class=\"data{$id}\">";
+ echo "<input type=\"checkbox\" name=\"ma[]\" value=\"". htmlentities(serialize($a)) ."\" />";
+ echo "</td>\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 @@
$tabledata->moveNext();
$i++;
}
-
echo "</table>\n";
+
+ // Multi action table footer w/ options & [un]check'em all
+ if (isset($multiactions)) {
+ echo "<table>\n";
+ echo "<tr>\n";
+ echo "<th class=\"data\" align=\"left\" colspan=\"3\">{$lang['stractionsonmultiplelines']}</th>\n";
+ echo "</tr>\n";
+ echo "<tr>\n";
+ echo "<td class=\"data1\">";
+ echo "<a href=\"#\" onclick=\"javascript:checkAll(true);\">{$lang['strcheckall']}</a> / ";
+ echo "<a href=\"#\" onclick=\"javascript:checkAll(false);\">{$lang['struncheckall']}</a></td>\n";
+ echo "<td class=\"data1\">&nbsp;--->&nbsp;</td>\n";
+ echo "<td class=\"data1\">\n";
+ echo "\t<select name=\"action\">\n";
+ foreach($multiactions['actions'] as $o)
+ echo "\t\t<option value=\"{$o['action']}\">{$o['title']}</option>\n";
+ echo "\t</select>\n";
+ echo "<input type=\"submit\" value=\"submit\" />\n";
+ echo $misc->form;
+ echo "</td>\n";
+ echo "</tr>\n";
+ echo "</table>\n";
+ echo '</form>';
+ };
return true;
} else {
diff --git a/lang/english.php b/lang/english.php
index 1f74a46a..b9e668a4 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 50c97ed3..5cd3d680 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 00000000..1950608a
--- /dev/null
+++ b/multiactionform.js
@@ -0,0 +1,9 @@
+function checkAll(bool) {
+
+ var inputs = document.getElementById('multi_form').getElementsByTagName('input');
+
+ for (var i=0; i<inputs.length; i++) {
+ if (inputs[i].type == 'checkbox')
+ inputs[i].checked = bool;
+ }
+}
diff --git a/tables.php b/tables.php
index 421f41e2..ff999da0 100644
--- a/tables.php
+++ b/tables.php
@@ -3,7 +3,7 @@
/**
* List tables in a database
*
- * $Id: tables.php,v 1.86 2007/02/05 19:48:06 xzilla Exp $
+ * $Id: tables.php,v 1.87 2007/03/03 20:00:48 xzilla Exp $
*/
// Include application functions
@@ -497,27 +497,60 @@
global $lang;
global $PHP_SELF;
+ if (empty($_REQUEST['table']) && empty($_REQUEST['ma'])) {
+ doDefault('No table(s) given to empty...'); //TODO i18n
+ exit();
+ }
+
if ($confirm) {
- $misc->printTrail('table');
- $misc->printTitle($lang['strempty'],'pg.table.empty');
+ if (isset($_REQUEST['ma'])) {
+ $misc->printTrail('schema');
+ $misc->printTitle($lang['strempty'],'pg.table.empty');
- echo "<p>", sprintf($lang['strconfemptytable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+ echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ foreach ($_REQUEST['ma'] as $v) {
+ $a = unserialize(html_entity_decode($v));
+ echo "<p>", sprintf($lang['strconfemptytable'], $misc->printVal($a['table'])), "</p>\n";
+ printf('<input type="hidden" name="table[]" value="%s" />', htmlspecialchars($a['table']));
+ }
+ } // END mutli empty
+ else {
+ $misc->printTrail('table');
+ $misc->printTitle($lang['strempty'],'pg.table.empty');
+
+ echo "<p>", sprintf($lang['strconfemptytable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+
+ echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
+ } // END not mutli empty
- echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"action\" value=\"empty\" />\n";
- echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
echo $misc->form;
echo "<input type=\"submit\" name=\"empty\" value=\"{$lang['strempty']}\" /> <input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n";
echo "</form>\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<br />', $t, $lang['strtableemptied']);
+ else {
+ doDefault(sprintf('%s%s: %s<br />', $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 @@
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 "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ foreach($_REQUEST['ma'] as $v) {
+ $a = unserialize(html_entity_decode($v));
+ echo "<p>", sprintf($lang['strconfdroptable'], $misc->printVal($a['table'])), "</p>\n";
+ printf('<input type="hidden" name="table[]" value="%s" />', htmlspecialchars($a['table']));
+ }
+ } else {
+
+ $misc->printTrail('table');
+ $misc->printTitle($lang['strdrop'], 'pg.table.drop');
- echo "<p>", sprintf($lang['strconfdroptable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+ echo "<p>", sprintf($lang['strconfdroptable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+
+ echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
+ }// END if multi drop
- echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n";
- echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
echo $misc->form;
// Show cascade drop option if supportd
if ($data->hasDropBehavior()) {
echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n";
- }
+ }
echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n";
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n";
echo "</form>\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<br />', $t, $lang['strtabledropped']);
+ else {
+ doDefault(sprintf('%s%s: %s<br />', $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 @@
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 "<p>", sprintf($lang['strconfvacuumtable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+ echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ foreach($_REQUEST['ma'] as $v) {
+ $a = unserialize(html_entity_decode($v));
+ echo "<p>", sprintf($lang['strconfvacuumtable'], $misc->printVal($a['table'])), "</p>\n";
+ echo "<input type=\"hidden\" name=\"table[]\" value=\"", htmlspecialchars($a['table']), "\" />\n";
+ }
+ } // END if multi vacuum
+ else {
+ $misc->printTrail('table');
+ $misc->printTitle($lang['strvacuum'], 'pg.vacuum');
- echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ echo "<p>", sprintf($lang['strconfvacuumtable'], $misc->printVal($_REQUEST['table'])), "</p>\n";
+
+ echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+ echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
+ }
echo "<input type=\"hidden\" name=\"action\" value=\"vacuum\" />\n";
- echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
echo $misc->form;
// Show vacuum full option if supportd
if ($data->hasFullVacuum()) {
@@ -585,17 +672,34 @@
echo "<input type=\"submit\" name=\"vacuum\" value=\"{$lang['strvacuum']}\" />\n";
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n";
echo "</form>\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<br />', $t, $lang['strvacuumgood']);
+ else {
+ doDefault(sprintf('%s%s: %s<br />', $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 @@
$misc->printTrail('schema');
$misc->printTabs('schema','tables');
$misc->printMsg($msg);
-
+
+ echo "<script src=\"multiactionform.js\" type=\"text/javascript\"></script>";
+
$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 @@
if (!$data->hasTablespaces()) unset($columns['tablespace']);
- $misc->printTable($tables, $columns, $actions, $lang['strnotables']);
+ $misc->printTable($tables, $columns, $actions, $lang['strnotables'], null, $multiactions);
echo "<p><a class=\"navlink\" href=\"$PHP_SELF?action=create&amp;{$misc->href}\">{$lang['strcreatetable']}</a></p>\n";
}