Ignore:
Timestamp:
21 Jun 2011, 11:09:33 (14 years ago)
Author:
Henrik Bettermann
Message:

Implement search function for academic section. The courses_catalog and the certcourses_catalog are searched.

Remove search pages for students. Student search will be done in the upcoming student package.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.sirp/trunk/src/waeup/sirp/university/catalog.py

    r6220 r6447  
    22"""
    33import grok
    4 from hurry.query import Eq
     4from hurry.query import Eq, Text
     5from hurry.query.query import Query
    56from zope.catalog.interfaces import ICatalog
    67from zope.component import getUtility
    78from zope.component.interfaces import ComponentLookupError
     9from zope.index.text.parsetree import ParseError
    810from zope.intid import IIntIds
    9 from waeup.sirp.catalog import QueryResultItem
     11#from waeup.sirp.catalog import QueryResultItem
    1012from waeup.sirp.index import UniqueField
    11 from waeup.sirp.interfaces import IUniversity
     13from waeup.sirp.interfaces import IUniversity, IQueryResultItem
    1214from waeup.sirp.university.interfaces import (
    1315    ICourse, ICertificateCourse, IDepartment,
    1416    ICertificate,
    1517    )
    16 
    1718
    1819class CourseIndexes(grok.Indexes):
     
    9293    return
    9394
    94 class CourseQueryResultItem(QueryResultItem):
     95class CoursesQueryResultItem(object):
     96    grok.implements(IQueryResultItem)
     97
    9598    def __init__(self, context, view):
    9699        self.context = context
    97100        self.url = view.url(context)
    98         self.title = "COURSE: " + context.title
    99         self.description = 'code: %s' % context.code
     101        self.title = context.title
     102        self.code = context.code
     103        self.type = 'Course'
     104
     105class CertificateCoursesQueryResultItem(object):
     106    grok.implements(IQueryResultItem)
     107
     108    def __init__(self, context, view):
     109        self.context = context
     110        self.url = view.url(context)
     111        self.title = context.course.title
     112        self.code = context.getCourseCode
     113        self.type = 'Course Referrer'
    100114
    101115def search(query=None, view=None):
    102116    if not query:
    103         return []
    104     cat = getUtility(ICatalog, name='courses_catalog')
    105     results = list(cat.searchResults(code=(query, query)))
     117        view.flash('Empty search string.')
     118        return
    106119
    107120    hitlist = []
    108     results = Query().searchResults(
    109         Eq(('courses_catalog', 'code'), query))
    110     for result in results:
    111         hitlist.append(CourseQueryResultItem(result, view=view))
     121    try:
     122        results = Query().searchResults(
     123            Eq(('courses_catalog', 'code'), query))
     124        for result in results:
     125            hitlist.append(CoursesQueryResultItem(result, view=view))
     126        results = Query().searchResults(
     127            Text(('courses_catalog', 'title'), query))
     128        for result in results:
     129            hitlist.append(CoursesQueryResultItem(result, view=view))
    112130
    113     results = Query().searchResults(
    114         Text(('courses_catalog', 'title'), query))
    115 
    116     for result in results:
    117         hitlist.append(CourseQueryResultItem(result, view=view))
    118 
     131        results = Query().searchResults(
     132            Eq(('certcourses_catalog', 'course_code'), query))
     133        for result in results:
     134            hitlist.append(CertificateCoursesQueryResultItem(result, view=view))
     135    except ParseError:
     136        view.flash('Search string not allowed.')
     137        return
    119138    return hitlist
Note: See TracChangeset for help on using the changeset viewer.