source: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/catalog.py @ 6451

Last change on this file since 6451 was 6450, checked in by Henrik Bettermann, 14 years ago

Implement search page for access codes (work in progress).

File size: 1.9 KB
Line 
1"""Cataloging and searching components for access codes.
2"""
3import grok
4from hurry.query import Eq, Text
5from hurry.query.query import Query
6from zope.index.text.parsetree import ParseError
7from waeup.sirp.interfaces import IUniversity, IQueryResultItem
8from waeup.sirp.accesscodes.interfaces import IAccessCode
9
10class AccessCodeIndexes(grok.Indexes):
11    """A catalog for access codes.
12    """
13    grok.site(IUniversity)
14    grok.name('accesscodes_catalog')
15    grok.context(IAccessCode)
16
17    code = grok.index.Field(attribute='representation')
18    history = grok.index.Text(attribute='history')
19    disabled = grok.index.Field(attribute='disabled')
20    used = grok.index.Field(attribute='used')
21    batch_serial = grok.index.Field(attribute='batch_serial')
22    status = grok.index.Field(attribute='status')
23
24class AccessCodeQueryResultItem(object):
25    grok.implements(IQueryResultItem)
26
27    def __init__(self, context, view):
28        self.context = context
29        #self.url = view.url(context)
30        self.code = context.representation
31        self.history = context.history
32        self.status = context.status
33        self.batch_serial = context.batch_serial
34
35def search(query=None, searchtype=None, view=None):
36    if not query:
37        view.flash('Empty search string.')
38        return
39    hitlist = []
40    try:
41        if searchtype == 'history':
42            results = Query().searchResults(
43                Text(('accesscodes_catalog', searchtype), query))
44        elif searchtype == 'batch_serial':
45            results = Query().searchResults(
46                Eq(('accesscodes_catalog', searchtype), int(query)))
47        else:
48            results = Query().searchResults(
49                Eq(('accesscodes_catalog', searchtype), query))
50        for result in results:
51            hitlist.append(AccessCodeQueryResultItem(result, view=view))
52    except ParseError:
53        view.flash('Search string not allowed.')
54        return
55    return hitlist
56
57
Note: See TracBrowser for help on using the repository browser.