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
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
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
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
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
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
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, }
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
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
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