You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
524 lines
18 KiB
524 lines
18 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
/**
|
|
* @package chamilo.webservices
|
|
*/
|
|
require_once(dirname(__FILE__).'/../inc/global.inc.php');
|
|
$libpath = api_get_path(LIBRARY_PATH);
|
|
require_once(dirname(__FILE__).'/webservice.php');
|
|
|
|
/**
|
|
* Web services available for the Session module. This class extends the WS class
|
|
*/
|
|
class WSSession extends WS
|
|
{
|
|
|
|
/**
|
|
* Creates a session (helper method)
|
|
*
|
|
* @param string Name of the session
|
|
* @param string Start date, use the 'YYYY-MM-DD' format
|
|
* @param string End date, use the 'YYYY-MM-DD' format
|
|
* @param int Access delays of the coach (days before)
|
|
* @param int Access delays of the coach (days after)
|
|
* @param int Nolimit (0 = no limit of time, 1 = limit of time)
|
|
* @param int Visibility
|
|
* @param string User id field name for the coach
|
|
* @param string User id value for the coach
|
|
* @param string Original session id field name (use "chamilo_session_id" to use internal id)
|
|
* @param string Original session id value
|
|
* @param array Array of extra fields
|
|
* @return mixed Generated id in case of success, WSError otherwise
|
|
*/
|
|
protected function createSessionHelper(
|
|
$name,
|
|
$start_date,
|
|
$end_date,
|
|
$nb_days_access_before,
|
|
$nb_days_access_after,
|
|
$nolimit,
|
|
$visibility,
|
|
$user_id_field_name,
|
|
$user_id_value,
|
|
$session_id_field_name,
|
|
$session_id_value,
|
|
$extras
|
|
) {
|
|
// Verify that coach exists and get its id
|
|
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
|
|
if ($user_id instanceof WSError) {
|
|
return $user_id;
|
|
}
|
|
|
|
$coachStartDate = null;
|
|
if (!empty($nb_days_access_before)) {
|
|
$day = intval($nb_days_access_before);
|
|
$coachStartDate = date('Y-m-d ', strtotime($start_date. ' + '.$day.' days'));
|
|
}
|
|
|
|
$coachEndDate = null;
|
|
if (!empty($nb_days_access_after)) {
|
|
$day = intval($nb_days_access_after);
|
|
$coachEndDate = date('Y-m-d ', strtotime($end_date. ' + '.$day.' days'));
|
|
}
|
|
|
|
// Try to create the session
|
|
$session_id = SessionManager::create_session(
|
|
$name,
|
|
$start_date,
|
|
$end_date,
|
|
$start_date,
|
|
$end_date,
|
|
$coachStartDate,
|
|
$coachEndDate,
|
|
$user_id,
|
|
0,
|
|
$visibility
|
|
);
|
|
if(!is_int($session_id)) {
|
|
return new WSError(301, 'Could not create the session');
|
|
} else {
|
|
// Add the Original session id to the extra fields
|
|
$extras_associative = array();
|
|
if($session_id_field_name != "chamilo_session_id") {
|
|
$extras_associative[$session_id_field_name] = $session_id_value;
|
|
}
|
|
foreach($extras as $extra) {
|
|
$extras_associative[$extra['field_name']] = $extra['field_value'];
|
|
}
|
|
// Create the extra fields
|
|
foreach($extras_associative as $fname => $fvalue) {
|
|
SessionManager::create_session_extra_field($fname, 1, $fname);
|
|
SessionManager::update_session_extra_field_value(
|
|
$session_id,
|
|
$fname,
|
|
$fvalue
|
|
);
|
|
}
|
|
return $session_id;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates a session
|
|
*
|
|
* @param string API secret key
|
|
* @param string Name of the session
|
|
* @param string Start date, use the 'YYYY-MM-DD' format
|
|
* @param string End date, use the 'YYYY-MM-DD' format
|
|
* @param int Access delays of the coach (days before)
|
|
* @param int Access delays of the coach (days after)
|
|
* @param int Nolimit (0 = no limit of time, 1 = limit of time)
|
|
* @param int Visibility
|
|
* @param string User id field name for the coach
|
|
* @param string User id value for the coach
|
|
* @param string Original session id field name (use "chamilo_session_id" to use internal id)
|
|
* @param string Original session id value
|
|
* @param array Array of extra fields
|
|
* @return int Session id generated
|
|
*/
|
|
public function CreateSession($secret_key, $name, $start_date, $end_date, $nb_days_access_before, $nb_days_access_after, $nolimit, $visibility, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $extras) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$session_id = $this->createSessionHelper($name, $start_date, $end_date, $nb_days_access_before, $nb_days_access_after, $nolimit, $visibility, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $extras);
|
|
if($session_id instanceof WSError) {
|
|
$this->handleError($session_id);
|
|
} else {
|
|
return $session_id;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deletes a session (helper method)
|
|
*
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @return mixed True in case of success, WSError otherwise
|
|
*/
|
|
protected function deleteSessionHelper($session_id_field_name, $session_id_value) {
|
|
$session_id = $this->getSessionId($session_id_field_name, $session_id_value);
|
|
if($session_id instanceof WSError) {
|
|
return $session_id;
|
|
} else {
|
|
SessionManager::delete($session_id, true);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deletes a session
|
|
*
|
|
* @param string API secret key
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
*/
|
|
public function DeleteSession($secret_key, $session_id_field_name, $session_id_value) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->deleteSessionHelper($session_id_field_name, $session_id_value);
|
|
if($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Edits a session (helper method)
|
|
*
|
|
* @param string Name of the session
|
|
* @param string Start date, use the 'YYYY-MM-DD' format
|
|
* @param string End date, use the 'YYYY-MM-DD' format
|
|
* @param int Access delays of the coach (days before)
|
|
* @param int Access delays of the coach (days after)
|
|
* @param int Nolimit (0 = no limit of time, 1 = limit of time)
|
|
* @param int Visibility
|
|
* @param string User id field name for the coach
|
|
* @param string User id value for the coach
|
|
* @param string Original session id field name (use "chamilo_session_id" to use internal id)
|
|
* @param string Original session id value
|
|
* @param array Array of extra fields
|
|
* @return mixed True on success, WSError otherwise
|
|
*/
|
|
protected function editSessionHelper(
|
|
$name,
|
|
$start_date,
|
|
$end_date,
|
|
$nb_days_access_before,
|
|
$nb_days_access_after,
|
|
$nolimit,
|
|
$visibility,
|
|
$user_id_field_name,
|
|
$user_id_value,
|
|
$session_id_field_name,
|
|
$session_id_value,
|
|
$extras
|
|
) {
|
|
$session_id = $this->getSessionId($session_id_field_name, $session_id_value);
|
|
if($session_id instanceof WSError) {
|
|
return $session_id;
|
|
} else {
|
|
// Verify that coach exists and get its id
|
|
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
|
|
if ($user_id instanceof WSError) {
|
|
return $user_id;
|
|
}
|
|
|
|
$coachStartDate = null;
|
|
if (!empty($nb_days_access_before)) {
|
|
$day = intval($nb_days_access_before);
|
|
$coachStartDate = date('Y-m-d ', strtotime($start_date. ' + '.$day.' days'));
|
|
}
|
|
|
|
$coachEndDate = null;
|
|
if (!empty($nb_days_access_after)) {
|
|
$day = intval($nb_days_access_after);
|
|
$coachEndDate = date('Y-m-d ', strtotime($end_date. ' + '.$day.' days'));
|
|
}
|
|
|
|
$result_id = SessionManager::edit_session(
|
|
$session_id,
|
|
$name,
|
|
$start_date,
|
|
$end_date,
|
|
$start_date,
|
|
$end_date,
|
|
$coachStartDate,
|
|
$coachEndDate,
|
|
$user_id,
|
|
0,
|
|
(int)$visibility
|
|
);
|
|
if(!is_int($result_id)) {
|
|
return new WSError(302, 'Could not edit the session');
|
|
} else {
|
|
if(!empty($extras)) {
|
|
$extras_associative = array();
|
|
foreach($extras as $extra) {
|
|
$extras_associative[$extra['field_name']] = $extra['field_value'];
|
|
}
|
|
// Create the extra fields
|
|
foreach($extras_associative as $fname => $fvalue) {
|
|
SessionManager::create_session_extra_field($fname, 1, $fname);
|
|
SessionManager::update_session_extra_field_value($session_id, $fname, $fvalue);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Edits a session
|
|
*
|
|
* @param string API secret key
|
|
* @param string Name of the session
|
|
* @param string Start date, use the 'YYYY-MM-DD' format
|
|
* @param string End date, use the 'YYYY-MM-DD' format
|
|
* @param int Access delays of the coach (days before)
|
|
* @param int Access delays of the coach (days after)
|
|
* @param int Nolimit (0 = no limit of time, 1 = limit of time)
|
|
* @param int Visibility
|
|
* @param string User id field name for the coach
|
|
* @param string User id value for the coach
|
|
* @param string Original session id field name (use "chamilo_session_id" to use internal id)
|
|
* @param string Original session id value
|
|
* @param array Array of extra fields
|
|
*/
|
|
public function EditSession($secret_key, $name, $start_date, $end_date, $nb_days_access_before, $nb_days_access_after, $nolimit, $visibility, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $extras) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->editSessionHelper($name, $start_date, $end_date, $nb_days_access_before, $nb_days_access_after, $nolimit, $visibility, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $extras);
|
|
if($session_id_value instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Change user subscription (helper method)
|
|
*
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @param int State (1 to subscribe, 0 to unsubscribe)
|
|
* @return mixed True on success, WSError otherwise
|
|
*/
|
|
protected function changeUserSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $state) {
|
|
$session_id = $this->getSessionId($session_id_field_name, $session_id_value);
|
|
if($session_id instanceof WSError) {
|
|
return $session_id;
|
|
} else {
|
|
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
|
|
if($user_id instanceof WSError) {
|
|
return $user_id;
|
|
} else {
|
|
if($state == 1) {
|
|
SessionManager::suscribe_users_to_session($session_id, array($user_id));
|
|
} else {
|
|
$result = SessionManager::unsubscribe_user_from_session($session_id, $user_id);
|
|
if (!$result) {
|
|
return new WSError(303, 'There was an error unsubscribing this user from the session');
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Subscribe user to a session
|
|
*
|
|
* @param string API secret key
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
*/
|
|
public function SubscribeUserToSession($secret_key, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeUserSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, 1);
|
|
if($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Subscribe user to a session
|
|
*
|
|
* @param string API secret key
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
*/
|
|
public function UnsubscribeUserFromSession($secret_key, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeUserSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, 0);
|
|
if($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Change Teacher subscription (helper method)
|
|
*
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
* @param int State (1 to subscribe, 0 to unsubscribe)
|
|
* @return mixed True on success, WSError otherwise
|
|
*/
|
|
protected function changeTeacherSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $course_id_field_name, $course_id_value, $state)
|
|
{
|
|
$session_id = $this->getSessionId($session_id_field_name, $session_id_value);
|
|
if ($session_id instanceof WSError) {
|
|
return $session_id;
|
|
} else {
|
|
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
|
|
if ($user_id instanceof WSError) {
|
|
return $user_id;
|
|
} else {
|
|
$course_id = $this->getCourseId($course_id_field_name, $course_id_value);
|
|
if ($course_id instanceof WSError) {
|
|
return $course_id;
|
|
} else {
|
|
if ($state == 1) {
|
|
SessionManager::set_coach_to_course_session($user_id, $session_id, $course_id);
|
|
} else {
|
|
$user_id = array (0 => $user_id);
|
|
$result = SessionManager::removeUsersFromCourseSession($user_id, $session_id, $course_id);
|
|
if (!$result) {
|
|
return new WSError(303, 'There was an error unsubscribing this Teacher from the session');
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Subscribe teacher to a session course
|
|
*
|
|
* @param string API secret key
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
*/
|
|
public function SubscribeTeacherToSessionCourse($secret_key, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $course_id_field_name, $course_id_value)
|
|
{
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if ($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeUserSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $course_id_field_name, $course_id_value, 1);
|
|
if ($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Subscribe teacher to a session course
|
|
*
|
|
* @param string API secret key
|
|
* @param string User id field name
|
|
* @param string User id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
*/
|
|
public function UnsubscribeTeacherFromSessionCourse($secret_key, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $course_id_field_name, $course_id_value)
|
|
{
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if ($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeUserSubscription($user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $course_id_field_name, $course_id_value, 0);
|
|
if ($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Change course subscription
|
|
*
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
* @param int State (1 to subscribe, 0 to unsubscribe)
|
|
* @return mixed True on success, WSError otherwise
|
|
*/
|
|
protected function changeCourseSubscription($course_id_field_name, $course_id_value, $session_id_field_name, $session_id_value, $state) {
|
|
$session_id = $this->getSessionId($session_id_field_name, $session_id_value);
|
|
if($session_id instanceof WSError) {
|
|
return $session_id;
|
|
} else {
|
|
$course_id = $this->getCourseId($course_id_field_name, $course_id_value);
|
|
if($course_id instanceof WSError) {
|
|
return $course_id;
|
|
} else {
|
|
if($state == 1) {
|
|
SessionManager::add_courses_to_session($session_id, array($course_id));
|
|
return true;
|
|
} else {
|
|
$result = SessionManager::unsubscribe_course_from_session($session_id, $course_id);
|
|
if ($result) {
|
|
return true;
|
|
} else {
|
|
return new WSError(304, 'Error unsubscribing course from session');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Subscribe course to session
|
|
*
|
|
* @param string API secret key
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
*/
|
|
public function SubscribeCourseToSession($secret_key, $course_id_field_name, $course_id_value, $session_id_field_name, $session_id_value) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeCourseSubscription($course_id_field_name, $course_id_value, $session_id_field_name, $session_id_value, 1);
|
|
if($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unsubscribe course from session
|
|
*
|
|
* @param string API secret key
|
|
* @param string Course id field name
|
|
* @param string Course id value
|
|
* @param string Session id field name
|
|
* @param string Session id value
|
|
*/
|
|
public function UnsubscribeCourseFromSession($secret_key, $course_id_field_name, $course_id_value, $session_id_field_name, $session_id_value) {
|
|
$verifKey = $this->verifyKey($secret_key);
|
|
if($verifKey instanceof WSError) {
|
|
$this->handleError($verifKey);
|
|
} else {
|
|
$result = $this->changeCourseSubscription($course_id_field_name, $course_id_value, $session_id_field_name, $session_id_value, 0);
|
|
if($result instanceof WSError) {
|
|
$this->handleError($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|