diff --git a/account/cbase_members.py b/account/cbase_members.py index 18ec7b3..b9ef86e 100644 --- a/account/cbase_members.py +++ b/account/cbase_members.py @@ -51,12 +51,17 @@ class MemberValues(object): return value def set(self, key, value): + if value == None: + self._new[key] = [None] + return + converted_value = value if isinstance(value, bool): if value == True: converted_value = 'TRUE' else: converted_value = 'FALSE' + self._new[key] = [converted_value.encode('latin-1')] def save(self): @@ -76,12 +81,17 @@ class MemberValues(object): action = ldap.MOD_ADD mod_attrs.append((action, '%s' % new_key, new_value )) continue + if self._old[new_key][0] != None and new_value == [None]: + action = ldap.MOD_DELETE + mod_attrs.append((action, '%s' % new_key, [])) + continue # Set the attribute and wait for the LDAP server to complete. if self._old[new_key][0] != new_value[0]: action = ldap.MOD_REPLACE mod_attrs.append((action, '%s' % new_key, new_value )) continue + print "modattrs: ",mod_attrs result = l.modify_s(dn, mod_attrs) # diff --git a/account/forms.py b/account/forms.py index 52eecb1..3d9ae14 100755 --- a/account/forms.py +++ b/account/forms.py @@ -146,6 +146,12 @@ class CLabPinForm(forms.Form): help_text=_('Numerical only, 4 to 8 digits')) +class PreferredEmailForm(forms.Form): + preferred_email = forms.CharField(max_length=255, required=False, + label = _('Preferred e-mail'), + help_text=_("Forward my mail to this address.")) + + class AdminForm(forms.Form): username = forms.ChoiceField(choices=[]) password1 = forms.CharField(max_length=255, widget=forms.PasswordInput, diff --git a/account/models.py b/account/models.py index a8f38c2..72984e0 100644 --- a/account/models.py +++ b/account/models.py @@ -5,35 +5,39 @@ from account.signals import create_profile, delete_profile class UserProfile(models.Model): user = models.OneToOneField(User, editable=False) - uid = models.CharField("User-ID", + uid = models.CharField(verbose_name="User-ID", max_length=8, null=True, default=None) - sippin = models.CharField("SIP PIN", + sippin = models.CharField(verbose_name="SIP PIN", max_length=255, null=True, blank=True, default=None) - gastropin = models.CharField("Gastro PIN", + gastropin = models.CharField(verbose_name="Gastro PIN", max_length=255, null=True, blank=True, default=None) - rfid = models.CharField("RFID", + rfid = models.CharField(verbose_name="RFID", max_length=255, null=True, blank=True, default=None) - macaddress = models.CharField("MAC-Address", + macaddress = models.CharField(verbose_name="MAC-Address", max_length=255, null=True, blank=True, default=None) - clabpin = models.CharField("c-lab PIN", + clabpin = models.CharField(verbose_name="c-lab PIN", max_length=255, null=True, blank=True, default=None) + preferred_email = models.CharField(verbose_name="preferred e-mail address", + max_length=1024, + null=True, + default=None) is_member = models.BooleanField(default=False, editable=False) is_ldap_admin = models.BooleanField(default=False, editable=False) is_circle_member = models.BooleanField(default=False, editable=False) diff --git a/account/templates/preferred_email.html b/account/templates/preferred_email.html new file mode 100644 index 0000000..a8beca6 --- /dev/null +++ b/account/templates/preferred_email.html @@ -0,0 +1,22 @@ +{% extends "form_base.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block form_title %}{% trans "Preferred e-mail"%}{% endblock %} + +{% block form_description %} +

{% blocktrans %}The e-mail address that you want your c-base mail forwarded to.{% endblocktrans %}

+{% endblock %} + +{% block form_fields %} +
+ {% csrf_token %} + {{ form|crispy }} + +
+
+ +
+
+
+{% endblock form_fields %} \ No newline at end of file diff --git a/account/urls.py b/account/urls.py index 1a67e1f..52882ae 100644 --- a/account/urls.py +++ b/account/urls.py @@ -12,6 +12,7 @@ urlpatterns = patterns( url(r'^password/$', 'account.views.password', name='password'), url(r'^sippin/$', 'account.views.sippin', name='sippin'), url(r'^clabpin/$', 'account.views.clabpin', name='clabpin'), + url(r'^preferred_email/$', 'account.views.preferred_email', name='preferred_email'), url(r'^admin/$', 'account.views.admin', name='admin'), url(r'^memberstatus/$', 'account.views.memberstatus', name='memberstatus'), url(r'^$', 'account.views.home', name="home"), diff --git a/account/views.py b/account/views.py index 7eebb8d..4bfd832 100644 --- a/account/views.py +++ b/account/views.py @@ -20,7 +20,7 @@ from django.shortcuts import render from django.utils.translation import ugettext as _ from forms import GastroPinForm, WlanPresenceForm, LoginForm, PasswordForm, \ - RFIDForm, NRF24Form, SIPPinForm, CLabPinForm, AdminForm + RFIDForm, NRF24Form, SIPPinForm, CLabPinForm, AdminForm, PreferredEmailForm from cbase_members import retrieve_member, MemberValues from password_encryption import * @@ -226,7 +226,10 @@ def set_ldap_field(request, form_type, field_names, template_name): if form.is_valid(): for form_field, ldap_field in field_names: - member.set(ldap_field, form.cleaned_data[form_field]) + if form.cleaned_data[form_field] == '': + member.set(ldap_field, None) + else: + member.set(ldap_field, form.cleaned_data[form_field]) initial[form_field] = member.get(ldap_field) member.save() new_form = form_type(initial=initial) @@ -256,6 +259,11 @@ def rfid(request): def nrf24(request): return set_ldap_field(request, NRF24Form, [('nrf24', 'nrf24')], 'nrf24.html') +@login_required +def preferred_email(request): + return set_ldap_field(request, PreferredEmailForm, [('preferred_email', 'preferredEmail')], + 'preferred_email.html') + @login_required def admin(request): admin_member = retrieve_member(request) diff --git a/cbmi/settings.py b/cbmi/settings.py index 82dab11..52e3e2d 100644 --- a/cbmi/settings.py +++ b/cbmi/settings.py @@ -161,6 +161,7 @@ AUTH_LDAP_PROFILE_ATTR_MAP = { "rfid": "rfid", "macaddress": "macAddress", "clabpin": "c-labPIN", + "preferred_email": "preferredEmail", } AUTHENTICATION_BACKENDS = (