2007-07-02 05:51:26 +00:00
< ? php
page_header ( lang ( 'Select' ) . " : " . htmlspecialchars ( $_GET [ " select " ]));
2007-07-06 13:03:13 +00:00
$fields = fields ( $_GET [ " select " ]);
2007-07-09 06:12:22 +00:00
$rights = array ();
2007-07-06 13:03:13 +00:00
$columns = array ();
foreach ( $fields as $key => $field ) {
2007-07-09 06:12:22 +00:00
if ( isset ( $field [ " privileges " ][ " select " ])) {
2007-07-06 13:03:13 +00:00
$columns [] = $key ;
}
2007-07-09 06:12:22 +00:00
$rights += $field [ " privileges " ];
}
if ( isset ( $rights [ " insert " ])) {
echo '<p><a href="' . htmlspecialchars ( $SELF ) . 'edit=' . urlencode ( $_GET [ 'select' ]) . '">' . lang ( 'New item' ) . " </a></p> \n " ;
2007-07-02 05:51:26 +00:00
}
2007-07-06 13:03:13 +00:00
if ( ! $columns ) {
2007-07-10 13:30:42 +00:00
echo " <p class='error'> " . lang ( 'Unable to select the table' ) . ( $fields ? " " : " : " . $mysql -> error ) . " .</p> \n " ;
2007-07-06 13:03:13 +00:00
} else {
2007-07-09 06:12:22 +00:00
$indexes = indexes ( $_GET [ " select " ]);
2007-07-06 13:03:13 +00:00
echo " <form action='' id='form'> \n <fieldset><legend> " . lang ( 'Search' ) . " </legend> \n " ;
if ( strlen ( $_GET [ " server " ])) {
echo '<input type="hidden" name="server" value="' . htmlspecialchars ( $_GET [ " server " ]) . '" />' ;
2007-07-02 05:51:26 +00:00
}
2007-07-06 13:03:13 +00:00
echo '<input type="hidden" name="db" value="' . htmlspecialchars ( $_GET [ " db " ]) . '" />' ;
echo '<input type="hidden" name="select" value="' . htmlspecialchars ( $_GET [ " select " ]) . '" />' ;
echo " \n " ;
$where = array ();
2007-07-09 06:12:22 +00:00
foreach ( $indexes as $i => $index ) {
if ( $index [ " type " ] == " FULLTEXT " ) {
if ( strlen ( $_GET [ " fulltext " ][ $i ])) {
2007-07-10 14:16:44 +00:00
$where [] = " MATCH ( " . implode ( " , " , array_map ( 'idf_escape' , $index [ " columns " ])) . " ) AGAINST (' " . $mysql -> escape_string ( $_GET [ " fulltext " ][ $i ]) . " ' " . ( isset ( $_GET [ " boolean " ][ $i ]) ? " IN BOOLEAN MODE " : " " ) . " ) " ;
2007-07-09 06:12:22 +00:00
}
echo " (<i> " . implode ( " </i>, <i> " , $index [ " columns " ]) . " </i>) AGAINST " ;
echo ' <input name="fulltext[' . $i . ']" value="' . htmlspecialchars ( $_GET [ " fulltext " ][ $i ]) . '" />' ;
2007-07-09 22:55:50 +00:00
echo " <label for='boolean- $i '><input type='checkbox' name='boolean[ $i ]' value='1' id='boolean- $i ' " . ( isset ( $_GET [ " boolean " ][ $i ]) ? " checked='checked' " : " " ) . " /> " . lang ( 'BOOL' ) . " </label> " ;
2007-07-09 06:12:22 +00:00
echo " <br /> \n " ;
}
}
2007-07-06 13:03:13 +00:00
$operators = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " REGEXP " , " IS NULL " );
$i = 0 ;
foreach (( array ) $_GET [ " where " ] as $val ) {
2007-07-06 14:07:13 +00:00
if ( strlen ( $val [ " col " ]) && in_array ( $val [ " op " ], $operators )) {
2007-07-10 14:16:44 +00:00
$where [] = idf_escape ( $val [ " col " ]) . " $val[op] " . ( $val [ " op " ] != " IS NULL " ? " ' " . $mysql -> escape_string ( $val [ " val " ]) . " ' " : " " );
2007-07-06 13:03:13 +00:00
echo " <div><select name='where[ $i ][col]'><option></option> " . optionlist ( $columns , $val [ " col " ], " not_vals " ) . " </select> " ;
echo " <select name='where[ $i ][op]' onchange= \" where_change(this); \" > " . optionlist ( $operators , $val [ " op " ], " not_vals " ) . " </select> " ;
echo " <input name='where[ $i ][val]' value= \" " . htmlspecialchars ( $val [ " val " ]) . " \" /></div> \n " ;
$i ++ ;
}
}
?>
2007-07-03 07:00:51 +00:00
< script type = " text/javascript " >
function where_change ( op ) {
op . form [ op . name . substr ( 0 , op . name . length - 4 ) + '[val]' ] . style . display = ( op . value == 'IS NULL' ? 'none' : '' );
2007-07-02 15:52:15 +00:00
}
2007-07-03 07:00:51 +00:00
< ? php if ( $i ) { ?>
2007-07-06 09:03:47 +00:00
for ( var i = 0 ; < ? php echo $i ; ?> > i; i++) {
document . getElementById ( 'form' )[ 'where[' + i + '][op]' ] . onchange ();
}
2007-07-03 07:00:51 +00:00
< ? php } ?>
</ script >
< ? php
2007-07-06 13:03:13 +00:00
echo " <div><select name='where[ $i ][col]'><option></option> " . optionlist ( $columns , array (), " not_vals " ) . " </select> " ;
echo " <select name='where[ $i ][op]' onchange= \" where_change(this); \" > " . optionlist ( $operators , array (), " not_vals " ) . " </select> " ;
echo " <input name='where[ $i ][val]' /></div> \n " ; //! JavaScript for adding next
echo " </fieldset> \n " ;
echo " <fieldset><legend> " . lang ( 'Sort' ) . " </legend> \n " ;
$order = array ();
$i = 0 ;
foreach (( array ) $_GET [ " order " ] as $key => $val ) {
if ( in_array ( $val , $columns , true )) {
2007-07-09 06:12:22 +00:00
$order [] = idf_escape ( $val ) . ( isset ( $_GET [ " desc " ][ $key ]) ? " DESC " : " " );
2007-07-06 13:03:13 +00:00
echo " <div><select name='order[ $i ]'><option></option> " . optionlist ( $columns , $val , " not_vals " ) . " </select> " ;
2007-07-09 22:55:50 +00:00
echo " <label for='desc- $i '><input type='checkbox' name='desc[ $i ]' value='1' id='desc- $i ' " . ( isset ( $_GET [ " desc " ][ $key ]) ? " checked='checked' " : " " ) . " /> " . lang ( 'DESC' ) . " </label></div> \n " ;
2007-07-06 13:03:13 +00:00
$i ++ ;
2007-07-06 09:49:33 +00:00
}
}
2007-07-06 13:03:13 +00:00
echo " <div><select name='order[ $i ]'><option></option> " . optionlist ( $columns , array (), " not_vals " ) . " </select> " ;
2007-07-09 22:55:50 +00:00
echo " <label for='desc- $i '><input type='checkbox' name='desc[ $i ]' value='1' id='desc- $i ' /> " . lang ( 'DESC' ) . " </label></div> \n " ;
2007-07-06 13:03:13 +00:00
echo " </fieldset> \n " ;
2007-07-02 05:51:26 +00:00
2007-07-06 13:03:13 +00:00
echo " <fieldset><legend> " . lang ( 'Limit' ) . " </legend> \n " ;
$limit = ( isset ( $_GET [ " limit " ]) ? $_GET [ " limit " ] : " 30 " );
echo '<div><input name="limit" size="3" value="' . htmlspecialchars ( $limit ) . '" /></div>' ;
echo " </fieldset> \n " ;
echo " <fieldset><legend> " . lang ( 'Action' ) . " </legend><div><input type='submit' value=' " . lang ( 'Select' ) . " ' /></div></fieldset> \n " ;
echo " </form> \n " ;
2007-07-10 20:57:35 +00:00
echo " <div style='clear: left;'></div> \n " ;
2007-07-06 13:03:13 +00:00
2007-07-10 13:30:42 +00:00
$result = $mysql -> query ( " SELECT SQL_CALC_FOUND_ROWS " . implode ( " , " , array_map ( 'idf_escape' , $columns )) . " FROM " . idf_escape ( $_GET [ " select " ]) . ( $where ? " WHERE " . implode ( " AND " , $where ) : " " ) . ( $order ? " ORDER BY " . implode ( " , " , $order ) : " " ) . ( strlen ( $limit ) ? " LIMIT " . intval ( $limit ) . " OFFSET " . ( $limit * $_GET [ " page " ]) : " " ));
if ( ! $result -> num_rows ) {
2007-07-06 13:03:13 +00:00
echo " <p class='message'> " . lang ( 'No rows.' ) . " </p> \n " ;
} else {
2007-07-11 08:24:03 +00:00
$found_rows = $mysql -> result ( $mysql -> query ( " SELECT FOUND_ROWS() " )); // space for mysql.trace_mode
2007-07-06 13:03:13 +00:00
$foreign_keys = array ();
foreach ( foreign_keys ( $_GET [ " select " ]) as $foreign_key ) {
foreach ( $foreign_key [ 2 ] as $val ) {
$foreign_keys [ $val ][] = $foreign_key ;
}
2007-07-02 05:51:26 +00:00
}
2007-07-09 06:12:22 +00:00
$childs = array ();
2007-07-10 13:30:42 +00:00
if ( $mysql -> server_info >= 5 ) {
2007-07-09 06:12:22 +00:00
// would be possible in earlier versions too, but only by examining all tables (in all databases)
2007-07-10 14:16:44 +00:00
$result1 = $mysql -> query ( " SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = ' " . $mysql -> escape_string ( $_GET [ " db " ]) . " ' AND REFERENCED_TABLE_NAME = ' " . $mysql -> escape_string ( $_GET [ " select " ]) . " ' ORDER BY ORDINAL_POSITION " );
2007-07-10 13:30:42 +00:00
while ( $row1 = $result1 -> fetch_assoc ()) {
2007-07-09 06:12:22 +00:00
$childs [ $row1 [ " CONSTRAINT_NAME " ]][ 0 ] = $row1 [ " TABLE_SCHEMA " ];
$childs [ $row1 [ " CONSTRAINT_NAME " ]][ 1 ] = $row1 [ " TABLE_NAME " ];
$childs [ $row1 [ " CONSTRAINT_NAME " ]][ 2 ][] = $row1 [ " REFERENCED_COLUMN_NAME " ];
$childs [ $row1 [ " CONSTRAINT_NAME " ]][ 3 ][] = $row1 [ " COLUMN_NAME " ];
}
2007-07-10 13:30:42 +00:00
$result1 -> free ();
2007-07-06 13:03:13 +00:00
}
echo " <table border='1' cellspacing='0' cellpadding='2'> \n " ;
2007-07-10 13:30:42 +00:00
for ( $j = 0 ; $row = $result -> fetch_assoc (); $j ++ ) {
2007-07-06 13:03:13 +00:00
if ( ! $j ) {
echo " <thead><tr><th> " . implode ( " </th><th> " , array_map ( 'htmlspecialchars' , array_keys ( $row ))) . " </th><th> " . lang ( 'Action' ) . " </th></tr></thead> \n " ;
}
echo " <tr> " ;
2007-07-09 06:12:22 +00:00
$unique_idf = '&' . implode ( '&' , unique_idf ( $row , $indexes ));
2007-07-06 13:03:13 +00:00
foreach ( $row as $key => $val ) {
if ( ! isset ( $val )) {
$val = " <i>NULL</i> " ;
2007-07-09 06:12:22 +00:00
} elseif ( preg_match ( '~blob|binary~' , $fields [ $key ][ " type " ]) && preg_match ( '~[\\x80-\\xFF]~' , $val )) {
$val = '<a href="' . htmlspecialchars ( $SELF ) . 'download=' . urlencode ( $_GET [ " select " ]) . '&field=' . urlencode ( $key ) . $unique_idf . '">' . lang ( '%d byte(s)' , strlen ( $val )) . '</a>' ;
2007-07-06 13:03:13 +00:00
} else {
$val = ( strlen ( trim ( $val )) ? nl2br ( htmlspecialchars ( $val )) : " " );
foreach (( array ) $foreign_keys [ $key ] as $foreign_key ) {
if ( count ( $foreign_keys [ $key ]) == 1 || count ( $foreign_key [ 2 ]) == 1 ) {
$val = '">' . " $val </a> " ;
foreach ( $foreign_key [ 2 ] as $i => $source ) {
2007-07-09 06:12:22 +00:00
$val = " &where%5B $i %5D%5Bcol%5D= " . urlencode ( $foreign_key [ 3 ][ $i ]) . " &where%5B $i %5D%5Bop%5D=%3D&where%5B $i %5D%5Bval%5D= " . urlencode ( $row [ $source ]) . $val ;
2007-07-06 13:03:13 +00:00
}
$val = '<a href="' . htmlspecialchars ( strlen ( $foreign_key [ 0 ]) ? preg_replace ( '~([?&]db=)[^&]+~' , '\\1' . urlencode ( $foreign_key [ 0 ]), $SELF ) : $SELF ) . 'select=' . htmlspecialchars ( $foreign_key [ 1 ]) . $val ; // InnoDB support non-UNIQUE keys
break ;
2007-07-02 15:52:15 +00:00
}
2007-07-02 05:51:26 +00:00
}
}
2007-07-06 13:03:13 +00:00
echo " <td> $val </td> " ;
2007-07-02 05:51:26 +00:00
}
2007-07-09 06:12:22 +00:00
echo '<td><a href="' . htmlspecialchars ( $SELF ) . 'edit=' . urlencode ( $_GET [ 'select' ]) . $unique_idf . '">' . lang ( 'edit' ) . '</a>' ;
2007-07-06 13:03:13 +00:00
foreach ( $childs as $child ) {
echo ' <a href="' . htmlspecialchars ( strlen ( $child [ 0 ]) ? preg_replace ( '~([?&]db=)[^&]+~' , '\\1' . urlencode ( $child [ 0 ]), $SELF ) : $SELF ) . 'select=' . urlencode ( $child [ 1 ]);
foreach ( $child [ 2 ] as $i => $source ) {
echo " &where[ $i ][col]= " . urlencode ( $child [ 3 ][ $i ]) . " &where[ $i ][op]=%3D&where[ $i ][val]= " . urlencode ( $row [ $source ]);
}
echo '">' . htmlspecialchars ( $child [ 1 ]) . '</a>' ;
2007-07-02 10:24:49 +00:00
}
2007-07-09 06:12:22 +00:00
echo '</td>' ;
2007-07-06 13:03:13 +00:00
echo " </tr> \n " ;
2007-07-02 10:24:49 +00:00
}
2007-07-06 13:03:13 +00:00
echo " </table> \n " ;
if ( intval ( $limit ) && $found_rows > $limit ) {
echo " <p> " . lang ( 'Page' ) . " : \n " ;
for ( $i = 0 ; $i < $found_rows / $limit ; $i ++ ) {
echo ( $i == $_GET [ " page " ] ? $i + 1 : '<a href="' . htmlspecialchars ( preg_replace ( '~(\\?)page=[^&]*&|&page=[^&]*~' , '\\1' , $_SERVER [ " REQUEST_URI " ]) . ( $i ? " &page= $i " : " " )) . '">' . ( $i + 1 ) . " </a> " ) . " \n " ;
}
echo " </p> \n " ;
2007-07-02 05:51:26 +00:00
}
}
2007-07-10 13:30:42 +00:00
$result -> free ();
2007-07-02 05:51:26 +00:00
}