File Coverage

blib/lib/DBIx/HTML/LinkedMenus.pm
Criterion Covered Total %
statement 6 87 6.9
branch 0 16 0.0
condition 0 15 0.0
subroutine 2 14 14.2
pod 8 8 100.0
total 16 140 11.4


line stmt bran cond sub pod time code
1             package DBIx::HTML::LinkedMenus;
2              
3 2     2   71283 use strict;
  2         13  
  2         60  
4 2     2   10 use warnings;
  2         3  
  2         2894  
5              
6             our $VERSION = '1.11';
7              
8             # -----------------------------------------------
9              
10             # Encapsulated class data.
11              
12             {
13             my(%_attr_data) =
14             ( # Alphabetical order.
15             _base_menu_name => 'dbix_base_menu',
16             _base_prompt => undef,
17             _base_value => undef,
18             _base_sql => '',
19             _dbh => '',
20             _form_name => 'dbix_form',
21             _linked_menu_name => 'dbix_linked_menu',
22             _linked_prompt => undef,
23             _linked_value => undef,
24             _linked_sql => '',
25             );
26              
27             sub _default_for
28             {
29 0     0     my($self, $attr_name) = @_;
30              
31 0           $_attr_data{$attr_name};
32             }
33              
34             sub _read_data
35             {
36 0     0     my($self) = @_;
37 0           my($base_sth) = $$self{'_dbh'} -> prepare($$self{'_base_sql'});
38 0           my($linked_sth) = $$self{'_dbh'} -> prepare($$self{'_linked_sql'});
39 0           $$self{'_data'} = {};
40 0           my($base_order) = 0;
41              
42 0           $base_sth -> execute();
43              
44 0           my($base_data, $linked_order, $linked_data);
45              
46 0           while ($base_data = $base_sth -> fetch() )
47             {
48 0           $base_order++;
49              
50 0           $linked_sth -> execute($$base_data[2]);
51              
52 0           $linked_order = 0;
53              
54 0           while ($linked_data = $linked_sth -> fetch() )
55             {
56 0           $linked_order++;
57              
58 0 0         if ($linked_order == 1)
59             {
60 0           $$self{'_data'}{$$base_data[0]} =
61             {
62             link => {},
63             order => $base_order,
64             value => $$base_data[1],
65             };
66             }
67              
68 0           $$self{'_data'}{$$base_data[0]}{'link'}{$$linked_data[0]} =
69             {
70             order => $linked_order,
71             value => $$linked_data[1],
72             };
73             }
74             }
75              
76 0           $$self{'_size'} = $base_order;
77              
78             } # End of _read_data.
79              
80             sub _standard_keys
81             {
82 0     0     sort keys %_attr_data;
83             }
84              
85             sub _validate_options
86             {
87 0     0     my($self) = @_;
88              
89 0 0 0       croak(__PACKAGE__ . ". You must supply values for these parameters: dbh, base_sql, linked_sql, base_menu_name and linked_menu_name") if (! $$self{'_dbh'} || ! $$self{'_base_sql'} || ! $$self{'_linked_sql'} || ! $$self{'_base_menu_name'} || ! $$self{'_linked_menu_name'});
90              
91             # # Reset empty parameters to their defaults.
92             # # This could be optional, depending on another option.
93             #
94             # for my $attr_name ($self -> _standard_keys() )
95             # {
96             # $$self{$attr_name} = $self -> _default_for($attr_name) if (! $$self{$attr_name});
97             # }
98              
99             } # End of _validate_options.
100              
101             } # End of Encapsulated class data.
102              
103             # -----------------------------------------------
104              
105             sub get
106             {
107 0     0 1   my($self, $base_id, $link_id) = @_;
108 0           my(@result) = ();
109              
110 0 0 0       if (exists($$self{'_data'}{$base_id}) && exists($$self{'_data'}{$base_id}{'link'}{$link_id}) )
111             {
112 0           @result = ($$self{'_data'}{$base_id}{'value'}, $$self{'_data'}{$base_id}{'link'}{$link_id}{'value'});
113             }
114              
115 0           @result;
116              
117             } # End of get.
118              
119             # -----------------------------------------------
120              
121             sub html_for_base_menu
122             {
123 0     0 1   my($self) = @_;
124              
125 0           "";
126              
127             } # End of html_for_base_menu.
128              
129             # -----------------------------------------------
130              
131             sub html_for_linked_menu
132             {
133 0     0 1   my($self) = @_;
134              
135 0           "";
136              
137             } # End of html_for_linked_menu.
138              
139             # -----------------------------------------------
140              
141             sub javascript_for_db()
142             {
143 0     0 1   my($self) = @_;
144 0           my(@code) = <
145              
146            
227              
228             EOS
229              
230 0           join("\n", @code);
231              
232             } # End of javascript_for_db.
233              
234             # -----------------------------------------------
235              
236             sub javascript_for_init_menu
237             {
238 0     0 1   my($self) = @_;
239 0           my(@code) = <
240              
241            
248              
249             EOS
250              
251 0           join("\n", @code);
252              
253             } # End of javascript_for_init_menu.
254              
255             # -----------------------------------------------
256              
257             sub javascript_for_on_load
258             {
259 0     0 1   my($self) = @_;
260              
261 0           ('onLoad' => 'dbix_init()');
262              
263             } # End of javascript_for_on_load.
264              
265             # -----------------------------------------------
266              
267             sub new
268             {
269 0     0 1   my($caller, %arg) = @_;
270 0           my($caller_is_obj) = ref($caller);
271 0   0       my($class) = $caller_is_obj || $caller;
272 0           my($self) = bless({}, $class);
273              
274 0           for my $attr_name ($self -> _standard_keys() )
275             {
276 0           my($arg_name) = $attr_name =~ /^_(.*)/;
277              
278 0 0         if (exists($arg{$arg_name}) )
279             {
280 0           $$self{$attr_name} = $arg{$arg_name};
281             }
282             else
283             {
284 0           $$self{$attr_name} = $self -> _default_for($attr_name);
285             }
286             }
287              
288 0           $self -> _validate_options();
289 0           $self -> _read_data();
290              
291 0 0         $self = undef if (! $$self{'_size'});
292              
293 0           return $self;
294              
295             } # End of new.
296              
297             # -----------------------------------------------
298              
299             sub size
300             {
301 0     0 1   my($self) = @_;
302              
303 0           $$self{'_size'};
304              
305             } # End of size.
306              
307             # -----------------------------------------------
308              
309             1;
310              
311             __END__