forms.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. from django import forms
  2. from django.conf import settings
  3. from django.core.files import File
  4. from django.contrib.auth.forms import UserCreationForm
  5. from django_file_form.forms import UploadedFileField, FileFormMixin, CharField, MultipleUploadedFileField
  6. from django.contrib.auth.models import User
  7. from django.urls import reverse, reverse_lazy
  8. from django.forms import formset_factory
  9. from django.forms.widgets import HiddenInput
  10. from django.forms.models import inlineformset_factory
  11. # from django.views.generic.edit.FormMixin
  12. # from crispy_forms.layout.buttons import Submit, InputButton
  13. from crispy_forms.layout import Layout, Field, Fieldset, Div, Row, Column, HTML, ButtonHolder, Submit
  14. from crispy_forms.bootstrap import InlineField
  15. from crispy_forms.helper import FormHelper
  16. from captcha.fields import CaptchaField
  17. from newsletter.forms import *
  18. from marktplatz.widgets import *
  19. from .models import *
  20. from .urls import *
  21. def extend_help_text( help_text, myList ):
  22. extended_text = help_text
  23. extended_text += " z.B. "
  24. for x in myList:
  25. extended_text += x[1] + ", "
  26. extended_text = extended_text[:-2]
  27. extended_text += "."
  28. return extended_text
  29. class GeneralFields(forms.Form):
  30. terms = forms.BooleanField(required=True, )
  31. def __init__(self, *args, **kwargs):
  32. super(GeneralFields, self).__init__(*args, **kwargs)
  33. drurl = reverse_lazy( 'pages-generic', kwargs= { 'page': 'DATENSCHUTZRICHTLINIE' } )
  34. tmurl = reverse_lazy( 'pages-generic', kwargs= { 'page': 'TEILNAHME' } )
  35. self.fields ['terms'].label = 'Ich akzeptiere die <a target="_blank" href="{}"> Datenschutzrichtlinie</a> sowie die <a target="_blank" href="{}"> Teilnahmebedingungen</a> und habe sie gelesen.'.format(drurl, tmurl)
  36. class textSearchForm(forms.Form):
  37. mywidget = forms.TextInput( attrs={'onfocus': "this.value=''", 'class' : "border-thin"} )
  38. searchText = forms.CharField ( label='', widget = mywidget, max_length = 2048, min_length=3, empty_value="Suche...", initial='Suche...' )
  39. def __init__(self, *args, **kwargs):
  40. super(textSearchForm, self).__init__(*args, **kwargs)
  41. self.helper = FormHelper()
  42. self.helper.form_tag = False
  43. self.helper.layout = Layout(
  44. Div(
  45. Div('searchText', css_class='col-sm-6 col-6'),
  46. Div(
  47. ButtonHolder(
  48. Submit('submit', 'Suche', css_class='border-thin mybtn')
  49. ),
  50. css_class='col-sm-6 col-6'),
  51. css_class='form-row row mab-search-bar'),
  52. )
  53. class searchAgentForm(forms.ModelForm):
  54. class Meta:
  55. model = SearchAgent
  56. fields = ('ort', 'email')
  57. agent_layout = Layout(
  58. Fieldset(
  59. ('Suchagent einrichten'),
  60. # 'ort',
  61. Div(
  62. Div('ort', css_class='col-sm-6 col-6 checkbox-ort'),
  63. Div(
  64. HTML("""
  65. <button onclick=" ganz_wien()" class="btn btn-primary border-thin border-dark mybtn">Ganz Wien</button>
  66. <script>
  67. function ganz_wien(){
  68. $(".checkbox-ort .custom-control-label:contains('Wien')").each(function() {
  69. $this = $(this);
  70. var selector = "#" + $this.attr('for') ;
  71. $( selector ).prop('checked', true);
  72. });
  73. }
  74. </script>
  75. """),
  76. css_class='col-sm-6 col-6'),
  77. css_class='form-row row'),
  78. ),
  79. )
  80. class AgentNewslwtterForm( searchAgentForm, GeneralFields):
  81. email_field = forms.EmailField( label = 'Email', help_text="Du kannst den Suchagenten und den Newsletter jederzeit abbestellen - über einen Link in den Mails.", required=True, max_length=254 )
  82. subscribe = forms.BooleanField( label = 'Newsletter abonnieren', help_text='', required = False )
  83. captcha = CaptchaField( label = 'Bitte lösen Sie die Gleichung', generator='captcha.helpers.math_challenge' )
  84. def __init__(self, *args, **kwargs):
  85. super(searchAgentForm, self).__init__(*args, **kwargs)
  86. self.helper = FormHelper(self)
  87. self.helper.attrs = { 'enctype' : "multipart/form-data" }
  88. self.helper.form_action = reverse('agent-newsletter-create', kwargs={'newsletter_slug': "gemeinschaffen-newsletter"} )
  89. self.helper.layout = Layout(
  90. self.agent_layout,
  91. 'email_field',
  92. 'subscribe',
  93. 'terms',
  94. 'captcha',
  95. ButtonHolder(
  96. Submit('submit', 'Suchagent aktivieren', css_class='border-thin border-dark mybtn')
  97. ),
  98. )
  99. class RegisterForm(forms.ModelForm, GeneralFields):
  100. class Meta:
  101. model = Contact
  102. fields = ('first_name','last_name','email','adress','postcode','city','country',
  103. 'phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  104. class SignUpForm(UserCreationForm):
  105. captcha = CaptchaField( generator='captcha.helpers.math_challenge' )
  106. class Meta:
  107. model = User
  108. fields = ('username', 'password1', 'password2')
  109. class ProductForm(forms.ModelForm, GeneralFields):
  110. # terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  111. product_fields = ( 'terms', 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei','ort','rechtsform','orga','mitmachen','edit','public', )
  112. product_layout = Layout(
  113. Fieldset(
  114. ('Über dein Projekt'),
  115. 'name','claim','beschreibung',
  116. Div(
  117. Div('frei', css_class='col-sm-6 col-6 '),
  118. Div('kfrei', css_class='col-sm-6 col-6 ' ),
  119. css_class='form-row row mab-field-highlight'),
  120. 'learning','status',
  121. Div(
  122. Div('adresse', css_class='col-sm-6 col-6'),
  123. Div('ort', css_class='col-sm-6 col-6'),
  124. css_class='form-row row'),
  125. 'rechtsform','orga',
  126. Div(
  127. Div('website', css_class='col-sm-6 col-6'),
  128. Div('email', css_class='col-sm-6 col-6'),
  129. css_class='form-row row'),
  130. Div(
  131. Div('gruendungsjahr', css_class='col-sm-6 col-6'),
  132. Div('betriebgenommen', css_class='col-sm-6 col-6'),
  133. css_class='form-row row'),
  134. 'edit','public', 'mitmachen',
  135. ),
  136. )
  137. class Meta:
  138. model = Product
  139. fields = (
  140. 'terms',
  141. 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
  142. )
  143. def __init__(self,*args, **kwargs):
  144. super(ProductForm, self).__init__(*args, **kwargs)
  145. self.fields['orga'].widget = ListTextWidget(data_list=Product.ORGANIZATION, name='orga_list')
  146. self.fields['rechtsform'].widget = ListTextWidget(data_list=Product.RECHTSFORM, name='rechtsform_list')
  147. self.fields['edit'].widget = HiddenInput()
  148. self.fields['public'].widget = HiddenInput()
  149. #
  150. # extend_help_text
  151. #
  152. self.fields['orga'].help_text = extend_help_text (self.fields['orga'].help_text, Product.ORGANIZATION)
  153. self.fields['rechtsform'].help_text = extend_help_text (self.fields['rechtsform'].help_text, Product.RECHTSFORM)
  154. self.helper = FormHelper()
  155. self.helper.form_tag = False
  156. class WohnprojektForm(ProductForm):
  157. terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  158. class Meta:
  159. model = Wohnprojekt
  160. fields = ProductForm.product_fields + (
  161. 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'kflaechen', 'gemeinschaftr', 'kgemeinschaftr', 'sonderwohnformen', 'raumangebot', 'kraumangebot', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen', 'urbanem',
  162. )
  163. def __init__(self,*args, **kwargs):
  164. super(WohnprojektForm, self).__init__(*args, **kwargs)
  165. #
  166. #
  167. self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL, name='artmodell_list')
  168. self.fields['bautraeger'].widget = ListTextWidget(data_list=Wohnprojekt.BAUTRAEGER, name='bautraeger_list')
  169. self.fields['bauweise'].widget = ListTextWidget(data_list=Wohnprojekt.BAUWEISE, name='bauweise_list')
  170. self.fields['zielgruppen'].widget = ListTextWidget(data_list=Wohnprojekt.ZIELGRUPPEN, name='zielgruppen_list')
  171. self.fields['gprojekte'].widget = ListTextWidget(data_list=Wohnprojekt.GPROJEKTE, name='gprojekte_list')
  172. #
  173. #
  174. self.fields['bauweise'].help_text = extend_help_text (self.fields['bauweise'].help_text, Wohnprojekt.BAUWEISE)
  175. self.fields['zielgruppen'].help_text = extend_help_text (self.fields['zielgruppen'].help_text, Wohnprojekt.ZIELGRUPPEN)
  176. self.fields['gprojekte'].help_text = extend_help_text (self.fields['gprojekte'].help_text, Wohnprojekt.GPROJEKTE)
  177. #
  178. #
  179. self.fields['frei'].label = "Wohnung Frei"
  180. self.helper = FormHelper()
  181. self.helper.form_tag = False
  182. self.helper.layout = Layout(
  183. self.product_layout,
  184. Fieldset(
  185. 'Wohnprojekt',
  186. 'eigentum', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger',
  187. Div(
  188. Div('aerwachsene', css_class='col-sm-6 col-6'),
  189. Div('akinder', css_class='col-sm-6 col-6'),
  190. css_class='form-row row'),
  191. 'awohnungen',
  192. 'gaestwohnungen',
  193. Fieldset ( 'Flächen',
  194. Div(
  195. Div('wohnflaeche', css_class='col-sm-3 col-3'),
  196. Div('gewerbeflaechen', css_class='col-sm-3 col-3'),
  197. Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
  198. Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
  199. css_class='form-row row'),
  200. 'kflaechen',
  201. ),
  202. Div(
  203. Div('gemeinschaftr', css_class='col-sm-6 col-6'),
  204. Div('raumangebot', css_class='col-sm-6 col-6'),
  205. Div('kgemeinschaftr', css_class='col-sm-6 col-6'),
  206. Div('kraumangebot', css_class='col-sm-6 col-6'),
  207. css_class='form-row row'),
  208. Div('inseratstext', css_class = "mab-field-highlight"),
  209. 'sonderwohnformen',
  210. Div(
  211. Div('parbeiten', css_class='col-sm-6 col-6'),
  212. Div('karbeiten', css_class='col-sm-6 col-6'),
  213. css_class='form-row row'),
  214. 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'urbanem',
  215. )
  216. )
  217. # class FormsetHelper(FormHelper):
  218. # def __init__(self,*args, **kwargs):
  219. # super(FormsetHelper, self).__init__(*args, **kwargs)
  220. # #self.form_method = 'post'
  221. # self.form_tag = False
  222. # #self.render_hidden_fields = True
  223. # #self.render_required_fields = True
  224. # self.layout = Layout(
  225. # Fieldset(
  226. # (''),
  227. # Div(
  228. # Div('link_description', css_class='form-group col-md-4 mb-0'),
  229. # Div('link', css_class='form-group col-md-6 mb-0')
  230. # , css_class='form-row')
  231. # ))
  232. class MediaForm(FileFormMixin, forms.Form):
  233. image = UploadedFileField()
  234. name_for = forms.CharField()
  235. copyright = forms.CharField()
  236. #prefix = 'upload'
  237. def __init__(self, *args, **kwargs):
  238. super(MediaForm, self).__init__(*args, **kwargs)
  239. self.helper = FormHelper()
  240. self.helper.form_tag = False
  241. self.fields['name_for'].label = 'Bildbeschriftung'
  242. self.fields['copyright'].label = 'Urheberrechte'
  243. self.fields['image'].label = 'Bild oder Video'
  244. self.fields['image'].help_text = 'Bitte laden Sie Bilder im PNG- oder JPEG-Format hoch. Laden Sie Videos im MP4-Format hoch.'
  245. self.layout = Layout(
  246. Fieldset(
  247. (''),
  248. Div(
  249. Div('name_for', css_class='form-group col-md-6 mb-0'),
  250. Div('copyright', css_class='form-group col-md-4 mb-0')
  251. , css_class='form-row'),
  252. Div(
  253. Div('image', css_class='form-group col-md-6 mb-0'),
  254. css_class='form-row'),
  255. ))
  256. # class MediaForm_test(FileFormMixin, forms.Form):
  257. # image = UploadedFileField()
  258. # name_for = CharField()
  259. # copyright = CharField()
  260. #
  261. # def __init__(self, *args, **kwargs):
  262. # super(MediaForm_test, self).__init__(*args, **kwargs)
  263. # self.helper = FormHelper()
  264. # self.helper.form_tag = False
  265. # class MediaForm1(FileFormMixin, forms.Form):
  266. # image = MultipleUploadedFileField()
  267. # name_for = CharField()
  268. # copyright = CharField()
  269. #
  270. # def __init__(self, *args, **kwargs):
  271. # super(MediaForm1, self).__init__(*args, **kwargs)
  272. # self.helper = FormHelper()
  273. # self.helper.form_tag = False
  274. #
  275. #
  276. # class MediaForm2(FileFormMixin,forms.Form):
  277. # image = UploadedFileField()
  278. # name_for = CharField()
  279. # copyright = CharField()
  280. #
  281. # def __init__(self, *args, **kwargs):
  282. # super(MediaForm2, self).__init__(*args, **kwargs)
  283. # self.helper = FormHelper()
  284. # self.helper.form_tag = False
  285. # MediaFormSet = formset_factory(MediaForm_test, extra=3)
  286. #
  287. #
  288. # class MediaFormsetHelper(FormHelper):
  289. #
  290. # def __init__(self,*args, **kwargs):
  291. # super(MediaFormsetHelper, self).__init__(*args, **kwargs)
  292. # self.form_tag = False
  293. # self.layout = Layout(
  294. # Fieldset(
  295. # (''),
  296. # Div(
  297. # Div('name_for', css_class='form-group col-md-6 mb-0'),
  298. # Div('copyright', css_class='form-group col-md-4 mb-0')
  299. # , css_class='form-row'),
  300. # Div(
  301. # Div('image', css_class='form-group col-md-6 mb-0'),
  302. # css_class='form-row'),
  303. # ))
  304. class VideoForm(forms.ModelForm):
  305. class Meta:
  306. model = Video
  307. fields = ('name_for','copyright','image')