source: WAeUP_SRP/base/skins/cps_custom/logged_in.py @ 2407

Last change on this file since 2407 was 2407, checked in by Henrik Bettermann, 17 years ago

put comments into logged_in.py

remove pume-object-relevant code

(but ensure that existing pume objects are not displayed)

File size: 9.7 KB
Line 
1## Script (Python) "logged_in"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10"""Prepare user login
11modified from cps_default/logged_in.py
12
13$Id: logged_in.py 1933 2007-06-19 05:05:29Z henrik $
14"""
15try:
16    from Products.zdb import set_trace
17except:
18    def set_trace():
19        pass
20import DateTime
21current = DateTime.DateTime()
22import logging
23logger = logging.getLogger('Skins.logged_in')
24
25
26from urllib import unquote
27
28request = context.REQUEST
29response = request.RESPONSE
30utool = context.portal_url
31mtool = context.portal_membership
32wftool = context.portal_workflow
33portal = utool.getPortalObject()
34
35redirect_to_portal = False
36is_anon = mtool.isAnonymousUser()
37member = mtool.getAuthenticatedMember()
38#load_passport = hasattr(context.waeup_tool,'loadStudentFoto')
39
40if not is_anon:
41    if "Student" in member.getRoles():
42        to_waeup_student_home = True
43        students = context.portal_url.getPortalObject().campus.students
44        student = getattr(students,str(member))
45        student_app = getattr(student,'application',None)
46        student_per = getattr(student,'personal',None)
47       
48        #########################################################
49       
50        # perform makeStudentData for returning students who login for the first time
51        # the returning key comes from set_access_data
52             
53        if request.has_key('returning') and  student_app is None:
54            email=request.get("email")
55            phone=request.get("phone_nr")
56            context.waeup_tool.makeStudentData(str(member),
57                                                   email=email,
58                                                   phone_nr=phone,
59                                                   )
60            #d = {}
61            #d['id'] = str(member)
62            #d['email'] = email
63            #d['phone'] = phone
64            #context.students_catalog.modifyRecord(**d)
65        elif student_app is None:
66            context.waeup_tool.makeStudentData(str(member))
67        student_app = getattr(student,'application',None)
68       
69        #########################################################
70       
71        # add missing payments folders
72       
73        if 'payments' not in student.objectIds():
74            student.invokeFactory('PaymentsFolder','payments')
75            payments = getattr(student,'payments')
76            wftool.doActionFor(payments,'open')
77            d = {}
78            d['Title'] = 'Online Payments'
79            payments.getContent().edit(mapping=d)
80           
81        #########################################################           
82           
83        #student_pume = getattr(student,'pume',None)
84        s_review_state = context.getStudentReviewState(student.id)
85        a_review_state = wftool.getInfoFor(student_app,'review_state',None)
86        student_per = getattr(student,'personal',None)
87        p_review_state = wftool.getInfoFor(student_per,'review_state',None)
88        logger.info('%s logged in, review_state %s' % (member,s_review_state))
89        app_doc = student_app.getContent()
90
91        #########################################################
92       
93        # save email and phone of returning students after all objects have been created
94
95        if request.has_key('returning'):
96            email=request.get("email")
97            phone=request.get("phone_nr")
98            # should be always closed, however ...
99            if a_review_state != 'opened':
100                wftool.doActionFor(student_app,'open')
101            # should be always opened after import, however ...
102            if p_review_state != 'opened':
103                wftool.doActionFor(student_per,'open')
104            per_doc = student_per.getContent()
105            app_doc.edit(mapping = {'app_email' : email})
106            per_doc.edit(mapping = {'email' : email, 'phone' : phone})
107            wftool.doActionFor(student_app,'close')
108           
109        #########################################################     
110       
111        # look for passport pictures of returning students
112
113        if s_review_state == 'returning' and 'passport' not in app_doc.objectIds():
114            folder = 'pictures_returning'
115            res = context.students_catalog(id = str(member))
116            filename = res[0].matric_no.upper()
117            msg = context.waeup_tool.loadStudentFoto(student,filename,folder)
118            logger.info('%s (%s), %s' % (member,s_review_state,msg))
119
120
121        #########################################################
122       
123        # look for passport pictures of new students
124
125        if s_review_state in ('admitted', 'clearance_pin_entered', 'clearance_requested')  and 'passport' not in app_doc.objectIds():
126            folder = 'pictures_admitted_latest'
127            filename = app_doc.jamb_reg_no.replace('/','_')
128            msg = context.waeup_tool.loadStudentFoto(student,filename,folder)
129            logger.info('%s (%s), %s' % (member,s_review_state,msg))
130
131
132        #########################################################
133       
134        # perform necessary updates for new students
135
136        # 1. add pin and application date to app_doc
137       
138        if s_review_state in ("student_created","admitted") and\
139                             a_review_state == 'created' :
140            wftool.doActionFor(student_app,'open')
141            #if student_pume is not None:
142            #  wftool.doActionFor(student_pume,'close')
143            da = {}
144            pin = request.get('pin')
145           
146            # if the student comes directly, add missing pin (fix)
147            if not pin:
148                jamb_reg_no = app_doc.jamb_reg_no
149                for reg_no in (jamb_reg_no,jamb_reg_no.lower(),jamb_reg_no.upper()):
150                    res = context.portal_pins(student=reg_no)
151                    if len(res) > 0:
152                        break
153                if len(res) > 0:
154                    p = res[0].pin
155                    if len(p) > 10:
156                        pin = "%s-%s-%s" % (p[:3],p[3:4],p[4:])
157                    else:
158                        pin = p
159            da['app_ac_pin'] = pin
160            da['app_ac_date'] = current
161            app_doc.edit(mapping = da)
162           
163        # 2. same as 1 but without opening app_doc   
164           
165        elif s_review_state in ("admitted") and a_review_state == 'opened' and\
166                                            not app_doc.app_ac_pin:
167            jamb_reg_no = app_doc.jamb_reg_no
168            for reg_no in (jamb_reg_no,jamb_reg_no.lower(),jamb_reg_no.upper()):
169                res = context.portal_pins(student=reg_no)
170                if len(res) > 0:
171                    break
172            if len(res) > 0:
173                p = res[0].pin
174                if len(p) > 10:
175                    pin = "%s-%s-%s" % (p[:3],p[3:4],p[4:])
176                else:
177                    pin = p
178                da = {}
179                da['app_ac_pin'] = pin
180                app_doc.edit(mapping = da)
181               
182        # 2. open personal object. This should be done in clearance_edit.       
183               
184        elif s_review_state in ("cleared_and_validated",) and\
185                             p_review_state == 'created' :
186            wftool.doActionFor(student_per,'open')
187           
188        #########################################################
189           
190        res = context.students_catalog(id = str(member))
191        matric_no = res[0].matric_no
192        verdict = res[0].verdict
193
194        #########################################################
195       
196        # fetch current verdict via getVerdict
197
198        if s_review_state in ('returning','school_fee_paid') and not verdict:
199            results = context.results_import(matric_no = matric_no)
200            if results:
201                study_course = getattr(student,'study_course')
202                sc_review_state = wftool.getInfoFor(study_course,'review_state',None)
203                dsc = {}
204                dsc['current_verdict'] = context.getVerdict(results[0].Verdict)[0]
205                if sc_review_state != 'opened':
206                    wftool.doActionFor(study_course,'open')
207                study_course_doc =study_course.getContent()
208                study_course_doc.edit(mapping = dsc)
209                wftool.doActionFor(study_course,'close_for_edit')
210               
211        #########################################################
212               
213        has_results = context.results_import(matric_no = matric_no)
214
215        #########################################################
216       
217        # determine appropriate redirect url
218
219        if s_review_state == "application_pin_entered":
220            redirect_url = "%s/application_edit_form" % student.absolute_url()
221        elif s_review_state in ('admitted', 'objection_raised',):
222            redirect_url = "%s/admission_form" % student.absolute_url()
223        elif s_review_state == "clearance_pin_entered":
224            redirect_url = "%s/clearance_edit_form" % student.absolute_url()
225        elif s_review_state == "cleared_and_validated":
226            redirect_url = "%s/personal_edit_form" % student.absolute_url()
227        elif s_review_state == "returning" and has_results:
228            redirect_url = "%s/session_results_view" % student.absolute_url()
229        elif s_review_state in ('school_fee_paid','courses_registered'):
230            redirect_url = "%s/study_course/study_course_view" % student.absolute_url()
231        else:
232            redirect_url = "%s/student_index" % student.absolute_url()
233
234
235    else:
236        logger.info('%s logged in' % (member))
237        redirect_url = portal.absolute_url()
238#Anonymous
239else:
240    response.expireCookie('__ac', path='/')
241    return context.user_logged_in_failed()
242
243# Setup skins
244if (getattr(utool, 'updateSkinCookie', False) and
245    utool.updateSkinCookie()):
246    context.setupCurrentSkin()
247
248response.redirect(redirect_url)
249
Note: See TracBrowser for help on using the repository browser.