X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fsearch%2Felements%2Fsearch-html.html;h=12f6c1e046710e85342a7fbb610ff3323952cd8f;hb=65b639012a5dc547eccb01fd0e55efd4aa728039;hp=d7e81282b83d49f8a7140b8e2673f7e352945a49;hpb=0af38652da3b3be7da2d35b048285ef6f2194e1a;p=freeside.git
diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html
index d7e81282b..12f6c1e04 100644
--- a/httemplate/search/elements/search-html.html
+++ b/httemplate/search/elements/search-html.html
@@ -181,269 +181,13 @@
% }
- <% include('/elements/table-grid.html') %>
-
-
-% my $h2 = 0;
-% my $colspan = 0;
-% my @fields = @{ $opt{'sort_fields'} || $opt{'fields'} || [] };
-% my $order_by = $cgi->param('order_by');
-% foreach my $header ( @{ $opt{header} } ) {
-%
-% my $field = shift @fields;
-%
-% $colspan-- if $colspan > 0;
-% next if $colspan;
-%
-% my $label = ref($header) ? $header->{label} : $header;
-% unless ( ref($field) || !$field ) {
-% if ( $order_by eq $field ) {
-% $cgi->param('order_by', "$field DESC");
-% } else {
-% $cgi->param('order_by', $field);
-% }
-% $label = qq($label);
-% }
-%
-% $colspan = ref($header) ? $header->{colspan} : 0;
-% my $rowspan = 1;
-% my $style = '';
-% if ( $opt{header2} ) {
-% if ( !length($opt{header2}->[$h2]) ) {
-% $rowspan = 2;
-% splice @{ $opt{header2} }, $h2, 1;
-% } else {
-% $h2++;
-% $style = 'STYLE="border-bottom: none"'
-% }
-% }
-
- <% $style %>
-
- >
- <% $label %>
- |
-% }
-
-
-% if ( $opt{header2} ) {
-
-% foreach my $header ( @{ $opt{header2} } ) {
-% my $label = ref($header) ? $header->{label} : $header;
-
- <% $label %>
- |
-% }
-
-% }
-
-% my $bgcolor1 = '#eeeeee';
-% my $bgcolor2 = '#ffffff';
-% my $bgcolor;
-%
-% foreach my $row ( @$rows ) {
-%
-% if ( $bgcolor eq $bgcolor1 ) {
-% $bgcolor = $bgcolor2;
-% } else {
-% $bgcolor = $bgcolor1;
-% }
-
-
-
-% if ( $opt{'fields'} ) {
-%
-% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : '';
-% my $onclicks = $opt{'link_onclicks'} ? [ @{$opt{'link_onclicks'}} ] : [];
-% my $aligns = $opt{'align'} ? [ @{$opt{'align'}} ] : '';
-% my $colors = $opt{'color'} ? [ @{$opt{'color'}} ] : [];
-% my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : [];
-% my $styles = $opt{'style'} ? [ @{$opt{'style'}} ] : [];
-% my $cstyles = $opt{'cell_style'} ? [ @{$opt{'cell_style'}} ] : [];
-%
-% foreach my $field (
-%
-% map {
-% if ( ref($_) eq 'ARRAY' ) {
-%
-% my $tableref = $_;
-%
-% '';
-%
-% } else {
-% $_;
-% }
-% }
-%
-% map {
-% if ( ref($_) eq 'CODE' ) {
-% &{$_}($row);
-% } elsif ( ref($row) eq 'ARRAY' and
-% $_ =~ /^\d+$/ ) {
-% # for the 'straight SQL' case: specify fields
-% # by position
-% $row->[$_];
-% } else {
-% $row->$_();
-% }
-% }
-% @{$opt{'fields'}}
-%
-% ) {
-%
-%# my $class = ( $field =~ /^
+ <& SELF:data_table,
+ rows => $rows,
+ null_link => $null_link,
+ link_agentnums => \@link_agentnums,
+ self_url => $self_url,
+ %opt
+ &>
<% $pager %>
@@ -490,13 +234,374 @@ my $confmax = $args{'confmax'};
my $maxrecords = $args{'maxrecords'};
my $offset = $args{'offset'};
my %opt = %{ $args{'opt'} };
-my $self_url = $opt{'url'} || $cgi->url('-path_info' => 1, '-full' =>1);
-my $count_sth = dbh->prepare($opt{'count_query'})
- or die "Error preparing $opt{'count_query'}: ". dbh->errstr;
-$count_sth->execute
- or die "Error executing $opt{'count_query'}: ". $count_sth->errstr;
-my $count_arrayref = $count_sth->fetchrow_arrayref;
+# must be an arrayref of the row count, followed by any other totals
+my $count_arrayref = $args{'totals'};
my $total = $count_arrayref->[0];
+# there used to be an option to override this, for highly dubious reasons
+my $self_url = $cgi->url('-path_info' => 1, '-full' =>1);
+
%init>
+<%method data_table>
+% my %opt = @_;
+% my $rows = delete $opt{rows};
+% my $self_url = delete $opt{self_url};
+<& /elements/table-grid.html &>
+
+
+<& SELF:header_row,
+ 'header' => $opt{'header'},
+ 'header2' => $opt{'header2'},
+ 'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}),
+&>
+
+
+
+<& SELF:data_rows, rows => $rows, opt => \%opt &>
+
+
+% if ( $opt{'footer'} ) {
+
+<& SELF:footer_row, row => $opt{'footer'}, opt => \%opt &>
+
+% }
+
+%method>
+<%method header_row>
+<%args>
+@sort_fields
+@header
+@header2 => ()
+%args>
+
+% my $h2 = 0;
+% my $colspan = 0;
+% my $order_by = $cgi->param('order_by');
+% my $self_url = $cgi->url('-path_info' => 1, '-full' =>1);
+% foreach my $header ( @header ) {
+%
+% my $field = shift @sort_fields;
+%
+% $colspan-- if $colspan > 0;
+% next if $colspan;
+%
+% my $label = ref($header) ? $header->{label} : $header;
+% unless ( ref($field) || !$field ) {
+% if ( $order_by eq $field ) {
+% $cgi->param('order_by', "$field DESC");
+% } else {
+% $cgi->param('order_by', $field);
+% }
+% $label = qq($label);
+% }
+%
+% $colspan = ref($header) ? $header->{colspan} : 0;
+% my $rowspan = 1;
+% my $style = '';
+% if ( @header2 ) {
+% if ( !length($header2[$h2]) ) {
+% $rowspan = 2;
+% splice @header2, $h2, 1;
+% } else {
+% $h2++;
+% $style = 'STYLE="border-bottom: none"'
+% }
+% }
+
+ <% $style %>
+
+ >
+ <% $label %>
+ |
+% }
+
+
+% if ( @header2 ) {
+
+% foreach my $header ( @header2 ) {
+% my $label = ref($header) ? $header->{label} : $header;
+
+ <% $label %>
+ |
+% }
+
+% }
+%method>
+<%method data_rows>
+<%args>
+$rows => []
+%opt
+%args>
+% my %align = (
+% 'l' => 'left',
+% 'r' => 'right',
+% 'c' => 'center',
+% ' ' => '',
+% '.' => '',
+% );
+% if ( $opt{align} and !ref($opt{align}) ) {
+% $opt{align} = [ map $align{$_}, split(//, $opt{align}) ];
+% }
+
+% my $i = 0; # for row striping # XXX CSS - nth-child
+% my $id = 0;
+% foreach my $row ( @$rows ) {
+%
+% my $rowstyle = '';
+% if ( $row eq $opt{'footer_data'} ) { # XXX CSS - tfoot
+% $rowstyle = ' STYLE="border-top: dashed 1px black; font-style: italic background-color=#dddddd"';
+% }
+%
+% my $trid = '';
+% if ( $opt{'link_field' } ) {
+% my $link_field = $opt{'link_field'};
+% if ( ref($link_field) eq 'CODE' ) {
+% $trid = &{$link_field}($row);
+% } else {
+% $trid = $row->$link_field();
+% }
+% }
+ >
+
+% if ( $opt{'fields'} ) {
+%
+% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : '';
+% my $onclicks = $opt{'link_onclicks'} ? [ @{$opt{'link_onclicks'}} ] : [];
+% my $tooltips = $opt{'tooltips'} ? [ @{$opt{'tooltips'}} ] : [];
+% my $aligns = $opt{'align'} ? [ @{$opt{'align'}} ] : '';
+% my $colors = $opt{'color'} ? [ @{$opt{'color'}} ] : [];
+% my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : [];
+% my $styles = $opt{'style'} ? [ @{$opt{'style'}} ] : [];
+% my $cstyles = $opt{'cell_style'} ? [ @{$opt{'cell_style'}} ] : [];
+% my $formats = $opt{'format'} ? [ @{$opt{'format'}} ] : [];
+%
+% foreach my $field (
+%
+% # if the value of the field is an arrayref, then construct a table in
+% # the cell.
+% # if it's a (non-empty) scalar, and a format has been specified, then
+% # format the scalar with that.
+% # otherwise, just output the value.
+% # XXX we should also do date formats like this
+% map {
+% if ( ref($_) eq 'ARRAY' ) {
+%
+% my $tableref = $_;
+%
+% '';
+%
+% } else {
+% if ( length($_) > 0 and my $format = shift @$formats ) {
+% $_ = sprintf($format, $_);
+% }
+% $_;
+% }
+% }
+%
+% # get the value of the field spec:
+% # - if the spec is a coderef, evaluate the coderef
+% # - if the spec is a string, call that string as a method
+% # - if the spec is an integer, get the field in that position
+% map {
+% if ( ref($_) eq 'CODE' ) {
+% &{$_}($row);
+% } elsif ( ref($row) eq 'ARRAY' and
+% $_ =~ /^\d+$/ ) {
+% # for the 'straight SQL' case: specify fields
+% # by position
+% encode_entities($row->[$_]);
+% } else {
+% encode_entities($row->$_());
+% }
+% }
+% @{$opt{'fields'}}
+%
+% ) {
+%
+% my $class = ( $field =~ /^agentnum )
+% || grep { $row->agentnum == $_ }
+% @{ $opt{link_agentnums} }
+% ) {
+%
+% $link = &{$link}($row)
+% if ref($link) eq 'CODE';
+%
+% $onclick = &{$onclick}($row)
+% if ref($onclick) eq 'CODE';
+% $onclick = qq( onClick="$onclick") if $onclick;
+%
+% $tooltip = &{$tooltip}($row)
+% if ref($tooltip) eq 'CODE';
+% $tooltip = qq! id="a$id" !.
+% qq! onmouseover="return overlib(!.
+% $m->interp->apply_escapes($tooltip, 'h', 'js_string').
+% qq!, FGCLASS, 'tooltip', REF, 'a$id', !.
+% qq!REFC, 'LL', REFP, 'UL')"! if $tooltip;
+%
+% if ( $link ) {
+% my( $url, $method ) = @{$link};
+% if ( ref($method) eq 'CODE' ) {
+% $a = $url. &{$method}($row);
+% } else {
+% $a = $url. $row->$method();
+% }
+% $a = qq();
+% }
+% elsif ( $onclick ) {
+% $a = qq();
+% }
+% elsif ( $tooltip ) {
+% $a = qq();
+% }
+% $id++;
+
+% }
+%
+% }
+%
+% my $font = '';
+% my $color = shift @$colors;
+% $color = &{$color}($row) if ref($color) eq 'CODE';
+% my $size = shift @$sizes;
+% $size = &{$size}($row) if ref($size) eq 'CODE';
+% if ( $color || $size ) {
+% $font = '';
+% }
+%
+% my($s, $es) = ( '', '' );
+% my $style = shift @$styles;
+% $style = &{$style}($row) if ref($style) eq 'CODE';
+% if ( $style ) {
+% $s = join( '', map "<$_>", split('', $style) );
+% $es = join( '', map "$_>", split('', $style) );
+% }
+%
+% my $cstyle = shift @$cstyles;
+% $cstyle = &{$cstyle}($row) if ref($cstyle) eq 'CODE';
+% $cstyle = qq(STYLE="$cstyle")
+% if $cstyle;
+
+ <% $cstyle %>><% $a %><% $font %><% $s %><% $field %><% $es %><% $font ? '' : '' %><% $a ? '' : '' %> |
+
+% }
+%
+% } else { # not $opt{'fields'}
+%
+% foreach ( @$row ) {
+ <% $_ %> |
+% }
+%
+% }
+
+
+
+% $i++;
+%
+% } # foreach $row
+%method>
+<%method footer_row>
+<%args>
+$row
+%opt
+%args>
+%# don't try to respect all the styling options, just the ones that are
+%# hard to replicate with CSS
+% my %align = (
+% 'l' => 'left',
+% 'r' => 'right',
+% 'c' => 'center',
+% ' ' => '',
+% '.' => '',
+% );
+% if ( $opt{align} and !ref($opt{align}) ) {
+% $opt{align} = [ map $align{$_}, split(//, $opt{align}) ];
+% }
+% my @aligns = @{ $opt{align} };
+
+
+% foreach my $footer ( @$row ) {
+% $footer = &{$footer}() if ref($footer) eq 'CODE';
+% my $align = shift @aligns;
+% my $style = '';
+% $style .= "text-align: $align;" if $align;
+ <% $footer %> |
+% }
+
+%method>
+