# -*- coding: utf-8 -*- import json from django.views.generic import TemplateView, FormView from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import redirect from emencia.django.newsletter.forms import ContactForm, ContactSettingsForm from emencia.django.newsletter.models import Contact, ContactSettings, MailingList from emencia.django.newsletter.forms import SubscribeAssideForm from accounts.models import User class SubscribeView(FormView): form_class = ContactForm template_name = 'client/newsletters/subcribe.html' success_url = '/newsletters/activation/send/' def get_form(self, form_class): if self.request.POST: email = self.request.POST.get('email') if email: try: contact = Contact.objects.get(email=email) return form_class(instance=contact, **self.get_form_kwargs()) except Contact.DoesNotExist: pass return form_class(**self.get_form_kwargs()) else: return form_class(**self.get_form_kwargs()) def form_valid(self, form): contact = form.save() try: setting = contact.contactsettings except ContactSettings.DoesNotExist: setting = None if setting: form2 = ContactSettingsForm(self.request.POST, instance=setting) else: form2 = ContactSettingsForm(self.request.POST) if form2.is_valid(): contact_setting = form2.save(commit=False) if not contact_setting.contact_id: contact_setting.contact = contact contact_setting.save() form2.save_m2m() """ # get country from request country_code = self.request.META.get('HTTP_GEOIP_COUNTRY_CODE') try: country = Country.objects.get(country_code=country_code) except Country.DoesNotExist: pass else: contact_setting.contact_country = country contact_setting.save() """ contact.send_activation() return HttpResponseRedirect(self.success_url) def get_context_data(self, **kwargs): context = super(SubscribeView, self).get_context_data(**kwargs) context['form2'] = ContactSettingsForm(initial=self.get_initial()) return context def get_initial(self): data = super(SubscribeView, self).get_initial() if self.request.user.is_authenticated(): email = getattr(self.request.user, 'email') data['email'] = email data['first_name'] = getattr(self.request.user, 'first_name') if self.request.GET: if self.request.GET.get('email'): data['email'] = self.request.GET['email'] if self.request.GET.get('first_name'): data['first_name'] = self.request.GET['first_name'] if self.request.GET.getlist('theme'): theme = self.request.GET.getlist('theme') data['theme'] = theme return data class ActivationView(TemplateView): http_method_names = ['get'] template_name = 'registration/activate.html' def get(self, request, *args, **kwargs): activated_contact = self.activate(request, *args, **kwargs) # add to announce list m = MailingList.objects.get(id=1) m.subscribers.add(activated_contact) if activated_contact: success_url = self.get_success_url(request, activated_contact) try: to, args, kwargs = success_url return redirect(to, *args, **kwargs) except ValueError: return redirect(success_url) return super(ActivationView, self).get(request, *args, **kwargs) def activate(self, request, activation_key): """ Implement account-activation logic here. """ activated_contact = Contact.objects.activate(activation_key) return activated_contact def get_success_url(self, request, user): return ('subscription_activation_complete', (), {}) def subscribe_aside(request): if request.POST: response = {'success': False} form = SubscribeAssideForm(request.POST) if form.is_valid(): email = form.cleaned_data['email'] try: user = User.objects.get(username=email) except User.DoesNotExist: user = None contact = Contact.objects.create_contact(email, user) contact_setting = form.save(commit=False) contact_setting.contact = contact contact_setting.exponent_practicum = True contact_setting.organiser_practicum = True contact_setting.save() form.save_m2m() response['success'] = True else: errors = form.errors if 'theme' in errors: errors['id_subscription_theme'] = errors['theme'] response['errors'] = errors return HttpResponse(json.dumps(response, indent=2), content_type='application/json') else: return HttpResponse('not form request') def popup_validate(request): response = {'success': False} if request.GET: form = ContactForm(request.GET) if form.is_valid(): contact = form.save() form2 = ContactSettingsForm(request.GET) if form2.is_valid(): contact_setting = form2.save(commit=False) contact_setting.contact = contact contact_setting.exponent_practicum, contact_setting.organiser_practicum = True, True contact_setting.save() form2.save_m2m() contact.send_activation() response['success'] = True response['redirect'] = True response['redirect_url'] = SubscribeView.success_url else: response['errors'] = form.errors return HttpResponse(json.dumps(response, indent=2), content_type='application/json') def landing_partisipation_validate(request): response = {'success': False} if request.method == 'POST' and request.is_ajax(): form = ContactForm(request.POST) if form.is_valid(): contact = form.save() form2 = ContactSettingsForm(request.POST) if form2.is_valid(): contact_setting = form2.save(commit=False) contact_setting.contact = contact contact_setting.exponent_practicum = True contact_setting.save() form2.save_m2m() contact.send_activation() response['success'] = True else: response['errors'] = form.errors return HttpResponse(json.dumps(response), content_type='application/json')