@@ -720,21 +720,34 @@ public function usergroup_was_added_in_course(
720
720
* Gets a list of session ids by user group.
721
721
*
722
722
* @param int $id group id
723
+ * @param bool $returnSessionData Whether to return an array with info (true) or just the session ID (false)
723
724
*
724
725
* @return array
725
726
*/
726
- public function get_sessions_by_usergroup ($ id )
727
+ public function get_sessions_by_usergroup ($ id, $ returnSessionData = false )
727
728
{
728
- $ results = Database::select (
729
- 'session_id ' ,
730
- $ this ->usergroup_rel_session_table ,
731
- ['where ' => ['usergroup_id = ? ' => $ id ]]
732
- );
729
+ if ($ returnSessionData ) {
730
+ $ results = Database::select (
731
+ 'g.session_id, s.name, s.description, s.nbr_users, s.nbr_courses ' ,
732
+ $ this ->usergroup_rel_session_table ." g, " .$ this ->session_table ." s " ,
733
+ ['where ' => ['g.session_id = s.id AND g.usergroup_id = ? ' => $ id ]]
734
+ );
735
+ } else {
736
+ $ results = Database::select (
737
+ 'session_id ' ,
738
+ $ this ->usergroup_rel_session_table ,
739
+ ['where ' => ['usergroup_id = ? ' => $ id ]]
740
+ );
741
+ }
733
742
734
743
$ array = [];
735
744
if (!empty ($ results )) {
736
745
foreach ($ results as $ row ) {
737
- $ array [] = $ row ['session_id ' ];
746
+ if ($ returnSessionData ) {
747
+ $ array [$ row ['session_id ' ]] = $ row ;
748
+ } else {
749
+ $ array [] = $ row ['session_id ' ];
750
+ }
738
751
}
739
752
}
740
753
@@ -912,17 +925,22 @@ public function get_usergroup_by_user($userId)
912
925
* @param int $usergroup_id usergroup id
913
926
* @param array $list list of session ids
914
927
* @param bool $deleteCurrentSessions Optional. Empty the session list for the usergroup (class)
928
+ *
929
+ * @return array List of IDs of the sessions added to the usergroup
915
930
*/
916
- public function subscribe_sessions_to_usergroup ($ usergroup_id , $ list , $ deleteCurrentSessions = true )
931
+ public function subscribe_sessions_to_usergroup ($ usergroup_id , $ list , $ deleteCurrentSessions = true ): array
917
932
{
918
933
$ current_list = $ this ->get_sessions_by_usergroup ($ usergroup_id );
919
934
$ user_list = $ this ->get_users_by_usergroup ($ usergroup_id );
920
935
921
936
$ delete_items = $ new_items = [];
922
937
if (!empty ($ list )) {
923
938
foreach ($ list as $ session_id ) {
924
- if (!in_array ($ session_id , $ current_list )) {
925
- $ new_items [] = $ session_id ;
939
+ if (SessionManager::isValidId ($ session_id )) {
940
+ // Only if the session IDs given are not bogus
941
+ if (!in_array ($ session_id , $ current_list )) {
942
+ $ new_items [] = $ session_id ;
943
+ }
926
944
}
927
945
}
928
946
}
@@ -963,7 +981,7 @@ public function subscribe_sessions_to_usergroup($usergroup_id, $list, $deleteCur
963
981
}
964
982
}
965
983
966
- $ sessions = '' ;
984
+ $ sessions = [] ;
967
985
// Adding new relationships.
968
986
if (!empty ($ new_items )) {
969
987
foreach ($ new_items as $ session_id ) {
@@ -977,18 +995,19 @@ public function subscribe_sessions_to_usergroup($usergroup_id, $list, $deleteCur
977
995
null ,
978
996
false
979
997
);
980
- $ sessions . = $ session_id. ' , ' ;
998
+ $ sessions[] = $ session_id ;
981
999
}
982
1000
}
983
1001
// Add event to system log
984
1002
Event::addEvent (
985
1003
LOG_GROUP_PORTAL_SESSION_SUBSCRIBED ,
986
1004
LOG_GROUP_PORTAL_ID ,
987
- 'gid: ' .$ usergroup_id .' - sids: ' .substr ( $ sessions , 0 , - 1 ),
1005
+ 'gid: ' .$ usergroup_id .' - sids: ' .implode ( ' , ' , $ sessions ),
988
1006
api_get_utc_datetime (),
989
1007
api_get_user_id ()
990
1008
);
991
1009
}
1010
+ return $ sessions ;
992
1011
}
993
1012
994
1013
/**
@@ -1024,9 +1043,10 @@ public function subscribe_courses_to_usergroup($usergroup_id, $list, $delete_gro
1024
1043
$ this ->unsubscribe_courses_from_usergroup ($ usergroup_id , $ delete_items );
1025
1044
}
1026
1045
1046
+
1047
+ $ courses = [];
1027
1048
// Adding new relationships
1028
1049
if (!empty ($ new_items )) {
1029
- $ courses = '' ;
1030
1050
foreach ($ new_items as $ course_id ) {
1031
1051
$ course_info = api_get_course_info_by_id ($ course_id );
1032
1052
if ($ course_info ) {
@@ -1088,29 +1108,32 @@ public function subscribe_courses_to_usergroup($usergroup_id, $list, $delete_gro
1088
1108
$ params
1089
1109
);
1090
1110
}
1091
- $ courses . = $ course_id. ' , ' ;
1111
+ $ courses[] = $ course_id ;
1092
1112
}
1093
1113
// Add event to system log
1094
1114
Event::addEvent (
1095
1115
LOG_GROUP_PORTAL_COURSE_SUBSCRIBED ,
1096
1116
LOG_GROUP_PORTAL_ID ,
1097
- 'gid: ' .$ usergroup_id .' - cids: ' .substr ( $ courses , 0 , - 1 ),
1117
+ 'gid: ' .$ usergroup_id .' - cids: ' .implode ( ' , ' , $ courses ),
1098
1118
api_get_utc_datetime (),
1099
1119
api_get_user_id ()
1100
1120
);
1101
1121
}
1122
+
1123
+ return $ courses ;
1102
1124
}
1103
1125
1104
1126
/**
1127
+ * Unsubscribe a usergroup from a list of courses
1105
1128
* @param int $usergroup_id
1106
1129
* @param array $delete_items
1107
1130
*/
1108
1131
public function unsubscribe_courses_from_usergroup ($ usergroup_id , $ delete_items )
1109
1132
{
1133
+ $ courses = [];
1110
1134
// Deleting items.
1111
1135
if (!empty ($ delete_items )) {
1112
1136
$ user_list = $ this ->get_users_by_usergroup ($ usergroup_id );
1113
- $ courses = '' ;
1114
1137
foreach ($ delete_items as $ course_id ) {
1115
1138
$ course_info = api_get_course_info_by_id ($ course_id );
1116
1139
if ($ course_info ) {
@@ -1133,18 +1156,69 @@ public function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items)
1133
1156
],
1134
1157
]
1135
1158
);
1136
- $ courses . = $ course_id. ' , ' ;
1159
+ $ courses[] = $ course_id ;
1137
1160
}
1138
1161
}
1139
1162
// Add event to system log
1140
1163
Event::addEvent (
1141
1164
LOG_GROUP_PORTAL_COURSE_UNSUBSCRIBED ,
1142
1165
LOG_GROUP_PORTAL_ID ,
1143
- 'gid: ' .$ usergroup_id .' - cids: ' .substr ($ courses , 0 , -1 ),
1166
+ 'gid: ' .$ usergroup_id .' - cids: ' .implode (', ' , $ courses ),
1167
+ api_get_utc_datetime (),
1168
+ api_get_user_id ()
1169
+ );
1170
+ }
1171
+
1172
+ return $ courses ;
1173
+ }
1174
+
1175
+ /**
1176
+ * Unsubscribe a usergroup from a list of sessions
1177
+ * @param int $groupId
1178
+ * @param array $items Session IDs to remove from the group
1179
+ * @return array The list of session IDs that have been unsubscribed from the group
1180
+ */
1181
+ public function unsubscribeSessionsFromUserGroup ($ groupId , $ items )
1182
+ {
1183
+ // Deleting items.
1184
+ $ sessions = [];
1185
+ if (!empty ($ items )) {
1186
+ $ users = $ this ->get_users_by_usergroup ($ groupId );
1187
+ foreach ($ items as $ sessionId ) {
1188
+ if (SessionManager::isValidId ($ sessionId )) {
1189
+ if (!api_get_configuration_value ('usergroup_do_not_unsubscribe_users_from_session_on_session_unsubscribe ' )) {
1190
+ if (!empty ($ users )) {
1191
+ foreach ($ users as $ userId ) {
1192
+ SessionManager::unsubscribe_user_from_session (
1193
+ $ sessionId ,
1194
+ $ userId
1195
+ );
1196
+ }
1197
+ }
1198
+ }
1199
+ Database::delete (
1200
+ $ this ->usergroup_rel_session_table ,
1201
+ [
1202
+ 'usergroup_id = ? AND session_id = ? ' => [
1203
+ $ groupId ,
1204
+ $ sessionId ,
1205
+ ],
1206
+ ]
1207
+ );
1208
+ $ sessions [] = $ sessionId ;
1209
+ }
1210
+ }
1211
+ // Add event to system log
1212
+ Event::addEvent (
1213
+ LOG_GROUP_PORTAL_SESSION_UNSUBSCRIBED ,
1214
+ LOG_GROUP_PORTAL_ID ,
1215
+ 'gid: ' .$ groupId .' - sids: ' .implode (', ' , $ sessions ),
1144
1216
api_get_utc_datetime (),
1145
1217
api_get_user_id ()
1146
1218
);
1147
1219
}
1220
+
1221
+ return $ sessions ;
1148
1222
}
1149
1223
1150
1224
/**
@@ -1340,6 +1414,8 @@ public function usergroup_exists($name)
1340
1414
}
1341
1415
1342
1416
/**
1417
+ * Returns whether teachers can access the classes, as per 'allow_teachers_to_classes' setting
1418
+ *
1343
1419
* @return bool
1344
1420
*/
1345
1421
public function allowTeachers ()
@@ -1435,21 +1511,25 @@ public function getUsergroupsPagination($sidx, $sord, $start, $limit, $extraWher
1435
1511
*/
1436
1512
public function getDataToExport ($ options = [])
1437
1513
{
1514
+ $ and = '' ;
1515
+ if (!empty ($ options ) && !empty ($ options ['where ' ])) {
1516
+ $ and = ' AND ' ;
1517
+ }
1438
1518
if ($ this ->getUseMultipleUrl ()) {
1439
1519
$ urlId = api_get_current_access_url_id ();
1440
1520
$ from = $ this ->table ." u
1441
1521
INNER JOIN {$ this ->access_url_rel_usergroup } a
1442
1522
ON (u.id = a.usergroup_id) " ;
1443
- $ options = ['where ' => [ ' access_url_id = ? ' => $ urlId]] ;
1523
+ $ options ['where ' ][ $ and . ' access_url_id = ? '] = $ urlId ;
1444
1524
if ($ this ->allowTeachers ()) {
1445
- $ options ['where ' ] = [' author_id = ? ' => api_get_user_id ()];
1525
+ $ options ['where ' ] = [' AND author_id = ? ' => api_get_user_id ()];
1446
1526
}
1447
- $ classes = Database::select ('u.id, name, description ' , $ from , $ options );
1527
+ $ classes = Database::select ('u.id, name, description, group_type, visibility ' , $ from , $ options );
1448
1528
} else {
1449
1529
if ($ this ->allowTeachers ()) {
1450
- $ options ['where ' ] = [' author_id = ? ' => api_get_user_id ()];
1530
+ $ options ['where ' ] = [$ and . ' author_id = ? ' => api_get_user_id ()];
1451
1531
}
1452
- $ classes = Database::select ('id, name, description ' , $ this ->table , $ options );
1532
+ $ classes = Database::select ('id, name, description, group_type, visibility ' , $ this ->table , $ options );
1453
1533
}
1454
1534
1455
1535
$ result = [];
@@ -1841,15 +1921,18 @@ public function delete($id)
1841
1921
WHERE usergroup_id = $ id " ;
1842
1922
Database::query ($ sql );
1843
1923
1844
- parent ::delete ($ id );
1924
+ $ res = parent ::delete ($ id );
1845
1925
// Add event to system log
1846
- Event::addEvent (
1847
- LOG_GROUP_PORTAL_DELETED ,
1848
- LOG_GROUP_PORTAL_ID ,
1849
- 'id: ' .$ id ,
1850
- api_get_utc_datetime (),
1851
- api_get_user_id ()
1852
- );
1926
+ if ($ res ) {
1927
+ Event::addEvent (
1928
+ LOG_GROUP_PORTAL_DELETED ,
1929
+ LOG_GROUP_PORTAL_ID ,
1930
+ 'id: ' .$ id ,
1931
+ api_get_utc_datetime (),
1932
+ api_get_user_id ()
1933
+ );
1934
+ }
1935
+ return $ res ;
1853
1936
}
1854
1937
1855
1938
/**
@@ -2360,14 +2443,14 @@ public function add_users_to_groups($user_list, $group_list, $relation_type = GR
2360
2443
}
2361
2444
2362
2445
/**
2363
- * Deletes an url and session relationship.
2446
+ * Deletes the subscription of a user to a usergroup
2364
2447
*
2365
2448
* @author Julio Montoya
2366
2449
*
2367
2450
* @param int $userId
2368
2451
* @param int $groupId
2369
2452
*
2370
- * @return bool true if success
2453
+ * @return bool true on success
2371
2454
* */
2372
2455
public function delete_user_rel_group ($ userId , $ groupId )
2373
2456
{
@@ -2769,7 +2852,7 @@ public function get_all_users_by_group($group_id)
2769
2852
return [];
2770
2853
}
2771
2854
2772
- $ sql = "SELECT u.id, u.firstname, u.lastname, relation_type
2855
+ $ sql = "SELECT u.id, u.firstname, u.lastname, gu. relation_type
2773
2856
FROM $ tbl_user u
2774
2857
INNER JOIN $ table_group_rel_user gu
2775
2858
ON (gu.user_id = u.id)
0 commit comments