コード例 #1
0
 def init(self):
     self.is_staff = self.request.user.is_staff
     self.can_change = (self.request.current_page and
                        self.request.current_page.has_change_permission(self.request))
     self.edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit', 'edit-off',
                                        _('Edit mode'))
     self.edit_mode = self.is_staff and self.edit_mode_switcher.get_state(self.request)
     self.show_toolbar = self.is_staff or self.edit_mode_switcher.get_state(self.request)
コード例 #2
0
 def init(self):
     self.is_staff = self.request.user.is_staff
     self.can_change = (self.request.current_page and
                        self.request.current_page.has_change_permission(self.request))
     self.edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit', 'edit-off',
                                        _('Edit mode'))
     self.edit_mode = self.is_staff and self.edit_mode_switcher.get_state(self.request)
コード例 #3
0
ファイル: cms_toolbar.py プロジェクト: Air51/django-cms
class CMSToolbar(Toolbar):
    """
    The default CMS Toolbar
    """
    def __init__(self, request):
        super(CMSToolbar, self).__init__(request)
        self.init()
        
    def init(self):
        self.is_staff = self.request.user.is_staff
        self.can_change = (self.request.current_page and
                           self.request.current_page.has_change_permission(self.request))
        self.edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit', 'edit-off',
                                           _('Edit mode'))
        self.edit_mode = self.is_staff and self.edit_mode_switcher.get_state(self.request)
        self.show_toolbar = self.is_staff or self.edit_mode_switcher.get_state(self.request)
    
    def get_items(self, context, **kwargs):
        """
        Get the CMS items on the toolbar
        """
        items = [
            Anchor(LEFT, 'logo', _('django CMS'), 'https://www.django-cms.org'),
        ]
        
        self.page_states = []
        
        
        if self.is_staff:
            
            items.append(
                self.edit_mode_switcher
            )
            
            if self.request.current_page:
                states = self.request.current_page.last_page_states()
                has_states = states.exists()
                self.page_states = states
                if has_states:
                    items.append(
                        TemplateHTML(LEFT, 'status',
                                     'cms/toolbar/items/status.html')
                    )
                
                # publish button
                if self.edit_mode and settings.CMS_MODERATOR:
                    moderator_state = page_moderator_state(self.request, self.request.current_page)
                    should_approve = moderator_state['state'] >= I_APPROVE
                    has_perms = self.request.current_page.has_moderate_permission(self.request)
                    if should_approve and has_perms:
                        label = moderator_state['label']
                        urlgetter = _get_approve_url
                    elif has_perms:
                        label = _("Publish")
                        urlgetter = _get_publish_url
                    else:
                        urlgetter = _get_approve_url
                        label = _("Request Approval")
                    items.append(
                        GetButton(RIGHT, 'moderator', label, urlgetter)
                    )
            
                # The 'templates' Menu
                items.append(self.get_template_menu(context, self.can_change, self.is_staff))
                
                # The 'page' Menu
                items.append(self.get_page_menu(context, self.can_change, self.is_staff))
            
            # The 'Admin' Menu
            items.append(self.get_admin_menu(context, self.can_change, self.is_staff))
            
            items.append(
                GetButton(RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
                          cms_static_url('images/toolbar/icons/icon_lock.png'))
            )
        elif not self.request.user.is_authenticated():
            items.append(
                TemplateHTML(LEFT, 'login', 'cms/toolbar/items/login.html')
            )
        else:
            items.append(
                GetButton(RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
                          cms_static_url('images/toolbar/icons/icon_lock.png'))
            )
        return items
    
    def get_template_menu(self, context, can_change, is_staff):
        menu_items = []
        url = reverse('admin:cms_page_change_template', args=(self.request.current_page.pk,))
        for path, name in settings.CMS_TEMPLATES:
            args = urllib.urlencode({'template': path})
            css = 'template'
            if self.request.current_page.get_template() == path:
                css += ' active'
            menu_items.append(
                ListItem(css, name, '%s?%s' % (url, args), 'POST'),
            )
        return List(RIGHT, 'templates', _('Template'),
                    '', items=menu_items)
    
    def get_page_menu(self, context, can_change, is_staff):
        """
        Builds the 'page menu'
        """
        menu_items = [
            ListItem('overview', _('Move/add Pages'),
                     reverse('admin:cms_page_changelist'),
                     icon=cms_static_url('images/toolbar/icons/icon_sitemap.png')),
        ]
        menu_items.append(
            ListItem('addchild', _('Add child page'),
                     _get_add_child_url,
                     icon=cms_static_url('images/toolbar/icons/icon_child.png'))
        )
        
        menu_items.append(
            ListItem('addsibling', _('Add sibling page'),
                     _get_add_sibling_url,
                     icon=cms_static_url('images/toolbar/icons/icon_sibling.png'))
        )
            
        menu_items.append(
            ListItem('delete', _('Delete Page'), _get_delete_url,
                     icon=cms_static_url('images/toolbar/icons/icon_delete.png'))
        )
        return List(RIGHT, 'page', _('Page'),
                    cms_static_url('images/toolbar/icons/icon_page.png'),
                    items=menu_items)
    
    def get_admin_menu(self, context, can_change, is_staff):
        """
        Builds the 'admin menu' (the one with the cogwheel)
        """
        admin_items = [
            ListItem('admin', _('Site Administration'),
                     reverse('admin:index'),
                     icon=cms_static_url('images/toolbar/icons/icon_admin.png')),
        ]
        if can_change:
            admin_items.append(
                ListItem('settings', _('Page Settings'),
                         _get_page_admin_url,
                         icon=cms_static_url('images/toolbar/icons/icon_page.png'))
            )
            if 'reversion' in settings.INSTALLED_APPS:
                admin_items.append(
                    ListItem('history', _('View History'),
                             _get_page_history_url,
                             icon=cms_static_url('images/toolbar/icons/icon_history.png'))
                )
        return List(RIGHT, 'admin', _('Admin'),
                    cms_static_url('images/toolbar/icons/icon_admin.png'),
                    items=admin_items)
    
    def request_hook(self):
        if self.request.method != 'POST':
            return self._request_hook_get()
        else:
            return self._request_hook_post()
        
    def _request_hook_get(self):
        if 'cms-toolbar-logout' in self.request.GET:
            logout(self.request)
            return HttpResponseRedirect(self.request.path)
        
    def _request_hook_post(self):
        # login hook
        if 'cms-toolbar-login' in self.request.GET:
            login_form = CMSToolbarLoginForm(self.request.POST)
            if login_form.is_valid():
                username = login_form.cleaned_data['cms_username']
                password = login_form.cleaned_data['cms_password']
                user = authenticate(username=username, password=password)
                if user:
                    login(self.request, user)
                    self.init()
コード例 #4
0
class CMSToolbar(Toolbar):
    """
    The default CMS Toolbar
    """
    revert_button = GetButton(RIGHT,
                              'revert',
                              _("Revert"),
                              url=_get_revert_url,
                              enable=_page_is_dirty)

    edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit', 'edit-off',
                                  _('Edit mode'))

    def __init__(self, request):
        super(CMSToolbar, self).__init__(request)
        self.init()

    def init(self):
        """ Hook called when the toolbar is reinitialised """

    @property
    def is_staff(self):
        return self.request.user.is_staff

    @property
    def can_change(self):
        return has_page_change_permission(self.request)

    @property
    def edit_mode(self):
        return self.is_staff and self.edit_mode_switcher.get_state(
            self.request)

    @property
    def show_toolbar(self):
        return self.is_staff or self.edit_mode_switcher.get_state(self.request)

    @property
    def current_page(self):
        return self.request.current_page

    def get_items(self, context, **kwargs):
        """
        Get the CMS items on the toolbar
        """
        items = [
            Anchor(LEFT, 'logo', _('django CMS'),
                   'https://www.django-cms.org'),
        ]

        self.page_states = []

        # Store access property values to avoid having to recompute them
        is_staff = self.is_staff
        can_change = self.can_change
        edit_mode = self.edit_mode

        if can_change:
            items.append(self.edit_mode_switcher)

        if is_staff:

            current_page = self.request.current_page

            if current_page:
                # publish button
                if edit_mode:
                    if current_page.has_publish_permission(self.request):
                        items.append(
                            GetButton(RIGHT, 'moderator', _("Publish"),
                                      _get_publish_url))
                    if self.revert_button.is_enabled_for(self.request):
                        items.append(self.revert_button)

                # The 'templates' Menu
                if can_change:
                    items.append(
                        self.get_template_menu(context, can_change, is_staff))

                # The 'page' Menu
                items.append(self.get_page_menu(context, can_change, is_staff))

            # The 'Admin' Menu
            items.append(self.get_admin_menu(context, can_change, is_staff))

        if not self.request.user.is_authenticated():
            items.append(
                TemplateHTML(LEFT, 'login', 'cms/toolbar/items/login.html'))
        else:
            items.append(
                GetButton(
                    RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
                    cms_static_url('images/toolbar/icons/icon_lock.png')))
        return items

    def get_template_menu(self, context, can_change, is_staff):
        menu_items = []
        page = self.request.current_page.get_draft_object()
        url = reverse('admin:cms_page_change_template', args=(page.pk, ))
        for path, name in get_cms_setting('TEMPLATES'):
            args = urllib.urlencode({'template': path})
            css = 'template'
            if page.get_template() == path:
                css += ' active'
            menu_items.append(
                ListItem(css, name, '%s?%s' % (url, args), 'POST'), )
        return List(RIGHT, 'templates', _('Template'), '', items=menu_items)

    def get_page_menu(self, context, can_change, is_staff):
        """
        Builds the 'page menu'
        """
        menu_items = [
            ListItem(
                'overview',
                _('Move/add Pages'),
                reverse('admin:cms_page_changelist'),
                icon=cms_static_url('images/toolbar/icons/icon_sitemap.png')),
        ]
        menu_items.append(
            ListItem(
                'addchild',
                _('Add child page'),
                _get_add_child_url,
                icon=cms_static_url('images/toolbar/icons/icon_child.png')))

        menu_items.append(
            ListItem(
                'addsibling',
                _('Add sibling page'),
                _get_add_sibling_url,
                icon=cms_static_url('images/toolbar/icons/icon_sibling.png')))

        menu_items.append(
            ListItem(
                'delete',
                _('Delete Page'),
                _get_delete_url,
                icon=cms_static_url('images/toolbar/icons/icon_delete.png')))
        return List(RIGHT,
                    'page',
                    _('Page'),
                    cms_static_url('images/toolbar/icons/icon_page.png'),
                    items=menu_items)

    def get_admin_menu(self, context, can_change, is_staff):
        """
        Builds the 'admin menu' (the one with the cogwheel)
        """
        admin_items = [
            ListItem(
                'admin',
                _('Site Administration'),
                reverse('admin:index'),
                icon=cms_static_url('images/toolbar/icons/icon_admin.png')),
        ]
        if can_change and self.request.current_page:
            admin_items.append(
                ListItem(
                    'settings',
                    _('Page Settings'),
                    _get_page_admin_url,
                    icon=cms_static_url('images/toolbar/icons/icon_page.png')))
            if 'reversion' in settings.INSTALLED_APPS:
                admin_items.append(
                    ListItem('history',
                             _('View History'),
                             _get_page_history_url,
                             icon=cms_static_url(
                                 'images/toolbar/icons/icon_history.png')))
        return List(RIGHT,
                    'admin',
                    _('Admin'),
                    cms_static_url('images/toolbar/icons/icon_admin.png'),
                    items=admin_items)

    def request_hook(self):
        if self.request.method != 'POST':
            return self._request_hook_get()
        else:
            return self._request_hook_post()

    def _request_hook_get(self):
        request = self.request
        if 'cms-toolbar-logout' in request.GET:
            logout(request)
            return HttpResponseRedirect(request.path)

    def _request_hook_post(self):
        request = self.request
        # login hook
        if 'cms-toolbar-login' in request.GET:
            login_form = CMSToolbarLoginForm(request.POST)
            if login_form.is_valid():
                username = login_form.cleaned_data['cms_username']
                password = login_form.cleaned_data['cms_password']
                user = authenticate(username=username, password=password)
                if user:
                    login(request, user)
                    self.init()
コード例 #5
0
ファイル: cms_toolbar.py プロジェクト: zhiqunq/django-cms
class CMSToolbar(Toolbar):
    """
    The default CMS Toolbar
    """
    def __init__(self, request):
        super(CMSToolbar, self).__init__(request)
        self.init()

    def init(self):
        self.is_staff = self.request.user.is_staff
        self.can_change = (self.request.current_page
                           and self.request.current_page.has_change_permission(
                               self.request))
        self.edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit',
                                           'edit-off', _('Edit mode'))
        self.edit_mode = self.is_staff and self.edit_mode_switcher.get_state(
            self.request)
        self.show_toolbar = self.is_staff or self.edit_mode_switcher.get_state(
            self.request)

    def get_items(self, context, **kwargs):
        """
        Get the CMS items on the toolbar
        """
        items = [
            Anchor(LEFT, 'logo', _('django CMS'),
                   'https://www.django-cms.org'),
        ]

        self.page_states = []

        if self.is_staff:

            items.append(self.edit_mode_switcher)

            if self.request.current_page:
                states = self.request.current_page.last_page_states()
                has_states = states.exists()
                self.page_states = states
                if has_states:
                    items.append(
                        TemplateHTML(LEFT, 'status',
                                     'cms/toolbar/items/status.html'))

                # publish button
                if self.edit_mode and settings.CMS_MODERATOR:
                    moderator_state = page_moderator_state(
                        self.request, self.request.current_page)
                    should_approve = moderator_state['state'] >= I_APPROVE
                    has_perms = self.request.current_page.has_moderate_permission(
                        self.request)
                    if should_approve and has_perms:
                        label = moderator_state['label']
                        urlgetter = _get_approve_url
                    elif has_perms:
                        label = _("Publish")
                        urlgetter = _get_publish_url
                    else:
                        urlgetter = _get_approve_url
                        label = _("Request Approval")
                    items.append(
                        GetButton(RIGHT, 'moderator', label, urlgetter))

                # The 'templates' Menu
                items.append(
                    self.get_template_menu(context, self.can_change,
                                           self.is_staff))

                # The 'page' Menu
                items.append(
                    self.get_page_menu(context, self.can_change,
                                       self.is_staff))

            # The 'Admin' Menu
            items.append(
                self.get_admin_menu(context, self.can_change, self.is_staff))

            items.append(
                GetButton(
                    RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
                    cms_static_url('images/toolbar/icons/icon_lock.png')))
        elif not self.request.user.is_authenticated():
            items.append(
                TemplateHTML(LEFT, 'login', 'cms/toolbar/items/login.html'))
        else:
            items.append(
                GetButton(
                    RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
                    cms_static_url('images/toolbar/icons/icon_lock.png')))
        return items

    def get_template_menu(self, context, can_change, is_staff):
        menu_items = []
        url = reverse('admin:cms_page_change_template',
                      args=(self.request.current_page.pk, ))
        for path, name in settings.CMS_TEMPLATES:
            args = urllib.urlencode({'template': path})
            css = 'template'
            if self.request.current_page.get_template() == path:
                css += ' active'
            menu_items.append(
                ListItem(css, name, '%s?%s' % (url, args), 'POST'), )
        return List(RIGHT, 'templates', _('Template'), '', items=menu_items)

    def get_page_menu(self, context, can_change, is_staff):
        """
        Builds the 'page menu'
        """
        menu_items = [
            ListItem(
                'overview',
                _('Move/add Pages'),
                reverse('admin:cms_page_changelist'),
                icon=cms_static_url('images/toolbar/icons/icon_sitemap.png')),
        ]
        menu_items.append(
            ListItem(
                'addchild',
                _('Add child page'),
                _get_add_child_url,
                icon=cms_static_url('images/toolbar/icons/icon_child.png')))

        menu_items.append(
            ListItem(
                'addsibling',
                _('Add sibling page'),
                _get_add_sibling_url,
                icon=cms_static_url('images/toolbar/icons/icon_sibling.png')))

        menu_items.append(
            ListItem(
                'delete',
                _('Delete Page'),
                _get_delete_url,
                icon=cms_static_url('images/toolbar/icons/icon_delete.png')))
        return List(RIGHT,
                    'page',
                    _('Page'),
                    cms_static_url('images/toolbar/icons/icon_page.png'),
                    items=menu_items)

    def get_admin_menu(self, context, can_change, is_staff):
        """
        Builds the 'admin menu' (the one with the cogwheel)
        """
        admin_items = [
            ListItem(
                'admin',
                _('Site Administration'),
                reverse('admin:index'),
                icon=cms_static_url('images/toolbar/icons/icon_admin.png')),
        ]
        if can_change:
            admin_items.append(
                ListItem(
                    'settings',
                    _('Page Settings'),
                    _get_page_admin_url,
                    icon=cms_static_url('images/toolbar/icons/icon_page.png')))
            if 'reversion' in settings.INSTALLED_APPS:
                admin_items.append(
                    ListItem('history',
                             _('View History'),
                             _get_page_history_url,
                             icon=cms_static_url(
                                 'images/toolbar/icons/icon_history.png')))
        return List(RIGHT,
                    'admin',
                    _('Admin'),
                    cms_static_url('images/toolbar/icons/icon_admin.png'),
                    items=admin_items)

    def request_hook(self):
        if self.request.method != 'POST':
            return self._request_hook_get()
        else:
            return self._request_hook_post()

    def _request_hook_get(self):
        if 'cms-toolbar-logout' in self.request.GET:
            logout(self.request)
            return HttpResponseRedirect(self.request.path)

    def _request_hook_post(self):
        # login hook
        if 'cms-toolbar-login' in self.request.GET:
            login_form = CMSToolbarLoginForm(self.request.POST)
            if login_form.is_valid():
                username = login_form.cleaned_data['cms_username']
                password = login_form.cleaned_data['cms_password']
                user = authenticate(username=username, password=password)
                if user:
                    login(self.request, user)
                    self.init()