From f303240c554fde68ded5aff4a13f96d07508eb7d Mon Sep 17 00:00:00 2001 From: "Jose M. Guisado" Date: Tue, 20 Apr 2021 10:56:25 +0000 Subject: Create "Add Room" form and view Creates "add room" form with required inputs only: center, name and netmask. Adds a new button inside the button group in the scopes view. Because scopes checkboxes values maps to ips the only way to specify the center in which to add the room is in the add room form itself, using a select input. In the future, the RoomForm can be used to display room information once such functionality lands in the ogserver. --- ogcp/forms/action_forms.py | 9 +++++++++ ogcp/templates/actions/add_room.html | 15 +++++++++++++++ ogcp/templates/scopes.html | 2 ++ ogcp/views.py | 23 ++++++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 ogcp/templates/actions/add_room.html diff --git a/ogcp/forms/action_forms.py b/ogcp/forms/action_forms.py index d1633e2..3bd3ef5 100644 --- a/ogcp/forms/action_forms.py +++ b/ogcp/forms/action_forms.py @@ -89,3 +89,12 @@ class ImageCreateForm(FlaskForm): validators=[InputRequired()]) description = StringField(label=_('Description')) create = SubmitField(label=_('Create')) + +class RoomForm(FlaskForm): + center = SelectField(label=_('Center'), + validators=[InputRequired()]) + name = StringField(label=_('Room name'), + validators=[InputRequired()]) + netmask = StringField(label=_('Netmask'), + validators=[InputRequired()]) + submit = SubmitField(label=_('Submit')) diff --git a/ogcp/templates/actions/add_room.html b/ogcp/templates/actions/add_room.html new file mode 100644 index 0000000..dffdc87 --- /dev/null +++ b/ogcp/templates/actions/add_room.html @@ -0,0 +1,15 @@ +{% extends 'base.html' %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block content %} + +

{{_('Add room form')}}

+ +{{ wtf.quick_form(form, + action=url_for('action_room_add'), + method='post', + button_map={'submit': 'primary'}, + extra_classes="mx-5") }} + +{% endblock %} + diff --git a/ogcp/templates/scopes.html b/ogcp/templates/scopes.html index 0adeca4..df2b535 100644 --- a/ogcp/templates/scopes.html +++ b/ogcp/templates/scopes.html @@ -59,6 +59,8 @@ formaction="{{ url_for('action_image_create') }}" formmethod="get"> + diff --git a/ogcp/views.py b/ogcp/views.py index c66ada8..73b1fcb 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -3,7 +3,7 @@ from flask import ( ) from ogcp.forms.action_forms import ( WOLForm, PartitionForm, ClientDetailsForm, HardwareForm, SessionForm, - ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm + ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm, RoomForm ) from flask_login import ( current_user, LoginManager, @@ -653,3 +653,24 @@ def action_refresh(): else: flash(_('Refresh request processed successfully'), category='info') return redirect(url_for("scopes")) + +@app.route('/action/room/add', methods=['GET', 'POST']) +@login_required +def action_room_add(): + form = RoomForm(request.form) + if request.method == 'POST': + payload = {"center": int(form.center.data), + "name": form.name.data, + "netmask": form.netmask.data} + r = g.server.post('/room/add', payload) + if r.status_code != requests.codes.ok: + flash(_('Server replied with error code when adding the room'), category='error') + else: + flash(_('Room added successfully'), category='info') + return redirect(url_for("scopes")) + else: + r = g.server.get('/scopes') + centers = parse_scopes_from_tree(r.json(), 'center') + centers = [(center['id'], center['name']) for center in centers] + form.center.choices = list(centers) + return render_template('actions/add_room.html', form=form) -- cgit v1.2.3-18-g5258