From 0cdb11ae14c0722e1aa7c6f55165568f0a37cd24 Mon Sep 17 00:00:00 2001
From: kaiyou <pierre@jaury.eu>
Date: Wed, 11 Dec 2019 16:19:34 +0100
Subject: [PATCH] Add a contact info field for users

---
 hiboo/account/forms.py                        |  6 +++++
 hiboo/account/settings.py                     | 14 ++++++++++
 hiboo/account/templates/account_contact.html  |  3 +++
 hiboo/models.py                               |  1 +
 .../versions/ebc103f8bc5e_add_contact_info.py | 26 +++++++++++++++++++
 5 files changed, 50 insertions(+)
 create mode 100644 hiboo/account/templates/account_contact.html
 create mode 100644 migrations/versions/ebc103f8bc5e_add_contact_info.py

diff --git a/hiboo/account/forms.py b/hiboo/account/forms.py
index 141d55fd..709181a8 100644
--- a/hiboo/account/forms.py
+++ b/hiboo/account/forms.py
@@ -28,3 +28,9 @@ class PasswordForm(flask_wtf.FlaskForm):
     password2 = fields.PasswordField(_('Confirm new password'),
         [validators.DataRequired(), validators.EqualTo('password')])
     submit = fields.SubmitField(_('Change password'))
+
+
+class ContactForm(flask_wtf.FlaskForm):
+    email = fields.StringField(_("Email address"), [validators.Email()])
+    matrix = fields.StringField(_("Matrix ID"), [])
+    submit = fields.SubmitField(_("Update contact info"))
diff --git a/hiboo/account/settings.py b/hiboo/account/settings.py
index 0680926c..07cca79e 100644
--- a/hiboo/account/settings.py
+++ b/hiboo/account/settings.py
@@ -21,3 +21,17 @@ def password():
         else:
             flask.flash("Wrong credentials, check your old password", "danger")
     return flask.render_template("account_password.html", form=form)
+
+
+@blueprint.route("/contact", methods=["GET", "POST"])
+@security.authentication_required()
+def contact():
+    user = flask_login.current_user
+    form = forms.ContactForm()
+    if form.validate_on_submit():
+        user.contact = form.data
+        models.db.session.add(user)
+        models.db.session.commit()
+        flask.flash("Successfully updated your contact info", "success")
+    form.process(**user.contact)
+    return flask.render_template("account_contact.html", form=form)
diff --git a/hiboo/account/templates/account_contact.html b/hiboo/account/templates/account_contact.html
new file mode 100644
index 00000000..382553bf
--- /dev/null
+++ b/hiboo/account/templates/account_contact.html
@@ -0,0 +1,3 @@
+{% extends "form.html" %}
+
+{% block title %}{% trans %}Update contact info{% endtrans %}{% endblock %}
diff --git a/hiboo/models.py b/hiboo/models.py
index 92d5b5e8..f4c8f83e 100644
--- a/hiboo/models.py
+++ b/hiboo/models.py
@@ -77,6 +77,7 @@ class User(db.Model):
 
     username = db.Column(db.String(255), nullable=False, unique=True)
     is_admin = db.Column(db.Boolean(), nullable=False, default=False)
+    contact = db.Column(mutable.MutableDict.as_mutable(JSONEncoded))
 
     # Flask-login attributes
     is_authenticated = True
diff --git a/migrations/versions/ebc103f8bc5e_add_contact_info.py b/migrations/versions/ebc103f8bc5e_add_contact_info.py
new file mode 100644
index 00000000..9ad08f60
--- /dev/null
+++ b/migrations/versions/ebc103f8bc5e_add_contact_info.py
@@ -0,0 +1,26 @@
+""" Add a contact info field
+
+Revision ID: ebc103f8bc5e
+Revises: fa59f288c9f2
+Create Date: 2019-12-11 16:05:46.359886
+"""
+
+from alembic import op
+import sqlalchemy as sa
+import hiboo
+
+
+revision = 'ebc103f8bc5e'
+down_revision = 'fa59f288c9f2'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    with op.batch_alter_table('user') as batch_op:
+        batch_op.add_column(sa.Column('contact', hiboo.models.JSONEncoded(), nullable=True))
+
+
+def downgrade():
+    with op.batch_alter_table('user') as batch_op:
+        batch_op.drop_column('contact')
-- 
GitLab