def test_language_fallback(self): """ Test language fallbacks in details view """ from cms.views import details p1 = create_page("page", "nav_playground.html", "en", published=True) Page.set_homepage(p1) request = self.get_request('/de/', 'de') response = details(request, p1.get_path()) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['fallbacks'] = [] lang_settings[1][1]['fallbacks'] = [] with self.settings(CMS_LANGUAGES=lang_settings): response = self.client.get("/de/") self.assertEqual(response.status_code, 404) lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['redirect_on_fallback'] = False lang_settings[1][1]['redirect_on_fallback'] = False with self.settings(CMS_LANGUAGES=lang_settings): response = self.client.get("/de/") self.assertEqual(response.status_code, 302)
def page_create(request, page_id=None): if page_id: page = get_object_or_404(Page, pk=page_id) else: page = Page() if request.method == 'POST': form = PageForm(request.POST, instance=page) serial = MakeRndCode() serialCd = serial.mkrnd() if form.is_valid(): page = form.save(commit=False) page.serialcd = serialCd #response = HttpResponse('test') response = redirect('cms:member_list') response['location'] += '?S=' + serialCd + '&case=1' #response.set_cookie('serial_cd', serialCd) page.save() #return redirect('cms:member_list') #return render(request, 'cms/member_list.html') return response else: form = PageForm(instance=page) #初回きた時はGetなので、そのままindexを渡す #POSTでリクエストがきたら、Saveして、メンバーリストに飛ばす #ここからはクッキーでIDを渡す #DBにはPageIDを持つ return render(request, 'cms/index.html', dict(form=form))
def test_public_for_all_staff(self): request = self.get_request() request.user.is_staff = True page = Page() page.pk = 1 fake_mptt_attrs(page) self.assertTrue(page.has_view_permission(request))
def test_public_for_all_staff_assert_num_queries(self): request = self.get_request() request.user.is_staff = True page = Page() page.pk = 1 with self.assertNumQueries(0): page.has_view_permission(request)
def test_empty_menu_tags_template(self): templ_menu = Template.objects.create(name='menu') templ_menu.content = """ {% load menu_tags %} <html> <head> </head> <body> {% show_menu %} {% show_sub_menu 1 %} {% show_menu_below_id "meta" %} {% show_breadcrumb %} </body> </html> """ templ_menu.save() s = Site.objects.get(id=1) p = Page(template="menu", site=s) p.save() url = self._site_url() response = self.client.post(url, {'name': s.name, 'domain': s.domain, 'templates': [templ_menu.id]}) self.assertEquals(response.status_code, 302)
def _setup_pages(self): """ Tree Structure |- Page_1 | |- Page_2 | |- Page_3 | |- Page_4 (false positive) | |- Page_5 | | |- Page_6 (group 6 page access) """ stdkwargs = { 'template': 'nav_playground.html', 'language': 'en', 'published': True, 'in_navigation': True, } homepage = create_page("page_1", **stdkwargs) Page.set_homepage(homepage) page_2 = create_page("page_2", parent=homepage, **stdkwargs) page_3 = create_page("page_3", parent=page_2, **stdkwargs) page_4 = create_page("page_4", parent=page_3, **stdkwargs) page_5 = create_page("page_5", parent=homepage, **stdkwargs) page_6 = create_page("page_6", parent=page_5, **stdkwargs) return [homepage, page_2, page_3, page_4, page_5, page_6, ]
def handle(self, *args, **options): """ Repairs the tree """ self.stdout.write('fixing page tree') Page.fix_tree() last = None try: first = Page.objects.filter( publisher_is_draft=True, parent__isnull=True).order_by('path')[0] except IndexError: first = None for page in Page.objects.filter(publisher_is_draft=True, parent__isnull=True).order_by( 'site__pk', 'path'): if last: last = last.reload() page = page.reload() page.move(target=last, pos='right') elif first and first.pk != page.pk: page.move(target=first, pos='left') last = page.reload() for page in Page.objects.filter( publisher_is_draft=False, parent__isnull=True).order_by('publisher_public__path'): page = page.reload() public = page.publisher_public page.move(target=public, pos='right') self.stdout.write('fixing plugin tree') CMSPlugin.fix_tree() self.stdout.write('all done')
def create_page(self, parent_page=None, user=None, position="last-child", title=None, site=1, published=False, in_navigation=False, moderate=False, language=None, title_extra=None, **extra): """ Common way for page creation with some checks """ _thread_locals.user = user if not language: language = settings.LANGUAGES[0][0] if settings.CMS_SITE_LANGUAGES.get(site, False): language = settings.CMS_SITE_LANGUAGES[site][0] site = Site.objects.get(pk=site) page_data = { 'site': site, 'template': 'nav_playground.html', 'published': published, 'in_navigation': in_navigation, } if user: page_data['created_by'] = user page_data['changed_by'] = user if parent_page: page_data['parent'] = parent_page page_data.update(extra) page = Page(**page_data) if parent_page: page.insert_at(self.reload(parent_page), position) page.save() if settings.CMS_MODERATOR and user: page.pagemoderator_set.create(user=user) if not title: title = 'test page %d' % self.counter slug = 'test-page-%d' % self.counter else: slug = slugify(title) self.counter = self.counter + 1 if not title_extra: title_extra = {} self.create_title( title=title, slug=slug, language=language, page=page, **title_extra) del _thread_locals.user return page
def handle(self, *args, **options): """ Repairs the tree """ self.stdout.write('fixing page tree') Page.fix_tree() last = None try: first = Page.objects.filter( publisher_is_draft=True, parent__isnull=True ).order_by('path')[0] except IndexError: first = None for page in Page.objects.filter( publisher_is_draft=True, parent__isnull=True ).order_by('site__pk', 'path'): if last: last = last.reload() page = page.reload() page.move(target=last, pos='right') elif first and first.pk != page.pk: page.move(target=first, pos='left') last = page.reload() for page in Page.objects.filter( publisher_is_draft=False, parent__isnull=True ).order_by('publisher_public__path'): page = page.reload() public = page.publisher_public page.move(target=public, pos='right') self.stdout.write('fixing plugin tree') CMSPlugin.fix_tree() self.stdout.write('all done')
def setUp(self): self.client = Client() try: Page.objects.get(name='home') except Page.DoesNotExist: home = Page(name='home', title='home') home.save()
def test_unauthed(self): request = self.get_request() page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 self.assertTrue(page.has_view_permission(request))
def test_unauthed_no_access(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): request = self.get_request() page = Page() page.pk = 1 fake_tree_attrs(page) self.assertFalse(page.has_view_permission(request))
def test_url_redirect(self): overrides = dict( USE_I18N=True, CMS_LANGUAGES={1: []}, LANGUAGES=[('en-us', 'English')], ) overrides['MIDDLEWARE' if getattr(settings, 'MIDDLEWARE', None) else 'MIDDLEWARE_CLASSES'] = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', 'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware', ] with self.settings(**overrides): homepage = create_page( "home", template="col_two.html", language="en-us", published=True, redirect='/foobar/', ) Page.set_homepage(homepage) response = self.client.get('/', follow=False) self.assertTrue(response['Location'].endswith("/foobar/"))
def test_public_for_all(self): user = get_user_model().objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 fake_tree_attrs(page) self.assertTrue(page.has_view_permission(request))
def create_fixtures(self): """ Tree from fixture: + P1 | + P2 | + P3 + P4 | + P5 + P6 + P7 (not in menu) + P8 """ defaults = { 'template': 'nav_playground.html', 'language': 'en', } with self.settings(CMS_PERMISSION=False): p1 = create_page('P1', published=True, in_navigation=True, **defaults) Page.set_homepage(p1) p4 = create_page('P4', published=True, in_navigation=True, **defaults) p6 = create_page('P6', published=True, in_navigation=True, **defaults) p2 = create_page('P2', published=True, in_navigation=True, parent=p1, **defaults) create_page('P3', published=True, in_navigation=True, parent=p2, **defaults) create_page('P5', published=True, in_navigation=True, parent=p4, **defaults) create_page('P7', published=True, in_navigation=False, parent=p6, **defaults) create_page('P8', published=True, in_navigation=True, parent=p6, **defaults)
def create_fixtures(self): """ top root aaa 111 ccc ddd 222 bbb 333 444 # all in nav, published and NOT softroot """ defaults = { 'template': 'nav_playground.html', 'language': 'en', 'in_navigation': True, 'published': True, } with self.settings(CMS_PERMISSION=False): top = create_page('top', **defaults) Page.set_homepage(top) root = create_page('root', parent=top, **defaults) aaa = create_page('aaa', parent=root, **defaults) _111 = create_page('111', parent=aaa, **defaults) ccc = create_page('ccc', parent=_111, **defaults) create_page('ddd', parent=ccc, **defaults) create_page('222', parent=aaa, **defaults) bbb = create_page('bbb', parent=root, **defaults) create_page('333', parent=bbb, **defaults) create_page('444', parent=bbb, **defaults)
def setUp(self): self.p = Page(title='A great page', name='great-page', text='A great page on a great site') self.p.save() try: Page.objects.get(name='home') except Page.DoesNotExist: home = Page(name='home', title='home') home.save()
def test_public_for_all(self): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 self.assertTrue(page.has_view_permission(request))
def test_public_for_all_staff_assert_num_queries(self): request = self.get_request() request.user.is_staff = True page = Page() page.pk = 1 pages = [page] with self.assertNumQueries(0): get_visible_pages(request, pages)
def test_authed_no_access(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = get_user_model().objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 fake_tree_attrs(page) self.assertFalse(page.has_view_permission(request))
def test_public_for_all_staff(self): request = self.get_request() request.user.is_staff = True page = Page() page.pk = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_authed_no_access(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 self.assertFalse(page.has_view_permission(request))
def test_authed_basic_perm(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = get_user_model().objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add(Permission.objects.get(codename='view_page')) request = self.get_request(user) page = Page() page.pk = 1 fake_tree_attrs(page) self.assertTrue(page.has_view_permission(request))
def test_unauthed_no_access_num_queries(self): current_site = Site() current_site.pk = 1 request = self.get_request() page = Page() page.pk = 1 fake_tree_attrs(page) with self.assertNumQueries(1): page.has_view_permission(request)
def test_global_permission(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = get_user_model().objects.create_user('user', '*****@*****.**', 'user') GlobalPagePermission.objects.create(can_view=True, user=user) request = self.get_request(user) page = Page() page.pk = 1 fake_tree_attrs(page) self.assertTrue(page.has_view_permission(request))
def test_unauthed(self): request = self.get_request() page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def update(self): import feedparser from time import mktime from datetime import datetime from slugify import slugify from django.contrib.sites.models import Site from cms.models import Page, Title from cms.plugins.text.models import Text try: p_last = self.pages.latest('publication_date') except Page.DoesNotExist: p_last = None try: for e in feedparser.parse(self.url)['entries']: date = e.get('published_parsed') title = e.get('title') body = e.get('summary') url = e.get('link') if date and title and body: date = datetime.fromtimestamp(mktime(date)) if p_last and date <= p_last.publication_date: continue p=Page(site=Site.objects.all()[0], in_navigation=False, published=True, template='page-full.html') p.publication_date = date if self.parent_page: p.parent = self.parent_page p.save() self.pages.add(p) self.save() t=Title(language='en', title=title, slug='%s-%s' % (slugify(title), p.pk), page=p) t.save() pl=p.placeholders.get(slot='page') if url: body = u'%s<p><a href="%s">Lire la suite de l\'article…</a></p>' % (body, url) txt=Text(body=body, language='en', plugin_type='TextPlugin') txt.save() pl.cmsplugin_set.add(txt) pl.save() except: pass self.update_last = datetime.now() self.save()
def get_absolute_url(self): if "cms.middleware.multilingual.MultilingualURLMiddleware" in settings.MIDDLEWARE_CLASSES: old_language = get_language() try: activate(language_code) return "/%s%s" % (language_code, Page.get_absolute_url(self)) finally: activate(old_language) else: return Page.get_absolute_url(self)
def test_global_permission(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') GlobalPagePermission.objects.create(can_view=True, user=user) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 self.assertTrue(page.has_view_permission(request))
def get_absolute_url(self): if 'cms.middleware.multilingual.MultilingualURLMiddleware' in settings.MIDDLEWARE_CLASSES: old_language = get_language() try: activate(language_code) return '/%s%s' % (language_code, Page.get_absolute_url(self)) finally: activate(old_language) else: return Page.get_absolute_url(self)
def test_public_for_all(self): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_unauthed_no_access(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): request = self.get_request() page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [])
def test_unauthed_no_access_num_queries(self): site = Site() site.pk = 1 request = self.get_request() page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] with self.assertNumQueries(1): get_visible_pages(request, pages, site)
def test_authed_no_access(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [])
def handle(self, *args, **options): """ Repairs the tree """ self.stdout.write('fixing page tree') Page.fix_tree() root_draft_pages = Page.objects.filter( publisher_is_draft=True, parent__isnull=True, ) last = None try: first = root_draft_pages.order_by('path')[0] except IndexError: first = None for page in root_draft_pages.order_by('site__pk', 'path'): if last: last = last.reload() page = page.reload() page.move(target=last, pos='right') elif first and first.pk != page.pk: page.move(target=first, pos='left') last = page.reload() root_public_pages = Page.objects.filter( publisher_is_draft=False, parent__isnull=True, ).order_by('publisher_public__path') # Filter out any root public pages whose draft page # has a parent. # This avoids a tree corruption where the public root page # is added as a child of the draft page's draft parent # instead of the draft page's public parent root_public_pages = root_public_pages.filter( publisher_public__parent__isnull=True ) for page in root_public_pages: page = page.reload() public = page.publisher_public page.move(target=public, pos='right') for root in root_draft_pages.order_by('site__pk', 'path'): self._update_descendants_tree(root) self.stdout.write('fixing plugin tree') CMSPlugin.fix_tree() self.stdout.write('all done')
def test_global_permission(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') GlobalPagePermission.objects.create(can_view=True, user=user) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_authed_basic_perm(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add(Permission.objects.get(codename='view_page')) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_unauthed_num_queries(self): request = self.get_request() current_site = Site() current_site.pk = 1 page = Page() page.pk = 1 fake_tree_attrs(page) with self.assertNumQueries(1): """ The query is: PagePermission query for affected pages """ page.has_view_permission(request)
def test_toolbar_switch_urls(self): user = self.get_superuser() user_settings = UserSettings(language="en", user=user) placeholder = Placeholder(slot="clipboard") placeholder.save() user_settings.clipboard = placeholder user_settings.save() page = create_page("page", "nav_playground.html", "en", published=True) create_title("fr", "french home", page) publish_page(page, user, "fr") Page.set_homepage(page) edit_on = get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') edit_off = get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF') with self.login_user_context(user): response = self.client.get("/fr/?{}".format(edit_on)) expected = """ <a href="?structure" class="cms-btn cms-btn-disabled" title="Toggle structure" data-cms-structure-btn='{ "url": "/fr/?structure", "name": "Structure" }' data-cms-content-btn='{ "url": "/fr/?edit", "name": "Content" }'> <span class="cms-icon cms-icon-plugins"></span></a> """ self.assertContains( response, expected, count=1, html=True, ) self.assertContains( response, '<a class="cms-btn cms-btn-switch-save" href="/fr/?preview&{}">' '<span>View published</span></a>'.format(edit_off), count=1, html=True, ) response = self.client.get("/fr/?preview&{}".format(edit_off)) self.assertContains( response, expected, count=1, html=True, ) self.assertContains( response, '<a class="cms-btn cms-btn-action cms-btn-switch-edit" href="/fr/?{}">Edit</a>'.format(edit_on), count=1, html=True, )
def _get_page_by_untyped_arg(page_lookup, request, site_id): """ The `page_lookup` argument can be of any of the following types: - Integer: interpreted as `pk` of the desired page - String: interpreted as `reverse_id` of the desired page - `dict`: a dictionary containing keyword arguments to find the desired page (for instance: `{'pk': 1}`) - `Page`: you can also pass a Page object directly, in which case there will be no database lookup. - `None`: the current page will be used """ if page_lookup is None: return request.current_page if isinstance(page_lookup, Page): return page_lookup if isinstance(page_lookup, basestring): page_lookup = {'reverse_id': page_lookup} elif isinstance(page_lookup, (int, long)): page_lookup = {'pk': page_lookup} elif not isinstance(page_lookup, dict): raise TypeError('The page_lookup argument can be either a Dictionary, Integer, Page, or String.') page_lookup.update({'site': site_id}) try: return get_page_queryset(request).get(**page_lookup) except Page.DoesNotExist: site = Site.objects.get_current() subject = _('Page not found on %(domain)s') % {'domain':site.domain} body = _("A template tag couldn't find the page with lookup arguments `%(page_lookup)s\n`. " "The URL of the request was: http://%(host)s%(path)s") \ % {'page_lookup': repr(page_lookup), 'host': site.domain, 'path': request.path} if settings.DEBUG: raise Page.DoesNotExist(body) else: if settings.SEND_BROKEN_LINK_EMAILS: mail_managers(subject, body, fail_silently=True) return None
def get_tree(self, request): """ Get html for the descendants (only) of given page or if no page_id is provided, all the root nodes. Used for lazy loading pages in cms.pagetree.js Permission checks is done in admin_utils.get_admin_menu_item_context which is called by admin_utils.render_admin_menu_item. """ page_id = request.GET.get('pageId', None) site_id = request.GET.get('site', None) try: site_id = int(site_id) site = Site.objects.get(id=site_id) except (TypeError, ValueError, MultipleObjectsReturned, ObjectDoesNotExist): site = get_current_site(request) if page_id: page = get_object_or_404(self.model, pk=int(page_id)) pages = page.get_children() else: pages = Page.get_root_nodes().filter(site=site, publisher_is_draft=True) #\ #.exclude(title_set__title__startswith='X') pages = (pages.select_related('parent', 'publisher_public', 'site').prefetch_related('children')) response = render_admin_rows(request, pages, site=site, filtered=False) return HttpResponse(response)
def make_page(name, order, **kwargs): defaults = dict( name=name, order=order, slug=slugify(name), ) defaults.update(kwargs) return clean_and_save(Page(**defaults))
def handle(self, *args, **options): pages = [] for i in range(0, 100): pages.append( Page(name=lorem.sentence(), slug=uuid.uuid4(), body=lorem.text())) Page.objects.bulk_create(pages)
def test_unauthed_num_queries(self): request = self.get_request() site = Site() site.pk = 1 page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] with self.assertNumQueries(1): """ The query is: PagePermission query for affected pages global is not executed because it's lazy """ get_visible_pages(request, pages, site)
def test_public_for_all_num_queries(self): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) site = Site() site.pk = 1 page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] with self.assertNumQueries(2): """ The queries are: PagePermission query for affected pages GlobalpagePermission query for user """ get_visible_pages(request, pages, site)
def _get_page_by_untyped_arg(page_lookup, request, site_id): """ The `page_lookup` argument can be of any of the following types: - Integer: interpreted as `pk` of the desired page - String: interpreted as `reverse_id` of the desired page - `dict`: a dictionary containing keyword arguments to find the desired page (for instance: `{'pk': 1}`) - `Page`: you can also pass a Page object directly, in which case there will be no database lookup. - `None`: the current page will be used """ if page_lookup is None: return request.current_page if isinstance(page_lookup, Page): if request.current_page and request.current_page.pk == page_lookup.pk: return request.current_page return page_lookup if isinstance(page_lookup, str): page_lookup = {'reverse_id': page_lookup} elif isinstance(page_lookup, int): page_lookup = {'pk': page_lookup} elif not isinstance(page_lookup, dict): raise TypeError('The page_lookup argument can be either a Dictionary, Integer, Page, or String.') site = Site.objects._get_site_by_id(site_id) try: if 'pk' in page_lookup: page = Page.objects.select_related('node').get(**page_lookup) if request and use_draft(request): if page.publisher_is_draft: return page else: return page.publisher_draft else: if page.publisher_is_draft: return page.publisher_public else: return page else: pages = get_page_queryset(site, draft=use_draft(request)) return pages.select_related('node').get(**page_lookup) except Page.DoesNotExist: subject = _('Page not found on %(domain)s') % {'domain': site.domain} body = _("A template tag couldn't find the page with lookup arguments `%(page_lookup)s\n`. " "The URL of the request was: http://%(host)s%(path)s") \ % {'page_lookup': repr(page_lookup), 'host': site.domain, 'path': request.path_info} if settings.DEBUG: raise Page.DoesNotExist(body) else: mw = settings.MIDDLEWARE if getattr(settings, 'SEND_BROKEN_LINK_EMAILS', False): mail_managers(subject, body, fail_silently=True) elif 'django.middleware.common.BrokenLinkEmailsMiddleware' in mw: middle = BrokenLinkEmailsMiddleware() domain = request.get_host() path = request.get_full_path() referer = force_str(request.META.get('HTTP_REFERER', ''), errors='replace') if not middle.is_ignorable_request(request, path, domain, referer): mail_managers(subject, body, fail_silently=True) return None
def get_or_create_root(self): """ Creates the root node used to store all page types for the current site if it doesn't exist. """ root_page = PageType.get_root_page(site=self._site) if not root_page: root_page = Page( publisher_is_draft=True, in_navigation=False, is_page_type=True, ) root_page.set_tree_node(self._site) root_page.save() if not root_page.has_translation(self._language): api.create_title( language=self._language, title=ugettext('Page Types'), page=root_page, slug=PAGE_TYPES_ID, path=PAGE_TYPES_ID, ) return root_page.node
def test_frontend_lang(self): lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['public'] = False with self.settings(CMS_LANGUAGES=lang_settings, LANGUAGE_CODE="en"): page = create_page("page1", "nav_playground.html", "en") create_title("de", page.get_title(), page, slug=page.get_slug()) page2 = create_page("page2", "nav_playground.html", "en") create_title("de", page2.get_title(), page2, slug=page2.get_slug()) page3 = create_page("page2", "nav_playground.html", "en") create_title("de", page3.get_title(), page3, slug=page3.get_slug()) page4 = create_page("page4", "nav_playground.html", "de") page.publish('en') page.publish('de') page2.publish('en') page2.publish('de') page3.publish('de') page3.publish('en') page4.publish('de') Page.set_homepage(page) response = self.client.get("/en/") self.assertRedirects(response, "/de/") response = self.client.get("/en/page2/") self.assertEqual(response.status_code, 404) response = self.client.get("/de/") self.assertEqual(response.status_code, 200) response = self.client.get("/de/page2/") self.assertEqual(response.status_code, 200) # check if the admin can see non-public langs admin = self.get_superuser() if self.client.login( username=getattr(admin, get_user_model().USERNAME_FIELD), password=getattr(admin, get_user_model().USERNAME_FIELD)): response = self.client.get("/en/page2/") self.assertEqual(response.status_code, 200) response = self.client.get("/en/page4/") self.assertEqual(response.status_code, 302) self.client.logout() response = self.client.get("/en/page4/") self.assertEqual(response.status_code, 404)