X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fsearch%2Felements%2Fsearch.html;h=c6021e5008560c7457b636e9a490186ec746e2fc;hb=83b02bcbecc7856e055dd7b8c0dabd38b3c60d91;hp=f3103886be87fdf31357247fc557540f9ab2726b;hpb=686be6f8b154829a44c325ea8ee5fba19aef9902;p=freeside.git
diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html
index f3103886b..c6021e500 100644
--- a/httemplate/search/elements/search.html
+++ b/httemplate/search/elements/search.html
@@ -4,7 +4,10 @@ Example:
include( 'elements/search.html',
- # basic options, required
+ ###
+ # required
+ ###
+
'title' => 'Page title',
'name_singular' => 'item', #singular name for the records returned
@@ -12,20 +15,8 @@ Example:
'name' => 'items', #plural name for the records returned
# (deprecated, will be singularlized
# simplisticly)
-
- # some HTML callbacks...
- 'menubar' => '', #menubar arrayref
- 'html_init' => '', #after the header/menubar and before the pager
- 'html_form' => '', #after the pager, right before the results
- # (only shown if there are results)
- # (use this for any form-opening tag rather than
- # html_init, to avoid a nested form)
- 'html_foot' => '', #at the bottom
- 'html_posttotal' => '', #at the bottom
- # (these three can be strings or coderefs)
-
-
- #literal SQL query string (deprecated?) or qsearch hashref, required
+
+ #literal SQL query string (deprecated?) or qsearch hashref
'query' => {
'table' => 'tablename',
#everything else is optional...
@@ -44,66 +35,110 @@ Example:
#required unless 'query' is an SQL query string (shouldn't be...)
'count_query' => 'SELECT COUNT(*) FROM tablename',
+
+ ###
+ # recommended / common
+ ###
+
+ #listref of column labels,
+ #recommended unless 'query' is an SQL query string
+ # (if not specified the database column names will be used)
+ 'header' => [ '#',
+ 'Item',
+ { 'label' => 'Another Item',
+
+ },
+ ],
+
+ #listref - each item is a literal column name (or method) or coderef
+ #if not specified all columns will be shown
+ 'fields' => [
+ 'column',
+ sub { my $row = shift; $row->column; },
+ ],
+
+ #redirect if there's only one item...
+ # listref of URL base and column name (or method)
+ # or a coderef that returns the same
+ 'redirect' =>
+ ###
+ # optional
+ ###
+
+ # some HTML callbacks...
+ 'menubar' => '', #menubar arrayref
+ 'html_init' => '', #after the header/menubar and before the pager
+ 'html_form' => '', #after the pager, right before the results
+ # (only shown if there are results)
+ # (use this for any form-opening tag rather than
+ # html_init, to avoid a nested form)
+ 'html_foot' => '', #at the bottom
+ 'html_posttotal' => '', #at the bottom
+ # (these three can be strings or coderefs)
+
'count_addl' => [], #additional count fields listref of sprintf strings or coderefs
# [ $money_char.'%.2f total paid', ],
- #listref of column labels, |
- #required unless 'query' is an SQL query string
- # (if not specified the database column names will be used)
- 'header' => [ '#', 'Item' ],
-
+ #second (smaller) header line, currently only for HTML
+ 'header2 => [ '#',
+ 'Item',
+ { 'label' => 'Another Item',
+
+ },
+ ],
+
+ #listref of column footers
+ 'footer' => [],
+
+ #disabling things
'disable_download' => '', # set true to hide the CSV/Excel download links
'disable_nonefound' => '', # set true to disable the "No matching Xs found"
# message
- 'disableable' => 1, # set true if this table has a "disabled" field, to
- # hide disabled records & have "show disabled" links
+ #handling "disabled" fields in the records
+ 'disableable' => 1, # set set to 1 (or column position for "disabled"
+ # status col) to enable if this table has a "disabled"
+ # field, to hide disabled records & have
+ # "show disabled/hide disabled" links
+ #(can't be used with a literal query)
'disabled_statuspos' => 3, #optional position (starting from 0) to insert
#a Status column when showing disabled records
#(query needs to be a qsearch hashref and
# header & fields need to be defined)
+
+ #handling agent virtualization
'agent_virt' => 1, # set true if this search should be agent-virtualized
'agent_null_right' => 'Access Right', #opt. right to view global records
'agent_pos' => 3, #optional position (starting from 0) to insert
#an Agent column
#(query needs to be a qsearch hashref and
# header & fields need to be defined)
+
+ # link & display properties for fields
- #listref - each item is a literal column name (or method) or coderef
- #if not specified all columns will be shown
- 'fields' => [
- 'column',
- sub { my $row = shift; $row->column; },
- ],
-
- #listref of column footers
- 'footer' => [],
-
- #listref - each item is the empty string, or a listref of ...
- 'links' =>
-
-
- 'align' => 'lrc.', #one letter for each column, left/right/center/none
- # can also pass a listref with full values:
- # [ 'left', 'right', 'center', '' ]
+ #listref - each item is the empty string,
+ # or a listref of link and method name to append,
+ # or a listref of link and coderef to run and append
+ # or a coderef that returns such a listref
+ 'links' => [],`
+
+ #listref - each item is the empty string,
+ # or a string onClick handler for the corresponding link
+ # or a coderef that returns string onClick handler
+ 'link_onclicks' => [],
+
+ #one letter for each column, left/right/center/none
+ # or pass a listref with full values: [ 'left', 'right', 'center', '' ]
+ 'align' => 'lrc.',
- #listrefs...
+ #listrefs of ( scalars or coderefs )
#currently only HTML, maybe eventually Excel too
'color' => [],
'size' => [],
- 'style' => [],
+ 'style' => [], # or , etc.
+ 'cell_style' => [], #STYLE= attribute of TR, very HTML-specific...
- #redirect if there's only one item...
- # listref of URL base and column name (or method)
- # or a coderef that returns the same
- 'redirect' =>
-
- #set to 1 (or column position for "disabled" status col) to enable
- #"show disabled/hide disabled" links
- #(can't be used with a literal query)
- 'disableable' => 1,
-
);
%doc>
@@ -165,7 +200,7 @@ Example:
% #http://support.microsoft.com/kb/812935
% #http://support.microsoft.com/kb/323308
% $HTML::Mason::Commands::r->headers_out->{'Cache-control'} = 'max-age=0';
-%
+%
% my $data = '';
% my $XLS = new IO::Scalar \$data;
% my $workbook = Spreadsheet::WriteExcel->new($XLS)
@@ -381,11 +416,42 @@ Example:
<% include('/elements/table-grid.html') %>
-% foreach my $header ( @$header ) {
- <% $header %> |
+% my $h2 = 0;
+% foreach my $header ( @{ $opt{header} } ) {
+% my $label = ref($header) ? $header->{label} : $header;
+% 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"'
+% }
+% }
+
+
+ >
+ <% $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;
@@ -402,11 +468,13 @@ Example:
% if ( $opt{'fields'} ) {
%
-% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : '';
-% 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 $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 (
%
@@ -489,7 +557,14 @@ Example:
% my $a = '';
% if ( $links ) {
% my $link = shift @$links;
-% $link = &{$link}($row) if ref($link) eq 'CODE';
+% $link = &{$link}($row)
+% if ref($link) eq 'CODE';
+%
+% my $onclick = shift @$onclicks;
+% $onclick = &{$onclick}($row)
+% if ref($onclick) eq 'CODE';
+% $onclick = qq( onClick="$onclick") if $onclick;
+%
% if ( $link ) {
% my( $url, $method ) = @{$link};
% if ( ref($method) eq 'CODE' ) {
@@ -497,7 +572,7 @@ Example:
% } else {
% $a = $url. $row->$method();
% }
-% $a = qq();
+% $a = qq();
% }
% }
%
@@ -520,8 +595,13 @@ Example:
% $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;
- | ><% $font %><% $a %><% $s %><% $field %><% $es %><% $a ? '' : '' %><% $font ? '' : '' %> |
+ <% $cstyle %>><% $font %><% $a %><% $s %><% $field %><% $es %><% $a ? '' : '' %><% $font ? '' : '' %> |
% }
%
@@ -626,6 +706,8 @@ if ( $opt{'agent_virt'} ) {
splice @{ $opt{'color'} }, $pos, 0, '';
splice @{ $opt{'links'} }, $pos, 0, '' #[ 'agent link?', 'agentnum' ]
if $opt{'links'};
+ splice @{ $opt{'link_onclicks'} }, $pos, 0, ''
+ if $opt{'link_onclicks'};
}
@@ -661,6 +743,8 @@ if ( $opt{'disableable'} ) {
sub { shift->disabled ? 'FF0000' : '00CC00'; };
splice @{ $opt{'links'} }, $pos, 0, ''
if $opt{'links'};
+ splice @{ $opt{'link_onlicks'} }, $pos, 0, ''
+ if $opt{'link_onlicks'};
}
#add show/hide disabled links
@@ -728,7 +812,7 @@ unless ( $type =~ /^(csv|\w*\.xls)$/ ) {
# run the query
-my $header = $opt{header};
+my $header = [ map { ref($_) ? $_->{'label'} : $_ } @{$opt{header}} ];
my $rows;
if ( ref($opt{query}) ) {