2019-11-21 12:35:45 +00:00
< ? 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 " ;
if ( $data -> isSuperUser ()) {
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 ;
2020-11-07 14:52:05 +00:00
// Determine whether or not the table has an object ID (Always false if version>=12)
2019-11-21 12:35:45 +00:00
$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 -> printTree ( $columns , $attrs , 'tblcolumns' );
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' ][ 'attr' ][ 'href' ][ 'urlvars' ][ 'query' ] = " 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' ],
'class' => 'constraint_cell' ,
'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' ], ENT_QUOTES , 'UTF-8' ) . '" /></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' ], ENT_QUOTES , 'UTF-8' ) . '" /></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' ], ENT_QUOTES , 'UTF-8' ) . '" /></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' ], ENT_QUOTES , 'UTF-8' ) . '" /></a>' ;
}
}
return $str ;
}
$actions = array (
'browse' => array (
'title' => $lang [ 'strbrowse' ],
'url' => " display.php? { $misc -> href } &subject=column&return=table&table= " . urlencode ( $_REQUEST [ 'table' ]) . '&' ,
'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' ),
),
);
$actions = array (
'browse' => array (
'content' => $lang [ 'strbrowse' ],
'attr' => array (
'href' => array (
'url' => 'display.php' ,
'urlvars' => array (
'table' => $_REQUEST [ 'table' ],
'subject' => 'column' ,
'return' => 'table' ,
'column' => field ( 'attname' )
)
)
)
),
'alter' => array (
'content' => $lang [ 'stralter' ],
'attr' => array (
'href' => array (
'url' => 'colproperties.php' ,
'urlvars' => array (
'subject' => 'column' ,
'action' => 'properties' ,
'table' => $_REQUEST [ 'table' ],
'column' => field ( 'attname' )
)
)
)
),
'privileges' => array (
'content' => $lang [ 'strprivileges' ],
'attr' => array (
'href' => array (
'url' => 'privileges.php' ,
'urlvars' => array (
'subject' => 'column' ,
'table' => $_REQUEST [ 'table' ],
'column' => field ( 'attname' )
)
)
)
),
'drop' => array (
'content' => $lang [ 'strdrop' ],
'attr' => array (
'href' => array (
'url' => 'tblproperties.php' ,
'urlvars' => array (
'subject' => 'column' ,
'action' => 'confirm_drop' ,
'table' => $_REQUEST [ 'table' ],
'column' => field ( 'attname' )
)
)
)
),
);
$misc -> printTable ( $attrs , $columns , $actions , 'tblproperties-tblproperties' , null , 'attPre' );
$navlinks = array (
'browse' => array (
'attr' => array (
'href' => array (
'url' => 'display.php' ,
'urlvars' => array (
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ],
'subject' => 'table' ,
'return' => 'table'
)
)
),
'content' => $lang [ 'strbrowse' ]
),
'select' => array (
'attr' => array (
'href' => array (
'url' => 'tables.php' ,
'urlvars' => array (
'action' => 'confselectrows' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ]
)
)
),
'content' => $lang [ 'strselect' ]
),
'insert' => array (
'attr' => array (
'href' => array (
'url' => 'tables.php' ,
'urlvars' => array (
'action' => 'confinsertrow' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ]
)
)
),
'content' => $lang [ 'strinsert' ]
),
'empty' => array (
'attr' => array (
'href' => array (
'url' => 'tables.php' ,
'urlvars' => array (
'action' => 'confirm_empty' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ]
)
)
),
'content' => $lang [ 'strempty' ]
),
'drop' => array (
'attr' => array (
'href' => array (
'url' => 'tables.php' ,
'urlvars' => array (
'action' => 'confirm_drop' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ],
)
)
),
'content' => $lang [ 'strdrop' ]
),
'addcolumn' => array (
'attr' => array (
'href' => array (
'url' => 'tblproperties.php' ,
'urlvars' => array (
'action' => 'add_column' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ]
)
)
),
'content' => $lang [ 'straddcolumn' ]
),
'alter' => array (
'attr' => array (
'href' => array (
'url' => 'tblproperties.php' ,
'urlvars' => array (
'action' => 'confirm_alter' ,
'server' => $_REQUEST [ 'server' ],
'database' => $_REQUEST [ 'database' ],
'schema' => $_REQUEST [ 'schema' ],
'table' => $_REQUEST [ 'table' ]
)
)
),
'content' => $lang [ 'stralter' ]
)
);
$misc -> printNavLinks ( $navlinks ,
'tblproperties-tblproperties'
, get_defined_vars ()
);
}
$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 ();
?>