Skip to content

Commit 8aac38b

Browse files
committed
Webservice: Add new webservices get_sessions, subscribe_users_to_session, unsubscribe_users_from_session, get_users_subscribed_to_session - refs #4647
1 parent 0892512 commit 8aac38b

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

main/inc/lib/webservices/Rest.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class Rest extends WebService
111111
public const SAVE_SESSION = 'save_session';
112112
public const CREATE_SESSION_FROM_MODEL = 'create_session_from_model';
113113
public const UPDATE_SESSION = 'update_session';
114+
public const GET_SESSIONS = 'get_sessions';
114115

115116
public const SUBSCRIBE_USER_TO_COURSE = 'subscribe_user_to_course';
116117
public const SUBSCRIBE_USER_TO_COURSE_PASSWORD = 'subscribe_user_to_course_password';
@@ -120,6 +121,10 @@ class Rest extends WebService
120121
public const ADD_COURSES_SESSION = 'add_courses_session';
121122
public const ADD_USERS_SESSION = 'add_users_session';
122123
public const SUBSCRIBE_USER_TO_SESSION_FROM_USERNAME = 'subscribe_user_to_session_from_username';
124+
public const SUBSCRIBE_USERS_TO_SESSION = 'subscribe_users_to_session';
125+
public const UNSUBSCRIBE_USERS_FROM_SESSION = 'unsubscribe_users_from_session';
126+
public const GET_USERS_SUBSCRIBED_TO_SESSION = 'get_users_subscribed_to_session';
127+
123128

124129
public const GET_COURSE_QUIZ_MDL_COMPAT = 'get_course_quiz_mdl_compat';
125130

@@ -1649,6 +1654,36 @@ public function getCoursesCampus($campusId = null): array
16491654
);
16501655
}
16511656

1657+
/**
1658+
* Returns a list of sessions in the given URL. If no URL is provided, we assume we are not in a multi-URL setup and
1659+
* return all the sessions.
1660+
*
1661+
* @param int $campusId
1662+
*/
1663+
public function getSessionsCampus(int $campusId = null): array
1664+
{
1665+
self::protectAdminEndpoint();
1666+
1667+
$list = SessionManager::get_sessions_list(
1668+
[],
1669+
[],
1670+
null,
1671+
null,
1672+
$campusId
1673+
);
1674+
$shortList = [];
1675+
foreach ($list as $session) {
1676+
$shortList[] = [
1677+
'id' => $session['id'],
1678+
'name' => $session['name'],
1679+
'access_start_date' => $session['access_start_date'],
1680+
'access_end_date' => $session['access_end_date'],
1681+
];
1682+
}
1683+
1684+
return $shortList;
1685+
}
1686+
16521687
/**
16531688
* @throws Exception
16541689
*/
@@ -2148,9 +2183,21 @@ public function addCoursesSession(array $params): array
21482183
}
21492184

21502185
/**
2186+
* Simple legacy shortcut to subscribeUsersToSession
21512187
* @throws Exception
21522188
*/
21532189
public function addUsersSession(array $params): array
2190+
{
2191+
return self::subscribeUsersToSession($params);
2192+
}
2193+
2194+
/**
2195+
* Subscribe a list of users to the given session
2196+
* @param array $params Containing 'id_session' and 'list_users' entries
2197+
* @return array
2198+
* @throws Exception
2199+
*/
2200+
public function subscribeUsersToSession(array $params): array
21542201
{
21552202
$sessionId = $params['id_session'];
21562203
$userList = $params['list_users'];
@@ -2175,6 +2222,39 @@ public function addUsersSession(array $params): array
21752222
'message' => get_lang('UsersAdded'),
21762223
];
21772224
}
2225+
/**
2226+
* Unsubscribe a given list of users from the given session
2227+
* @param array $params
2228+
* @return array
2229+
* @throws Exception
2230+
*/
2231+
public function unsubscribeUsersFromSession(array $params): array
2232+
{
2233+
self::protectAdminEndpoint();
2234+
2235+
$sessionId = $params['id_session'];
2236+
$userList = $params['list_users'];
2237+
2238+
if (!is_array($userList)) {
2239+
$userList = [];
2240+
}
2241+
2242+
if (!api_is_platform_admin() && !in_array($this->user->getId(), $userList)) {
2243+
self::throwNotAllowedException();
2244+
}
2245+
2246+
foreach ($userList as $userId) {
2247+
SessionManager::unsubscribe_user_from_session(
2248+
$sessionId,
2249+
$userId
2250+
);
2251+
}
2252+
2253+
return [
2254+
'status' => true,
2255+
'message' => get_lang('UserUnsubscribed'),
2256+
];
2257+
}
21782258

21792259
/**
21802260
* Creates a session from a model session.
@@ -2372,6 +2452,38 @@ public function getSessionFromExtraField($fieldName, $fieldValue)
23722452
return intval($sessionIdList[0]['item_id']);
23732453
}
23742454

2455+
/**
2456+
* Get a list of users subscribed to the given session
2457+
* @params int $sessionId
2458+
* @params int $moveInfo Whether to return the "moved_*" fields or not
2459+
* @return array
2460+
*/
2461+
public function getUsersSubscribedToSession(int $sessionId, int $moveInfo = 0): array
2462+
{
2463+
self::protectAdminEndpoint();
2464+
2465+
$users = SessionManager::get_users_by_session($sessionId);
2466+
2467+
$userList = [];
2468+
foreach ($users as $user) {
2469+
$userInfo = [
2470+
'user_id' => $user['user_id'],
2471+
'username' => $user['username'],
2472+
'firstname' => $user['firstname'],
2473+
'lastname' => $user['lastname'],
2474+
'status' => $user['relation_type'],
2475+
];
2476+
if (1 === $moveInfo) {
2477+
$userInfo['moved_to'] = $user['moved_to'];
2478+
$userInfo['moved_status'] = $user['moved_status'];
2479+
$userInfo['moved_at'] = $user['moved_at'];
2480+
}
2481+
$userList[] = $userInfo;
2482+
}
2483+
2484+
return $userList;
2485+
}
2486+
23752487
/**
23762488
* Updates a user identified by its login name.
23772489
*

main/webservices/api/v2.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,15 @@
751751
$users = $restApi->getUsersSubscribedToCourse();
752752
$restResponse->setData($users);
753753
break;
754+
case Rest::GET_SESSIONS:
755+
$campusId = api_get_current_access_url_id();
756+
if (!empty($_POST['id_campus'])) {
757+
$campusId = (int) $_POST['id_campus'];
758+
}
759+
Event::addEvent(LOG_WS.$action, 'id_campus', $campusId);
760+
$data = $restApi->getSessionsCampus($campusId);
761+
$restResponse->setData($data);
762+
break;
754763
case Rest::ADD_COURSES_SESSION:
755764
$data = $restApi->addCoursesSession($_POST);
756765
Event::addEvent(
@@ -761,6 +770,7 @@
761770
$restResponse->setData($data);
762771
break;
763772
case Rest::ADD_USERS_SESSION:
773+
case Rest::SUBSCRIBE_USERS_TO_SESSION:
764774
$data = $restApi->addUsersSession($_POST);
765775
Event::addEvent(
766776
LOG_WS.$action,
@@ -769,6 +779,15 @@
769779
);
770780
$restResponse->setData($data);
771781
break;
782+
case Rest::UNSUBSCRIBE_USERS_FROM_SESSION:
783+
$data = $restApi->unsubscribeUsersFromSession($_POST);
784+
Event::addEvent(
785+
LOG_WS.$action,
786+
'session_id-users_ids',
787+
(int) $_POST['id_session'].':'.implode(',', $_POST['list_users'])
788+
);
789+
$restResponse->setData($data);
790+
break;
772791
case Rest::SUBSCRIBE_USER_TO_SESSION_FROM_USERNAME:
773792
if (empty($_POST['sessionId']) || empty($_POST['loginname'])) {
774793
throw new Exception(get_lang('NoData'));
@@ -781,6 +800,11 @@
781800
);
782801
$restResponse->setData([$subscribed]);
783802
break;
803+
case Rest::GET_USERS_SUBSCRIBED_TO_SESSION:
804+
Event::addEvent(LOG_WS.$action, 'session_id', (int) $_POST['id_session']);
805+
$users = $restApi->getUsersSubscribedToSession($_POST['id_session'], $_POST['move_info']);
806+
$restResponse->setData($users);
807+
break;
784808
case Rest::GET_COURSE_QUIZ_MDL_COMPAT:
785809
Event::addEvent(LOG_WS.$action, 'course_id', (int) $_POST['course']);
786810
$data = $restApi->getCourseQuizMdlCompat();

0 commit comments

Comments
 (0)