def add_student_to_db(self, credentials, request): ''' Adds a new user in the Database, along with the collected credentials from dionysos.teilar.gr ''' user = User( username = credentials['username'], first_name = credentials['first_name'], last_name = credentials['last_name'], email = credentials['username'] + '@emptymail.com' ) user.is_staff = False user.is_superuser = False try: user.save() except Exception as error: logger_syslog.error(error, extra = log_extra_data(credentials['username'], request)) logger_mail.exception(error) raise CronosError(u'Σφάλμα αποθήκευσης βασικών στοιχείων χρήστη') ''' Additional information are added in the userprofile table ''' try: user_profile = UserProfile( user = user, dionysos_username = credentials['username'], dionysos_password = encrypt_password(credentials['password']), registration_number = credentials['registration_number'], semester = credentials['semester'], school = Departments.objects.get(name = credentials['school']), introduction_year = credentials['introduction_year'], declaration = credentials['declaration'], #grades = credentials['grades'], ) user_profile.save() except Exception as error: logger_syslog.error(error, extra = log_extra_data(credentials['username'], request)) logger_mail.exception(error) raise CronosError(u'Σφάλμα αποθήκευσης πρόσθετων στοιχείων χρήστη') ''' Everything went fine Notify admins about the new registration ''' title = u'New user No.%s: %s' % (user.id, user.username) message = u'Name: %s %s\nDepartment: %s\nSemester: %s' % ( user.first_name, user.last_name, user_profile.school, user_profile.semester ) logger_syslog.info(title, extra = log_extra_data(user.username, request)) try: send_mail(settings.EMAIL_SUBJECT_PREFIX + title, message, settings.SERVER_EMAIL, [settings.ADMINS[0][1]]) except Exception as error: logger_syslog.error(error, extra = log_extra_data(user.username, request)) logger_mail.exception(error) ''' Return the new user object ''' return user
def add_student_to_db(self, request, student): ''' Adds a new user in the Database, along with the collected credentials from dionysos.teilar.gr ''' user = User( username = student.dionysos_username, first_name = unicode(student.dionysos_first_name), last_name = unicode(student.dionysos_last_name), email = unicode(student.dionysos_username) + u'@emptymail.com' ) user.is_staff = False user.is_superuser = False try: user.save() except Exception as error: logger_syslog.error(error, extra = log_extra_data(request)) logger_mail.exception(error) raise CronosError(u'Σφάλμα αποθήκευσης βασικών στοιχείων χρήστη') ''' Additional information are added in the userprofile table ''' try: user_profile = UserProfile( user = user, dionysos_username = student.dionysos_username, dionysos_password = encrypt_password(student.dionysos_password), registration_number = unicode(student.dionysos_registration_number), semester = unicode(student.dionysos_semester), school = student.dionysos_school, introduction_year = unicode(student.dionysos_introduction_year), declaration = student.dionysos_declaration, grades = student.dionysos_grades, ) user_profile.save() except Exception as error: logger_syslog.error(error, extra = log_extra_data(request)) logger_mail.exception(error) raise CronosError(u'Σφάλμα αποθήκευσης πρόσθετων στοιχείων χρήστη') ''' Everything went fine Log the new user and notify admins about the new registration ''' title = u'New user No.%s: %s' % (user.id, user.username) message = u'Name: %s %s\nDepartment: %s\nSemester: %s' % ( user.first_name, user.last_name, user_profile.school, user_profile.semester ) logger_syslog.info(title, extra = log_extra_data(request)) try: send_mail(settings.EMAIL_SUBJECT_PREFIX + title, message, settings.SERVER_EMAIL, get_admins_mails()) except Exception as error: logger_syslog.error(error, extra = log_extra_data(request)) logger_mail.exception(error) ''' Return the new user object ''' return user
def settings_accounts(request): ''' The user's accounts settings webpage ''' notification = {} eclass_credentials_form = EclassCredentialsForm() webmail_form = WebmailForm() declaration_form = DeclarationForm() grades_form = GradesForm() eclass_lessons_form = EclassLessonsForm() if request.user.get_profile().dionysos_password: raw_dionysos_password = decrypt_password(request.user.get_profile().dionysos_password), else: raw_dionysos_password = None student = Cronos( request.user.get_profile().dionysos_username, raw_dionysos_password, ) if request.user.get_profile().eclass_username: student.eclass_username = request.user.get_profile().eclass_username student.eclass_password = decrypt_password(request.user.get_profile().eclass_password) if request.method == 'POST': if request.POST.get('eclass_password'): ''' Update eclass credentials ''' try: eclass_credentials_form = EclassCredentialsForm(request.POST) student.eclass_password = request.POST.get('eclass_password') if not request.user.get_profile().eclass_username: if eclass_credentials_form.is_valid(): student.eclass_username = request.POST.get('eclass_username') else: raise LoginError try: ''' Check if the e-class.teilar.gr credentials already exist in the DB, but belong to another student's account ''' user = User.objects.get(userprofile__eclass_username = student.eclass_username) if user.username != request.user.username: raise CronosError(u'Τα στοιχεία e-class.teilar.gr ανήκουν ήδη σε κάποιον άλλο λογαριασμό') except User.DoesNotExist: pass ''' Try to login with those credentials, and update eclass lessons afterwards ''' student.get_eclass_lessons(request) ''' Login succeeded, save eclass credentials to the user's profile ''' request.user.get_profile().eclass_username = student.eclass_username request.user.get_profile().eclass_password = encrypt_password(student.eclass_password) request.user.get_profile().save() notification['success'] = u'Η ανανέωση των στοιχείων openclass.teilar.gr ήταν επιτυχής' except (CronosError, LoginError) as error: notification['error'] = error.value elif request.POST.get('webmail_password'): ''' Update webmail credentials ''' try: webmail_form = WebmailForm(request.POST) webmail_password = request.POST.get('webmail_password') if request.user.get_profile().webmail_username: webmail_username = request.user.get_profile().webmail_username else: if not webmail_form.is_valid(): raise LoginError webmail_username = request.POST.get('webmail_username') try: ''' Check if the myweb.teilar.gr credentials already exist in the DB, but belong to another student's account ''' user = User.objects.get(userprofile__webmail_username = webmail_username) if user.username != request.user.username: raise CronosError(u'Τα στοιχεία webmail.teilar.gr ανήκουν ήδη σε κάποιον άλλο λογαριασμό') except User.DoesNotExist: user = None if not user: user = UserProfile.objects.get(pk=request.user.id) user.webmail_username = webmail_username user.webmail_password = encrypt_password(webmail_password) ''' Login was successful, add in DB ''' user.save() notification['success'] = u'Η ανανέωση των στοιχείων myweb.teilar.gr ήταν επιτυχής' except (CronosError, LoginError) as error: notification['error'] = error.value elif request.POST.get('declaration'): ''' Update the declaration ''' try: student.get_dionysos_declaration(request) request.user.get_profile().declaration = student.dionysos_declaration request.user.get_profile().save() notification['success'] = u'Η ανανέωση της δήλωσης ήταν επιτυχής' except (CronosError, LoginError) as error: notification['error'] = error.value elif request.POST.get('grades'): ''' Update the grades ''' try: student.get_dionysos_grades(request) request.user.get_profile().grades = student.dionysos_grades request.user.get_profile().save() notification['success'] = u'Η ανανέωση της βαθμολογίας ήταν επιτυχής' except (CronosError, LoginError) as error: notification['error'] = error.value elif request.POST.get('eclass_lessons'): ''' Update the eclass lessons ''' try: student.get_eclass_lessons(request) notification['success'] = u'Η ανανέωση των μαθημάτων e-class ήταν επιτυχής' except (CronosError, LoginError) as error: notification['error'] = error.value return render_to_response('settings_accounts.html',{ 'notification': notification, 'eclass_credentials_form': eclass_credentials_form, 'webmail_form': webmail_form, 'eclass_lessons_form': eclass_lessons_form, 'declaration_form': declaration_form, 'grades_form': grades_form, }, context_instance = RequestContext(request))