diff --git a/webapp/forms.py b/webapp/forms.py
new file mode 100644
index 0000000..0e0930f
--- /dev/null
+++ b/webapp/forms.py
@@ -0,0 +1,11 @@
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+
+from webapp.models import OhlhafvChallenge
+
+
+class OhlhafvForm(forms.ModelForm):
+
+ class Meta:
+ model = OhlhafvChallenge
+ fields = ['challenger', 'challenger_email', 'victim', 'victim_email', 'series', 'message']
\ No newline at end of file
diff --git a/webapp/tables.py b/webapp/tables.py
new file mode 100644
index 0000000..40e8742
--- /dev/null
+++ b/webapp/tables.py
@@ -0,0 +1,8 @@
+import django_tables2 as tables
+from django.utils.translation import ugettext as _
+from webapp.models import OhlhafvChallenge
+
+
+class OhlhafvTable(tables.Table):
+ class Meta:
+ model = OhlhafvChallenge
\ No newline at end of file
diff --git a/webapp/templates/ohlhafv.html b/webapp/templates/ohlhafv.html
new file mode 100644
index 0000000..05decc5
--- /dev/null
+++ b/webapp/templates/ohlhafv.html
@@ -0,0 +1,21 @@
+{% extends "base.html" %}
+
+{% load bootstrap3 %}
+{% load i18n %}
+
+{% block content %}
+
+
{% trans "Ohlhafv" %}
+
+
+
+
+
+{% endblock content %}
diff --git a/webapp/templates/ohlhafv_list.html b/webapp/templates/ohlhafv_list.html
new file mode 100644
index 0000000..a21e7e5
--- /dev/null
+++ b/webapp/templates/ohlhafv_list.html
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+
+{% load static %}
+{% load i18n %}
+{% load django_tables2 %}
+
+{% block content %}
+
+
+
+
{% trans "All challenges" %}
+
+
+
+ {% trans "Total challenges:" %} {{ challenge_count }}
+
+
+ {{ table|safe }}
+
+{% endblock content %}
diff --git a/webapp/urls.py b/webapp/urls.py
index a7eaa70..8136262 100644
--- a/webapp/urls.py
+++ b/webapp/urls.py
@@ -7,6 +7,9 @@ from webapp.views import admin_index
from webapp.views import login_view
from webapp.views import logout_view
from webapp.views import about_view
+from webapp.views import ohlhafv_view
+from webapp.views import ohlhafv_submit
+from webapp.views import ohlhafv_list
urlpatterns = [
# main
@@ -19,4 +22,9 @@ urlpatterns = [
# git revision
url(r'^about', about_view),
+
+ #ohlhafv
+ url(r'^ohlhafv$', ohlhafv_view),
+ url(r'^ohlhafv/submit', ohlhafv_submit),
+ url(r'^ohlhafv/list', ohlhafv_list),
]
diff --git a/webapp/views.py b/webapp/views.py
index dfcf5b0..f8adc8b 100644
--- a/webapp/views.py
+++ b/webapp/views.py
@@ -4,9 +4,13 @@ from django.shortcuts import render, redirect
from django.contrib.auth import login, logout, authenticate
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import ensure_csrf_cookie
+from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import permission_required
from django.conf import settings
import logging
+from webapp.models import OhlhafvChallenge
+from webapp.forms import OhlhafvForm
+from webapp.tables import OhlhafvTable
@require_http_methods(["GET"])
@@ -57,3 +61,42 @@ def logout_view(request, *args, **kwargs):
def about_view(request, *args, **kwargs):
"""Render about page."""
return render(request, "about.html", {})
+
+
+@require_http_methods(["GET"])
+def ohlhafv_view(request, *args, **kwargs):
+ form = OhlhafvForm()
+ return render(request, 'ohlhafv.html', {'form': form})
+
+
+@ensure_csrf_cookie
+@require_http_methods(["POST"])
+def ohlhafv_submit(request, *args, **kwargs):
+ form = OhlhafvForm(request.POST)
+ if form.is_valid():
+ form.save()
+ #return HttpResponseRedirect('/list/')
+ else:
+ pass
+ #return render(request, 'error.html', {'error': form.errors})
+ return HttpResponseRedirect('/ohlhafv/list/')
+
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+def ohlhafv_list(request, *args, **kwargs):
+ challenges = OhlhafvChallenge.objects.all()
+
+ table = OhlhafvTable(challenges,
+ request=request,
+ exclude=['id', 'challenger_email', 'victim_email'],
+ attrs={'class': 'table table-bordered table-hover'})
+
+ table.paginate(page=request.GET.get('page', 1), per_page=25)
+ table_html = table.as_html(request)
+
+ context = {
+ 'table': table_html,
+ 'challenge_count': len(challenges),
+ }
+ return render(request, 'ohlhafv_list.html', context)