56 if (self::$instance ===
null) {
57 self::$instance =
new self();
59 if (!self::isMyStaffActive()) {
63 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
64 . self::COURSE_CONTEXT);
65 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_DEFAULT_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION
66 .
"_" . self::COURSE_CONTEXT);
67 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_ORGU_DEFAULT_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION
68 .
"_" . self::COURSE_CONTEXT);
69 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS .
"_user_id_" .
$DIC->user()->getId());
70 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS .
"_user_id_" .
$DIC->user()->getId());
71 self::$instance->dropTempTable(self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
72 . self::COURSE_CONTEXT);
86 return (
bool)
$DIC->settings()->get(
'enable_my_staff');
93 if (!self::isMyStaffActive()) {
124 if (!self::isMyStaffActive()) {
128 $cert_set = new \ilSetting(
"certificate");
129 if (!$cert_set->get(
"active")) {
133 if ($this->countOrgusOfUserWithOperationAndContext(
134 $DIC->user()->getId(),
143 if ($this->countOrgusOfUserWithOperationAndContext(
144 $DIC->user()->getId(),
146 self::EXERCISE_CONTEXT
153 if ($this->countOrgusOfUserWithOperationAndContext(
154 $DIC->user()->getId(),
170 if (!self::isMyStaffActive()) {
174 if ($this->countOrgusOfUserWithOperationAndContext(
175 $DIC->user()->getId(),
177 self::EMPLOYEE_TALK_CONTEXT
184 if ($this->countOrgusOfUserWithOperationAndContext(
185 $DIC->user()->getId(),
187 self::EMPLOYEE_TALK_CONTEXT
194 if ($this->countOrgusOfUserWithOperationAndContext(
195 $DIC->user()->getId(),
197 self::EMPLOYEE_TALK_CONTEXT
211 if (!self::isMyStaffActive()) {
215 $skmg_set = new \ilSkillManagementSettings();
216 if (!$skmg_set->isActivated()) {
220 if ($this->countOrgusOfUserWithOperationAndContext(
221 $DIC->user()->getId(),
230 if ($this->countOrgusOfUserWithOperationAndContext(
231 $DIC->user()->getId(),
240 if ($this->countOrgusOfUserWithOperationAndContext(
241 $DIC->user()->getId(),
250 if ($this->countOrgusOfUserWithOperationAndContext(
251 $DIC->user()->getId(),
267 if (!self::isMyStaffActive()) {
271 if ($this->countOrgusOfUserWithOperationAndContext(
272 $DIC->user()->getId(),
273 self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION,
293 if (!self::isMyStaffActive()) {
298 if (count($arr_users) > 0 && $usr_id === 0) {
302 if (count($arr_users) > 0 && in_array($usr_id, $arr_users)) {
321 $DIC->user()->getId(),
325 if (count($arr_usr_id) > 0) {
336 $q =
"SELECT COUNT(orgu_ua.orgu_id) AS 'cnt' FROM il_orgu_permissions AS perm
337 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id
338 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context is not NULL
339 WHERE orgu_ua.user_id = " .
$DIC->database()->quote(
342 ) .
" AND perm.operations is not NULL AND perm.parent_id = -1";
344 $set =
$DIC->database()->query(
$q);
345 $rec =
$DIC->database()->fetchAssoc($set);
350 public function countOrgusOfUserWithOperationAndContext(
352 string $org_unit_operation_string,
362 $q =
"SELECT COUNT(orgu_ua.orgu_id) AS cnt FROM il_orgu_permissions AS perm
363 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id
364 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '" .
$context .
"'
365 and orgu_ua.user_id = " .
$DIC->database()->quote(
368 ) .
" AND perm.operations REGEXP '[\\\[,]\"?"
369 . $operation->getOperationId() .
"\"?[\],]'
370 WHERE perm.parent_id = -1";
372 $set =
$DIC->database()->query(
$q);
373 $rec =
$DIC->database()->fetchAssoc($set);
380 string $org_unit_operation_string,
382 string $tmp_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX
386 $tmp_table_name = $this->buildTempTableIlobjectsUserMatrixForUserOperationAndContext(
388 $org_unit_operation_string,
390 $tmp_table_name_prefix
393 $q =
'SELECT usr_id FROM ' . $tmp_table_name;
395 $user_set =
$DIC->database()->query(
$q);
397 $arr_users = array();
399 while ($rec =
$DIC->database()->fetchAssoc($user_set)) {
400 $arr_users[$rec[
'usr_id']] = $rec[
'usr_id'];
410 foreach ($user_assignments as $user_assignment) {
411 $users[$user_assignment->getPositionId()] = $this->getUsersForUser(
413 $user_assignment->getPositionId()
427 if (isset($this->users_for_user[
$user_id]) && $position_id ===
null) {
428 return $this->users_for_user[
$user_id];
431 $tmp_orgu_members = $this->buildTempTableOrguMemberships(
432 self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS,
436 $position_limitation =
'';
437 if (!is_null($position_id)) {
438 $position_limitation =
' AND orgu_ua_current_user.position_id = ' . $position_id;
441 $q =
"SELECT " . $tmp_orgu_members .
".user_id AS usr_id
443 " . $tmp_orgu_members .
"
444 INNER JOIN il_orgu_ua AS orgu_ua_current_user on orgu_ua_current_user.user_id = " .
$DIC->database()->quote(
448 INNER JOIN il_orgu_authority AS auth ON auth.position_id = orgu_ua_current_user.position_id " . $position_limitation .
"
451 /* Identische OrgUnit wie Current User; Nicht Rekursiv; Fixe Position */
452 (orgu_ua_current_user.orgu_id = " . $tmp_orgu_members .
".orgu_id AND auth.scope = 1
453 AND auth.over = " . $tmp_orgu_members .
".user_position_id AND auth.over <> -1
456 /* Identische OrgUnit wie Current User; Nicht Rekursiv; Position egal */
457 (orgu_ua_current_user.orgu_id = " . $tmp_orgu_members .
".orgu_id AND auth.scope = 1 AND auth.over = -1)
459 /* Kinder OrgUnit wie Current User */
462 " . $tmp_orgu_members .
".orgu_id = orgu_ua_current_user.orgu_id OR
463 " . $tmp_orgu_members .
".tree_path LIKE CONCAT(\"%.\",orgu_ua_current_user.orgu_id ,\".%\")
465 " . $tmp_orgu_members .
".tree_path LIKE CONCAT(\"%.\",orgu_ua_current_user.orgu_id )
471 /* Gleiche Position */
472 auth.over = " . $tmp_orgu_members .
".user_position_id AND auth.over <> -1
485 $user_set =
$DIC->database()->query(
$q);
487 $arr_users = array();
489 while ($rec =
$DIC->database()->fetchAssoc($user_set)) {
490 $arr_users[$rec[
'usr_id']] = $rec[
'usr_id'];
493 if ($position_id ===
null) {
494 $this->users_for_user[
$user_id] = $arr_users;
504 foreach ($user_assignments as $user_assignment) {
505 $ref_ids = $this->getIdsForPositionAndOperation(
506 $user_assignment->getPositionId(),
510 if (count($ref_ids) > 0) {
511 $ids = array_merge($ids, $ref_ids);
521 $ref_ids = $this->getIdsForPositionAndOperationAndContext(
527 if (count($ref_ids) > 0) {
528 $ids = array_merge($ids, $ref_ids);
540 public function getIdsForPositionAndOperationAndContext(
552 if (is_null($operation_object)) {
556 $operation_id = $operation_object->getOperationId();
558 if ($this->hasPositionDefaultPermissionForOperationInContext($position_id, $operation_id, $context_id)) {
559 $query =
"select " . ($return_ref_id ?
"object_reference.ref_id" :
"object_data.obj_id") .
" from object_data " .
560 "inner join object_reference on object_reference.obj_id = object_data.obj_id " .
561 "where type = '" .
$context .
"' " .
562 "AND object_reference.ref_id not in " .
563 " (SELECT parent_id FROM il_orgu_permissions " .
564 " where position_id = " . $position_id .
" and context_id = " . $context_id .
" and operations NOT REGEXP '[\\\[,]\"?" . $operation_id .
"\"?[\],]' and parent_id <> -1)";
566 $query = $return_ref_id
568 "SELECT parent_id as ref_id FROM il_orgu_permissions "
570 "SELECT obj_id FROM il_orgu_permissions INNER JOIN object_reference ON object_reference.ref_id = il_orgu_permissions.parent_id ";
571 $query .=
" where position_id = " . $position_id .
" and context_id = " . $context_id .
" and operations REGEXP '[\\\[,]\"?" . $operation_id .
"\"?[\],]' and parent_id <> -1";
574 return array_map(
function ($item) use ($return_ref_id) {
575 return $return_ref_id ? $item[
'ref_id'] : $item[
'obj_id'];
576 },
$DIC->database()->fetchAll(
$DIC->database()->query($query)));
585 $res =
$DIC->database()->query(
"SELECT * FROM il_orgu_permissions " .
586 " WHERE context_id = " . $context_id .
" " .
587 "AND operations REGEXP '[\\\[,]\"?" . $operation_id .
"\"?[\],]' " .
588 "AND position_id = " . $position_id .
" " .
589 "AND parent_id = -1");
591 return (
bool)
$DIC->database()->numRows(
$res) > 0;
596 string $org_unit_operation_string,
605 $tmp_table_name =
'tmp_ilobj_user_matrix_' . $operation->getOperationId();
607 $this->buildTempTableIlobjectsUserMatrixForUserOperationAndContext(
609 $org_unit_operation_string,
614 $q =
'SELECT * FROM ' . $tmp_table_name;
616 $user_set =
$DIC->database()->query(
$q);
618 $arr_user_obj = array();
620 while ($rec =
$DIC->database()->fetchAssoc($user_set)) {
621 $arr_user_obj[] = $rec;
624 return $arr_user_obj;
629 string $org_unit_operation_string,
631 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX
635 $temporary_table_name = $temporary_table_name_prefix .
"_" . $org_unit_operation_string .
"_" .
$context;
643 $tmp_table_objects_specific_perimissions = $this->buildTempTableIlobjectsSpecificPermissionSetForOperationAndContext(
644 $org_unit_operation_string,
646 self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS
649 $tmp_table_objects_default_perimissions = $this->buildTempTableIlobjectsDefaultPermissionSetForOperationAndContext(
650 $org_unit_operation_string,
652 self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_DEFAULT_PERMISSIONS
655 $tmp_table_orgunit_default_perimissions = $this->buildTempTableIlorgunitDefaultPermissionSetForOperationAndContext(
656 $org_unit_operation_string,
658 self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_ORGU_DEFAULT_PERMISSIONS
661 $tmp_table_course_members = $this->buildTempTableCourseMemberships(
662 self::TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS,
666 $tmp_table_orgu_members = $this->buildTempTableOrguMemberships(
667 self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS,
671 $tmp_table_orgu_member_path = $this->buildTempTableOrguMemberships(
672 'tmp_orgu_members_path',
676 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
677 . self::COURSE_CONTEXT
679 $this->dropTempTable($temporary_table_name);
682 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
" AS (
683 SELECT DISTINCT user_perm_matrix.perm_for_ref_id, user_perm_matrix.usr_id FROM
685 SELECT crs.*," . $tmp_table_course_members .
".ref_id," . $tmp_table_course_members .
".usr_id FROM
687 SELECT * FROM " . $tmp_table_objects_specific_perimissions .
"
689 SELECT * FROM " . $tmp_table_objects_default_perimissions .
"
691 INNER JOIN " . $tmp_table_course_members .
" on " . $tmp_table_course_members .
".ref_id = crs.perm_for_ref_id
694 " . $tmp_table_course_members .
".orgu_id = crs.perm_for_orgu_id AND " . $tmp_table_course_members .
".position_id = crs.perm_over_user_with_position AND perm_orgu_scope = 1
696 or perm_orgu_scope = 2
699 SELECT " . $tmp_table_orgunit_default_perimissions .
".*, " . $tmp_table_orgu_members .
".orgu_id AS ref_id, "
700 . $tmp_table_orgu_members .
".user_id FROM " . $tmp_table_orgunit_default_perimissions .
"
701 INNER JOIN " . $tmp_table_orgu_members .
" on " . $tmp_table_orgu_members .
".orgu_id = "
702 . $tmp_table_orgunit_default_perimissions .
".perm_for_ref_id
705 " . $tmp_table_orgu_members .
".orgu_id = " . $tmp_table_orgunit_default_perimissions .
".perm_for_orgu_id AND "
706 . $tmp_table_orgu_members .
".user_position_id = " . $tmp_table_orgunit_default_perimissions .
".perm_over_user_with_position AND perm_orgu_scope = 1
708 or perm_orgu_scope = 2
711 ) AS user_perm_matrix
712 INNER JOIN " . $tmp_table_orgu_member_path .
" AS path on path.user_id = user_perm_matrix.usr_id
714 INNER JOIN il_orgu_ua AS orgu_ua_current_user on orgu_ua_current_user.user_id = " .
$DIC->database()->quote(
718 INNER JOIN il_orgu_permissions AS perm on perm.position_id = orgu_ua_current_user.position_id AND perm.parent_id = -1
719 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '$context'
720 and perm.operations REGEXP '[\\\[,]\"?" . $operation->getOperationId() .
"\"?[\],]'
724 /* Identische OrgUnit wie Current User; Nicht Rekursiv; Fixe Position */
725 (orgu_ua_current_user.orgu_id = user_perm_matrix.perm_for_orgu_id AND user_perm_matrix.perm_orgu_scope = 1
726 AND orgu_ua_current_user.position_id = user_perm_matrix.perm_for_position_id AND user_perm_matrix.perm_over_user_with_position <> -1
729 /* Identische OrgUnit wie Current User; Nicht Rekursiv; Position egal */
730 (orgu_ua_current_user.orgu_id = user_perm_matrix.perm_for_orgu_id AND user_perm_matrix.perm_orgu_scope = 1 AND user_perm_matrix.perm_over_user_with_position = -1)
732 /* Kinder OrgUnit wie Current User */
734 orgu_ua_current_user.orgu_id = user_perm_matrix.perm_for_orgu_id
737 path.orgu_id = user_perm_matrix.perm_for_orgu_id OR
738 path.tree_path LIKE CONCAT(\"%.\",user_perm_matrix.perm_for_orgu_id ,\".%\")
740 path.tree_path LIKE CONCAT(\"%.\",user_perm_matrix.perm_for_orgu_id )
746 /* Gleiche Position */
747 orgu_ua_current_user.position_id = user_perm_matrix.perm_for_position_id AND user_perm_matrix.perm_over_user_with_position <> -1
752 user_perm_matrix.perm_over_user_with_position = -1
755 AND user_perm_matrix.perm_orgu_scope = 2
761 $DIC->database()->manipulate(
$q);
763 return $temporary_table_name;
767 string $org_unit_operation_string,
769 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS
773 $temporary_table_name = $temporary_table_name_prefix .
"_" . $org_unit_operation_string .
"_" .
$context;
778 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
779 . self::COURSE_CONTEXT
781 $this->dropTempTable($temporary_table_name);
784 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
"
785 (INDEX i1 (perm_for_ref_id), INDEX i2 (perm_for_orgu_id), INDEX i3 (perm_orgu_scope), INDEX i4 (perm_for_position_id), INDEX i5 (perm_over_user_with_position))
788 obj_ref.ref_id AS perm_for_ref_id,
789 orgu_ua.orgu_id AS perm_for_orgu_id,
790 auth.scope AS perm_orgu_scope,
791 orgu_ua.position_id AS perm_for_position_id,
792 auth.over AS perm_over_user_with_position
794 il_orgu_permissions AS perm
795 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id
796 INNER JOIN il_orgu_authority AS auth ON auth.position_id = orgu_ua.position_id AND orgu_ua.user_id = " .
$GLOBALS[
'DIC']->user()
798 INNER JOIN object_reference AS obj_ref ON obj_ref.ref_id = perm.parent_id
799 INNER JOIN object_data AS obj ON obj.obj_id = obj_ref.obj_id AND obj.type = '$context'
800 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '$context'
802 perm.operations REGEXP '[\\\[,]\"?" . $operation->getOperationId() .
"\"?[\],]'
805 $DIC->database()->manipulate(
$q);
807 return $temporary_table_name;
810 public function buildTempTableIlobjectsDefaultPermissionSetForOperationAndContext(
811 string $org_unit_operation_string,
813 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_DEFAULT_PERMISSIONS
817 $temporary_table_name = $temporary_table_name_prefix .
"_" . $org_unit_operation_string .
"_" .
$context;
824 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_DEFAULT_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
825 . self::COURSE_CONTEXT
827 $this->dropTempTable($temporary_table_name);
830 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
"
831 (INDEX i1 (perm_for_ref_id), INDEX i2 (perm_for_orgu_id), INDEX i3 (perm_orgu_scope), INDEX i4 (perm_for_position_id),INDEX i5 (perm_over_user_with_position))
834 obj_ref.ref_id AS perm_for_ref_id,
835 orgu_ua.orgu_id AS perm_for_orgu_id,
836 auth.scope AS perm_orgu_scope,
837 orgu_ua.position_id AS perm_for_position_id,
838 auth.over AS perm_over_user_with_position
841 INNER JOIN object_reference AS obj_ref ON obj_ref.obj_id = obj.obj_id
842 INNER JOIN il_orgu_permissions AS perm ON perm.operations REGEXP '[\\\[,]\"?" . $operation->getOperationId() .
"\"?[\],]' AND perm.parent_id = -1
843 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '" .
$context .
"'
844 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id AND orgu_ua.user_id = " .
$GLOBALS[
'DIC']->user()
846 INNER JOIN il_orgu_authority AS auth ON auth.position_id = orgu_ua.position_id
850 AND (obj_ref.ref_id , orgu_ua.position_id)
853 perm.parent_id, orgu_ua.position_id
855 il_orgu_permissions AS perm
856 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id
857 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '" .
$context .
"'
858 WHERE perm.parent_id <> -1)
861 $DIC->database()->manipulate(
$q);
863 return $temporary_table_name;
872 public function buildTempTableIlorgunitDefaultPermissionSetForOperationAndContext(
873 string $org_unit_operation_string,
875 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_ORGU_DEFAULT_PERMISSIONS
879 $temporary_table_name = $temporary_table_name_prefix .
"_" . $org_unit_operation_string .
"_" .
$context;
885 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_ORGU_DEFAULT_PERMISSIONS .
"_" . self::ACCESS_ENROLMENTS_ORG_UNIT_OPERATION .
"_"
886 . self::COURSE_CONTEXT
888 $this->dropTempTable($temporary_table_name);
891 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
"
892 (INDEX i1 (perm_for_ref_id), INDEX i2 (perm_for_orgu_id), INDEX i3 (perm_orgu_scope), INDEX i4 (perm_for_position_id), INDEX i5 (perm_over_user_with_position))
895 orgu_ua.orgu_id AS perm_for_ref_id, /* Table has to be identical to the other Permission For Operation And Context-Tables! */
896 orgu_ua.orgu_id AS perm_for_orgu_id,
897 auth.scope AS perm_orgu_scope,
898 orgu_ua.position_id AS perm_for_position_id,
899 auth.over AS perm_over_user_with_position
901 il_orgu_permissions AS perm
902 INNER JOIN il_orgu_ua AS orgu_ua ON orgu_ua.position_id = perm.position_id AND perm.parent_id = -1 AND orgu_ua.user_id = "
903 .
$GLOBALS[
'DIC']->user()->getId() .
"
904 INNER JOIN il_orgu_authority AS auth ON auth.position_id = orgu_ua.position_id
905 INNER JOIN il_orgu_op_contexts AS contexts on contexts.id = perm.context_id AND contexts.context = '" .
$context .
"'
907 perm.operations REGEXP '[\\\[,]\"?" . $operation->getOperationId() .
"\"?[\],]'
910 $DIC->database()->manipulate(
$q);
912 return $temporary_table_name;
916 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS,
917 array $only_courses_of_user_ids = array()
921 $temporary_table_name = $temporary_table_name_prefix .
"_user_id_" .
$DIC->user()->getId();
923 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS .
"_user_id_" .
$DIC->user()->getId()
924 || count($only_courses_of_user_ids) > 0
926 $this->dropTempTable($temporary_table_name);
929 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
"
930 (INDEX i1(ref_id), INDEX i2 (usr_id), INDEX i3 (position_id), INDEX i4 (orgu_id))
932 SELECT crs_members_crs_ref.ref_id, crs_members.usr_id, orgu_ua.position_id, orgu_ua.orgu_id
934 SELECT obj_id, usr_id FROM obj_members WHERE admin > 0 OR tutor > 0 OR member > 0
935 AND " .
$DIC->database()->in(
936 'obj_members.usr_id',
937 $only_courses_of_user_ids,
942 SELECT obj_id, usr_id FROM crs_waiting_list
943 WHERE " .
$DIC->database()->in(
944 'crs_waiting_list.usr_id',
945 $only_courses_of_user_ids,
950 SELECT obj_id, usr_id FROM il_subscribers
951 WHERE " .
$DIC->database()->in(
952 'il_subscribers.usr_id',
953 $only_courses_of_user_ids,
958 INNER JOIN object_reference AS crs_members_crs_ref on crs_members_crs_ref.obj_id = crs_members.obj_id
959 INNER JOIN il_orgu_ua AS orgu_ua on orgu_ua.user_id = crs_members.usr_id
962 $DIC->database()->manipulate(
$q);
964 return $temporary_table_name;
968 string $temporary_table_name_prefix = self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS,
969 array $only_orgus_of_user_ids = array()
973 $temporary_table_name = $temporary_table_name_prefix .
"_user_id_" .
$DIC->user()->getId();
975 if ($temporary_table_name != self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS .
"_user_id_" .
$DIC->user()->getId()
976 || count($only_orgus_of_user_ids) > 0
978 $this->dropTempTable($temporary_table_name);
981 $q =
"CREATE TEMPORARY TABLE IF NOT EXISTS " . $temporary_table_name .
"
982 (INDEX i1(orgu_id), INDEX i2 (tree_path(255)), INDEX i3 (tree_child), INDEX i4 (tree_parent), INDEX i5 (tree_lft), INDEX i6 (tree_rgt), INDEX i7 (user_position_id), INDEX i8 (user_id))
984 SELECT orgu_ua.orgu_id AS orgu_id,
985 tree_orgu.path AS tree_path,
986 tree_orgu.child AS tree_child,
987 tree_orgu.parent AS tree_parent,
988 tree_orgu.lft AS tree_lft,
989 tree_orgu.rgt AS tree_rgt,
990 orgu_ua.position_id AS user_position_id,
991 orgu_ua.user_id AS user_id
993 il_orgu_ua AS orgu_ua
994 INNER JOIN object_reference AS obj_ref on obj_ref.ref_id = orgu_ua.orgu_id AND obj_ref.deleted is null
995 LEFT JOIN tree AS tree_orgu ON tree_orgu.child = orgu_ua.orgu_id";
997 if (count($only_orgus_of_user_ids) > 0) {
998 $q .=
" WHERE " .
$DIC->database()->in(
'orgu_ua.user_id', $only_orgus_of_user_ids,
false,
'integer') .
" ";
1003 $DIC->database()->manipulate(
$q);
1005 return $temporary_table_name;
1012 $q =
"DROP TABLE IF EXISTS " . $temporary_table_name;
1013 $DIC->database()->manipulate(
$q);
const string TEST_CONTEXT
getIlobjectsAndUsersForUserOperationAndContext(int $user_id, string $org_unit_operation_string, string $context)
getUsersForUserPerPosition(int $user_id)
countOrgusOfUserWithAtLeastOneOperation(int $user_id)
getUsersForUserOperationAndContext(int $user_id, string $org_unit_operation_string, string $context, string $tmp_table_name_prefix=self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX)
const string EMPLOYEE_TALK_CONTEXT
hasCurrentUserAccessToStaffList()
hasCurrentUserAccessToCourseMemberships()
buildTempTableOrguMemberships(string $temporary_table_name_prefix=self::TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS, array $only_orgus_of_user_ids=array())
hasCurrentUserAccessToLearningProgressInObject(int $ref_id=0)
const string TMP_DEFAULT_TABLE_NAME_PREFIX_IL_ORGU_DEFAULT_PERMISSIONS
buildTempTableCourseMemberships(string $temporary_table_name_prefix=self::TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS, array $only_courses_of_user_ids=array())
hasCurrentUserAccessToCourseLearningProgressForAtLeastOneUser()
hasCurrentUserAccessToCompetences()
hasPositionDefaultPermissionForOperationInContext(int $position_id, int $operation_id, int $context_id)
const string ACCESS_ENROLMENTS_ORG_UNIT_OPERATION
const string TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_DEFAULT_PERMISSIONS
hasCurrentUserAccessToMyStaff()
const string TMP_DEFAULT_TABLE_NAME_PREFIX_CRS_MEMBERS
const string COURSE_CONTEXT
getIdsForPositionAndOperation(int $position_id, string $operation, bool $return_ref_id)
const string GROUP_CONTEXT
const string EXERCISE_CONTEXT
getUsersForUser(int $user_id, ?int $position_id=null)
dropTempTable(string $temporary_table_name)
hasCurrentUserAccessToUser(int $usr_id)
getIdsForUserAndOperation(int $user_id, string $operation, bool $return_ref_id=false)
const string TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS
const string SURVEY_CONTEXT
hasCurrentUserAccessToTalks()
const string TMP_DEFAULT_TABLE_NAME_PREFIX_ORGU_MEMBERS
const string TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX
hasCurrentUserAccessToCertificates()
buildTempTableIlobjectsUserMatrixForUserOperationAndContext(int $user_id, string $org_unit_operation_string, string $context, string $temporary_table_name_prefix=self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_USER_MATRIX)
buildTempTableIlobjectsSpecificPermissionSetForOperationAndContext(string $org_unit_operation_string, string $context, string $temporary_table_name_prefix=self::TMP_DEFAULT_TABLE_NAME_PREFIX_IL_OBJ_SPEC_PERMISSIONS)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static findByName(string $context_name)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static array $available_contexts
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static findByOperationString(string $operation_string, string $context_name)
@deprecated Please use find() from OrgUnitOperationRepository
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const OP_VIEW_CERTIFICATES
const OP_READ_EMPLOYEE_TALK
const OP_VIEW_COMPETENCES
const OP_ACCESS_ENROLMENTS
const OP_EDIT_EMPLOYEE_TALK
const OP_CREATE_EMPLOYEE_TALK
const OP_READ_LEARNING_PROGRESS
Class ilOrgUnitUserAssignmentQueries.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...