def check_registration_email(regform, email, registration=None, management=False): """Check whether an email address is suitable for registration. :param regform: The registration form :param email: The email address :param registration: The existing registration (in case of modification) :param management: If it's a manager adding a new registration """ email = email.lower().strip() user = get_user_by_email(email) email_registration = regform.get_registration(email=email) user_registration = regform.get_registration(user=user) if user else None if registration is not None: if email_registration and email_registration != registration: return dict(status='error', conflict='email-already-registered') elif user_registration and user_registration != registration: return dict(status='error', conflict='user-already-registered') elif user and registration.user and registration.user != user: return dict(status='warning' if management else 'error', conflict='email-other-user', user=user.full_name) elif not user and registration.user: return dict(status='warning' if management else 'error', conflict='email-no-user', user=registration.user.full_name) elif user: return dict(status='ok', user=user.full_name, self=(not management and user == session.user), same=(user == registration.user)) email_err = validate_email_verbose(email) if email_err: return dict(status='error', conflict='email-invalid', email_error=email_err) if regform.require_user and (management or email != registration.email): return dict(status='warning' if management else 'error', conflict='no-user') else: return dict(status='ok', user=None) else: if email_registration: return dict(status='error', conflict='email-already-registered') elif user_registration: return dict(status='error', conflict='user-already-registered') elif user: return dict(status='ok', user=user.full_name, self=(not management and user == session.user), same=False) email_err = validate_email_verbose(email) if email_err: return dict(status='error', conflict='email-invalid', email_error=email_err) if regform.require_user: return dict(status='warning' if management else 'error', conflict='no-user') else: return dict(status='ok', user=None)
def check_registration_email(regform, email, registration=None, management=False): """Check whether an email address is suitable for registration. :param regform: The registration form :param email: The email address :param registration: The existing registration (in case of modification) :param management: If it's a manager adding a new registration """ email = email.lower().strip() user = get_user_by_email(email) email_registration = regform.get_registration(email=email) user_registration = regform.get_registration(user=user) if user else None extra_checks = values_from_signal( signals.event.before_check_registration_email.send( regform, email=email, registration=registration, management=management, user=user, user_registration=user_registration, email_registration=email_registration), as_list=True) if extra_checks: return sorted( extra_checks, key=lambda x: ['error', 'warning', 'ok'].index(x['status']))[0] if registration is not None: if email_registration and email_registration != registration: return dict(status='error', conflict='email-already-registered') elif user_registration and user_registration != registration: return dict(status='error', conflict='user-already-registered') elif user and registration.user and registration.user != user: return dict(status='warning' if management else 'error', conflict='email-other-user', user=user.full_name) elif not user and registration.user: return dict(status='warning' if management else 'error', conflict='email-no-user', user=registration.user.full_name) elif user: return dict(status='ok', user=user.full_name, self=(not management and user == session.user), same=(user == registration.user)) email_err = validate_email_verbose(email) if email_err: return dict(status='error', conflict='email-invalid', email_error=email_err) if regform.require_user and (management or email != registration.email): return dict(status='warning' if management else 'error', conflict='no-user') else: return dict(status='ok', user=None) else: if email_registration: return dict(status='error', conflict='email-already-registered') elif user_registration: return dict(status='error', conflict='user-already-registered') elif user: return dict(status='ok', user=user.full_name, self=(not management and user == session.user), same=False) email_err = validate_email_verbose(email) if email_err: return dict(status='error', conflict='email-invalid', email_error=email_err) if regform.require_user: return dict(status='warning' if management else 'error', conflict='no-user') else: return dict(status='ok', user=None)