views.py 30 KB

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