diff -r ff9d6d269877 -r 39c5bb4dcc59 sobjects/ldapparser.py --- a/sobjects/ldapparser.py Wed Jun 06 10:26:34 2012 +0200 +++ b/sobjects/ldapparser.py Wed Jun 06 10:30:54 2012 +0200 @@ -67,9 +67,23 @@ self.warning('deactivate %s %s entities', len(eids), etype) for eid in eids: wf = session.entity_from_eid(eid).cw_adapt_to('IWorkflowable') - wf.fire_transition('deactivate') + wf.fire_transition_if_possible('deactivate') session.commit(free_cnxset=False) + def update_if_necessary(self, entity, attrs): + entity.complete(tuple(attrs)) + if entity.__regid__ == 'CWUser': + wf = entity.cw_adapt_to('IWorkflowable') + if wf.state == 'deactivated': + self.warning('update on deactivated user %s', entity.login) + mdate = attrs.get('modification_date') + if not mdate or mdate > entity.modification_date: + attrs = dict( (k, v) for k, v in attrs.iteritems() + if v != getattr(entity, k)) + if attrs: + entity.set_attributes(**attrs) + self.notify_updated(entity) + def ldap2cwattrs(self, sdict, tdict=None): if tdict is None: tdict = {}