1 |
dpavlin |
24 |
[% PERL %] |
2 |
|
|
$stash->set( search => sub { |
3 |
dpavlin |
48 |
my ($fld,$search,$sort_by,$link_text,$title) = @_; |
4 |
dpavlin |
24 |
|
5 |
|
|
my $html = '<a href="?search='.$fld.':'; |
6 |
|
|
if ($fld eq "subject") { |
7 |
|
|
my $s = $search; |
8 |
|
|
|
9 |
|
|
# remove re: fdw: [list] preffixes from e-mail |
10 |
dpavlin |
37 |
while ( $s =~ s/^\s*\[(?:re|fwd|fw)(?:\[\d+\])*:\s+(.+)\]\s*$/$1/ig || |
11 |
|
|
$s =~ s/^\s*(?:re|fwd|fw)(?:\[\d+\])*:\s+(.+?)\s*$/$1/ig || |
12 |
dpavlin |
24 |
$s =~ s/^\[\S+\]\s*//ig || |
13 |
|
|
$s =~ s/^\[[^@]+@[\w\.]+\s*:\s+(.+)\s*\]\s*$/$1/g || |
14 |
|
|
$s =~ s/\(fwd\)\s*$//ig || |
15 |
|
|
$s =~ s/\"//g |
16 |
|
|
) { }; |
17 |
|
|
|
18 |
|
|
$html .= URI::Escape::uri_escape($s); |
19 |
|
|
} else { |
20 |
|
|
$html .= URI::Escape::uri_escape($search); |
21 |
|
|
} |
22 |
|
|
|
23 |
|
|
$html .= '&sort_by='.$sort_by if ($sort_by); |
24 |
|
|
|
25 |
dpavlin |
48 |
$html .= '"'; |
26 |
|
|
$html .= 'title="'.$title.'"' if ($title); |
27 |
|
|
$html .= '>'; |
28 |
dpavlin |
24 |
$html .= ($link_text ? $link_text : $search); |
29 |
|
|
$html .= '</a>'; |
30 |
|
|
|
31 |
|
|
return $html; |
32 |
|
|
} ); |
33 |
|
|
[% END %] |
34 |
|
|
|
35 |
|
|
[% MACRO option(var, value, text) BLOCK %] |
36 |
|
|
<option value="[% value %]"[% IF value == param.search_fld %] selected[% END %]>[% text %]</option> |
37 |
|
|
[% END %] |
38 |
|
|
|
39 |
|
|
[% MACRO from(message) BLOCK %] |
40 |
|
|
<span class="from"> |
41 |
|
|
[% FOREACH f IN message.from %] |
42 |
|
|
[% search('from_phrase',f,param.sort_by) %][% IF !loop.last %],[% END %] |
43 |
|
|
[% END %] |
44 |
|
|
</span> |
45 |
|
|
[% END %] |
46 |
|
|
|
47 |
|
|
[% MACRO to(message) BLOCK %] |
48 |
|
|
[% IF message.to.size %] |
49 |
|
|
<span class="to">To: |
50 |
|
|
[% FOREACH f IN message.to %] |
51 |
|
|
[% search('to_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
52 |
|
|
[% END %] |
53 |
|
|
</span> |
54 |
|
|
[% END %] |
55 |
|
|
[% IF message.cc.size %] |
56 |
|
|
<span class="cc">Cc: |
57 |
|
|
[% FOREACH f IN message.cc %] |
58 |
|
|
[% search('cc_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
59 |
|
|
[% END %] |
60 |
|
|
</span> |
61 |
|
|
[% END %] |
62 |
|
|
[% IF message.bcc.size %] |
63 |
|
|
<span class="bcc">Bcc: |
64 |
|
|
[% FOREACH f IN message.bcc %] |
65 |
|
|
[% IF loop.fist %]Bcc [% END %] |
66 |
|
|
[% search('bcc_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
67 |
|
|
[% END %] |
68 |
|
|
</span> |
69 |
|
|
[% END %] |
70 |
|
|
[% END %] |
71 |
|
|
|
72 |
|
|
[% MACRO usage_list(list,key,description) BLOCK %] |
73 |
|
|
[% IF list %] |
74 |
|
|
<div class="[% key %]"> |
75 |
|
|
[% description %] |
76 |
|
|
[% FOREACH l IN list %] |
77 |
dpavlin |
46 |
<br>[% search(key,l.name,param.sort_by) %] <span class="counter">[% l.usage %]</span> |
78 |
dpavlin |
24 |
[% END %] |
79 |
|
|
</div> |
80 |
|
|
[% END %] |
81 |
|
|
[% END %] |
82 |
|
|
|
83 |
|
|
|
84 |
|
|
[% PERL %] |
85 |
|
|
$stash->set( get_cal => sub { |
86 |
|
|
my $cal = shift; |
87 |
|
|
my $yyyy = shift || return "BUG2"; |
88 |
|
|
my $mm = shift || return "BUG3"; |
89 |
|
|
my $day = shift || return " "; |
90 |
|
|
|
91 |
|
|
my $url = shift || ""; |
92 |
|
|
|
93 |
|
|
return $day if (! $cal); # no calendar entries |
94 |
|
|
|
95 |
|
|
my $yyyymm = sprintf("%04d-%02d",$yyyy,$mm); |
96 |
|
|
my $dd = sprintf("%02d",$day); |
97 |
|
|
|
98 |
|
|
if ($cal->{$yyyymm}->{$dd}) { |
99 |
|
|
return "<a href=\"/$yyyy/$mm/$dd/$url\" title=\"".$cal->{$yyyymm}->{$dd}."\">$day</a>"; |
100 |
|
|
} else { |
101 |
|
|
return $day; |
102 |
|
|
} |
103 |
|
|
} ); |
104 |
|
|
[% END %] |
105 |
|
|
|
106 |
|
|
|
107 |
|
|
[% MACRO url_show_id(id) BLOCK ; |
108 |
|
|
'?show_id=' ; id ; |
109 |
dpavlin |
27 |
IF param.search ; '&search=' ; param.search ; END ; |
110 |
|
|
IF param.sort_by ; '&sort_by=' ; param.sort_by ; END ; |
111 |
dpavlin |
24 |
END %] |
112 |
|
|
|
113 |
|
|
|
114 |
dpavlin |
32 |
[% MACRO url_search(search_for) BLOCK ; |
115 |
|
|
IF param.sort_by ; "?search=" ; search_for ; "&sort_by=" ; param.sort_by ; |
116 |
|
|
ELSE ; "?search=" ; search_for ; |
117 |
dpavlin |
24 |
END ; |
118 |
|
|
END %] |
119 |
|
|
|
120 |
|
|
|
121 |
|
|
[% PERL %] |
122 |
|
|
$stash->set( sort_bar => sub { |
123 |
|
|
my ($param,$pre,$del,$post) = @_; |
124 |
|
|
|
125 |
dpavlin |
48 |
my $a_href_fmt = qq{<a href="%s" title="sort by %s">%s</a>}; |
126 |
|
|
my $ss_fmt = qq{<span class="sort_selected">%s</span>}; |
127 |
dpavlin |
24 |
|
128 |
|
|
my $html_search = ''; |
129 |
|
|
my $next_sep = '?'; |
130 |
|
|
|
131 |
|
|
if ($param->{search}) { |
132 |
|
|
$html_search = '?search='.$param->{search}; |
133 |
|
|
$next_sep = '&'; |
134 |
|
|
} |
135 |
|
|
|
136 |
|
|
# default sort order |
137 |
|
|
my ($sort_fld,$sort_order) = ('rank','desc'); |
138 |
|
|
($sort_fld,$sort_order) = split(/\s+/,$param->{sort_by}); |
139 |
|
|
|
140 |
|
|
my $other_order = { |
141 |
|
|
'asc' => 'desc', |
142 |
|
|
'desc' => 'asc', |
143 |
|
|
}; |
144 |
|
|
|
145 |
|
|
my $default_sort = { |
146 |
|
|
'rank' => 'desc', |
147 |
|
|
'from' => 'asc', |
148 |
|
|
'to' => 'asc', |
149 |
|
|
'date' => 'desc', |
150 |
|
|
}; |
151 |
|
|
|
152 |
|
|
my @html; |
153 |
|
|
foreach my $fld (qw(rank date from to)) { |
154 |
|
|
|
155 |
dpavlin |
48 |
my $url = $html_search . $next_sep . 'sort_by='; |
156 |
|
|
my $title; |
157 |
dpavlin |
24 |
|
158 |
|
|
if ($sort_fld eq $fld) { |
159 |
dpavlin |
48 |
$url .= $sort_fld."%20".$other_order->{$sort_order}; |
160 |
|
|
$title = sprintf($ss_fmt,$sort_fld); |
161 |
dpavlin |
24 |
} else { |
162 |
dpavlin |
48 |
$url .= $fld."%20".$default_sort->{$fld}; |
163 |
|
|
$title = $fld; |
164 |
dpavlin |
24 |
} |
165 |
dpavlin |
48 |
$url .= "&full_body=1" if ($param->{full_body}); |
166 |
|
|
push @html, sprintf($a_href_fmt, $url, $fld, $title); |
167 |
dpavlin |
24 |
|
168 |
|
|
} |
169 |
|
|
|
170 |
|
|
return $pre.join($del,@html).$post; |
171 |
|
|
|
172 |
|
|
} ); |
173 |
|
|
[% END %] |
174 |
|
|
|
175 |
dpavlin |
25 |
|
176 |
|
|
[% MACRO date(msg) BLOCK %] |
177 |
dpavlin |
32 |
<span class="date"><a href="/[% yyyy_mm(msg.date) %]/[% url_search(param.search) %]">[% msg.date %]</a></span> |
178 |
dpavlin |
25 |
[% END %] |
179 |
|
|
|
180 |
|
|
[% PERL %] |
181 |
|
|
$stash->set( yyyy_mm => sub { |
182 |
|
|
my $d = shift; |
183 |
|
|
|
184 |
|
|
if ($d =~ /^(\d{4}[\-\/]\d{2})/) { |
185 |
|
|
return $1; |
186 |
|
|
} else { |
187 |
|
|
return $d; |
188 |
|
|
} |
189 |
|
|
} ); |
190 |
|
|
[% END %] |
191 |
dpavlin |
42 |
|
192 |
|
|
[% PERL %] |
193 |
|
|
$stash->set( id => sub { |
194 |
|
|
my ($folder,$msgid) = split(/\s+/,shift); |
195 |
|
|
return $msgid; |
196 |
|
|
} ); |
197 |
|
|
|
198 |
|
|
$stash->set( folder => sub { |
199 |
|
|
my ($folder,$msgid) = split(/\s+/,shift); |
200 |
|
|
return $folder; |
201 |
|
|
} ); |
202 |
|
|
[% END %] |