| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- from django.shortcuts import render
- from django.views import generic
- from django.views.generic import TemplateView
- from django.views.generic.edit import *
- from marktplatz.models import *
- from django.db import models
- from django.contrib.auth.models import User
- from django.contrib.auth.mixins import LoginRequiredMixin
- from django.core import serializers
- from django.core.mail import send_mail
- from django.contrib.auth.decorators import login_required
- from django.contrib.auth.models import User, Group
- from django.http import HttpResponseRedirect
- from django.urls import reverse, reverse_lazy
- from django.core.files import File
- from django.http import HttpResponse
- from django.views.generic import FormView
- from django.contrib.auth import login, authenticate
- from django.shortcuts import render, redirect
- from django.forms import formset_factory
- from django.forms import BaseModelFormSet
- from django.forms import modelformset_factory, inlineformset_factory
- from .forms import LinkFormSet, LinkForm, FormsetHelper, MediaFormsetHelper, MediaFormSet
- from django.contrib import messages
- from django_file_form.uploader import FileFormUploader
- from django_countries import countries
- from django.template import Context, Template
- from django.conf import settings
- from constance import config
- from django.http import Http404
- from django.db.models import Count
- from PIL import Image
- from PIL import ImageFont
- from PIL import ImageDraw
- from django.db.models import Q
- from django.shortcuts import get_list_or_404, get_object_or_404
- from .forms import RegisterForm, SignUpForm, DescriptionForm,SubmissionForm,CreditForm,DescriptionForm,InteractionForm,LinkForm,MediaForm,VideoForm, MediaForm_test, MediaForm1, MediaForm2
- import os
- import itertools
- from PIL import Image
- import json
- import copy
- import csv
- # 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)
- #template = Template( config.ABOUT_CONTENT )
- #return HttpResponse( template.render( Context(context) ) )
- #return render(request, rendered , context = 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": "ThePythonDjango.com"}
- 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('my-products'))
- else:
- return HttpResponseRedirect(reverse('products'))
- class SearchAgentCreate(CreateView):
- model = SearchAgent
- template_name = 'marktplatz/form.html'
- fields = 'ort', 'email'
- success_url = reverse_lazy('products')
- class ProductsView(generic.ListView):
- model = Product
- #context_object_name = 'Products'
- # show the best 4 website finish
- def get_queryset(self):
- # original qs
- qs = super().get_queryset()
- self.user = self.request.user
- user = self.user
- if user.groups.filter(name='jury').exists():
- return qs.filter(sumbitted = config.CURRENT_EVENT)
- if user.groups.filter(name='submission').exists():
- contact = Contact.objects.get(user=user)
- return qs.filter(contact = contact)
- if user.is_superuser:
- return qs
- return qs.filter(public = True)
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- user =self.request.user
- context['user'] = user
- used_countries = []
- years = {''}
- for product in context['product_list']:
- if not years.__contains__(product.year):
- years.add(product.year)
- for country in product.country:
- if not used_countries.__contains__(country):
- used_countries.append(country)
- years.remove('')
- context['year_list'] = years
- context['count_list'] = used_countries
- context['cat_list'] = Category.objects.all
- context['sponsor_cards'] = Template( config.SPONSOR_CARDS ).render( Context(context) )
- context['main_card'] = Template( config.MAIN_CARD ).render( Context(context) )
- return context
- template_name = 'marktplatz/product_overview.html'
- class DetailView(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['descriptions'] = Description.objects.select_related().get(product = self.kwargs['pk'])
- # context['interactions'] = Interaction.objects.select_related().get(product=self.kwargs['pk'])
- # context['PAUI'] = Category.objects.get(short_name='PAUI')
- # context['wohnprojekt'] = self.object.wohnprojekt
- # print (context)
- # print (context['object'])
- # print (context['product'])
- return super().get_context_data(**kwargs)
- def post(self, request, *args, **kwargs):
- vote = int(request.POST['vote'])
- comment = str(request.POST['comment'])
- if vote <= 10:
- try:
- get_vote = Vote.objects.get(juryMember=self.request.user, product=self.kwargs['pk'])
- get_vote.vote = vote
- get_vote.comment = comment
- get_vote.save()
- except Vote.DoesNotExist:
- get_vote = Vote(product = Product.objects.get(pk=self.kwargs['pk']), juryMember= self.request.user, vote = vote, comment=comment)
- get_vote.save()
- else:
- return HttpResponseRedirect(request.path)
- return HttpResponseRedirect(reverse('products'))
- class VoteView(LoginRequiredMixin, generic.ListView):
- model = Product
- template_name='marktplatz/voteDetail.html'
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['user'] = User.objects.filter(groups__name='JuryMembers')
- return context
- class CidView(LoginRequiredMixin, generic.ListView):
- model = Product
- template_name='marktplatz/votes_cid.html'
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- return context
- def post(self, request, *args, **kwargs):
- for pk in request.POST.dict():
- if not 'csrfmiddlewaretoken' in pk:
- if request.POST[pk] != '' and ('cid' in pk):
- now_product = Product.objects.get(pk=pk.split('.')[0])
- now_product.class_cid = request.POST[pk]
- now_product.save()
- if request.POST[pk] != '' and ('sub' in pk):
- now_product = Product.objects.get(pk=pk.split('.')[0])
- now_product.sumbitted = request.POST[pk]
- now_product.save()
- return HttpResponseRedirect('')
- 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:
- # print(elemk + " - " + public[elemk] )
- keys = elemk.split(".")
- now_Product = Product.objects.get(pk=keys[1])
- if public[elemk] == 'true':
- now_Product.public = True
- now_Product.save()
- else:
- now_Product.public = False
- now_Product.save()
- edit = {k: v for k, v in context.items() if k.startswith('product_e')}
- # print (edit)
- for elemk in edit:
- # print(elemk + " - " + edit[elemk] )
- keys = elemk.split(".")
- now_Product = Product.objects.get(pk=keys[1])
- if edit[elemk] == 'true':
- now_Product.edit = True
- now_Product.save()
- else:
- now_Product.edit = False
- now_Product.save()
- return HttpResponseRedirect('')
- 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'] = 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)
- # if form_contact.is_valid():
- # contact = form_contact.save(commit=False)
- # contact.user = user
- # contact.save()
- #
- # return redirect('products')
- context = request.GET.dict()
- context['form'] = RegisterForm
- context['signUp'] = SignUpForm
- return render(request, self.template_name, context)
- class NewSubmitView(LoginRequiredMixin, FormView):
- use_ajax = True
- template_name = 'marktplatz/add.html'
- model = Product
- def get(self, request,*args, **kwargs):
- # form = self.form_class()
- context = request.GET.dict()
- context['product'] = SubmissionForm
- # context['lnks'] = LinkFormSet
- # context['lnks_helper'] = FormsetHelper()
- 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):
- product_f = SubmissionForm(request.POST, request.FILES)
- if product_f.is_valid():
- product = product_f.save(commit=False)
- product.contact = Contact.objects.get(user = self.request.user)
- product.edit=True
- product.public = False
- product.sumbitted = config.CURRENT_EVENT
- product.save()
- product_f.save_m2m()
- if 'addImage' in request.POST:
- return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': product.pk}))
- return HttpResponseRedirect(reverse('my-products'))
- else:
- context = request.POST.dict()
- context['product'] = product_f
- context['product_errors'] = product_f.errors
- context['use_ajax'] = True
- return render(request, self.template_name, context)
- class uploadView(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)
- if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
- 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)
- product = get_object_or_404(Wohnprojekt, (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(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'] = SubmissionForm(instance=Wohnprojekt.objects.get(pk=pk))
- linkFormSet = inlineformset_factory(Product,Link, form=LinkForm, extra=0)
- myLinkFormSet = linkFormSet(instance= Product.objects.get(pk=pk) )
- context['lnks'] = myLinkFormSet
- context['lnks_helper'] = FormsetHelper()
- 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 = SubmissionForm(request.POST, request.FILES, instance=Wohnprojekt.objects.get(pk=pk))
- # credits_f = CreditForm(request.POST,instance = Credit.objects.select_related().get(product=pk))
- # description_f = DescriptionForm(request.POST,instance = Description.objects.select_related().get(product=pk))
- # lnks_f = LinkFormSet(request.POST,instance = Wohnprojekt.objects.get(pk=pk) )
- # interaction_f = InteractionForm(request.POST,instance = Interaction.objects.select_related().get(product=pk))
- vid1_f = VideoForm(request.POST, request.FILES)
- if product_f.is_valid():
- update_fields = []
- # https://stackoverflow.com/questions/35879101/how-to-determine-if-a-field-has-changed-in-a-django-modelform/43550210
- if product_f.has_changed():
- if 'frei' in product_f.changed_data:
- print('frei changed')
- product_f.save( )
- product = product_f.save()
- # for lnk in lnks_f:
- # if lnk.is_valid():
- # print( "link valid ......................." )
- # lnk_ = lnk.save(commit=False)
- # lnk_.product = product
- # lnk_.save()
- if 'addImage' in request.POST:
- return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': pk}))
- return HttpResponseRedirect(reverse('my-products'))
- else:
- print( "not saved xxxxxxx" )
- context = request.GET.dict()
- context['product'] = product_f
- context['product_errors'] = product_f.errors
- # context['lnks'] = lnks_f
- # context['lnks_helper'] = FormsetHelper()
- 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)
- return Product.objects.filter(contact=contact)
- 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', '/'))
|