views.py 30 KB

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