123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- <?php
- /* For licensing terms, see /license.txt */
- $cidReset = true; // Flag forcing the 'current course' reset
- require_once __DIR__.'/../inc/global.inc.php';
- api_block_anonymous_users();
- $auth = new Auth();
- $user_course_categories = CourseManager::get_user_course_categories(api_get_user_id());
- $courses_in_category = $auth->get_courses_in_category();
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
- $currentUrl = api_get_self();
- $interbreadcrumb[] = [
- 'url' => api_get_self(),
- 'name' => get_lang('Sort courses'),
- ];
- // We are moving the course of the user to a different user defined course category (=Sort My Courses).
- if (isset($_POST['submit_change_course_category'])) {
- $result = $auth->updateCourseCategory($_POST['course_2_edit_category'], $_POST['course_categories']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('The course has been added to the category'))
- );
- }
- header('Location: '.api_get_self());
- exit;
- }
- // We edit course category
- if (isset($_POST['submit_edit_course_category']) &&
- isset($_POST['title_course_category'])
- ) {
- $result = $auth->store_edit_course_category($_POST['title_course_category'], $_POST['category_id']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('Category updated'))
- );
- }
- header('Location: '.api_get_self());
- exit;
- }
- // We are creating a new user defined course category (= Create Course Category).
- if (isset($_POST['create_course_category']) &&
- isset($_POST['title_course_category']) &&
- strlen(trim($_POST['title_course_category'])) > 0
- ) {
- $result = $auth->store_course_category($_POST['title_course_category']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('Course category is created'))
- );
- } else {
- Display::addFlash(
- Display::return_message(
- get_lang('A course category with the same name already exists.'),
- '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 (isset($_GET['move'])) {
- if (isset($_GET['course'])) {
- $result = $auth->move_course($_GET['move'], $_GET['course'], $_GET['category']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('Courses sorted'))
- );
- }
- }
- if (isset($_GET['category']) && !isset($_GET['course'])) {
- $result = $auth->move_category($_GET['move'], $_GET['category']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('Category sorting done'))
- );
- }
- }
- header('Location: '.api_get_self());
- exit;
- }
- switch ($action) {
- case 'edit_category':
- $categoryId = isset($_GET['category_id']) ? (int) $_GET['category_id'] : 0;
- $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->addButtonSave(get_lang('Edit'), 'submit_edit_course_category');
- $form->setDefaults(['title_course_category' => $categoryName]);
- $form->display();
- }
- exit;
- break;
- case 'edit_course_category':
- $edit_course = (int) $_GET['course_id'];
- $defaultCategoryId = isset($_GET['category_id']) ? (int) $_GET['category_id'] : 0;
- $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('Please select an option')]
- );
- $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;
- break;
- case 'deletecoursecategory':
- // we are deleting a course category
- if (isset($_GET['id'])) {
- if (Security::check_token('get')) {
- $result = $auth->delete_course_category($_GET['id']);
- if ($result) {
- Display::addFlash(
- Display::return_message(get_lang('The category was deleted'))
- );
- }
- }
- }
- header('Location: '.api_get_self());
- exit;
- break;
- case 'createcoursecategory':
- $form = new FormValidator(
- 'create_course_category',
- 'post',
- $currentUrl.'?action=createcoursecategory'
- );
- $form->addText('title_course_category', get_lang('Name'));
- $form->addButtonSave(get_lang('Add category'), 'create_course_category');
- $form->display();
- exit;
- break;
- case 'set_collapsable':
- if (!api_get_configuration_value('allow_user_course_category_collapsable')) {
- api_not_allowed(true);
- }
- $userId = api_get_user_id();
- $categoryId = isset($_REQUEST['categoryid']) ? (int) $_REQUEST['categoryid'] : 0;
- $option = isset($_REQUEST['option']) ? (int) $_REQUEST['option'] : 0;
- $redirect = isset($_REQUEST['redirect']) ? $_REQUEST['redirect'] : 0;
- 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('Update successful')));
- if ($redirect === 'home') {
- $url = api_get_path(WEB_PATH).'user_portal.php';
- header('Location: '.$url);
- exit;
- }
- $url = api_get_self();
- header('Location: '.$url);
- exit;
- break;
- }
- Display::display_header();
- $stok = Security::get_token();
- $courses_without_category = isset($courses_in_category[0]) ? $courses_in_category[0] : null;
- echo '<div id="actions" class="actions">';
- if ($action != 'createcoursecategory') {
- echo '<a class="ajax" href="'.$currentUrl.'?action=createcoursecategory">';
- echo Display::return_icon('new_folder.png', get_lang('Create a personal courses category'), '', '32');
- echo '</a>';
- }
- echo '</div>';
- if (!empty($message)) {
- echo Display::return_message($message, 'confirm', false);
- }
- $allowCollapsable = api_get_configuration_value('allow_user_course_category_collapsable');
- $teachersIcon = Display::return_icon('teacher.png', get_lang('Trainers'), null, ICON_SIZE_TINY);
- // COURSES WITH CATEGORIES
- if (!empty($user_course_categories)) {
- $counter = 0;
- $last = end($user_course_categories);
- foreach ($user_course_categories as $row) {
- echo Display::page_subheader($row['title']);
- echo '<a name="category'.$row['id'].'"></a>';
- $url = $currentUrl.'?categoryid='.$row['id'].'&sec_token='.$stok;
- if ($allowCollapsable) {
- if (isset($row['collapsed']) && $row['collapsed'] == 0) {
- echo Display::url(
- '<i class="fa fa-folder-open"></i>',
- $url.'&action=set_collapsable&option=1'
- );
- } else {
- echo Display::url(
- '<i class="fa fa-folder"></i>',
- $url.'&action=set_collapsable&option=0'
- );
- }
- }
- echo Display::url(
- Display::return_icon('edit.png', get_lang('Edit'), '', 22),
- $currentUrl.'?action=edit_category&category_id='.$row['id'].'&sec_token='.$stok,
- ['class' => 'ajax']
- );
- if (0 != $counter) {
- echo Display::url(
- Display::return_icon('up.png', get_lang('Up'), '', 22),
- $currentUrl.'?move=up&category='.$row['id'].'&sec_token='.$stok
- );
- } else {
- echo Display::return_icon('up_na.png', get_lang('Up'), '', 22);
- }
- if ($row['id'] != $last['id']) {
- echo Display::url(
- Display::return_icon('down.png', get_lang('down'), '', 22),
- $currentUrl.'?move=down&category='.$row['id'].'&sec_token='.$stok
- );
- } else {
- echo Display::return_icon('down_na.png', get_lang('down'), '', 22);
- }
- echo Display::url(
- Display::return_icon(
- 'delete.png',
- get_lang('Delete'),
- [
- 'onclick' => "javascript: if (!confirm('".addslashes(
- api_htmlentities(
- get_lang('Are you sure you want to delete this courses category? Courses inside this category will be moved outside the categories'),
- ENT_QUOTES,
- api_get_system_encoding()
- )
- )."')) return false;",
- ],
- 22
- ),
- $currentUrl.'?action=deletecoursecategory&id='.$row['id'].'&sec_token='.$stok
- );
- $counter++;
- echo '<br /><br />';
- // Show the courses inside this category
- echo '<table class="data_table">';
- $number_of_courses = isset($courses_in_category[$row['id']]) ? count($courses_in_category[$row['id']]) : 0;
- $key = 0;
- if (!empty($courses_in_category[$row['id']])) {
- foreach ($courses_in_category[$row['id']] as $course) {
- echo '<tr><td>';
- echo '<a name="course'.$course['code'].'"></a>';
- echo '<strong>'.$course['title'].'</strong>';
- echo ' ('.$course['visual_code'].')';
- echo '<br />';
- echo $teachersIcon;
- echo ' ';
- echo CourseManager::getTeacherListFromCourseCodeToString($course['code']);
- echo '<br />';
- if (api_get_setting('display_teacher_in_courselist') === 'true') {
- echo $course['tutor'];
- }
- echo '</td><td valign="top">'; ?>
- <div style="float:left;width:110px;">
- <?php
- if (api_get_setting('show_courses_descriptions_in_catalog') == 'true') {
- $icon_title = get_lang('Course description').' - '.$course['title']; ?>
- <a href="<?php echo api_get_path(WEB_CODE_PATH); ?>inc/ajax/course_home.ajax.php?a=show_course_information&code=<?php echo $course['code']; ?>" data-title="<?php echo $icon_title; ?>" title="<?php echo $icon_title; ?>" class="ajax">
- <?php
- echo Display::return_icon('info.png', $icon_title, '', '22');
- } ?>
- </a>
- <?php
- echo Display::url(
- Display::return_icon('edit.png', get_lang('Edit'), '', 22),
- $currentUrl.'?action=edit_course_category&category_id='.$row['id'].'&course_id='.$course['real_id'].'&sec_token='.$stok,
- ['class' => 'ajax']
- );
- if ($key > 0) {
- ?>
- <a href="<?php echo $currentUrl; ?>?action=<?php echo $action; ?>&move=up&course=<?php echo $course['code']; ?>&category=<?php echo $course['user_course_cat']; ?>&sec_token=<?php echo $stok; ?>">
- <?php echo Display::display_icon('up.png', get_lang('Up'), '', 22); ?>
- </a>
- <?php
- } else {
- echo Display::display_icon('up_na.png', get_lang('Up'), '', 22);
- }
- if ($key < $number_of_courses - 1) {
- ?>
- <a href="<?php echo $currentUrl; ?>?action=<?php echo $action; ?>&move=down&course=<?php echo $course['code']; ?>&category=<?php echo $course['user_course_cat']; ?>&sec_token=<?php echo $stok; ?>">
- <?php echo Display::return_icon('down.png', get_lang('down'), '', 22); ?>
- </a>
- <?php
- } else {
- echo Display::return_icon('down_na.png', get_lang('down'), '', 22);
- } ?>
- </div>
- <div style="float:left; margin-right:10px;">
- <?php
- if ($course['status'] != 1) {
- if ($course['unsubscr'] == 1) {
- ?>
- <form action="<?php echo api_get_self(); ?>" method="post" onsubmit="javascript: if (!confirm('<?php echo addslashes(api_htmlentities(get_lang("Are you sure you want to unsubscribe?"), ENT_QUOTES, api_get_system_encoding())); ?>')) return false">
- <input type="hidden" name="sec_token" value="<?php echo $stok; ?>">
- <input type="hidden" name="unsubscribe" value="<?php echo $course['code']; ?>" />
- <button class="btn btn-default" value="<?php echo get_lang('Unsubscribe'); ?>" name="unsub">
- <?php echo get_lang('Unsubscribe'); ?>
- </button>
- </form>
- </div>
- <?php
- }
- }
- $key++;
- }
- echo '</table>';
- }
- }
- }
- echo Display::page_subheader(get_lang('No courses category'));
- echo '<table class="data_table">';
- // COURSES WITHOUT CATEGORY
- if (!empty($courses_without_category)) {
- $number_of_courses = count($courses_without_category);
- $key = 0;
- foreach ($courses_without_category as $course) {
- echo '<tr><td>';
- echo '<a name="course'.$course['code'].'"></a>';
- echo '<strong>'.$course['title'].'</strong>';
- echo ' ('.$course['visual_code'].')';
- echo '<br />';
- echo $teachersIcon;
- echo ' ';
- echo CourseManager::getTeacherListFromCourseCodeToString($course['code']);
- echo '<br />';
- if (api_get_setting('display_teacher_in_courselist') === 'true') {
- echo $course['tutor'];
- }
- echo '</td><td valign="top">'; ?>
- <div style="float:left; width:110px">
- <?php
- if (api_get_setting('show_courses_descriptions_in_catalog') == 'true') {
- $icon_title = get_lang('Course description').' - '.$course['title']; ?>
- <a href="<?php echo api_get_path(WEB_CODE_PATH); ?>inc/ajax/course_home.ajax.php?a=show_course_information&code=<?php echo $course['code']; ?>" data-title="<?php echo $icon_title; ?>" title="<?php echo $icon_title; ?>" class="ajax">
- <?php echo Display::return_icon('info.png', $icon_title, '', '22'); ?>
- </a>
- <?php
- }
- echo '';
- if (isset($_GET['edit']) && $course['code'] == $_GET['edit']) {
- echo Display::return_icon('edit_na.png', get_lang('Edit'), '', 22);
- } else {
- echo Display::url(
- Display::return_icon('edit.png', get_lang('Edit'), '', 22),
- $currentUrl.'?action=edit_course_category&course_id='.$course['real_id'].'&'.$stok,
- ['class' => 'ajax']
- );
- }
- if ($key > 0) {
- ?>
- <a href="<?php echo $currentUrl; ?>?action=<?php echo $action; ?>&move=up&course=<?php echo $course['code']; ?>&category=<?php echo $course['user_course_cat']; ?>&sec_token=<?php echo $stok; ?>">
- <?php echo Display::display_icon('up.png', get_lang('Up'), '', 22); ?>
- </a>
- <?php
- } else {
- echo Display::return_icon('up_na.png', get_lang('Up'), '', 22);
- }
- if ($key < $number_of_courses - 1) {
- ?>
- <a href="<?php echo $currentUrl; ?>?action=<?php echo $action; ?>&move=down&course=<?php echo $course['code']; ?>&category=<?php echo $course['user_course_cat']; ?>&sec_token=<?php echo $stok; ?>">
- <?php echo Display::display_icon('down.png', get_lang('down'), '', 22); ?>
- </a>
- <?php
- } else {
- echo Display::return_icon('down_na.png', get_lang('down'), '', 22);
- } ?>
- </div>
- <div style="float:left; margin-right:10px;">
- <?php
- if ($course['status'] != 1) {
- if ($course['unsubscr'] == 1) {
- ?>
- <!-- changed link to submit to avoid action by the search tool indexer -->
- <form action="<?php echo api_get_self(); ?>" method="post" onsubmit="javascript: if (!confirm('<?php echo addslashes(api_htmlentities(get_lang("Are you sure you want to unsubscribe?"), ENT_QUOTES, api_get_system_encoding())); ?>')) return false;">
- <input type="hidden" name="sec_token" value="<?php echo $stok; ?>">
- <input type="hidden" name="unsubscribe" value="<?php echo $course['code']; ?>" />
- <button class="btn btn-default" value="<?php echo get_lang('Unsubscribe'); ?>" name="unsub">
- <?php echo get_lang('Unsubscribe'); ?>
- </button>
- </form>
- </div>
- <?php
- }
- } ?>
- </td>
- </tr>
- <?php
- $key++;
- }
- }
- ?>
- </table>
- <?php
- Display::display_footer();
|