forms.py 8.07 KB
Newer Older
1 2
import re
from django import forms
3 4 5
from .validators import (
    ece_id_is_not_031YY000, last_login_is_selected_from_provided_list, platform_exists_in_DB, platform_is_SLUB_or_exists_in_DB
)
6 7 8 9

# Create your forms here.
# https://docs.djangoproject.com/en/2.0/ref/forms/

10
# Each (programmatic) form from the ones defined below is based format-wise on the similarly named template form (e.g. LoginForm is based on the login_form of login.html, UserProfileEditForm is based on the user_profile_edit_form of user_profile_edit.html, etc.) and constraint-wise on the application models (see models.py).
11 12

class LoginForm(forms.Form):
13
    platform = forms.CharField(error_messages = {'required': 'Το όνομα πλατφόρμας πρέπει απαραίτητα να επιλεχθεί και να είναι μη-κενό!'},
14 15
                               validators = [platform_is_SLUB_or_exists_in_DB])
    username = forms.CharField(min_length = 8, max_length = 50,
16
                               error_messages = {'required': 'Το όνομα χρήστη πρέπει απαραίτητα να συμπληρωθεί!',
17
                                                 'min_length': 'Το όνομα χρήστη πρέπει να έχει τουλάχιστον 8 χαρακτήρες!',
18
                                                 'max_length': 'Το όνομα χρήστη δεν πρέπει να υπερβαίνει τους 50 χαρακτήρες!'})
19
    password = forms.CharField(min_length = 8, max_length = 50,
20
                               error_messages = {'required': 'Ο κωδικός πρόσβασης πρέπει απαραίτητα να συμπληρωθεί!',
21
                                                 'min_length': 'Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 8 χαρακτήρες!',
22 23
                                                 'max_length': 'Ο κωδικός πρόσβασης δεν πρέπει να υπερβαίνει τους 50 χαρακτήρες!'})

24 25 26 27 28 29 30 31 32 33 34 35 36 37
class UserProfileEditForm(forms.Form):
    first_name = forms.CharField(max_length = 50,
                                 error_messages = {'required': 'Το όνομα πρέπει απαραίτητα να συμπληρωθεί!',
                                                   'max_length': 'Το όνομα δεν πρέπει να υπερβαίνει τους 50 χαρακτήρες!'})
    last_name = forms.CharField(max_length = 50,
                                error_messages = {'required': 'Το επώνυμο πρέπει απαραίτητα να συμπληρωθεί!',
                                                  'max_length': 'Το επώνυμο δεν πρέπει να υπερβαίνει τους 50 χαρακτήρες!'})
    ece_id = forms.RegexField(required = False, max_length = 8, regex = '031[0-9]{5}',
                              # The empty value '' (empty string) becomes None in order to be interpreted as NULL in usermergeDB.
                              empty_value = None, error_messages = {'max_length': 'Ο αριθμός μητρώου πρέπει να είναι της μορφής '
                                                                                  '031YYSSS (YY: έτος, SSS: αύξων αριθμός)!',
                                                                    'invalid': 'Ο αριθμός μητρώου πρέπει να είναι της μορφής '
                                                                               '031YYSSS (YY: έτος, SSS: αύξων αριθμός)!'},
                              validators = [ece_id_is_not_031YY000])
38
    email = forms.EmailField(max_length = 100,
39
                             error_messages = {'required': 'Το ηλεκτρονικό ταχυδρομείο πρέπει απαραίτητα να συμπληρωθεί!',
40
                                               'max_length': 'Το ηλεκτρονικό ταχυδρομείο δεν πρέπει να υπερβαίνει τους 100 χαρακτήρες!',
41 42 43 44 45 46
                                               'invalid': 'Το ηλεκτρονικό ταχυδρομείο πρέπει να είναι της μορφής local-part@domain που\n'
                                                          'περιγράφεται στην ιστοσελίδα https://en.wikipedia.org/wiki/Email_address !'})

class UserProfileRecoveryForm(UserProfileEditForm):
    first_name = None
    last_name = None
47

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
class UserCredentialsImportForm(forms.Form):
    platform = forms.CharField(error_messages = {'required': 'Το όνομα πλατφόρμας πρέπει απαραίτητα να επιλεχθεί και να είναι μη-κενό!'},
                               validators = [platform_exists_in_DB])
    credentials_file = forms.FileField(max_length = 50,
                                       error_messages = {'required': 'Το αρχείο διαπιστευτηρίων πρέπει απαραίτητα να υποβληθεί και να '
                                                                     'έχει μη-κενό όνομα!',
                                                         'invalid': 'Η υποβολή του αρχείου διαπιστευτηρίων απέτυχε! Παρακαλούμε '
                                                                    'ελέγξτε την ορθότητα του\n'
                                                                    'τύπου κωδικοποίησης στη φόρμα προσθήκης διαπιστευτηρίων '
                                                                    'και δοκιμάστε ξανά!',
                                                         'missing': 'Η υποβολή του αρχείου διαπιστευτηρίων απέτυχε!',
                                                         'max_length': 'Το όνομα του αρχείου διαπιστευτηρίων δεν πρέπει '
                                                                       'να υπερβαίνει τους 50 χαρακτήρες!',
                                                         'empty': 'Το περιεχόμενο του αρχείου διαπιστευτηρίων δεν πρέπει να είναι κενό!'})

    def clean_credentials_file(self):
        credentials_file = self.cleaned_data['credentials_file']
        # Ensure that the credentials file is a plain text file whose size does not exceed 40KB.
        # Otherwise, close it and raise a ValidationError exception with the appropriate error message and code.
        if credentials_file.content_type != 'text/plain':
            credentials_file.close()
            raise forms.ValidationError('Το αρχείο διαπιστευτηρίων πρέπει να είναι ένα απλό αρχείο κειμένου!',
                                        code = 'credentials_file_content_type_is_not_plain_text')
        elif credentials_file.size > 1024 * 40:
            credentials_file.close()
            raise forms.ValidationError('Το μέγεθος του αρχείου διαπιστευτηρίων δεν πρέπει να υπερβαίνει τα 40KB!',
                                        code = 'credentials_file_size_exceeds_40KB')
        else:
            return credentials_file

class UserReportCreationForm(forms.Form):
    platform = forms.CharField(error_messages = {'required': 'Το όνομα πλατφόρμας πρέπει απαραίτητα να επιλεχθεί και να είναι μη-κενό!'},
                               validators = [platform_exists_in_DB])
    last_login = forms.CharField(error_messages = {'required': 'Η περίοδος αναζήτησης τελευταίας εισόδου πρέπει απαραίτητα να επιλεχθεί '
                                                               'και να είναι μη-κενή!'},
                                 validators = [last_login_is_selected_from_provided_list])