Webservice: Add new webservices get_sessions, subscribe_users_to_session, unsubscribe_users_from_session, get_users_subscribed_to_session - refs #4647

pull/4739/head
Yannick Warnier 2 years ago
parent 08925120d9
commit 8aac38b77f
  1. 112
      main/inc/lib/webservices/Rest.php
  2. 24
      main/webservices/api/v2.php

@ -111,6 +111,7 @@ class Rest extends WebService
public const SAVE_SESSION = 'save_session';
public const CREATE_SESSION_FROM_MODEL = 'create_session_from_model';
public const UPDATE_SESSION = 'update_session';
public const GET_SESSIONS = 'get_sessions';
public const SUBSCRIBE_USER_TO_COURSE = 'subscribe_user_to_course';
public const SUBSCRIBE_USER_TO_COURSE_PASSWORD = 'subscribe_user_to_course_password';
@ -120,6 +121,10 @@ class Rest extends WebService
public const ADD_COURSES_SESSION = 'add_courses_session';
public const ADD_USERS_SESSION = 'add_users_session';
public const SUBSCRIBE_USER_TO_SESSION_FROM_USERNAME = 'subscribe_user_to_session_from_username';
public const SUBSCRIBE_USERS_TO_SESSION = 'subscribe_users_to_session';
public const UNSUBSCRIBE_USERS_FROM_SESSION = 'unsubscribe_users_from_session';
public const GET_USERS_SUBSCRIBED_TO_SESSION = 'get_users_subscribed_to_session';
public const GET_COURSE_QUIZ_MDL_COMPAT = 'get_course_quiz_mdl_compat';
@ -1649,6 +1654,36 @@ class Rest extends WebService
);
}
/**
* 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
* return all the sessions.
*
* @param int $campusId
*/
public function getSessionsCampus(int $campusId = null): array
{
self::protectAdminEndpoint();
$list = SessionManager::get_sessions_list(
[],
[],
null,
null,
$campusId
);
$shortList = [];
foreach ($list as $session) {
$shortList[] = [
'id' => $session['id'],
'name' => $session['name'],
'access_start_date' => $session['access_start_date'],
'access_end_date' => $session['access_end_date'],
];
}
return $shortList;
}
/**
* @throws Exception
*/
@ -2148,9 +2183,21 @@ class Rest extends WebService
}
/**
* Simple legacy shortcut to subscribeUsersToSession
* @throws Exception
*/
public function addUsersSession(array $params): array
{
return self::subscribeUsersToSession($params);
}
/**
* Subscribe a list of users to the given session
* @param array $params Containing 'id_session' and 'list_users' entries
* @return array
* @throws Exception
*/
public function subscribeUsersToSession(array $params): array
{
$sessionId = $params['id_session'];
$userList = $params['list_users'];
@ -2175,6 +2222,39 @@ class Rest extends WebService
'message' => get_lang('UsersAdded'),
];
}
/**
* Unsubscribe a given list of users from the given session
* @param array $params
* @return array
* @throws Exception
*/
public function unsubscribeUsersFromSession(array $params): array
{
self::protectAdminEndpoint();
$sessionId = $params['id_session'];
$userList = $params['list_users'];
if (!is_array($userList)) {
$userList = [];
}
if (!api_is_platform_admin() && !in_array($this->user->getId(), $userList)) {
self::throwNotAllowedException();
}
foreach ($userList as $userId) {
SessionManager::unsubscribe_user_from_session(
$sessionId,
$userId
);
}
return [
'status' => true,
'message' => get_lang('UserUnsubscribed'),
];
}
/**
* Creates a session from a model session.
@ -2372,6 +2452,38 @@ class Rest extends WebService
return intval($sessionIdList[0]['item_id']);
}
/**
* Get a list of users subscribed to the given session
* @params int $sessionId
* @params int $moveInfo Whether to return the "moved_*" fields or not
* @return array
*/
public function getUsersSubscribedToSession(int $sessionId, int $moveInfo = 0): array
{
self::protectAdminEndpoint();
$users = SessionManager::get_users_by_session($sessionId);
$userList = [];
foreach ($users as $user) {
$userInfo = [
'user_id' => $user['user_id'],
'username' => $user['username'],
'firstname' => $user['firstname'],
'lastname' => $user['lastname'],
'status' => $user['relation_type'],
];
if (1 === $moveInfo) {
$userInfo['moved_to'] = $user['moved_to'];
$userInfo['moved_status'] = $user['moved_status'];
$userInfo['moved_at'] = $user['moved_at'];
}
$userList[] = $userInfo;
}
return $userList;
}
/**
* Updates a user identified by its login name.
*

@ -751,6 +751,15 @@ try {
$users = $restApi->getUsersSubscribedToCourse();
$restResponse->setData($users);
break;
case Rest::GET_SESSIONS:
$campusId = api_get_current_access_url_id();
if (!empty($_POST['id_campus'])) {
$campusId = (int) $_POST['id_campus'];
}
Event::addEvent(LOG_WS.$action, 'id_campus', $campusId);
$data = $restApi->getSessionsCampus($campusId);
$restResponse->setData($data);
break;
case Rest::ADD_COURSES_SESSION:
$data = $restApi->addCoursesSession($_POST);
Event::addEvent(
@ -761,6 +770,7 @@ try {
$restResponse->setData($data);
break;
case Rest::ADD_USERS_SESSION:
case Rest::SUBSCRIBE_USERS_TO_SESSION:
$data = $restApi->addUsersSession($_POST);
Event::addEvent(
LOG_WS.$action,
@ -769,6 +779,15 @@ try {
);
$restResponse->setData($data);
break;
case Rest::UNSUBSCRIBE_USERS_FROM_SESSION:
$data = $restApi->unsubscribeUsersFromSession($_POST);
Event::addEvent(
LOG_WS.$action,
'session_id-users_ids',
(int) $_POST['id_session'].':'.implode(',', $_POST['list_users'])
);
$restResponse->setData($data);
break;
case Rest::SUBSCRIBE_USER_TO_SESSION_FROM_USERNAME:
if (empty($_POST['sessionId']) || empty($_POST['loginname'])) {
throw new Exception(get_lang('NoData'));
@ -781,6 +800,11 @@ try {
);
$restResponse->setData([$subscribed]);
break;
case Rest::GET_USERS_SUBSCRIBED_TO_SESSION:
Event::addEvent(LOG_WS.$action, 'session_id', (int) $_POST['id_session']);
$users = $restApi->getUsersSubscribedToSession($_POST['id_session'], $_POST['move_info']);
$restResponse->setData($users);
break;
case Rest::GET_COURSE_QUIZ_MDL_COMPAT:
Event::addEvent(LOG_WS.$action, 'course_id', (int) $_POST['course']);
$data = $restApi->getCourseQuizMdlCompat();

Loading…
Cancel
Save