Skip to content

Commit 806f347

Browse files
committed
Webservice: Add subscribe_user_to_session_from_extra_field WS - refs BT#22302
1 parent 889011f commit 806f347

File tree

2 files changed

+128
-2
lines changed

2 files changed

+128
-2
lines changed

main/inc/lib/webservices/Rest.php

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ class Rest extends WebService
154154
public const DELETE_GROUP_SUB_COURSE = 'delete_group_sub_course';
155155
public const DELETE_GROUP_SUB_SESSION = 'delete_group_sub_session';
156156
public const GET_AUDIT_ITEMS = 'get_audit_items';
157-
public const SUBSCRIBE_COURSE_TO_SESSION_XF = 'subscribe_course_to_session_from_extra_field';
157+
public const SUBSCRIBE_COURSE_TO_SESSION_FROM_EXTRA_FIELD = 'subscribe_course_to_session_from_extra_field';
158+
public const SUBSCRIBE_USER_TO_SESSION_FROM_EXTRA_FIELD = 'subscribe_user_to_session_from_extra_field';
158159

159160
/**
160161
* @var Session
@@ -4473,6 +4474,96 @@ public function subscribeCourseToSessionFromExtraField($params)
44734474
}
44744475
}
44754476

4477+
/**
4478+
* Subscribe a specific user to a specific session, identified via extra field values.
4479+
*
4480+
* This method:
4481+
* - Locates the session ID using the provided session extra field name/value via ExtraFieldValue('session').
4482+
* - Locates the user ID using the provided user extra field name/value via ExtraFieldValue('user').
4483+
* - Adds the user to the session using SessionManager::subscribe_users_to_session() (similar to subscribeUsersToSession()).
4484+
*
4485+
* Required parameters:
4486+
* - session_field_name: Name of the extra field for sessions (e.g., 'peoplesoft_sid').
4487+
* - session_field_value: Value of the session extra field (e.g., '123450').
4488+
* - user_field_name: Name of the extra field for users (e.g., 'peoplesoft_uid').
4489+
* - user_field_value: Value of the user extra field (e.g., '1').
4490+
*
4491+
* @param array $params Associative array of POST parameters.
4492+
* @return array Response in format: ['error' => bool, 'data' => array] on success, or ['error' => true, 'message' => string] on failure.
4493+
*/
4494+
public function subscribeUserToSessionFromExtraField($params)
4495+
{
4496+
// Validate required parameters (redundant with v2.php but for safety)
4497+
$required = ['session_field_name', 'session_field_value', 'user_field_name', 'user_field_value'];
4498+
foreach ($required as $key) {
4499+
if (empty($params[$key])) {
4500+
return [
4501+
'error' => true,
4502+
'message' => 'Missing required parameter: ' . $key
4503+
];
4504+
}
4505+
}
4506+
4507+
$sessionFieldName = $params['session_field_name'];
4508+
$sessionFieldValue = $params['session_field_value'];
4509+
$userFieldName = $params['user_field_name'];
4510+
$userFieldValue = $params['user_field_value'];
4511+
4512+
// Get session ID from extra field value using ExtraFieldValue model
4513+
$sessionValueModel = new ExtraFieldValue('session');
4514+
$sessionIdList = $sessionValueModel->get_item_id_from_field_variable_and_field_value(
4515+
$sessionFieldName,
4516+
$sessionFieldValue,
4517+
false,
4518+
false,
4519+
true
4520+
);
4521+
if (empty($sessionIdList)) {
4522+
return [
4523+
'error' => true,
4524+
'message' => 'No session found with extra field value "' . $sessionFieldValue . '".'
4525+
];
4526+
}
4527+
$sessionId = (int) $sessionIdList[0]['item_id']; // Extract item_id from sub-array, assume single match
4528+
4529+
// Get user ID from extra field value using ExtraFieldValue model
4530+
$userValueModel = new ExtraFieldValue('user');
4531+
$userIdList = $userValueModel->get_item_id_from_field_variable_and_field_value(
4532+
$userFieldName,
4533+
$userFieldValue,
4534+
false,
4535+
false,
4536+
true
4537+
);
4538+
if (empty($userIdList)) {
4539+
return [
4540+
'error' => true,
4541+
'message' => 'No user found with extra field value "' . $userFieldValue . '".'
4542+
];
4543+
}
4544+
$userId = (int) $userIdList[0]['item_id']; // Extract item_id from sub-array, assume single match
4545+
4546+
// Add user to session using existing core method (mirrors subscribeUsersToSession logic)
4547+
$success = SessionManager::subscribeUsersToSession($sessionId, [$userId]);
4548+
4549+
if ($success) {
4550+
return [
4551+
'error' => false,
4552+
'data' => [
4553+
'status' => true,
4554+
'message' => 'User subscribed to session',
4555+
'id_session' => $sessionId,
4556+
'user_id' => $userId
4557+
]
4558+
];
4559+
} else {
4560+
return [
4561+
'error' => true,
4562+
'message' => 'Failed to subscribe user to session.'
4563+
];
4564+
}
4565+
}
4566+
44764567
/**
44774568
* Generate an API key for webservices access for the given user ID.
44784569
*/

main/webservices/api/v2.php

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,7 @@
11001100
*
11011101
* @return void Outputs JSON response via existing echo.
11021102
*/
1103-
case Rest::SUBSCRIBE_COURSE_TO_SESSION_XF:
1103+
case Rest::SUBSCRIBE_COURSE_TO_SESSION_FROM_EXTRA_FIELD:
11041104
$required_params = ['api_key', 'username', 'session_field_name', 'session_field_value', 'course_field_name', 'course_field_value'];
11051105
$missing = [];
11061106
foreach ($required_params as $param) {
@@ -1123,6 +1123,41 @@
11231123
$restResponse->setData($result['data']);
11241124
}
11251125
break;
1126+
/**
1127+
* Subscribe a user to a session using extra field values for identification.
1128+
*
1129+
* Validates parameters from $_POST and calls the Rest method, handling response via $restResponse.
1130+
*
1131+
* Required POST parameters:
1132+
* - api_key: API key for authentication.
1133+
* - username: Username for authentication.
1134+
* - session_field_name: Name of the extra field for sessions.
1135+
* - session_field_value: Value of the session extra field.
1136+
* - user_field_name: Name of the extra field for users.
1137+
* - user_field_value: Value of the user extra field.
1138+
*
1139+
* @return void Sets response via existing $restResponse object.
1140+
*/
1141+
case Rest::SUBSCRIBE_USER_TO_SESSION_FROM_EXTRA_FIELD:
1142+
$required_params = ['api_key', 'username', 'session_field_name', 'session_field_value', 'user_field_name', 'user_field_value'];
1143+
$missing = [];
1144+
foreach ($required_params as $param) {
1145+
if (empty($_POST[$param])) {
1146+
$missing[] = $param;
1147+
}
1148+
}
1149+
if (!empty($missing)) {
1150+
$restResponse->setErrorMessage('Missing required parameters: ' . implode(', ', $missing));
1151+
break;
1152+
}
1153+
$params = $_POST;
1154+
$result = $restApi->subscribeUserToSessionFromExtraField($params);
1155+
if ($result['error']) {
1156+
$restResponse->setErrorMessage($result['message']);
1157+
} else {
1158+
$restResponse->setData($result['data']);
1159+
}
1160+
break;
11261161
default:
11271162
throw new Exception(get_lang('InvalidAction'));
11281163
}

0 commit comments

Comments
 (0)