Add upcoming events to user profile page. Fixes #121

This commit is contained in:
Michael Hall 2018-09-20 23:28:54 -04:00
parent fa18721b45
commit 3cd1e314e3
4 changed files with 66 additions and 26 deletions

View file

@ -401,7 +401,7 @@ class UserForm(forms.ModelForm):
class UserProfileForm(forms.ModelForm): class UserProfileForm(forms.ModelForm):
class Meta: class Meta:
model = UserProfile model = UserProfile
fields = ['avatar', 'realname', 'city', 'tz', 'send_notifications', 'do_not_track'] fields = ['realname', 'web_url', 'city', 'tz', 'avatar', 'send_notifications', 'do_not_track']
labels = { labels = {
'send_notifications': _('Send me notification emails'), 'send_notifications': _('Send me notification emails'),
'do_not_track': _('Do not track'), 'do_not_track': _('Do not track'),

View file

@ -1,4 +1,4 @@
<table> <table>
{{ profile_form }} {{ user_form }}
{{ user_form }} {{ profile_form }}
</table> </table>

View file

@ -9,12 +9,12 @@
{% block content %} {% block content %}
{% if user %} {% if user %}
<div class="container"> <div class="container container-primary">
<div class="row"> <div class="row">
<div class="col-md-2"></div> <div class="col-md-2"></div>
<div class="col-md-7"> <div class="col-md-7">
<div class="h2"> <div class="h2">
<img class="align-bottom" border="1" src="{{user.avatar_url}}" height="128px"/> {{user.user}} <img class="align-bottom mr-3" border="1" src="{{user.avatar_url}}" height="128px"/>{{ user.realname}}
{% if user.user.id == request.user.id %} {% if user.user.id == request.user.id %}
<div class="btn-group dropdown"> <div class="btn-group dropdown">
<button class="btn btn-sm btn-secondary dropdown-toggle" type="button" id="editMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button class="btn btn-sm btn-secondary dropdown-toggle" type="button" id="editMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@ -30,33 +30,63 @@
</div> </div>
<p>Full name: <strong>{{user.realname}}</strong></p> <div class="container container-secondary mb-3">
{% if user.web_url %}
{% if user.weburl %} <div class="row">
<p>Homepage: {{user.weburl}}</p> <div class="col-md-3">Homepage:</div><div class="col-md-3"><a href="{{user.web_url}}" target="_blank">{{user.web_url}}</a></div>
{% endif %}
{% if talks %}
<h3>Talks</h3>
<div class="container">
<div class="row">
{% for talk in talks %}
<div class="mr-3 mb-3 col-md-5">
<div class="card box-shadow" >
<div class="card-body">
<p class="card-title"><strong><a href="{% url 'show-talk' talk.id %}">{{talk.title}}</a></strong></p>
<div class="card-text">
<small class="text-muted mb-1">{{ talk.speaker }}</small>
</div>
</div>
</div>
</div> </div>
{% endif %}
<div class="row">
<div class="col-md-3">Timezone:</div><div class="col-md-3">{{user.tz}}</div>
</div>
</div>
{% if upcoming_events %}
<div class="container container-secondary mb-3">
<h4>Upcoming Events</h4>
{% for event in upcoming_events %}
<div class="row{% if event.status == event.CANCELED %} text-muted{% endif %}">
<div class="col">{% if event.status == event.CANCELED %}<del>{% endif %}<a href="{{ event.get_absolute_url }}">{{event.name}}</a>{% if event.status == event.CANCELED %}</del> (Canceled){% endif %}</div>
<div class="col"><small>{{ event.place }}</small></div>
<div class="col"><small>{{ event.local_start_time }}</small></div>
</div>
{% endfor %}
</div>
{% endif %}
{% if recent_events %}
<div class="container container-secondary mb-3">
<h4>Past Events</h4>
{% for event in recent_events %}
<div class="row">
<div class="col"><a href="{{ event.get_absolute_url }}">{{event.name}}</a></div>
<div class="col"><small>{{ event.place }}</small></div>
<div class="col"><small>{{ event.local_start_time }}</small></div>
</div>
{% endfor %}
</div>
{% endif %}
{% if talks %}
<h3>Talks</h3>
<div class="container container-secondary mb-3">
{% for talk in talks %}
<div class="row">
<div class="col-md-6">
<a href="{% url 'show-talk' talk.id %}">{{talk.title}}</a>
</div>
<div class="col-md-6">
<small class="text-muted mb-1">{{ talk.speaker }}</small>
</div>
</div>
{% endfor %} {% endfor %}
</div> </div>
</div> {% endif %}
{% endif %}
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{% if badges %} {% if badges %}
<div class="container container-secondary mb-3">
<h4>Badges</h4> <h4>Badges</h4>
<div class="mb-3"> <div class="mb-3">
{% for badge in badges %} {% for badge in badges %}
@ -65,8 +95,10 @@
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
</div>
{% endif %} {% endif %}
{% if teams %} {% if teams %}
<div class="container container-secondary mb-3">
<h4>Teams</h4> <h4>Teams</h4>
<ul> <ul>
{% for t in teams %} {% for t in teams %}
@ -75,7 +107,9 @@
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</div>
{% endif %} {% endif %}
<div class="container container-secondary mb-3">
<h4>Categories</h4> <h4>Categories</h4>
<ul> <ul>
{% for c in user.categories.all %} {% for c in user.categories.all %}
@ -84,6 +118,7 @@
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div> </div>

View file

@ -66,11 +66,16 @@ def show_profile(request, user_id):
teams = user.memberships.all() teams = user.memberships.all()
talks = Talk.objects.filter(speaker__user=user) talks = Talk.objects.filter(speaker__user=user)
badges = user.user.account.badges.all() badges = user.user.account.badges.all()
upcoming_events = Event.objects.filter(team=user.personal_team, end_time__gt=datetime.datetime.now()).order_by('start_time')
recent_events = None#Event.objects.filter(team=user.personal_team, end_time__lte=datetime.datetime.now()).order_by('-start_time')[:3]
context = { context = {
'user': user, 'user': user,
'teams': teams, 'teams': teams,
'talks': talks, 'talks': talks,
'badges': badges, 'badges': badges,
'upcoming_events': upcoming_events,
'recent_events': recent_events,
} }
return render(request, 'get_together/users/show_profile.html', context) return render(request, 'get_together/users/show_profile.html', context)