61
60
_ = request.getText
62
61
titlesearch = checkTitleSearch(request)
63
62
if titlesearch < 0:
64
check_surge_protect(request, kick=True) # get rid of spammer
63
request.makeForbidden403()
64
request.surge_protect(kick_him=True) # get rid of spammer
67
67
advancedsearch = isAdvancedSearch(request)
71
69
# context is relevant only for full search
74
72
elif advancedsearch:
75
73
context = 180 # XXX: hardcoded context count for advancedsearch
77
context = int(form.get('context', 0))
75
context = int(request.form.get('context', [0])[0])
79
77
# Get other form parameters
80
needle = form.get(fieldname, '')
81
case = int(form.get('case', 0))
82
regex = int(form.get('regex', 0)) # no interface currently
83
hitsFrom = int(form.get('from', 0))
78
needle = request.form.get(fieldname, [''])[0]
79
case = int(request.form.get('case', [0])[0])
80
regex = int(request.form.get('regex', [0])[0]) # no interface currently
81
hitsFrom = int(request.form.get('from', [0])[0])
88
86
# if advanced search is enabled we construct our own search query
90
and_terms = form.get('and_terms', '').strip()
91
or_terms = form.get('or_terms', '').strip()
92
not_terms = form.get('not_terms', '').strip()
93
#xor_terms = form.get('xor_terms', '').strip()
94
categories = form.getlist('categories') or ['']
95
timeframe = form.get('time', '').strip()
96
language = form.getlist('language') or ['']
97
mimetype = form.getlist('mimetype') or [0]
98
excludeunderlay = form.get('excludeunderlay', 0)
99
nosystemitems = form.get('nosystemitems', 0)
100
historysearch = form.get('historysearch', 0)
88
and_terms = request.form.get('and_terms', [''])[0].strip()
89
or_terms = request.form.get('or_terms', [''])[0].strip()
90
not_terms = request.form.get('not_terms', [''])[0].strip()
91
#xor_terms = request.form.get('xor_terms', [''])[0].strip()
92
categories = request.form.get('categories', [''])
93
timeframe = request.form.get('time', [''])[0].strip()
94
language = request.form.get('language', [''])
95
mimetype = request.form.get('mimetype', [0])
96
excludeunderlay = request.form.get('excludeunderlay', [0])[0]
97
nosystemitems = request.form.get('nosystemitems', [0])[0]
98
historysearch = request.form.get('historysearch', [0])[0]
102
mtime = form.get('mtime', '')
100
mtime = request.form.get('mtime', [''])[0]
104
102
mtime_parsed = None
120
118
# didn't work, let's try parsedatetime
122
mtime_parsed, parsed_what = cal.parse(mtime)
120
mtime_parsed, invalid_flag = cal.parse(mtime)
123
121
# XXX it is unclear if usage of localtime here and in parsedatetime module is correct.
124
122
# time.localtime is the SERVER's local time and of no relevance to the user (being
125
123
# somewhere in the world)
126
124
# mktime is reverse function for localtime, so this maybe fixes it again!?
127
if parsed_what > 0 and mtime_parsed <= time.localtime():
125
if not invalid_flag and mtime_parsed <= time.localtime():
128
126
mtime = time.mktime(mtime_parsed)
130
128
mtime_parsed = None # we don't use invalid stuff
183
181
# search the pages
184
from MoinMoin.search import searchPages, QueryParser, QueryError
182
from MoinMoin.search import searchPages, QueryParser
186
184
query = QueryParser(case=case, regex=regex,
187
185
titlesearch=titlesearch).parse_query(needle)
188
except QueryError: # catch errors in the search query
186
results = searchPages(request, query, sort, mtime, historysearch)
187
except ValueError: # catch errors in the search query
189
188
request.theme.add_msg(_('Your search query {{{"%s"}}} is invalid. Please refer to '
190
189
'HelpOnSearching for more information.', wiki=True, percent=True) % wikiutil.escape(needle), "error")
191
190
Page(request, pagename).send_page()
194
results = searchPages(request, query, sort, mtime, historysearch)
196
# directly show a single hit for title searches
197
# this is the "quick jump" functionality if you don't remember
198
# the pagename exactly, but just some parts of it
199
if titlesearch and len(results.hits) == 1:
193
# directly show a single hit
194
# Note: can't work with attachment search
195
# improve if we have one...
196
if len(results.hits) == 1:
200
197
page = results.hits[0]
201
198
if not page.attachment: # we did not find an attachment
202
199
page = Page(request, page.page_name)
208
205
url = page.url(request, querystr=querydict)
209
206
request.http_redirect(url)
211
if not results.hits: # no hits?
208
elif not results.hits: # no hits?
212
209
f = request.formatter
213
querydict = dict(wikiutil.parseQueryString(request.query_string))
210
querydict = wikiutil.parseQueryString(request.query_string)
214
211
querydict.update({'titlesearch': 0})
216
213
request.theme.add_msg(_('Your search query {{{"%s"}}} didn\'t return any results. '
226
223
Page(request, pagename).send_page()
226
request.emit_http_headers()
229
228
# This action generates data using the user language
230
229
request.setContentLanguage(request.lang)
232
request.theme.send_title(title % needle, pagename=pagename)
231
request.theme.send_title(title % needle, form=request.form, pagename=pagename)
234
233
# Start content (important for RTL support)
235
234
request.write(request.formatter.startContent("content"))