improved fcc 477 report #7783
[freeside.git] / httemplate / search / elements / search-xml.html
1 % foreach my $row ( @$rows ) {
2 %
3 % if (&{$beginrow}($row)){
4 <% &{$beginrow}($row) %>
5 % }
6 %
7 %   foreach my $i ( 0 .. scalar( @{$opt{'fields'}} ) - 1 ) {
8 %     my $field = $opt{'fields'}->[$i];
9 %     my $value = '';
10 %     if ( ref($field) eq 'CODE' ) {
11 %       $value = &{$field}($row);
12 %       $value = '(N/A)' #unimplemented
13 %         if ref($value) eq 'ARRAY';
14 %     } else {
15 %       $value = $row->$field();
16 %     }
17 %
18 <% &{$beginfield}($row, $i) %><% $value |h %><% &{$endfield}($row, $i) %>
19 %
20 %   }
21 %
22 % if (&{$endrow}($row)) {
23 <% &{$endrow}($row) %>
24 % }
25 %
26 % }
27 <%init>
28
29 my %args = @_;
30 my $header = $args{'header'};
31 my $rows   = $args{'rows'};
32 my %opt    = %{ $args{'opt'} };
33
34 http_header('Content-Type' => 'application/XML' ); # So saith RFC 4180
35 http_header('Content-Disposition' => 
36   'attachment;filename="'.($opt{'name'} || PL($opt{'name_singular'}) ).'.xml"');
37
38 unless ( $opt{'fields'} ) {
39   foreach my $i ( 0 .. ( $#{ @$rows[0] } ) ) {
40     $opt{'fields'}->[$i] = sub { my $row = shift; $row->[$i]; };
41   }
42 }
43
44 my $beginrow = sub { return ''; };
45 my $endrow = sub { return ''; };
46 if ($opt{xml_row_element}) {
47   $beginrow = sub { my ($row, $index) = @_;
48                     my $value;
49                     if ( ref($opt{xml_row_element}) eq 'CODE' ) {
50                       $value = &{$opt{xml_row_element}}($row);
51                     } else {
52                       $value = $opt{xml_row_element};
53                     }
54                     return "<$value>";
55                   };
56   $endrow = sub { my ($row, $index) = @_;
57                   my $value;
58                   if ( ref($opt{xml_row_element}) eq 'CODE' ) {
59                     $value = &{$opt{xml_row_element}}($row);
60                   } else {
61                     $value = $opt{xml_row_element};
62                   }
63                   return "</$value>";
64                 };
65 }
66 my $beginfield = sub { my ($row, $index) = @_;
67                        my $value;
68                        if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
69                          $value = &{$opt{xml_elements}->[$index]}($row);
70                        } else {
71                          $value = $opt{xml_elements}->[$index];
72                        }
73                        return "<$value>";
74                      };
75 my $endfield =   sub { my ($row, $index) = @_;
76                        my $value;
77                        if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
78                          $value = &{$opt{xml_elements}->[$index]}($row);
79                        } else {
80                          $value = $opt{xml_elements}->[$index];
81                        }
82                        return "</$value>";
83                      };
84
85 $beginfield = sub { return ''; } if $opt{no_field_elements};  #hmm
86 $endfield = sub { return ''; } if $opt{no_field_elements};  #hmm
87
88 </%init>