import csv
import json
import copy
import itertools
from PIL import Image
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
from django.contrib import messages
from django.contrib.auth import login, authenticate
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User, Group
from django.core import serializers
from django.core.files import File
from django.core.mail import send_mail
from django.core.exceptions import PermissionDenied
from django.urls import reverse, reverse_lazy
from django.http import HttpResponseRedirect, Http404, HttpResponse
from django.db import models
from django.db.models import Count
from django.views import generic, View
from django.views.generic import TemplateView
from django.views.generic import FormView
from django.views.generic.edit import *
from django.views.generic.detail import *
from django.shortcuts import render, get_object_or_404, redirect, get_list_or_404, get_object_or_404
from django.forms import formset_factory
from django.forms import BaseModelFormSet
from django.forms import modelformset_factory, inlineformset_factory
from django.forms.models import model_to_dict
# from django_countries import countries
from django.template import Context, Template
from django.conf import settings
from django_file_form.uploader import FileFormUploader
from constance import config
from django.db.models import Q
from newsletter.forms import *
from newsletter.views import *
from post_office import mail
from .models import *
from .forms import *
from .utils import *
# Create your views here.
def index(request):
context = {}
return render(request, 'index.html', context = context)
def about(request):
context = {}
context = {'generic_text': Template(config.ABOUT_CONTENT).render(Context(context))}
return render(request, 'marktplatz/generic_text.html', context)
def submit(request):
context = {}
context = {'generic_text': Template(config.SUBMIT_TEXT).render(Context(context))}
return render(request,'marktplatz/generic_text.html', context)
def error_404_view(request, exception):
data = {"name": "Markplatz"}
return render(request,'marktplatz/error_404.html', data)
@login_required
def home(request):
user = request.user
if user.groups.filter(name='submission').exists():
return HttpResponseRedirect(reverse('meine-projekte'))
else:
return HttpResponseRedirect(reverse('products'))
class genericView(TemplateView):
template_name = 'marktplatz/generic.html'
def get(self, request, *args, **kwargs):
instance = get_object_or_404(Wohnprojekt, pk=2 )
context = {}
context['object'] = model_to_dict ( instance )
context['object']['myfield'] = '----------------------------'
return render(request, self.template_name, context )
class pagesView(TemplateView):
template_name = 'marktplatz/generic.html'
def get(self, request, *args, **kwargs):
context = {}
context['content_a'] = ""
context['content_b'] = config
# print (config.items() )
if 'page' in kwargs:
context['content_a'] = kwargs['page']
try:
context['content_a'] = '
' + kwargs['page'] + "
"
context['content_b'] = getattr(config , kwargs['page'], '')
except KeyError:
raise Http404
# if config.get ( kwargs['page'] ) != None:
# context['content_b'] = config.get ( kwargs['page'] )
return render(request, self.template_name, context )
class ContactUpdateView(LoginRequiredMixin, UpdateView):
template_name = 'marktplatz/form.html'
model = Contact
form_class = RegisterForm
success_url = reverse_lazy('index')
def get_object(self, queryset=None):
obj = super().get_object()
if ( obj.user_can_manage(self.request.user) ):
return obj
raise PermissionDenied
class SubscribeRequestView( SubscribeRequestView):
form_class = NewsletterForm
class OnlySubscribeRequestView( SubscribeRequestView):
template_name = 'newsletter/subscription_subscribe_onlyns.html'
class AgentNewslwtterFormView(TemplateView):
template_name = 'marktplatz/form_newsletter.html'
embed = False
def get_context_data(self, **kwargs):
if self.embed :
kwargs['embed'] = True
kwargs['form_content'] = ' Suchagent einrichten'
kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
return super().get_context_data(**kwargs)
def get(self, request, *args, **kwargs):
context = self.get_context_data()
context['form'] = AgentNewslwtterForm( )
context['bz'] = request.GET.get('bz', '') # used in template to check a district by default.
return render(request, self.template_name, context )
class AgentNewsletterSubscribeView( SubscribeRequestView ):
action = 'subscribe'
# form_class = AgentNewslwtterForm
confirm = False
embed = False
def get_context_data(self, **kwargs):
if self.embed :
kwargs['embed'] = True
kwargs['form_content'] = ' Suchagent einrichten'
kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
# kwargs['news_form'] = SubscribeRequestForm()
return super().get_context_data(**kwargs)
def post(self, request, *args, **kwargs):
data = request.POST.copy()
data["email"] = data["email_field"]
agent_form = AgentNewslwtterForm ( data )
if agent_form.is_valid():
agent_form.save()
else:
context = {}
context['form_errors'] = agent_form.errors
context['form'] = agent_form
return render(request, 'marktplatz/form_newsletter.html', context )
if agent_form.cleaned_data['subscribe'] :
return super().post( request, *args, **kwargs )
# return super(SubscribeRequestView, self).post( request, *args, **kwargs )
context = {}
context['content_a'] = '
Dein Suchagent wurde erstellt!
'
return render(request, 'marktplatz/generic.html', context )
# def dispatch(self, request, *args, **kwargs):
#
# return super(SubscribeRequestView, self).dispatch( request, *args, **kwargs )
class SearchAgentCreate(CreateView):
model = SearchAgent
template_name = 'marktplatz/form.html'
fields = 'ort', 'email'
success_url = reverse_lazy('generic')
embed = False
def get_context_data(self, **kwargs):
if self.embed :
kwargs['embed'] = True
kwargs['form_content'] = ' Suchagent einrichten'
kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
# kwargs['news_form'] = SubscribeRequestForm()
return super().get_context_data(**kwargs)
def form_valid(self, form):
super().form_valid(form)
return render(self.request, 'marktplatz/generic.html',
self.get_context_data(form=form))
class SearchAgentDelete(DeleteView):
model = SearchAgent
template_name = 'marktplatz/form_delete.html'
success_url = reverse_lazy('products')
def get(self, request, *args, **kwargs):
searchagent = get_object_or_404(SearchAgent, pk= kwargs.get('pk') )
context = {}
context['form_content'] = 'Dein Suchagent wurde gelöscht!'
if searchagent.hash == kwargs.get('hash'):
return super().get(self, request, *args, **kwargs)
else:
context['form_content'] = 'Oopala, das hat nicht geklappt.'
return render(request, self.template_name, context )
class ProductDelete(LoginRequiredMixin, DeleteView):
model = Product
template_name = 'marktplatz/product_delete.html'
success_url = reverse_lazy('products')
def get(self, request, *args, **kwargs):
contact = get_object_or_404(Contact, user= self.request.user ) # Contact.objects.get(user=self.request.user)
product = get_object_or_404(Product, pk= kwargs.get('pk') )
if (contact.id == product.contact.id) :
return super(ProductDelete, self).get(self, request, *args, **kwargs)
else:
raise Http404
def post(self, request, *args, **kwargs):
contact = get_object_or_404(Contact, user= self.request.user ) # Contact.objects.get(user=self.request.user)
product = get_object_or_404(Product, pk= kwargs.get('pk') )
if (contact.id == product.contact.id) :
# context = {}
# context['form_content'] = 'Dein Projekt wird gelöscht, wenn die Seite live ist!'
# if settings.DEBUG:
# return render(request, self.template_name, context )
# else:
return super().post(self, request, *args, **kwargs)
else:
raise Http404
context = {}
context['form_content'] = 'Oopala, das hat nicht geklappt.'
return render(request, self.template_name, context )
class ProductPublish(LoginRequiredMixin, DetailView):
model = Product
template_name = 'marktplatz/generic.html'
# success_url = reverse_lazy('products')
#
def get(self, request, *args, **kwargs):
contact = get_object_or_404(Contact, user= self.request.user ) # Contact.objects.get(user=self.request.user)
product = get_object_or_404(Product, pk= kwargs.get('pk') )
if (contact.id == product.contact.id) :
product_url = reverse( 'product-detail', kwargs= { 'pk': product.pk } )
publishmessage = "Ein Benutzer möchte folgendes Projekt freigeben: {}, {}".format( product.name, request.get_host() + product_url )
print (publishmessage)
userList =User.objects.filter( is_superuser = 1 )
for superuser in userList:
mail.send(
superuser.email, # List of email addresses also accepted
config.EMAIL_NOREPLY,
subject='Projekt Freischaltung',
headers={ 'Reply-To': superuser.email },
message= publishmessage,
# html_message='Hi there!',
)
context = {}
context["content_a"] = '
Die Freigabe wurde beantragt.
'
return render(request, self.template_name, context )
else:
raise Http404
def post(self, request, *args, **kwargs):
return self.get(self, request, *args, **kwargs)
class ProductsView(generic.ListView):
model = Product
template_name = 'marktplatz/product_overview.html'
context_object_name = 'object_list'
def get_queryset(self):
qs = super().get_queryset()
user = self.request.user
qs = qs.order_by('frei')
if user.groups.filter(name='submission').exists():
contact = Contact.objects.get(user=user)
return qs.filter(contact = contact)
if user.is_superuser:
return qs
qs = qs.filter(public = True)
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
orts = {}
urbanem = False
for product in context['object_list']:
if not product.ort in orts:
orts[product.ort] = product.get_ort_display()
if hasattr(product, "urbanem"):
urbanem = True
context['ort_dict'] = orts
context['urbanem'] = urbanem
context['user'] = self.request.user
context['frei_list'] = Product.FREI
context['status_list'] = Product.STATUS
context['sponsor_cards'] = Template( config.SPONSOR_CARDS ).render( Context(context) )
context['main_card'] = Template( config.MAIN_CARD ).render( Context(context) )
context['type'] = 'BASE'
context['textSearchForm'] = textSearchForm()
return context
class WohnprojekteView(ProductsView):
model = Wohnprojekt
template_name = 'marktplatz/product_overview.html'
context_object_name = 'object_list'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
raum_agebote = {}
for product in context['object_list']:
for raum in product.raumangebot:
if not (raum in raum_agebote):
raum_agebote[raum] = product.raumangebot.choices[raum]
context['raum_agebote_dict'] = raum_agebote
context['frei_list'][0] = ('JAJA', 'Platz frei')
context['altneu_list'] = Wohnprojekt.ALTNEU
context['type'] = 'WOHN'
return context
class MobilitaetsProjekteView(ProductsView):
model = MobilitaetsProjekt
template_name = 'marktplatz/product_overview.html'
context_object_name = 'object_list'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['type'] = 'MOBI'
return context
class ErnaerungsProjekteView(ProductsView):
model = ErnaehrungsProjekt
template_name = 'marktplatz/product_overview.html'
context_object_name = 'object_list'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['type'] = 'ERNA'
return context
class EnergyProjekteView(ProductsView):
model = EnergyProjekt
template_name = 'marktplatz/product_overview.html'
context_object_name = 'object_list'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['type'] = 'ENER'
return context
class FilterProductsView(ProductsView):
def get_queryset(self, qfilter=None, **kwargs ):
# original qs
qs = super().get_queryset()
if qfilter!=None:
mfilter = {}
mfilter[qfilter] = True
qs = qs.filter ( **mfilter )
qs = qs.order_by('frei')
return qs.filter(public = True)
def get(self, request, *args, **kwargs):
qfilter = kwargs.get( 'filter', "" )
if qfilter != "":
self.object_list = self.get_queryset( qfilter = qfilter )
allow_empty = self.get_allow_empty()
context = self.get_context_data()
return self.render_to_response(context)
class UrbanemProductsView(WohnprojekteView):
def get_queryset(self, qfilter=None, **kwargs ):
# original qs
qs = super().get_queryset()
if qfilter!=None:
mfilter = {}
mfilter[qfilter] = True
qs = qs.filter ( **mfilter )
qs = qs.order_by('frei')
return qs.filter(public = True)
def get(self, request, *args, **kwargs):
qfilter = 'urbanem'
if qfilter != "":
self.object_list = self.get_queryset( qfilter = qfilter )
allow_empty = self.get_allow_empty()
context = self.get_context_data()
return self.render_to_response(context)
class SearchProductsView(ProductsView):
def get_queryset(self, qfilter=None, **kwargs ):
# original qs
qs = super().get_queryset()
user = self.request.user
if qfilter!=None:
qs = qs.filter (name__icontains= qfilter) | \
qs.filter (claim__icontains= qfilter) | \
qs.filter (beschreibung__icontains= qfilter) | \
qs.filter (learning__icontains= qfilter) | \
qs.filter (status__icontains= qfilter) | \
qs.filter (adresse__icontains= qfilter) | \
qs.filter (plz__icontains= qfilter) | \
qs.filter (adresse__icontains= qfilter) | \
qs.filter (ort__icontains= qfilter) | \
qs.filter (website__icontains= qfilter) | \
qs.filter (email__icontains= qfilter) | \
qs.filter (kfrei__icontains= qfilter) | \
qs.filter (rechtsform__icontains= qfilter) | \
qs.filter (orga__icontains= qfilter)
# qs = qs.filter ( stringToSearch__icontains= qfilter )
qs = qs.order_by('frei')
return qs.filter(public = True)
def post(self, request, *args, **kwargs):
qform = textSearchForm( request.POST )
if qform.is_valid():
self.object_list = self.get_queryset(qfilter= qform.cleaned_data["searchText"] )
allow_empty = self.get_allow_empty()
if not allow_empty:
# When pagination is enabled and object_list is a queryset,
# it's better to do a cheap query than to load the unpaginated
# queryset in memory.
if self.get_paginate_by(self.object_list) is not None and hasattr(self.object_list, 'exists'):
is_empty = not self.object_list.exists()
else:
is_empty = not self.object_list
if is_empty:
raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.") % {
'class_name': self.__class__.__name__,
})
context = self.get_context_data()
context['type']= kwargs['type']
return self.render_to_response(context)
class SearchWohnProjectsView(SearchProductsView):
model = Wohnprojekt
form_class = WohnprojektForm
def get_queryset(self, qfilter=None, **kwargs ):
# original qs
qs = super().get_queryset()
user = self.request.user
if qfilter!=None:
qs = qs.filter (name__icontains= qfilter) | \
qs.filter (claim__icontains= qfilter) | \
qs.filter (beschreibung__icontains= qfilter) | \
qs.filter (learning__icontains= qfilter) | \
qs.filter (status__icontains= qfilter) | \
qs.filter (adresse__icontains= qfilter) | \
qs.filter (plz__icontains= qfilter) | \
qs.filter (adresse__icontains= qfilter) | \
qs.filter (ort__icontains= qfilter) | \
qs.filter (website__icontains= qfilter) | \
qs.filter (email__icontains= qfilter) | \
qs.filter (kfrei__icontains= qfilter) | \
qs.filter (rechtsform__icontains= qfilter) | \
qs.filter (orga__icontains= qfilter) | \
qs.filter (eigentum__icontains= qfilter) | \
qs.filter (schwerpunkt__icontains= qfilter) | \
qs.filter (artmodell__icontains= qfilter) | \
qs.filter (bautraeger__icontains= qfilter) | \
qs.filter (architektur__icontains= qfilter) | \
qs.filter (kflaechen__icontains= qfilter) | \
qs.filter (gemeinschaftr__icontains= qfilter) | \
qs.filter (kgemeinschaftr__icontains= qfilter) | \
qs.filter (raumangebot__icontains= qfilter) | \
qs.filter (kraumangebot__icontains= qfilter) | \
qs.filter (gewerbe__icontains= qfilter) | \
qs.filter (inseratstext__icontains= qfilter) | \
qs.filter (sonderwohnformen__icontains= qfilter) | \
qs.filter (karbeiten__icontains= qfilter) | \
qs.filter (bauweise__icontains= qfilter) | \
qs.filter (zielgruppen__icontains= qfilter) | \
qs.filter (gprojekte__icontains= qfilter) | \
qs.filter (oekologie__icontains= qfilter) | \
qs.filter (freiraumangebote__icontains= qfilter)
# qs = qs.filter ( stringToSearch__icontains= qfilter )
qs = qs.order_by('frei')
return qs.filter(public = True)
class GenericSearchView(SearchProductsView):
def dispatch(self, request, *args, **kwargs):
print( kwargs['type'] )
if self.kwargs['type'] == 'BASE':
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'WOHN':
return SearchWohnProjectsView.as_view()(request, *args, **kwargs)
elif self.kwargs['type'] == 'MOBI':
self.model = MobilitaetsProjekt
self.form_class = MobilitaetsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ERNA':
self.model = ErnaehrungsProjekt
self.form_class = ErnaehrungsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ENER':
self.model = EnergyProjekt
self.form_class = EnergyForm
return super().dispatch(request, *args, **kwargs)
class ProductsListView(generic.ListView):
model = Product
template_name='marktplatz/object_list.html'
embed = False
def get_queryset(self):
# original qs
qs = super().get_queryset()
self.user = self.request.user
user = self.user
if user.is_superuser:
return qs
qs = qs.filter(public = True)
return qs
def get_context_data(self, **kwargs):
if self.embed :
kwargs['embed'] = True
return super().get_context_data(**kwargs)
#
# DETAIL
#
class ProduktDetailView(generic.DetailView):
model = Product
template_name = 'marktplatz/product_detail.html'
embed = False
def get_context_data(self, **kwargs):
if self.embed :
kwargs['embed'] = True
return super().get_context_data(**kwargs)
def post(self, request, *args, **kwargs):
# vote = int(request.POST['vote'])
comment = str(request.POST['comment'])
return HttpResponseRedirect( reverse('products') )
class ProduktGenericDetailView(ProduktDetailView):
def dispatch(self, request, *args, **kwargs):
if self.kwargs['type'] == 'BASE':
super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'WOHN':
self.model = Wohnprojekt
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'MOBI':
self.model = MobilitaetsProjekt
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ERNA':
self.model = ErnaehrungsProjekt
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ENER':
self.model = EnergyProjekt
return super().dispatch(request, *args, **kwargs)
raise Http404('Keine Objekte gefunden')
class WohnprojektDetailView(ProduktDetailView):
model = Wohnprojekt
template_name = 'marktplatz/product_detail.html'
class MobilitaetsProjektDetailView(ProduktDetailView):
model = MobilitaetsProjekt
template_name = 'marktplatz/product_detail.html'
class ErnaehrungsProjektDetailView(ProduktDetailView):
model = ErnaehrungsProjekt
template_name = 'marktplatz/product_detail.html'
class EnergyProjektProjektDetailView(ProduktDetailView):
model = EnergyProjekt
template_name = 'marktplatz/product_detail.html'
class ProduktCardDetailView(ProduktDetailView):
template_name = 'marktplatz/product_detail_card.html'
#
#
# CREATE CREATE CREATE CREATE CREATE CREATE CREATE CREATE CREATE
#
#
class ProductDispatchView(TemplateView):
template_name = 'marktplatz/product_create_dispatch.html'
class ProductCreateView(LoginRequiredMixin, CreateView):
template_name = 'marktplatz/product_create.html'
model = Product
form_class = ProductForm
gotoPics = False
# success_url = reverse_lazy('meine-projekte')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
return context
def get_success_url(self):
return reverse_lazy('meine-projekte')
def post(self, request, *args, **kwargs):
if 'add-image' in request.POST:
self.gotoPics = True
return super().post(self, request, *args, **kwargs)
def form_valid(self, form):
product = form.save(commit=False)
product.contact = Contact.objects.get(user = self.request.user)
product.save()
self.object = product
return HttpResponseRedirect(self.get_success_url())
class ProductGenericCreateView(ProductCreateView):
def dispatch(self, request, *args, **kwargs):
if self.kwargs['type'] == 'BASE':
super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'WOHN':
self.model = Wohnprojekt
self.form_class = WohnprojektForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'MOBI':
self.model = MobilitaetsProjekt
self.form_class = MobilitaetsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ERNA':
self.model = ErnaehrungsProjekt
self.form_class = ErnaehrungsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ENER':
self.model = EnergyProjekt
self.form_class = EnergyForm
return super().dispatch(request, *args, **kwargs)
raise Http404('Keine Objekte gefunden' )
class ProductCreateAddPicsView (ProductGenericCreateView):
def get_success_url(self):
return reverse_lazy('add-image', kwargs={'pk': self.object.id } )
class ProductCreatePublishView (ProductGenericCreateView):
def get_success_url(self):
return reverse_lazy('product-publish', kwargs={'pk': self.object.id } )
#
#
# UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE
#
#
class ProductUpdateView(LoginRequiredMixin, UpdateView):
template_name = 'marktplatz/product_create.html'
model = Product
form_class = ProductForm
gotoPics = False
# success_url =
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
return context
def get_success_url(self):
return reverse_lazy('meine-projekte')
def get_object(self, queryset=None):
obj = super().get_object()
if ( obj.user_can_manage(self.request.user) ):
return obj
raise PermissionDenied
def post(self, request, *args, **kwargs):
if 'add-image' in request.POST:
self.gotoPics = True
return super().post(self, request, *args, **kwargs)
def get(self, request, *args, **kwargs):
return super().get(self, request, *args, **kwargs)
def form_valid(self, form):
product = form.save(commit=False)
product.contact = Contact.objects.get(user = self.request.user)
product.save()
self.object = product
return HttpResponseRedirect(self.get_success_url())
class ProductGenericUpdateView(ProductUpdateView):
model = Product
form_class = ProductForm
def dispatch(self, request, *args, **kwargs):
if self.kwargs['type'] == 'BASE':
super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'WOHN':
self.model = Wohnprojekt
self.form_class = WohnprojektForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'MOBI':
self.model = MobilitaetsProjekt
self.form_class = MobilitaetsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ERNA':
self.model = ErnaehrungsProjekt
self.form_class = ErnaehrungsForm
return super().dispatch(request, *args, **kwargs)
elif self.kwargs['type'] == 'ENER':
self.model = EnergyProjekt
self.form_class = EnergyForm
return super().dispatch(request, *args, **kwargs)
raise Http404('Keine Objekte gefunden' )
class ProductUpdateAddPicsView (ProductGenericUpdateView):
def get_success_url(self):
return reverse_lazy('add-image', kwargs={'pk': self.object.id } )
class ProductUpdatePublishView (ProductGenericUpdateView):
def get_success_url(self):
return reverse_lazy('product-publish', kwargs={'pk': self.object.id } )
#
# USERS USERS USERS USERS USERS USERS USERS USERS
#
class UsersProducts(LoginRequiredMixin, generic.ListView):
model = Product
template_name='marktplatz/myProducts.html'
def get_queryset(self):
contact = Contact.objects.get(user=self.request.user)
wohnprojekte = Wohnprojekt.objects.filter(contact=contact)
mobilitaetsprojekte = MobilitaetsProjekt.objects.filter(contact=contact)
ernaehrungsprojekte = ErnaehrungsProjekt.objects.filter(contact=contact)
energyprojekte = EnergyProjekt.objects.filter(contact=contact)
projekte = list(itertools.chain(wohnprojekte, mobilitaetsprojekte, ernaehrungsprojekte, energyprojekte))
return projekte
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
contact = Contact.objects.get(user=self.request.user)
context['user'] = self.request.user
return context
class AdminView(LoginRequiredMixin, generic.ListView):
model = Product
template_name='marktplatz/admin_panel.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
def post(self, request, *args, **kwargs):
context = request.POST.dict()
public = {k: v for k, v in context.items() if k.startswith('product_p')}
for elemk in public:
keys = elemk.split(".")
current_product = Product.objects.get(pk=keys[1])
if public[elemk] == 'true':
if current_product.public == False :
current_product.public = True
current_product.save()
else:
current_product.public = False
current_product.save()
return super().get(self, request, *args, **kwargs)
class registerView(FormView):
template_name = 'marktplatz/form.html'
# form_class = RegisterForm
def get(self, request):
# form = self.form_class()
context = request.GET.dict()
context['form_content'] = 'Willkommen! Wir freuen uns, dass du bei uns mitmachen willst!
Nach der Registrierung kannst du euer Projekt eintragen.
Evtl. möchtest du Kollegen die Möglichkeit geben auch zum Projekteintrag beizutragen. Wir haben nichts dagegen, dass du deine Logindaten mit Anderen aus deiner Projektgemeinschaft teilst. Dann können sie dir beim Eintragen helfen. Man kann Projekteinträge übrigens auch zwischenspeichern, sodass ihr zeitversetzt daran arbeiten könnt. Wenn mehrere diesen Account teilen wähle dein Passwort mit Bedacht!
'
context['form'] = RegisterForm
context['signUp'] = SignUpForm
return render(request, self.template_name, context)
def post(self, request):
# print ( request.POST.dict() )
form = SignUpForm(request.POST)
form_contact = RegisterForm(request.POST)
#
# Filter existing emails
#
qs = Contact.objects.filter( email=form_contact.data['email'] )
if ( qs.count() ):
form_contact.add_error('email', "Email already in use, please reset your password.")
if form.is_valid() and form_contact.is_valid():
contact = form_contact.save(commit=False)
user = form.save()
user.email = contact.email
user.first_name = contact.first_name
user.last_name = contact.last_name
user.set_password(form.cleaned_data.get('password1'))
user.save()
contact.user = user
contact.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
group = Group.objects.get(name='submission')
group.user_set.add(user)
user = authenticate(username=username, password=raw_password)
if user is not None:
# A backend authenticated the credentials
login(request, user)
return redirect('products')
else:
# No backend authenticated the credentials
send_mail(
'error with auth',
'Error in authorization.' + json.dumps( request.POST.dict() ),
'awards@berta.mediaarchitecture.org',
['juan@mediaarchitecture.org'],
fail_silently=False,
)
return redirect('products')
login(request, user)
else:
# print (form.errors)
# print (form_contact.errors)
send_mail(
'error with auth',
'Error in forms. \n\n form.errors: \n\n' + json.dumps(form.errors) + '\n\n form_contact.errors: \n\n' + json.dumps(form_contact.errors),
'awards@berta.mediaarchitecture.org',
['juan@mediaarchitecture.org'],
fail_silently=False,
)
context = request.POST.dict()
context['signUp'] = form
context['form'] = form_contact
context['signup_errors'] = form.errors
context['contact_errors'] = form_contact.errors
return render(request, self.template_name, context)
context = request.GET.dict()
context['form'] = RegisterForm
context['signUp'] = SignUpForm
return render(request, self.template_name, context)
class lightboximg(LoginRequiredMixin, TemplateView):
template_name = "marktplatz/importold.html"
def post(self, request):
context = {'faild': ''}
faild = ''
from1 = int(request.POST['from'])
to = int(request.POST['to'])
products = Product.objects.all()
i = 0
for product in products:
i+=1
if (i < from1):
continue
if (i > to):
break
medias = product.media_set.all()
for oldmedia in medias:
if not oldmedia.image_norm:
oldpic = oldmedia.image
oldmedia.image_norm.save(oldmedia.filename() + '_norm', oldpic)
oldmedia.save
return render(request, self.template_name, context)
def get(self, request):
context = {'faild': ''}
faild = ''
context['faild'] = faild
return render(request, self.template_name, context)
class addImageView(LoginRequiredMixin, FormView):
use_ajax = True
template_name = 'marktplatz/file_upload.html'
def get(self, request, pk):
user = self.request.user
contact = Contact.objects.get(user=user)
# print (contact.id)
product = Product.objects.filter(contact=contact)
if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
# print( "no product 1" )
raise Http404
product = Product.objects.get(pk=pk)
photo = product.media_set.count()
video = product.video_set.count()
context = request.GET.dict()
contact = Contact.objects.get(user=self.request.user)
# print( "before 404" )
product = get_object_or_404(Product, (Q(pk=pk) & Q(contact=contact)))
context['product'] = product
context['images'] = Media.objects.filter(product=product)
context['video'] = Video.objects.filter(product=product)
context['media'] = MediaForm
context['media_count'] = False
context['video_count'] = False
if photo >= 7:
context['media_count'] = True
if video >= 2:
context['video_count'] = True
# context['use_ajax'] = True
context['warning'] = False
return render(request, self.template_name, context)
def post(self, request, pk):
vid1_f = MediaForm(request.POST, request.FILES)
product = Product.objects.get(pk=pk)
i = product.media_set.count()
i += product.video_set.count()
video = product.video_set.count()
photo = product.media_set.count()
context = request.GET.dict()
contact = Contact.objects.get(user=self.request.user)
product = get_object_or_404(Product, (Q(pk=pk) & Q(contact=contact)))
context['product'] = product
context['images'] = Media.objects.filter(product=product)
context['video'] = Video.objects.filter(product=product)
context['media'] = MediaForm
context['media_count'] = False
context['video_count'] = False
context['use_ajax'] = True
context['warning'] = False
if vid1_f.is_valid():
image = vid1_f.cleaned_data['image']
name = image.name
if 'png' in name or 'jpg' in name or 'jpeg' in name:
if photo < 7:
vid1 = Media()
vid1.product = product
vid1.filename = name
vid1.copyright = vid1_f.cleaned_data['copyright']
vid1.name_for = vid1_f.cleaned_data['name_for']
vid1.image.save(name, image)
vid1.image_small.save(str(i) + '_small', image)
vid1.image_medium.save(str(i) + '_medium', image)
vid1.image_big.save(str(i) + '_big', image)
vid1.image_norm.save(str(i) + '_norm', image)
vid1.save
photo += 1
else:
context['warning'] = "You can not upload any more photos!"
elif 'mp4' in name or 'm3u8' in name or 'm4v' in name:
if video < 2:
#TODO clean image here!
vid1 = Video()
vid1.product = product
vid1.filename = name
vid1.copyright = vid1_f.cleaned_data['copyright']
vid1.name_for = vid1_f.cleaned_data['name_for']
vid1.image.save(name, image)
vid1.save
video += 1
else:
context['warning'] = "You can not upload any more videos!"
vid1_f.delete_temporary_files()
if photo >= 7:
context['media_count'] = True
if video >= 2:
context['video_count'] = True
return render(request, self.template_name, context)
handle_upload = FileFormUploader()
def delete_media(request, pk):
user = request.user
contact = Contact.objects.get(user=user)
object = Media.objects.get(id=pk)
if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
raise Http404
object.delete()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def delete_video(request, pk):
user = request.user
contact = Contact.objects.get(user=user)
object = Video.objects.get(id=pk)
if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
raise Http404
object.delete()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))