*/ /** * Page controller */ use Silex\Application; use Pagerfanta\Adapter\FixedAdapter; use Pagerfanta\Pagerfanta; use Pagerfanta\View\TwitterBootstrapView; class PageController { public $maxPerPage = 5; private $app; public function __construct(Application $app) { $this->app = $app; } /** * Returns an HTML block with the user picture (as a link in a
) * @param int User ID (if not provided, will use the user ID from session) * @return string HTML div with a link to the user's profile * @uses UserManager::get_user_pictur_path_by_id() to get the image path * @uses UserManager::get_picture_user() to get the details of the image in a specific format * @uses PageController::show_right_block() to include the image in a larger user block * @assert (-1) === false */ public function return_user_image_block($user_id = null) { if (empty($user_id)) { $user_id = api_get_user_id(); } //Always show the user image $img_array = UserManager::get_user_picture_path_by_id($user_id, 'web', true, true); $no_image = false; if ($img_array['file'] == 'unknown.jpg') { $no_image = true; } $img_array = UserManager::get_picture_user($user_id, $img_array['file'], 100, USER_IMAGE_SIZE_ORIGINAL); $profile_content = null; if (api_get_setting('allow_social_tool') == 'true') { if (!$no_image) { $profile_content .= ' '; } else { $profile_content .= ' '; } } if (!empty($profile_content)) { $this->show_right_block(null, null, 'user_image_block', array('content' => $profile_content)); } } /** * Return a block with course-related links. The resulting HTML block's * contents are only based on the user defined by the active session. * * @return string HTML
with links * @assert () != '' */ public function return_course_block($filter = null) { $show_course_link = false; $display_add_course_link = false; if ((api_get_setting('allow_users_to_create_courses') == 'true' && api_is_allowed_to_create_course() || api_is_platform_admin()) ) { $display_add_course_link = true; } if (api_is_platform_admin() || api_is_course_admin() || api_is_allowed_to_create_course()) { $show_course_link = true; } else { if (api_get_setting('allow_students_to_browse_courses') == 'true') { $show_course_link = true; } } // My account section. $my_account_content = array(); if ($display_add_course_link) { $my_account_content[] = array( 'href' => api_get_path(WEB_CODE_PATH).'create_course/add_course.php', 'title' => api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang( 'CourseCreate' ) ); } // Sort courses. $url = api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses'; $my_account_content[] = array( 'href' => $url, 'title' => get_lang('SortMyCourses') ); // Course management. if ($show_course_link) { if (!api_is_drh()) { $my_account_content[] = array( 'href' => api_get_path(WEB_CODE_PATH).'auth/courses.php', 'title' => get_lang('CourseCatalog') ); if (isset($filter) && $filter == 'history') { $my_account_content[] = array( 'href' => api_get_path(WEB_PUBLIC_PATH).'userportal', 'title' => get_lang('DisplayTrainingList') ); } else { $my_account_content[] = array( 'href' => api_get_path(WEB_PUBLIC_PATH).'userportal/history', 'title' => get_lang('HistoryTrainingSessions') ); } } else { $my_account_content[] = array( 'href' => api_get_path(WEB_CODE_PATH).'dashboard/index.php', 'title' => get_lang('Dashboard') ); } } $this->show_right_block(get_lang('Courses'), $my_account_content, 'course_block'); } /** * Returns the profile block, showing links to the messaging and social * network tools. The user ID is taken from the active session * @return string HTML
block * @assert () != '' */ public function return_profile_block() { if (api_get_setting('allow_message_tool') == 'true') { if (api_get_setting('allow_social_tool') == 'true') { $this->show_right_block(get_lang('Profile'), array(), 'profile_social_block'); } else { $this->show_right_block(get_lang('Profile'), array(), 'profile_block'); } } } /** * Get the section course section */ public function getSectionCourseBlock() { $app = $this->app; $courseURL = $app['url_generator']->generate('userportal', array('type' => 'courses')); $sessionURL = $app['url_generator']->generate('userportal', array('type' => 'sessions')); $myCourseCategoriesURL = $app['url_generator']->generate('userportal', array('type' => 'mycoursecategories')); $specialCoursesURL = $app['url_generator']->generate('userportal', array('type' => 'specialcourses')); $sessionCategoriesURL = $app['url_generator']->generate('userportal', array('type' => 'sessioncategories')); $params = array( array('href' => $courseURL, 'title' => get_lang('Courses')), array('href' => $specialCoursesURL, 'title' => get_lang('SpecialCourses')), array('href' => $myCourseCategoriesURL, 'title' => get_lang('MyCourseCategories')), array('href' => $sessionURL, 'title' => get_lang('Sessions')), array('href' => $sessionCategoriesURL, 'title' => get_lang('SessionsCategories')), ); $this->show_right_block(get_lang('CourseSessionBlock'), $params, 'course_session_block'); } /** * Returns a list of the most popular courses of the moment (also called * "hot courses"). * @uses CourseManager::return_hot_courses() in fact, the current method is only a bypass to this method * @return string HTML
with the most popular courses * @assert () != '' */ public function return_hot_courses() { return CourseManager::return_hot_courses(); } /** * Returns an online help block read from the home/home_menu_[lang].html * file * @return string HTML block * @assert () != '' */ public function return_help() { $home = api_get_home_path(); $user_selected_language = api_get_interface_language(); $sys_path = api_get_path(SYS_PATH); $platformLanguage = api_get_setting('platformLanguage'); if (!isset($user_selected_language)) { $user_selected_language = $platformLanguage; } $home_menu = @(string)file_get_contents($sys_path.$home.'home_menu_'.$user_selected_language.'.html'); if (!empty($home_menu)) { $home_menu_content = api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu))); $this->show_right_block( get_lang('MenuGeneral'), null, 'help_block', array('content' => $home_menu_content) ); } } /** * Returns an HTML block with links to the skills tools * @return string HTML
block * @assert () != '' */ public function return_skills_links() { if (api_get_setting('allow_skills_tool') == 'true') { $content = array(); $content[] = array( 'title' => get_lang('MySkills'), 'href' => api_get_path(WEB_CODE_PATH).'social/skills_wheel.php' ); if (api_get_setting('allow_hr_skills_management') == 'true' || api_is_platform_admin()) { $content[] = array( 'title' => get_lang('ManageSkills'), 'href' => api_get_path(WEB_CODE_PATH).'admin/skills_wheel.php' ); } $this->show_right_block(get_lang("Skills"), $content, 'skill_block'); } } /** * Returns an HTML block with the notice, as found in the * home/home_notice_[lang].html file * @return string HTML
block * @assert () != '' */ public function return_notice() { $sys_path = api_get_path(SYS_PATH); $user_selected_language = api_get_interface_language(); $home = api_get_home_path(); // Notice $home_notice = @(string)file_get_contents($sys_path.$home.'home_notice_'.$user_selected_language.'.html'); if (empty($home_notice)) { $home_notice = @(string)file_get_contents($sys_path.$home.'home_notice.html'); } if (!empty($home_notice)) { $home_notice = api_to_system_encoding($home_notice, api_detect_encoding(strip_tags($home_notice))); $home_notice = Display::div($home_notice, array('class' => 'homepage_notice')); $this->show_right_block(get_lang('Notice'), null, 'notice_block', array('content' => $home_notice)); } } /** * Returns the received content packaged in
block, with the title as *

* @param string Title to include as h4 * @param string Longer content to show (usually a
    list) * @param string ID to be added to the HTML attributes for the block * @param array Array of attributes to add to the HTML block * @return string HTML
    block * @assert ('a','') != '' * @todo use the menu builder */ public function show_right_block($title, $content, $id, $params = null) { $app = $this->app; if (!empty($id)) { $params['id'] = $id; } $block_menu = array( 'id' => $params['id'], 'title' => $title, 'elements' => $content, 'content' => isset($params['content']) ? $params['content'] : null ); $app['template']->assign($id, $block_menu); } /** * Adds a form to let users login * @return string An HTML string with the user login form * @assert () != '' * @version 1.1 */ public function displayLoginForm() { $form = new FormValidator('formLogin', 'POST', null, null, array('class' => 'form-vertical')); // 'placeholder'=>get_lang('UserName') //'autocomplete'=>"off", $form->addElement( 'text', 'login', get_lang('UserName'), array('class' => 'span2 autocapitalize_off', 'autofocus' => 'autofocus') ); $form->addElement('password', 'password', get_lang('Pass'), array('class' => 'span2')); $form->addElement('style_submit_button', 'submitAuth', get_lang('LoginEnter'), array('class' => 'btn')); $html = $form->return_form(); if (api_get_setting('openid_authentication') == 'true') { include_once 'main/auth/openid/login.php'; $html .= '
    '.openid_form().'
    '; } return $html; } /** * Returns a content search form in an HTML
    , pointing at the * main/search/ directory. If search_enabled is not set, then it returns * an empty string * @return string HTML
    block showing the search form, or an empty string if search not enabled * @assert () !== false */ public function return_search_block() { $html = ''; if (api_get_setting('search_enabled') == 'true') { $html .= ''; $html .= $this->show_right_block(get_lang('Search'), $search_content, 'search_block'); } return $html; } /** * Returns a list of announcements * @param int User ID * @param bool True: show the announcements as a slider. False: show them as a vertical list * @return string HTML list of announcements * @assert () != '' * @assert (1) != '' */ public function return_announcements($user_id = null, $show_slide = true) { // Display System announcements $announcement = isset($_GET['announcement']) ? intval($_GET['announcement']) : null; if (!api_is_anonymous() && $user_id) { $visibility = api_is_allowed_to_create_course( ) ? SystemAnnouncementManager::VISIBLE_TEACHER : SystemAnnouncementManager::VISIBLE_STUDENT; if ($show_slide) { $announcements = SystemAnnouncementManager :: display_announcements_slider($visibility, $announcement); } else { $announcements = SystemAnnouncementManager :: display_all_announcements($visibility, $announcement); } } else { if ($show_slide) { $announcements = SystemAnnouncementManager :: display_announcements_slider( SystemAnnouncementManager::VISIBLE_GUEST, $announcement ); } else { $announcements = SystemAnnouncementManager :: display_all_announcements( SystemAnnouncementManager::VISIBLE_GUEST, $announcement ); } } return $announcements; } /** * Return the homepage, including announcements * @return string The portal's homepage as an HTML string * @assert () != '' */ public function returnHomePage() { // Including the page for the news $html = null; $home = api_get_path(SYS_DATA_PATH).api_get_home_path(); $home_top_temp = null; if (!empty($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/', $_GET['include'])) { $open = @(string)file_get_contents(api_get_path(SYS_PATH).$home.$_GET['include']); $html = api_to_system_encoding($open, api_detect_encoding(strip_tags($open))); } else { $user_selected_language = api_get_user_language(); if (!file_exists($home.'home_news_'.$user_selected_language.'.html')) { if (file_exists($home.'home_top.html')) { $home_top_temp = file($home.'home_top.html'); } else { //$home_top_temp = file('home/'.'home_top.html'); } if (!empty($home_top_temp)) { $home_top_temp = implode('', $home_top_temp); } } else { if (file_exists($home.'home_top_'.$user_selected_language.'.html')) { $home_top_temp = file_get_contents($home.'home_top_'.$user_selected_language.'.html'); } else { $home_top_temp = file_get_contents($home.'home_top.html'); } } if (empty($home_top_temp) && api_is_platform_admin()) { $home_top_temp = get_lang('PortalHomepageDefaultIntroduction'); } $open = str_replace('{rel_path}', api_get_path(REL_PATH), $home_top_temp); if (!empty($open)) { $html = api_to_system_encoding($open, api_detect_encoding(strip_tags($open))); } } return $html; } /** * Returns the reservation block (if the reservation tool is enabled) * @return string HTML block, or empty string if reservation tool is disabled * @assert () == '' */ public function return_reservation_block() { $html = ''; $booking_content = null; if (api_get_setting('allow_reservation') == 'true' && api_is_allowed_to_create_course()) { $booking_content .= ''; $html .= $this->show_right_block(get_lang('Booking'), $booking_content, 'reservation_block'); } return $html; } /** * Returns an HTML block with classes (if show_groups_to_users is true) * @return string A list of links to users classes tools, or an empty string if show_groups_to_users is disabled * @assert () == '' */ public function return_classes_block() { $html = ''; if (api_get_setting('show_groups_to_users') == 'true') { $usergroup = new Usergroup(); $usergroup_list = $usergroup->get_usergroup_by_user(api_get_user_id()); $classes = ''; if (!empty($usergroup_list)) { foreach ($usergroup_list as $group_id) { $data = $usergroup->get($group_id); $data['name'] = Display::url( $data['name'], api_get_path(WEB_CODE_PATH).'user/classes.php?id='.$data['id'] ); $classes .= Display::tag('li', $data['name']); } } if (api_is_platform_admin()) { $classes .= Display::tag( 'li', Display::url(get_lang('AddClasses'), api_get_path(WEB_CODE_PATH).'admin/usergroups.php?action=add') ); } if (!empty($classes)) { $classes = Display::tag('ul', $classes, array('class' => 'nav nav-list')); $html .= $this->show_right_block(get_lang('Classes'), $classes, 'classes_block'); } } return $html; } /** * Prepares a block with all the pending exercises in all courses * @param array Array of courses (arrays) of the user * @return void Doesn't return anything but prepares and HTML block for use in templates * @assert () !== 1 */ public function return_exercise_block($personal_course_list, $tpl) { $exercise_list = array(); if (!empty($personal_course_list)) { foreach ($personal_course_list as $course_item) { $course_code = $course_item['c']; $session_id = $course_item['id_session']; $exercises = ExerciseLib::get_exercises_to_be_taken($course_code, $session_id); foreach ($exercises as $exercise_item) { $exercise_item['course_code'] = $course_code; $exercise_item['session_id'] = $session_id; $exercise_item['tms'] = api_strtotime($exercise_item['end_time'], 'UTC'); $exercise_list[] = $exercise_item; } } if (!empty($exercise_list)) { $exercise_list = ArrayClass::msort($exercise_list, 'tms'); $my_exercise = $exercise_list[0]; $url = Display::url( $my_exercise['title'], api_get_path( WEB_CODE_PATH ).'exercice/overview.php?exerciseId='.$my_exercise['id'].'&cidReq='.$my_exercise['course_code'].'&id_session='.$my_exercise['session_id'] ); $tpl->assign('exercise_url', $url); $tpl->assign( 'exercise_end_date', api_convert_and_format_date($my_exercise['end_time'], DATE_FORMAT_SHORT) ); } } } /** * Returns links to teachers tools (create course, etc) based on the user * in the active session * @return string HTML
    block * @assert () == '' */ public function return_teacher_link() { $user_id = api_get_user_id(); if (!empty($user_id)) { // tabs that are deactivated are added here $show_menu = false; $show_create_link = false; $show_course_link = false; if (api_is_platform_admin() || api_is_course_admin() || api_is_allowed_to_create_course()) { $show_menu = true; $show_course_link = true; } else { if (api_get_setting('allow_students_to_browse_courses') == 'true') { $show_menu = true; $show_course_link = true; } } if ($show_menu && ($show_create_link || $show_course_link)) { $show_menu = true; } else { $show_menu = false; } } // My Account section $elements = array(); if ($show_menu) { if ($show_create_link) { $elements[] = array( 'href' => api_get_path(WEB_CODE_PATH).'create_course/add_course.php', 'title' => (api_get_setting('course_validation') == 'true' ? get_lang( 'CreateCourseRequest' ) : get_lang('CourseCreate')) ); } if ($show_course_link) { if (!api_is_drh() && !api_is_session_admin()) { $elements[] = array( 'href' => api_get_path(WEB_CODE_PATH).'auth/courses.php', 'title' => get_lang('CourseCatalog') ); } else { $elements[] = array( 'href' => api_get_path(WEB_CODE_PATH).'dashboard/index.php', 'title' => get_lang('Dashboard') ); } } } $this->show_right_block(get_lang('Courses'), $elements, 'teacher_block'); } /** * Display list of courses in a category. * (for anonymous users) * * @version 1.1 * @author Patrick Cool , Ghent University - refactoring and code cleaning * @author Julio Montoya , Beeznest template modifs * @assert () !== 0 */ public function return_courses_in_categories() { $result = ''; $stok = Security::get_token(); // Initialization. $user_identified = (api_get_user_id() > 0 && !api_is_anonymous()); $web_course_path = api_get_path(WEB_COURSE_PATH); $category = Database::escape_string($_GET['category']); $setting_show_also_closed_courses = api_get_setting('show_closed_courses') == 'true'; // Database table definitions. $main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE); $main_category_table = Database :: get_main_table(TABLE_MAIN_CATEGORY); // Get list of courses in category $category. $sql_get_course_list = "SELECT * FROM $main_course_table cours WHERE category_code = '".Database::escape_string($_GET['category'])."' ORDER BY title, UPPER(visual_code)"; // Showing only the courses of the current access_url_id. if (api_is_multiple_url_enabled()) { $url_access_id = api_get_current_access_url_id(); if ($url_access_id != -1) { $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $sql_get_course_list = "SELECT * FROM $main_course_table as course INNER JOIN $tbl_url_rel_course as url_rel_course ON (url_rel_course.c_id = course.id) WHERE access_url_id = $url_access_id AND category_code = '".Database::escape_string( $_GET['category'] )."' ORDER BY title, UPPER(visual_code)"; } } // Removed: AND cours.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' $sql_result_courses = Database::query($sql_get_course_list); while ($course_result = Database::fetch_array($sql_result_courses)) { $course_list[] = $course_result; } $platform_visible_courses = ''; // $setting_show_also_closed_courses if ($user_identified) { if ($setting_show_also_closed_courses) { $platform_visible_courses = ''; } else { $platform_visible_courses = " AND (t3.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' OR t3.visibility='".COURSE_VISIBILITY_OPEN_PLATFORM."' )"; } } else { if ($setting_show_also_closed_courses) { $platform_visible_courses = ''; } else { $platform_visible_courses = " AND (t3.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' )"; } } $sqlGetSubCatList = " SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse FROM $main_category_table t1 LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id LEFT JOIN $main_course_table t3 ON (t3.category_code=t1.code $platform_visible_courses) WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count ORDER BY t1.tree_pos, t1.name"; // Showing only the category of courses of the current access_url_id if (api_is_multiple_url_enabled()) { $url_access_id = api_get_current_access_url_id(); if ($url_access_id != -1) { $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $sqlGetSubCatList = " SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse FROM $main_category_table t1 LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id LEFT JOIN $main_course_table t3 ON (t3.category_code=t1.code $platform_visible_courses) INNER JOIN $tbl_url_rel_course as url_rel_course ON (url_rel_course.c_id = t3.id) WHERE access_url_id = $url_access_id AND t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count ORDER BY t1.tree_pos, t1.name"; } } $resCats = Database::query($sqlGetSubCatList); $thereIsSubCat = false; if (Database::num_rows($resCats) > 0) { $htmlListCat = Display::page_header(get_lang('CatList')); $htmlListCat .= '
      '; while ($catLine = Database::fetch_array($resCats)) { if ($catLine['code'] != $category) { $category_has_open_courses = $this->category_has_open_courses($catLine['code']); if ($category_has_open_courses) { // The category contains courses accessible to anonymous visitors. $htmlListCat .= '
    • '; $htmlListCat .= ''.$catLine['name'].''; if (api_get_setting('show_number_of_courses') == 'true') { $htmlListCat .= ' ('.$catLine['nbCourse'].' '.get_lang('Courses').')'; } $htmlListCat .= "
    • "; $thereIsSubCat = true; } elseif ($catLine['children_count'] > 0) { // The category has children, subcategories. $htmlListCat .= '
    • '; $htmlListCat .= ''.$catLine['name'].''; $htmlListCat .= "
    • "; $thereIsSubCat = true; } /* End changed code to eliminate the (0 courses) after empty categories. */ elseif (api_get_setting( 'show_empty_course_categories' ) == 'true' ) { $htmlListCat .= '
    • '; $htmlListCat .= $catLine['name']; $htmlListCat .= "
    • "; $thereIsSubCat = true; } // Else don't set thereIsSubCat to true to avoid printing things if not requested. } else { $htmlTitre = '

      '; if (api_get_setting('show_back_link_on_top_of_tree') == 'true') { $htmlTitre .= '<< '.get_lang('BackToHomePage').''; } if (!is_null($catLine['parent_id']) || (api_get_setting( 'show_back_link_on_top_of_tree' ) != 'true' && !is_null($catLine['code'])) ) { $htmlTitre .= '<< '.get_lang('Up').''; } $htmlTitre .= "

      "; if ($category != "" && !is_null($catLine['code'])) { $htmlTitre .= '

      '.$catLine['name']."

      "; } else { $htmlTitre .= '

      '.get_lang('Categories')."

      "; } } } $htmlListCat .= "
    "; } $result .= $htmlTitre; if ($thereIsSubCat) { $result .= $htmlListCat; } while ($categoryName = Database::fetch_array($resCats)) { $result .= '

    '.$categoryName['name']."

    \n"; } $numrows = Database::num_rows($sql_result_courses); $courses_list_string = ''; $courses_shown = 0; if ($numrows > 0) { $courses_list_string .= Display::page_header(get_lang('CourseList')); $courses_list_string .= "
      "; if (api_get_user_id()) { $courses_of_user = $this->get_courses_of_user(api_get_user_id()); } foreach ($course_list as $course) { // $setting_show_also_closed_courses if (!$setting_show_also_closed_courses) { // If we do not show the closed courses // we only show the courses that are open to the world (to everybody) // and the courses that are open to the platform (if the current user is a registered user. if (($user_identified && $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM) || ($course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD)) { $courses_shown++; $courses_list_string .= "
    • \n"; $courses_list_string .= ''.$course['title'].'
      '; $course_details = array(); if (api_get_setting('display_coursecode_in_courselist') == 'true') { $course_details[] = $course['visual_code']; } if (api_get_setting('display_teacher_in_courselist') == 'true') { $course_details[] = $course['tutor_name']; } if (api_get_setting( 'show_different_course_language' ) == 'true' && $course['course_language'] != api_get_setting('platformLanguage') ) { $course_details[] = $course['course_language']; } $courses_list_string .= implode(' - ', $course_details); $courses_list_string .= "
    • \n"; } } else { // We DO show the closed courses. // The course is accessible if (link to the course homepage): // 1. the course is open to the world (doesn't matter if the user is logged in or not): $course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD); // 2. the user is logged in and the course is open to the world or open to the platform: ($user_identified && $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM); // 3. the user is logged in and the user is subscribed to the course and the course visibility is not COURSE_VISIBILITY_CLOSED; // 4. the user is logged in and the user is course admin of te course (regardless of the course visibility setting); // 5. the user is the platform admin api_is_platform_admin(). // $courses_shown++; $courses_list_string .= "
    • \n"; if ($course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD || ($user_identified && $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM) || ($user_identified && key_exists( $course['code'], $courses_of_user ) && $course['visibility'] != COURSE_VISIBILITY_CLOSED) || $courses_of_user[$course['code']]['status'] == '1' || api_is_platform_admin() ) { $courses_list_string .= ''; } $courses_list_string .= $course['title']; if ($course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD || ($user_identified && $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM) || ($user_identified && key_exists( $course['code'], $courses_of_user ) && $course['visibility'] != COURSE_VISIBILITY_CLOSED) || $courses_of_user[$course['code']]['status'] == '1' || api_is_platform_admin() ) { $courses_list_string .= '
      '; } $course_details = array(); if (api_get_setting('display_coursecode_in_courselist') == 'true') { $course_details[] = $course['visual_code']; } // if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { // $courses_list_string .= ' - '; // } if (api_get_setting('display_teacher_in_courselist') == 'true') { $course_details[] = $course['tutor_name']; } if (api_get_setting( 'show_different_course_language' ) == 'true' && $course['course_language'] != api_get_setting('platformLanguage') ) { $course_details[] = $course['course_language']; } if (api_get_setting( 'show_different_course_language' ) == 'true' && $course['course_language'] != api_get_setting('platformLanguage') ) { $course_details[] = $course['course_language']; } $courses_list_string .= implode(' - ', $course_details); // We display a subscription link if: // 1. it is allowed to register for the course and if the course is not already in the courselist of the user and if the user is identiefied // 2. if ($user_identified && !key_exists($course['code'], $courses_of_user)) { if ($course['subscribe'] == '1') { $courses_list_string .= '
      '; $courses_list_string .= ''; $courses_list_string .= ''; $courses_list_string .= ''.get_lang('Subscribe').'
      '; } else { $courses_list_string .= '
      '.get_lang('SubscribingNotAllowed'); } } $courses_list_string .= "
    • "; } //end else } // end foreach $courses_list_string .= "
    "; } if ($courses_shown > 0) { // Only display the list of courses and categories if there was more than // 0 courses visible to the world (we're in the anonymous list here). $result .= $courses_list_string; } if ($category != '') { $result .= '

    '.Display :: return_icon( 'back.png', get_lang('BackToHomePage') ).get_lang('BackToHomePage').'

    '; } return $result; } public function returnMyCourseCategories($user_id, $filter, $page) { if (empty($user_id)) { return false; } $loadDirs = api_get_setting('show_documents_preview') == 'true' ? true : false; $start = ($page - 1) * $this->maxPerPage; $nbResults = (int)CourseManager::displayPersonalCourseCategories($user_id, $filter, $loadDirs, true); $html = CourseManager::displayPersonalCourseCategories( $user_id, $filter, $loadDirs, false, $start, $this->maxPerPage ); $adapter = new FixedAdapter($nbResults, array()); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($this->maxPerPage); // 10 by default $pagerfanta->setCurrentPage($page); // 1 by default $this->app['pagerfanta.view.router.name'] = 'userportal'; $this->app['pagerfanta.view.router.params'] = array( 'filter' => $filter, 'type' => 'courses', 'page' => $page ); $this->app['template']->assign('pagination', $pagerfanta); return $html; } function returnSpecialCourses($user_id, $filter, $page) { if (empty($user_id)) { return false; } $loadDirs = api_get_setting('show_documents_preview') == 'true' ? true : false; $start = ($page - 1) * $this->maxPerPage; $nbResults = CourseManager::displaySpecialCourses($user_id, $filter, $loadDirs, true); $html = CourseManager::displaySpecialCourses($user_id, $filter, $loadDirs, false, $start, $this->maxPerPage); if (!empty($html)) { $adapter = new FixedAdapter($nbResults, array()); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($this->maxPerPage); // 10 by default $pagerfanta->setCurrentPage($page); // 1 by default $this->app['pagerfanta.view.router.name'] = 'userportal'; $this->app['pagerfanta.view.router.params'] = array( 'filter' => $filter, 'type' => 'courses', 'page' => $page ); $this->app['template']->assign('pagination', $pagerfanta); } return $html; } /** * The most important function here, prints the session and course list (user_portal.php) * * @param int User id * @param string filter * @param int page * @return string HTML list of sessions and courses * @assert () === false * */ public function returnCourses($user_id, $filter, $page) { if (empty($user_id)) { return false; } $loadDirs = api_get_setting('show_documents_preview') == 'true' ? true : false; $start = ($page - 1) * $this->maxPerPage; $nbResults = CourseManager::displayCourses($user_id, $filter, $loadDirs, true); $html = CourseManager::displayCourses($user_id, $filter, $loadDirs, false, $start, $this->maxPerPage); if (!empty($html)) { $adapter = new FixedAdapter($nbResults, array()); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($this->maxPerPage); // 10 by default $pagerfanta->setCurrentPage($page); // 1 by default /* Original pagination construction $view = new TwitterBootstrapView(); $routeGenerator = function($page) use ($app, $filter) { return $app['url_generator']->generate('userportal', array( 'filter' => $filter, 'type' => 'courses', 'page' => $page) ); }; $pagination = $view->render($pagerfanta, $routeGenerator, array( 'proximity' => 3, )); */ //Pagination using the pagerfanta silex service provider $this->app['pagerfanta.view.router.name'] = 'userportal'; $this->app['pagerfanta.view.router.params'] = array( 'filter' => $filter, 'type' => 'courses', 'page' => $page ); $this->app['template']->assign('pagination', $pagerfanta); } return $html; } public function returnSessionsCategories($user_id, $filter, $page) { if (empty($user_id)) { return false; } $load_history = (isset($filter) && $filter == 'history') ? true : false; $start = ($page - 1) * $this->maxPerPage; $nbResults = UserManager::getCategories($user_id, false, true, true); $session_categories = UserManager::getCategories($user_id, false, false, true, $start, $this->maxPerPage); $html = null; //Showing history title if ($load_history) { $html .= Display::page_subheader(get_lang('HistoryTrainingSession')); if (empty($session_categories)) { $html .= get_lang('YouDoNotHaveAnySessionInItsHistory'); } } $load_directories_preview = api_get_setting('show_documents_preview') == 'true' ? true : false; $sessions_with_category = $html; if (isset($session_categories) && !empty($session_categories)) { foreach ($session_categories as $session_category) { $session_category_id = $session_category['session_category']['id']; // All sessions included in $count_courses_session = 0; $html_sessions = ''; foreach ($session_category['sessions'] as $session) { $session_id = $session['session_id']; // Don't show empty sessions. if (count($session['courses']) < 1) { continue; } $html_courses_session = ''; $count = 0; foreach ($session['courses'] as $course) { if (api_get_setting('hide_courses_in_sessions') == 'false') { $html_courses_session .= CourseManager::get_logged_user_course_html($course, $session_id); } $count_courses_session++; $count++; } $params = array(); if ($count > 0) { $params['icon'] = Display::return_icon( 'window_list.png', $session['session_name'], array('id' => 'session_img_'.$session_id), ICON_SIZE_LARGE ); //Default session name $session_link = $session['session_name']; $params['link'] = null; if (api_get_setting('session_page_enabled') == 'true' && !api_is_drh()) { //session name with link $session_link = Display::tag( 'a', $session['session_name'], array('href' => api_get_path(WEB_CODE_PATH).'session/index.php?session_id='.$session_id) ); $params['link'] = api_get_path(WEB_CODE_PATH).'session/index.php?session_id='.$session_id; } $params['title'] = $session_link; $moved_status = SessionManager::get_session_change_user_reason($session['moved_status']); $moved_status = isset($moved_status) && !empty($moved_status) ? ' ('.$moved_status.')' : null; $params['subtitle'] = isset($session['coach_info']) ? $session['coach_info']['complete_name'] : null.$moved_status; $params['dates'] = $session['date_message']; if (api_is_platform_admin()) { $params['right_actions'] = ''.Display::return_icon( 'edit.png', get_lang('Edit'), array('align' => 'absmiddle'), ICON_SIZE_SMALL ).''; } $html_sessions .= CourseManager::course_item_html($params, true).$html_courses_session; } } if ($count_courses_session > 0) { $params = array(); $params['icon'] = Display::return_icon( 'folder_blue.png', $session_category['session_category']['name'], array(), ICON_SIZE_LARGE ); if (api_is_platform_admin()) { $params['right_actions'] = ''.Display::return_icon( 'edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL ).''; } $params['title'] = $session_category['session_category']['name']; if (api_is_platform_admin()) { $params['link'] = api_get_path( WEB_CODE_PATH ).'admin/session_category_edit.php?&id='.$session_category['session_category']['id']; } $session_category_start_date = $session_category['session_category']['date_start']; $session_category_end_date = $session_category['session_category']['date_end']; if (!empty($session_category_start_date) && $session_category_start_date != '0000-00-00' && !empty($session_category_end_date) && $session_category_end_date != '0000-00-00') { $params['subtitle'] = sprintf( get_lang('FromDateXToDateY'), $session_category['session_category']['date_start'], $session_category['session_category']['date_end'] ); } else { if (!empty($session_category_start_date) && $session_category_start_date != '0000-00-00') { $params['subtitle'] = get_lang('From').' '.$session_category_start_date; } if (!empty($session_category_end_date) && $session_category_end_date != '0000-00-00') { $params['subtitle'] = get_lang('Until').' '.$session_category_end_date; } } $sessions_with_category .= CourseManager::course_item_parent( CourseManager::course_item_html($params, true), $html_sessions ); } } //Pagination $adapter = new FixedAdapter($nbResults, array()); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($this->maxPerPage); // 10 by default $pagerfanta->setCurrentPage($page); // 1 by default $this->app['pagerfanta.view.router.name'] = 'userportal'; $this->app['pagerfanta.view.router.params'] = array( 'filter' => $filter, 'type' => 'sessioncategories', 'page' => $page ); $this->app['template']->assign('pagination', $pagerfanta); } return $sessions_with_category; } /** * @param int $user_id * @param string $filter current|history * @param int $page * @return bool|null|string */ public function returnSessions($user_id, $filter, $page) { if (empty($user_id)) { return false; } $app = $this->app; $loadHistory = (isset($filter) && $filter == 'history') ? true : false; $app['session_menu'] = function ($app) use ($loadHistory) { $menu = $app['knp_menu.factory']->createItem( 'root', array( 'childrenAttributes' => array( 'class' => 'nav nav-tabs', 'currentClass' => 'active' ) ) ); $current = $menu->addChild( get_lang('Current'), array( 'route' => 'userportal', 'routeParameters' => array( 'filter' => 'current', 'type' => 'sessions' ) ) ); $history = $menu->addChild( get_lang('HistoryTrainingSession'), array( 'route' => 'userportal', 'routeParameters' => array( 'filter' => 'history', 'type' => 'sessions' ) ) ); //@todo use URIVoter if ($loadHistory) { $history->setCurrent(true); } else { $current->setCurrent(true); } return $menu; }; //@todo move this in template $app['knp_menu.menus'] = array('actions_menu' => 'session_menu'); $start = ($page - 1) * $this->maxPerPage; if ($loadHistory) { // Load sessions in category in *history*. $nbResults = (int)UserManager::get_sessions_by_category( $user_id, true, true, true, null, null, 'no_category' ); $session_categories = UserManager::get_sessions_by_category( $user_id, true, false, true, $start, $this->maxPerPage, 'no_category' ); } else { // Load sessions in category. $nbResults = (int)UserManager::get_sessions_by_category( $user_id, false, true, false, null, null, 'no_category' ); $session_categories = UserManager::get_sessions_by_category( $user_id, false, false, false, $start, $this->maxPerPage, 'no_category' ); } $html = null; // Showing history title if ($loadHistory) { // $html .= Display::page_subheader(get_lang('HistoryTrainingSession')); if (empty($session_categories)) { $html .= get_lang('YouDoNotHaveAnySessionInItsHistory'); } } $load_directories_preview = api_get_setting('show_documents_preview') == 'true' ? true : false; $sessions_with_no_category = $html; if (isset($session_categories) && !empty($session_categories)) { foreach ($session_categories as $session_category) { $session_category_id = $session_category['session_category']['id']; // Sessions does not belong to a session category if ($session_category_id == 0) { // Independent sessions if (isset($session_category['sessions'])) { foreach ($session_category['sessions'] as $session) { $session_id = $session['session_id']; // Don't show empty sessions. if (count($session['courses']) < 1) { continue; } $html_courses_session = ''; $count_courses_session = 0; foreach ($session['courses'] as $course) { //Read only and accessible if (api_get_setting('hide_courses_in_sessions') == 'false') { $html_courses_session .= CourseManager::get_logged_user_course_html( $course, $session_id, $load_directories_preview ); } $count_courses_session++; } if ($count_courses_session > 0) { $params = array(); $params['icon'] = Display::return_icon( 'window_list.png', $session['session_name'], array('id' => 'session_img_'.$session_id), ICON_SIZE_LARGE ); $params['is_session'] = true; //Default session name $session_link = $session['session_name']; $params['link'] = null; if (api_get_setting('session_page_enabled') == 'true' && !api_is_drh()) { //session name with link $session_link = Display::tag( 'a', $session['session_name'], array( 'href' => api_get_path( WEB_CODE_PATH ).'session/index.php?session_id='.$session_id ) ); $params['link'] = api_get_path( WEB_CODE_PATH ).'session/index.php?session_id='.$session_id; } $params['title'] = $session_link; $moved_status = SessionManager::get_session_change_user_reason( $session['moved_status'] ); $moved_status = isset($moved_status) && !empty($moved_status) ? ' ('.$moved_status.')' : null; $params['subtitle'] = isset($session['coach_info']) ? $session['coach_info']['complete_name'] : null.$moved_status; $params['dates'] = $session['date_message']; $params['right_actions'] = ''; if (api_is_platform_admin()) { $params['right_actions'] .= ''; $params['right_actions'] .= Display::return_icon( 'edit.png', get_lang('Edit'), array('align' => 'absmiddle'), ICON_SIZE_SMALL ).''; } if (api_get_setting('hide_courses_in_sessions') == 'false') { // $params['extra'] .= $html_courses_session; } $sessions_with_no_category .= CourseManager::course_item_parent( CourseManager::course_item_html($params, true), $html_courses_session ); } } } } } $adapter = new FixedAdapter($nbResults, array()); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($this->maxPerPage); // 10 by default $pagerfanta->setCurrentPage($page); // 1 by default $this->app['pagerfanta.view.router.name'] = 'userportal'; $this->app['pagerfanta.view.router.params'] = array( 'filter' => $filter, 'type' => 'sessions', 'page' => $page ); $this->app['template']->assign('pagination', $pagerfanta); } return $sessions_with_no_category; } /** * Shows a welcome message when the user doesn't have any content in * the course list * @param object A Template object used to declare variables usable in the given template * @return void * @assert () === false */ public function return_welcome_to_course_block($tpl) { if (empty($tpl)) { return false; } $count_courses = CourseManager::count_courses(); $course_catalog_url = api_get_path(WEB_CODE_PATH).'auth/courses.php'; $course_list_url = api_get_path(WEB_PATH).'user_portal.php'; $tpl->assign('course_catalog_url', $course_catalog_url); $tpl->assign('course_list_url', $course_list_url); $tpl->assign('course_catalog_link', Display::url(get_lang('here'), $course_catalog_url)); $tpl->assign('course_list_link', Display::url(get_lang('here'), $course_list_url)); $tpl->assign('count_courses', $count_courses); $tpl->assign('welcome_to_course_block', 1); } /** * @param array */ public function returnNavigationLinks($items) { // Main navigation section. // Tabs that are deactivated are added here. if (!empty($items)) { $content = ''; $this->show_right_block(get_lang('MainNavigation'), null, 'navigation_block', array('content' => $content)); } } }