5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
7 """ |
7 """ |
8 __docformat__ = "restructuredtext en" |
8 __docformat__ = "restructuredtext en" |
9 |
9 |
|
10 from yams.schema import role_name |
10 from cubicweb import UnknownProperty, ValidationError, BadConnectionId |
11 from cubicweb import UnknownProperty, ValidationError, BadConnectionId |
11 from cubicweb.selectors import implements |
12 from cubicweb.selectors import implements |
12 from cubicweb.server import hook |
13 from cubicweb.server import hook |
13 |
14 |
14 |
15 |
145 key, value = self.entity.pkey, self.entity.value |
146 key, value = self.entity.pkey, self.entity.value |
146 session = self._cw |
147 session = self._cw |
147 try: |
148 try: |
148 value = session.vreg.typed_value(key, value) |
149 value = session.vreg.typed_value(key, value) |
149 except UnknownProperty: |
150 except UnknownProperty: |
|
151 qname = role_name('pkey', 'subject') |
150 raise ValidationError(self.entity.eid, |
152 raise ValidationError(self.entity.eid, |
151 {'pkey': session._('unknown property key')}) |
153 {qname: session._('unknown property key')}) |
152 except ValueError, ex: |
154 except ValueError, ex: |
|
155 qname = role_name('value', 'subject') |
153 raise ValidationError(self.entity.eid, |
156 raise ValidationError(self.entity.eid, |
154 {'value': session._(str(ex))}) |
157 {qname: session._(str(ex))}) |
155 if not session.user.matching_groups('managers'): |
158 if not session.user.matching_groups('managers'): |
156 session.add_relation(self.entity.eid, 'for_user', session.user.eid) |
159 session.add_relation(self.entity.eid, 'for_user', session.user.eid) |
157 else: |
160 else: |
158 _AddCWPropertyOp(session, cwprop=self.entity) |
161 _AddCWPropertyOp(session, cwprop=self.entity) |
159 |
162 |
172 try: |
175 try: |
173 value = session.vreg.typed_value(key, value) |
176 value = session.vreg.typed_value(key, value) |
174 except UnknownProperty: |
177 except UnknownProperty: |
175 return |
178 return |
176 except ValueError, ex: |
179 except ValueError, ex: |
177 raise ValidationError(entity.eid, {'value': session._(str(ex))}) |
180 qname = role_name('value', 'subject') |
|
181 raise ValidationError(entity.eid, {qname: session._(str(ex))}) |
178 if entity.for_user: |
182 if entity.for_user: |
179 for session_ in get_user_sessions(session.repo, entity.for_user[0].eid): |
183 for session_ in get_user_sessions(session.repo, entity.for_user[0].eid): |
180 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties, |
184 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties, |
181 key=key, value=value) |
185 key=key, value=value) |
182 else: |
186 else: |
212 if not session.describe(eidfrom)[0] == 'CWProperty': |
216 if not session.describe(eidfrom)[0] == 'CWProperty': |
213 return |
217 return |
214 key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V', |
218 key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V', |
215 {'x': eidfrom}, 'x')[0] |
219 {'x': eidfrom}, 'x')[0] |
216 if session.vreg.property_info(key)['sitewide']: |
220 if session.vreg.property_info(key)['sitewide']: |
|
221 qname = role_name('for_user', 'subject') |
|
222 msg = session._("site-wide property can't be set for user") |
217 raise ValidationError(eidfrom, |
223 raise ValidationError(eidfrom, |
218 {'for_user': session._("site-wide property can't be set for user")}) |
224 {qname: msg}) |
219 for session_ in get_user_sessions(session.repo, self.eidto): |
225 for session_ in get_user_sessions(session.repo, self.eidto): |
220 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties, |
226 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties, |
221 key=key, value=value) |
227 key=key, value=value) |
222 |
228 |
223 |
229 |