1
2
3
4
5
6
7
8
9
10
11 """
12 Operations for Messaging.
13
14 Available at: /zport/dmd/messaging_router
15 """
16 from Persistence import PersistentMapping
17 from ZODB.transact import transact
18 from Products.ZenUtils.Ext import DirectRouter
19 from Products.ZenModel.ZenossSecurity import *
20 from Products.ZenWidgets.interfaces import IUserMessages, IBrowserMessages
21 from Products.ZenWidgets import messaging
25 """
26 A JSON/ExtDirect interface to operations on messages
27 """
28 @transact
30 """
31 Save the browser state for the current user.
32
33 @param state: The browser state as a JSON-encoded string
34 @type state: str
35 """
36 userSettings = self.context.dmd.ZenUsers.getUserSettings()
37 state_container = getattr(userSettings, '_browser_state', None)
38 if isinstance(state_container, basestring) or state_container is None:
39 state_container = PersistentMapping()
40 userSettings._browser_state = state_container
41 state_container['state'] = state
42
44 """
45 Removes all the stored state associated with the current user
46 """
47 if user:
48 userSettings = self.context.dmd.ZenUsers._getOb(user)
49 else:
50 userSettings = self.context.dmd.ZenUsers.getUserSettings()
51 if getattr(userSettings, '_browser_state', None):
52 del userSettings._browser_state
53 messaging.IMessageSender(self.context).sendToBrowser(
54 'Preferences Reset',
55 'Preferences reset to their default values.',
56 priority=messaging.WARNING
57 )
58
60 """
61 Get the queued messages for the logged in user.
62
63 @rtype: dictionary
64 @return: B{Properties}:
65 - messages: ([string]) A list of queued messages.
66 """
67
68
69 messages = IUserMessages(self.context.zport.dmd).get_unread()
70 messages.extend(IBrowserMessages(self.context).get_unread())
71 messages.sort(key=lambda x:x.timestamp)
72 result = []
73 for message in messages:
74 result.append(dict(
75 sticky = True if message.priority >= messaging.CRITICAL else False,
76 image = message.image,
77 title = message.title,
78 body = message.body,
79 priority = message.priority
80 ))
81 message.mark_as_read()
82
83 return {
84 'messages': result
85 }
86