POC Campus Condorcet : corrections sur l'application d'inscription

This commit is contained in:
Paul Marillonnet 2017-09-26 20:22:10 +02:00
parent 15acf06d9d
commit d2b9a94c93
4 changed files with 85 additions and 15 deletions

View File

@ -1,7 +1,9 @@
from django.utils.translation import ugettext_lazy as _
from django import forms
from .utils import ldap_get_unites, ldap_get_etablissements, sso_attributes, \
sso_select_attributes, sso_tupled_attributes, sso_strict_readonly_attributes
sso_select_attributes, sso_tupled_attributes, \
sso_strict_readonly_attributes, sso_needed_description_attributes, \
ldap_get_description_etablissements, ldap_get_description_unites
AFFILIATION_CHOICES = (
@ -86,12 +88,34 @@ class RegistrationForm(forms.Form):
self.fields[field].widget.attrs['readonly'] = True
if kwargs['initial'].get('yet_member', '') is False:
extra_affiliation = (('affiliate', _('Affiliate')),)
extra_affiliation = (('affiliate', 'affiliate'),)
else:
extra_affiliation = (('member', _('Member')),)
extra_affiliation = (('member', 'member'),)
self.fields['ep_affiliation'].choices = extra_affiliation
self.fields['ep_affiliation'].widget.attrs['readonly'] = True
code_etablissement = kwargs['initial'].get('s_etablissement', '')
if code_etablissement != '':
self.fields['s_etablissement_description'].initial = ldap_get_description_etablissements(code_etablissement)
self.fields['s_etablissement_description'].widget.attrs['readonly'] = True
code_unite = kwargs['initial'].get('s_entite_affectation_principale', '')
if code_unite != '':
self.fields['s_entite_affectation_principale_description'].initial = ldap_get_description_unites(code_unite)
#User shouldn't be able to define this field
self.fields['s_entite_affectation_principale_description'].widget.attrs['readonly'] = True
code_hote_etablissement = kwargs['initial'].get('hote_etablissement', '')
if code_hote_etablissement != '':
self.fields['hote_etablissement'].choices = ((code_hote_etablissement, ldap_get_description_etablissements(code_hote_etablissement)),)
self.fields['hote_etablissement'].widget.attrs['readonly'] = True
self.fields['hote_unite'].widget.attrs['readonly'] = True
code_hote_unite = kwargs['initial'].get('hote_unite', '')
if code_hote_unite != '':
self.fields['hote_unite'].choices = ((code_hote_unite, ldap_get_description_unites(code_hote_unite)),)
#User shouldn't be able to define this field
self.fields['hote_unite'].widget.attrs['readonly'] = True
self.fields['hote_etablissement'].widget.attrs['readonly'] = True
nom = forms.CharField(max_length=100, label=_("Last name"))
prenom = forms.CharField(max_length=100, label=_("First name"))
email = forms.CharField(max_length=100, label=_("Email address"))
@ -117,11 +141,15 @@ class RegistrationForm(forms.Form):
# supannEtablissement
s_etablissement = forms.CharField(
required=False, max_length=100, label=_("Institution"))
invite_unite = forms.CharField(
required=False, label=_("Research entity or unit"), initial='')
s_etablissement_description = forms.CharField(
required=False, max_length=100, label=_("Institution"))
#invite_unite = forms.CharField(
# required=False, label=_("Research entity or unit"), initial='')
# supannEntiteAffectationPrincipale
s_entite_affectation_principale = forms.CharField(
required=False, max_length=100, label=_("Assignment unit"))
required=False, label=_("Unit"), initial='')
s_entite_affectation_principale_description = forms.CharField(
required=False, label=_("Unit"), initial='')
# supannEntiteAffectation
s_entite_affectation = forms.CharField(
required=False, max_length=100, label=_("Assignment units"))
@ -139,6 +167,12 @@ class RegistrationForm(forms.Form):
hote_unite = forms.ChoiceField(
required=False, choices=ldap_get_unites(),
label=_("Research entity or unit"), initial=None)
hote_etablissement_description = forms.ChoiceField(
required=False, choices=ldap_get_etablissements(),
label=_("Institution"), initial=None)
hote_unite_description = forms.ChoiceField(
required=False, choices=ldap_get_unites(),
label=_("Research entity or unit"), initial=None)
hote_commentaire = forms.CharField(
widget=forms.Textarea(), max_length=999,
label=_("Comments to your host"), required=False)

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('saml', '0004_supannuser_invite_unite'),
]
operations = [
migrations.RemoveField(
model_name='supannuser',
name='invite_unite',
),
]

View File

@ -20,7 +20,7 @@ class SupAnnUser(AbstractUser):
s_entite_affectation = models.CharField(max_length=100, default="")
s_emp_corps = models.CharField(max_length=100, default="")
s_etablissement = models.CharField(max_length=100, default="")
invite_unite = models.CharField(max_length=100, default="")
#invite_unite = models.CharField(max_length=100, default="")
s_liste_rouge = models.BooleanField(default=False)
REQUIRED_FIELDS = []

View File

@ -1,6 +1,7 @@
import ldap
import json
import logging
import unicodedata
from urllib2 import build_opener, urlopen, HTTPHandler, Request, HTTPError
from random import randint
@ -19,7 +20,7 @@ sso_attributes = [
'prenom', 'nom', 'email', 'ep_principal_name', 'ep_primary_affiliation',
'ep_affiliation', 's_etablissement', 's_entite_affectation_principale',
's_entite_affectation', 's_emp_corps', 'hote_unite', 'hote_etablissement',
's_liste_rouge', 'hote_commentaire', 'invite_unite']
's_liste_rouge', 'hote_commentaire']
sso_select_attributes = [
'ep_primary_affiliation', 'hote_unite', 'hote_etablissement']
@ -28,7 +29,10 @@ sso_tupled_attributes = {
's_emp_corps': 'EMP_CORPS_CHOICES'
}
sso_strict_readonly_attributes = ['invite_unite']
sso_needed_description_attributes = [
's_etablissement', 'ep_primary_affiliation']
sso_strict_readonly_attributes = ['s_entite_affectation_principale']
supann_host_role_attribute = 'supannRoleGenerique'
supann_host_role_value = '{SUPANN}R10' # 'Responsable de mission'
@ -38,7 +42,7 @@ def sorting_key(tuple_input):
if type(tuple_input[1]) is unicode:
return tuple_input[1].encode('utf-8')
else:
return unicode(tuple_input[1], 'utf-8')
return unicodedata.normalize('NFD', unicode(tuple_input[1], 'utf-8'))
def render_message(request, message):
"""Renders a simple message to a base template"""
@ -81,17 +85,32 @@ def ldap_init():
def ldap_get_etablissements():
"""Used to fill the choices in hote_etablissemnt form ChoiceField."""
return ldap_get_attribute_from_subtree_nodes(
structures_base, '(objectClass=supannOrg)', 'ou')
structures_base, '(objectClass=supannOrg)', 'supannEtablissement')
def ldap_get_code_etablissements():
return ldap_get_attribute_from_subtree_nodes(
structures_base, '(objectClass=supannOrg)', 'supannEtablissement')
def ldap_get_description_etablissements(code):
etablissements = ldap_get_attribute_from_subtree_nodes(
structures_base, '(supannEtablissement=%s)'%code, 'description')
if len(etablissements) == 2:
return etablissements[-1][0]
else:
return ''
def ldap_get_unites():
"""Used to fill the choices in hote_unite form ChoiceField."""
return ldap_get_attribute_from_subtree_nodes(
structures_base, '(supannTypeEntite=*)', 'ou')
structures_base, '(!(objectClass=supannOrg))', 'supannCodeEntite')
def ldap_get_description_unites(code):
unites = ldap_get_attribute_from_subtree_nodes(
structures_base, '(supannCodeEntite=%s)'%code, 'description')
if len(unites) == 2:
return unites[-1][0]
else:
return ''
def ldap_get_affectations():
"""
@ -121,9 +140,8 @@ def ldap_get_attribute_from_subtree_nodes(subtree_base, filter, attribute):
attribute_list = node_data.get(attribute)
if attribute_list:
attribute_value = attribute_list[0] # No need for multi-valued attributes
# at the moment
description = node_data.get('description', [_('No description')])[0]
choices.append((attribute_value, description))
description = node_data.get('description', [_('No description')])[0]
choices.append((attribute_value, description))
choices.sort(key=sorting_key)
return choices