equal
deleted
inserted
replaced
72 def __call__(self): |
72 def __call__(self): |
73 if self.event == 'after_delete_relation': |
73 if self.event == 'after_delete_relation': |
74 opcls = _DeleteGroupOp |
74 opcls = _DeleteGroupOp |
75 else: |
75 else: |
76 opcls = _AddGroupOp |
76 opcls = _AddGroupOp |
77 for session in get_user_sessions(self.cw_req.repo, self.eidfrom): |
77 for session in get_user_sessions(self._cw.repo, self.eidfrom): |
78 opcls(self.cw_req, cnxuser=session.user, geid=self.eidto) |
78 opcls(self._cw, cnxuser=session.user, geid=self.eidto) |
79 |
79 |
80 |
80 |
81 class _DelUserOp(hook.Operation): |
81 class _DelUserOp(hook.Operation): |
82 """close associated user's session when it is deleted""" |
82 """close associated user's session when it is deleted""" |
83 def __init__(self, session, cnxid): |
83 def __init__(self, session, cnxid): |
97 __select__ = SyncSessionHook.__select__ & entity_implements('CWUser') |
97 __select__ = SyncSessionHook.__select__ & entity_implements('CWUser') |
98 events = ('after_delete_entity',) |
98 events = ('after_delete_entity',) |
99 |
99 |
100 def __call__(self): |
100 def __call__(self): |
101 """modify user permission, need to update users""" |
101 """modify user permission, need to update users""" |
102 for session in get_user_sessions(self.cw_req.repo, self.entity.eid): |
102 for session in get_user_sessions(self._cw.repo, self.entity.eid): |
103 _DelUserOp(self.cw_req, session.id) |
103 _DelUserOp(self._cw, session.id) |
104 |
104 |
105 |
105 |
106 # CWProperty hooks ############################################################# |
106 # CWProperty hooks ############################################################# |
107 |
107 |
108 |
108 |
141 __select__ = SyncSessionHook.__select__ & entity_implements('CWProperty') |
141 __select__ = SyncSessionHook.__select__ & entity_implements('CWProperty') |
142 events = ('after_add_entity',) |
142 events = ('after_add_entity',) |
143 |
143 |
144 def __call__(self): |
144 def __call__(self): |
145 key, value = self.entity.pkey, self.entity.value |
145 key, value = self.entity.pkey, self.entity.value |
146 session = self.cw_req |
146 session = self._cw |
147 try: |
147 try: |
148 value = session.vreg.typed_value(key, value) |
148 value = session.vreg.typed_value(key, value) |
149 except UnknownProperty: |
149 except UnknownProperty: |
150 raise ValidationError(self.entity.eid, |
150 raise ValidationError(self.entity.eid, |
151 {'pkey': session._('unknown property key')}) |
151 {'pkey': session._('unknown property key')}) |
166 entity = self.entity |
166 entity = self.entity |
167 if not ('pkey' in entity.edited_attributes or |
167 if not ('pkey' in entity.edited_attributes or |
168 'value' in entity.edited_attributes): |
168 'value' in entity.edited_attributes): |
169 return |
169 return |
170 key, value = entity.pkey, entity.value |
170 key, value = entity.pkey, entity.value |
171 session = self.cw_req |
171 session = self._cw |
172 try: |
172 try: |
173 value = session.vreg.typed_value(key, value) |
173 value = session.vreg.typed_value(key, value) |
174 except UnknownProperty: |
174 except UnknownProperty: |
175 return |
175 return |
176 except ValueError, ex: |
176 except ValueError, ex: |
189 __id__ = 'delcwprop' |
189 __id__ = 'delcwprop' |
190 events = ('before_delete_entity',) |
190 events = ('before_delete_entity',) |
191 |
191 |
192 def __call__(self): |
192 def __call__(self): |
193 eid = self.entity.eid |
193 eid = self.entity.eid |
194 session = self.cw_req |
194 session = self._cw |
195 for eidfrom, rtype, eidto in session.transaction_data.get('pendingrelations', ()): |
195 for eidfrom, rtype, eidto in session.transaction_data.get('pendingrelations', ()): |
196 if rtype == 'for_user' and eidfrom == self.entity.eid: |
196 if rtype == 'for_user' and eidfrom == self.entity.eid: |
197 # if for_user was set, delete has already been handled |
197 # if for_user was set, delete has already been handled |
198 break |
198 break |
199 else: |
199 else: |
204 __id__ = 'addcwpropforuser' |
204 __id__ = 'addcwpropforuser' |
205 __select__ = SyncSessionHook.__select__ & hook.match_rtype('for_user') |
205 __select__ = SyncSessionHook.__select__ & hook.match_rtype('for_user') |
206 events = ('after_add_relation',) |
206 events = ('after_add_relation',) |
207 |
207 |
208 def __call__(self): |
208 def __call__(self): |
209 session = self.cw_req |
209 session = self._cw |
210 eidfrom = self.eidfrom |
210 eidfrom = self.eidfrom |
211 if not session.describe(eidfrom)[0] == 'CWProperty': |
211 if not session.describe(eidfrom)[0] == 'CWProperty': |
212 return |
212 return |
213 key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V', |
213 key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V', |
214 {'x': eidfrom}, 'x')[0] |
214 {'x': eidfrom}, 'x')[0] |
223 class DelForUserRelationHook(AddForUserRelationHook): |
223 class DelForUserRelationHook(AddForUserRelationHook): |
224 __id__ = 'delcwpropforuser' |
224 __id__ = 'delcwpropforuser' |
225 events = ('after_delete_relation',) |
225 events = ('after_delete_relation',) |
226 |
226 |
227 def __call__(self): |
227 def __call__(self): |
228 session = self.cw_req |
228 session = self._cw |
229 key = session.execute('Any K WHERE P eid %(x)s, P pkey K', |
229 key = session.execute('Any K WHERE P eid %(x)s, P pkey K', |
230 {'x': self.eidfrom}, 'x')[0][0] |
230 {'x': self.eidfrom}, 'x')[0][0] |
231 session.transaction_data.setdefault('pendingrelations', []).append( |
231 session.transaction_data.setdefault('pendingrelations', []).append( |
232 (self.eidfrom, self.rtype, self.eidto)) |
232 (self.eidfrom, self.rtype, self.eidto)) |
233 for session_ in get_user_sessions(session.repo, self.eidto): |
233 for session_ in get_user_sessions(session.repo, self.eidto): |