651 lines
23 KiB
PHP
651 lines
23 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Manage types in a database
|
|
*
|
|
* $Id: types.php,v 1.42 2007/11/30 15:25:23 soranzo Exp $
|
|
*/
|
|
|
|
// Include application functions
|
|
include_once('./libraries/lib.inc.php');
|
|
|
|
$action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : '';
|
|
if (!isset($msg)) $msg = '';
|
|
|
|
/**
|
|
* Show read only properties for a type
|
|
*/
|
|
function doProperties($msg = '') {
|
|
global $data, $misc;
|
|
global $lang;
|
|
|
|
// Get type (using base name)
|
|
$typedata = $data->getType($_REQUEST['type']);
|
|
|
|
$misc->printTrail('type');
|
|
$misc->printTitle($lang['strproperties'], 'pg.type');
|
|
$misc->printMsg($msg);
|
|
|
|
function attPre(&$rowdata) {
|
|
global $data;
|
|
$rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']);
|
|
}
|
|
|
|
if ($typedata->recordCount() > 0) {
|
|
$vals = false;
|
|
switch ($typedata->fields['typtype']) {
|
|
case 'c':
|
|
$attrs = $data->getTableAttributes($_REQUEST['type']);
|
|
|
|
$columns = array(
|
|
'field' => array(
|
|
'title' => $lang['strfield'],
|
|
'field' => field('attname'),
|
|
),
|
|
'type' => array(
|
|
'title' => $lang['strtype'],
|
|
'field' => field('+type'),
|
|
),
|
|
'comment' => array(
|
|
'title' => $lang['strcomment'],
|
|
'field' => field('comment'),
|
|
)
|
|
);
|
|
|
|
$actions = array();
|
|
|
|
$misc->printTable($attrs, $columns, $actions, null, 'attPre');
|
|
|
|
break;
|
|
case 'e':
|
|
$vals = $data->getEnumValues($typedata->fields['typname']);
|
|
default:
|
|
$byval = $data->phpBool($typedata->fields['typbyval']);
|
|
echo "<table>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strname']}</th>\n";
|
|
echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typname']), "</td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strinputfn']}</th>\n";
|
|
echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typin']), "</td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['stroutputfn']}</th>\n";
|
|
echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typout']), "</td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strlength']}</th>\n";
|
|
echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typlen']), "</td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strpassbyval']}</th>\n";
|
|
echo "<td class=\"data1\">", ($byval) ? $lang['stryes'] : $lang['strno'], "</td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['stralignment']}</th>\n";
|
|
echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typalign']), "</td></tr>\n";
|
|
if ($data->hasEnumTypes() && $vals) {
|
|
$vals = $vals->getArray();
|
|
$nbVals = count($vals);
|
|
echo "<tr>\n\t<th class=\"data left\" rowspan=\"$nbVals\">{$lang['strenumvalues']}</th>\n";
|
|
echo "<td class=\"data2\">{$vals[0]['enumval']}</td></tr>\n";
|
|
for ($i=1; $i < $nbVals; $i++)
|
|
echo "<td class=\"data", 2-($i%2), "\">{$vals[$i]['enumval']}</td></tr>\n";
|
|
}
|
|
echo "</table>\n";
|
|
}
|
|
|
|
echo "<p><a class=\"navlink\" href=\"types.php?{$misc->href}\">{$lang['strshowalltypes']}</a></p>\n";
|
|
} else
|
|
doDefault($lang['strinvalidparam']);
|
|
}
|
|
|
|
/**
|
|
* Show confirmation of drop and perform actual drop
|
|
*/
|
|
function doDrop($confirm) {
|
|
global $data, $misc;
|
|
global $lang;
|
|
|
|
if ($confirm) {
|
|
$misc->printTrail('type');
|
|
$misc->printTitle($lang['strdrop'], 'pg.type.drop');
|
|
|
|
echo "<p>", sprintf($lang['strconfdroptype'], $misc->printVal($_REQUEST['type'])), "</p>\n";
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n";
|
|
echo "<input type=\"hidden\" name=\"type\" value=\"", htmlspecialchars($_REQUEST['type']), "\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
}
|
|
else {
|
|
$status = $data->dropType($_POST['type'], isset($_POST['cascade']));
|
|
if ($status == 0)
|
|
doDefault($lang['strtypedropped']);
|
|
else
|
|
doDefault($lang['strtypedroppedbad']);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Displays a screen where they can enter a new composite type
|
|
*/
|
|
function doCreateComposite($msg = '') {
|
|
global $data, $misc;
|
|
global $lang;
|
|
|
|
if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1;
|
|
if (!isset($_REQUEST['name'])) $_REQUEST['name'] = '';
|
|
if (!isset($_REQUEST['fields'])) $_REQUEST['fields'] = '';
|
|
if (!isset($_REQUEST['typcomment'])) $_REQUEST['typcomment'] = '';
|
|
|
|
switch ($_REQUEST['stage']) {
|
|
case 1:
|
|
$misc->printTrail('type');
|
|
$misc->printTitle($lang['strcreatecomptype'], 'pg.type.create');
|
|
$misc->printMsg($msg);
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
echo "<table>\n";
|
|
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n";
|
|
echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n";
|
|
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strnumfields']}</th>\n";
|
|
echo "\t\t<td class=\"data\"><input name=\"fields\" size=\"5\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['fields']), "\" /></td>\n\t</tr>\n";
|
|
|
|
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n";
|
|
echo "\t\t<td><textarea name=\"typcomment\" rows=\"3\" cols=\"32\">",
|
|
htmlspecialchars($_REQUEST['typcomment']), "</textarea></td>\n\t</tr>\n";
|
|
|
|
echo "</table>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"create_comp\" />\n";
|
|
echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
break;
|
|
case 2:
|
|
global $lang;
|
|
|
|
// Check inputs
|
|
$fields = trim($_REQUEST['fields']);
|
|
if (trim($_REQUEST['name']) == '') {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateComposite($lang['strtypeneedsname']);
|
|
return;
|
|
}
|
|
elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields < 1) {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateComposite($lang['strtypeneedscols']);
|
|
return;
|
|
}
|
|
|
|
$types = $data->getTypes(true, false, true);
|
|
|
|
$misc->printTrail('schema');
|
|
$misc->printTitle($lang['strcreatecomptype'], 'pg.type.create');
|
|
$misc->printMsg($msg);
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
|
|
// Output table header
|
|
echo "<table>\n";
|
|
echo "\t<tr><th colspan=\"2\" class=\"data required\">{$lang['strfield']}</th><th colspan=\"2\" class=\"data required\">{$lang['strtype']}</th>";
|
|
echo"<th class=\"data\">{$lang['strlength']}</th><th class=\"data\">{$lang['strcomment']}</th></tr>\n";
|
|
|
|
for ($i = 0; $i < $_REQUEST['fields']; $i++) {
|
|
if (!isset($_REQUEST['field'][$i])) $_REQUEST['field'][$i] = '';
|
|
if (!isset($_REQUEST['length'][$i])) $_REQUEST['length'][$i] = '';
|
|
if (!isset($_REQUEST['colcomment'][$i])) $_REQUEST['colcomment'][$i] = '';
|
|
|
|
echo "\t<tr>\n\t\t<td>", $i + 1, ". </td>\n";
|
|
echo "\t\t<td><input name=\"field[{$i}]\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['field'][$i]), "\" /></td>\n";
|
|
echo "\t\t<td>\n\t\t\t<select name=\"type[{$i}]\">\n";
|
|
$types->moveFirst();
|
|
while (!$types->EOF) {
|
|
$typname = $types->fields['typname'];
|
|
echo "\t\t\t\t<option value=\"", htmlspecialchars($typname), "\"",
|
|
(isset($_REQUEST['type'][$i]) && $typname == $_REQUEST['type'][$i]) ? ' selected="selected"' : '', ">",
|
|
$misc->printVal($typname), "</option>\n";
|
|
$types->moveNext();
|
|
}
|
|
echo "\t\t\t</select>\n\t\t</td>\n";
|
|
|
|
// Output array type selector
|
|
echo "\t\t<td>\n\t\t\t<select name=\"array[{$i}]\">\n";
|
|
echo "\t\t\t\t<option value=\"\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '') ? ' selected="selected"' : '', "></option>\n";
|
|
echo "\t\t\t\t<option value=\"[]\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n";
|
|
echo "\t\t\t</select>\n\t\t</td>\n";
|
|
|
|
echo "\t\t<td><input name=\"length[{$i}]\" size=\"10\" value=\"",
|
|
htmlspecialchars($_REQUEST['length'][$i]), "\" /></td>\n";
|
|
echo "\t\t<td><input name=\"colcomment[{$i}]\" size=\"40\" value=\"",
|
|
htmlspecialchars($_REQUEST['colcomment'][$i]), "\" /></td>\n\t</tr>\n";
|
|
}
|
|
echo "</table>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"create_comp\" />\n";
|
|
echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n";
|
|
echo "<input type=\"hidden\" name=\"fields\" value=\"", htmlspecialchars($_REQUEST['fields']), "\" />\n";
|
|
echo "<input type=\"hidden\" name=\"typcomment\" value=\"", htmlspecialchars($_REQUEST['typcomment']), "\" />\n";
|
|
echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
|
|
break;
|
|
case 3:
|
|
global $data, $lang;
|
|
|
|
// Check inputs
|
|
$fields = trim($_REQUEST['fields']);
|
|
if (trim($_REQUEST['name']) == '') {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateComposite($lang['strtypeneedsname']);
|
|
return;
|
|
}
|
|
elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields <= 0) {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateComposite($lang['strtypeneedscols']);
|
|
return;
|
|
}
|
|
|
|
$status = $data->createCompositeType($_REQUEST['name'], $_REQUEST['fields'], $_REQUEST['field'],
|
|
$_REQUEST['type'], $_REQUEST['array'], $_REQUEST['length'], $_REQUEST['colcomment'],
|
|
$_REQUEST['typcomment']);
|
|
|
|
if ($status == 0)
|
|
doDefault($lang['strtypecreated']);
|
|
elseif ($status == -1) {
|
|
$_REQUEST['stage'] = 2;
|
|
doCreateComposite($lang['strtypeneedsfield']);
|
|
return;
|
|
}
|
|
else {
|
|
$_REQUEST['stage'] = 2;
|
|
doCreateComposite($lang['strtypecreatedbad']);
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
echo "<p>{$lang['strinvalidparam']}</p>\n";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Displays a screen where they can enter a new enum type
|
|
*/
|
|
function doCreateEnum($msg = '') {
|
|
global $data, $misc;
|
|
global $lang;
|
|
|
|
if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1;
|
|
if (!isset($_REQUEST['name'])) $_REQUEST['name'] = '';
|
|
if (!isset($_REQUEST['values'])) $_REQUEST['values'] = '';
|
|
if (!isset($_REQUEST['typcomment'])) $_REQUEST['typcomment'] = '';
|
|
|
|
switch ($_REQUEST['stage']) {
|
|
case 1:
|
|
$misc->printTrail('type');
|
|
$misc->printTitle($lang['strcreateenumtype'], 'pg.type.create');
|
|
$misc->printMsg($msg);
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
echo "<table>\n";
|
|
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n";
|
|
echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n";
|
|
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strnumvalues']}</th>\n";
|
|
echo "\t\t<td class=\"data\"><input name=\"values\" size=\"5\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['values']), "\" /></td>\n\t</tr>\n";
|
|
|
|
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n";
|
|
echo "\t\t<td><textarea name=\"typcomment\" rows=\"3\" cols=\"32\">",
|
|
htmlspecialchars($_REQUEST['typcomment']), "</textarea></td>\n\t</tr>\n";
|
|
|
|
echo "</table>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"create_enum\" />\n";
|
|
echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
break;
|
|
case 2:
|
|
global $lang;
|
|
|
|
// Check inputs
|
|
$values = trim($_REQUEST['values']);
|
|
if (trim($_REQUEST['name']) == '') {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateEnum($lang['strtypeneedsname']);
|
|
return;
|
|
}
|
|
elseif ($values == '' || !is_numeric($values) || $values != (int)$values || $values < 1) {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateEnum($lang['strtypeneedsvals']);
|
|
return;
|
|
}
|
|
|
|
$misc->printTrail('schema');
|
|
$misc->printTitle($lang['strcreateenumtype'], 'pg.type.create');
|
|
$misc->printMsg($msg);
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
|
|
// Output table header
|
|
echo "<table>\n";
|
|
echo "\t<tr><th colspan=\"2\" class=\"data required\">{$lang['strvalue']}</th></tr>\n";
|
|
|
|
for ($i = 0; $i < $_REQUEST['values']; $i++) {
|
|
if (!isset($_REQUEST['value'][$i])) $_REQUEST['value'][$i] = '';
|
|
|
|
echo "\t<tr>\n\t\t<td>", $i + 1, ". </td>\n";
|
|
echo "\t\t<td><input name=\"value[{$i}]\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_REQUEST['value'][$i]), "\" /></td>\n\t</tr>\n";
|
|
}
|
|
echo "</table>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"create_enum\" />\n";
|
|
echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n";
|
|
echo "<input type=\"hidden\" name=\"values\" value=\"", htmlspecialchars($_REQUEST['values']), "\" />\n";
|
|
echo "<input type=\"hidden\" name=\"typcomment\" value=\"", htmlspecialchars($_REQUEST['typcomment']), "\" />\n";
|
|
echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
|
|
break;
|
|
case 3:
|
|
global $data, $lang;
|
|
|
|
// Check inputs
|
|
$values = trim($_REQUEST['values']);
|
|
if (trim($_REQUEST['name']) == '') {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateEnum($lang['strtypeneedsname']);
|
|
return;
|
|
}
|
|
elseif ($values == '' || !is_numeric($values) || $values != (int)$values || $values <= 0) {
|
|
$_REQUEST['stage'] = 1;
|
|
doCreateEnum($lang['strtypeneedsvals']);
|
|
return;
|
|
}
|
|
|
|
$status = $data->createEnumType($_REQUEST['name'], $_REQUEST['value'], $_REQUEST['typcomment']);
|
|
|
|
if ($status == 0)
|
|
doDefault($lang['strtypecreated']);
|
|
elseif ($status == -1) {
|
|
$_REQUEST['stage'] = 2;
|
|
doCreateEnum($lang['strtypeneedsvalue']);
|
|
return;
|
|
}
|
|
else {
|
|
$_REQUEST['stage'] = 2;
|
|
doCreateEnum($lang['strtypecreatedbad']);
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
echo "<p>{$lang['strinvalidparam']}</p>\n";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Displays a screen where they can enter a new type
|
|
*/
|
|
function doCreate($msg = '') {
|
|
global $data, $misc;
|
|
global $lang;
|
|
|
|
if (!isset($_POST['typname'])) $_POST['typname'] = '';
|
|
if (!isset($_POST['typin'])) $_POST['typin'] = '';
|
|
if (!isset($_POST['typout'])) $_POST['typout'] = '';
|
|
if (!isset($_POST['typlen'])) $_POST['typlen'] = '';
|
|
if (!isset($_POST['typdef'])) $_POST['typdef'] = '';
|
|
if (!isset($_POST['typelem'])) $_POST['typelem'] = '';
|
|
if (!isset($_POST['typdelim'])) $_POST['typdelim'] = '';
|
|
if (!isset($_POST['typalign'])) $_POST['typalign'] = $data->typAlignDef;
|
|
if (!isset($_POST['typstorage'])) $_POST['typstorage'] = $data->typStorageDef;
|
|
|
|
// Retrieve all functions and types in the database
|
|
$funcs = $data->getFunctions(true);
|
|
$types = $data->getTypes(true);
|
|
|
|
$misc->printTrail('schema');
|
|
$misc->printTitle($lang['strcreatetype'], 'pg.type.create');
|
|
$misc->printMsg($msg);
|
|
|
|
echo "<form action=\"types.php\" method=\"post\">\n";
|
|
echo "<table>\n";
|
|
echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n";
|
|
echo "<td class=\"data1\"><input name=\"typname\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
|
|
htmlspecialchars($_POST['typname']), "\" /></td></tr>\n";
|
|
echo "<tr><th class=\"data left required\">{$lang['strinputfn']}</th>\n";
|
|
echo "<td class=\"data1\"><select name=\"typin\">";
|
|
while (!$funcs->EOF) {
|
|
$proname = htmlspecialchars($funcs->fields['proname']);
|
|
echo "<option value=\"{$proname}\"",
|
|
($proname == $_POST['typin']) ? ' selected="selected"' : '', ">{$proname}</option>\n";
|
|
$funcs->moveNext();
|
|
}
|
|
echo "</select></td></tr>\n";
|
|
echo "<tr><th class=\"data left required\">{$lang['stroutputfn']}</th>\n";
|
|
echo "<td class=\"data1\"><select name=\"typout\">";
|
|
$funcs->moveFirst();
|
|
while (!$funcs->EOF) {
|
|
$proname = htmlspecialchars($funcs->fields['proname']);
|
|
echo "<option value=\"{$proname}\"",
|
|
($proname == $_POST['typout']) ? ' selected="selected"' : '', ">{$proname}</option>\n";
|
|
$funcs->moveNext();
|
|
}
|
|
echo "</select></td></tr>\n";
|
|
echo "<tr><th class=\"data left" . (version_compare($data->major_version, '7.4', '<') ? ' required' : '') . "\">{$lang['strlength']}</th>\n";
|
|
echo "<td class=\"data1\"><input name=\"typlen\" size=\"8\" value=\"",
|
|
htmlspecialchars($_POST['typlen']), "\" /></td></tr>";
|
|
echo "<tr><th class=\"data left\">{$lang['strdefault']}</th>\n";
|
|
echo "<td class=\"data1\"><input name=\"typdef\" size=\"8\" value=\"",
|
|
htmlspecialchars($_POST['typdef']), "\" /></td></tr>";
|
|
echo "<tr><th class=\"data left\">{$lang['strelement']}</th>\n";
|
|
echo "<td class=\"data1\"><select name=\"typelem\">";
|
|
echo "<option value=\"\"></option>\n";
|
|
while (!$types->EOF) {
|
|
$currname = htmlspecialchars($types->fields['typname']);
|
|
echo "<option value=\"{$currname}\"",
|
|
($currname == $_POST['typelem']) ? ' selected="selected"' : '', ">{$currname}</option>\n";
|
|
$types->moveNext();
|
|
}
|
|
echo "</select></td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strdelimiter']}</th>\n";
|
|
echo "<td class=\"data1\"><input name=\"typdelim\" size=\"1\" maxlength=\"1\" value=\"",
|
|
htmlspecialchars($_POST['typdelim']), "\" /></td></tr>";
|
|
echo "<tr><th class=\"data left\"><label for=\"typbyval\">{$lang['strpassbyval']}</label></th>\n";
|
|
echo "<td class=\"data1\"><input type=\"checkbox\" id=\"typbyval\" name=\"typbyval\"",
|
|
isset($_POST['typbyval']) ? ' checked="checked"' : '', " /></td></tr>";
|
|
echo "<tr><th class=\"data left\">{$lang['stralignment']}</th>\n";
|
|
echo "<td class=\"data1\"><select name=\"typalign\">";
|
|
foreach ($data->typAligns as $v) {
|
|
echo "<option value=\"{$v}\"",
|
|
($v == $_POST['typalign']) ? ' selected="selected"' : '', ">{$v}</option>\n";
|
|
}
|
|
echo "</select></td></tr>\n";
|
|
echo "<tr><th class=\"data left\">{$lang['strstorage']}</th>\n";
|
|
echo "<td class=\"data1\"><select name=\"typstorage\">";
|
|
foreach ($data->typStorages as $v) {
|
|
echo "<option value=\"{$v}\"",
|
|
($v == $_POST['typstorage']) ? ' selected="selected"' : '', ">{$v}</option>\n";
|
|
}
|
|
echo "</select></td></tr>\n";
|
|
echo "</table>\n";
|
|
echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n";
|
|
echo $misc->form;
|
|
echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n";
|
|
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
|
|
echo "</form>\n";
|
|
}
|
|
|
|
/**
|
|
* Actually creates the new type in the database
|
|
*/
|
|
function doSaveCreate() {
|
|
global $data;
|
|
global $lang;
|
|
|
|
// Check that they've given a name and a length.
|
|
// Note: We're assuming they've given in and out functions here
|
|
// which might be unwise...
|
|
if ($_POST['typname'] == '') doCreate($lang['strtypeneedsname']);
|
|
elseif ($_POST['typlen'] == '') doCreate($lang['strtypeneedslen']);
|
|
else {
|
|
$status = $data->createType(
|
|
$_POST['typname'],
|
|
$_POST['typin'],
|
|
$_POST['typout'],
|
|
$_POST['typlen'],
|
|
$_POST['typdef'],
|
|
$_POST['typelem'],
|
|
$_POST['typdelim'],
|
|
isset($_POST['typbyval']),
|
|
$_POST['typalign'],
|
|
$_POST['typstorage']
|
|
);
|
|
if ($status == 0)
|
|
doDefault($lang['strtypecreated']);
|
|
else
|
|
doCreate($lang['strtypecreatedbad']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show default list of types in the database
|
|
*/
|
|
function doDefault($msg = '') {
|
|
global $data, $conf, $misc;
|
|
global $lang;
|
|
|
|
$misc->printTrail('schema');
|
|
$misc->printTabs('schema','types');
|
|
$misc->printMsg($msg);
|
|
|
|
$types = $data->getTypes();
|
|
|
|
$columns = array(
|
|
'type' => array(
|
|
'title' => $lang['strtype'],
|
|
'field' => field('typname'),
|
|
'url' => "types.php?action=properties&{$misc->href}&",
|
|
'vars' => array('type' => 'basename'),
|
|
),
|
|
'owner' => array(
|
|
'title' => $lang['strowner'],
|
|
'field' => field('typowner'),
|
|
),
|
|
'flavour' => array(
|
|
'title' => $lang['strflavor'],
|
|
'field' => field('typtype'),
|
|
'type' => 'verbatim',
|
|
'params'=> array(
|
|
'map' => array(
|
|
'b' => $lang['strbasetype'],
|
|
'c' => $lang['strcompositetype'],
|
|
'd' => $lang['strdomain'],
|
|
'p' => $lang['strpseudotype'],
|
|
'e' => $lang['strenum'],
|
|
),
|
|
'align' => 'center',
|
|
),
|
|
),
|
|
'actions' => array(
|
|
'title' => $lang['stractions'],
|
|
),
|
|
'comment' => array(
|
|
'title' => $lang['strcomment'],
|
|
'field' => field('typcomment'),
|
|
),
|
|
);
|
|
|
|
if (!isset($types->fields['typtype'])) unset($columns['flavour']);
|
|
|
|
$actions = array(
|
|
'drop' => array(
|
|
'title' => $lang['strdrop'],
|
|
'url' => "types.php?action=confirm_drop&{$misc->href}&",
|
|
'vars' => array('type' => 'basename'),
|
|
),
|
|
);
|
|
|
|
$misc->printTable($types, $columns, $actions, $lang['strnotypes']);
|
|
|
|
echo "<ul class=\"navlink\">\n\t<li><a href=\"types.php?action=create&{$misc->href}\">{$lang['strcreatetype']}</a></li>\n";
|
|
echo "\t<li><a href=\"types.php?action=create_comp&{$misc->href}\">{$lang['strcreatecomptype']}</a></li>\n";
|
|
if ($data->hasEnumTypes())
|
|
echo "\t<li><a href=\"types.php?action=create_enum&{$misc->href}\">{$lang['strcreateenumtype']}</a></li>\n";
|
|
echo "</ul>\n";
|
|
}
|
|
|
|
/**
|
|
* Generate XML for the browser tree.
|
|
*/
|
|
function doTree() {
|
|
global $misc, $data;
|
|
|
|
$types = $data->getTypes();
|
|
|
|
$reqvars = $misc->getRequestVars('type');
|
|
|
|
$attrs = array(
|
|
'text' => field('typname'),
|
|
'icon' => 'Type',
|
|
'toolTip'=> field('typcomment'),
|
|
'action' => url('types.php',
|
|
$reqvars,
|
|
array(
|
|
'action' => 'properties',
|
|
'type' => field('basename')
|
|
)
|
|
)
|
|
);
|
|
|
|
$misc->printTreeXML($types, $attrs);
|
|
exit;
|
|
}
|
|
|
|
if ($action == 'tree') doTree();
|
|
|
|
$misc->printHeader($lang['strtypes']);
|
|
$misc->printBody();
|
|
|
|
switch ($action) {
|
|
case 'create_comp':
|
|
if (isset($_POST['cancel'])) doDefault();
|
|
else doCreateComposite();
|
|
break;
|
|
case 'create_enum':
|
|
if (isset($_POST['cancel'])) doDefault();
|
|
else doCreateEnum();
|
|
break;
|
|
case 'save_create':
|
|
if (isset($_POST['cancel'])) doDefault();
|
|
else doSaveCreate();
|
|
break;
|
|
case 'create':
|
|
doCreate();
|
|
break;
|
|
case 'drop':
|
|
if (isset($_POST['cancel'])) doDefault();
|
|
else doDrop(false);
|
|
break;
|
|
case 'confirm_drop':
|
|
doDrop(true);
|
|
break;
|
|
case 'properties':
|
|
doProperties();
|
|
break;
|
|
default:
|
|
doDefault();
|
|
break;
|
|
}
|
|
|
|
$misc->printFooter();
|
|
|
|
?>
|