My courses: Allow self unsubscribe from course-session BT#18083

If course allows it.
pull/3683/head
Julio Montoya 5 years ago
parent 9b450bda56
commit daf04534fa
  1. 20
      main/inc/lib/CoursesAndSessionsCatalog.class.php
  2. 11
      main/inc/lib/auth.lib.php
  3. 14
      main/inc/lib/course.lib.php
  4. 3
      main/inc/lib/userportal.lib.php
  5. 13
      user_portal.php

@ -1170,21 +1170,27 @@ class CoursesAndSessionsCatalog
/** /**
* Display the unregister button of a course in the course catalog. * Display the unregister button of a course in the course catalog.
* *
* @param $course * @param array $course
* @param $stok * @param string $stok
* @param $search_term * @param string $search_term
* @param $categoryCode * @param string $categoryCode
* @param int $sessionId
* *
* @return string * @return string
*/ */
public static function return_unregister_button($course, $stok, $search_term, $categoryCode) public static function return_unregister_button($course, $stok, $search_term, $categoryCode, $sessionId = 0)
{ {
$title = get_lang('Unsubscription'); $title = get_lang('Unsubscription');
$search_term = Security::remove_XSS($search_term);
$categoryCode = Security::remove_XSS($categoryCode);
$sessionId = (int) $sessionId;
$url = api_get_self().'?action=unsubscribe&sec_token='.$stok.'&sid='.$sessionId.'&course_code='.$course['code'].
'&search_term='.$search_term.'&category_code='.$categoryCode;
return Display::url( return Display::url(
Display::returnFontAwesomeIcon('sign-in').' '.$title, Display::returnFontAwesomeIcon('sign-in').' '.$title,
api_get_self().'?action=unsubscribe&sec_token='.$stok $url,
.'&course_code='.$course['code'].'&search_term='.$search_term.'&category_code='.$categoryCode,
['class' => 'btn btn-danger', 'title' => $title, 'aria-label' => $title] ['class' => 'btn btn-danger', 'title' => $title, 'aria-label' => $title]
); );
} }

@ -302,7 +302,7 @@ class Auth
* *
* @return bool True if it success * @return bool True if it success
*/ */
public function remove_user_from_course($course_code) public function remove_user_from_course($course_code, $sessionId = 0)
{ {
$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
@ -312,6 +312,11 @@ class Auth
$result = true; $result = true;
$courseInfo = api_get_course_info($course_code); $courseInfo = api_get_course_info($course_code);
// Check if course can be unsubscribe
if ('1' !== $courseInfo['unsubscribe']) {
return false;
}
$courseId = $courseInfo['real_id']; $courseId = $courseInfo['real_id'];
// we check (once again) if the user is not course administrator // we check (once again) if the user is not course administrator
@ -328,7 +333,9 @@ class Auth
$result = false; $result = false;
} }
CourseManager::unsubscribe_user($current_user_id, $course_code); if ($result) {
CourseManager::unsubscribe_user($current_user_id, $course_code, $sessionId);
}
return $result; return $result;
} }

@ -4150,14 +4150,14 @@ class CourseManager
$params['course_code'] = $row['course_code']; $params['course_code'] = $row['course_code'];
$params['code'] = $row['course_code']; $params['code'] = $row['course_code'];
if ($showCustomIcon === 'true' && $iconName != 'course.png') { if ($showCustomIcon === 'true' && $iconName !== 'course.png') {
$params['thumbnails'] = $course_info['course_image']; $params['thumbnails'] = $course_info['course_image'];
$params['image'] = $course_info['course_image_large']; $params['image'] = $course_info['course_image_large'];
} }
$thumbnails = null; $thumbnails = null;
$image = null; $image = null;
if ($showCustomIcon === 'true' && $iconName != 'course.png') { if ($showCustomIcon === 'true' && $iconName !== 'course.png') {
$thumbnails = $course_info['course_image']; $thumbnails = $course_info['course_image'];
$image = $course_info['course_image_large']; $image = $course_info['course_image_large'];
} else { } else {
@ -4177,7 +4177,10 @@ class CourseManager
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$params['edit_actions'] .= api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course_info['code']; $params['edit_actions'] .= api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course_info['code'];
if ($load_dirs) { if ($load_dirs) {
$params['document'] = '<a id="document_preview_'.$course_info['real_id'].'_0" class="document_preview btn btn-default btn-sm" href="javascript:void(0);">' $params['document'] = '<a
id="document_preview_'.$course_info['real_id'].'_0"
class="document_preview btn btn-default btn-sm"
href="javascript:void(0);">'
.Display::returnFontAwesomeIcon('folder-open').'</a>'; .Display::returnFontAwesomeIcon('folder-open').'</a>';
$params['document'] .= Display::div( $params['document'] .= Display::div(
'', '',
@ -4189,7 +4192,10 @@ class CourseManager
} }
} }
if ($load_dirs) { if ($load_dirs) {
$params['document'] = '<a id="document_preview_'.$course_info['real_id'].'_0" class="document_preview btn btn-default btn-sm" href="javascript:void(0);">' $params['document'] = '<a
id="document_preview_'.$course_info['real_id'].'_0"
class="document_preview btn btn-default btn-sm"
href="javascript:void(0);">'
.Display::returnFontAwesomeIcon('folder-open').'</a>'; .Display::returnFontAwesomeIcon('folder-open').'</a>';
$params['document'] .= Display::div( $params['document'] .= Display::div(
'', '',

@ -1993,7 +1993,8 @@ class IndexManager
['code' => $course['course_code']], ['code' => $course['course_code']],
Security::get_existing_token(), Security::get_existing_token(),
'', '',
'' '',
$session_id
); );
} }

@ -1,4 +1,5 @@
<?php <?php
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
use ChamiloSession as Session; use ChamiloSession as Session;
@ -38,8 +39,6 @@ $logInfo = [
'tool' => SECTION_COURSES, 'tool' => SECTION_COURSES,
'tool_id' => 0, 'tool_id' => 0,
'tool_id_detail' => 0, 'tool_id_detail' => 0,
'action' => '',
'info' => '',
]; ];
Event::registerLog($logInfo); Event::registerLog($logInfo);
@ -66,9 +65,17 @@ if (array_key_exists('action', $_REQUEST)) {
case 'unsubscribe': case 'unsubscribe':
if (\Security::check_token('get')) { if (\Security::check_token('get')) {
$auth = new Auth(); $auth = new Auth();
if ($auth->remove_user_from_course($_GET['course_code'])) { $sessionId = isset($_REQUEST['sid']) ? $_REQUEST['sid'] : 0;
$courseCode = isset($_REQUEST['course_code']) ? $_REQUEST['course_code'] : '';
if (empty($courseCode)) {
api_location(api_get_self());
}
if ($auth->remove_user_from_course($courseCode, $sessionId)) {
Display::addFlash(Display::return_message(get_lang('YouAreNowUnsubscribed'))); Display::addFlash(Display::return_message(get_lang('YouAreNowUnsubscribed')));
} }
header('Location: user_portal.php'); header('Location: user_portal.php');
exit; exit;
} }

Loading…
Cancel
Save