Esempio n. 1
0
    def post(self, request, *args, **kwargs):
        next_url = request.POST.get('next')
        if not next_url:
            next_url = request.META.get('HTTP_REFERER')

        curr_lang_code = get_language()
        new_lang_code = request.POST.get('language')
        if not check_for_language(new_lang_code):
            # Language is not valid, simply redirect
            return redirect(next_url)

        if curr_lang_code == new_lang_code:
            # No need to look up Pages if language did not change
            return redirect(next_url)

        url_path = self.get_url_path(request, next_url)

        # Get the Page object to redirect to in the current language
        try:
            page = Page.objects.in_site(
                request.site).live().get(url_path=url_path).specific
        except Page.DoesNotExist:
            # If no CMS page exists (e.g. login page), switch the language and
            # redirect.
            response = redirect(next_url)
            self.set_language(request, response, new_lang_code)
            return response

        if curr_lang_code == self.original_lang_code:
            # If the current language is the original (en), then check if there
            # is a translation in the new language. If not, the original is
            # served.
            new_page = TranslatablePageMixin.get_translated_page(
                page, new_lang_code)
            response = redirect(new_page.url)
        else:
            # If the current language is a translation ...
            try:
                original_page = page.original_page()
            except AttributeError:
                response = redirect(next_url)
                self.set_language(request, response, new_lang_code)
                return response
            if new_lang_code == self.original_lang_code:
                # ... and the new language is the original (en), then return the
                # original
                response = redirect(original_page.url)
            else:
                # ... and the new language is also a translation, get the
                # original (en) and try to return a translation in the new
                # language. If not available, return the original
                new_page = TranslatablePageMixin.get_translated_page(
                    original_page, new_lang_code)
                response = redirect(new_page.url)

        # Actually set the new language and return the response
        self.set_language(request, response, new_lang_code)
        return response
Esempio n. 2
0
 def prepare_data(self, model_class):
     qs = model_class.objects.live().order_by('title')
     qs = TranslatablePageMixin.apply_translation_filter(qs, self.request)
     if self.query_string:
         # cast to list, as a searchqueryset (or something...) is returned
         return list(qs.search(self.query_string))
     return qs
Esempio n. 3
0
 def get_context(self, value, parent_context=None):
     context = super().get_context(value, parent_context)
     columns = value.get('columns')
     vertical_align = value.get('vertical_align')
     elements = []
     for element in value.get('elements'):
         description = element.get('description')
         link = element.get('link')
         page = element.get('page')
         if page is not None:
             page = TranslatablePageMixin.get_translated_page(page.specific)
         url = page.url if page else link
         image = element.get('image')
         image_url = image.get_rendition(
             'max-1200x1200').url if image else ''
         shrink = element.get('shrink')
         if shrink:
             shrink = int(shrink)
         elements.append({
             'description': description,
             'href': url,
             'src': image_url,
             'shrink': shrink,
         })
     context['cols'] = columns
     context['images'] = elements
     context['verticalalign'] = vertical_align
     return context
Esempio n. 4
0
    def get_context(self, value, parent_context=None):
        context = super().get_context(value, parent_context)
        page = value.get('page')
        if page is not None:
            page = TranslatablePageMixin.get_translated_page(page.specific)
        url = page.url if page else ''

        module_1 = value.get('module_1')
        module_2 = value.get('module_2')
        module_3 = value.get('module_3')
        module_4 = value.get('module_4')
        module_5 = value.get('module_5')
        module_6 = value.get('module_6')
        module_7 = value.get('module_7')

        context.update({
            'module1href':
            '{0}#module-1'.format(url) if module_1 else '',
            'module2href':
            '{0}#module-2'.format(url) if module_2 else '',
            'module3href':
            '{0}#module-3'.format(url) if module_3 else '',
            'module4href':
            '{0}#module-4'.format(url) if module_4 else '',
            'module5href':
            '{0}#module-5'.format(url) if module_5 else '',
            'module6href':
            '{0}#module-6'.format(url) if module_6 else '',
            'module7href':
            '{0}#module-7'.format(url) if module_7 else '',
        })
        return context
Esempio n. 5
0
    def get_context(self, value, parent_context=None):
        context = super().get_context(value, parent_context)
        page = value.get('page')
        if page is not None:
            page = TranslatablePageMixin.get_translated_page(page.specific)
        link = value.get('link')
        link_text = value.get('link_text') or _('Link')
        from wocat.cms.models import CountryPage
        country_pages = CountryPage.objects.live().in_menu()
        countries = [{
            'iso_3166_1_alpha_3': country_page.country.code
        } for country_page in country_pages]

        context.update({
            'title':
            value.get('title'),
            'description':
            value.get('content'),
            'style':
            'box',
            'links': [
                {
                    'href': page.url if page else link,
                    'text': link_text,
                    'external': not bool(page),
                },
            ],
            'countries':
            countries,
            'size':
            'large',
        })
        return context
Esempio n. 6
0
 def get_context(self, value, parent_context=None):
     context = super().get_context(value, parent_context)
     page = value.get('page')
     if page is not None:
         page = TranslatablePageMixin.get_translated_page(page.specific)
     link = value.get('link')
     image = value.get('image')
     link_text = value.get('link_text') or _('Link')
     top = value.get('top_box')
     context.update({
         'title':
         value.get('title'),
         'description':
         value.get('content'),
         'style':
         'box',
         'links': [
             {
                 'href': page.url if page else link,
                 'text': link_text,
                 'external': not bool(page),
             },
         ],
         'imgsrc':
         image.get_rendition('max-1200x1200').url if image else '',
         'flapmd':
         True,
         'topposition':
         top,
     })
     return context
Esempio n. 7
0
 def get_context(self, value, parent_context=None):
     context = super().get_context(value, parent_context)
     page = value.get('page')
     if page is not None:
         page = TranslatablePageMixin.get_translated_page(page.specific)
     link = value.get('link')
     image_block = value.get('image')
     image = image_block.get('image')
     imagepos = image_block.get('position')
     largeimg = image_block.get('large')
     read_more_text = value.get('read_more_text') or _('Read more')
     lines = not value.get('boarderless')
     context.update({
         'href':
         page.url if page else link,
         'external':
         not bool(page),
         'title':
         value.get('title'),
         'description':
         value.get('content'),
         'readmorelink': {
             'text': read_more_text
         },
         'imgsrc':
         image.get_rendition('max-1200x1200').url if image else '',
         'imgpos':
         imagepos,
         'largeimg':
         largeimg,
         'lines':
         lines,
     })
     return context
Esempio n. 8
0
 def get_node(self, page, current_page, ancestors):
     page = TranslatablePageMixin.get_translated_page(page)
     text = page.title
     if hasattr(page, 'flag'):
         text = format_html('<strong>flag</strong>{}', text)
     return {
         'text': text,
         'href': page.url,
         # Checking if this page is in the tree of active pages
         'active': page.specific == current_page or page in ancestors,
     }
Esempio n. 9
0
    def get_descendants(self, obj):
        request = self.context['request']
        project_country_pages = TranslatablePageMixin.apply_translation_filter(
            ProjectCountryPage.objects.filter(country=obj), request)
        for project in project_country_pages:
            yield CountryDescendant(
                name=project.get_parent().get_parent().title,
                url=reverse(
                    'projectpage-detail',
                    kwargs={'pk': project.get_parent().get_parent().pk}),
                countrypage_url=project.url,
                project=project.title)

        included_projects = TranslatablePageMixin.apply_translation_filter(
            ProjectPage.objects.filter(included_countries=obj), request)
        for project in included_projects:
            yield Descendant(
                name=project.title,
                url=reverse('projectpage-detail', kwargs={'pk': project.pk}),
            )
Esempio n. 10
0
 def get_links(self, context, onlyxs=False):
     links = []
     settings = self.get_settings(context)
     if settings:
         for link in settings.footer_links.all():
             page = TranslatablePageMixin.get_translated_page(
                 link.target.specific)
             links.append({
                 'text': page.title,
                 'href': page.url,
                 'onlyxs': onlyxs
             })
     return links
Esempio n. 11
0
 def get_context(self, value, parent_context=None):
     context = super().get_context(value, parent_context)
     page = value.get('page')
     if page is not None:
         page = TranslatablePageMixin.get_translated_page(page.specific)
     link = value.get('link')
     context.update({
         'href': page.url if page else link,
         'external': not bool(page),
         'text': value.get('name') or _('Read more'),
         'align': value.get('alignment'),
         'button': value.get('button'),
     })
     return context
Esempio n. 12
0
def get_extra_links(context, onlyxs=False):
    links = []
    settings = None
    request = context.get('request')
    if request and hasattr(request, 'site'):
        settings = TopNavigationSettings.for_site(request.site)
    if settings:
        for link in settings.top_navigation_links.all():
            page = TranslatablePageMixin.get_translated_page(
                link.target.specific)
            links.append({
                'text': page.title,
                'href': page.url,
                'onlyxs': onlyxs
            })
    return links