b236787b6f2658415f66065edb81a332cd9e816e
[freeside.git] / httemplate / elements / checkboxes-table-name.html
1 <%doc>
2
3 Example:
4
5   include( '/elements/checkboxes-table-name.html',
6
7     ###
8     # required
9     ###
10     'link_table'      => 'table_name',
11    
12     'name_col' => 'name_column',
13     #or
14     'name_callback' => sub { },
15    
16     'names_list' => [ 'value',
17                       'other value',
18                       [ 'complex value' => { 'desc' => "Add'l description",
19                                              'note' => '&nbsp;*',
20                                            }
21                       ],
22                     ],
23    
24     ###
25     # recommended (required?)
26     ###
27     'source_obj'   => $obj,
28     #or?
29     #'source_table' => 'table_name',
30     #'sourcenum'    => '4', #current value of primary key in source_table
31     #                       # (none is okay, just pass it if you have it)
32
33     ###
34     # optional
35     ###
36     'num_col' => 'col_name' #if column name is different in link_table than
37                             #source_table
38     'link_static' => { 'column' => 'value' },
39
40   )
41
42 </%doc>
43
44 <TABLE CELLSPACING=0 CELLPADDING=0>
45
46 <TR>
47   <TD COLSPAN=2 ALIGN="center"><FONT SIZE="-1">(
48     <A HREF="javascript:setAll<%$prefix%>(true)">select all</A> |
49     <A HREF="javascript:setAll<%$prefix%>(false)">unselect all</A> |
50     <A HREF="javascript:toggleAll<%$prefix%>()">toggle all</A>
51   )</FONT></TD>
52 </TR>
53
54 % my $num=0;
55 % foreach my $item ( @{ $opt{'names_list'} } ) {
56 %
57 %     my $name = ref($item) ? $item->[0] : $item;
58 %     ( my $display = $name ) =~ s/ /&nbsp;/g;
59 %     $display .= $item->[1]{note} if ref($item) && $item->[1]{note};
60 %     my $desc = ref($item) && $item->[1]{desc} ? $item->[1]{desc} : '';
61 %
62 %     my $checked;
63 %     if ( $cgi->param('error') ) {
64 %
65 %       $checked = $cgi->param($opt{'link_table'}. ".$name" )
66 %                    ? 'CHECKED'
67 %                    : '';
68 %
69 %     } else {
70 %
71 %       $checked =
72 %         qsearchs( $opt{'link_table'}, {
73 %                                         $source_pkey     => $sourcenum,
74 %                                         $opt{'name_col'} => $name,
75 %                                         %$link_static,
76 %                                       }                                 )
77 %                    ? 'CHECKED'
78 %                    : ''
79 %
80 %     }
81
82   <TR>
83     <TD VALIGN="top">
84       <INPUT TYPE="checkbox" NAME="<% $opt{'link_table'}. ".$name" %>" <% $checked %> ID="<%$prefix.$num++%>" VALUE="ON">
85     </TD>
86     <TD><% $display %>
87 %     if ( $desc ) {
88         <BR><FONT SIZE="-2"><% $desc %></FONT>
89 %     }
90     </TD>
91   </TR>
92
93 % } 
94
95 </TABLE>
96
97 <SCRIPT TYPE="text/javascript">
98
99   function setAll<%$prefix%>(setTo) {
100 %   for ( 0 .. ($num-1) ) {
101       document.getElementById('<%$prefix.$_%>').checked = setTo;
102 %   }
103   }
104
105   function toggleAll<%$prefix%>(setTo) {
106 %   for ( 0 .. ($num-1) ) {
107       var element = document.getElementById('<%$prefix.$_%>');
108       if ( element.checked == true ) {
109         element.checked = false;
110       } else {
111         element.checked = true;
112       }
113 %   }
114   }
115
116 </SCRIPT>
117
118 <%init>
119
120 my( %opt ) = @_;
121
122 my @pset = ( 'a'..'z', 'A'..'Z', '0'..'9' );
123
124 my $prefix = $opt{prefix}
125              || join('', map $pset[ int(rand $#pset) ], (0..20) );
126
127 my( $source_pkey, $sourcenum, $source_obj );
128 if ( $opt{'source_obj'} ) {
129
130   $source_obj = $opt{'source_obj'};
131   #$source_table = $source_obj->dbdef_table->table;
132   $source_pkey = $source_obj->dbdef_table->primary_key;
133   $sourcenum = $source_obj->$source_pkey();
134
135 } else {
136
137   #$source_obj?
138   $source_pkey = $opt{'source_table'}
139                    ? dbdef->table($opt{'source_table'})->primary_key
140                    : '';
141   $sourcenum = $opt{'sourcenum'};
142 }
143
144 $source_pkey = $opt{'num_col'} || $source_pkey;
145
146 my $link_static = $opt{'link_static'} || {};
147
148 </%init>