Complete changes needed to add the Message of the Day app. Closes GitLab issue #222.
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
- Fixed date locale handling in document properties, checkout and user detail views.
|
||||
- Add new permission: checkout details view.
|
||||
- Add HTML5 upload widget. Issue #162.
|
||||
- Add Message of the Day app. Issue #222
|
||||
|
||||
2.0.2 (2016-02-09)
|
||||
==================
|
||||
|
||||
@@ -9,7 +9,8 @@ from django.contrib.auth.signals import user_logged_in
|
||||
from django.db.models.signals import post_save
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from common import MayanAppConfig, menu_object, menu_secondary, menu_tools
|
||||
from common import MayanAppConfig, menu_object, menu_secondary, menu_setup
|
||||
from navigation import SourceColumn
|
||||
|
||||
from .links import (
|
||||
link_message_create, link_message_delete, link_message_edit,
|
||||
@@ -29,6 +30,18 @@ class MOTDApp(MayanAppConfig):
|
||||
|
||||
Message = self.get_model('Message')
|
||||
|
||||
SourceColumn(
|
||||
source=Message, label=_('Enabled'), attribute='enabled'
|
||||
)
|
||||
SourceColumn(
|
||||
source=Message, label=_('Start date time'),
|
||||
func=lambda context: context['object'].start_datetime or _('None')
|
||||
)
|
||||
SourceColumn(
|
||||
source=Message, label=_('End date time'),
|
||||
func=lambda context: context['object'].end_datetime or _('None')
|
||||
)
|
||||
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_message_edit, link_message_delete
|
||||
@@ -38,6 +51,6 @@ class MOTDApp(MayanAppConfig):
|
||||
links=(link_message_create,),
|
||||
sources=(Message, 'motd:message_list', 'motd:message_create')
|
||||
)
|
||||
menu_tools.bind_links(
|
||||
menu_setup.bind_links(
|
||||
links=(link_message_list,)
|
||||
)
|
||||
|
||||
@@ -10,14 +10,24 @@ from .managers import MessageManager
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Message(models.Model):
|
||||
label = models.CharField(max_length=32, verbose_name=_('Label'))
|
||||
message = models.TextField(verbose_name=_('Message'))
|
||||
label = models.CharField(
|
||||
max_length=32, help_text=_('Short description of this message.'),
|
||||
verbose_name=_('Label')
|
||||
)
|
||||
message = models.TextField(
|
||||
help_text=_('The actual message to be displayed.'),
|
||||
verbose_name=_('Message')
|
||||
)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
start_datetime = models.DateTimeField(
|
||||
blank=True, null=True, verbose_name=_('Start date time')
|
||||
blank=True, help_text=_(
|
||||
'Date and time after which this message will be displayed.'
|
||||
), null=True, verbose_name=_('Start date time')
|
||||
)
|
||||
end_datetime = models.DateTimeField(
|
||||
blank=True, null=True, verbose_name=_('End date time')
|
||||
blank=True, help_text=_(
|
||||
'Date and time until when this message is to be displayed.'
|
||||
), null=True, verbose_name=_('End date time')
|
||||
)
|
||||
|
||||
objects = MessageManager()
|
||||
|
||||
@@ -2,11 +2,11 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.template import Library
|
||||
|
||||
from ..models import MessageOfTheDay
|
||||
from ..models import Message
|
||||
|
||||
register = Library()
|
||||
|
||||
|
||||
@register.inclusion_tag('motd/messages.html')
|
||||
def motd():
|
||||
return {'messages': MessageOfTheDay.objects.get_for_now()}
|
||||
return {'messages': Message.objects.get_for_now()}
|
||||
|
||||
@@ -5,7 +5,7 @@ from datetime import timedelta
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from ..models import MessageOfTheDay
|
||||
from ..models import Message
|
||||
|
||||
TEST_LABEL = 'test label'
|
||||
TEST_MESSAGE = 'test message'
|
||||
@@ -13,12 +13,12 @@ TEST_MESSAGE = 'test message'
|
||||
|
||||
class MOTDTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.motd = MessageOfTheDay.objects.create(
|
||||
self.motd = Message.objects.create(
|
||||
label=TEST_LABEL, message=TEST_MESSAGE
|
||||
)
|
||||
|
||||
def test_basic(self):
|
||||
queryset = MessageOfTheDay.objects.get_for_now()
|
||||
queryset = Message.objects.get_for_now()
|
||||
|
||||
self.assertEqual(queryset.exists(), True)
|
||||
|
||||
@@ -26,7 +26,7 @@ class MOTDTestCase(TestCase):
|
||||
self.motd.start_datetime = timezone.now() - timedelta(days=1)
|
||||
self.motd.save()
|
||||
|
||||
queryset = MessageOfTheDay.objects.get_for_now()
|
||||
queryset = Message.objects.get_for_now()
|
||||
|
||||
self.assertEqual(queryset.first(), self.motd)
|
||||
|
||||
@@ -35,7 +35,7 @@ class MOTDTestCase(TestCase):
|
||||
self.motd.end_datetime = timezone.now() - timedelta(days=1)
|
||||
self.motd.save()
|
||||
|
||||
queryset = MessageOfTheDay.objects.get_for_now()
|
||||
queryset = Message.objects.get_for_now()
|
||||
|
||||
self.assertEqual(queryset.exists(), False)
|
||||
|
||||
@@ -43,6 +43,6 @@ class MOTDTestCase(TestCase):
|
||||
self.motd.enabled=False
|
||||
self.motd.save()
|
||||
|
||||
queryset = MessageOfTheDay.objects.get_for_now()
|
||||
queryset = Message.objects.get_for_now()
|
||||
|
||||
self.assertEqual(queryset.exists(), False)
|
||||
|
||||
@@ -7,7 +7,7 @@ from .views import (
|
||||
)
|
||||
|
||||
urlpatterns = patterns(
|
||||
'motd.views',
|
||||
'',
|
||||
url(r'^list/$', MessageListView.as_view(), name='message_list'),
|
||||
url(r'^create/$', MessageCreateView.as_view(), name='message_create'),
|
||||
url(r'^(?P<pk>\d+)/edit/$', MessageEditView.as_view(), name='message_edit'),
|
||||
|
||||
@@ -16,17 +16,17 @@ from common.views import (
|
||||
SingleObjectListView
|
||||
)
|
||||
|
||||
from .models import MessageOfTheDay
|
||||
from .models import Message
|
||||
from .permissions import (
|
||||
permission_message_create, permission_message_delete, permission_message_edit,
|
||||
permission_message_view,
|
||||
permission_message_create, permission_message_delete,
|
||||
permission_message_edit, permission_message_view,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MessageCreateView(SingleObjectCreateView):
|
||||
fields = ('label',)
|
||||
fields = ('label', 'message', 'enabled', 'start_datetime', 'end_datetime')
|
||||
model = Message
|
||||
view_permission = permission_message_create
|
||||
|
||||
@@ -40,21 +40,22 @@ class MessageCreateView(SingleObjectCreateView):
|
||||
class MessageDeleteView(SingleObjectDeleteView):
|
||||
model = Message
|
||||
object_permission = permission_message_delete
|
||||
post_action_redirect = reverse_lazy('messages:message_list')
|
||||
post_action_redirect = reverse_lazy('motd:message_list')
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object_name': _('Message'),
|
||||
'message': None,
|
||||
'object': self.get_object(),
|
||||
'object_name': _('Message'),
|
||||
'title': _('Delete the message: %s?') % self.get_object(),
|
||||
}
|
||||
|
||||
|
||||
class MessageEditView(SingleObjectEditView):
|
||||
fields = ('label',)
|
||||
fields = ('label', 'message', 'enabled', 'start_datetime', 'end_datetime')
|
||||
model = Message
|
||||
object_permission = permission_message_edit
|
||||
post_action_redirect = reverse_lazy('messages:message_list')
|
||||
post_action_redirect = reverse_lazy('motd:message_list')
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
@@ -72,3 +73,4 @@ class MessageListView(SingleObjectListView):
|
||||
return {
|
||||
'hide_link': True,
|
||||
'title': _('Messages'),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user