Ejemplo n.º 1
0
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']
Ejemplo n.º 2
0
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')
    ]
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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']
Ejemplo n.º 5
0
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']
Ejemplo n.º 6
0
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')
    ])
Ejemplo n.º 7
0
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']
Ejemplo n.º 8
0
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']
Ejemplo n.º 9
0
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 = []
Ejemplo n.º 10
0
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 = []