2014-09-08 23:18:24 +00:00
|
|
|
from itertools import chain
|
2014-03-18 17:23:19 +00:00
|
|
|
from django.views.generic import View
|
|
|
|
from django.template import RequestContext
|
2014-08-24 16:03:44 +00:00
|
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
2015-01-26 13:36:52 +00:00
|
|
|
from django.contrib.auth import logout, authenticate, login
|
2014-11-05 19:45:53 +00:00
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from django.utils.decorators import method_decorator
|
2014-04-02 15:38:05 +00:00
|
|
|
from django.utils.translation import ugettext as _
|
2014-11-05 19:45:53 +00:00
|
|
|
from django.http import HttpResponseRedirect
|
2014-03-19 10:58:40 +00:00
|
|
|
from django.contrib import messages
|
|
|
|
from django.contrib.auth import login
|
2014-11-05 19:45:53 +00:00
|
|
|
from django.core.urlresolvers import reverse
|
2014-03-19 10:58:40 +00:00
|
|
|
|
2015-01-10 11:43:18 +00:00
|
|
|
from .forms import LoginForm, PasswordChangeForm, RegistrationForm
|
2014-04-03 16:55:07 +00:00
|
|
|
from .models import User
|
2015-01-26 13:36:52 +00:00
|
|
|
from .signals import user_registered
|
2014-09-08 23:18:24 +00:00
|
|
|
from shelfzilla.apps.manga.models import (
|
|
|
|
UserReadVolume, UserHaveVolume, UserWishlistVolume
|
|
|
|
)
|
2014-03-18 17:23:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
class LoginView(View):
|
2014-03-19 10:58:40 +00:00
|
|
|
template = 'users/login.html'
|
2014-03-18 17:23:19 +00:00
|
|
|
|
|
|
|
def get(self, request):
|
2014-03-26 15:33:57 +00:00
|
|
|
if request.user.is_authenticated():
|
|
|
|
return HttpResponseRedirect('/')
|
|
|
|
|
2014-03-19 10:58:40 +00:00
|
|
|
context = {
|
|
|
|
'login_form': LoginForm()
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx = RequestContext(request, context)
|
|
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
|
|
|
|
def post(self, request):
|
2014-03-26 15:33:57 +00:00
|
|
|
if request.user.is_authenticated():
|
|
|
|
return HttpResponseRedirect('/')
|
|
|
|
|
2014-03-19 10:58:40 +00:00
|
|
|
login_form = LoginForm(request.POST)
|
|
|
|
|
|
|
|
if login_form.is_valid():
|
|
|
|
user = login_form.authenticate()
|
|
|
|
login(request, user)
|
|
|
|
|
|
|
|
messages.success(
|
|
|
|
request,
|
|
|
|
_('Logged in successfully.')
|
|
|
|
)
|
|
|
|
|
|
|
|
return HttpResponseRedirect('/')
|
|
|
|
|
|
|
|
context = {
|
|
|
|
'login_form': login_form,
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx = RequestContext(request, context)
|
2014-03-18 17:23:19 +00:00
|
|
|
return render_to_response(self.template, context_instance=ctx)
|
2014-03-19 10:58:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
class LogoutView(View):
|
|
|
|
def get(self, request):
|
|
|
|
logout(request)
|
|
|
|
|
|
|
|
messages.success(
|
|
|
|
request,
|
|
|
|
_('Logged out successfully')
|
|
|
|
)
|
|
|
|
|
|
|
|
return HttpResponseRedirect('/')
|
2014-04-03 16:55:07 +00:00
|
|
|
|
|
|
|
|
2014-08-24 16:03:44 +00:00
|
|
|
class UserProfileView(View):
|
2014-04-04 13:15:50 +00:00
|
|
|
tempalte = 'users/profile.html'
|
|
|
|
template_section = 'users/profile/{}.html'
|
2014-04-03 16:55:07 +00:00
|
|
|
|
2014-08-24 16:03:44 +00:00
|
|
|
def get(self, request, username, section='summary'):
|
2014-09-08 16:49:32 +00:00
|
|
|
user = get_object_or_404(User, username=username)
|
2014-08-24 16:03:44 +00:00
|
|
|
data = {
|
2014-09-08 16:49:32 +00:00
|
|
|
'item': user,
|
2014-08-26 16:46:23 +00:00
|
|
|
'section': section
|
2014-08-24 16:03:44 +00:00
|
|
|
}
|
|
|
|
if section != 'summary':
|
|
|
|
template = self.template_section.format(section)
|
2014-04-03 16:55:07 +00:00
|
|
|
else:
|
2014-08-24 16:03:44 +00:00
|
|
|
template = self.tempalte
|
2014-09-08 16:49:32 +00:00
|
|
|
data = self.get_context_from_section(request, section, data, user)
|
2014-08-24 16:03:44 +00:00
|
|
|
|
|
|
|
ctx = RequestContext(request, data)
|
|
|
|
return render_to_response(template, context_instance=ctx)
|
2014-04-03 16:55:07 +00:00
|
|
|
|
2014-09-08 16:49:32 +00:00
|
|
|
def get_summary(self, request, context, user):
|
2014-09-08 23:18:24 +00:00
|
|
|
owned_list = UserHaveVolume.objects.filter(user=user)
|
|
|
|
wishlisted_list = UserWishlistVolume.objects.filter(user=user)
|
|
|
|
read_list = UserReadVolume.objects.filter(user=user)
|
|
|
|
|
|
|
|
timeline = sorted(
|
|
|
|
chain(owned_list, wishlisted_list, read_list),
|
|
|
|
key=lambda model: model.date,
|
|
|
|
reverse=True
|
|
|
|
)[:20]
|
|
|
|
context['timeline'] = timeline
|
2014-04-03 16:55:07 +00:00
|
|
|
return context
|
|
|
|
|
2014-09-08 16:49:32 +00:00
|
|
|
def get_context_from_section(self, request, section, context, user):
|
2014-04-03 16:55:07 +00:00
|
|
|
method = getattr(self, 'get_{}'.format(section), None)
|
|
|
|
|
|
|
|
if method:
|
2014-09-08 16:49:32 +00:00
|
|
|
context = method(request, context, user)
|
2014-04-03 16:55:07 +00:00
|
|
|
|
|
|
|
return context
|
2014-11-05 19:45:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
class AccountView(View):
|
|
|
|
template = 'account/main.html'
|
|
|
|
|
|
|
|
@method_decorator(login_required)
|
|
|
|
def get(self, request):
|
|
|
|
data = {
|
|
|
|
'item': request.user,
|
|
|
|
'form_password': PasswordChangeForm(request.user)
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx = RequestContext(request, data)
|
|
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
|
|
|
|
@method_decorator(login_required)
|
|
|
|
def post(self, request):
|
|
|
|
form_password = PasswordChangeForm(request.user, data=request.POST)
|
|
|
|
|
|
|
|
if form_password.is_valid():
|
|
|
|
# Do stuff
|
|
|
|
form_password.save()
|
|
|
|
messages.success(request, _('Password changed.'))
|
|
|
|
return HttpResponseRedirect(reverse('account'))
|
|
|
|
|
|
|
|
data = {
|
|
|
|
'item': request.user,
|
|
|
|
'form_password': form_password
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx = RequestContext(request, data)
|
|
|
|
return render_to_response(self.template, context_instance=ctx)
|
2015-01-10 11:43:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
class RegisterView(View):
|
|
|
|
template = 'account/register.html'
|
2015-01-26 13:36:52 +00:00
|
|
|
form_class = RegistrationForm
|
2015-01-10 11:43:18 +00:00
|
|
|
|
|
|
|
def get(self, request):
|
2015-04-09 09:35:23 +00:00
|
|
|
form_data = {}
|
|
|
|
|
|
|
|
if 'code' in request.GET:
|
|
|
|
form_data['access_code'] = request.GET['code']
|
|
|
|
|
2015-01-10 11:43:18 +00:00
|
|
|
data = {
|
2015-04-09 09:35:23 +00:00
|
|
|
'form': self.form_class(initial=form_data)
|
2015-01-10 11:43:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx = RequestContext(request, data)
|
|
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
|
|
|
|
def post(self, request):
|
2015-01-26 13:36:52 +00:00
|
|
|
form = self.form_class(request.POST)
|
2015-01-10 11:43:18 +00:00
|
|
|
if form.is_valid():
|
2015-01-26 13:36:52 +00:00
|
|
|
form.save()
|
|
|
|
user = authenticate(username=request.POST.get('username'),
|
|
|
|
password=request.POST.get('password1'))
|
|
|
|
login(request, user)
|
|
|
|
messages.success(request, _('Welcome to the community! :)'))
|
|
|
|
user_registered.send(sender=self.__class__, user=user)
|
|
|
|
return HttpResponseRedirect(reverse('homepage'))
|
2015-01-10 11:43:18 +00:00
|
|
|
|
2015-01-26 13:36:52 +00:00
|
|
|
ctx = RequestContext(request, {'form': form})
|
2015-01-10 11:43:18 +00:00
|
|
|
return render_to_response(self.template, context_instance=ctx)
|