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)
示例#2
0
文件: views.py 项目: tochitake/wakeo
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))
示例#3
0
 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))
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
 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,
     ]
示例#7
0
文件: tree.py 项目: kasksad/DjangoCMS
    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')
示例#8
0
    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
示例#9
0
文件: tree.py 项目: Aendra/django_vgv
    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')
示例#10
0
 def setUp(self):
     self.client = Client()
     try:
         Page.objects.get(name='home')
     except Page.DoesNotExist:
         home = Page(name='home', title='home')
         home.save()
示例#11
0
 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))
示例#12
0
 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))
示例#13
0
 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)
示例#14
0
 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/"))
示例#15
0
 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))
示例#16
0
    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)
示例#17
0
    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)
示例#18
0
 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()
示例#19
0
 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))
示例#20
0
 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)
示例#21
0
 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))
示例#22
0
 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])
示例#23
0
 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))
示例#24
0
 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))
示例#25
0
 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)
示例#26
0
 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))
示例#27
0
 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])
示例#28
0
文件: models.py 项目: mammique/opst
    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()
示例#29
0
 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)
示例#30
0
 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))
示例#31
0
 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)
示例#32
0
 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])
示例#33
0
 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, [])
示例#34
0
 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)
示例#35
0
 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')
示例#37
0
 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])
示例#38
0
 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])
示例#39
0
 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)
示例#40
0
    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,
            )
示例#41
0
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
示例#42
0
    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)
示例#43
0
def make_page(name, order, **kwargs):
    defaults = dict(
        name=name,
        order=order,
        slug=slugify(name),
    )
    defaults.update(kwargs)
    return clean_and_save(Page(**defaults))
示例#44
0
 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)
示例#45
0
 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)
示例#46
0
 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)
示例#47
0
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
示例#48
0
    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)