diff --git a/ucs-school-lib/python/models/computer.py b/ucs-school-lib/python/models/computer.py index 4f6bac70a..5894c5fdc 100644 --- a/ucs-school-lib/python/models/computer.py +++ b/ucs-school-lib/python/models/computer.py @@ -160,12 +160,13 @@ class SchoolDCSlave(RoleSupportMixin, SchoolDC): allow_school_change = True -class SchoolComputer(UCSSchoolHelperAbstractClass): +class SchoolComputer(UCSSchoolHelperAbstractClass, RoleSupportMixin): ip_address = IPAddress(_('IP address'), required=True) subnet_mask = SubnetMask(_('Subnet mask')) mac_address = MACAddress(_('MAC address'), required=True) inventory_number = InventoryNumber(_('Inventory number')) zone = Attribute(_('Zone')) + ucsschool_roles = Roles(_('Roles'), aka=['Roles']) type_name = _('Computer') @@ -329,9 +330,8 @@ class SchoolComputer(UCSSchoolHelperAbstractClass): name_is_unique = True -class WindowsComputer(RoleSupportMixin, SchoolComputer): +class WindowsComputer(SchoolComputer): type_name = _('Windows system') - ucsschool_roles = Roles(_('Roles'), aka=['Roles']) default_roles = [role_win_computer] class Meta(SchoolComputer.Meta): @@ -339,9 +339,8 @@ class WindowsComputer(RoleSupportMixin, SchoolComputer): hook_path = 'computer' -class MacComputer(RoleSupportMixin, SchoolComputer): +class MacComputer(SchoolComputer): type_name = _('Mac OS X') - ucsschool_roles = Roles(_('Roles'), aka=['Roles']) default_roles = [role_mac_computer] class Meta(SchoolComputer.Meta): @@ -349,9 +348,8 @@ class MacComputer(RoleSupportMixin, SchoolComputer): hook_path = 'computer' -class IPComputer(RoleSupportMixin, SchoolComputer): +class IPComputer(SchoolComputer): type_name = _('Device with IP address') - ucsschool_roles = Roles(_('Roles'), aka=['Roles']) default_roles = [role_ip_computer] class Meta(SchoolComputer.Meta): diff --git a/ucs-school-lib/python/roles.py b/ucs-school-lib/python/roles.py index e90a1a9d2..80a5c9e9f 100644 --- a/ucs-school-lib/python/roles.py +++ b/ucs-school-lib/python/roles.py @@ -53,6 +53,7 @@ role_mac_computer = 'mac_computer' role_ip_computer = 'ip_computer' role_linux_computer = 'linux_computer' role_ubuntu_computer = 'ubuntu_computer' +role_teacher_computer = 'teacher_computer' role_exam_user = 'exam_user' role_memberserver = 'memberserver' role_memberserver_admin = 'memberserver_admin' @@ -77,7 +78,7 @@ all_roles = ( role_memberserver_admin, role_memberserver_edu, role_school, role_school_admin, role_school_admin_group, role_school_class, role_school_class_share, role_single_master, role_student, role_workgroup, role_workgroup_share, role_school_domain_group, role_school_teacher_group, role_school_staff_group, role_school_student_group, - role_ip_computer, role_linux_computer, role_mac_computer, role_ubuntu_computer, role_win_computer, + role_ip_computer, role_linux_computer, role_mac_computer, role_ubuntu_computer, role_win_computer, role_teacher_computer ) diff --git a/ucs-school-umc-exam/umc/python/schoolexam-master/__init__.py b/ucs-school-umc-exam/umc/python/schoolexam-master/__init__.py index 463b7031b..ccee47326 100644 --- a/ucs-school-umc-exam/umc/python/schoolexam-master/__init__.py +++ b/ucs-school-umc-exam/umc/python/schoolexam-master/__init__.py @@ -48,7 +48,8 @@ from univention.management.console.modules import UMC_Error from univention.management.console.modules.decorators import sanitize from univention.management.console.modules.sanitizers import StringSanitizer, DNSanitizer, ListSanitizer from ucsschool.lib.schoolldap import LDAP_Connection, SchoolBaseModule, ADMIN_WRITE, USER_READ -from ucsschool.lib.models import School, ComputerRoom, Student, ExamStudent, MultipleObjectsError +from ucsschool.lib.roles import role_teacher_computer, create_ucsschool_role_string +from ucsschool.lib.models import School, ComputerRoom, Student, ExamStudent, MultipleObjectsError, SchoolComputer from ucsschool.lib.models.utils import add_module_logger_to_schoollib from ucsschool.importer.utils.import_pyhook import ImportPyHookLoader from ucsschool.exam.exam_user_pyhook import ExamUserPyHook @@ -425,8 +426,14 @@ class Instance(SchoolBaseModule): except univention.admin.uexceptions.ldapError: raise + teacher_pc_role = create_ucsschool_role_string(role_teacher_computer, room.school) + exam_hosts = list() + for host in room.hosts: + host_obj = SchoolComputer.from_dn(host, None, ldap_user_read) + if teacher_pc_role not in host_obj.ucsschool_roles: + exam_hosts.append(host) # Add all host members of room to examGroup - host_uid_list = [univention.admin.uldap.explodeDn(uniqueMember, 1)[0] + '$' for uniqueMember in room.hosts] + host_uid_list = [univention.admin.uldap.explodeDn(uniqueMember, 1)[0] + '$' for uniqueMember in exam_hosts] examGroup = self.examGroup(ldap_admin_write, ldap_position, room.school) examGroup.fast_member_add(room.hosts, host_uid_list) # adds any uniqueMember and member listed if not already present