コード例 #1
0
    def test_recover_with_apphook(self):
        """
        Test that you can recover a page
        """
        from cms.utils.helpers import make_revision_with_plugins
        from cms.utils.reversion_hacks import create_revision, revision_manager

        self.assertEqual(Page.objects.count(), 2)

        with self.login_user_context(self.user):

            page_data = self.get_new_page_data_dbfields()
            page_data['apphook'] = 'SampleApp'
            page_data['apphook_namespace'] = 'SampleApp'

            with create_revision():
                # Need to create page manually to add apphooks
                page = create_page(**page_data)

                # Assert page has apphooks
                self.assertEqual(page.application_urls, 'SampleApp')
                self.assertEqual(page.application_namespace, 'SampleApp')

                # Create revision
                make_revision_with_plugins(page,
                                           user=None,
                                           message="Initial version")

            page_pk = page.pk

            # Delete the page through the admin
            data = {'post': 'yes'}
            response = self.client.post(URL_CMS_PAGE_DELETE % page.pk, data)
            self.assertRedirects(response, URL_CMS_PAGE)

            # Assert page was truly deleted
            self.assertEqual(Page.objects.filter(pk=page_pk).count(), 0)

            versions_qs = revision_manager.get_deleted(Page).order_by("-pk")
            version = versions_qs[0]

            recover_url = URL_CMS_PAGE + "recover/%s/" % version.pk

            # Recover deleted page
            page_form_data = self.get_pagedata_from_dbfields(page_data)
            self.client.post(recover_url, page_form_data)

            # Verify page was recovered correctly
            self.assertEqual(Page.objects.filter(pk=page_pk).count(), 1)

            # Get recovered page
            page = Page.objects.get(pk=page_pk)

            # Verify apphook and apphook namespace are set on page.
            self.assertEqual(page.application_urls, 'SampleApp')
            self.assertEqual(page.application_namespace, 'SampleApp')
コード例 #2
0
def _create_revision(obj, user=None, message=None):
    from cms.utils.helpers import make_revision_with_plugins
    from cms.utils.reversion_hacks import create_revision

    with create_revision():
        make_revision_with_plugins(
            obj=obj,
            user=user,
            message=message,
        )
コード例 #3
0
ファイル: api.py プロジェクト: janwilliams/CMS
def _create_revision(obj, user=None, message=None):
    from cms.utils.helpers import make_revision_with_plugins
    from cms.utils.reversion_hacks import create_revision

    with create_revision():
        make_revision_with_plugins(
            obj=obj,
            user=user,
            message=message,
        )
コード例 #4
0
    def test_recover_with_apphook(self):
        """
        Test that you can recover a page
        """
        from cms.utils.helpers import make_revision_with_plugins
        from cms.utils.reversion_hacks import create_revision, revision_manager

        self.assertEqual(Page.objects.count(), 2)

        with self.login_user_context(self.user):

            page_data = self.get_new_page_data_dbfields()
            page_data['apphook'] = 'SampleApp'
            page_data['apphook_namespace'] = 'SampleApp'

            with create_revision():
                # Need to create page manually to add apphooks
                page = create_page(**page_data)

                # Assert page has apphooks
                self.assertEqual(page.application_urls, 'SampleApp')
                self.assertEqual(page.application_namespace, 'SampleApp')

                # Create revision
                make_revision_with_plugins(page, user=None, message="Initial version")

            page_pk = page.pk

            # Delete the page through the admin
            data = {'post': 'yes'}
            response = self.client.post(URL_CMS_PAGE_DELETE % page.pk, data)
            self.assertRedirects(response, URL_CMS_PAGE)

            # Assert page was truly deleted
            self.assertEqual(Page.objects.filter(pk=page_pk).count(), 0)

            versions_qs = revision_manager.get_deleted(Page).order_by("-pk")
            version = versions_qs[0]

            recover_url = URL_CMS_PAGE + "recover/%s/" % version.pk

            # Recover deleted page
            page_form_data = self.get_pagedata_from_dbfields(page_data)
            self.client.post(recover_url, page_form_data)

            # Verify page was recovered correctly
            self.assertEqual(Page.objects.filter(pk=page_pk).count(), 1)

            # Get recovered page
            page = Page.objects.get(pk=page_pk)

            # Verify apphook and apphook namespace are set on page.
            self.assertEqual(page.application_urls, 'SampleApp')
            self.assertEqual(page.application_namespace, 'SampleApp')
コード例 #5
0
ファイル: wizards.py プロジェクト: intexal/my-first-blog
    def save(self, **kwargs):
        from cms.api import create_page, add_plugin
        from cms.utils.permissions import has_page_add_permission

        # Check to see if this user has permissions to make this page. We've
        # already checked this when producing a list of wizard entries, but this
        # is to prevent people from possible form-hacking.

        if 'sub_page' in self.cleaned_data:
            sub_page = self.cleaned_data['sub_page']
        else:
            sub_page = False

        if self.page:
            if sub_page:
                parent = self.page
                position = "last-child"
            else:
                parent = self.page.parent
                position = "right"
        else:
            parent = None
            position = "last-child"

        # Before we do this, verify this user has perms to do so.
        if not (self.user.is_superuser or
                has_page_add_permission(self.user, self.page,
                                             position=position,
                                             site=self.page.site)):
            raise NoPermissionsException(
                _(u"User does not have permission to add page."))

        page = create_page(
            title=self.cleaned_data['title'],
            slug=self.cleaned_data['slug'],
            template=get_cms_setting('PAGE_WIZARD_DEFAULT_TEMPLATE'),
            language=self.language_code,
            created_by=smart_text(self.user),
            parent=parent,
            in_navigation=True,
            published=False
        )

        page_type = self.cleaned_data.get("page_type")
        if page_type:
            copy_target = Page.objects.filter(pk=page_type).first()
        else:
            copy_target = None

        if copy_target:
            # If the user selected a page type, copy that.
            if not user_has_view_permission(self.user, copy_target):
                raise PermissionDenied()

            # Copy page attributes
            copy_target._copy_attributes(page, clean=True)
            page.save()

            # Copy contents (for each language)
            for lang in copy_target.get_languages():
                copy_target._copy_contents(page, lang)

            # Copy extensions
            from cms.extensions import extension_pool
            extension_pool.copy_extensions(copy_target, page)

        else:
            # If the user provided content, then use that instead.
            content = self.cleaned_data.get('content')
            plugin_type = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN')
            plugin_body = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN_BODY')
            slot = get_cms_setting('PAGE_WIZARD_CONTENT_PLACEHOLDER')

            if plugin_type in plugin_pool.plugins and plugin_body:
                if content and permissions.has_plugin_permission(
                        self.user, plugin_type, "add"):
                    placeholder = self.get_placeholder(page, slot=slot)
                    if placeholder:
                        opts = {
                            'placeholder': placeholder,
                            'plugin_type': plugin_type,
                            'language': self.language_code,
                            plugin_body: content,
                        }
                        add_plugin(**opts)

        # is it home? publish it right away
        if not self.page and page.is_home:
            page.publish(self.language_code)

        if is_installed('reversion'):
            from cms.utils.helpers import make_revision_with_plugins
            from cms.constants import REVISION_INITIAL_COMMENT
            from cms.utils.reversion_hacks import create_revision

            with create_revision():
                make_revision_with_plugins(
                    obj=page,
                    user=self.user,
                    message=ugettext(REVISION_INITIAL_COMMENT),
                )
        return page
コード例 #6
0
ファイル: wizards.py プロジェクト: zhanghao123/django-cms
    def save(self, **kwargs):
        from cms.api import create_page, add_plugin
        from cms.utils.permissions import has_page_add_permission

        # Check to see if this user has permissions to make this page. We've
        # already checked this when producing a list of wizard entries, but this
        # is to prevent people from possible form-hacking.

        if 'sub_page' in self.cleaned_data:
            sub_page = self.cleaned_data['sub_page']
        else:
            sub_page = False

        if self.page:
            if sub_page:
                parent = self.page
                position = "last-child"
            else:
                parent = self.page.parent
                position = "right"
        else:
            parent = None
            position = "last-child"

        # Before we do this, verify this user has perms to do so.
        if not (self.user.is_superuser or has_page_add_permission(
                self.user, self.page, position=position, site=self.page.site)):
            raise NoPermissionsException(
                _(u"User does not have permission to add page."))

        page = create_page(
            title=self.cleaned_data['title'],
            slug=self.cleaned_data['slug'],
            template=get_cms_setting('PAGE_WIZARD_DEFAULT_TEMPLATE'),
            language=self.language_code,
            created_by=smart_text(self.user),
            parent=parent,
            in_navigation=True,
            published=False)

        page_type = self.cleaned_data.get("page_type")
        if page_type:
            copy_target = Page.objects.filter(pk=page_type).first()
        else:
            copy_target = None

        if copy_target:
            # If the user selected a page type, copy that.
            if not user_has_view_permission(self.user, copy_target):
                raise PermissionDenied()

            # Copy page attributes
            copy_target._copy_attributes(page, clean=True)
            page.save()

            # Copy contents (for each language)
            for lang in copy_target.get_languages():
                copy_target._copy_contents(page, lang)

            # Copy extensions
            from cms.extensions import extension_pool
            extension_pool.copy_extensions(copy_target, page)

        else:
            # If the user provided content, then use that instead.
            content = self.cleaned_data.get('content')
            plugin_type = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN')
            plugin_body = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN_BODY')
            slot = get_cms_setting('PAGE_WIZARD_CONTENT_PLACEHOLDER')

            if plugin_type in plugin_pool.plugins and plugin_body:
                if content and permissions.has_plugin_permission(
                        self.user, plugin_type, "add"):
                    placeholder = self.get_placeholder(page, slot=slot)
                    if placeholder:
                        opts = {
                            'placeholder': placeholder,
                            'plugin_type': plugin_type,
                            'language': self.language_code,
                            plugin_body: content,
                        }
                        add_plugin(**opts)

        # is it home? publish it right away
        if not self.page and page.is_home:
            page.publish(self.language_code)

        if is_installed('reversion'):
            from cms.utils.helpers import make_revision_with_plugins
            from cms.constants import REVISION_INITIAL_COMMENT
            from cms.utils.reversion_hacks import create_revision

            with create_revision():
                make_revision_with_plugins(
                    obj=page,
                    user=self.user,
                    message=ugettext(REVISION_INITIAL_COMMENT),
                )
        return page