cms.models.moderatormodels: 61 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/models/moderatormodels.py

Stats: 0 executed, 51 missed, 10 excluded, 64 ignored

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from django.db import models
  4. from django.contrib.auth.models import User
  5. from django.utils.translation import ugettext_lazy as _
  6. from cms.models.managers import PageModeratorStateManager
  7. from cms.models.pagemodel import Page
  8. # NOTE: those are not just numbers!! we will do binary AND on them,
  9. # so pay attention when adding/changing them, or MASKs..
  10. ACCESS_PAGE = 1
  11. ACCESS_CHILDREN = 2 # just immediate children (1 level)
  12. ACCESS_PAGE_AND_CHILDREN = 3 # just immediate children (1 level)
  13. ACCESS_DESCENDANTS = 4
  14. ACCESS_PAGE_AND_DESCENDANTS = 5
  15. # binary masks for ACCESS permissions
  16. MASK_PAGE = 1
  17. MASK_CHILDREN = 2
  18. MASK_DESCENDANTS = 4
  19. ACCESS_CHOICES = (
  20. (ACCESS_PAGE, _('Current page')),
  21. (ACCESS_CHILDREN, _('Page children (immediate)')),
  22. (ACCESS_PAGE_AND_CHILDREN, _('Page and children (immediate)')),
  23. (ACCESS_DESCENDANTS, _('Page descendants')),
  24. (ACCESS_PAGE_AND_DESCENDANTS, _('Page and descendants')),
  25. )
  26. ################################################################################
  27. # Moderation
  28. ################################################################################
  29. class PageModerator(models.Model):
  30. """
  31. Page moderator holds user / page / moderation type states. User can be
  32. assigned to any page (to which he haves permissions), and say which
  33. moderation depth he requires.
  34. """
  35. MAX_MODERATION_LEVEL = sys.maxint # just an number
  36. page = models.ForeignKey(Page, verbose_name=_('Page'))
  37. user = models.ForeignKey(User, verbose_name=_('User'))
  38. # TODO: permission stuff could be changed to this structure also, this gives
  39. # better querying performance
  40. moderate_page = models.BooleanField(_('Moderate page'), blank=True)
  41. moderate_children = models.BooleanField(_('Moderate children'), blank=True)
  42. moderate_descendants = models.BooleanField(_('Moderate descendants'), blank=True)
  43. class Meta:
  44. verbose_name = _('PageModerator')
  45. verbose_name_plural = _('PageModerator')
  46. app_label = 'cms'
  47. def set_decimal(self, state):
  48. """Converts and sets binary state to local attributes
  49. """
  50. self.moderate_page = bool(state & MASK_PAGE)
  51. moderate_children = bool(state & MASK_CHILDREN)
  52. moderate_descendants = bool(state & MASK_DESCENDANTS)
  53. if moderate_descendants:
  54. moderate_children = True
  55. self.moderate_children = moderate_children
  56. self.moderate_descendants = moderate_descendants
  57. def get_decimal(self):
  58. return self.moderate_page * MASK_PAGE + \
  59. self.moderate_children * MASK_CHILDREN + \
  60. self.moderate_descendants * MASK_DESCENDANTS
  61. def __unicode__(self):
  62. return u"%s on %s mod: %d" % (self.user, self.page, self.get_decimal())
  63. class PageModeratorState(models.Model):
  64. """PageModeratorState memories all actions made on page.
  65. Page can be in only one advanced state.
  66. """
  67. ACTION_ADD = "ADD"
  68. ACTION_CHANGED = "CHA"
  69. ACTION_PUBLISH = "PUB"
  70. ACTION_UNPUBLISH = "UNP"
  71. ACTION_MOVE = "MOV"
  72. # advanced states
  73. ACTION_DELETE = "DEL"
  74. # approve state
  75. ACTION_APPROVE = "APP"
  76. _action_choices = (
  77. (ACTION_ADD, _('created')),
  78. (ACTION_CHANGED, _('changed')),
  79. (ACTION_DELETE, _('delete req.')),
  80. (ACTION_MOVE, _('move req.')),
  81. (ACTION_PUBLISH, _('publish req.')),
  82. (ACTION_UNPUBLISH, _('unpublish req.')),
  83. (ACTION_APPROVE, _('approved')), # Approved by somebody in approvement process
  84. )
  85. page = models.ForeignKey(Page)
  86. user = models.ForeignKey(User, null=True)
  87. created = models.DateTimeField(auto_now_add=True)
  88. action = models.CharField(max_length=3, choices=_action_choices, null=True, blank=True)
  89. message = models.TextField(max_length=1000, blank=True, default="")
  90. objects = PageModeratorStateManager()
  91. class Meta:
  92. verbose_name = _('Page moderator state')
  93. verbose_name_plural = _('Page moderator states')
  94. ordering = ('page', 'action', '-created') # newer first
  95. app_label = 'cms'
  96. css_class = lambda self: self.action.lower()
  97. def __unicode__(self):
  98. return u"%s: %s" % (self.page, self.get_action_display())