cms.cms_toolbar: 125 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/cms_toolbar.py

Stats: 0 executed, 111 missed, 14 excluded, 113 ignored

  1. # -*- coding: utf-8 -*-
  2. from cms.toolbar.base import Toolbar
  3. from cms.toolbar.constants import LEFT, RIGHT
  4. from cms.toolbar.items import (Anchor, Switcher, TemplateHTML, ListItem, List,
  5. GetButton)
  6. from cms.utils import cms_static_url
  7. from cms.utils.moderator import page_moderator_state, I_APPROVE
  8. from django import forms
  9. from django.conf import settings
  10. from django.contrib.auth import authenticate, login, logout
  11. from django.core.urlresolvers import reverse
  12. from django.http import HttpResponseRedirect
  13. from django.utils.translation import ugettext_lazy as _
  14. import urllib
  15. from utils.permissions import has_page_change_permission, has_any_page_change_permissions
  16. from django.conf import settings
  17. def _get_page_admin_url(context, toolbar, **kwargs):
  18. return reverse('admin:cms_page_change', args=(toolbar.request.current_page.pk,))
  19. def _get_page_history_url(context, toolbar, **kwargs):
  20. return reverse('admin:cms_page_history', args=(toolbar.request.current_page.pk,))
  21. def _get_add_child_url(context, toolbar, **kwargs):
  22. data = {
  23. 'position': 'last-child',
  24. 'target': toolbar.request.current_page.pk,
  25. }
  26. args = urllib.urlencode(data)
  27. return '%s?%s' % (reverse('admin:cms_page_add'), args)
  28. def _get_add_sibling_url(context, toolbar, **kwargs):
  29. data = {
  30. 'position': 'last-child',
  31. }
  32. if toolbar.request.current_page.parent_id:
  33. data['target'] = toolbar.request.current_page.parent_id
  34. args = urllib.urlencode(data)
  35. return '%s?%s' % (reverse('admin:cms_page_add'), args)
  36. def _get_delete_url(context, toolbar, **kwargs):
  37. return reverse('admin:cms_page_delete', args=(toolbar.request.current_page.pk,))
  38. def _get_approve_url(context, toolbar, **kwargs):
  39. return reverse('admin:cms_page_approve_page', args=(toolbar.request.current_page.pk,))
  40. def _get_publish_url(context, toolbar, **kwargs):
  41. return reverse('admin:cms_page_publish_page', args=(toolbar.request.current_page.pk,))
  42. class CMSToolbarLoginForm(forms.Form):
  43. cms_username = forms.CharField()
  44. cms_password = forms.CharField()
  45. class CMSToolbar(Toolbar):
  46. """
  47. The default CMS Toolbar
  48. """
  49. def __init__(self, request):
  50. super(CMSToolbar, self).__init__(request)
  51. self.init()
  52. def init(self):
  53. self.is_staff = self.request.user.is_staff
  54. self.can_change = (self.request.current_page and
  55. self.request.current_page.has_change_permission(self.request))
  56. self.edit_mode_switcher = Switcher(LEFT, 'editmode', 'edit', 'edit-off',
  57. _('Edit mode'))
  58. self.edit_mode = self.is_staff and self.edit_mode_switcher.get_state(self.request)
  59. self.show_toolbar = self.is_staff or self.edit_mode_switcher.get_state(self.request)
  60. def get_items(self, context, **kwargs):
  61. """
  62. Get the CMS items on the toolbar
  63. """
  64. items = [
  65. Anchor(LEFT, 'logo', _('django CMS'), 'https://www.django-cms.org'),
  66. ]
  67. self.page_states = []
  68. if self.is_staff:
  69. items.append(
  70. self.edit_mode_switcher
  71. )
  72. if self.request.current_page:
  73. states = self.request.current_page.last_page_states()
  74. has_states = states.exists()
  75. self.page_states = states
  76. if has_states:
  77. items.append(
  78. TemplateHTML(LEFT, 'status',
  79. 'cms/toolbar/items/status.html')
  80. )
  81. # publish button
  82. if self.edit_mode and settings.CMS_MODERATOR:
  83. moderator_state = page_moderator_state(self.request, self.request.current_page)
  84. should_approve = moderator_state['state'] >= I_APPROVE
  85. has_perms = self.request.current_page.has_moderate_permission(self.request)
  86. if should_approve and has_perms:
  87. label = moderator_state['label']
  88. urlgetter = _get_approve_url
  89. elif has_perms:
  90. label = _("Publish")
  91. urlgetter = _get_publish_url
  92. else:
  93. urlgetter = _get_approve_url
  94. label = _("Request Approval")
  95. items.append(
  96. GetButton(RIGHT, 'moderator', label, urlgetter)
  97. )
  98. has_global_current_page_change_permission = False
  99. if settings.CMS_PERMISSION:
  100. has_global_current_page_change_permission = has_page_change_permission(self.request)
  101. has_current_page_change_permission = self.request.current_page.has_change_permission(self.request)
  102. # The 'templates' Menu
  103. if has_global_current_page_change_permission or has_current_page_change_permission:
  104. items.append(self.get_template_menu(context, self.can_change, self.is_staff))
  105. # The 'page' Menu
  106. items.append(self.get_page_menu(context, self.can_change, self.is_staff))
  107. # The 'Admin' Menu
  108. items.append(self.get_admin_menu(context, self.can_change, self.is_staff))
  109. items.append(
  110. GetButton(RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
  111. cms_static_url('images/toolbar/icons/icon_lock.png'))
  112. )
  113. elif not self.request.user.is_authenticated():
  114. items.append(
  115. TemplateHTML(LEFT, 'login', 'cms/toolbar/items/login.html')
  116. )
  117. else:
  118. items.append(
  119. GetButton(RIGHT, 'logout', _('Logout'), '?cms-toolbar-logout',
  120. cms_static_url('images/toolbar/icons/icon_lock.png'))
  121. )
  122. return items
  123. def get_template_menu(self, context, can_change, is_staff):
  124. menu_items = []
  125. url = reverse('admin:cms_page_change_template', args=(self.request.current_page.pk,))
  126. for path, name in settings.CMS_TEMPLATES:
  127. args = urllib.urlencode({'template': path})
  128. css = 'template'
  129. if self.request.current_page.get_template() == path:
  130. css += ' active'
  131. menu_items.append(
  132. ListItem(css, name, '%s?%s' % (url, args), 'POST'),
  133. )
  134. return List(RIGHT, 'templates', _('Template'),
  135. '', items=menu_items)
  136. def get_page_menu(self, context, can_change, is_staff):
  137. """
  138. Builds the 'page menu'
  139. """
  140. menu_items = [
  141. ListItem('overview', _('Move/add Pages'),
  142. reverse('admin:cms_page_changelist'),
  143. icon=cms_static_url('images/toolbar/icons/icon_sitemap.png')),
  144. ]
  145. menu_items.append(
  146. ListItem('addchild', _('Add child page'),
  147. _get_add_child_url,
  148. icon=cms_static_url('images/toolbar/icons/icon_child.png'))
  149. )
  150. menu_items.append(
  151. ListItem('addsibling', _('Add sibling page'),
  152. _get_add_sibling_url,
  153. icon=cms_static_url('images/toolbar/icons/icon_sibling.png'))
  154. )
  155. menu_items.append(
  156. ListItem('delete', _('Delete Page'), _get_delete_url,
  157. icon=cms_static_url('images/toolbar/icons/icon_delete.png'))
  158. )
  159. return List(RIGHT, 'page', _('Page'),
  160. cms_static_url('images/toolbar/icons/icon_page.png'),
  161. items=menu_items)
  162. def get_admin_menu(self, context, can_change, is_staff):
  163. """
  164. Builds the 'admin menu' (the one with the cogwheel)
  165. """
  166. admin_items = [
  167. ListItem('admin', _('Site Administration'),
  168. reverse('admin:index'),
  169. icon=cms_static_url('images/toolbar/icons/icon_admin.png')),
  170. ]
  171. if can_change:
  172. admin_items.append(
  173. ListItem('settings', _('Page Settings'),
  174. _get_page_admin_url,
  175. icon=cms_static_url('images/toolbar/icons/icon_page.png'))
  176. )
  177. if 'reversion' in settings.INSTALLED_APPS:
  178. admin_items.append(
  179. ListItem('history', _('View History'),
  180. _get_page_history_url,
  181. icon=cms_static_url('images/toolbar/icons/icon_history.png'))
  182. )
  183. return List(RIGHT, 'admin', _('Admin'),
  184. cms_static_url('images/toolbar/icons/icon_admin.png'),
  185. items=admin_items)
  186. def request_hook(self):
  187. if self.request.method != 'POST':
  188. return self._request_hook_get()
  189. else:
  190. return self._request_hook_post()
  191. def _request_hook_get(self):
  192. if 'cms-toolbar-logout' in self.request.GET:
  193. logout(self.request)
  194. return HttpResponseRedirect(self.request.path)
  195. def _request_hook_post(self):
  196. # login hook
  197. if 'cms-toolbar-login' in self.request.GET:
  198. login_form = CMSToolbarLoginForm(self.request.POST)
  199. if login_form.is_valid():
  200. username = login_form.cleaned_data['cms_username']
  201. password = login_form.cleaned_data['cms_password']
  202. user = authenticate(username=username, password=password)
  203. if user:
  204. login(self.request, user)
  205. self.init()