--- trunk/share/web/templates/fragments/queries 2007/01/28 15:24:42 77 +++ trunk/share/web/templates/fragments/queries 2007/04/27 23:49:22 115 @@ -1,6 +1,8 @@ <%args> -$database_id => undef +$on_database => undef +$created_on => undef $order +$reformat => 0 <%init> my $queries = SQLSession::Model::QueryCollection->new(); @@ -12,32 +14,118 @@ #warn "edit = $edit"; $queries->unlimit; -$queries->limit( column => 'on_database', value => $database_id ) if ( $database_id ); +$queries->limit( column => 'on_database', value => $on_database ) if ( $on_database ); +$queries->limit( column => 'created_on', operator => 'STARTSWITH', value => $created_on ) if ( $created_on ); $queries->order_by( column => $order, order => 'asc' ); -warn $queries->build_select_query,$/; +#warn $queries->build_select_query,$/; -warn "order: $order\n"; +### +### sort by +### + +my $sort_label = { + name => 'Query name', + created_on => 'Creation date', + owner => 'Creator', +}; + +my $sort_menu = Jifty::Web::Menu->new( label => 'Sort by: ' . $sort_label->{$order} ); +foreach my $c ( qw/name created_on owner/ ) { + #next if ($c eq $order); + $sort_menu->child( $c, + active => $c eq $order, + link => Jifty->web->link( + label => $sort_label->{$c}, + onclick => { + replace_with => '/fragments/queries', + args => { + order => $c, + }, + }, + ), + ); +} + +### +### date filter +### + +my $date_menu = Jifty::Web::Menu->new( label => 'Date filter' . ( $created_on ? ": $created_on" : '' ) ); +$date_menu->child( 'clear', + link => Jifty->web->link( + label => 'clear', + onclick => { + replace_with => '/fragments/queries', + args => { + created_on => '', + }, + }, + ), +) if ($created_on); + +# select created_on,count(date(created_on)) from queries group by date(created_on) order by created_on; +my $date_coll = SQLSession::Model::QueryCollection->new( results_are_readable => 1 ); +my $created_on_date = $date_coll->column( function => 'date(created_on)', column => 'date' ); +my $count = $date_coll->column( function => 'count(date(created_on))', column => 'count' ); +$date_coll->group_by( function => $created_on_date ); +$date_coll->order_by( column => 'date', order => 'DESC' ); +$date_coll->unlimit; +$date_coll->limit( column => 'on_database', value => $on_database ) if ( $on_database ); + +#warn "## ", $date_coll->build_select_query; + +my $dates = 0; + +while (my $q = $date_coll->next) { + my $date = $q->{values}->{date} || die "no date?"; + my $count = $q->{values}->{count} || die "no count?"; + $date_menu->child( $date, + active => $created_on && $created_on eq $date ? 1 : 0, + link => Jifty->web->link( + label => "$date ($count)", + onclick => { + replace_with => '/fragments/queries', + args => { + created_on => $date, + }, + }, + ), + ); + + $dates++; # why is this different from $date_coll->count ? +} + +my $u; +if ($reformat) { + use SQLSession::Utils; + $u = Jifty->app_class('Utils'); +} -Sort by: -% foreach my $c ( qw/name created_on owner/ ) { -<% $order ne $c ? Jifty->web->link( - label => $c, +
+<% $sort_menu->render_as_context_menu %> +% if ( $dates > 0 ) { +<% $date_menu->render_as_context_menu %> +% } + +
-
+
+% $queries->goto_first_item; % while (my $q = $queries->next) { +
visible ? '' : ' class=invisible' %>>
<% Jifty->web->tangent( url => '/sql/' . $q->id, label => $q->name, @@ -65,7 +153,10 @@ % if ($q->note) {
<% $q->note %>
% } -
<% $q->sql_query %>
+% my $sql = $q->sql_query; +% $sql = $u->reformat_sql( $sql ) if ($reformat); +
<% $sql %>
+
% }