[interchange-cvs] interchange - heins modified 2 files
interchange-core@interchange.redhat.com
interchange-core@interchange.redhat.com
Mon Feb 4 02:45:00 2002
User: heins
Date: 2002-02-04 07:44:49 GMT
Modified: dist/lib/UI icmenu.txt
Added: dist/lib/UI/pages/admin direct_sql.html
Log:
* Add cheesy little "Direct SQL" feature.
* This can obviously be enhanced quite a bit (clickable resorting,
checkboxes for delete/edit, etc.) but I think this is enough for
now. It allows some delete/update/insert/view without shell
access.
* Only allowed for superuser. No help, for anyone who needs it
probably shouldn't be using it. Famous last words, I know. 8-)
* Anyone who wants to try and improve it should probably get
a copy of "roster.html" from Jon or myself.
Revision Changes Path
2.3 +1 -0 interchange/dist/lib/UI/icmenu.txt
rev 2.3, prev_rev 2.2
Index: icmenu.txt
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/lib/UI/icmenu.txt,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- icmenu.txt 3 Feb 2002 04:27:55 -0000 2.2
+++ icmenu.txt 4 Feb 2002 07:44:49 -0000 2.3
@@ -22,6 +22,7 @@
0021 Admin 12 no_dbmenu mv_data_table admin/export_table mv_data_table=[cgi mv_data_table] Export Data
0022 Admin 13 no_dbmenu mv_data_table admin/spread mv_data_table=[cgi mv_data_table] Spreadsheet
0022b Admin 13b no_dbmenu mv_data_table admin/search_replace mv_data_table=[cgi mv_data_table] Search/Replace
+0022c Admin 13c no_dbmenu mv_data_table admin/direct_sql mv_data_table=[cgi mv_data_table] Direct SQL
0023 Admin 14 no_dbmenu mv_data_table admin/flex_editor mv_data_table=[cgi mv_data_table]&ui_new_item=1 New Entry
0024 Admin 15 no_dbmenu mv_data_table admin/gentable Re-select Table
0025 Admin 16 1 access_menu admin/access Users
1.1 interchange/dist/lib/UI/pages/admin/direct_sql.html
rev 1.1, prev_rev 1.0
Index: direct_sql.html
===================================================================
[set page_title]Direct SQL Query[/set]
[set ui_class]Admin[/set]
[set page_banner]Direct SQL Query[/set]
[set page_perm]super[/set]
[set help_name]table.direct_sql[/set]
[set icon_name]icon_config.gif[/set]
[seti ui_body_extra][/seti]
@_UI_STD_HEAD_@
<!-- ----- BEGIN REAL STUFF ----- -->
[calc]
delete $CGI->{list};
delete $CGI->{html};
$Scratch->{message} = '';
delete $Scratch->{update_message};
if ($CGI->{clear_query_buffer}) {
delete $Session->{x_query_buffer};
return;
}
unless ($sql = $CGI->{sql}) {
$CGI->{sql} = "select * from $CGI->{mv_data_table}"
if $CGI->{mv_data_table};
return;
}
my $extra = '';
$sql =~ s/^\s+//;
$sql =~ s/\s+$//;
if($sql =~ /^select\s+.*?\s+from\s+(\w+)/i) {
$CGI->{mv_data_table} = $1;
delete $CGI->{rc};
delete $CGI->{list};
$CGI->{html} = 1;
# $Scratch->{message} = qq{
# Rows selected by query:
# <blockquote><b>$sql</b></blockquote>
# };
}
else {
if($sql =~ /^update\s+(\w+)/i) {
$Scratch->{update_message} = 'UPDATED';
}
elsif($sql =~ /^delete\s+from\s+(\w+)/i) {
$Scratch->{update_message} = 'DELETED';
}
elsif($sql =~ /^insert\s+into\s+(\w+)/i) {
$Scratch->{update_message} = 'INSERTED';
}
else {
$Scratch->{update_message} = 'UNKNOWN OPERATION';
}
my $flagtab = $1;
if($Scratch->{is_super}) {
$Tag->flag( { type => 'write', table => $flagtab });
}
else {
$extra = "(May fail on write-controlled table, not admin superuser)";
}
$CGI->{rc} = 1;
delete $CGI->{html};
$CGI->{list} = 1;
# $Scratch->{message} = qq{
# Rows updated by query:
# <blockquote><b>$sql</b></blockquote>
# };
}
$Scratch->{message} =~ s/\r?\n/<br>/g;
$Scratch->{message} =~ s/\r/<br>/g;
$Scratch->{message} =~ s/<br>/<br>\n/g;
$Scratch->{message} .= $extra;
my $qb = $Session->{x_query_buffer} ||= [];
my $prev = $qb->[0] ? $qb->[0][0] : '';
unshift @$qb, [$sql] unless $sql eq $prev;
return;
[/calc]
[if cgi mv_data_table]
[page
href=__UI_BASE__/flex_select
form=auto
mv_data_table="[cgi mv_data_table]"
]Return to [cgi mv_data_table] edit</a>
[/if]
<FORM ACTION="[area @@MV_PAGE@@]" name=query>
<table>
<tr>
<td>
<textarea name=sql rows=4 cols=80>[cgi sql]</textarea>
</td>
<td style="font-size: smaller">
[loop list=`
my $tmp = $Session->{x_query_buffer};
return [$tmp] if $tmp;
return;
` ml=10]
[list]
[loop-increment] <A HREF="javascript: document.query.sql.value='[loop-calc]
my $thing = <<'EOF';
[loop-code]
EOF
$thing =~ s/'/\\'/g;
return $thing;[/loop-calc]'; void(0)">[loop-code]</A><br>
[/list]
[/loop]
</td>
<tr>
<td>
<input type=submit>
<select name=limit>
[loop list="250 10 25 50 100 500 1000 10000 50000" option=limit cgi=1]
<OPTION value="[loop-code]"> Limit to [loop-code]
[/loop]
</select>
Base table <select name=mv_data_table>
[loop list="[list-databases]" option=mv_data_table cgi=1]
<OPTION>[loop-code]
[/loop]
</select>
</td>
<td>
<input style="font-size: smaller"
type=submit
name=clear_query_buffer
value="Clear buffer">
</td>
</form>
<P>
<blockquote>
[scratchd message]
</blockquote>
<table border=1>
[if cgi html]
[query
table="[cgi mv_data_table]"
st=db
row-count="[cgi row-count]"
html="[cgi html]"
list="[cgi list]"
sql=`$sql`
ml="[cgi limit]"
]
[/query]
[elsif cgi list]
[query
table="[cgi mv_data_table]"
row-count="[cgi row-count]"
st=db
html="[cgi html]"
list="[cgi list]"
ml="[cgi limit]"
sql=`$sql`
]
<tr>
<td>[scratchd update_message]</td>
<td>[sql-code]</td>
</tr>
[/query]
[/elsif]
[/if]
</table>
<!-- ----- END REAL STUFF ----- -->
@_UI_STD_FOOTER_@
<!-- page: @@MV_PAGE@@ -->