diff --git a/abonapp/formfields.py b/abonapp/formfields.py index a25937f..4e61e3c 100644 --- a/abonapp/formfields.py +++ b/abonapp/formfields.py @@ -1,17 +1,24 @@ -from django.forms import Field +from django.forms import CharField +from django.forms.widgets import TextInput +from django.core.validators import RegexValidator, _lazy_re_compile from django.forms.fields import EMPTY_VALUES -#"From Django 1.8: The django.forms.util module has been renamed. Use django.forms.utils instead." -try: - from django.forms.utils import ValidationError -except ImportError: - from django.forms.util import ValidationError - +from django.forms.utils import ValidationError +from django.utils.translation import ugettext_lazy as _ from netaddr import EUI, AddrFormatError -class MACAddressField(Field): +mac_address_validator = RegexValidator( + _lazy_re_compile(r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'), + message=_('Enter a valid integer.'), + code='invalid', +) + + +class MACAddressField(CharField): + widget = TextInput + default_validators = [mac_address_validator] default_error_messages = { - 'invalid': 'Enter a valid MAC Address.', + 'invalid': _('Enter a valid MAC Address.'), } def clean(self, value): @@ -27,5 +34,3 @@ class MACAddressField(Field): except (ValueError, TypeError, AddrFormatError): raise ValidationError(self.error_messages['invalid']) return value - - diff --git a/abonapp/forms.py b/abonapp/forms.py index d0fe5f6..a253024 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -5,6 +5,7 @@ from django.contrib.auth.hashers import make_password from random import choice from string import digits, ascii_lowercase from . import models +from .formfields import MACAddressField def generate_random_username(length=6, chars=digits, split=2, delimiter=''): @@ -74,6 +75,19 @@ class AbonForm(forms.ModelForm): return acc +class Opt82Form(forms.ModelForm): + mac = MACAddressField(widget=forms.TextInput(attrs={'class': 'form-control', 'pattern': r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$', 'required': ''})) + class Meta: + model = models.Opt82 + fields = '__all__' + widgets = { + 'port': forms.NumberInput(attrs={'class': 'form-control', 'required': ''}) + } + + #def save(self, commit=True): + # super().save(commit=commit) + + class AbonGroupForm(forms.ModelForm): class Meta: model = models.AbonGroup diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html index 9c361eb..ef6160a 100644 --- a/abonapp/templates/abonapp/editAbon.html +++ b/abonapp/templates/abonapp/editAbon.html @@ -111,12 +111,30 @@

{% trans 'Technical information' %}

-
{% csrf_token %} + {% csrf_token %}
- +
- + {{ tech_form.mac }}{{ tech_form.mac.errors }} +
+
+ +
+ +
+ {{ tech_form.port }}{{ tech_form.port.errors }} +
+
+ +
+
+ +
diff --git a/abonapp/templates/abonapp/group_list.html b/abonapp/templates/abonapp/group_list.html index b56f13e..59fb7ed 100644 --- a/abonapp/templates/abonapp/group_list.html +++ b/abonapp/templates/abonapp/group_list.html @@ -45,7 +45,7 @@ {% endif %} - + diff --git a/abonapp/urls_abon.py b/abonapp/urls_abon.py index b13c1b3..23445e6 100644 --- a/abonapp/urls_abon.py +++ b/abonapp/urls_abon.py @@ -19,6 +19,7 @@ urlpatterns = [ url(r'^(?P\d+)/passport_view$', views.passport_view, name='passport_view'), url(r'^(?P\d+)/complete_service(?P\d+)$', views.complete_service, name='compl_srv'), url(r'^(?P\d+)/activate_service(?P\d+)$', views.activate_service, name='activate_service'), + url(r'^(?P\d+)/opt82$', views.opt82, name='opt82'), url(r'^(?P\d+)/unsubscribe_service(?P\d+)$', views.unsubscribe_service, name='unsubscribe_service'), diff --git a/abonapp/views.py b/abonapp/views.py index c5f17cb..fa13685 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -276,7 +276,8 @@ def abonhome(request, gid, uid): 'form': frm or forms.AbonForm(instance=abon, initial={'password': passw}), 'abon': abon, 'abon_group': abon_group, - 'ip': abon.ip_address + 'ip': abon.ip_address, + 'tech_form': forms.Opt82Form(instance=abon.opt82) }) else: return render(request, 'abonapp/viewAbon.html', { @@ -287,6 +288,27 @@ def abonhome(request, gid, uid): }) +@login_required +@mydefs.only_admins +def opt82(request, gid, uid): + try: + abon = models.Abon.objects.get(pk=uid) + if request.method == 'POST': + if abon.opt82 is None: + frm = forms.Opt82Form(request.POST) + else: + frm = forms.Opt82Form(request.POST, instance=abon.opt82) + if frm.is_valid(): + abon.opt82 = frm.save() + abon.save(update_fields=['opt82']) + else: + messages.error(request, _('fix form errors')) + + except models.Abon.DoesNotExist: + messages.error(request, _('User does not exist')) + return redirect('abonapp:abon_home', gid=gid, uid=uid) + + @mydefs.require_ssl def terminal_pay(request): from .pay_systems import allpay