Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions share/templates/share/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,29 @@
})(window,document,'//static.hotjar.com/c/hotjar-','.js?sv=');
</script>
<style>
.gray-text {
color:gray;
}

.profile_table {
border-collapse: collapse;
}
.profile_table td{
padding-left: 2rem;
padding-right: 1rem;
text-align: left;
}
.table-vertical-border{
border-right:solid 1px lightgray;
border-left: solid 1px lightgray;
}

.big_name {
height:120px;
}
.profile {
padding-top:5%;
}
.suggest_form {
padding-right: 10%;
padding-left: 15%;
Expand Down
14 changes: 14 additions & 0 deletions user/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,17 @@ class SignUpForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')


class UpdateProfileForm(forms.ModelForm):
description = forms.CharField(
max_length=500, required=False, help_text="Tell us a bit about yourself", widget=forms.Textarea
)
place = forms.CharField(max_length=100)
language = forms.ModelChoiceField(queryset=Language.objects.all(),
widget=forms.CheckboxSelectMultiple)
proficiency = forms.ChoiceField(choices=UserLanguage.PROF)

class Meta:
model = User
fields = ("description", "place", "language", "proficiency")
81 changes: 64 additions & 17 deletions user/templates/user/profile.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,68 @@
{% load i18n %}

{% block content %}
<div class="page-header">
<h1>{{ profile.user.username }}</h1>
</div>
<p>
{{ profile.description }}
</p>
<p>
{% trans "Reputation:" %} {{ profile.reputation }}
</p>
{% for lang in profile.languages.all %}
<p>
{% trans lang.language.name %} {% trans lang.proficiency %}
</p>
{% endfor %}
<p>
{% trans "Joined" %}: {{ profile.join_date }}
</p>
<div class="container profile">
<div class="row">
<div class="col-sm-4">
<p><img src="http://placehold.it/180x180" class="img-responsive" alt="placeholder" /> </p>
{% if profile.user.is_staff %}
<p>Admin</p>
{% endif %}
</div>
<div class="col-sm-6">
<div class="big_name">
<h1>{{ profile.user.first_name|title }} {{ profile.user.last_name|title }}&nbsp<small><i class="glyphicon glyphicon-map-marker"></i>{{ profile.place }}</small></h1>
<p>
{% trans "Reputation:" %} {{ profile.reputation }}
</p>
</div>

<!-- Nav tabs -->
<ul class="nav nav-tabs" id="profile_tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="about_tab" data-toggle="tab" href="#about" role="tab" aria-controls="home" aria-selected="true">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="other_tab" data-toggle="tab" href="#other" role="tab" aria-controls="other" aria-selected="false"></a>
</li>
</ul>

<!-- Tab panes -->
<div class="tab-content" id="tab-content-about-tab">
<div class="tab-pane active" id="about" role="tabpanel" aria-labelledby="about-tab">
<br>
<p>{{ profile.description }}</p>
<p>Languages:</p>
<table class="profile_table">
{% for lang in profile.languages.all %}
<tr>
<td>
{% trans lang.language.name %}
</td>
<td class="table-vertical-border">
{% trans lang.proficiency %}
</td>
<td>
{% if lang.is_moderator %}
<span class="small">Moderator</span>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
<br>
<p>{% trans "Joined" %}: {{ profile.join_date }}</p>
<p>{% trans "Last active" %}: {{ profile.user.last_login }}</p>
</div>
<div class="tab-pane" id="other" role="tabpanel" aria-labelledby="profile-tab">...</div>
</div>
</div>
<div class="col-sm-2 btn-group">
<a href="{% url 'user:profile_edit_view' profile.user.id %}" class="btn btn-default gray-text">
<i class="glyphicon glyphicon-edit" aria-hidden="true"></i> Edit profile
</a>
</div>
</div>
</div>

{% endblock %}
36 changes: 36 additions & 0 deletions user/templates/user/profile_edit.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{% extends 'share/base_site.html' %}
{% load i18n %}

{% block content %}

<form method="post" action="/user/profile/{{ pk }}/edit/">
{% csrf_token %}


{{ form.description.label }}
{{ form.description }}

{{ form.place.label }}
{{ form.place }}

{{ form.language.label }}

{% for lan in form.language %}
{{ lan }}
{{ form.proficiency }}
{% endfor %}







{{ form.errors }}



<input type=submit value="submit" />
</form>

{% endblock %}
4 changes: 4 additions & 0 deletions user/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@
auth_views.login,
{'template_name': 'user/login.html'}
),
url(r'^profile/(?P<pk>\d+)/edit/',
views.EditUserProfileView.as_view(),
name='profile_edit_view'),
url(r'^profile/(?P<pk>\d*)/?',
views.ProfileView.as_view(),
name='profile_view'),

]
48 changes: 44 additions & 4 deletions user/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import logging

from django.http import HttpResponseBadRequest
from django.shortcuts import render, redirect
from django.http import HttpResponseBadRequest, HttpResponseNotFound, HttpResponseRedirect
from django.shortcuts import render, redirect, get_object_or_404
from django.template.loader import render_to_string
from django.views.generic import DetailView
from django.urls import reverse
from django.views.generic import DetailView, UpdateView, View
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes, force_text

from user.tokens import account_activation_token
from user.forms import SignUpForm
from user.forms import SignUpForm, UpdateProfileForm
from user.notify_user import notify_user
from user.models import UserLanguage, Profile
from language.models import Language
Expand All @@ -24,6 +25,45 @@ class ProfileView(DetailView):
model = Profile


class EditUserProfileView(View):
model = Profile, UserLanguage
form_class = UpdateProfileForm
template_name = "user/profile_edit.html"
id = None

def get(self, request, *args, **kwargs):
user = get_object_or_404(User, pk=self.kwargs['pk'])
profile = Profile.objects.get(user=user)
user_language = UserLanguage.objects.filter(user=profile)
initial = {"description": profile.description, "place":profile.place,
"language": list(user_language.values_list("language", flat=True))}
print("#######profile", user_language.values_list("proficiency"))

form = self.form_class(initial=initial)
return render(
request,
self.template_name,
{'form': form, 'pk': kwargs["pk"], "proficiency": user_language.values("proficiency")})

def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = get_object_or_404(User, pk=self.kwargs['pk'])
profile = Profile.objects.get(user=user)
profile.description = form.cleaned_data["description"]
profile.place = form.cleaned_data["place"]
profile.languages = form.cleaned_data["language"]
profile.save()


print("FORM IS VALId")

return HttpResponseRedirect(reverse('user:profile_view', args=(kwargs["pk"])))
else:
print("FORM IS NOT VALID")
return render(request, self.template_name, {'form': form, 'pk': kwargs["pk"]})


def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
Expand Down