From 509c8bb1bbf0ecefe41509ca7436f15daef65364 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Thu, 27 Feb 2025 21:53:03 -0300 Subject: [PATCH] invite settings form --- vpn_invite/forms.py | 202 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 vpn_invite/forms.py diff --git a/vpn_invite/forms.py b/vpn_invite/forms.py new file mode 100644 index 0000000..25d74c6 --- /dev/null +++ b/vpn_invite/forms.py @@ -0,0 +1,202 @@ +from crispy_forms.templatetags.crispy_forms_field import css_class +from django import forms +from .models import InviteSettings +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Row, Column, Submit, HTML + + +class InviteSettingsForm(forms.ModelForm): + class Meta: + model = InviteSettings + fields = [ + 'default_password', + 'enforce_random_password', + 'required_user_level', + 'random_password_length', + 'random_password_complexity', + 'invite_expiration', + 'download_1_label', + 'download_2_label', + 'download_3_label', + 'download_4_label', + 'download_5_label', + 'download_1_url', + 'download_2_url', + 'download_3_url', + 'download_4_url', + 'download_5_url', + 'download_1_enabled', + 'download_2_enabled', + 'download_3_enabled', + 'download_4_enabled', + 'download_5_enabled', + 'download_instructions', + 'invite_url', + 'invite_text_body', + 'invite_email_subject', + 'invite_email_body', + 'invite_email_enabled', + 'invite_whatsapp_body', + 'invite_whatsapp_enabled', + ] + + def __init__(self, *args, **kwargs): + super(InviteSettingsForm, self).__init__(*args, **kwargs) + + # Define boolean dropdown choices + bool_choices = [(True, 'Enabled'), (False, 'Disabled')] + bool_coerce = lambda x: True if x == 'True' else False + + # Override the five download_enabled fields to use a dropdown + for field_name in [ + 'download_1_enabled', + 'download_2_enabled', + 'download_3_enabled', + 'download_4_enabled', + 'download_5_enabled' + ]: + self.fields[field_name] = forms.TypedChoiceField( + choices=bool_choices, + coerce=bool_coerce, + widget=forms.Select(), + initial=self.instance.__dict__.get(field_name, True) if self.instance and self.instance.pk else True, + label='Status' + ) + self.fields['download_1_url'].label = 'URL' + self.fields['download_2_url'].label = 'URL' + self.fields['download_3_url'].label = 'URL' + self.fields['download_4_url'].label = 'URL' + self.fields['download_5_url'].label = 'URL' + self.fields['download_1_label'].label = 'Text' + self.fields['download_2_label'].label = 'Text' + self.fields['download_3_label'].label = 'Text' + self.fields['download_4_label'].label = 'Text' + self.fields['download_5_label'].label = 'Text' + self.fields['download_instructions'].label = 'Web Page Instructions' + self.fields['invite_email_subject'].label = 'Email Subject' + self.fields['invite_email_body'].label = 'Email Message' + self.fields['invite_email_enabled'].label = 'Email Enabled' + self.fields['invite_whatsapp_body'].label = 'WhatsApp Message' + self.fields['invite_whatsapp_enabled'].label = 'WhatsApp Enabled' + self.fields['invite_text_body'].label = 'Text Message' + + # Initialize Crispy Forms helper + self.helper = FormHelper() + self.helper.form_method = 'post' + + # Define form layout + self.helper.layout = Layout( + Row( + Column( + HTML("

General Settings

"), + Row( + Column('invite_url', css_class='form-group col-md-6 mb-0'), + Column('required_user_level', css_class='form-group col-md-6 mb-0'), + ), + Row( + Column(css_class='form-group col-md-6 mb-0'), + Column(css_class='form-group col-md-6 mb-0'), + ), + + Row( + Column('default_password', css_class='form-group col-md-4 mb-0'), + Column('enforce_random_password', css_class='form-group col-md-4 mb-0'), + css_class='form-row' + ), + + Row( + + Column('random_password_length', css_class='form-group col-md-4 mb-0'), + Column('random_password_complexity', css_class='form-group col-md-4 mb-0'), + css_class='form-row' + ), + Row( + Column('invite_expiration', css_class='form-group col-md-4 mb-0'), + css_class='form-row' + ), + HTML("

Download Buttons

"), + Row( + Column('download_1_label', css_class='form-group col-md-3 mb-0'), + Column('download_1_url', css_class='form-group col-md-6 mb-0'), + Column('download_1_enabled', css_class='form-group col-md-3 mb-0'), + css_class='form-row' + ), + Row( + Column('download_2_label', css_class='form-group col-md-3 mb-0'), + Column('download_2_url', css_class='form-group col-md-6 mb-0'), + Column('download_2_enabled', css_class='form-group col-md-3 mb-0'), + css_class='form-row' + ), + Row( + Column('download_3_label', css_class='form-group col-md-3 mb-0'), + Column('download_3_url', css_class='form-group col-md-6 mb-0'), + Column('download_3_enabled', css_class='form-group col-md-3 mb-0'), + css_class='form-row' + ), + Row( + Column('download_4_label', css_class='form-group col-md-3 mb-0'), + Column('download_4_url', css_class='form-group col-md-6 mb-0'), + Column('download_4_enabled', css_class='form-group col-md-3 mb-0'), + css_class='form-row' + ), + Row( + Column('download_5_label', css_class='form-group col-md-3 mb-0'), + Column('download_5_url', css_class='form-group col-md-6 mb-0'), + Column('download_5_enabled', css_class='form-group col-md-3 mb-0'), + css_class='form-row' + ), + + Row( + Column( + Submit('submit', 'Save', css_class='btn btn-success'), + HTML(' Back '), + css_class='col-md-12' + ), + css_class='form-row' + ), + + css_class='col-xl-6'), + + Column( + HTML("

Message templates

"), + Column( css_class='form-group col-md-12 mb-0'), + + + + Row( + Column('download_instructions', css_class='form-group col-md-12 mb-0'), + css_class='form-row' + ), + HTML("
"), + + Row( + + Column(HTML("
Email Message Template
"), css_class='form-group col-md-12 mb-0'), + Column('invite_email_subject', css_class='form-group col-md-12 mb-0'), + Column('invite_email_body', css_class='form-group col-md-12 mb-0'), + css_class='form-row' + ), + Row( + Column('invite_email_enabled', css_class='form-group col-md-6 mb-0'), + css_class='form-row' + ), + HTML("
"), + Row( + Column(HTML("
WhatsApp Message Template
"), css_class='form-group col-md-12 mb-0'), + Column('invite_whatsapp_body', css_class='form-group col-md-12 mb-0'), + Column('invite_whatsapp_enabled', css_class='form-group col-md-12 mb-0'), + css_class='form-row' + ), + HTML("
"), + Row( + + Column(HTML("
Text Message Template
"), css_class='form-group col-md-12 mb-0'), + Column('invite_text_body', css_class='form-group col-md-12 mb-0'), + css_class='form-row' + ), + css_class='col-xl-6'), + + + css_class='row'), + + )