-
-
-
-
-
- {%load staticfiles %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+{% endblock content %}
diff --git a/members/templates/tommy_blooper.html b/members/templates/tommy_blooper.html
new file mode 100644
index 0000000..ef0528b
--- /dev/null
+++ b/members/templates/tommy_blooper.html
@@ -0,0 +1,8 @@
+{% extends "members_base.html" %}
+
+{% block content %}
+
Tommyn jäsenlista
+
+
+
+{% endblock content %}
diff --git a/members/views.py b/members/views.py
index 7444e59..418a431 100644
--- a/members/views.py
+++ b/members/views.py
@@ -45,15 +45,58 @@ def send_mail_wrapper(subject, message):
@ensure_csrf_cookie
@require_http_methods(["GET"])
@permission_required('members.change_member', login_url='/login')
-def index(request, *args, **kwargs):
- return render(request, 'members_index.html', {})
+def member_list(request, *args, **kwargs):
+ context = {}
+ return render(request, 'member_list.html', context)
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def add_member(request, *args, **kwargs):
+ return render(request, 'add_member.html', {})
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def add_many_members(request, *args, **kwargs):
+ return render(request, 'add_many_members.html', {})
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def list_applications(request, *args, **kwargs):
+ return render(request, 'list_applications.html', {})
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def tommy_blooper(request, *args, **kwargs):
+ return render(request, 'tommy_blooper.html', {})
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def edit_member(request, *args, **kwargs):
+ i = kwargs.pop('index', None);
+ if i is None:
+ return HttpResponse(status=500, error="{'error': 'No member id specified'}")
+ else:
+ return render(request, 'edit_member.html', {'member_id' : i})
+
+@ensure_csrf_cookie
+@require_http_methods(["GET"])
+@permission_required('members.change_member', login_url='/login')
+def edit_application(request, *args, **kwargs):
+ i = kwargs.pop('index', None);
+ if i is None:
+ return HttpResponse(status=500, error="{'error': 'No member id specified'}")
+ else:
+ return render(request, 'edit_application.html', {'member_id' : i})
@ensure_csrf_cookie
def application_index(request, *args, **kwargs):
return render(request, 'application_index.html', {})
-
@ensure_csrf_cookie
def application_success_index(request, *args, **kwargs):
return render(request, 'application_success.html', {})
@@ -210,4 +253,4 @@ def export_csv(request, *args, **kwargs):
writer.writerow(field_list)
- return response
\ No newline at end of file
+ return response
diff --git a/sikweb/settings-sample.py b/sikweb/settings-sample.py
index 866a8a2..39636a1 100644
--- a/sikweb/settings-sample.py
+++ b/sikweb/settings-sample.py
@@ -13,6 +13,7 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
import os
import logging
from os.path import expanduser
+from django.utils.translation import ugettext_lazy as _
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -48,6 +49,7 @@ INSTALLED_APPS = [
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.locale.LocaleMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
@@ -63,14 +65,16 @@ ROOT_URLCONF = 'sikweb.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
+ 'DIRS': ['templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
+ 'django.template.context_processors.i18n',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
+ 'django.core.context_processors.static',
],
},
},
@@ -138,7 +142,18 @@ LOGPATH = "logs/debug.log"
# Internationalization
# https://docs.djangoproject.com/en/1.9/topics/i18n/
-LANGUAGE_CODE = 'en-us'
+LANGUAGES = (
+ ('en', _('English')),
+ ('fi', _('Finnish')),
+)
+
+LANGUAGE_CODE = 'fi'
+
+LOCALE_PATHS = (
+ os.path.join(BASE_DIR, 'locale'),
+)
+
+print("LOCALE_PATHS: {}".format(LOCALE_PATHS))
TIME_ZONE = 'Europe/Helsinki'
@@ -151,8 +166,17 @@ USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
-STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.AppDirectoriesFinder']
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+)
STATIC_URL = '/static/'
+STATIC_ROOT = os.path.join(BASE_DIR, 'static')
+STATICFILES_DIRS = (
+ os.path.join(BASE_DIR, 'global_static'),
+)
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
+MEDIA_URL = '/media/'
HSL_USERHASH = 'YOUR HSL USERHASH HERE'
HSL_DEPARTURE_THRESHOLD = 8
diff --git a/sikweb/urls.py b/sikweb/urls.py
index a63cf05..60812e7 100644
--- a/sikweb/urls.py
+++ b/sikweb/urls.py
@@ -17,13 +17,23 @@ Including another URLconf
from django.conf.urls import url
from django.contrib import admin
from django.views.generic.base import RedirectView
+from django.views.static import serve as static_serve
+from django.conf.urls import include
+from django.conf.urls.static import static
+from django.conf import settings
+from django.contrib.staticfiles import views as static_views
+
# main
from webapp.views import main_index
+from webapp.views import admin_index
# login
from webapp.views import login_view
from webapp.views import logout_view
# members
-from members.views import index as mindex
+from members.views import member_list
+from members.views import add_member
+from members.views import add_many_members
+from members.views import edit_member
from members.views import members as mems
from members.views import member as mem
from members.views import handle_mem_request
@@ -31,6 +41,7 @@ from members.views import csv_import as mem_csv_import
from members.views import new_member_request
from members.views import member_requests
from members.views import export_csv as mem_csv_export
+from members.views import tommy_blooper
#infoscreen
from infoscreen.views import index as infoindex
from infoscreen.views import default as infodefault
@@ -54,51 +65,70 @@ from infoscreen.views import admin as infoscreen_admin
from infoscreen.views import hsl_timetable_settings
#application
from members.views import application_index
+from members.views import list_applications
+from members.views import edit_application
from members.views import application_success_index
favicon_view = RedirectView.as_view(url='static/img/favicon.ico', permanent=True)
urlpatterns = [
- # main
- url(r'^$', main_index),
- # admin
- url(r'^admin/', admin.site.urls),
- # login stuff
- url(r'^login$', login_view),
- url(r'^logout$', logout_view),
- # members
- url(r'^members/$', mindex),
- url(r'^members/api/members$', mems),
- url(r'^members/api/member/(?P
\d+)$', mem),
- url(r'^members/api/member/$', mem),
- url(r'^members/api/csvimport$', mem_csv_import),
- url(r'^members/api/requests$', member_requests),
- url(r'^members/api/request$', new_member_request),
- url(r'^members/api/request/(?P\d+)$', handle_mem_request),
- url(r'^members/api/getCSV$', mem_csv_export),
- #infoscreen
- url(r'^infoscreen/$', infodefault),
- url(r'^infoscreen/(?P\d+)$', infoindex),
- url(r'^infoscreen/items$', info_items),
- url(r'^infoscreen/rotation/(?P\d+)$', rotation),
- url(r'^infoscreen/rotations$', rotations),
- url(r'^infoscreen/instance$', createInfoInstance),
- url(r'^infoscreen/instance/(?P\d+)$', deleteInfoInstance),
- url(r'^infoscreen/types$', info_types),
- url(r'^infoscreen/delete_item/(?P\d+)/(?P\d+)$', delete_info_item),
- url(r'^infoscreen/create_external_image$', createExternalImageInfoItem),
- url(r'^infoscreen/create_image$', create_image_item),
- url(r'^infoscreen/create_abbitem$', createABBItem),
- url(r'^infoscreen/create_sossoitem$', createSossoItem),
- url(r'^infoscreen/create_hslitem$', createHslItem),
- url(r'^infoscreen/create_coffeeitem$', createCoffeeItem),
- url(r'^infoscreen/admin$', infoscreen_admin),
- url(r'^infoscreen/create_rotation$', create_rotation),
- url(r'^infoscreen/delete_rotation/(?P\d+)$', delete_rotation),
- url(r'^infoscreen/hsl_data$', CurrentHSLView),
- url(r'^infoscreen/hsl_data/settings$', hsl_timetable_settings),
- #application
- url(r'^application/$', application_index),
- url(r'^application/success$', application_success_index),
- url(r'^favicon\.ico$', favicon_view),
-]
+ # main
+ url(r'^$', main_index),
+ url(r'^sikadmin$', admin_index),
+ # admin
+ url(r'^admin/', admin.site.urls),
+ # login stuff
+ url(r'^login$', login_view),
+ url(r'^logout$', logout_view),
+ # members
+ url(r'^members/$', member_list),
+ url(r'^members/list$', member_list),
+ url(r'^members/add$', add_member),
+ url(r'^members/add_many$', add_many_members),
+ url(r'^members/edit/(?P\d+)$', edit_member),
+ url(r'^members/applications$', list_applications),
+ url(r'^members/edit_application/(?P\d+)$', edit_application),
+ url(r'^members/api/members$', mems),
+ url(r'^members/api/member/(?P\d+)$', mem),
+ url(r'^members/api/member/$', mem),
+ url(r'^members/api/csvimport$', mem_csv_import),
+ url(r'^members/api/requests$', member_requests),
+ url(r'^members/api/request$', new_member_request),
+ url(r'^members/api/request/(?P\d+)$', handle_mem_request),
+ url(r'^members/api/getCSV$', mem_csv_export),
+ url(r'^members/tommy$', tommy_blooper),
+ #infoscreen
+ url(r'^infoscreen/$', infodefault),
+ url(r'^infoscreen/(?P\d+)$', infoindex),
+ url(r'^infoscreen/items$', info_items),
+ url(r'^infoscreen/rotation/(?P\d+)$', rotation),
+ url(r'^infoscreen/rotations$', rotations),
+ url(r'^infoscreen/instance$', createInfoInstance),
+ url(r'^infoscreen/instance/(?P\d+)$', deleteInfoInstance),
+ url(r'^infoscreen/types$', info_types),
+ url(r'^infoscreen/delete_item/(?P\d+)/(?P\d+)$', delete_info_item),
+ url(r'^infoscreen/create_external_image$', createExternalImageInfoItem),
+ url(r'^infoscreen/create_image$', create_image_item),
+ url(r'^infoscreen/create_abbitem$', createABBItem),
+ url(r'^infoscreen/create_sossoitem$', createSossoItem),
+ url(r'^infoscreen/create_hslitem$', createHslItem),
+ url(r'^infoscreen/create_coffeeitem$', createCoffeeItem),
+ url(r'^infoscreen/admin$', infoscreen_admin),
+ url(r'^infoscreen/create_rotation$', create_rotation),
+ url(r'^infoscreen/delete_rotation/(?P\d+)$', delete_rotation),
+ url(r'^infoscreen/hsl_data$', CurrentHSLView),
+ url(r'^infoscreen/hsl_data/settings$', hsl_timetable_settings),
+ #application
+ url(r'^application/$', application_index),
+ url(r'^application/success$', application_success_index),
+ url(r'^favicon\.ico$', favicon_view),
+
+ # i18n default view for changing the active language
+ url(r'^i18n/', include('django.conf.urls.i18n')),
+
+ # staticfiles default view for static files in development
+ url(r'^static/(?P.*)$', static_views.serve),
+ url(r'^media/(?P.*)$', static_serve, {'document_root': settings.MEDIA_ROOT}),
+
+
+] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
diff --git a/templates/footer.html b/templates/footer.html
new file mode 100644
index 0000000..67453c2
--- /dev/null
+++ b/templates/footer.html
@@ -0,0 +1,13 @@
+{% load i18n %}
+{% load static %}
+{% load staticfiles %}
+
+
diff --git a/webapp/templates/admin_index.html b/webapp/templates/admin_index.html
new file mode 100644
index 0000000..1af227e
--- /dev/null
+++ b/webapp/templates/admin_index.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block content %}
+
+{% trans "SIK Admin" %}
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam consectetur vitae arcu at bibendum. Nam vel vulputate massa, sit amet volutpat tellus. Fusce varius lectus iaculis nunc laoreet, ac ultricies nulla luctus. Nam fringilla ipsum vel tincidunt viverra. Fusce vestibulum, metus et tincidunt commodo, leo mauris vulputate magna, ut euismod magna nisi eu sem. Integer venenatis, enim in feugiat tempus, erat urna ornare turpis, in varius eros ligula vitae libero. Aliquam erat volutpat. Curabitur ac interdum quam. Duis ornare, eros ac laoreet finibus, libero arcu molestie tellus, id finibus velit lacus nec nibh. Morbi vehicula dolor vel imperdiet pharetra. Maecenas purus lorem, vulputate eget lacus ut, pharetra eleifend sem. Sed aliquam eleifend posuere. Maecenas ac scelerisque odio. Nunc facilisis cursus ornare. Sed neque turpis, sodales id rhoncus eget, vestibulum id urna. Nam ornare urna quis felis porta, vel mollis leo laoreet.
+
+
+Proin sed odio a nisi aliquet blandit quis at dolor. Sed tincidunt neque vel ex pulvinar, auctor elementum magna euismod. Pellentesque vel porta justo, quis pulvinar diam. Pellentesque consectetur convallis tellus faucibus lobortis. Mauris ornare erat ac varius condimentum. Sed neque augue, semper quis iaculis a, tincidunt sed diam. Donec volutpat non justo quis mollis. Maecenas nisi enim, mollis sed hendrerit nec, mattis eu diam. Nunc a faucibus neque, scelerisque fermentum ligula. Pellentesque tempus pharetra tempor. Quisque tincidunt orci vel ullamcorper venenatis. Phasellus blandit et purus molestie facilisis. Maecenas auctor accumsan pellentesque. Ut vel mi sem. Etiam porttitor metus vitae nulla pulvinar, nec efficitur metus tincidunt.
+
+{% endblock %}
diff --git a/webapp/templates/admin_navigation.html b/webapp/templates/admin_navigation.html
new file mode 100644
index 0000000..9e44ee5
--- /dev/null
+++ b/webapp/templates/admin_navigation.html
@@ -0,0 +1,12 @@
+{% load i18n %}
+
+
diff --git a/webapp/templates/base.html b/webapp/templates/base.html
new file mode 100644
index 0000000..8e86b50
--- /dev/null
+++ b/webapp/templates/base.html
@@ -0,0 +1,45 @@
+{% load i18n %}
+{% load static %}
+{% load staticfiles %}
+
+
+
+
+
+
+
+
+
+
+ Aalto-yliopiston Sähköinsinöörikilta ry
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% include "navigation.html" %}
+ {% block content %}
+ {% endblock %}
+
+
+ {% include "footer.html" %}
+
+
diff --git a/webapp/templates/main_index.html b/webapp/templates/main_index.html
index 2a249ed..92b7a52 100644
--- a/webapp/templates/main_index.html
+++ b/webapp/templates/main_index.html
@@ -1,73 +1,11 @@
-
-
-
-
-
-
-
-
- Aalto-yliopiston Sähköinsinöörikilta ry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {%load staticfiles %}
-
-
-
-
-
+{% extends "base.html" %}
+{% load i18n %}
+{% block content %}
HURDURR DUMMY SITE
+{% endblock %}
diff --git a/webapp/templates/navigation.html b/webapp/templates/navigation.html
new file mode 100644
index 0000000..92fbfcf
--- /dev/null
+++ b/webapp/templates/navigation.html
@@ -0,0 +1,36 @@
+{% load i18n %}
+
diff --git a/webapp/views.py b/webapp/views.py
index 7711971..0cbeab0 100644
--- a/webapp/views.py
+++ b/webapp/views.py
@@ -1,6 +1,8 @@
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.contrib.auth.decorators import permission_required
from django.conf import settings
import logging
@@ -10,7 +12,13 @@ logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=setti
@require_http_methods(["GET"])
def main_index(request, *args, **kwargs):
- return render(request, "main_index.html", {})
+ return render(request, "main_index.html", {})
+
+@require_http_methods(["GET", "POST"])
+@ensure_csrf_cookie
+@permission_required('members.change_member', login_url='/login')
+def admin_index(request, *args, **kwargs):
+ return render(request, "admin_index.html", {})
@require_http_methods(["GET", "POST"])
def login_view(request, *args, **kwargs):