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); } } } }