11 from cubicweb import UnknownEid |
11 from cubicweb import UnknownEid |
12 from cubicweb.selectors import none_rset |
12 from cubicweb.selectors import none_rset |
13 from cubicweb.schema import display_name |
13 from cubicweb.schema import display_name |
14 from cubicweb.view import Component |
14 from cubicweb.view import Component |
15 from cubicweb.common.mail import format_mail |
15 from cubicweb.common.mail import format_mail |
16 from cubicweb.server.hookhelper import SendMailOp |
16 from cubicweb.server.hook import SendMailOp |
17 |
17 |
18 |
18 |
19 def filter_changes(changes): |
19 def filter_changes(changes): |
20 """ |
20 """ |
21 * when an entity has been deleted: |
21 * when an entity has been deleted: |
84 """ |
84 """ |
85 __regid__ = 'supervision_notif' |
85 __regid__ = 'supervision_notif' |
86 __select__ = none_rset() |
86 __select__ = none_rset() |
87 |
87 |
88 def recipients(self): |
88 def recipients(self): |
89 return self.config['supervising-addrs'] |
89 return self._cw.vreg.config['supervising-addrs'] |
90 |
90 |
91 def subject(self): |
91 def subject(self): |
92 return self.req._('[%s supervision] changes summary') % self.config.appid |
92 return self._cw._('[%s supervision] changes summary') % self._cw.vreg.config.appid |
93 |
93 |
94 def call(self, changes): |
94 def call(self, changes): |
95 user = self.req.actual_session().user |
95 user = self._cw.actual_session().user |
96 self.w(self.req._('user %s has made the following change(s):\n\n') |
96 self.w(self._cw._('user %s has made the following change(s):\n\n') |
97 % user.login) |
97 % user.login) |
98 for event, changedescr in filter_changes(changes): |
98 for event, changedescr in filter_changes(changes): |
99 self.w(u'* ') |
99 self.w(u'* ') |
100 getattr(self, event)(changedescr) |
100 getattr(self, event)(changedescr) |
101 self.w(u'\n\n') |
101 self.w(u'\n\n') |
104 return {'eid': entity.eid, |
104 return {'eid': entity.eid, |
105 'etype': entity.dc_type().lower(), |
105 'etype': entity.dc_type().lower(), |
106 'title': entity.dc_title()} |
106 'title': entity.dc_title()} |
107 |
107 |
108 def add_entity(self, changedescr): |
108 def add_entity(self, changedescr): |
109 msg = self.req._('added %(etype)s #%(eid)s (%(title)s)') |
109 msg = self._cw._('added %(etype)s #%(eid)s (%(title)s)') |
110 self.w(u'%s\n' % (msg % self._entity_context(changedescr.entity))) |
110 self.w(u'%s\n' % (msg % self._entity_context(changedescr.entity))) |
111 self.w(u' %s' % changedescr.entity.absolute_url()) |
111 self.w(u' %s' % changedescr.entity.absolute_url()) |
112 |
112 |
113 def update_entity(self, changedescr): |
113 def update_entity(self, changedescr): |
114 msg = self.req._('updated %(etype)s #%(eid)s (%(title)s)') |
114 msg = self._cw._('updated %(etype)s #%(eid)s (%(title)s)') |
115 self.w(u'%s\n' % (msg % self._entity_context(changedescr.entity))) |
115 self.w(u'%s\n' % (msg % self._entity_context(changedescr.entity))) |
116 # XXX print changes |
116 # XXX print changes |
117 self.w(u' %s' % changedescr.entity.absolute_url()) |
117 self.w(u' %s' % changedescr.entity.absolute_url()) |
118 |
118 |
119 def delete_entity(self, (eid, etype, title)): |
119 def delete_entity(self, (eid, etype, title)): |
120 msg = self.req._('deleted %(etype)s #%(eid)s (%(title)s)') |
120 msg = self._cw._('deleted %(etype)s #%(eid)s (%(title)s)') |
121 etype = display_name(self.req, etype).lower() |
121 etype = display_name(self._cw, etype).lower() |
122 self.w(msg % locals()) |
122 self.w(msg % locals()) |
123 |
123 |
124 def change_state(self, (entity, fromstate, tostate)): |
124 def change_state(self, (entity, fromstate, tostate)): |
125 msg = self.req._('changed state of %(etype)s #%(eid)s (%(title)s)') |
125 msg = self._cw._('changed state of %(etype)s #%(eid)s (%(title)s)') |
126 self.w(u'%s\n' % (msg % self._entity_context(entity))) |
126 self.w(u'%s\n' % (msg % self._entity_context(entity))) |
127 self.w(_(' from state %(fromstate)s to state %(tostate)s\n' % |
127 self.w(_(' from state %(fromstate)s to state %(tostate)s\n' % |
128 {'fromstate': _(fromstate.name), 'tostate': _(tostate.name)})) |
128 {'fromstate': _(fromstate.name), 'tostate': _(tostate.name)})) |
129 self.w(u' %s' % entity.absolute_url()) |
129 self.w(u' %s' % entity.absolute_url()) |
130 |
130 |
131 def _relation_context(self, changedescr): |
131 def _relation_context(self, changedescr): |
132 _ = self.req._ |
132 _ = self._cw._ |
133 session = self.req.actual_session() |
133 session = self._cw.actual_session() |
134 def describe(eid): |
134 def describe(eid): |
135 try: |
135 try: |
136 return _(session.describe(eid)[0]).lower() |
136 return _(session.describe(eid)[0]).lower() |
137 except UnknownEid: |
137 except UnknownEid: |
138 # may occurs when an entity has been deleted from an external |
138 # may occurs when an entity has been deleted from an external |
144 'frometype': describe(eidfrom), |
144 'frometype': describe(eidfrom), |
145 'eidto': eidto, |
145 'eidto': eidto, |
146 'toetype': describe(eidto)} |
146 'toetype': describe(eidto)} |
147 |
147 |
148 def add_relation(self, changedescr): |
148 def add_relation(self, changedescr): |
149 msg = self.req._('added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%(eidto)s') |
149 msg = self._cw._('added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%(eidto)s') |
150 self.w(msg % self._relation_context(changedescr)) |
150 self.w(msg % self._relation_context(changedescr)) |
151 |
151 |
152 msg = self.req._('deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%(eidto)s') |
|
153 def delete_relation(self, changedescr): |
152 def delete_relation(self, changedescr): |
|
153 msg = self._cw._('deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%(eidto)s') |
154 self.w(msg % self._relation_context(changedescr)) |
154 self.w(msg % self._relation_context(changedescr)) |
155 |
155 |
156 |
156 |
157 class SupervisionMailOp(SendMailOp): |
157 class SupervisionMailOp(SendMailOp): |
158 """special send email operation which should be done only once for a bunch |
158 """special send email operation which should be done only once for a bunch |