def profile(self, request, tl, one, two, module, extra, prog): """ Display the registration profile page, the page that contains the contact information for a student, as attached to a particular program """ from esp.web.views.myesp import profile_editor # Check user role. Some users may have multiple roles; if one of them # is 'student' or 'teacher' then use that to set up the profile. # Otherwise, make a wild guess. user_roles = request.user.getUserTypes() user_roles = [x.lower() for x in user_roles] if 'teacher' in user_roles or 'student' in user_roles: role = {'teach': 'teacher','learn': 'student'}[tl] else: role = user_roles[0] # Reset e-mail address for program registrations. if prog is None: regProf = RegistrationProfile.getLastProfile(request.user) else: regProf = RegistrationProfile.getLastForProgram(request.user, prog) # aseering 8/20/2007: It is possible for a user to not have a # contact_user associated with their registration profile. # Deal nicely with this. if hasattr(regProf.contact_user, 'e_mail'): regProf.contact_user.e_mail = '' regProf.contact_user.save() response = profile_editor(request, prog, False, role) if response == True: return self.goToCore(tl) return response
def clean(self): super(StudentInfoForm, self).clean() cleaned_data = self.cleaned_data show_studentrep_application = Tag.getTag('show_studentrep_application') if show_studentrep_application and show_studentrep_application != "no_expl": expl = self.cleaned_data['studentrep_expl'].strip() if self.studentrep_error and self.cleaned_data[ 'studentrep'] and expl == '': raise forms.ValidationError( "Please enter an explanation if you would like to become a student rep." ) if not Tag.getTag('allow_change_grade_level'): user = self._user orig_prof = RegistrationProfile.getLastProfile(user) # If graduation year and dob were disabled, get old data. if (orig_prof.id is not None) and (orig_prof.student_info is not None): if not 'graduation_year' in cleaned_data: # Get rid of the error saying this is missing del self.errors['graduation_year'] if not 'dob' in cleaned_data: del self.errors['dob'] # Always use the old birthdate if it exists, so that people can't # use something like Firebug to change their age/grade cleaned_data[ 'graduation_year'] = orig_prof.student_info.graduation_year cleaned_data['dob'] = orig_prof.student_info.dob if Tag.getBooleanTag('require_school_field'): if not cleaned_data['k12school'] and not cleaned_data[ 'unmatched_school']: raise forms.ValidationError( "Please select your school from the dropdown list that appears as you type its name. You will need to click on an entry to select it. If you cannot find your school, please type in its full name and check the box below; we will do our best to add it to our database." ) return cleaned_data
def clean(self): super(StudentInfoForm, self).clean() cleaned_data = self.cleaned_data show_studentrep_application = Tag.getTag('show_studentrep_application') if show_studentrep_application and show_studentrep_application != "no_expl": expl = self.cleaned_data['studentrep_expl'].strip() if self.studentrep_error and self.cleaned_data['studentrep'] and expl == '': raise forms.ValidationError("Please enter an explanation if you would like to become a student rep.") if not Tag.getTag('allow_change_grade_level'): user = self._user orig_prof = RegistrationProfile.getLastProfile(user) # If graduation year and dob were disabled, get old data. if (orig_prof.id is not None) and (orig_prof.student_info is not None): if not 'graduation_year' in cleaned_data: # Get rid of the error saying this is missing del self.errors['graduation_year'] if not 'dob' in cleaned_data: del self.errors['dob'] # Always use the old birthdate if it exists, so that people can't # use something like Firebug to change their age/grade cleaned_data['graduation_year'] = orig_prof.student_info.graduation_year cleaned_data['dob'] = orig_prof.student_info.dob if Tag.getBooleanTag('require_school_field'): if not cleaned_data['k12school'] and not cleaned_data['unmatched_school']: raise forms.ValidationError("Please select your school from the dropdown list that appears as you type its name. You will need to click on an entry to select it. If you cannot find your school, please type in its full name and check the box below; we will do our best to add it to our database.") return cleaned_data
def profile_editor(request, prog_input=None, responseuponCompletion = True, role=''): """ Display the registration profile page, the page that contains the contact information for a student, as attached to a particular program """ from esp.users.models import K12School from esp.web.views.main import registration_redirect STUDREP_VERB = GetNode('V/Flags/UserRole/StudentRep') STUDREP_QSC = GetNode('Q') if prog_input is None: prog = None navnode = GetNode('Q/Web/myesp') else: prog = prog_input navnode = prog.anchor curUser = request.user context = {'logged_in': request.user.is_authenticated() } context['user'] = request.user context['program'] = prog curUser = ESPUser(curUser) curUser.updateOnsite(request) # Get the profile form from the user's type, although we need to handle # a couple of extra possibilities for the 'role' variable. user_types = ESPUser.getAllUserTypes() additional_types = [['', {'label': 'Not specified', 'profile_form': 'UserContactForm'}], ['Administrator', {'label': 'Administrator', 'profile_form': 'UserContactForm'}], ] additional_type_labels = [x[0] for x in additional_types] # Handle all-lowercase versions of role being passed in by calling title() user_type_labels = [x[0] for x in user_types] if role.title() in user_type_labels: target_type = user_types[user_type_labels.index(role.title())][1] else: target_type = additional_types[additional_type_labels.index(role.title())][1] mod = __import__('esp.users.forms.user_profile', (), (), target_type['profile_form']) FormClass = getattr(mod, target_type['profile_form']) context['profiletype'] = role if request.method == 'POST' and request.POST.has_key('profile_page'): form = FormClass(curUser, request.POST) # Don't suddenly demand an explanation from people who are already student reps if UserBit.objects.UserHasPerms(curUser, STUDREP_QSC, STUDREP_VERB): if hasattr(form, 'repress_studentrep_expl_error'): form.repress_studentrep_expl_error() if form.is_valid(): new_data = form.cleaned_data regProf = RegistrationProfile.getLastForProgram(curUser, prog) if regProf.id is None: old_regProf = RegistrationProfile.getLastProfile(curUser) else: old_regProf = regProf for field_name in ['address_zip','address_city','address_street','address_state']: if field_name in new_data and new_data[field_name] != getattr(old_regProf.contact_user,field_name,False): new_data['address_postal'] = '' if new_data['address_postal'] == '': new_data['address_postal'] = False regProf.contact_user = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_user, '', curUser) regProf.contact_emergency = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_emergency, 'emerg_') if new_data.has_key('dietary_restrictions') and new_data['dietary_restrictions']: regProf.dietary_restrictions = new_data['dietary_restrictions'] if role == 'student': regProf.student_info = StudentInfo.addOrUpdate(curUser, regProf, new_data) regProf.contact_guardian = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_guardian, 'guard_') elif role == 'teacher': regProf.teacher_info = TeacherInfo.addOrUpdate(curUser, regProf, new_data) elif role == 'guardian': regProf.guardian_info = GuardianInfo.addOrUpdate(curUser, regProf, new_data) elif role == 'educator': regProf.educator_info = EducatorInfo.addOrUpdate(curUser, regProf, new_data) blah = regProf.__dict__ regProf.save() curUser.first_name = new_data['first_name'] curUser.last_name = new_data['last_name'] curUser.email = new_data['e_mail'] curUser.save() if responseuponCompletion == True: return registration_redirect(request) else: return True else: # Force loading the school back in if possible... replacement_data = form.data.copy() try: replacement_data['k12school'] = form.fields['k12school'].clean(form.data['k12school']).id except: pass form = FormClass(curUser, replacement_data) else: if prog_input is None: regProf = RegistrationProfile.getLastProfile(curUser) else: regProf = RegistrationProfile.getLastForProgram(curUser, prog) if regProf.id is None: regProf = RegistrationProfile.getLastProfile(curUser) new_data = {} if curUser.isStudent(): new_data['studentrep'] = (UserBit.objects.filter(user = curUser, verb = STUDREP_VERB, qsc = STUDREP_QSC).count() > 0) new_data['first_name'] = curUser.first_name new_data['last_name'] = curUser.last_name new_data['e_mail'] = curUser.email new_data = regProf.updateForm(new_data, role) if request.session.has_key('birth_month') and request.session.has_key('birth_day'): new_data['dob'] = datetime.date(1994, int(request.session['birth_month']), int(request.session['birth_day'])) if request.session.has_key('school_id'): new_data['k12school'] = request.session['school_id'] # Set default values for state fields state_fields = ['address_state', 'emerg_address_state'] state_tag_map = {} for field in state_fields: state_tag_map[field] = 'local_state' form = FormClass(curUser, initial=new_data, tag_map=state_tag_map) context['request'] = request context['form'] = form return render_to_response('users/profile.html', request, navnode, context)
def profile_editor(request, prog_input=None, responseuponCompletion = True, role=''): """ Display the registration profile page, the page that contains the contact information for a student, as attached to a particular program """ from esp.users.models import K12School from esp.web.views.main import registration_redirect if prog_input is None: prog = None else: prog = prog_input curUser = request.user context = {'logged_in': request.user.is_authenticated() } context['user'] = request.user context['program'] = prog curUser.updateOnsite(request) # Get the profile form from the user's type, although we need to handle # a couple of extra possibilities for the 'role' variable. user_types = ESPUser.getAllUserTypes() additional_types = [['', {'label': 'Not specified', 'profile_form': 'UserContactForm'}], ['Administrator', {'label': 'Administrator', 'profile_form': 'UserContactForm'}], ] additional_type_labels = [x[0] for x in additional_types] # Handle all-lowercase versions of role being passed in by calling title() user_type_labels = [x[0] for x in user_types] if role.title() in user_type_labels: target_type = user_types[user_type_labels.index(role.title())][1] else: target_type = additional_types[additional_type_labels.index(role.title())][1] mod = __import__('esp.users.forms.user_profile', (), (), target_type['profile_form']) FormClass = getattr(mod, target_type['profile_form']) context['profiletype'] = role if request.method == 'POST' and 'profile_page' in request.POST: form = FormClass(curUser, request.POST) # Don't suddenly demand an explanation from people who are already student reps if curUser.hasRole("StudentRep"): if hasattr(form, 'repress_studentrep_expl_error'): form.repress_studentrep_expl_error() if form.is_valid(): new_data = form.cleaned_data regProf = RegistrationProfile.getLastForProgram(curUser, prog) if regProf.id is None: old_regProf = RegistrationProfile.getLastProfile(curUser) else: old_regProf = regProf for field_name in ['address_zip','address_city','address_street','address_state']: if field_name in new_data and new_data[field_name] != getattr(old_regProf.contact_user,field_name,False): new_data['address_postal'] = '' if new_data['address_postal'] == '': new_data['address_postal'] = False regProf.contact_user = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_user, '', curUser) regProf.contact_emergency = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_emergency, 'emerg_') if new_data.get('dietary_restrictions'): regProf.dietary_restrictions = new_data['dietary_restrictions'] if role == 'student': regProf.student_info = StudentInfo.addOrUpdate(curUser, regProf, new_data) regProf.contact_guardian = ContactInfo.addOrUpdate(regProf, new_data, regProf.contact_guardian, 'guard_') elif role == 'teacher': regProf.teacher_info = TeacherInfo.addOrUpdate(curUser, regProf, new_data) elif role == 'guardian': regProf.guardian_info = GuardianInfo.addOrUpdate(curUser, regProf, new_data) elif role == 'educator': regProf.educator_info = EducatorInfo.addOrUpdate(curUser, regProf, new_data) blah = regProf.__dict__ regProf.save() curUser.first_name = new_data['first_name'] curUser.last_name = new_data['last_name'] curUser.email = new_data['e_mail'] curUser.save() if responseuponCompletion == True: return registration_redirect(request) else: return True else: # Force loading the school back in if possible... replacement_data = form.data.copy() try: replacement_data['k12school'] = form.fields['k12school'].clean(form.data['k12school']).id except: pass form = FormClass(curUser, replacement_data) else: if prog_input is None: regProf = RegistrationProfile.getLastProfile(curUser) else: regProf = RegistrationProfile.getLastForProgram(curUser, prog) if regProf.id is None: regProf = RegistrationProfile.getLastProfile(curUser) new_data = {} if curUser.isStudent(): new_data['studentrep'] = curUser.groups.filter(name="StudentRep").exists() new_data['first_name'] = curUser.first_name new_data['last_name'] = curUser.last_name new_data['e_mail'] = curUser.email new_data = regProf.updateForm(new_data, role) if regProf.student_info and regProf.student_info.dob: new_data['dob'] = regProf.student_info.dob # Set default values for state fields state_fields = ['address_state', 'emerg_address_state'] state_tag_map = {} for field in state_fields: state_tag_map[field] = 'local_state' form = FormClass(curUser, initial=new_data, tag_map=state_tag_map) context['request'] = request context['form'] = form return render_to_response('users/profile.html', request, context)