getCoursesInCategory(false); // Only authorized actions $authorizedActions = [ 'edit_category', 'edit_course_category', 'deletecoursecategory', 'createcoursecategory', 'set_collapsable', 'unsubscribe', ]; $action = $httpRequest->query->get('action', $httpRequest->request->get('action', '')); if (!in_array($action, $authorizedActions)) { $action = ''; } $currentUrl = api_get_self(); $interbreadcrumb[] = [ 'url' => api_get_self(), 'name' => get_lang('SortMyCourses'), ]; // We are moving the course of the user to a different user defined course category (=Sort My Courses). if ($httpRequest->request->has('submit_change_course_category')) { $course2EditCategory = Security::remove_XSS($httpRequest->request->get('course_2_edit_category')); $courseCategories = Security::remove_XSS($httpRequest->request->get('course_categories')); $result = $auth->updateCourseCategory($course2EditCategory, $courseCategories); if ($result) { Display::addFlash( Display::return_message(get_lang('EditCourseCategorySucces')) ); } header('Location: '.api_get_self()); exit; } // We edit course category if ($httpRequest->request->has('submit_edit_course_category') && $httpRequest->request->has('title_course_category') && Security::check_token('post') ) { $titleCourseCategory = Security::remove_XSS($httpRequest->request->get('title_course_category')); $categoryId = Security::remove_XSS($httpRequest->request->get('category_id')); $categoryInfo = $auth->getUserCourseCategory($categoryId); if ($categoryInfo) { $result = $auth->store_edit_course_category($titleCourseCategory, $categoryId); if ($result) { Display::addFlash( Display::return_message(get_lang('CourseCategoryEditStored')) ); } } header('Location: '.api_get_self()); exit; } // We are creating a new user defined course category (= Create Course Category). if ($httpRequest->request->has('create_course_category') && $titleCourseCategory = $httpRequest->request->get('title_course_category') ) { $titleCourseCategory = Security::remove_XSS($titleCourseCategory); $result = $auth->store_course_category($titleCourseCategory); if ($result) { Display::addFlash( Display::return_message(get_lang('CourseCategoryStored')) ); } else { Display::addFlash( Display::return_message( get_lang('ACourseCategoryWithThisNameAlreadyExists'), 'error' ) ); } header('Location: '.api_get_self()); exit; } // We are moving a course or category of the user up/down the list (=Sort My Courses). if ($getMove = $httpRequest->query->get('move')) { $getCourse = Security::remove_XSS($httpRequest->query->get('course')); $getMove = Security::remove_XSS($getMove); $getCategory = Security::remove_XSS($httpRequest->query->get('category')); if (!empty($getCourse)) { $result = $auth->move_course($getMove, $getCourse, $getCategory); if ($result) { Display::addFlash( Display::return_message(get_lang('CourseSortingDone')) ); } } if (!empty($getCategory) && empty($getCourse)) { $result = $auth->move_category($getMove, $getCategory); if ($result) { Display::addFlash( Display::return_message(get_lang('CategorySortingDone')) ); } } header('Location: '.api_get_self()); exit; } switch ($action) { case 'edit_category': $categoryId = $httpRequest->query->getInt('category_id'); $categoryInfo = $auth->getUserCourseCategory($categoryId); if ($categoryInfo) { $categoryName = $categoryInfo['title']; $form = new FormValidator( 'edit_course_category', 'post', $currentUrl.'?action=edit_category' ); $form->addText('title_course_category', get_lang('Name')); $form->addHidden('category_id', $categoryId); $form->addHidden('sec_token', Security::get_token()); $form->addButtonSave(get_lang('Edit'), 'submit_edit_course_category'); $form->setDefaults(['title_course_category' => $categoryName]); $form->display(); } exit; case 'edit_course_category': $edit_course = $httpRequest->query->getInt('course_id'); $defaultCategoryId = $httpRequest->query->getInt('category_id'); $courseInfo = api_get_course_info_by_id($edit_course); if (empty($courseInfo)) { exit; } $form = new FormValidator( 'edit_course_category', 'post', $currentUrl.'?action=edit_course_category' ); $form->addHeader($courseInfo['title']); $options = []; foreach ($user_course_categories as $row) { $options[$row['id']] = $row['title']; } asort($options); $form->addSelect( 'course_categories', get_lang('Categories'), $options, ['disable_js' => true, 'placeholder' => get_lang('SelectAnOption')] ); $form->addHidden('course_2_edit_category', $edit_course); if (!empty($defaultCategoryId)) { $form->setDefaults(['course_categories' => $defaultCategoryId]); } $form->addButtonSave(get_lang('Save'), 'submit_change_course_category'); $form->display(); exit; case 'deletecoursecategory': // we are deleting a course category if ($getId = $httpRequest->query->getInt('id')) { if (Security::check_token('get')) { $result = $auth->delete_course_category($getId); if ($result) { Display::addFlash( Display::return_message(get_lang('CourseCategoryDeleted')) ); } } } header('Location: '.api_get_self()); exit; case 'createcoursecategory': $form = new FormValidator( 'create_course_category', 'post', $currentUrl.'?action=createcoursecategory' ); $form->addText('title_course_category', get_lang('Name')); $form->addButtonSave(get_lang('AddCategory'), 'create_course_category'); $form->display(); exit; case 'set_collapsable': if (!api_get_configuration_value('allow_user_course_category_collapsable')) { api_not_allowed(true); } $userId = api_get_user_id(); $categoryId = $httpRequest->query->getInt('categoryid', $httpRequest->request->getInt('categoryid')); $option = $httpRequest->query->get('option', $httpRequest->request->getInt('option')); $redirect = $httpRequest->query->get('redirect', $httpRequest->request->get('redirect', '')); if (empty($userId) || empty($categoryId)) { api_not_allowed(true); } $table = Database::get_main_table(TABLE_USER_COURSE_CATEGORY); $sql = "UPDATE $table SET collapsed = $option WHERE user_id = $userId AND id = $categoryId"; Database::query($sql); Display::addFlash(Display::return_message(get_lang('Updated'))); if ($redirect === 'home') { $url = api_get_path(WEB_PATH).'user_portal.php'; header('Location: '.$url); exit; } $url = api_get_self(); header('Location: '.$url); exit; } function generateUnsubscribeForm(string $courseCode, string $secToken): string { $alertMessage = api_htmlentities(get_lang("ConfirmUnsubscribeFromCourse"), ENT_QUOTES); $form = new FormValidator( 'frm_unsubscribe', 'get', api_get_path(WEB_CODE_PATH).'auth/courses.php', '', [ 'onsubmit' => 'javascript: if (!confirm(\''.addslashes($alertMessage).'\')) return false;', ], FormValidator::LAYOUT_INLINE ); $form->addHidden('action', 'unsubscribe'); $form->addHidden('sec_token', $secToken); $form->addHidden('course_code', $courseCode); $form->addButton('unsub', get_lang('Unsubscribe')); return $form->returnForm(); } Display::display_header(); $stok = Security::get_token(); $courses_without_category = isset($courses_in_category[0]) ? $courses_in_category[0] : null; echo '