Work on profile page
This commit is contained in:
1 parent
ae8543c2cb
commit
0cbddf75b6
8 files changed
+154
-42
No files matched your search
Whitespace-only changes.
@@ -1,34 +1,26 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{% block title %}Dusken{% endblock %}</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" type="text/css" />
|
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" type="text/css" />
|
||||||
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.1/css/font-awesome.css" rel="stylesheet">
|
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.1/css/font-awesome.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="/static/css/app.css" type="text/css" />
|
<link rel="stylesheet" href="{{ STATIC_URL }}css/app.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
{% block navigation %}
|
||||||
<header class="title-header">
|
{% include "nav.html" %}
|
||||||
<div class="container">
|
{% endblock %}
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<h1>Dusken</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<div class="container">
|
<div class="container">
|
||||||
{% block content %}
|
{% block content %}{% endblock %}
|
||||||
{% endblock %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
|
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
|
||||||
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
|
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
|
||||||
<script src="{{ STATIC_URL }}/js/dusken.js"></script>
|
<script src="{{ STATIC_URL }}js/dusken.js"></script>
|
||||||
<script src="{{ STATIC_URL }}/js/application.js"></script>
|
<script src="{{ STATIC_URL }}js/application.js"></script>
|
||||||
</body>
|
</body>
|
||||||
@@ -1,5 +1,17 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% block navigation %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<header class="title-header">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<h1>DUSKEN</h1>
|
||||||
|
<small>Dårlig Utrusted Studentsystem som Kan Endre Norge</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<form role="form">
|
<form role="form">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<nav class="navbar navbar-default" role="navigation">
|
||||||
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
|
<div class="navbar-header">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
<a class="navbar-brand" href="#">Dusken</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||||
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ user }} <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="{% url "profile" %}"><i class="glyphicon glyphicon-user"></i> Profile</a></li>
|
||||||
|
<li><a href="{% url "account" %}"><i class="glyphicon glyphicon-user"></i> Account</a></li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li><a href="{% url "logout" %}"><i class="glyphicon glyphicon-log-out"></i> Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
</div><!-- /.navbar-collapse -->
|
||||||
|
</nav>
|
||||||
@@ -1,22 +1,69 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Dusken - My profile{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h4>{{user}}</h4>
|
<h4>{{me.first_name}} {{me.last_name }}</h4>
|
||||||
<ul>
|
<div class="row">
|
||||||
<li>Username: '{{user.username}}'</li>
|
<div class="col-md-6">
|
||||||
<li>Email: '{{user.email}}'</li>
|
<div class="panel panel-default">
|
||||||
</ul>
|
<div class="panel-heading">
|
||||||
<h4>Actions</h4>
|
<h3 class="panel-title"><i class="glyphicon glyphicon-user"></i> Profile</h3>
|
||||||
<ul>
|
</div>
|
||||||
<li><a href="{% url 'members_list' %}">List members</a></li>
|
<ul class="list-group">
|
||||||
</ul>
|
<li class="list-group-item">Name: {{me.first_name}} {{me.last_name}}</li>
|
||||||
</div>
|
<li class="list-group-item">Username: {{me.username}}</li>
|
||||||
</div>
|
<li class="list-group-item">Email: {{me.email}}</li>
|
||||||
<div class="row">
|
</ul>
|
||||||
<div class="col-md-12">
|
</div>
|
||||||
<a href="{% url 'logout' %}">Logout</a>
|
{% if user.is_staff %}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title"> Admin tasks</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul>
|
||||||
|
<li><a href="{% url 'members_list' %}">List members</a></li>
|
||||||
|
<li><a href="/admin/">Django admin</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="panel {% if me.has_valid_membership %}panel-success{%else%}panel-warning{%endif%}">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">Membership</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
{% if me.has_valid_membership %}
|
||||||
|
{% for membership in me.memberships %}
|
||||||
|
<i class="glyphicon glyphicon-ok"></i> Valid until {{ me.}}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
Not valid (expired DATE)
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">Your Groups <span class="badge">{{ me.groups|length}}</span></h3>
|
||||||
|
</div>
|
||||||
|
{% if not me.groups %}
|
||||||
|
No groups
|
||||||
|
{% endif %}
|
||||||
|
<ul class="list-group">
|
||||||
|
{% for group in me.groups %}
|
||||||
|
<li class="list-group-item">{{ group }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
Du har blitt logget ut, vil du <a href="{% url "home" %}">logge inn</a> igjen?
|
Du har blitt logget ut, vil du <a href="{% url "login" %}">logge inn</a> igjen?
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
+14
-11
@@ -7,18 +7,8 @@ from longerusername.forms import AuthenticationForm
|
|||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
|
||||||
)
|
|
||||||
urlpatterns += patterns('duskenweb.views',
|
|
||||||
url(r'^$', 'home', name='home'),
|
|
||||||
url(r'^profile/$', 'profile', name='profile'),
|
|
||||||
url(r'^members/$', 'members_list', name='members_list'),
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
# Authentication views
|
# Authentication views
|
||||||
urlpatterns += patterns('django.contrib.auth.views',
|
urlpatterns = patterns('django.contrib.auth.views',
|
||||||
url(r'^login/$', 'login', {'authentication_form': AuthenticationForm}, name='login'),
|
url(r'^login/$', 'login', {'authentication_form': AuthenticationForm}, name='login'),
|
||||||
url(r'^logout/$', 'logout', name='logout'),
|
url(r'^logout/$', 'logout', name='logout'),
|
||||||
url(r'^password/change/$', # skip entering old password
|
url(r'^password/change/$', # skip entering old password
|
||||||
@@ -33,3 +23,16 @@ urlpatterns += patterns('django.contrib.auth.views',
|
|||||||
name='password_reset_confirm'),
|
name='password_reset_confirm'),
|
||||||
url(r'^password/reset/complete/$', 'password_reset_complete', name='password_reset_complete'),
|
url(r'^password/reset/complete/$', 'password_reset_complete', name='password_reset_complete'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
urlpatterns += patterns('duskenweb.views',
|
||||||
|
url(r'^$', 'home', name='home'),
|
||||||
|
url(r'^profile/$', 'profile', name='profile'),
|
||||||
|
url(r'^account/$', 'account', name='account'),
|
||||||
|
url(r'^members/$', 'members_list', name='members_list'),
|
||||||
|
url(r'^memberships/$', 'memberships_list', name='memberships_list'),
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
urlpatterns += patterns('',
|
||||||
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
|
)
|
||||||
@@ -13,6 +13,22 @@ def home(request, template_name='index.html'):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def profile(request, template_name='profile.html'):
|
def profile(request, template_name='profile.html'):
|
||||||
|
# TODO put these two lines somewhere else, on authenticate?
|
||||||
|
if not user_api_conn.is_authenticated() and request.user.duskenaccesstoken:
|
||||||
|
user_api_conn.set_access_token(request.user.duskenaccesstoken.access_token)
|
||||||
|
|
||||||
|
me = user_api_conn.members.me()['objects'][0]
|
||||||
|
import pprint
|
||||||
|
pprint.pprint(me)
|
||||||
|
return render(request, template_name, locals())
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def account(request, template_name='account.html'):
|
||||||
|
# TODO put these two lines somewhere else, on authenticate?
|
||||||
|
if not user_api_conn.is_authenticated() and request.user.duskenaccesstoken:
|
||||||
|
user_api_conn.set_access_token(request.user.duskenaccesstoken.access_token)
|
||||||
|
|
||||||
|
me = user_api_conn.members.me()
|
||||||
return render(request, template_name)
|
return render(request, template_name)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -23,3 +39,14 @@ def members_list(request, template_name='members_index.html'):
|
|||||||
|
|
||||||
members_list = user_api_conn.members.get_list()
|
members_list = user_api_conn.members.get_list()
|
||||||
return render(request, template_name, locals())
|
return render(request, template_name, locals())
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def memberships_list(request, template_name='memberships_index.html'):
|
||||||
|
# TODO put these two lines somewhere else, on authenticate?
|
||||||
|
if not user_api_conn.is_authenticated() and request.user.duskenaccesstoken:
|
||||||
|
user_api_conn.set_access_token(request.user.duskenaccesstoken.access_token)
|
||||||
|
|
||||||
|
# group by year, active, not active
|
||||||
|
# show graph
|
||||||
|
memberships_list = user_api_conn.memberships.get_list()
|
||||||
|
return render(request, template_name, locals())
|
||||||
Reference in new issue
Block a user