added preferred email view, added possibility to delete ldap keys (when a None is provided as value

This commit is contained in:
Uwe Kamper 2015-12-01 00:32:51 +01:00
parent 2986d395b2
commit eacbb841a7
7 changed files with 60 additions and 8 deletions

View file

@ -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)
#

View file

@ -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,

View file

@ -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)

View file

@ -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 %}
<p>{% blocktrans %}The e-mail address that you want your c-base mail forwarded to.{% endblocktrans %}</p>
{% endblock %}
{% block form_fields %}
<form action="{% url 'preferred_email' %}" method="post" class="form-horizontal well">
{% csrf_token %}
{{ form|crispy }}
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
</div>
</div>
</form>
{% endblock form_fields %}

View file

@ -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"),

View file

@ -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,6 +226,9 @@ def set_ldap_field(request, form_type, field_names, template_name):
if form.is_valid():
for form_field, ldap_field in field_names:
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()
@ -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)

View file

@ -161,6 +161,7 @@ AUTH_LDAP_PROFILE_ATTR_MAP = {
"rfid": "rfid",
"macaddress": "macAddress",
"clabpin": "c-labPIN",
"preferred_email": "preferredEmail",
}
AUTHENTICATION_BACKENDS = (