sobjects/supervising.py
changeset 3430 e6d50513936c
parent 3429 531395cb5a22
child 4023 eae23c40627a
equal deleted inserted replaced
3429:531395cb5a22 3430:e6d50513936c
    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