views.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. import csv
  2. import json
  3. import copy
  4. import itertools
  5. from PIL import Image
  6. from PIL import Image
  7. from PIL import ImageFont
  8. from PIL import ImageDraw
  9. from django.db import models
  10. from django.db.models import Count
  11. from django.core import serializers
  12. from django.core.files import File
  13. from django.core.mail import send_mail
  14. from django.urls import reverse, reverse_lazy
  15. from django.http import HttpResponseRedirect, Http404, HttpResponse
  16. from django.contrib import messages
  17. from django.contrib.auth import login, authenticate
  18. from django.contrib.auth.models import User
  19. from django.contrib.auth.mixins import LoginRequiredMixin
  20. from django.contrib.auth.decorators import login_required
  21. from django.contrib.auth.models import User, Group
  22. from django.views import generic
  23. from django.views.generic import TemplateView
  24. from django.views.generic import FormView
  25. from django.views.generic.edit import *
  26. from django.shortcuts import render, get_object_or_404, redirect, get_list_or_404, get_object_or_404
  27. from django.forms import formset_factory
  28. from django.forms import BaseModelFormSet
  29. from django.forms import modelformset_factory, inlineformset_factory
  30. from django.forms.models import model_to_dict
  31. from django_file_form.uploader import FileFormUploader
  32. from django_countries import countries
  33. from django.template import Context, Template
  34. from django.conf import settings
  35. from constance import config
  36. from django.db.models import Q
  37. from newsletter.forms import *
  38. from newsletter.views import *
  39. from marktplatz.models import *
  40. from .forms import *
  41. # Create your views here.
  42. def index(request):
  43. context = {}
  44. return render(request, 'index.html', context = context)
  45. def about(request):
  46. context = {}
  47. context = {'about_text': Template(config.ABOUT_CONTENT).render(Context(context))}
  48. return render(request, 'marktplatz/about.html', context)
  49. def submit(request):
  50. context = {}
  51. context = {'submit_text': Template(config.SUBMIT_TEXT).render(Context(context))}
  52. return render(request,'marktplatz/submit.html', context)
  53. def error_404_view(request, exception):
  54. data = {"name": "Markplatz"}
  55. return render(request,'marktplatz/error_404.html', data)
  56. @login_required
  57. def home(request):
  58. user = request.user
  59. if user.groups.filter(name='submission').exists():
  60. return HttpResponseRedirect(reverse('my-products'))
  61. else:
  62. return HttpResponseRedirect(reverse('products'))
  63. class AgentNewslwtterFormView(TemplateView):
  64. template_name = 'marktplatz/form_newsletter.html'
  65. embed = False
  66. def get_context_data(self, **kwargs):
  67. if self.embed :
  68. kwargs['embed'] = True
  69. kwargs['form_content'] = '<i class="fas fa-bell"></i> Suchagent einrichten'
  70. kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
  71. return super().get_context_data(**kwargs)
  72. def get(self, request, *args, **kwargs):
  73. context = self.get_context_data()
  74. context['form'] = AgentNewslwtterForm( )
  75. # print (context)
  76. return render(request, self.template_name, context )
  77. class AgentNewslwtterSubscribeView(SubscribeRequestView):
  78. action = 'subscribe'
  79. # form_class = AgentNewslwtterForm
  80. confirm = False
  81. embed = False
  82. def get_context_data(self, **kwargs):
  83. if self.embed :
  84. kwargs['embed'] = True
  85. kwargs['form_content'] = '<i class="fas fa-bell"></i> Suchagent einrichten'
  86. kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
  87. # kwargs['news_form'] = SubscribeRequestForm()
  88. return super().get_context_data(**kwargs)
  89. def post(self, request, *args, **kwargs):
  90. data = request.POST.copy()
  91. data["email"] = data["email_field"]
  92. agent_form = AgentNewslwtterForm ( data )
  93. if agent_form.is_valid():
  94. agent_form.save()
  95. else:
  96. context = {}
  97. context['form_errors'] = agent_form.errors
  98. context['form'] = agent_form
  99. return render(request, 'marktplatz/form_newsletter.html', context )
  100. if agent_form.cleaned_data['subscribe'] :
  101. # return super(SubscribeRequestView).get(self, request, *args, **kwargs)
  102. return super().post( request, *args, **kwargs )
  103. # return super(SubscribeRequestView, self).post( request, *args, **kwargs )
  104. context = {}
  105. context['content_a'] = '<br><i class="fas fa-bell"></i><br><h2>Dein Suchagent wurde erstellt!</h2>'
  106. return render(request, 'marktplatz/generic.html', context )
  107. def dispatch(self, request, *args, **kwargs):
  108. return super(SubscribeRequestView, self).dispatch( request, *args, **kwargs )
  109. class genericView(TemplateView):
  110. template_name = 'marktplatz/generic.html'
  111. def get(self, request, *args, **kwargs):
  112. instance = get_object_or_404(Wohnprojekt, pk=2 )
  113. context = {}
  114. context['object'] = model_to_dict ( instance )
  115. context['object']['myfield'] = '----------------------------'
  116. # print (context)
  117. return render(request, self.template_name, context )
  118. class pagesView(TemplateView):
  119. template_name = 'marktplatz/generic.html'
  120. def get(self, request, *args, **kwargs):
  121. context = {}
  122. context['content_a'] = "lalalala"
  123. context['content_b'] = config
  124. # print (config.items() )
  125. if 'page' in kwargs:
  126. context['content_a'] = kwargs['page']
  127. try:
  128. context['content_a'] = '<br><h2>' + kwargs['page'] + "</h2><br><br>"
  129. context['content_b'] = getattr(config , kwargs['page'], '')
  130. except KeyError:
  131. raise Http404
  132. # if config.get ( kwargs['page'] ) != None:
  133. # context['content_b'] = config.get ( kwargs['page'] )
  134. return render(request, self.template_name, context )
  135. class SearchAgentCreate(CreateView):
  136. model = SearchAgent
  137. template_name = 'marktplatz/form.html'
  138. fields = 'ort', 'email'
  139. success_url = reverse_lazy('generic')
  140. embed = False
  141. def get_context_data(self, **kwargs):
  142. if self.embed :
  143. kwargs['embed'] = True
  144. kwargs['form_content'] = '<i class="fas fa-bell"></i> Suchagent einrichten'
  145. kwargs['content_a'] = 'Dein Suchagent wurde erstellt!'
  146. # kwargs['news_form'] = SubscribeRequestForm()
  147. return super().get_context_data(**kwargs)
  148. def form_valid(self, form):
  149. super().form_valid(form)
  150. return render(self.request, 'marktplatz/generic.html',
  151. self.get_context_data(form=form))
  152. class SearchAgentDelete(DeleteView):
  153. model = SearchAgent
  154. template_name = 'marktplatz/form.html'
  155. success_url = reverse_lazy('products')
  156. def get(self, request, *args, **kwargs):
  157. searchagent = get_object_or_404(SearchAgent, pk= kwargs.get('pk') )
  158. context = {}
  159. context['form_content'] = 'Dein Suchagent wurde gelöscht!'
  160. if searchagent.hash == kwargs.get('hash'):
  161. if settings.DEBUG:
  162. return render(request, self.template_name, context )
  163. else:
  164. return super().get(self, request, *args, **kwargs)
  165. else:
  166. context['form_content'] = 'Oopala, das hat nicht geklappt.'
  167. return render(request, self.template_name, context )
  168. class ProductDelete(LoginRequiredMixin, DeleteView):
  169. model = Product
  170. template_name = 'marktplatz/product_delete.html'
  171. success_url = reverse_lazy('products')
  172. def get(self, request, *args, **kwargs):
  173. contact = get_object_or_404(Contact, user= self.request.user ) # Contact.objects.get(user=self.request.user)
  174. product = get_object_or_404(Product, pk= kwargs.get('pk') )
  175. if (contact.id == product.contact.id) :
  176. return super(ProductDelete, self).get(self, request, *args, **kwargs)
  177. else:
  178. raise Http404
  179. def post(self, request, *args, **kwargs):
  180. contact = get_object_or_404(Contact, user= self.request.user ) # Contact.objects.get(user=self.request.user)
  181. product = get_object_or_404(Product, pk= kwargs.get('pk') )
  182. if (contact.id == product.contact.id) :
  183. context = {}
  184. context['form_content'] = 'Dein Projekt wird gelöscht, wenn die Seite live ist!'
  185. if settings.DEBUG:
  186. return render(request, self.template_name, context )
  187. else:
  188. return super().post(self, request, *args, **kwargs)
  189. else:
  190. raise Http404
  191. context = {}
  192. context['form_content'] = 'Oopala, das hat nicht geklappt.'
  193. return render(request, self.template_name, context )
  194. class ProductsView(generic.ListView):
  195. model = Wohnprojekt
  196. #context_object_name = 'Products'
  197. # show the best 4 website finish
  198. def get_queryset(self):
  199. # original qs
  200. qs = super().get_queryset()
  201. self.user = self.request.user
  202. user = self.user
  203. # if user.groups.filter(name='jury').exists():
  204. # return qs.filter(sumbitted = config.CURRENT_EVENT)
  205. qs = qs.order_by('frei')
  206. if user.groups.filter(name='submission').exists():
  207. contact = Contact.objects.get(user=user)
  208. return qs.filter(contact = contact)
  209. if user.is_superuser:
  210. return qs
  211. qs = qs.filter(public = True)
  212. return qs
  213. def get_context_data(self, **kwargs):
  214. context = super().get_context_data(**kwargs)
  215. user =self.request.user
  216. context['user'] = user
  217. used_countries = []
  218. orts = {}
  219. years = {''}
  220. for product in context['wohnprojekt_list']:
  221. if not years.__contains__(product.year):
  222. years.add(product.year)
  223. for country in product.country:
  224. if not used_countries.__contains__(country):
  225. used_countries.append(country)
  226. # if not used_orts.__contains__( product.get_ort_display() ):
  227. if not product.ort in orts:
  228. orts[product.ort] = product.get_ort_display()
  229. years.remove('')
  230. context['year_list'] = years
  231. context['count_list'] = used_countries
  232. context['frei_list'] = Product.FREI
  233. context['status_list'] = Product.STATUS
  234. context['ort_dict'] = orts
  235. context['altneu_list'] = Wohnprojekt.ALTNEU
  236. context['sponsor_cards'] = Template( config.SPONSOR_CARDS ).render( Context(context) )
  237. context['main_card'] = Template( config.MAIN_CARD ).render( Context(context) )
  238. context['textSearchForm'] = textSearchForm()
  239. return context
  240. template_name = 'marktplatz/product_overview.html'
  241. class SearchProductsView(ProductsView):
  242. def get_queryset(self, qfilter=None, **kwargs ):
  243. # original qs
  244. qs = super().get_queryset()
  245. self.user = self.request.user
  246. user = self.user
  247. if qfilter!=None:
  248. 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)
  249. qs = qs.order_by('frei')
  250. return qs.filter(public = True)
  251. def post(self, request, *args, **kwargs):
  252. qform = textSearchForm( request.POST )
  253. if qform.is_valid():
  254. self.object_list = self.get_queryset(qfilter= qform.cleaned_data["searchText"] )
  255. allow_empty = self.get_allow_empty()
  256. if not allow_empty:
  257. # When pagination is enabled and object_list is a queryset,
  258. # it's better to do a cheap query than to load the unpaginated
  259. # queryset in memory.
  260. if self.get_paginate_by(self.object_list) is not None and hasattr(self.object_list, 'exists'):
  261. is_empty = not self.object_list.exists()
  262. else:
  263. is_empty = not self.object_list
  264. if is_empty:
  265. raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.") % {
  266. 'class_name': self.__class__.__name__,
  267. })
  268. context = self.get_context_data()
  269. return self.render_to_response(context)
  270. class DetailView(generic.DetailView):
  271. model = Product
  272. template_name = 'marktplatz/product_detail.html'
  273. embed = False
  274. def get_context_data(self, **kwargs):
  275. # context = super().get_context_data(**kwargs)
  276. if self.embed :
  277. kwargs['embed'] = True
  278. # context['credits'] = Credit.objects.select_related().get(product = self.kwargs['pk'])
  279. # context['wohnprojekt'] = self.object.wohnprojekt
  280. return super().get_context_data(**kwargs)
  281. def post(self, request, *args, **kwargs):
  282. vote = int(request.POST['vote'])
  283. comment = str(request.POST['comment'])
  284. if vote <= 10:
  285. try:
  286. get_vote = Vote.objects.get(juryMember=self.request.user, product=self.kwargs['pk'])
  287. get_vote.vote = vote
  288. get_vote.comment = comment
  289. get_vote.save()
  290. except Vote.DoesNotExist:
  291. get_vote = Vote(product = Product.objects.get(pk=self.kwargs['pk']), juryMember= self.request.user, vote = vote, comment=comment)
  292. get_vote.save()
  293. else:
  294. return HttpResponseRedirect(request.path)
  295. return HttpResponseRedirect(reverse('products'))
  296. class CardDetailView(DetailView):
  297. template_name = 'marktplatz/product_detail_card.html'
  298. class AdminView(LoginRequiredMixin, generic.ListView):
  299. model = Product
  300. template_name='marktplatz/admin_panel.html'
  301. def get_context_data(self, **kwargs):
  302. context = super().get_context_data(**kwargs)
  303. return context
  304. def post(self, request, *args, **kwargs):
  305. # print (request.POST.dict())
  306. context = request.POST.dict()
  307. public = {k: v for k, v in context.items() if k.startswith('product_p')}
  308. for elemk in public:
  309. # print(elemk + " - " + public[elemk] )
  310. keys = elemk.split(".")
  311. current_product = Product.objects.get(pk=keys[1])
  312. if public[elemk] == 'true':
  313. current_product.public = True
  314. current_product.save()
  315. else:
  316. current_product.public = False
  317. current_product.save()
  318. edit = {k: v for k, v in context.items() if k.startswith('product_e')}
  319. # print (edit)
  320. for elemk in edit:
  321. # print(elemk + " - " + edit[elemk] )
  322. keys = elemk.split(".")
  323. current_product = Product.objects.get(pk=keys[1])
  324. if edit[elemk] == 'true':
  325. current_product.edit = True
  326. current_product.save()
  327. else:
  328. current_product.edit = False
  329. current_product.save()
  330. return HttpResponseRedirect('')
  331. class ProductsListView(generic.ListView):
  332. model = Product
  333. template_name='marktplatz/product_list.html'
  334. embed = False
  335. def get_context_data(self, **kwargs):
  336. if self.embed :
  337. kwargs['embed'] = True
  338. return super().get_context_data(**kwargs)
  339. def post(self, request, *args, **kwargs):
  340. # print (request.POST.dict())
  341. context = request.POST.dict()
  342. public = {k: v for k, v in context.items() if k.startswith('product_p')}
  343. for elemk in public:
  344. # print(elemk + " - " + public[elemk] )
  345. keys = elemk.split(".")
  346. current_product = Product.objects.get(pk=keys[1])
  347. if public[elemk] == 'true':
  348. current_product.public = True
  349. current_product.save()
  350. else:
  351. current_product.public = False
  352. current_product.save()
  353. edit = {k: v for k, v in context.items() if k.startswith('product_e')}
  354. # print (edit)
  355. for elemk in edit:
  356. # print(elemk + " - " + edit[elemk] )
  357. keys = elemk.split(".")
  358. current_product = Product.objects.get(pk=keys[1])
  359. if edit[elemk] == 'true':
  360. current_product.edit = True
  361. current_product.save()
  362. else:
  363. current_product.edit = False
  364. current_product.save()
  365. return HttpResponseRedirect('')
  366. class lightboximg(LoginRequiredMixin, TemplateView):
  367. template_name = "marktplatz/importold.html"
  368. def post(self, request):
  369. context = {'faild': ''}
  370. faild = ''
  371. from1 = int(request.POST['from'])
  372. to = int(request.POST['to'])
  373. products = Product.objects.all()
  374. i = 0
  375. for product in products:
  376. i+=1
  377. if (i < from1):
  378. continue
  379. if (i > to):
  380. break
  381. medias = product.media_set.all()
  382. for oldmedia in medias:
  383. if not oldmedia.image_norm:
  384. oldpic = oldmedia.image
  385. oldmedia.image_norm.save(oldmedia.filename() + '_norm', oldpic)
  386. oldmedia.save
  387. return render(request, self.template_name, context)
  388. def get(self, request):
  389. context = {'faild': ''}
  390. faild = ''
  391. context['faild'] = faild
  392. return render(request, self.template_name, context)
  393. class registerView(FormView):
  394. template_name = 'marktplatz/form.html'
  395. # form_class = RegisterForm
  396. def get(self, request):
  397. # form = self.form_class()
  398. context = request.GET.dict()
  399. context['form'] = RegisterForm
  400. context['signUp'] = SignUpForm
  401. return render(request, self.template_name, context)
  402. def post(self, request):
  403. # print ( request.POST.dict() )
  404. form = SignUpForm(request.POST)
  405. form_contact = RegisterForm(request.POST)
  406. #
  407. # Filter existing emails
  408. #
  409. qs = Contact.objects.filter( email=form_contact.data['email'] )
  410. if ( qs.count() ):
  411. form_contact.add_error('email', "Email already in use, please reset your password.")
  412. if form.is_valid() and form_contact.is_valid():
  413. # print (form.cleaned_data)
  414. # print (form_contact.cleaned_data)
  415. contact = form_contact.save(commit=False)
  416. user = form.save()
  417. user.email = contact.email
  418. user.first_name = contact.first_name
  419. user.last_name = contact.last_name
  420. user.set_password(form.cleaned_data.get('password1'))
  421. user.save()
  422. contact.user = user
  423. contact.save()
  424. username = form.cleaned_data.get('username')
  425. raw_password = form.cleaned_data.get('password1')
  426. group = Group.objects.get(name='submission')
  427. group.user_set.add(user)
  428. user = authenticate(username=username, password=raw_password)
  429. if user is not None:
  430. # A backend authenticated the credentials
  431. login(request, user)
  432. return redirect('products')
  433. else:
  434. # No backend authenticated the credentials
  435. send_mail(
  436. 'error with auth',
  437. 'Error in authorization.' + json.dumps( request.POST.dict() ),
  438. 'awards@berta.mediaarchitecture.org',
  439. ['juan@mediaarchitecture.org'],
  440. fail_silently=False,
  441. )
  442. return redirect('products')
  443. login(request, user)
  444. else:
  445. # print (form.errors)
  446. # print (form_contact.errors)
  447. send_mail(
  448. 'error with auth',
  449. '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),
  450. 'awards@berta.mediaarchitecture.org',
  451. ['juan@mediaarchitecture.org'],
  452. fail_silently=False,
  453. )
  454. context = request.POST.dict()
  455. context['signUp'] = form
  456. context['form'] = form_contact
  457. context['signup_errors'] = form.errors
  458. context['contact_errors'] = form_contact.errors
  459. return render(request, self.template_name, context)
  460. context = request.GET.dict()
  461. context['form'] = RegisterForm
  462. context['signUp'] = SignUpForm
  463. return render(request, self.template_name, context)
  464. class NewProductView(LoginRequiredMixin, FormView):
  465. use_ajax = True
  466. template_name = 'marktplatz/add.html'
  467. model = Product
  468. class NewWohnprojektView(LoginRequiredMixin, FormView):
  469. use_ajax = True
  470. template_name = 'marktplatz/add.html'
  471. model = Product
  472. def get(self, request,*args, **kwargs):
  473. # form = self.form_class()
  474. context = request.GET.dict()
  475. context['product'] = WohnprojektForm
  476. context['use_ajax'] = True
  477. context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
  478. return render(request, self.template_name, context)
  479. def post(self, request):
  480. product_f = WohnprojektForm(request.POST, request.FILES)
  481. if product_f.is_valid():
  482. product = product_f.save(commit=False)
  483. product.contact = Contact.objects.get(user = self.request.user)
  484. product.edit=True
  485. product.public = False
  486. product.sumbitted = config.CURRENT_EVENT
  487. product.save()
  488. # product_f.save_m2m()
  489. if 'addImage' in request.POST:
  490. return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': product.pk}))
  491. return HttpResponseRedirect(reverse('my-products'))
  492. else:
  493. context = request.POST.dict()
  494. context['product'] = product_f
  495. context['product_errors'] = product_f.errors
  496. context['use_ajax'] = True
  497. return render(request, self.template_name, context)
  498. class uploadView(LoginRequiredMixin, FormView):
  499. use_ajax = True
  500. template_name = 'marktplatz/file_upload.html'
  501. def get(self, request, pk):
  502. user = self.request.user
  503. contact = Contact.objects.get(user=user)
  504. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  505. raise Http404
  506. product = Product.objects.get(pk=pk)
  507. photo = product.media_set.count()
  508. video = product.video_set.count()
  509. context = request.GET.dict()
  510. contact = Contact.objects.get(user=self.request.user)
  511. product = get_object_or_404(Wohnprojekt, (Q(pk=pk) & Q(contact=contact)))
  512. context['product'] = product
  513. context['images'] = Media.objects.filter(product=product)
  514. context['video'] = Video.objects.filter(product=product)
  515. context['media'] = MediaForm
  516. context['media_count'] = False
  517. context['video_count'] = False
  518. if photo >= 7:
  519. context['media_count'] = True
  520. if video >= 2:
  521. context['video_count'] = True
  522. context['use_ajax'] = True
  523. context['warning'] = False
  524. return render(request, self.template_name, context)
  525. def post(self, request, pk):
  526. vid1_f = MediaForm(request.POST, request.FILES)
  527. product = Product.objects.get(pk=pk)
  528. i = product.media_set.count()
  529. i += product.video_set.count()
  530. video = product.video_set.count()
  531. photo = product.media_set.count()
  532. context = request.GET.dict()
  533. contact = Contact.objects.get(user=self.request.user)
  534. product = get_object_or_404(Product, (Q(pk=pk) & Q(contact=contact)))
  535. context['product'] = product
  536. context['images'] = Media.objects.filter(product=product)
  537. context['video'] = Video.objects.filter(product=product)
  538. context['media'] = MediaForm
  539. context['media_count'] = False
  540. context['video_count'] = False
  541. context['use_ajax'] = True
  542. context['warning'] = False
  543. if vid1_f.is_valid():
  544. image = vid1_f.cleaned_data['image']
  545. name = image.name
  546. if 'png' in name or 'jpg' in name or 'jpeg' in name:
  547. if photo < 7:
  548. vid1 = Media()
  549. vid1.product = product
  550. vid1.filename = name
  551. vid1.copyright = vid1_f.cleaned_data['copyright']
  552. vid1.name_for = vid1_f.cleaned_data['name_for']
  553. vid1.image.save(name, image)
  554. vid1.image_small.save(str(i) + '_small', image)
  555. vid1.image_medium.save(str(i) + '_medium', image)
  556. vid1.image_big.save(str(i) + '_big', image)
  557. vid1.image_norm.save(str(i) + '_norm', image)
  558. vid1.save
  559. photo += 1
  560. else:
  561. context['warning'] = "You can not upload any more photos!"
  562. elif 'mp4' in name or 'm3u8' in name or 'm4v' in name:
  563. if video < 2:
  564. #TODO clean image here!
  565. vid1 = Video()
  566. vid1.product = product
  567. vid1.filename = name
  568. vid1.copyright = vid1_f.cleaned_data['copyright']
  569. vid1.name_for = vid1_f.cleaned_data['name_for']
  570. vid1.image.save(name, image)
  571. vid1.save
  572. video += 1
  573. else:
  574. context['warning'] = "You can not upload any more videos!"
  575. vid1_f.delete_temporary_files()
  576. if photo >= 7:
  577. context['media_count'] = True
  578. if video >= 2:
  579. context['video_count'] = True
  580. return render(request, self.template_name, context)
  581. handle_upload = FileFormUploader()
  582. class EditView(LoginRequiredMixin, FormView):
  583. template_name = 'marktplatz/add.html'
  584. def get(self, request, pk):
  585. user = self.request.user
  586. contact = Contact.objects.get(user=user)
  587. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  588. raise Http404
  589. context = request.GET.dict()
  590. context['product'] = WohnprojektForm(instance=Wohnprojekt.objects.get(pk=pk))
  591. context['use_ajax'] = True
  592. context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
  593. return render(request, self.template_name, context)
  594. def post(self, request, pk):
  595. product_f = WohnprojektForm(request.POST, request.FILES, instance=Wohnprojekt.objects.get(pk=pk))
  596. if product_f.is_valid():
  597. if product_f.has_changed():
  598. product = product_f.save( commit=False )
  599. update_fields = product_f.changed_data
  600. product.current_uri = request.build_absolute_uri( '/' ).rstrip('/')
  601. product.save( update_fields=update_fields )
  602. # product.save( )
  603. if 'addImage' in request.POST:
  604. return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': pk}))
  605. return HttpResponseRedirect(reverse('my-products'))
  606. else:
  607. context = request.GET.dict()
  608. context['product'] = product_f
  609. context['product_errors'] = product_f.errors
  610. context['use_ajax'] = True
  611. return render(request, self.template_name, context)
  612. class UsersProducts(LoginRequiredMixin, generic.ListView):
  613. model = Product
  614. template_name='marktplatz/myProducts.html'
  615. def get_queryset(self):
  616. contact = Contact.objects.get(user=self.request.user)
  617. return Product.objects.filter(contact=contact)
  618. def get_context_data(self, **kwargs):
  619. context = super().get_context_data(**kwargs)
  620. contact = Contact.objects.get(user=self.request.user)
  621. context['user'] = self.request.user
  622. return context
  623. class MediaView(LoginRequiredMixin, TemplateView):
  624. template_name = 'marktplatz/media_overview.html'
  625. def get(self, request, pk):
  626. self.user = self.request.user
  627. user= self.user
  628. contact = Contact.objects.get(user=user)
  629. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  630. raise Http404
  631. context = request.GET.dict()
  632. contact = Contact.objects.get(user=self.request.user)
  633. product = get_object_or_404(Product, (Q(pk = pk) & Q(contact = contact)))
  634. context['product'] = product
  635. context['media'] = Media.objects.filter(product=product)
  636. context['video'] = Video.objects.filter(product=product)
  637. return render(request, self.template_name, context)
  638. def delete_media(request, pk):
  639. user = request.user
  640. contact = Contact.objects.get(user=user)
  641. object = Media.objects.get(id=pk)
  642. if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
  643. raise Http404
  644. object.delete()
  645. return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
  646. def delete_video(request, pk):
  647. user = request.user
  648. contact = Contact.objects.get(user=user)
  649. object = Video.objects.get(id=pk)
  650. if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
  651. raise Http404
  652. object.delete()
  653. return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))