class SimplePage(Page): body_de = fields.RichTextField() body_en = fields.RichTextField(blank=True) body = TranslatedField( 'body_de', 'body_en' ) en_content_panels = [ FieldPanel('body_en') ] de_content_panels = [ FieldPanel('body_de') ] common_panels = [ FieldPanel('title'), FieldPanel('slug') ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = ['a4_candy_cms_pages.SimplePage']
class SocialMedia(BaseSetting): facebook = models.URLField(blank=True) twitter = models.URLField(blank=True) github = models.URLField(blank=True) fallback_image = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Fallback Image", help_text= "Fallback Image for social meta tags if no other image is there") fallback_description_de = models.TextField( default= 'Mit adhocracy+ wird digitale Demokratie einfach – für alle und überall.' ) fallback_description_en = models.TextField( default= 'adhocracy+ makes digital democracy easy - for everyone no matter where.' ) fallback_description = TranslatedField('fallback_description_de', 'fallback_description_en') panels = [ FieldPanel('facebook'), FieldPanel('twitter'), FieldPanel('github'), ImageChooserPanel('fallback_image'), FieldPanel('fallback_description_de'), FieldPanel('fallback_description_en') ]
class CustomImage(AbstractImage): caption_en = models.CharField(max_length=255, blank=True) caption_de = models.CharField(max_length=255, blank=True) admin_form_fields = Image.admin_form_fields + ('caption_en', 'caption_de') caption = TranslatedField('caption_de', 'caption_en')
class NewsIndexPage(Page): subtitle_de = models.CharField( max_length=250, blank=True, verbose_name="Title") subtitle_en = models.CharField( max_length=250, blank=True, verbose_name="Title") subtitle = TranslatedField( 'subtitle_de', 'subtitle_en' ) @property def news(self): news = self.get_children().specific().live() news = news.order_by('-first_published_at') return news def get_context(self, request): news = self.news page = request.GET.get('page', 1) paginator = Paginator(news, 20) try: news = paginator.page(page) except InvalidPage: raise Http404 context = super(NewsIndexPage, self).get_context(request) context['news'] = news return context de_content_panels = [ FieldPanel('subtitle_de'), ] en_content_panels = [ FieldPanel('subtitle_en'), ] common_panels = [ FieldPanel('title'), FieldPanel('slug') ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = ['a4_candy_cms_news.NewsPage']
class SimplePage(Page): body_streamfield_de = fields.StreamField([ ('html', blocks.RawHTMLBlock()), ('richtext', blocks.RichTextBlock()), ('image', ImageChooserBlock()), ('faq', cms_blocks.AccordeonListBlock()), ('image_cta', cms_blocks.ImageCTABlock()), ('col_list_image_cta_block', cms_blocks.ColumnsImageCTABlock()), ('columns_cta', cms_blocks.ColumnsCTABlock()), ('downloads', cms_blocks.DownloadListBlock()), ('quote', cms_blocks.QuoteBlock()) ]) body_streamfield_en = fields.StreamField( [('html', blocks.RawHTMLBlock()), ('richtext', blocks.RichTextBlock()), ('image', ImageChooserBlock()), ('faq', cms_blocks.AccordeonListBlock()), ('image_cta', cms_blocks.ImageCTABlock()), ('col_list_image_cta_block', cms_blocks.ColumnsImageCTABlock()), ('columns_cta', cms_blocks.ColumnsCTABlock()), ('downloads', cms_blocks.DownloadListBlock()), ('quote', cms_blocks.QuoteBlock())], blank=True) body_streamfield = TranslatedField('body_streamfield_de', 'body_streamfield_en') en_content_panels = [StreamFieldPanel('body_streamfield_en')] de_content_panels = [StreamFieldPanel('body_streamfield_de')] common_panels = [FieldPanel('title'), FieldPanel('slug')] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = ['a4_candy_cms_pages.SimplePage']
class FormPage(WagtailCaptchaEmailForm): header_de = models.CharField(max_length=500, blank=True, verbose_name="Header") header_en = models.CharField(max_length=500, blank=True, verbose_name="Header") intro_en = RichTextField(blank=True) intro_de = RichTextField(blank=True) thank_you_text_en = models.TextField(blank=True) thank_you_text_de = models.TextField(blank=True) contact_person_name = models.CharField(max_length=100, blank=True) contact_person_image = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Image of contact person", help_text="The Image will be shown " "besides the name of the contact person") header = TranslatedField('header_de', 'header_en') intro = TranslatedField('intro_de', 'intro_en') thank_you_text = TranslatedField('thank_you_text_de', 'thank_you_text_en') def get_submission_class(self): return CustomFormSubmission def process_form_submission(self, form): form.fields.pop('captcha', None) form.cleaned_data.pop('captcha', None) data = form.cleaned_data submission = self.get_submission_class().objects.create( form_data=json.dumps(form.cleaned_data, cls=DjangoJSONEncoder), page=self, email=data['email'], message=data['message'], telephone_number=data['telephone_number'], name=data['name']) if self.to_address: self.send_mail(form) if form.cleaned_data['receive_copy']: AnswerToContactFormEmail.send(submission) return submission def render_landing_page(self, request, form_submission=None, *args, **kwargs): if 'HTTP_REFERER' in request.META \ and request.META.get('HTTP_REFERER'): messages.add_message(request, messages.SUCCESS, self.thank_you_text) return redirect(request.META['HTTP_REFERER']) return super().render_landing_page(request, form_submission, *args, **kwargs) def get_form_fields(self): fields = list(super().get_form_fields()) fields.insert( 0, FormField(label='receive_copy', clean_name='receive_copy', field_type='checkbox', help_text=_('I want to receive a copy of my message'), required=False)) fields.insert( 0, FormField(label='message', clean_name='message', help_text=_('Your message'), field_type='multiline', required=True)) fields.insert( 0, FormField(label='email', clean_name='email', help_text=_('Your email address'), field_type='email', required=True)) fields.insert( 0, FormField(label='telephone_number', clean_name='telephone_number', help_text=_('Your telephone number'), field_type='singleline', required=False)) fields.insert( 0, FormField(label='name', clean_name='name', help_text=_('Your name'), field_type='singleline', required=False)) return fields en_content_panels = [ FieldPanel('header_en'), FieldPanel('intro_en'), FieldPanel('thank_you_text_en'), ] de_content_panels = [ FieldPanel('header_de'), FieldPanel('intro_de'), FieldPanel('thank_you_text_de'), ] common_panels = [ FieldPanel('title'), FieldPanel('slug'), MultiFieldPanel([ FieldRowPanel([ FieldPanel('from_address', classname="col6"), FieldPanel('to_address', classname="col6"), ]), FieldPanel('subject'), ], "Email"), MultiFieldPanel([ FieldRowPanel([ FieldPanel('contact_person_name', classname="col6"), ImageChooserPanel('contact_person_image', classname="col6"), ]), ], "Contact Person"), ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ])
class HomePage(Page): image_1 = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Header Image 1", help_text="The Image that is shown on top of the page") image_2 = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Header Image 2", help_text="The Image that is shown on top of the page") image_3 = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Header Image 3", help_text="The Image that is shown on top of the page") image_4 = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Header Image 4", help_text="The Image that is shown on top of the page") image_5 = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Header Image 5", help_text="The Image that is shown on top of the page") form_page = models.ForeignKey( 'a4_candy_cms_contacts.FormPage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', ) subtitle_de = models.CharField(max_length=500, blank=True, verbose_name="Subtitle") subtitle_en = models.CharField(max_length=500, blank=True, verbose_name="Subtitle") teaser_de = fields.RichTextField(blank=True) teaser_en = fields.RichTextField(blank=True) body_de = fields.RichTextField(blank=True) body_en = fields.RichTextField(blank=True) body_streamfield_de = fields.StreamField( [('col_list_image_cta_block', cms_blocks.ColumnsImageCTABlock()), ('background_cta_block', cms_blocks.ColBackgroundCTABlock()), ('columns_cta', cms_blocks.ColumnsCTABlock()), ('html', blocks.RawHTMLBlock()), ('paragraph', blocks.RichTextBlock()), ('news', NewsBlock()), ('use_cases', UseCaseBlock())], blank=True) body_streamfield_en = fields.StreamField( [('col_list_image_cta_block', cms_blocks.ColumnsImageCTABlock()), ('background_cta_block', cms_blocks.ColBackgroundCTABlock()), ('columns_cta', cms_blocks.ColumnsCTABlock()), ('html', blocks.RawHTMLBlock()), ('paragraph', blocks.RichTextBlock()), ('news', NewsBlock()), ('use_cases', UseCaseBlock())], blank=True) subtitle = TranslatedField('subtitle_de', 'subtitle_en') teaser = TranslatedField('teaser_de', 'teaser_en') body_streamfield = TranslatedField('body_streamfield_de', 'body_streamfield_en') body = TranslatedField( 'body_de', 'body_en', ) @property def form(self): return self.form_page.get_form() @property def random_image(self): image_numbers = [ i for i in range(1, 6) if getattr(self, 'image_{}'.format(i)) ] if image_numbers: return getattr(self, 'image_{}'.format(random.choice(image_numbers))) en_content_panels = [ FieldPanel('subtitle_en'), FieldPanel('teaser_en'), FieldPanel('body_en'), StreamFieldPanel('body_streamfield_en') ] de_content_panels = [ FieldPanel('subtitle_de'), FieldPanel('teaser_de'), FieldPanel('body_de'), StreamFieldPanel('body_streamfield_de') ] common_panels = [ FieldPanel('title'), FieldPanel('slug'), PageChooserPanel('form_page', 'a4_candy_cms_contacts.FormPage'), MultiFieldPanel([ ImageChooserPanel('image_1'), ImageChooserPanel('image_2'), ImageChooserPanel('image_3'), ImageChooserPanel('image_4'), ImageChooserPanel('image_5'), ], heading="Images", classname="collapsible") ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = ['a4_candy_cms_pages.EmptyPage']
class UseCaseIndexPage(Page): subtitle_de = models.CharField(max_length=250, blank=True, verbose_name="Title") subtitle_en = models.CharField(max_length=250, blank=True, verbose_name="Title") demo_link = models.URLField(blank=True, verbose_name='Demo site') subtitle = TranslatedField('subtitle_de', 'subtitle_en') form_page = models.ForeignKey( 'a4_candy_cms_contacts.FormPage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', ) @property def form(self): return self.form_page.get_form() @property def use_cases(self): use_cases = UseCasePage.objects.live() return use_cases def get_context(self, request): use_cases = self.use_cases category = request.GET.get('category') if category: try: use_cases = use_cases.filter(category=category) except ValueError: use_cases = [] context = super().get_context(request) context['use_cases'] = use_cases context['categories'] = CATEGORY_CHOICES if category: context['current_category'] = category for category_choice in CATEGORY_CHOICES: if category_choice[0] == category: context['get_current_category_display'] = ( category_choice[1]) return context de_content_panels = [ FieldPanel('subtitle_de'), ] en_content_panels = [ FieldPanel('subtitle_en'), ] common_panels = [ FieldPanel('title'), FieldPanel('slug'), FieldPanel('demo_link'), PageChooserPanel('form_page', 'a4_candy_cms_contacts.FormPage'), ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = ['a4_candy_cms_use_cases.UseCasePage']
class UseCasePage(Page): category = models.CharField(max_length=2, choices=CATEGORY_CHOICES) image = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="Use Case Header Image", help_text="The Image that is shown on the use case item page " + "and the use case index page") title_de = models.CharField(max_length=250, blank=True, verbose_name="German Title") title_en = models.CharField(max_length=250, blank=True, verbose_name="English Title") body_streamfield_de = fields.StreamField( [('paragraph', blocks.RichTextBlock()), ('html', blocks.RawHTMLBlock()), ('examples', ExampleBlock())], blank=True) body_streamfield_en = fields.StreamField( [('paragraph', blocks.RichTextBlock()), ('html', blocks.RawHTMLBlock()), ('examples', ExampleBlock())], blank=True) subtitle = TranslatedField('title_de', 'title_en') teaser = TranslatedField('teaser_de', 'teaser_en') body = TranslatedField('body_streamfield_de', 'body_streamfield_en') def get_context(self, request): category = self.category if category: try: use_cases = UseCasePage.objects\ .filter(category=category)\ .exclude(id=self.id) except ValueError: use_cases = [] context = super().get_context(request) context['other_use_cases'] = use_cases return context en_content_panels = [ FieldPanel('title_en'), StreamFieldPanel('body_streamfield_en') ] de_content_panels = [ FieldPanel('title_de'), StreamFieldPanel('body_streamfield_de') ] common_panels = [ FieldPanel('title'), ImageChooserPanel('image'), FieldPanel('slug'), FieldPanel('category') ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = []
class NewsPage(Page): image = models.ForeignKey( 'a4_candy_cms_images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name="News Header Image", help_text="The Image that is shown on the news item page " + "and the news index page" ) title_de = models.CharField( max_length=250, blank=True, verbose_name="Title") title_en = models.CharField( max_length=250, blank=True, verbose_name="Title") teaser_de = models.TextField( max_length=400, blank=True, null=True, verbose_name="Teaser Text") teaser_en = models.TextField( max_length=400, blank=True, null=True, verbose_name="Teaser Text") author = models.CharField( max_length=255, blank=True, verbose_name="Author Name") create_date = models.DateTimeField(auto_now_add=True, blank=True) update_date = models.DateTimeField(auto_now=True, blank=True) body_streamfield_de = fields.StreamField([ ('paragraph', blocks.RichTextBlock()), ('html', blocks.RawHTMLBlock()) ], blank=True) body_streamfield_en = fields.StreamField([ ('paragraph', blocks.RichTextBlock()), ('html', blocks.RawHTMLBlock()) ], blank=True) subtitle = TranslatedField( 'title_de', 'title_en' ) teaser = TranslatedField( 'teaser_de', 'teaser_en' ) body = TranslatedField( 'body_streamfield_de', 'body_streamfield_en' ) en_content_panels = [ FieldPanel('title_en'), FieldPanel('teaser_en'), StreamFieldPanel('body_streamfield_en') ] de_content_panels = [ FieldPanel('title_de'), FieldPanel('teaser_de'), StreamFieldPanel('body_streamfield_de') ] common_panels = [ FieldPanel('title'), ImageChooserPanel('image'), FieldPanel('author'), FieldPanel('slug') ] edit_handler = TabbedInterface([ ObjectList(common_panels, heading='Common'), ObjectList(en_content_panels, heading='English'), ObjectList(de_content_panels, heading='German') ]) subpage_types = []