source: main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicants.py @ 6198

Last change on this file since 6198 was 6198, checked in by Henrik Bettermann, 13 years ago

Convert waeup.local.ApplicationsOfficer? to waeup.ApplicationsOfficer?.
Change and simplify permission settings in application section.
Assign application section permissions to Portal Manager.

Actually we need a Campus Manager (Academics Section Manager) too. Then manageUniversity should be renamed to manageAcademics.

File size: 3.4 KB
Line 
1##
2## applicants.py
3## Login : <uli@pu.smp.net>
4## Started on  Fri Jul 16 11:46:55 2010 Uli Fouquet
5## $Id$
6##
7## Copyright (C) 2010 Uli Fouquet
8## This program is free software; you can redistribute it and/or modify
9## it under the terms of the GNU General Public License as published by
10## the Free Software Foundation; either version 2 of the License, or
11## (at your option) any later version.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16## GNU General Public License for more details.
17##
18## You should have received a copy of the GNU General Public License
19## along with this program; if not, write to the Free Software
20## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21##
22import grok
23from grok import index
24from zope.component.interfaces import IFactory
25from zope.interface import implementedBy
26from zope.schema.fieldproperty import FieldProperty
27from waeup.sirp.interfaces import IWAeUPSIRPPluggable
28from waeup.sirp.app import University
29from waeup.sirp.applicants.interfaces import (
30    IResultEntry, IApplicant, IApplicantEdit,
31    DEFAULT_PASSPORT_IMAGE_MALE,
32    )
33from waeup.sirp.utils.helpers import attrs_to_fields
34
35class ResultEntry(grok.Context):
36    grok.implements(IResultEntry)
37
38    def __init__(self, subject=None, score=None):
39        self.subject = subject
40        self.score = score
41
42class Applicant(grok.Model):
43    grok.implements(IApplicant,IApplicantEdit)
44    grok.provides(IApplicant)
45
46# Set all attributes of Applicant required in IApplicant as field
47# properties. Doing this, we do not have to set initial attributes
48# ourselves and as a bonus we get free validation when an attribute is
49# set.
50Applicant = attrs_to_fields(Applicant)
51
52class ApplicantCatalog(grok.Indexes):
53    """A catalog indexing :class:`Applicant` instances in the ZODB.
54    """
55    grok.site(University)
56    grok.name('applicants_catalog')
57    grok.context(IApplicant)
58
59    access_code = index.Field(attribute='access_code')
60
61class ApplicantTraverser(grok.Traverser):
62    """Get image of the context applicant.
63
64    Each applicant can provide a passport photograph which will be
65    returned by this traverser if:
66
67    - we request the exact filename of the picture or
68
69    - ask for a picture named 'passport.jpg'.
70
71    If no picture was stored yet, we get a placeholder image when
72    asking for `passport.jpg`.
73
74    If none of the above applies, we return ``None``, most probably
75    resulting a :exc:`NotFound` exception.
76
77    """
78    grok.context(IApplicant)
79    def traverse(self, name):
80        passport_filename = getattr(self.context.passport, 'filename', None)
81        if name == passport_filename:
82            return self.context.passport
83        if name == 'passport.jpg':
84            if self.context.passport is not None:
85                return self.context.passport
86            return DEFAULT_PASSPORT_IMAGE_MALE
87        return
88
89class ApplicantFactory(grok.GlobalUtility):
90    """A factory for faculty containers.
91    """
92    grok.implements(IFactory)
93    grok.name(u'waeup.Applicant')
94    title = u"Create a new applicant.",
95    description = u"This factory instantiates new applicant instances."
96
97    def __call__(self, *args, **kw):
98        return Applicant()
99
100    def getInterfaces(self):
101        return implementedBy(Applicant)
Note: See TracBrowser for help on using the repository browser.