| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070 |
- 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 = {'about_text': Template(config.ABOUT_CONTENT).render(Context(context))}
- return render(request, 'marktplatz/about.html', context)
- def submit(request):
- context = {}
- context = {'submit_text': Template(config.SUBMIT_TEXT).render(Context(context))}
- return render(request,'marktplatz/submit.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 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'] = '<i class="fas fa-bell"></i> 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'] = '<i class="fas fa-bell"></i> 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(SubscribeRequestView).get(self, request, *args, **kwargs)
- return super().post( request, *args, **kwargs )
- # return super(SubscribeRequestView, self).post( request, *args, **kwargs )
- context = {}
- context['content_a'] = '<br><i class="fas fa-bell"></i><br><h2>Dein Suchagent wurde erstellt!</h2>'
- return render(request, 'marktplatz/generic.html', context )
- def dispatch(self, request, *args, **kwargs):
- return super(SubscribeRequestView, self).dispatch( request, *args, **kwargs )
- 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'] = '----------------------------'
- # print (context)
- 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'] = "lalalala"
- context['content_b'] = config
- # print (config.items() )
- if 'page' in kwargs:
- context['content_a'] = kwargs['page']
- try:
- context['content_a'] = '<br><h2>' + kwargs['page'] + "</h2><br><br>"
- 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 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'] = '<i class="fas fa-bell"></i> 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 )
- 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 Freschaltung',
- headers={ 'Reply-To': superuser.email },
- message= publishmessage,
- # html_message='Hi <strong>there</strong>!',
- )
- context = {}
- context["content_a"] = '<br><br><br>Die Freigabe wurde beantragt.<br><br><br>'
- return render(request, self.template_name, context )
- else:
- raise Http404
- class ProductsView(generic.ListView):
- model = Product
- template_name = 'marktplatz/product_overview.html'
- context_object_name = 'product_list'
- #context_object_name = 'Products'
- def get_queryset(self):
- # original qs
- qs = super().get_queryset()
- self.user = self.request.user
- user = self.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)
- user =self.request.user
- context['user'] = user
- context['textSearchForm'] = textSearchForm()
- context['sponsor_cards'] = Template( config.SPONSOR_CARDS ).render( Context(context) )
- context['main_card'] = Template( config.MAIN_CARD ).render( Context(context) )
- orts = {}
- for product in context['product_list']:
- if not product.ort in orts:
- orts[product.ort] = product.get_ort_display()
- context['ort_dict'] = orts
- context['frei_list'] = Product.FREI
- context['status_list'] = Product.STATUS
- return context
- class WohnprojekteView(ProductsView):
- model = Wohnprojekt
- template_name = 'marktplatz/product_overview.html'
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- raum_agebote = {}
- for product in context['product_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
- return context
- class MobilitaetsProjekteView(ProductsView):
- model = MobilitaetsProjekt
- template_name = 'marktplatz/product_overview.html'
- class ErnaerungsProjekteView(ProductsView):
- model = ErnaehrungsProjekt
- template_name = 'marktplatz/product_overview.html'
- class EnergyProjekteView(ProductsView):
- model = EnergyProjekt
- template_name = 'marktplatz/product_overview.html'
- 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()
- # 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()
- return self.render_to_response(context)
- class SearchProductsView(ProductsView):
- def get_queryset(self, qfilter=None, **kwargs ):
- # original qs
- qs = super().get_queryset()
- self.user = self.request.user
- user = self.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.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()
- return self.render_to_response(context)
- class ProduktDetailView(generic.DetailView):
- model = Product
- template_name = 'marktplatz/product_detail.html'
- embed = False
- def get_context_data(self, **kwargs):
- # context = super().get_context_data(**kwargs)
- if self.embed :
- kwargs['embed'] = True
- # context['credits'] = Credit.objects.select_related().get(product = self.kwargs['pk'])
- # context['wohnprojekt'] = self.object.wohnprojekt
- 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 ProduktCardDetailView(ProduktDetailView):
- template_name = 'marktplatz/product_detail_card.html'
- class WohnprojektDetailView(generic.DetailView):
- model = Wohnprojekt
- template_name = 'marktplatz/wohnprojekt_detail.html'
- embed = False
- 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):
- # print (request.POST.dict())
- 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()
- # edit = {k: v for k, v in context.items() if k.startswith('product_e')}
- # for elemk in edit:
- # keys = elemk.split(".")
- # current_product = Product.objects.get(pk=keys[1])
- # if edit[elemk] == 'true'
- # if current_product.edit == False :
- # current_product.edit = True
- # current_product.save()
- # else:
- # current_product.edit = False
- # current_product.save()
- return HttpResponseRedirect('')
- class ProductsListView(generic.ListView):
- model = Product
- template_name='marktplatz/product_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)
- 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 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'] = '<p>Willkommen! Wir freuen uns, dass du bei uns mitmachen willst!</p> <p>Nach der Registrierung kannst du euer Projekt eintragen.</p> <p><br />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!</p>'
- 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():
- # print (form.cleaned_data)
- # print (form_contact.cleaned_data)
- 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 NewProductView(LoginRequiredMixin, FormView):
- # use_ajax = True
- # template_name = 'marktplatz/add.html'
- #
- # model = Product
- class ProductCreateView(LoginRequiredMixin, CreateView):
- template_name = 'marktplatz/product_create.html'
- model = Product
- form_class = ProductForm
- gotoPics = False
- 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 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()
- if (self.gotoPics):
- return HttpResponseRedirect(reverse('add-image', kwargs={'pk': product.pk}))
- else:
- return HttpResponseRedirect( reverse('meine-projekte') )
- class WohnProjektCreateView(ProductCreateView):
- model = Wohnprojekt
- form_class = WohnprojektForm
- class MobilitaetsProjektCreateView(ProductCreateView):
- model = MobilitaetsProjekt
- form_class = MobilitaetsForm
- class ErnaehrungsProjektCreateView(ProductCreateView):
- model = ErnaehrungsProjekt
- form_class = ErnaehrungsForm
- class EnergyProjektCreateView(ProductCreateView):
- model = EnergyProjekt
- form_class = EnergyForm
- # class ProductUpdateView(LoginRequiredMixin, View):
- #
- # def dispatch(request, *args, **kwargs):
- #
- # pass
- 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_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()
- if (self.gotoPics):
- return HttpResponseRedirect(reverse('add-image', kwargs={'pk': product.pk}))
- else:
- return HttpResponseRedirect( reverse('meine-projekte') )
- 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 WohnProjektUpdateView(ProductUpdateView):
- model = Wohnprojekt
- form_class = WohnprojektForm
- class MobilitaetsProjektUpdateView(ProductUpdateView):
- model = MobilitaetsProjekt
- form_class = MobilitaetsForm
- class ErnaehrungsProjektUpdateView(ProductUpdateView):
- model = ErnaehrungsProjekt
- form_class = ErnaehrungsForm
- class EnergyProjektUpdateView(ProductUpdateView):
- model = EnergyProjekt
- form_class = EnergyForm
- 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()
- # class EditView(LoginRequiredMixin, FormView):
- #
- # template_name = 'marktplatz/add.html'
- #
- # def get(self, request, pk):
- # user = self.request.user
- # contact = Contact.objects.get(user=user)
- # if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
- # raise Http404
- #
- # context = request.GET.dict()
- #
- # context['product'] = WohnprojektForm(instance=Wohnprojekt.objects.get(pk=pk))
- #
- #
- # context['use_ajax'] = True
- # context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
- #
- # return render(request, self.template_name, context)
- #
- # def post(self, request, pk):
- #
- # product_f = WohnprojektForm(request.POST, request.FILES, instance=Wohnprojekt.objects.get(pk=pk))
- #
- # if product_f.is_valid():
- # if product_f.has_changed():
- # product = product_f.save( commit=False )
- # update_fields = product_f.changed_data
- # product.current_uri = request.build_absolute_uri( '/' ).rstrip('/')
- # product.save( update_fields=update_fields )
- # # product.save( )
- #
- # if 'add-image' in request.POST:
- # return HttpResponseRedirect(reverse('add-image', kwargs={'pk': pk}))
- #
- # return HttpResponseRedirect(reverse('meine-projekte'))
- #
- # else:
- # context = request.GET.dict()
- # context['product'] = product_f
- # context['product_errors'] = product_f.errors
- # context['use_ajax'] = True
- # return render(request, self.template_name, context)
- 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 MediaView(LoginRequiredMixin, TemplateView):
- template_name = 'marktplatz/media_overview.html'
- def get(self, request, pk):
- self.user = self.request.user
- user= self.user
- contact = Contact.objects.get(user=user)
- if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
- raise Http404
- 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['media'] = Media.objects.filter(product=product)
- context['video'] = Video.objects.filter(product=product)
- return render(request, self.template_name, context)
- 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', '/'))
|