Merge branch 'patch-4' of https://github.com/gjones2/Freeside (#13854 as this bug...
[freeside.git] / httemplate / search / log.html
1 <& elements/search.html, 
2   'title'         => 'System Log',
3   'name_singular' => 'event',
4   'html_init'     => include('.head'),
5   'query'         => $query,
6   'count_query'   => $count_query,
7   'header'        => [ #'#', # lognum, probably not useful
8                        'Date',
9                        'Level',
10                        'Context',
11                        'Applies To',
12                        'Message',
13                      ],
14   'fields'        => [ #'lognum',
15                        $date_sub,
16                        $level_sub,
17                        $context_sub,
18                        $object_sub,
19                        $message_sub,
20                      ],
21   'sort_fields'   => [
22                        '_date',
23                        'level',
24                        '',
25                        'tablename,tablenum',
26                        'message',
27                      ],
28   'links'         => [
29                        '', #date
30                        '', #level
31                        '', #context
32                        $object_link_sub,
33                        '', #message
34                      ],
35   'tooltips'      => [
36                        '', #date
37                        '', #level
38                        $tt_sub,
39                        '', #object
40                        $tt_sub,
41                      ],
42   'color'         => [
43                        $color_sub,
44                        $color_sub,
45                        '',
46                        '',
47                        '',
48                      ],
49   # aligns
50   'download_label' => 'Download this log',
51 &>\
52 <%def .head>
53 <STYLE type="text/css">
54 a:link    {text-decoration: none}
55 a:visited {text-decoration: none}
56 .tooltip {
57   background-color: #ffffff;
58   font-size: 100%;
59   font-weight: bold;
60 }
61 </STYLE>
62 <FORM ACTION="<%$p%>search/log.html" METHOD="GET">
63 <TABLE CELLSPACING="10">
64 <TR>
65   <TD>From 
66     <& /elements/input-date-field.html, {
67       name => 'beginning',
68       value => $cgi->param('beginning'),
69     } &>
70   </TD>
71   <TD>To 
72     <& /elements/input-date-field.html, {
73       name => 'ending',
74       value => $cgi->param('ending') || '',
75       noinit => 1,
76     } &>
77   </TD>
78 </TR>
79 <TR>
80   <TD>Level
81     <& /elements/select.html,
82       field => 'min_level',
83       options => [ 0..7 ],
84       labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..7 },
85       curr_value => $cgi->param('min_level'),
86     &>
87      to
88     <& /elements/select.html,
89       field => 'max_level',
90       options => [ 0..7 ],
91       labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..7 },
92       curr_value => $cgi->param('max_level'),
93     &>
94   </TD>
95   <TD>
96     Context
97     <& /elements/select.html,
98       field  => 'context',
99       options => \@contexts,
100       labels => { map {$_, $_} @contexts },
101       curr_value => ($cgi->param('context') || ''),
102     &>
103   </TD>
104 </TR>
105 <TR>
106   <TD COLSPAN=2>
107     Containing text
108       <& /elements/input-text.html,
109         field => 'message',
110         size => 30,
111         size => 30,
112         curr_value => ($cgi->param('message') || ''),
113       &>
114     <DIV STYLE="display:inline; float:right">
115       <INPUT TYPE="submit" VALUE="Refresh">
116     </DIV>
117   </TD>
118 </TR>
119 </TABLE>
120 </%def>
121 <%once>
122 my $date_sub = sub { time2str('%Y-%m-%d %T', $_[0]->_date) };
123
124 my $level_sub = sub { $FS::Log::LEVELS[$_[0]->level] };
125
126 my $context_sub = sub {
127   my $log = shift;
128   ($log->context)[-1] . (scalar($log->context) > 1 ? '...' : '') ;
129   # XXX find a way to make this use less space (dropdown?)
130 };
131
132 my $tt_sub = sub {
133   my $log = shift;
134   my @context = $log->context;
135   # don't create a tooltip if there's only one context entry and the 
136   # message isn't cut off
137   return '' if @context == 1 and length($log->message) <= 60;
138   my $html = '<DIV CLASS="tooltip">'.(shift @context).'</DIV>';
139   my $pre = '&#8627;';
140   foreach (@context, $log->message) {
141     $html .= "<DIV>$pre$_</DIV>";
142     $pre = '&nbsp;&nbsp;&nbsp;'.$pre;
143   }
144   $html;
145 };
146
147 my $object_sub = sub {
148   my $log = shift;
149   return '' unless $log->tablename;
150   # this is a sysadmin log; anyone reading it should be able to understand
151   # 'cust_main #2319' with no trouble.
152   $log->tablename . ' #' . $log->tablenum;
153 };
154
155 my $message_sub = sub {
156   my $log = shift;
157   my $message = $log->message;
158   if ( length($message) > 60 ) { # pretty arbitrary
159     $message = substr($message, 0, 57) . '...';
160   }
161   $message;
162 };
163
164 my $object_link_sub = sub {
165   my $log = shift;
166   my $table = $log->tablename or return;
167   # sigh
168   if ( grep {$_ eq $table} (qw( cust_bill cust_main cust_pkg cust_svc ))
169        or $table =~ /^svc_/ )
170   {
171
172     return [ $fsurl.'view/'.$table.'.cgi?'. $log->tablenum ];
173
174   } elsif ( grep {$_ eq $table} (qw( cust_msg cust_pay cust_pay_void 
175                                      cust_refund cust_statement )) )
176   {
177
178     return [ $fsurl.'view/'.$table.'.html?', $log->tablenum ];
179
180   } else { # you're on your own
181
182     return '';
183
184   }
185 };
186
187 my @colors = (
188   '404040', #debug
189   '0000aa', #info
190   '00aa00', #notice
191   'aa0066', #warning
192   '000000', #error
193   'aa0000', #critical
194   'ff0000', #alert
195   'ff0000', #emergency
196 );
197
198 my $color_sub = sub { $colors[ $_[0]->level ]; };
199
200 my @contexts = ('', sort FS::log_context->contexts);
201 </%once>
202 <%init>
203 my $curuser = $FS::CurrentUser::CurrentUser;
204 die "access denied"
205   unless $curuser->access_right([ 'View system logs', 'Configuration' ]);
206
207 $cgi->param('min_level', 0) unless defined($cgi->param('min_level'));
208 $cgi->param('max_level', 7) unless defined($cgi->param('max_level'));
209
210 my %search = ();
211 $search{'date'} = [ FS::UI::Web::parse_beginning_ending($cgi) ];
212 $search{'level'} = [ $cgi->param('min_level'), $cgi->param('max_level') ];
213 foreach my $param (qw(agentnum context tablename tablenum custnum message)) {
214   if ( $cgi->param($param) ) {
215     $search{$param} = $cgi->param($param);
216   }
217 }
218 my $query = FS::log->search(\%search); # validates everything
219 my $count_query = delete $query->{'count_query'};
220
221 </%init>