Initial commit
This commit is contained in:
@@ -0,0 +1,622 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* List tables in a database
|
||||
*
|
||||
* $Id: tblproperties.php,v 1.92 2008/01/19 13:46:15 ioguix Exp $
|
||||
*/
|
||||
|
||||
// Include application functions
|
||||
include_once('./libraries/lib.inc.php');
|
||||
|
||||
$action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : '';
|
||||
|
||||
/**
|
||||
* Function to save after altering a table
|
||||
*/
|
||||
function doSaveAlter() {
|
||||
global $data, $lang, $_reload_browser, $misc;
|
||||
|
||||
// For databases that don't allow owner change
|
||||
if (!isset($_POST['owner'])) $_POST['owner'] = '';
|
||||
// Default tablespace to null if it isn't set
|
||||
if (!isset($_POST['tablespace'])) $_POST['tablespace'] = null;
|
||||
if (!isset($_POST['newschema'])) $_POST['newschema'] = null;
|
||||
|
||||
$status = $data->alterTable($_POST['table'], $_POST['name'], $_POST['owner'], $_POST['newschema'], $_POST['comment'], $_POST['tablespace']);
|
||||
if ($status == 0) {
|
||||
// If table has been renamed, need to change to the new name and
|
||||
// reload the browser frame.
|
||||
if ($_POST['table'] != $_POST['name']) {
|
||||
// Jump them to the new table name
|
||||
$_REQUEST['table'] = $_POST['name'];
|
||||
// Force a browser reload
|
||||
$_reload_browser = true;
|
||||
}
|
||||
// If schema has changed, need to change to the new schema and reload the browser
|
||||
if (!empty($_POST['newschema']) && ($_POST['newschema'] != $data->_schema)) {
|
||||
// Jump them to the new sequence schema
|
||||
$misc->setCurrentSchema($_POST['newschema']);
|
||||
$_reload_browser = true;
|
||||
}
|
||||
doDefault($lang['strtablealtered']);
|
||||
}
|
||||
else
|
||||
doAlter($lang['strtablealteredbad']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to allow altering of a table
|
||||
*/
|
||||
function doAlter($msg = '') {
|
||||
global $data, $misc;
|
||||
global $lang;
|
||||
|
||||
$misc->printTrail('table');
|
||||
$misc->printTitle($lang['stralter'], 'pg.table.alter');
|
||||
$misc->printMsg($msg);
|
||||
|
||||
// Fetch table info
|
||||
$table = $data->getTable($_REQUEST['table']);
|
||||
// Fetch all users
|
||||
$users = $data->getUsers();
|
||||
// Fetch all tablespaces from the database
|
||||
if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(true);
|
||||
|
||||
if ($table->recordCount() > 0) {
|
||||
|
||||
if (!isset($_POST['name'])) $_POST['name'] = $table->fields['relname'];
|
||||
if (!isset($_POST['owner'])) $_POST['owner'] = $table->fields['relowner'];
|
||||
if (!isset($_POST['newschema'])) $_POST['newschema'] = $table->fields['nspname'];
|
||||
if (!isset($_POST['comment'])) $_POST['comment'] = $table->fields['relcomment'];
|
||||
if ($data->hasTablespaces() && !isset($_POST['tablespace'])) $_POST['tablespace'] = $table->fields['tablespace'];
|
||||
|
||||
echo "<form action=\"tblproperties.php\" method=\"post\">\n";
|
||||
echo "<table>\n";
|
||||
echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n";
|
||||
echo "<td class=\"data1\">";
|
||||
echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
||||
htmlspecialchars($_POST['name'], ENT_QUOTES), "\" /></td></tr>\n";
|
||||
|
||||
$server_info = $misc->getServerInfo();
|
||||
if ($data->isSuperUser($server_info['username'])) {
|
||||
echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n";
|
||||
echo "<td class=\"data1\"><select name=\"owner\">";
|
||||
while (!$users->EOF) {
|
||||
$uname = $users->fields['usename'];
|
||||
echo "<option value=\"", htmlspecialchars($uname), "\"",
|
||||
($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n";
|
||||
$users->moveNext();
|
||||
}
|
||||
echo "</select></td></tr>\n";
|
||||
}
|
||||
|
||||
if ($data->hasAlterTableSchema()) {
|
||||
$schemas = $data->getSchemas();
|
||||
echo "<tr><th class=\"data left required\">{$lang['strschema']}</th>\n";
|
||||
echo "<td class=\"data1\"><select name=\"newschema\">";
|
||||
while (!$schemas->EOF) {
|
||||
$schema = $schemas->fields['nspname'];
|
||||
echo "<option value=\"", htmlspecialchars($schema), "\"",
|
||||
($schema == $_POST['newschema']) ? ' selected="selected"' : '', ">", htmlspecialchars($schema), "</option>\n";
|
||||
$schemas->moveNext();
|
||||
}
|
||||
echo "</select></td></tr>\n";
|
||||
}
|
||||
|
||||
// Tablespace (if there are any)
|
||||
if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) {
|
||||
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n";
|
||||
echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"tablespace\">\n";
|
||||
// Always offer the default (empty) option
|
||||
echo "\t\t\t\t<option value=\"\"",
|
||||
($_POST['tablespace'] == '') ? ' selected="selected"' : '', "></option>\n";
|
||||
// Display all other tablespaces
|
||||
while (!$tablespaces->EOF) {
|
||||
$spcname = htmlspecialchars($tablespaces->fields['spcname']);
|
||||
echo "\t\t\t\t<option value=\"{$spcname}\"",
|
||||
($spcname == $_POST['tablespace']) ? ' selected="selected"' : '', ">{$spcname}</option>\n";
|
||||
$tablespaces->moveNext();
|
||||
}
|
||||
echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n";
|
||||
}
|
||||
|
||||
echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n";
|
||||
echo "<td class=\"data1\">";
|
||||
echo "<textarea rows=\"3\" cols=\"32\" name=\"comment\">",
|
||||
htmlspecialchars($_POST['comment']), "</textarea></td></tr>\n";
|
||||
echo "</table>\n";
|
||||
echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
|
||||
echo $misc->form;
|
||||
echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
else echo "<p>{$lang['strnodata']}</p>\n";
|
||||
}
|
||||
|
||||
function doExport($msg = '') {
|
||||
global $data, $misc;
|
||||
global $lang;
|
||||
|
||||
// Determine whether or not the table has an object ID
|
||||
$hasID = $data->hasObjectID($_REQUEST['table']);
|
||||
|
||||
$misc->printTrail('table');
|
||||
$misc->printTabs('table','export');
|
||||
$misc->printMsg($msg);
|
||||
|
||||
echo "<form action=\"dataexport.php\" method=\"post\">\n";
|
||||
echo "<table>\n";
|
||||
echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\" colspan=\"2\">{$lang['stroptions']}</th></tr>\n";
|
||||
// Data only
|
||||
echo "<tr><th class=\"data left\" rowspan=\"", ($hasID) ? 2 : 1, "\">";
|
||||
echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" checked=\"checked\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n";
|
||||
echo "<td>{$lang['strformat']}</td>\n";
|
||||
echo "<td><select name=\"d_format\">\n";
|
||||
echo "<option value=\"copy\">COPY</option>\n";
|
||||
echo "<option value=\"sql\">SQL</option>\n";
|
||||
echo "<option value=\"csv\">CSV</option>\n";
|
||||
echo "<option value=\"tab\">{$lang['strtabbed']}</option>\n";
|
||||
echo "<option value=\"html\">XHTML</option>\n";
|
||||
echo "<option value=\"xml\">XML</option>\n";
|
||||
echo "</select>\n</td>\n</tr>\n";
|
||||
if ($hasID) {
|
||||
echo "<tr><td><label for=\"d_oids\">{$lang['stroids']}</td><td><input type=\"checkbox\" id=\"d_oids\" name=\"d_oids\" /></td>\n</tr>\n";
|
||||
}
|
||||
// Structure only
|
||||
echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n";
|
||||
echo "<td><label for=\"s_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /></td>\n</tr>\n";
|
||||
// Structure and data
|
||||
echo "<tr><th class=\"data left\" rowspan=\"", ($hasID) ? 3 : 2, "\">";
|
||||
echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n";
|
||||
echo "<td>{$lang['strformat']}</td>\n";
|
||||
echo "<td><select name=\"sd_format\">\n";
|
||||
echo "<option value=\"copy\">COPY</option>\n";
|
||||
echo "<option value=\"sql\">SQL</option>\n";
|
||||
echo "</select>\n</td>\n</tr>\n";
|
||||
echo "<tr><td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n";
|
||||
if ($hasID) {
|
||||
echo "<tr><td><label for=\"sd_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /></td>\n</tr>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<h3>{$lang['stroptions']}</h3>\n";
|
||||
echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n";
|
||||
echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label></p>\n";
|
||||
|
||||
echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n";
|
||||
echo $misc->form;
|
||||
echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
|
||||
echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
|
||||
function doImport($msg = '') {
|
||||
global $data, $misc;
|
||||
global $lang;
|
||||
|
||||
$misc->printTrail('table');
|
||||
$misc->printTabs('table','import');
|
||||
$misc->printMsg($msg);
|
||||
|
||||
// Check that file uploads are enabled
|
||||
if (ini_get('file_uploads')) {
|
||||
// Don't show upload option if max size of uploads is zero
|
||||
$max_size = $misc->inisizeToBytes(ini_get('upload_max_filesize'));
|
||||
if (is_double($max_size) && $max_size > 0) {
|
||||
echo "<form action=\"dataimport.php\" method=\"post\" enctype=\"multipart/form-data\">\n";
|
||||
echo "<table>\n";
|
||||
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strformat']}</th>\n";
|
||||
echo "\t\t<td><select name=\"format\">\n";
|
||||
echo "\t\t\t<option value=\"auto\">{$lang['strauto']}</option>\n";
|
||||
echo "\t\t\t<option value=\"csv\">CSV</option>\n";
|
||||
echo "\t\t\t<option value=\"tab\">{$lang['strtabbed']}</option>\n";
|
||||
if (function_exists('xml_parser_create')) {
|
||||
echo "\t\t\t<option value=\"xml\">XML</option>\n";
|
||||
}
|
||||
echo "\t\t</select></td>\n\t</tr>\n";
|
||||
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strallowednulls']}</th>\n";
|
||||
echo "\t\t<td><label><input type=\"checkbox\" name=\"allowednulls[0]\" value=\"\\N\" checked=\"checked\" />{$lang['strbackslashn']}</label><br />\n";
|
||||
echo "\t\t<label><input type=\"checkbox\" name=\"allowednulls[1]\" value=\"NULL\" />NULL</label><br />\n";
|
||||
echo "\t\t<label><input type=\"checkbox\" name=\"allowednulls[2]\" value=\"\" />{$lang['stremptystring'] }</label></td>\n\t</tr>\n";
|
||||
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strfile']}</th>\n";
|
||||
echo "\t\t<td><input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"{$max_size}\" />";
|
||||
echo "<input type=\"file\" name=\"source\" /></td>\n\t</tr>\n";
|
||||
echo "</table>\n";
|
||||
echo "<p><input type=\"hidden\" name=\"action\" value=\"import\" />\n";
|
||||
echo $misc->form;
|
||||
echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
|
||||
echo "<input type=\"submit\" value=\"{$lang['strimport']}\" /></p>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
}
|
||||
else echo "<p>{$lang['strnouploads']}</p>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a screen where they can add a column
|
||||
*/
|
||||
function doAddColumn($msg = '') {
|
||||
global $data, $misc, $_reload_browser;
|
||||
global $lang;
|
||||
|
||||
if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1;
|
||||
|
||||
switch ($_REQUEST['stage']) {
|
||||
case 1:
|
||||
// Set variable defaults
|
||||
if (!isset($_POST['field'])) $_POST['field'] = '';
|
||||
if (!isset($_POST['type'])) $_POST['type'] = '';
|
||||
if (!isset($_POST['array'])) $_POST['array'] = '';
|
||||
if (!isset($_POST['length'])) $_POST['length'] = '';
|
||||
if (!isset($_POST['default'])) $_POST['default'] = '';
|
||||
if (!isset($_POST['comment'])) $_POST['comment'] = '';
|
||||
|
||||
// Fetch all available types
|
||||
$types = $data->getTypes(true, false, true);
|
||||
$types_for_js = array();
|
||||
|
||||
$misc->printTrail('table');
|
||||
$misc->printTitle($lang['straddcolumn'], 'pg.column.add');
|
||||
$misc->printMsg($msg);
|
||||
|
||||
echo "<script src=\"tables.js\" type=\"text/javascript\"></script>";
|
||||
echo "<form action=\"tblproperties.php\" method=\"post\">\n";
|
||||
|
||||
// Output table header
|
||||
echo "<table>\n";
|
||||
echo "<tr><th class=\"data required\">{$lang['strname']}</th>\n<th colspan=\"2\" class=\"data required\">{$lang['strtype']}</th>\n";
|
||||
echo "<th class=\"data\">{$lang['strlength']}</th>\n";
|
||||
if ($data->hasCreateFieldWithConstraints())
|
||||
echo "<th class=\"data\">{$lang['strnotnull']}</th>\n<th class=\"data\">{$lang['strdefault']}</th>\n";
|
||||
echo "<th class=\"data\">{$lang['strcomment']}</th></tr>\n";
|
||||
|
||||
echo "<tr><td><input name=\"field\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
||||
htmlspecialchars($_POST['field']), "\" /></td>\n";
|
||||
echo "<td><select name=\"type\" id=\"type\" onchange=\"checkLengths(document.getElementById('type').value,'');\">\n";
|
||||
// Output any "magic" types. This came in with the alter column type so we'll check that
|
||||
if ($data->hasMagicTypes()) {
|
||||
foreach ($data->extraTypes as $v) {
|
||||
$types_for_js[] = strtolower($v);
|
||||
echo "\t<option value=\"", htmlspecialchars($v), "\"",
|
||||
($v == $_POST['type']) ? ' selected="selected"' : '', ">",
|
||||
$misc->printVal($v), "</option>\n";
|
||||
}
|
||||
}
|
||||
while (!$types->EOF) {
|
||||
$typname = $types->fields['typname'];
|
||||
$types_for_js[] = $typname;
|
||||
echo "\t<option value=\"", htmlspecialchars($typname), "\"", ($typname == $_POST['type']) ? ' selected="selected"' : '', ">",
|
||||
$misc->printVal($typname), "</option>\n";
|
||||
$types->moveNext();
|
||||
}
|
||||
echo "</select></td>\n";
|
||||
|
||||
// Output array type selector
|
||||
echo "<td><select name=\"array\">\n";
|
||||
echo "\t<option value=\"\"", ($_POST['array'] == '') ? ' selected="selected"' : '', "></option>\n";
|
||||
echo "\t<option value=\"[]\"", ($_POST['array'] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n";
|
||||
echo "</select></td>\n";
|
||||
$predefined_size_types = array_intersect($data->predefined_size_types, $types_for_js);
|
||||
$escaped_predef_types = array(); // the JS escaped array elements
|
||||
foreach($predefined_size_types as $value) {
|
||||
$escaped_predef_types[] = "'{$value}'";
|
||||
}
|
||||
|
||||
echo "<td><input name=\"length\" id=\"lengths\" size=\"8\" value=\"",
|
||||
htmlspecialchars($_POST['length']), "\" /></td>\n";
|
||||
// Support for adding column with not null and default
|
||||
if ($data->hasCreateFieldWithConstraints()) {
|
||||
echo "<td><input type=\"checkbox\" name=\"notnull\"",
|
||||
(isset($_REQUEST['notnull'])) ? ' checked="checked"' : '', " /></td>\n";
|
||||
echo "<td><input name=\"default\" size=\"20\" value=\"",
|
||||
htmlspecialchars($_POST['default']), "\" /></td>\n";
|
||||
}
|
||||
echo "<td><input name=\"comment\" size=\"40\" value=\"",
|
||||
htmlspecialchars($_POST['comment']), "\" /></td></tr>\n";
|
||||
echo "</table>\n";
|
||||
echo "<p><input type=\"hidden\" name=\"action\" value=\"add_column\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n";
|
||||
echo $misc->form;
|
||||
echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
|
||||
if (!$data->hasCreateFieldWithConstraints()) {
|
||||
echo "<input type=\"hidden\" name=\"default\" value=\"\" />\n";
|
||||
}
|
||||
echo "<input type=\"submit\" value=\"{$lang['stradd']}\" />\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
||||
echo "</form>\n";
|
||||
echo "<script type=\"text/javascript\">predefined_lengths = new Array(". implode(",",$escaped_predef_types) .");checkLengths(document.getElementById('type').value,'');</script>\n";
|
||||
break;
|
||||
case 2:
|
||||
// Check inputs
|
||||
if (trim($_POST['field']) == '') {
|
||||
$_REQUEST['stage'] = 1;
|
||||
doAddColumn($lang['strcolneedsname']);
|
||||
return;
|
||||
}
|
||||
if (!isset($_POST['length'])) $_POST['length'] = '';
|
||||
$status = $data->addColumn($_POST['table'], $_POST['field'],
|
||||
$_POST['type'], $_POST['array'] != '', $_POST['length'], isset($_POST['notnull']),
|
||||
$_POST['default'], $_POST['comment']);
|
||||
if ($status == 0) {
|
||||
$_reload_browser = true;
|
||||
doDefault($lang['strcolumnadded']);
|
||||
}
|
||||
else {
|
||||
$_REQUEST['stage'] = 1;
|
||||
doAddColumn($lang['strcolumnaddedbad']);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
echo "<p>{$lang['strinvalidparam']}</p>\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show confirmation of drop column and perform actual drop
|
||||
*/
|
||||
function doDrop($confirm) {
|
||||
global $data, $database, $misc, $_reload_browser;
|
||||
global $lang;
|
||||
|
||||
if ($confirm) {
|
||||
$misc->printTrail('column');
|
||||
$misc->printTitle($lang['strdrop'], 'pg.column.drop');
|
||||
|
||||
echo "<p>", sprintf($lang['strconfdropcolumn'], $misc->printVal($_REQUEST['column']),
|
||||
$misc->printVal($_REQUEST['table'])), "</p>\n";
|
||||
|
||||
|
||||
echo "<form action=\"tblproperties.php\" method=\"post\">\n";
|
||||
echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"column\" value=\"", htmlspecialchars($_REQUEST['column']), "\" />\n";
|
||||
echo $misc->form;
|
||||
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";
|
||||
}
|
||||
else {
|
||||
$status = $data->dropColumn($_POST['table'], $_POST['column'], isset($_POST['cascade']));
|
||||
if ($status == 0) {
|
||||
$_reload_browser = true;
|
||||
doDefault($lang['strcolumndropped']);
|
||||
}
|
||||
else
|
||||
doDefault($lang['strcolumndroppedbad']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function doTree() {
|
||||
global $misc, $data;
|
||||
|
||||
$columns = $data->getTableAttributes($_REQUEST['table']);
|
||||
$reqvars = $misc->getRequestVars('column');
|
||||
|
||||
$attrs = array (
|
||||
'text' => field('attname'),
|
||||
'action' => url('colproperties.php',
|
||||
$reqvars,
|
||||
array(
|
||||
'table' => $_REQUEST['table'],
|
||||
'column' => field('attname')
|
||||
)
|
||||
),
|
||||
'icon' => 'Column',
|
||||
'iconAction' => url('display.php',
|
||||
$reqvars,
|
||||
array(
|
||||
'table' => $_REQUEST['table'],
|
||||
'column' => field('attname'),
|
||||
'query' => replace(
|
||||
'SELECT "%column%", count(*) AS "count" FROM "%table%" GROUP BY "%column%" ORDER BY "%column%"',
|
||||
array (
|
||||
'%column%' => field('attname'),
|
||||
'%table%' => $_REQUEST['table']
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
'toolTip'=> field('comment')
|
||||
);
|
||||
|
||||
$misc->printTreeXML($columns, $attrs);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($action == 'tree') doTree();
|
||||
|
||||
/**
|
||||
* Show default list of columns in the table
|
||||
*/
|
||||
function doDefault($msg = '') {
|
||||
global $data, $conf, $misc;
|
||||
global $lang;
|
||||
|
||||
function attPre(&$rowdata, $actions) {
|
||||
global $data;
|
||||
$rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']);
|
||||
$attname = $rowdata->fields['attname'];
|
||||
$table = $_REQUEST['table'];
|
||||
$data->fieldClean($attname);
|
||||
$data->fieldClean($table);
|
||||
|
||||
$actions['browse']['url'] .= 'query=' . urlencode("SELECT \"{$attname}\", count(*) AS \"count\"
|
||||
FROM \"{$table}\" GROUP BY \"{$attname}\" ORDER BY \"{$attname}\"") . '&';
|
||||
return $actions;
|
||||
}
|
||||
|
||||
$misc->printTrail('table');
|
||||
$misc->printTabs('table','columns');
|
||||
$misc->printMsg($msg);
|
||||
|
||||
// Get table
|
||||
$tdata = $data->getTable($_REQUEST['table']);
|
||||
// Get columns
|
||||
$attrs = $data->getTableAttributes($_REQUEST['table']);
|
||||
// Get constraints keys
|
||||
$ck = $data->getConstraintsWithFields($_REQUEST['table']);
|
||||
|
||||
// Show comment if any
|
||||
if ($tdata->fields['relcomment'] !== null)
|
||||
echo '<p class="comment">', $misc->printVal($tdata->fields['relcomment']), "</p>\n";
|
||||
|
||||
$columns = array(
|
||||
'column' => array(
|
||||
'title' => $lang['strcolumn'],
|
||||
'field' => field('attname'),
|
||||
'url' => "colproperties.php?subject=column&{$misc->href}&table=".urlencode($_REQUEST['table'])."&",
|
||||
'vars' => array('column' => 'attname'),
|
||||
),
|
||||
'type' => array(
|
||||
'title' => $lang['strtype'],
|
||||
'field' => field('+type'),
|
||||
),
|
||||
'notnull' => array(
|
||||
'title' => $lang['strnotnull'],
|
||||
'field' => field('attnotnull'),
|
||||
'type' => 'bool',
|
||||
'params'=> array('true' => 'NOT NULL', 'false' => ''),
|
||||
),
|
||||
'default' => array(
|
||||
'title' => $lang['strdefault'],
|
||||
'field' => field('adsrc'),
|
||||
),
|
||||
'keyprop' => array(
|
||||
'title' => $lang['strconstraints'],
|
||||
'field' => field('attname'),
|
||||
'type' => 'callback',
|
||||
'params'=> array(
|
||||
'function' => 'cstrRender',
|
||||
'keys' => $ck->getArray()
|
||||
)
|
||||
),
|
||||
'actions' => array(
|
||||
'title' => $lang['stractions'],
|
||||
),
|
||||
'comment' => array(
|
||||
'title' => $lang['strcomment'],
|
||||
'field' => field('comment'),
|
||||
),
|
||||
);
|
||||
|
||||
function cstrRender($s, $p) {
|
||||
global $misc, $data;
|
||||
|
||||
$str ='';
|
||||
foreach ($p['keys'] as $k => $c) {
|
||||
|
||||
if (is_null($p['keys'][$k]['consrc'])) {
|
||||
$atts = $data->getAttributeNames($_REQUEST['table'], explode(' ', $p['keys'][$k]['indkey']));
|
||||
$c['consrc'] = ($c['contype'] == 'u' ? "UNIQUE (" : "PRIMARY KEY (") . join(',', $atts) . ')';
|
||||
}
|
||||
|
||||
if ($c['p_field'] == $s)
|
||||
switch ($c['contype']) {
|
||||
case 'p':
|
||||
$str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"".
|
||||
$misc->icon('PrimaryKey') .'" alt="[pk]" title="'. htmlentities($c['consrc']) .'" /></a>';
|
||||
break;
|
||||
case 'f':
|
||||
$str .= '<a href="tblproperties.php?'. $misc->href ."&table=". urlencode($c['f_table']) ."&schema=". urlencode($c['f_schema']) ."\"><img src=\"".
|
||||
$misc->icon('ForeignKey') .'" alt="[fk]" title="'. htmlentities($c['consrc']) .'" /></a>';
|
||||
break;
|
||||
case 'u':
|
||||
$str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"".
|
||||
$misc->icon('UniqueConstraint') .'" alt="[uniq]" title="'. htmlentities($c['consrc']) .'" /></a>';
|
||||
break;
|
||||
case 'c':
|
||||
$str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"".
|
||||
$misc->icon('CheckConstraint') .'" alt="[check]" title="'. htmlentities($c['consrc']) .'" /></a>';
|
||||
}
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
$return_url = urlencode("tblproperties.php?{$misc->href}&table=". urlencode($_REQUEST['table']));
|
||||
|
||||
$actions = array(
|
||||
'browse' => array(
|
||||
'title' => $lang['strbrowse'],
|
||||
'url' => "display.php?{$misc->href}&subject=column&return_url={$return_url}&table=".urlencode($_REQUEST['table'])."&return_desc=" . urlencode($lang['strback']) . '&',
|
||||
'vars' => array('column' => 'attname'),
|
||||
),
|
||||
'alter' => array(
|
||||
'title' => $lang['stralter'],
|
||||
'url' => "colproperties.php?action=properties&{$misc->href}&table=".urlencode($_REQUEST['table'])."&",
|
||||
'vars' => array('column' => 'attname'),
|
||||
),
|
||||
'privileges' => array(
|
||||
'title' => $lang['strprivileges'],
|
||||
'url' => "privileges.php?subject=column&{$misc->href}&table=".urlencode($_REQUEST['table'])."&",
|
||||
'vars' => array('column' => 'attname'),
|
||||
),
|
||||
'drop' => array(
|
||||
'title' => $lang['strdrop'],
|
||||
'url' => "tblproperties.php?action=confirm_drop&{$misc->href}&table=".urlencode($_REQUEST['table'])."&",
|
||||
'vars' => array('column' => 'attname'),
|
||||
),
|
||||
);
|
||||
|
||||
$misc->printTable($attrs, $columns, $actions, null, 'attPre');
|
||||
|
||||
echo "<ul class=\"navlink\">\n";
|
||||
echo "\t<li><a href=\"display.php?{$misc->href}&table=", urlencode($_REQUEST['table']), "&subject=table&return_url={$return_url}&return_desc=",
|
||||
urlencode($lang['strback']), "\">{$lang['strbrowse']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tables.php?action=confselectrows&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['strselect']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tables.php?action=confinsertrow&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['strinsert']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tables.php?action=confirm_empty&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['strempty']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tables.php?action=confirm_drop&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['strdrop']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tblproperties.php?action=add_column&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['straddcolumn']}</a></li>\n";
|
||||
echo "\t<li><a href=\"tblproperties.php?action=confirm_alter&{$misc->href}&table=", urlencode($_REQUEST['table']),"\">{$lang['stralter']}</a></li>\n";
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
$misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table']);
|
||||
$misc->printBody();
|
||||
|
||||
switch ($action) {
|
||||
case 'alter':
|
||||
if (isset($_POST['alter'])) doSaveAlter();
|
||||
else doDefault();
|
||||
break;
|
||||
case 'confirm_alter':
|
||||
doAlter();
|
||||
break;
|
||||
case 'import':
|
||||
doImport();
|
||||
break;
|
||||
case 'export':
|
||||
doExport();
|
||||
break;
|
||||
case 'add_column':
|
||||
if (isset($_POST['cancel'])) doDefault();
|
||||
else doAddColumn();
|
||||
break;
|
||||
case 'properties':
|
||||
if (isset($_POST['cancel'])) doDefault();
|
||||
else doProperties();
|
||||
break;
|
||||
case 'drop':
|
||||
if (isset($_POST['drop'])) doDrop(false);
|
||||
else doDefault();
|
||||
break;
|
||||
case 'confirm_drop':
|
||||
doDrop(true);
|
||||
break;
|
||||
default:
|
||||
doDefault();
|
||||
break;
|
||||
}
|
||||
|
||||
$misc->printFooter();
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user