add ability to disable package classes
[freeside.git] / httemplate / elements / select-table.html
index 6c8089b..0c3c005 100644 (file)
@@ -1,59 +1,77 @@
-<%
+<SELECT NAME="<% $opt{'element_name'} || $key %>" <% $opt{'element_etc'} %>>
 
-  ##required
-  # 'table'    => 'table_name',
-  # 'name_col' => 'name_column',
-  #
-  ##strongly recommended (you want your forms to be "sticky" on errors, right?)
-  # 'value'    => 'current_value',
-  #
-  ##opt
-  # 'empty_label' => '', #better specify it though, the default might change
-  # 'hashref'     => {},
-  # 'extra_sql'   => '',
-  # 'records'     => \@records, #instead of hashref
-  # 'pre_options' => [ 'value' => 'option' ], #before normal options
+% while ( @pre_options ) { 
 
-  my( %opt ) = @_;
+    <OPTION VALUE="<% shift(@pre_options) %>"><% shift(@pre_options) %>
 
-  #warn "***** select-table: \n". Dumper(%opt);
+% } 
 
-  my $key = dbdef->table($opt{'table'})->primary_key; #? $opt{'primary_key'} ||
+  <OPTION VALUE=""><% $opt{'empty_label'} || 'all' %>
 
-  my $name_col = $opt{'name_col'};
+% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col() } @records ) {
 
-  my @records = ();
-  if ( $opt{'records'} ) {
-    @records = @{ $opt{'records'} };
-  } else {
-    @records = qsearch( {
-      'table'     => $opt{'table'},
-      'hashref'   => ( $opt{'hashref'} || {} ),
-      'extra_sql' => ( $opt{'extra_sql'} || '' ),
-    });
-  }
+    <OPTION VALUE="<% $record->$key() %>"<% $opt{'value'} == $record->$key() ? ' SELECTED' : '' %>><% $record->$name_col() %>
 
-  my @pre_options = $opt{'pre_options'} ? @{ $opt{'pre_options'} } : ();
-
-%>
-
-<SELECT NAME="<%= $key %>">
-
-  <% while ( @pre_options ) { %>
-    <OPTION VALUE="<%= shift(@pre_options) %>"><%= shift(@pre_options) %>
-  <% } %>
-
-  <OPTION VALUE=""><%= $opt{'empty_label'} || 'all' %>
-
-  <% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col() }
-                               @records
-                        )
-     {
-  %>
-
-    <OPTION VALUE="<%= $record->$key() %>"<%= $opt{'value'} == $record->$key() ? ' SELECTED' : '' %>><%= $record->$name_col() %>
-
-  <% } %>
+% } 
 
 </SELECT>
-
+<%init>
+
+##required
+# 'table'    => 'table_name',
+# 'name_col' => 'name_column',
+#
+##strongly recommended (you want your forms to be "sticky" on errors, right?)
+# 'value'    => 'current_value',
+#
+##opt
+# 'empty_label'  => '', #better specify it though, the default might change
+# 'hashref'      => {},
+# 'extra_sql'    => '',
+# 'records'      => \@records, #instead of hashref
+# 'pre_options'  => [ 'value' => 'option' ], #before normal options
+# 'element_name' => '', #HTML element name, defaults to the name of
+#                       # the primary key column
+# 'element_etc'  => '', #additional attributes (i.e. "DISABLED") for the
+#                       #<SELECT> element
+# 'debug'        => 0, #set true to enable
+
+my( %opt ) = @_;
+
+warn "elements/select-table.html: \n". Dumper(%opt)
+  if exists $opt{debug} && $opt{debug};
+
+my $key = dbdef->table($opt{table})->primary_key; #? $opt{primary_key} ||
+
+my $name_col = $opt{name_col};
+
+$opt{hashref} ||= {};
+
+my @records = ();
+if ( $opt{records} ) {
+  @records = @{ $opt{records} };
+} else {
+  @records = qsearch( {
+    'table'     => $opt{table},
+    'hashref'   => $opt{hashref},
+    'extra_sql' => ( $opt{extra_sql} || '' ),
+  });
+}
+
+unless (    ! $opt{value}
+         or ! exists( $opt{hashref}->{disabled} ) #??
+         or grep { $opt{value} == $_->$key() } @records
+       ) {
+  delete $opt{hashref}->{disabled};
+  $opt{hashref}->{$key} = $opt{value};
+  my $record = qsearchs( {
+    'table'     => $opt{table},
+    'hashref'   => $opt{hashref},
+    'extra_sql' => ( $opt{extra_sql} || '' ),
+  });
+  push @records, $record if $record;
+}
+
+my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : ();
+
+</%init>