/profile/ : gestion des attributs multivalués (#86672) #109
|
@ -83,6 +83,7 @@ class Command(hobo_deploy.Command):
|
|||
'user_visible',
|
||||
'required',
|
||||
'searchable',
|
||||
'multiple',
|
||||
'disabled',
|
||||
'required_on_login',
|
||||
):
|
||||
|
|
|
@ -46,6 +46,7 @@ class AttributeDefinitionCreateForm(forms.ModelForm):
|
|||
'label',
|
||||
'name',
|
||||
'description',
|
||||
'kind',
|
||||
'required',
|
||||
'required_on_login',
|
||||
'asked_on_registration',
|
||||
|
@ -53,7 +54,7 @@ class AttributeDefinitionCreateForm(forms.ModelForm):
|
|||
'user_visible',
|
||||
'searchable',
|
||||
'disabled',
|
||||
'kind',
|
||||
'multiple',
|
||||
]
|
||||
|
||||
|
||||
|
@ -61,6 +62,10 @@ class AttributeDefinitionUpdateForm(AttributeDefinitionCreateForm):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
authn_info = utils.get_authn_information_from_idp()
|
||||
self.fields['multiple'].disabled = True
|
||||
self.fields['multiple'].help_text = _(
|
||||
'The "multiple" flag can only be set at attribute creation time.'
|
||||
)
|
||||
if self.instance.name == 'email' and authn_info.get('accept_email_authentication', False):
|
||||
self.fields['disabled'].disabled = True
|
||||
self.fields['disabled'].help_text = _(
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 3.2.18 on 2024-02-07 13:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('profile', '0005_auto_20210727_1633'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='attributedefinition',
|
||||
name='multiple',
|
||||
field=models.BooleanField(blank=True, default=False, verbose_name='multiple'),
|
||||
),
|
||||
]
|
|
@ -60,6 +60,7 @@ class AttributeDefinition(models.Model):
|
|||
('language', _('Language')),
|
||||
),
|
||||
)
|
||||
multiple = models.BooleanField(verbose_name=_('multiple'), blank=True, default=False)
|
||||
disabled = models.BooleanField(verbose_name=_('disabled'), default=False)
|
||||
order = models.PositiveIntegerField()
|
||||
last_update_timestamp = models.DateTimeField(auto_now=True)
|
||||
|
|
|
@ -70,15 +70,21 @@ def test_add_attribute(logged_app, admin_user, kind):
|
|||
page.form['label'] = 'test'
|
||||
page.form['name'] = 'test'
|
||||
page.form['description'] = 'test'
|
||||
page.form['kind'] = kind
|
||||
page.form['required'] = True
|
||||
page.form['required_on_login'] = True
|
||||
page.form['asked_on_registration'] = False
|
||||
page.form['user_editable'] = False
|
||||
page.form['user_visible'] = False
|
||||
page.form['disabled'] = False
|
||||
page.form['kind'] = kind
|
||||
page.form['multiple'] = True
|
||||
page.form.submit()
|
||||
assert models.AttributeDefinition.objects.filter(kind=kind).filter(name='test').count() == 1
|
||||
assert models.AttributeDefinition.objects.get(name='test').multiple is True
|
||||
|
||||
page = app.get('/profile/test/options', status=200)
|
||||
assert 'disabled' in page.pyquery('#id_multiple')[0].keys()
|
||||
assert 'The "multiple" flag can only be set at attribute creation time.' in page.text
|
||||
|
||||
|
||||
def test_edit_user_full_name_template(logged_app, admin_user, settings):
|
||||
|
|
|
@ -154,6 +154,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'title',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -165,6 +166,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': True,
|
||||
'name': 'first_name',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -176,6 +178,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': True,
|
||||
'name': 'last_name',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'email',
|
||||
|
@ -187,6 +190,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'email',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -198,6 +202,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'address',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -209,6 +214,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'zipcode',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -220,6 +226,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'city',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'phone_number',
|
||||
|
@ -231,6 +238,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'phone',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'fr_phone_number',
|
||||
|
@ -242,6 +250,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'fr_phone',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'string',
|
||||
|
@ -253,6 +262,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'country',
|
||||
'multiple': True,
|
||||
},
|
||||
{
|
||||
'kind': 'birthdate',
|
||||
|
@ -264,6 +274,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'user_editable': True,
|
||||
'asked_on_registration': False,
|
||||
'name': 'birthdate',
|
||||
'multiple': False,
|
||||
},
|
||||
{
|
||||
'kind': 'boolean',
|
||||
|
@ -276,6 +287,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
'asked_on_registration': True,
|
||||
'required_on_login': True,
|
||||
'name': 'cgu',
|
||||
'multiple': False,
|
||||
},
|
||||
]
|
||||
},
|
||||
|
@ -415,6 +427,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
|
|||
assert at.user_visible == field['user_visible']
|
||||
assert at.user_editable == field['user_editable']
|
||||
assert at.required_on_login == field.get('required_on_login', False)
|
||||
assert at.multiple == field['multiple']
|
||||
for at in Attribute.all_objects.all():
|
||||
assert [field for field in env['profile']['fields'] if field['name'] == at.name]
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -24,6 +25,7 @@
|
|||
"required": true,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -37,6 +39,7 @@
|
|||
"required": true,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -50,6 +53,7 @@
|
|||
"required": true,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -63,6 +67,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -76,6 +81,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -89,6 +95,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -102,6 +109,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -115,6 +123,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
},
|
||||
|
@ -128,6 +137,7 @@
|
|||
"required": false,
|
||||
"required_on_login": false,
|
||||
"searchable": false,
|
||||
"multiple": false,
|
||||
"user_editable": true,
|
||||
"user_visible": true
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue