0
|
1 <macro name="adv_search_page" requires="servlet">
|
|
2 <n.node_page.>
|
|
3 <n.catch_exception. id="set-block">
|
|
4 <n.if.is_submitted_form>
|
|
5 <then>
|
|
6 <n.redirect_to.page_node.>
|
|
7 <n.search_path>
|
|
8 <query>
|
|
9 <n.compress.>
|
|
10 <n.set_message_text_contains_group/>
|
|
11 <n.set_message_subject_contains_group/>
|
|
12 <n.set_author_name_group/>
|
|
13 <n.set_any_message_part_contains_group/>
|
|
14 </n.compress.>
|
|
15 </query>
|
|
16 <days>
|
|
17 <n.get_int. default="0" exception="days_field_not_integer">
|
|
18 <n.get_parameter name="days" />
|
|
19 </n.get_int.>
|
|
20 </days>
|
|
21 </n.search_path>
|
|
22 </n.redirect_to.page_node.>
|
|
23 </then>
|
|
24 </n.if.is_submitted_form>
|
|
25 </n.catch_exception.>
|
|
26 <n.html>
|
|
27 <head>
|
|
28 <meta name="robots" content="noindex,nofollow"/>
|
|
29 <n.title.><t>Advanced Search</t></n.title.>
|
|
30 <style type="text/css">
|
|
31 div.group-header {
|
|
32 padding: .2em;
|
|
33 margin-top:1em;
|
|
34 font-size: 120%;
|
|
35 font-weight: bold;
|
|
36 }
|
|
37 td.form-label {
|
|
38 white-space: nowrap;
|
|
39 }
|
|
40 </style>
|
|
41 </head>
|
|
42 <body>
|
|
43 <n.adv_search_exceptions/>
|
|
44 <h1><t>Advanced Search</t></h1>
|
|
45
|
|
46 <p><t>Use the options below to precisely specify your search criteria.</t></p>
|
|
47
|
|
48 <n.form.>
|
|
49 <table class="advanced-search-table">
|
|
50 <n.message_text_contains_group/>
|
|
51 <n.message_subject_contains_group/>
|
|
52 <n.author_name_group/>
|
|
53 <n.any_message_part_contains_group/>
|
|
54 <n.message_date_group/>
|
|
55 <n.submit_button/>
|
|
56 </table>
|
|
57 </n.form.>
|
|
58 </body>
|
|
59 </n.html>
|
|
60 </n.node_page.>
|
|
61 </macro>
|
|
62
|
|
63 <macro name="adv_search_exceptions">
|
|
64 <n.format_error.handle_exception. for="set-block">
|
|
65 <n.exception. name="days_field_not_integer">
|
|
66 <t>Invalid number of days, must be integer.</t>
|
|
67 </n.exception.>
|
|
68 </n.format_error.handle_exception.>
|
|
69 </macro>
|
|
70
|
|
71 <macro name="set_message_text_contains_group">
|
|
72 <n.adv_search_and_query name="messageand" field="message" />
|
|
73 <n.adv_search_or_query name="messageor" field="message" />
|
|
74 <n.adv_search_phrase_query name="messagephrase" field="message" />
|
|
75 <n.adv_search_not_query name="messagenot" field="message" />
|
|
76 </macro>
|
|
77
|
|
78 <macro name="set_message_subject_contains_group">
|
|
79 <n.adv_search_and_query name="subjectand" field="subject" />
|
|
80 <n.adv_search_or_query name="subjector" field="subject" />
|
|
81 <n.adv_search_phrase_query name="subjectphrase" field="subject" />
|
|
82 <n.adv_search_not_query name="subjectnot" field="subject" />
|
|
83 </macro>
|
|
84
|
|
85 <macro name="set_author_name_group">
|
|
86 <n.adv_search_phrase_query name="authorphrase" field="author" />
|
|
87 <n.adv_search_not_phrase_query name="authorphrasenot" field="author" />
|
|
88 </macro>
|
|
89
|
|
90 <macro name="set_any_message_part_contains_group">
|
|
91 <n.get_parameter name="alland" />
|
|
92 <n.adv_search_or_query name="allor" />
|
|
93 <n.adv_search_phrase_query name="allphrase" />
|
|
94 <n.adv_search_not_query name="allnot" />
|
|
95 </macro>
|
|
96
|
|
97 <macro name="message_text_contains_group">
|
|
98 <tr>
|
|
99 <td colspan="2">
|
|
100 <div class="shaded-bg-color rounded second-font group-header">
|
|
101 <t>Message text contains</t>
|
|
102 </div>
|
|
103 </td>
|
|
104 </tr>
|
|
105 <tr>
|
|
106 <td class="form-label"><t>all of the words:</t></td>
|
|
107 <td><n.adv_search_input name="messageand" /></td>
|
|
108 </tr>
|
|
109 <tr>
|
|
110 <td class="form-label"><t>at least one of the words:</t></td>
|
|
111 <td><n.adv_search_input name="messageor" /></td>
|
|
112 </tr>
|
|
113 <tr>
|
|
114 <td class="form-label"><t>the exact phrase:</t></td>
|
|
115 <td><n.adv_search_input name="messagephrase" /></td>
|
|
116 </tr>
|
|
117 <tr>
|
|
118 <td class="form-label end-group"><t>none of the words:</t></td>
|
|
119 <td class="end-group"><n.adv_search_input name="messagenot" /></td>
|
|
120 </tr>
|
|
121 </macro>
|
|
122
|
|
123 <macro name="message_subject_contains_group">
|
|
124 <tr>
|
|
125 <td colspan="2">
|
|
126 <div class="shaded-bg-color rounded second-font group-header">
|
|
127 <t>Message subject contains</t>
|
|
128 </div>
|
|
129 </td>
|
|
130 </tr>
|
|
131 <tr>
|
|
132 <td class="form-label"><t>all of the words:</t></td>
|
|
133 <td><n.adv_search_input name="subjectand" /></td>
|
|
134 </tr>
|
|
135 <tr>
|
|
136 <td class="form-label"><t>at least one of the words:</t></td>
|
|
137 <td><n.adv_search_input name="subjector" /></td>
|
|
138 </tr>
|
|
139 <tr>
|
|
140 <td class="form-label"><t>the exact phrase:</t></td>
|
|
141 <td><n.adv_search_input name="subjectphrase" /></td>
|
|
142 </tr>
|
|
143 <tr>
|
|
144 <td class="form-label end-group"><t>none of the words:</t></td>
|
|
145 <td class="end-group"><n.adv_search_input name="subjectnot" /></td>
|
|
146 </tr>
|
|
147 </macro>
|
|
148
|
|
149 <macro name="author_name_group">
|
|
150 <tr>
|
|
151 <td colspan="2">
|
|
152 <div class="shaded-bg-color rounded second-font group-header">
|
|
153 <t>Author name</t>
|
|
154 </div>
|
|
155 </td>
|
|
156 </tr>
|
|
157 <tr>
|
|
158 <td class="form-label"><t>is:</t></td>
|
|
159 <td><n.adv_search_input name="authorphrase" /></td>
|
|
160 </tr>
|
|
161 <tr>
|
|
162 <td class="form-label end-group"><t>is not:</t></td>
|
|
163 <td class="end-group"><n.adv_search_input name="authorphrasenot" /></td>
|
|
164 </tr>
|
|
165 </macro>
|
|
166
|
|
167 <macro name="any_message_part_contains_group">
|
|
168 <tr>
|
|
169 <td colspan="2">
|
|
170 <div class="shaded-bg-color rounded second-font group-header">
|
|
171 <t>Any message part contains</t>
|
|
172 </div>
|
|
173 </td>
|
|
174 </tr>
|
|
175 <tr>
|
|
176 <td class="form-label"><t>all of the words:</t></td>
|
|
177 <td><n.adv_search_input name="alland" /></td>
|
|
178 </tr>
|
|
179 <tr>
|
|
180 <td class="form-label"><t>at least one of the words:</t></td>
|
|
181 <td><n.adv_search_input name="allor" /></td>
|
|
182 </tr>
|
|
183 <tr>
|
|
184 <td class="form-label"><t>the exact phrase:</t></td>
|
|
185 <td><n.adv_search_input name="allphrase" /></td>
|
|
186 </tr>
|
|
187 <tr>
|
|
188 <td class="form-label end-group"><t>none of the words:</t></td>
|
|
189 <td class="end-group"><n.adv_search_input name="allnot" /></td>
|
|
190 </tr>
|
|
191 </macro>
|
|
192
|
|
193 <macro name="message_date_group">
|
|
194 <tr>
|
|
195 <td colspan="2">
|
|
196 <div class="shaded-bg-color rounded second-font group-header">
|
|
197 <t>Message date</t>
|
|
198 </div>
|
|
199 </td>
|
|
200 </tr>
|
|
201 <tr>
|
|
202 <td class="form-label end-group"><t>is within the last:</t></td>
|
|
203 <td><input name="days" size="5" value="[n.hide_if. equals='0'][n.hide_null.get_parameter name='days' /][/n.hide_if.]" /> <t>days</t></td>
|
|
204 </tr>
|
|
205 </macro>
|
|
206
|
|
207 <macro name="submit_button">
|
|
208 <tr>
|
|
209 <td></td>
|
|
210 <td style="padding-top:.5em">
|
|
211 <input type="submit" class="toolbar action-button" value="[t]Search[/t]"/>
|
|
212 </td>
|
|
213 </tr>
|
|
214 </macro>
|
|
215
|
|
216 <macro name="adv_search_input" parameters="name">
|
|
217 <input name="[n.name/]" type="text" style="width:370px;" value="[n.hide_null.get_parameter.name/]"/>
|
|
218 </macro>
|
|
219
|
|
220 <macro name="adv_search_and_query" parameters="name,field">
|
|
221 <n.regex_replace_all. pattern='(".+?"|[^ "]+)' replacement="[n.field/]:$0"><n.get_parameter name="[n.name/]" /></n.regex_replace_all.>
|
|
222 </macro>
|
|
223
|
|
224 <macro name="remove_double_quotes" dot_parameter="text">
|
|
225 <n.regex_replace_all. pattern='"' replacement=""><n.text/></n.regex_replace_all.>
|
|
226 </macro>
|
|
227
|
|
228 <macro name="adv_search_phrase_query" parameters="name,field">
|
|
229 <n.set_var. name="value"><n.trim.remove_double_quotes.get_parameter name="[n.name/]" /></n.set_var.>
|
|
230 <n.if.not.is_empty.var name="value">
|
|
231 <then>
|
|
232 <n.hide_null.append text="[n.field/]" suffix=":" />"<n.var name="value" />"
|
|
233 </then>
|
|
234 </n.if.not.is_empty.var>
|
|
235 </macro>
|
|
236
|
|
237 <macro name="adv_search_or_query" parameters="name,field">
|
|
238 <n.set_var. name="value"><n.trim.get_parameter name="[n.name/]" /></n.set_var.>
|
|
239 <n.set_var. name="field"><n.hide_null.append text="[n.field/]" suffix=":" /></n.set_var.>
|
|
240 <n.if.not.is_empty.var name="value">
|
|
241 <then>
|
|
242 <n.regex. pattern='(".+?"|[^ "]+)' text="[n.var name='value'/]">
|
|
243 <n.no_output.next_element/>
|
|
244 <n.if.not.has_more_elements>
|
|
245 <then>
|
|
246 <n.var name="field"/><n.current_element/>
|
|
247 </then>
|
|
248 <else>
|
|
249 <n.var name="field"/>(<n.current_element/>
|
|
250 <n.loop.>
|
|
251 <n.nop/> OR <n.current_element/>
|
|
252 </n.loop.>)
|
|
253 </else>
|
|
254 </n.if.not.has_more_elements>
|
|
255 </n.regex.>
|
|
256 </then>
|
|
257 </n.if.not.is_empty.var>
|
|
258 </macro>
|
|
259
|
|
260 <macro name="adv_search_not_query" parameters="name,field">
|
|
261 <n.if.not.is_empty.trim.get_parameter name="[n.name/]">
|
|
262 <then>
|
|
263 NOT <n.adv_search_or_query name="[n.name/]" field="[n.field/]" />
|
|
264 </then>
|
|
265 </n.if.not.is_empty.trim.get_parameter>
|
|
266 </macro>
|
|
267
|
|
268 <macro name="adv_search_not_phrase_query" parameters="name,field">
|
|
269 <n.if.not.is_empty.trim.get_parameter name="[n.name/]">
|
|
270 <then>
|
|
271 NOT <n.adv_search_phrase_query name="[n.name/]" field="[n.field/]" />
|
|
272 </then>
|
|
273 </n.if.not.is_empty.trim.get_parameter>
|
|
274 </macro>
|