widget
[wolnelektury.git] / src / wolnelektury / views.py
index 1855222..a0e1ae4 100644 (file)
@@ -10,7 +10,9 @@ from django.conf import settings
 from django.contrib import auth
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import AuthenticationForm
 from django.contrib import auth
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.auth.views import LoginView
 from django.core.cache import cache
 from django.core.cache import cache
+from django.views.generic import FormView
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render
 from django.utils.translation import gettext_lazy as _
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render
 from django.utils.translation import gettext_lazy as _
@@ -19,15 +21,33 @@ from django.views.decorators.cache import never_cache
 from ajaxable.utils import AjaxableFormView
 from ajaxable.utils import placeholdized
 from catalogue.models import Book, Collection, Tag, Fragment
 from ajaxable.utils import AjaxableFormView
 from ajaxable.utils import placeholdized
 from catalogue.models import Book, Collection, Tag, Fragment
-
+import club.models
 from social.utils import get_or_choose_cite
 from social.utils import get_or_choose_cite
-from wolnelektury.forms import RegistrationForm, SocialSignupForm
+from wolnelektury.forms import RegistrationForm, SocialSignupForm, WLAuthenticationForm
+
 
 
+def main_page_2022(request):
+    ctx = {}
+    ctx['last_published'] = Book.objects.exclude(cover_clean='').filter(findable=True, parent=None).order_by('-created_at')[:10]
+    ctx['recommended_collection'] = Collection.objects.filter(listed=True, role='recommend').order_by('?').first()
+    ctx['ambassadors'] = club.models.Ambassador.objects.all().order_by('?')
+    ctx['widget'] = settings.WIDGETS.get(request.GET.get('w'))
+    if not ctx['widget'] and request.EXPERIMENTS['sowka'].value:
+        ctx['widget'] = settings.WIDGETS['pan-sowka']
+    return render(request, '2022/main_page.html', ctx)
 
 @never_cache
 def main_page(request):
 
 @never_cache
 def main_page(request):
+    if request.GET.get('w') in settings.WIDGETS:
+        request.EXPERIMENTS['layout'].override(True)
+    if request.EXPERIMENTS['sowka'].value:
+        request.EXPERIMENTS['layout'].override(True)
+
+    if request.EXPERIMENTS['layout'].value:
+        return main_page_2022(request)
+
     ctx = {
     ctx = {
-        'last_published': Book.objects.exclude(cover_thumb='').filter(findable=True, parent=None).order_by('-created_at')[:6],
+        'last_published': Book.objects.exclude(cover_clean='').filter(findable=True, parent=None).order_by('-created_at')[:6],
         'theme_books': [],
     }
 
         'theme_books': [],
     }
 
@@ -72,6 +92,13 @@ def main_page(request):
     return render(request, "main_page.html", ctx)
 
 
     return render(request, "main_page.html", ctx)
 
 
+class WLLoginView(LoginView):
+    form_class = WLAuthenticationForm
+
+
+wl_login_view = WLLoginView.as_view()
+
+
 class LoginFormView(AjaxableFormView):
     form_class = AuthenticationForm
     template = "auth/login.html"
 class LoginFormView(AjaxableFormView):
     form_class = AuthenticationForm
     template = "auth/login.html"
@@ -81,6 +108,9 @@ class LoginFormView(AjaxableFormView):
     ajax_redirect = True
 
     def __call__(self, request):
     ajax_redirect = True
 
     def __call__(self, request):
+        if request.EXPERIMENTS['layout'].value:
+            return wl_login_view(request)
+
         if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',
         if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',
@@ -91,6 +121,22 @@ class LoginFormView(AjaxableFormView):
         auth.login(request, form.get_user())
 
 
         auth.login(request, form.get_user())
 
 
+class WLRegisterView(FormView):
+    form_class = RegistrationForm
+    template_name = 'registration/register.html'
+
+    def form_valid(self, form):
+        form.save()
+        user = auth.authenticate(
+            username=form.cleaned_data['username'],
+            password=form.cleaned_data['password1']
+        )
+        auth.login(self.request, user)
+        return HttpResponseRedirect(quote_plus(self.request.GET.get('next', '/'), safe='/?='))
+
+wl_register_view = WLRegisterView.as_view()
+
+
 class RegisterFormView(AjaxableFormView):
     form_class = RegistrationForm
     template = "auth/register.html"
 class RegisterFormView(AjaxableFormView):
     form_class = RegistrationForm
     template = "auth/register.html"
@@ -102,6 +148,9 @@ class RegisterFormView(AjaxableFormView):
     honeypot = True
 
     def __call__(self, request):
     honeypot = True
 
     def __call__(self, request):
+        if request.EXPERIMENTS['layout'].value:
+            return wl_register_view(request)
+
         if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',
         if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',