From 9802fdd175028c5e75c41358b935dd9c6e29c743 Mon Sep 17 00:00:00 2001
From: dameyer <dameyer@techfak.uni-bielefeld.de>
Date: Sun, 2 Oct 2022 23:49:14 +0200
Subject: [PATCH] Add form and template for adding a model.

---
 app/contributions/forms.py                    | 75 +++++++++++++++++++
 app/contributions/routes.py                   | 11 ++-
 .../contributions/contribute.html.j2          | 32 ++++++++
 3 files changed, 116 insertions(+), 2 deletions(-)
 create mode 100644 app/contributions/forms.py
 create mode 100644 app/templates/contributions/contribute.html.j2

diff --git a/app/contributions/forms.py b/app/contributions/forms.py
new file mode 100644
index 00000000..f00e49c3
--- /dev/null
+++ b/app/contributions/forms.py
@@ -0,0 +1,75 @@
+from flask_wtf import FlaskForm
+from wtforms import (
+    BooleanField,
+    PasswordField,
+    StringField,
+    SubmitField,
+    SelectMultipleField,
+    ValidationError, FieldList, IntegerField
+)
+from wtforms.validators import InputRequired, Email, EqualTo, Length, Regexp
+from app.models import User
+
+
+class ContributionForm(FlaskForm):
+
+    # The id field will be generated on insert.
+    # The user_id will be retrieved from the user who is performing this operation.
+
+    # title = db.Column(db.String(64))
+    title = StringField(
+        'Title',
+        validators=[InputRequired(), Length(max=64)]
+    )
+
+    # description = db.Column(db.String(255))
+    description = StringField(
+        'Description',
+        validators=[InputRequired(), Length(max=255)]
+    )
+
+    # version = db.Column(db.String(16))
+    version = StringField(
+        'Version',
+        validators=[InputRequired(), Length(max=16)]
+    )
+
+    # compatible_service_versions = db.Column(ContainerColumn(list, 255))
+    compatible_service_versions = SelectMultipleField(
+        'Compatible Service Versions',
+        choices=["asd", "blub", "bla"]
+    )
+
+    # publisher = db.Column(db.String(128))
+    publisher = StringField(
+        'Publisher',
+        validators=[InputRequired(), Length(max=128)]
+    )
+
+    # publisher_url = db.Column(db.String(512))
+    publisher_url = StringField(
+        'Publisher URL',
+        validators=[InputRequired(), Length(max=512)]
+    )
+
+    # publishing_url = db.Column(db.String(512))
+    publishing_url = StringField(
+        'Publishing URL',
+        validators=[InputRequired(), Length(max=512)]
+    )
+
+    # publishing_year = db.Column(db.Integer)
+    publishing_year = IntegerField(
+        'Publishing year',
+        validators=[InputRequired()]
+    )
+
+    # shared = db.Column(db.Boolean, default=False)
+    shared = BooleanField(
+        'Shared',
+        validators=[InputRequired()]
+    )
+
+    submit = SubmitField()
+
+
diff --git a/app/contributions/routes.py b/app/contributions/routes.py
index 80c6a82d..34d54d41 100644
--- a/app/contributions/routes.py
+++ b/app/contributions/routes.py
@@ -1,7 +1,9 @@
+from flask import render_template
 from flask_login import login_required
 from app.decorators import permission_required
 from app.models import Permission
 from . import bp
+from .forms import ContributionForm
 
 
 @bp.before_request
@@ -11,6 +13,11 @@ def before_request():
     pass
 
 
-@bp.route('')
+@bp.route('', methods=['GET', 'POST'])
 def contributions():
-    pass
+    form = ContributionForm(prefix='contribution-form')
+    return render_template(
+        'contributions/contribute.html.j2',
+        form=form,
+        title='Contribution'
+    )
diff --git a/app/templates/contributions/contribute.html.j2 b/app/templates/contributions/contribute.html.j2
new file mode 100644
index 00000000..6789e1f8
--- /dev/null
+++ b/app/templates/contributions/contribute.html.j2
@@ -0,0 +1,32 @@
+{% extends "base.html.j2" %}
+{% import "materialize/wtf.html.j2" as wtf %}
+
+
+{% block page_content %}
+<div class="container">
+  <div class="row">
+    <div class="col s12 m8 offset-m2">
+      <h1 id="title">{{ title }}</h1>
+      <p>
+        In order to add a new model, please fill in the form below.
+      </p>
+
+      <form method="POST">
+        <div class="card-panel">
+          {{ form.hidden_tag() }}
+          {{ wtf.render_field(form.title) }}
+          {{ wtf.render_field(form.description) }}
+          {{ wtf.render_field(form.publisher) }}
+          {{ wtf.render_field(form.publisher_url) }}
+          {{ wtf.render_field(form.publishing_url) }}
+          {{ wtf.render_field(form.publishing_year) }}
+          {{ wtf.render_field(form.shared) }}
+          {{ wtf.render_field(form.version) }}
+          {{ wtf.render_field(form.compatible_service_versions) }}
+          {{ wtf.render_field(form.submit, class_='width-100', material_icon='send') }}
+
+        </div>
+      </form>
+  </div>
+</div>
+{% endblock page_content %}
\ No newline at end of file
-- 
GitLab