forms.py 5.43 KB
Newer Older
stef's avatar
stef committed
1 2
from django import forms
from django.conf import settings
3
from django.utils.translation import ugettext_lazy as _
4 5
from haystack.forms import SearchForm
from haystack.query import SearchQuerySet
6
from bt.models import Violation, COUNTRIES, RESOURCES, TYPES, MEDIA
stef's avatar
stef committed
7
from bt.multifile import MultiFileField
8
from operator import itemgetter
stef's avatar
stef committed
9
from captcha.fields import CaptchaField
stef's avatar
stef committed
10 11

class AdvancedEditor(forms.Textarea):
Okhin's avatar
Okhin committed
12 13
    class Media:
        js = (settings.MEDIA_URL+'/js/tinymce/tiny_mce.js',)
stef's avatar
stef committed
14

Okhin's avatar
Okhin committed
15 16 17 18 19
        def __init__(self, language=None, attrs=None):
            self.language = language or settings.LANGUAGE_CODE[:2]
            self.attrs = {'class': 'advancededitor'}
            if attrs: self.attrs.update(attrs)
            super(AdvancedEditor, self).__init__(attrs)
stef's avatar
stef committed
20

21
class AddViolation(forms.Form):
Okhin's avatar
Okhin committed
22 23 24 25
    resource_name = forms.CharField(required=True, max_length=4096, label=_('Please specify the affected resource'), help_text=_("What service or site, or person is unavailable or seems artificially slowed down. e.g. VoIP, p2p, filesharing, specific websites, etc."))
    country = forms.ChoiceField(required=True, choices=(('',''),)+tuple(sorted(COUNTRIES,key=itemgetter(1))), label=_("Country"), help_text=_('EU member state where the restriction is reported.'))
    operator = forms.CharField(required=True, max_length=256, label=_("Operator"), help_text=_('The ISP or operator providing the Internet service.'))
    contract = forms.CharField(required=True, max_length=256, label=_("Contract"), help_text=_('The specific contract at the ISP provider. (please be as specific as possible)'))
Okhin's avatar
Okhin committed
26
    media = forms.ChoiceField(required=True, choices=tuple(sorted(MEDIA,key=itemgetter(1))), label=_('Is the Internet connection over mobile or fixed line?'))
Okhin's avatar
Okhin committed
27 28 29 30 31
    comment = forms.CharField(required=True, widget=AdvancedEditor(), label=_('Please describe the symptoms you are experiencing.'))
    email = forms.EmailField(required=True, label=_('Email (set this to enable saving)'), help_text=_("We need your email to validate your report. Your email address is obligatory, but we will never use your personal data for anything else than checking the submission. (see next for an optional exception)"))
    consent = forms.BooleanField(required=False, label=_("I want to help further"), help_text=_("We need your consent to contact you for clarifications regarding your report. This is optional, but helps us improve the quality of the reports. Thanks!"))
    nick = forms.CharField(required=False, label=_("Name or nickname"), help_text=_("We need some name to display that instead of an email address."))
    attachments = MultiFileField(required=False, label=_("Attach screenshot, document or any other relevant information."))
Okhin's avatar
Okhin committed
32 33
    resource = forms.ChoiceField(required=False, choices=tuple(sorted(RESOURCES,key=itemgetter(1))), label=_('What is the affected resource type. (optional)'))
    type = forms.ChoiceField(required=True, choices=tuple(sorted(TYPES,key=itemgetter(1))), label=_('What types of resctriction happens in this case?'))
Okhin's avatar
Okhin committed
34 35
    temporary = forms.BooleanField(required=False, label=_('Is the restriction only temporary, e.g. due to network overload? (optional)'))
    loophole = forms.BooleanField(required=False, label=_('Is there another offer provided by this Operator which removes this restriction? (optional)'))
36
    contractual = forms.BooleanField(required=False, label=_('The restriction is described in the subscribers contract.'))
Okhin's avatar
Okhin committed
37 38
    contract_excerpt = forms.CharField(required=False, widget=AdvancedEditor(), label=_('Please copy the relevant section describing the restriction from the user contract. (optional)'))
    captcha = CaptchaField(label=_("In order to protect against spam, please fill in the result of the following calculation. (note the + and the * are somewhat confusing)"))
39

40
class SearchViolation(SearchForm):
Okhin's avatar
Okhin committed
41 42 43 44
    country = forms.ChoiceField(required=False, choices=(('',''),)+tuple(sorted(COUNTRIES,key=itemgetter(1))), label=_("Country"), help_text=_('EU member state where the restriction is reported.'))
    operator = forms.CharField(required=False, max_length=256, label=_("Operator"), help_text=_('The ISP or operator providing the Internet service.'))
    contract = forms.CharField(required=False, max_length=256, label=_("Contract"), help_text=_('The specific contract at the ISP provider. (please be as specific as possible)'))
    media = forms.ChoiceField(required=False, choices=(('',''),)+tuple(sorted(MEDIA,key=itemgetter(1))), label=_('Is the Internet connection over mobile or fixed line?'))
45

Okhin's avatar
Okhin committed
46 47 48
    def search(self):
        # By default, the search field is q. So let's check if it's empty
        if not self.cleaned_data['q']:
49
            sqs = SearchQuerySet().all().exclude(old=True)
Okhin's avatar
Okhin committed
50
        else:
51
            sqs = super(SearchViolation, self).search().exclude(old=True)
52

Okhin's avatar
Okhin committed
53 54
        if not self.is_valid():
            return self.no_query_found()
55

Okhin's avatar
Okhin committed
56 57
        if self.cleaned_data['operator']:
            sqs = sqs.filter(operator__icontains=self.cleaned_data['operator'])
58

Okhin's avatar
Okhin committed
59 60
        if self.cleaned_data['contract']:
            sqs = sqs.filter(contract__icontains=self.cleaned_data['contract'])
61

Okhin's avatar
Okhin committed
62 63
        if self.cleaned_data['media']:
            sqs = sqs.filter(media=self.cleaned_data['media'])
64

Okhin's avatar
Okhin committed
65 66
        if self.cleaned_data['country']:
            sqs = sqs.filter(country=self.cleaned_data['country'])
67

Okhin's avatar
Okhin committed
68
        return sqs
Okhin's avatar
Okhin committed
69 70 71

class QuickSearchViolation(forms.Form):
    query = forms.CharField(required='True', max_length=256, label=_("Search"), help_text=_('Search for an existing violation'))