optimize customer list, RT#30173
[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 %     next unless ($value || !$opt{xml_omit_empty});
18 %
19 <% &{$beginfield}($row, $i) %><% $value |h %><% &{$endfield}($row, $i) %>
20 %
21 %   }
22 %
23 % if (&{$endrow}($row)) {
24 <% &{$endrow}($row) %>
25 % }
26 %
27 % }
28 <%init>
29
30 my %args = @_;
31 my $header = $args{'header'};
32 my $rows   = $args{'rows'};
33 my %opt    = %{ $args{'opt'} };
34
35 my $filename = $opt{'filename'} ||
36                 ($opt{'name'} || PL($opt{'name_singular'}) . 'xml');
37
38 http_header('Content-Type' => 'application/XML' ); # So saith RFC 4180
39 http_header('Content-Disposition' => 'attachment;filename="'.$filename.'"');
40
41 unless ( $opt{'fields'} ) {
42   foreach my $i ( 0 .. ( $#{ @$rows[0] } ) ) {
43     $opt{'fields'}->[$i] = sub { my $row = shift; $row->[$i]; };
44   }
45 }
46
47 my $beginrow = sub { return ''; };
48 my $endrow = sub { return ''; };
49 if ($opt{xml_row_element}) {
50   $beginrow = sub { my ($row, $index) = @_;
51                     my $value;
52                     if ( ref($opt{xml_row_element}) eq 'CODE' ) {
53                       $value = &{$opt{xml_row_element}}($row);
54                     } else {
55                       $value = $opt{xml_row_element};
56                     }
57                     return "<$value>";
58                   };
59   $endrow = sub { my ($row, $index) = @_;
60                   my $value;
61                   if ( ref($opt{xml_row_element}) eq 'CODE' ) {
62                     $value = &{$opt{xml_row_element}}($row);
63                   } else {
64                     $value = $opt{xml_row_element};
65                   }
66                   return "</$value>";
67                 };
68 }
69 my $beginfield = sub { my ($row, $index) = @_;
70                        my $value;
71                        if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
72                          $value = &{$opt{xml_elements}->[$index]}($row);
73                        } else {
74                          $value = $opt{xml_elements}->[$index];
75                        }
76                        return "<$value>";
77                      };
78 my $endfield =   sub { my ($row, $index) = @_;
79                        my $value;
80                        if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
81                          $value = &{$opt{xml_elements}->[$index]}($row);
82                        } else {
83                          $value = $opt{xml_elements}->[$index];
84                        }
85                        return "</$value>";
86                      };
87
88 $beginfield = sub { return ''; } if $opt{no_field_elements};  #hmm
89 $endfield = sub { return ''; } if $opt{no_field_elements};  #hmm
90
91 </%init>