View | Details | Raw Unified | Return to bug 42495
Collapse All | Expand All

(-)a/ucs-school-lib/python/models/group.py (+6 lines)
 Lines 240-245   class SchoolClass(Group, _MayHaveSchoolPrefix): Link Here 
240
		ret['name'] = self.get_relative_name()
240
		ret['name'] = self.get_relative_name()
241
		return ret
241
		return ret
242
242
243
	@classmethod
244
	def get_class_for_udm_obj(cls, udm_obj, school):
245
		if not cls.is_school_class(school, udm_obj.dn):
246
			return  # is a workgroup
247
		return cls
248
243
249
244
class WorkGroup(SchoolClass, _MayHaveSchoolPrefix):
250
class WorkGroup(SchoolClass, _MayHaveSchoolPrefix):
245
251
(-)a/ucs-school-lib/python/models/user.py (-39 / +29 lines)
 Lines 253-297   class User(UCSSchoolHelperAbstractClass): Link Here 
253
			self.password = old_password
253
			self.password = old_password
254
		return success
254
		return success
255
255
256
	def do_modify(self, udm_obj, lo):
256
		def do_modify(self, udm_obj, lo):
257
		self.create_mail_domain(lo)
257
			self.create_mail_domain(lo)
258
		self.password = self.password or None
258
			self.password = self.password or None
259
		mandatory_groups = self.groups_used(lo)
259
			mandatory_groups = self.groups_used(lo)
260
		for group_dn in udm_obj['groups'][:]:
260
			for group_dn in udm_obj['groups'][:]:
261
			# User might have been removed from school(s), remove class
261
					logger.debug('Checking group %s for removal', group_dn)
262
			# and workgroup memberships for those. Leave other group types
262
					if group_dn not in mandatory_groups:
263
			# (e.g. global groups) untouched.
263
							logger.debug('Group not mandatory! Part of a school?')
264
			logger.debug('Checking group %s for removal', group_dn)
264
							try:
265
			if group_dn not in mandatory_groups:
265
									school_class = SchoolClass.from_dn(group_dn, None, lo)
266
				logger.debug('Group not mandatory! Part of a school?')
266
							except noObject:
267
				try:
267
									logger.debug('No. Leaving it alone...')
268
					school_group = Group.from_dn(group_dn, None, lo)
268
									continue
269
				except noObject:
269
							logger.debug('Yes, part of %s!', school_class.school)
270
					logger.debug('No. Leaving it alone...')
270
							if school_class.school not in self.school_classes:
271
					continue
271
									continue  # if the key isn't set we don't change anything to the groups. to remove the groups it has to be an empty list
272
				# Bug 41907:
272
							classes = self.school_classes[school_class.school]
273
				# SchoolClass.from_dn does not throw WrongModel if no class or workgroup.
273
							remove = school_class.name not in classes and school_class.get_relative_name() not in classes
274
				# But self_is_class() and self_is_workgroup() return correct values.
274
							if remove:
275
				if school_group.self_is_class():
275
									logger.debug('Removing it!')
276
					classes = self.school_classes.get(school_group.school, [])
276
									udm_obj['groups'].remove(group_dn)
277
					remove = school_group.name not in classes and school_group.get_relative_name() not in classes
277
							else:
278
				elif school_group.self_is_workgroup():
278
									logger.debug('Leaving it alone: Part of own school and either non-school class or new school classes were not defined at all')
279
					remove = school_group.school not in self.schools
279
			for group_dn in mandatory_groups:
280
				else:
280
					logger.debug('Checking group %s for adding', group_dn)
281
					logger.debug('Group is no school class or workgroup. Leave it untouched.')
281
					if group_dn not in udm_obj['groups']:
282
					continue
282
							logger.debug('Group is not yet part of the user. Adding...')
283
				logger.debug('Yes, part of %s!', school_group.school)
283
							udm_obj['groups'].append(group_dn)
284
				if remove:
284
			return super(User, self).do_modify(udm_obj, lo)
285
					logger.debug('Removing it!')
286
					udm_obj['groups'].remove(group_dn)
287
				else:
288
					logger.debug('Leaving it alone: Part of own school and either non-school class or new school classes were not defined at all.')
289
		for group_dn in mandatory_groups:
290
			logger.debug('Checking group %s for adding', group_dn)
291
			if group_dn not in udm_obj['groups']:
292
				logger.debug('Group is not yet part of the user. Adding...')
293
				udm_obj['groups'].append(group_dn)
294
		return super(User, self).do_modify(udm_obj, lo)
295
285
296
	def do_school_change(self, udm_obj, lo, old_school):
286
	def do_school_change(self, udm_obj, lo, old_school):
297
		super(User, self).do_school_change(udm_obj, lo, old_school)
287
		super(User, self).do_school_change(udm_obj, lo, old_school)

Return to bug 42495