diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index 79ab38bf..aed0c97a 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -1,7 +1,7 @@ from flask_wtf.form import FlaskForm from wtforms.fields.core import SelectField, SelectMultipleField from wtforms.fields.html5 import DateField, DecimalField, URLField -from wtforms.fields.simple import PasswordField, SubmitField, StringField +from wtforms.fields.simple import PasswordField, SubmitField, StringField, BooleanField from wtforms.validators import ( Email, DataRequired, @@ -89,25 +89,28 @@ class EditProjectForm(FlaskForm): name = StringField(_("Project name"), validators=[DataRequired()]) password = StringField(_("Private code"), validators=[DataRequired()]) contact_email = StringField(_("Email"), validators=[DataRequired(), Email()]) - logging_preferences = SelectField( - _("Logging Preferences"), - choices=LoggingMode.choices(), - coerce=LoggingMode.coerce, - default=LoggingMode.default(), - validators=[DataRequired()], - ) + project_history = BooleanField(_("Enable project history")) + ip_recording = BooleanField(_("Use IP tracking for project history")) def save(self): """Create a new project with the information given by this form. Returns the created instance """ + if not self.project_history.data: + new_logging_preference = LoggingMode.DISABLED + else: + if self.ip_recording.data: + new_logging_preference = LoggingMode.RECORD_IP + else: + new_logging_preference = LoggingMode.ENABLED + project = Project( name=self.name.data, id=self.id.data, password=generate_password_hash(self.password.data), contact_email=self.contact_email.data, - logging_preference=self.logging_preferences.data, + logging_preference=new_logging_preference, ) return project @@ -120,7 +123,16 @@ class EditProjectForm(FlaskForm): project.password = generate_password_hash(self.password.data) project.contact_email = self.contact_email.data - project.logging_preference = self.logging_preferences.data + + if not self.project_history.data: + new_logging_preference = LoggingMode.DISABLED + else: + if self.ip_recording.data: + new_logging_preference = LoggingMode.RECORD_IP + else: + new_logging_preference = LoggingMode.ENABLED + + project.logging_preference = new_logging_preference return project @@ -139,6 +151,14 @@ class ProjectForm(EditProjectForm): password = PasswordField(_("Private code"), validators=[DataRequired()]) submit = SubmitField(_("Create the project")) + def save(self): + # WTForms Boolean Fields don't insert the default value when the + # request doesn't include any value the way that other fields do, + # so we'll manually do it here + self.project_history.data = LoggingMode.default() != LoggingMode.DISABLED + self.ip_recording.data = LoggingMode.default() == LoggingMode.RECORD_IP + return super().save() + def validate_id(form, field): form.id.data = slugify(field.data) if (form.id.data == "dashboard") or Project.query.get(form.id.data): diff --git a/ihatemoney/static/js/ihatemoney.js b/ihatemoney/static/js/ihatemoney.js index 8a7145df..036545e8 100644 --- a/ihatemoney/static/js/ihatemoney.js +++ b/ihatemoney/static/js/ihatemoney.js @@ -4,47 +4,4 @@ function selectCheckboxes(value){ for(var i = 0; i < els.length; i++){ els[i].checked = value; } -} - -function updateCheckBoxesFromPrivacySelect() { - var history_checkbox = document.getElementById('logging_enabled'); - var record_ip_checkbox = document.getElementById('record_ip'); - var record_ip_checkbox_text = document.getElementById("record_ip_label"); - var select_input = document.getElementById("logging_preferences"); - - if (select_input.selectedIndex === 0) { - history_checkbox.checked = false; - record_ip_checkbox.checked = false; - record_ip_checkbox.disabled = true; - record_ip_checkbox_text.classList.add("text-muted"); - } else if (select_input.selectedIndex === 1 || select_input.selectedIndex === 2) { - history_checkbox.checked = true; - record_ip_checkbox.disabled = false; - record_ip_checkbox_text.classList.remove("text-muted"); - if (select_input.selectedIndex === 2) { - record_ip_checkbox.checked = true - } - } -} - -function updatePrivacySelectFromCheckBoxes() { - var history_checkbox = document.getElementById('logging_enabled'); - var record_ip_checkbox = document.getElementById('record_ip'); - var record_ip_checkbox_text = document.getElementById("record_ip_label"); - var select_input = document.getElementById("logging_preferences"); - - if (!history_checkbox.checked) { - record_ip_checkbox.checked = false; - record_ip_checkbox.disabled = true; - record_ip_checkbox_text.classList.add("text-muted"); - select_input.selectedIndex = 0 - } else { - record_ip_checkbox.disabled = false; - record_ip_checkbox_text.classList.remove("text-muted"); - if (record_ip_checkbox.checked){ - select_input.selectedIndex = 2 - } else { - select_input.selectedIndex = 1 - } - } } \ No newline at end of file diff --git a/ihatemoney/templates/forms.html b/ihatemoney/templates/forms.html index 7401a80b..33a283f2 100644 --- a/ihatemoney/templates/forms.html +++ b/ihatemoney/templates/forms.html @@ -20,6 +20,16 @@ {% endmacro %} +{% macro checkbox(field) %} +