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 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)
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()
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()
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()