Browse Source

Adding Smarty 3 support only for chamilo/index-smarty.php and chamilo/userportal-smarty.php for test purposes

Julio Montoya 13 years ago
parent
commit
449bcf0cbf

+ 43 - 0
index-smarty.php

@@ -0,0 +1,43 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+/**
+ * @package chamilo.main
+ */
+
+define('CHAMILO_HOMEPAGE', true);
+
+$language_file = array('courses', 'index');
+
+/* Flag forcing the 'current course' reset, as we're not inside a course anymore. */
+// Maybe we should change this into an api function? an example: Coursemanager::unset();
+$cidReset = true;
+
+/* Included libraries */
+// The section (for the tabs).
+$this_section = SECTION_CAMPUS;
+
+require_once 'main/inc/global.inc.php';
+require_once api_get_path(LIBRARY_PATH).'userportal.lib.php';
+
+$header_title = null;
+if (!api_is_anonymous()) {
+	$header_title = " ";
+}
+
+$index = new IndexManager($header_title);
+ 
+$tpl = $index->tpl->get_template('layout/layout_two_col.tpl');
+
+$user_id        = api_get_user_id();
+
+//@todo move this inside the IndexManager
+$index->tpl->assign('login_block', 				$index->show_login_form($user_id));
+$index->tpl->assign('teacher_block', 			$index->display_teacher_link($user_id));
+$index->tpl->assign('home_page', 				$index->return_home_page());
+
+$index->tpl->assign('profile_block', 			$index->return_profile_block());
+$index->tpl->assign('notice_block',				$index->return_notice($home));
+$index->tpl->assign('plugin_campushomepage', 	$index->return_plugin_campushomepage());
+
+$index->tpl->display($tpl);

+ 16 - 752
index.php

@@ -26,7 +26,9 @@ require_once 'main/inc/global.inc.php';
 
 require_once api_get_path(LIBRARY_PATH).'system_announcements.lib.php';
 require_once api_get_path(LIBRARY_PATH).'groupmanager.lib.php';
-require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php';
+
+require_once api_get_path(LIBRARY_PATH).'userportal.lib.php';
+
 require_once 'main/chat/chat_functions.lib.php';
 
 $loginFailed = isset($_GET['loginFailed']) ? true : isset($loginFailed);
@@ -148,6 +150,10 @@ $(document).ready(function(){
 
 Display::display_header($header_title);
 
+
+$index = new IndexManager($header_title, false);
+
+
 /* MAIN CODE */
 
 echo '<div id="content" class="maincontent">';
@@ -159,62 +165,11 @@ if (!api_get_user_id()) {
     api_plugin('campushomepage_main');
 }
 
-$home = 'home/';
-if (api_get_multiple_access_url()) {
-    $access_url_id = api_get_current_access_url_id();    
-    $url_info      = api_get_access_url($access_url_id);
-    $url           = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $url_info['url']));
-    $clean_url     = replace_dangerous_char($url);
-    $clean_url     = str_replace('/', '-', $clean_url);
-    $clean_url     .= '/';
-    $home_old      = 'home/';
-    // if $clean_url ==  "localhost/" means that the multiple URL was not well configured we don't rename the $home variable
-    if ($clean_url != 'localhost/')
-        $home          = 'home/'.$clean_url;
-}
-
-// Including the page for the news
-$page_included = false;
-
-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']);
-    $open = api_to_system_encoding($open, api_detect_encoding(strip_tags($open)));
-    echo $open;
-    $page_included = true;
-} else {
-
-    if (!empty($_SESSION['user_language_choice'])) {
-        $user_selected_language = $_SESSION['user_language_choice'];
-    } elseif (!empty($_SESSION['_user']['language'])) {
-        $user_selected_language = $_SESSION['_user']['language'];
-    } else {
-        $user_selected_language = api_get_setting('platformLanguage');
-    }
+echo $index->return_home_page();
 
-    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_old.'home_top.html');
-        }
-        $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 (trim($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);
-    $open = api_to_system_encoding($open, api_detect_encoding(strip_tags($open)));
-    echo $open;
-}
 
 // Display courses and category list.
-if (!$page_included) {
+//if (!$page_included) {
 
     // Display System announcements
     $announcement = isset($_GET['announcement']) ? $_GET['announcement'] : -1;
@@ -229,714 +184,23 @@ if (!$page_included) {
 
     if (api_get_setting('display_categories_on_homepage') == 'true') {
         echo '<div class="home_cats">';
-        display_anonymous_course_list();
+        $index->display_anonymous_course_list();
         echo '</div>';
     }
-}
+//}
+
 echo '</div>';
 
 
 echo '<div id="menu-wrapper">';
-if (!api_is_anonymous()) {
-    //  @todo move all this in a class/function    
-        
-    //Always show the user image
-    $img_array = UserManager::get_user_picture_path_by_id(api_get_user_id(), 'web', true, true);
-    $no_image = false;
-    if ($img_array['file'] == 'unknown.jpg') {
-        $no_image = true;
-    }
-    $img_array = UserManager::get_picture_user(api_get_user_id(), $img_array['file'], 50, USER_IMAGE_SIZE_MEDIUM, ' width="90" height="90" ');
-    
-    $profile_content ='<div id="social_widget">';
-    
-    $profile_content .= '<div id="social_widget_image">';
-    if (api_get_setting('allow_social_tool') == 'true') {
-        if (!$no_image) {
-            $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/social/home.php"><img src="'.$img_array['file'].'"  '.$img_array['style'].' border="1"></a>';
-        } else {
-            $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
-        }
-    } else {
-        $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
-    }
-    $profile_content .= ' </div></div>';
-    
-    if (api_get_setting('allow_message_tool') == 'true') {    
-        require_once api_get_path(LIBRARY_PATH).'group_portal_manager.lib.php';
-    
-        // New messages.
-        $number_of_new_messages             = MessageManager::get_new_messages();
-        // New contact invitations.
-        $number_of_new_messages_of_friend   = SocialManager::get_message_number_invitation_by_user_id(api_get_user_id());
-    
-        // New group invitations sent by a moderator.
-        $group_pending_invitations = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_PENDING_INVITATION, false);
-        $group_pending_invitations = count($group_pending_invitations);
-    
-        $total_invitations = $number_of_new_messages_of_friend + $group_pending_invitations;
-        $cant_msg  = '';
-        if ($number_of_new_messages > 0) {
-            $cant_msg = ' ('.$number_of_new_messages.')';
-        }
-        $profile_content .= '<div class="clear"></div>';
-        $profile_content .= '<div class="message-content"><ul class="menulist">';
-        $link = '';
-        if (api_get_setting('allow_social_tool') == 'true') {
-            $link = '?f=social';
-        }
-        $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php'.$link.'" class="message-body">'.get_lang('Inbox').$cant_msg.' </a></li>';
-        $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/new_message.php'.$link.'" class="message-body">'.get_lang('Compose').' </a></li>';
-        
-        if (api_get_setting('allow_social_tool') == 'true') {        
-            if ($total_invitations == 0) {
-                $total_invitations = '';
-            } else {
-               $total_invitations = ' ('.$total_invitations.')';
-            }
-            $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/social/invitations.php" class="message-body">'.get_lang('PendingInvitations').' '.$total_invitations.' </a></li>';
-        }
-        $profile_content .= '</ul>';
-        $profile_content .= '</div>';      
-    }
-    
-    //Profile content
-    echo show_right_block(get_lang('Profile'), $profile_content);
-}
 
-// Display right menu: language form, login section + useful weblinks.
+echo $index->return_profile_block();
 
-display_anonymous_right_menu();
+// Display right menu: language form, login section + useful weblinks.
+$index->display_anonymous_right_menu();
 
 echo '</div>';
 
 /* Footer */
 
-Display :: display_footer();
-
-/* Functions */
-
-/**
- * This function handles the logout and is called whenever there is a $_GET['logout']
- *
- * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
- */
-function logout() {
-    global $_configuration, $extAuthSource;
-    // Variable initialisation.
-    $query_string = '';
-
-    if (!empty($_SESSION['user_language_choice'])) {
-        $query_string = '?language='.$_SESSION['user_language_choice'];
-    }
-
-    // Database table definition.
-    $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
-
-    // Selecting the last login of the user.
-    $uid = intval($_GET['uid']);
-    $sql_last_connection = "SELECT login_id, login_date FROM $tbl_track_login WHERE login_user_id='$uid' ORDER BY login_date DESC LIMIT 0,1";
-    $q_last_connection = Database::query($sql_last_connection);
-    if (Database::num_rows($q_last_connection) > 0) {
-        $i_id_last_connection = Database::result($q_last_connection, 0, 'login_id');
-    }
-
-    if (!isset($_SESSION['login_as'])) {
-        $current_date = date('Y-m-d H:i:s', time());
-        $s_sql_update_logout_date = "UPDATE $tbl_track_login SET logout_date='".$current_date."' WHERE login_id='$i_id_last_connection'";
-        Database::query($s_sql_update_logout_date);
-    }
-    LoginDelete($uid); // From inc/lib/online.inc.php - removes the "online" status.
-
-    // The following code enables the use of an external logout function.
-    // Example: define a $extAuthSource['ldap']['logout'] = 'file.php' in configuration.php.
-    // Then a function called ldap_logout() inside that file
-    // (using *authent_name*_logout as the function name) and the following code
-    // will find and execute it.
-    $uinfo = api_get_user_info($uid);
-    if (($uinfo['auth_source'] != PLATFORM_AUTH_SOURCE) && is_array($extAuthSource)) {
-        if (is_array($extAuthSource[$uinfo['auth_source']])) {
-            $subarray = $extAuthSource[$uinfo['auth_source']];
-            if (!empty($subarray['logout']) && file_exists($subarray['logout'])) {
-                include_once ($subarray['logout']);
-                $logout_function = $uinfo['auth_source'].'_logout';
-                if (function_exists($logout_function)) {
-                    $logout_function($uinfo);
-                }
-            }
-        }
-    }
-    exit_of_chat($uid);
-    api_session_destroy();
-    header("Location: index.php$query_string");
-    exit();
-}
-
-/**
- * This function checks if there are courses that are open to the world in the platform course categories (=faculties)
- *
- * @param unknown_type $category
- * @return boolean
- */
-function category_has_open_courses($category) {
-    global $setting_show_also_closed_courses;
-
-    $user_identified = (api_get_user_id() > 0 && !api_is_anonymous());
-    $main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
-    $sql_query = "SELECT * FROM $main_course_table WHERE category_code='$category'";
-    $sql_result = Database::query($sql_query);
-    while ($course = Database::fetch_array($sql_result)) {
-        if (!$setting_show_also_closed_courses) {
-            if ((api_get_user_id() > 0
-                && $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM)
-                || ($course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD)) {
-                return true; //at least one open course
-            }
-        } else {
-            if (isset($course['visibility'])) {
-                return true; // At least one course (it does not matter weither it's open or not because $setting_show_also_closed_courses = true).
-            }
-        }
-    }
-    return false;
-}
-
-/**
- * Display create course link
- */
-function display_create_course_link() {
-    echo '<li><a href="main/create_course/add_course.php">'.
-        (api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'</a></li>';
-}
-
-/**
- * Display edit course list links
- */
-function display_edit_course_list_links() {
-    echo '<li><a href="main/auth/courses.php">'.get_lang('CourseManagement').'</a></li>';
-}
-
-/**
- * Display dashboard link
- */
-function display_dashboard_link() {
-    echo '<li><a href="main/dashboard/index.php">'.get_lang('Dashboard').'</a></li>';
-}
-
-/**
- * Displays the right-hand menu for anonymous users:
- * login form, useful links, help section
- * Warning: function defines globals
- * @version 1.0.1
- * @todo does $_plugins need to be global?
- */
-function display_anonymous_right_menu() {
-    global $loginFailed, $_plugins, $_user, $menu_navigation, $home, $home_old;
-
-    $platformLanguage       = api_get_setting('platformLanguage');
-    $sys_path               = api_get_path(SYS_PATH);
-    $user_selected_language = api_get_interface_language();
-    
-    $display_add_course_link= api_is_allowed_to_create_course() && ($_SESSION['studentview'] != 'studentenview');
-    
-    $current_user_id        = api_get_user_id();
-    
-   if (!empty($current_user_id)) {
-        // tabs that are deactivated are added here
-
-        $show_menu = false;
-        $show_create_link = false;
-        $show_course_link = false;       
-
-        if ($display_add_course_link) {
-            //display_create_course_link();
-            $show_menu = true;
-            $show_create_link = true;
-        }
-
-        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;
-        }
-    }
-    
-    if (!($current_user_id) || api_is_anonymous($current_user_id) || $show_menu) {
-        echo '<div class="menu" id="menu">';
-    }  
-    
-
-    if (!($current_user_id) || api_is_anonymous($current_user_id) ) {
-         
-        // Only display if the user isn't logged in.
-        api_display_language_form(true);
-        echo '<br />';
-        display_login_form();
-
-        if ($loginFailed) {
-            echo '<br />';
-            handle_login_failed();
-        }
-        if (api_get_setting('allow_lostpassword') == 'true' || api_get_setting('allow_registration') == 'true') {
-            echo '<div class="menusection"><span class="menusectioncaption">'.get_lang('MenuUser').'</span><ul class="menulist">';
-            if (api_get_setting('allow_registration') != 'false') {
-                echo '<li><a href="main/auth/inscription.php">'.get_lang('Reg').'</a></li>';
-            }
-            if (api_get_setting('allow_lostpassword') == 'true') {
-                display_lost_password_info();
-            }
-            echo '</ul></div>';
-        }
-        if (api_number_of_plugins('loginpage_menu') > 0) {
-            echo '<div class="note" style="background: none">';
-            api_plugin('loginpage_menu');
-            echo '</div>';
-        }
-    }
-
-    // My Account section.
- 
-
-    if ($show_menu) {
-        echo '<div class="menusection">';
-        echo '<span class="menusectioncaption">'.get_lang('MenuUser').'</span>';
-        echo '<ul class="menulist">';
-        if ($show_create_link) {
-            display_create_course_link();
-        }
-        if ($show_course_link) {
-            if (!api_is_drh() && !api_is_session_admin()) {
-                display_edit_course_list_links();
-            } else {
-                display_dashboard_link();
-            }
-        }
-        echo '</ul></div>';
-    }
-    if (!($current_user_id) || api_is_anonymous($current_user_id) || $show_menu) {
-        echo '</div>';
-    }
-    
-    // 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)));        
-        echo show_right_block('', $home_notice, 'note');
-    }
-    
-    
-    
-    if (isset($_SESSION['_user']['user_id']) && $_SESSION['_user']['user_id'] != 0) {
-            // Deleting the myprofile link.
-        if (api_get_setting('allow_social_tool') == 'true') {
-            unset($menu_navigation['myprofile']);
-        }
-
-        if (!empty($menu_navigation)) {            
-            $content = '<ul class="menulist">';
-            foreach ($menu_navigation as $section => $navigation_info) {
-                $current = $section == $GLOBALS['this_section'] ? ' id="current"' : '';
-                $content .='<li'.$current.'><a href="'.$navigation_info['url'].'" target="_self">'.$navigation_info['title'].'</a></li>';
-            }
-            $content .= '</ul>';
-            echo show_right_block(get_lang('MainNavigation'), $content);
-        }
-    }      
-
-    // Help section.
-    /* Hide right menu "general" and other parts on anonymous right menu. */
-    
-    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 .= '<ul class="menulist">';
-        $home_menu_content .= api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));         
-        $home_menu_content .= '</ul>';        
-        echo show_right_block(get_lang('MenuGeneral'), $home_menu_content);
-    }
-    //Plugin 
-    
-    if ($_user['user_id'] && api_number_of_plugins('campushomepage_menu') > 0) {
-        ob_start();
-        api_plugin('campushomepage_menu');
-        $plugin_content = ob_get_contents();
-        ob_end_clean();
-        echo show_right_block('', $plugin_content);
-    }
-}
-
-/**
- * Reacts on a failed login:
- * Displays an explanation with a link to the registration form.
- *
- * @version 1.0.1
- */
-function handle_login_failed() {
-    if (!isset($_GET['error'])) {
-        $message = get_lang('InvalidId');
-        if (api_is_self_registration_allowed()) {
-            $message = get_lang('InvalidForSelfRegistration');
-        }
-    } else {
-        switch ($_GET['error']) {
-            case '':
-                $message = get_lang('InvalidId');
-                if (api_is_self_registration_allowed()) {
-                    $message = get_lang('InvalidForSelfRegistration');
-                }
-                break;
-            case 'account_expired':
-                $message = get_lang('AccountExpired');
-                break;
-            case 'account_inactive':
-                $message = get_lang('AccountInactive');
-                break;
-            case 'user_password_incorrect':
-                $message = get_lang('InvalidId');
-                break;
-            case 'access_url_inactive':
-                $message = get_lang('AccountURLInactive');
-                break;
-        }
-    }
-    echo '<div id="login_fail">'.$message.'</div>';
-}
-
-/**
- * Adds a form to let users login
- * @version 1.1
- */
-function display_login_form() {
-    $form = new FormValidator('formLogin');
-    $form->addElement('text', 'login', get_lang('UserName'), array('size' => 17));
-    $form->addElement('password', 'password', get_lang('Pass'), array('size' => 17));
-    $form->addElement('style_submit_button','submitAuth', get_lang('LoginEnter'), array('class' => 'login'));
-    $renderer =& $form->defaultRenderer();
-    $renderer->setElementTemplate('<div><label>{label}</label></div><div>{element}</div>');
-    $form->display();
-    if (api_get_setting('openid_authentication') == 'true') {
-        include_once 'main/auth/openid/login.php';
-        echo '<div>'.openid_form().'</div>';
-    }
-}
-
-/**
- * Displays a link to the lost password section
- */
-function display_lost_password_info() {
-    echo '<li><a href="main/auth/lostPassword.php">'.get_lang('LostPassword').'</a></li>';
-}
-
-/**
-* Display list of courses in a category.
-* (for anonymous users)
-*
-* @version 1.1
-* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University - refactoring and code cleaning
-*/
-function display_anonymous_course_list() {
-    $ctok = $_SESSION['sec_token'];
-    $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']);
-    global $setting_show_also_closed_courses;
-
-    // Database table definitions.
-    $main_course_table      = Database :: get_main_table(TABLE_MAIN_COURSE);
-    $main_category_table    = Database :: get_main_table(TABLE_MAIN_CATEGORY);
-
-    $platformLanguage = api_get_setting('platformLanguage');
-
-    // 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.
-    global $_configuration;
-    if ($_configuration['multiple_access_urls']) {
-        $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.course_code=course.code)
-                    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.
-    global $_configuration;
-    if ($_configuration['multiple_access_urls']) {
-        $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.course_code=t3.code)
-                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 = '<h4 style="margin-top: 0px;">'.get_lang('CatList').'</h4><ul>';
-        while ($catLine = Database::fetch_array($resCats)) {
-            if ($catLine['code'] != $category) {
-
-                $category_has_open_courses = category_has_open_courses($catLine['code']);
-                if ($category_has_open_courses) {
-                    // The category contains courses accessible to anonymous visitors.
-                    $htmlListCat .= '<li>';
-                    $htmlListCat .= '<a href="'.api_get_self().'?category='.$catLine['code'].'">'.$catLine['name'].'</a>';
-                    if (api_get_setting('show_number_of_courses') == 'true') {
-                        $htmlListCat .= ' ('.$catLine['nbCourse'].' '.get_lang('Courses').')';
-                    }
-                    $htmlListCat .= "</li>\n";
-                    $thereIsSubCat = true;
-                } elseif ($catLine['children_count'] > 0) {
-                    // The category has children, subcategories.
-                    $htmlListCat .= '<li>';
-                    $htmlListCat .= '<a href="'.api_get_self().'?category='.$catLine['code'].'">'.$catLine['name'].'</a>';
-                    $htmlListCat .= "</li>\n";
-                    $thereIsSubCat = true;
-                }
-                /* End changed code to eliminate the (0 courses) after empty categories. */
-                elseif (api_get_setting('show_empty_course_categories') == 'true') {
-                    $htmlListCat .= '<li>';
-                    $htmlListCat .= $catLine['name'];
-                    $htmlListCat .= "</li>\n";
-                    $thereIsSubCat = true;
-                } // Else don't set thereIsSubCat to true to avoid printing things if not requested.
-            } else {
-                $htmlTitre = '<p>';
-                if (api_get_setting('show_back_link_on_top_of_tree') == 'true') {
-                    $htmlTitre .= '<a href="'.api_get_self().'">&lt;&lt; '.get_lang('BackToHomePage').'</a>';
-                }
-                if (!is_null($catLine['parent_id']) || (api_get_setting('show_back_link_on_top_of_tree') != 'true' && !is_null($catLine['code']))) {
-                    $htmlTitre .= '<a href="'.api_get_self().'?category='.$catLine['parent_id'].'">&lt;&lt; '.get_lang('Up').'</a>';
-                }
-                $htmlTitre .= "</p>\n";
-                if ($category != "" && !is_null($catLine['code'])) {
-                    $htmlTitre .= '<h3>'.$catLine['name']."</h3>\n";
-                } else {
-                    $htmlTitre .= '<h3>'.get_lang('Categories')."</h3>\n";
-                }
-            }
-        }
-        $htmlListCat .= "</ul>\n";
-    }
-    echo $htmlTitre;
-    if ($thereIsSubCat) {
-        echo $htmlListCat;
-    }
-    while ($categoryName = Database::fetch_array($resCats)) {
-        echo '<h3>', $categoryName['name'], "</h3>\n";
-    }
-    $numrows = Database::num_rows($sql_result_courses);
-    $courses_list_string = '';
-    $courses_shown = 0;
-    if ($numrows > 0) {
-        if ($thereIsSubCat) {
-            $courses_list_string .= "<hr size=\"1\" noshade=\"noshade\">\n";
-        }
-        $courses_list_string .= '<h4 style="margin-top: 0px;">'.get_lang('CourseList')."</h4>\n<ul>\n";
-
-        if (api_get_user_id()) {
-            $courses_of_user = 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 .= "<li>\n";
-                    $courses_list_string .= '<a href="'.$web_course_path.$course['directory'].'/">'.$course['title'].'</a><br />';
-                    if (api_get_setting('display_coursecode_in_courselist') == 'true') {
-                        $courses_list_string .= $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') {
-                        $courses_list_string .= $course['tutor_name'];
-                    }
-                    if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
-                        $courses_list_string .= ' - '.$course['course_language'];
-                    }
-                    $courses_list_string .= "</li>\n";
-                }
-            }
-            // 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().
-            //
-            else {
-                $courses_shown++;
-                $courses_list_string .= "<li>\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 .= '<a href="'.$web_course_path.$course['directory'].'/">';
-                }
-                $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 .= '</a><br />';
-                }
-                if (api_get_setting('display_coursecode_in_courselist') == 'true') {
-                    $courses_list_string .= ' '.$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') {
-                    $courses_list_string .= $course['tutor_name'];
-                }
-                if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
-                    $courses_list_string .= ' - '.$course['course_language'];
-                }
-                if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
-                    $courses_list_string .= ' - '.$course['course_language'];
-                }
-                // 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 .= '<form action="main/auth/courses.php?action=subscribe&category='.Security::remove_XSS($_GET['category']).'" method="post">';
-                        $courses_list_string .= '<input type="hidden" name="sec_token" value="'.$stok.'">';
-                        $courses_list_string .= '<input type="hidden" name="subscribe" value="'.$course['code'].'" />';
-                        $courses_list_string .= '<input type="image" name="unsub" src="main/img/enroll.gif" alt="'.get_lang('Subscribe').'" />'.get_lang('Subscribe').'</form>';
-                    } else {
-                        $courses_list_string .= '<br />'.get_lang('SubscribingNotAllowed');
-                    }
-                }
-                $courses_list_string .= "</li>\n";
-            }
-        }
-        $courses_list_string .= "</ul>\n";
-    } else {
-        //echo '<blockquote>', get_lang('_No_course_publicly_available'), "</blockquote>\n";
-    }
-    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).
-        echo $courses_list_string;
-    }
-    if ($category != '') {
-        echo '<p><a href="'.api_get_self().'"> ', Display :: return_icon('back.png', get_lang('BackToHomePage')), get_lang('BackToHomePage'), '</a></p>', "\n";
-    }
-}
-
-/**
- * retrieves all the courses that the user has already subscribed to
- * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
- * @param int $user_id: the id of the user
- * @return array an array containing all the information of the courses of the given user
-*/
-function get_courses_of_user($user_id) {
-    $table_course       = Database::get_main_table(TABLE_MAIN_COURSE);
-    $table_course_user  = Database::get_main_table(TABLE_MAIN_COURSE_USER);
-    // Secondly we select the courses that are in a category (user_course_cat <> 0) and sort these according to the sort of the category
-    $user_id = intval($user_id);
-    $sql_select_courses = "SELECT course.code k, course.visual_code  vc, course.subscribe subscr, course.unsubscribe unsubscr,
-                                course.title i, course.tutor_name t, course.db_name db, course.directory dir, course_rel_user.status status,
-                                course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat
-                                FROM    $table_course       course,
-                                        $table_course_user  course_rel_user
-                                WHERE course.code = course_rel_user.course_code
-                                AND   course_rel_user.user_id = '".$user_id."'
-                                AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH."
-                                ORDER BY course_rel_user.sort ASC";
-    $result = Database::query($sql_select_courses);
-    $courses = array();
-    while ($row = Database::fetch_array($result)) {
-        // We only need the database name of the course.
-        $courses[$row['k']] = array('db' => $row['db'], 'code' => $row['k'], 'visual_code' => $row['vc'], 'title' => $row['i'], 'directory' => $row['dir'], 'status' => $row['status'], 'tutor' => $row['t'], 'subscribe' => $row['subscr'], 'unsubscribe' => $row['unsubscr'], 'sort' => $row['sort'], 'user_course_category' => $row['user_course_cat']);
-    }
-    return $courses;
-}
-
-
-function show_right_block($title, $content, $class = '') {    
-    $html = '';  
-        $html.= '<div id="menu" class="menu">';    
-            $html.= '<div class="menusection '.$class.' ">';
-                if (!empty($title)) {
-                    $html.= '<span class="menusectioncaption">'.$title.'</span>';
-                }        
-                $html.= $content;
-            $html.= '</div>';        
-        $html.= '</div>';   
-    return $html;
-}
+Display :: display_footer();

+ 2 - 1
main/inc/banner.inc.php

@@ -39,9 +39,10 @@ echo'</ul>';
 echo '<div id="header">';
 
 show_header_1($language_file, $nameTools);
+
 show_header_2();
 $menu_navigation = show_header_3();
-show_header_4($interbreadcrumb, $language_file, $nameTools);
+echo show_header_4($interbreadcrumb, $language_file, $nameTools);
     
 if (isset($database_connection)) {
     // connect to the main database.

+ 3 - 3
main/inc/footer.inc.php

@@ -123,7 +123,7 @@ if (api_get_setting('show_teacher_data') == 'true') {
 echo '</div>';
 
 echo '</div> <!-- end of #footer -->';
-
+/*
 // Test server mode indicator and information for testing purposes.
 if (api_is_platform_admin()) {
 	if (api_get_setting('server_type') == 'test') {
@@ -136,7 +136,7 @@ if (api_is_platform_admin()) {
 		$mtime = explode(" ",$mtime);
 		$mtime = $mtime[1] + $mtime[0];
 		$endtime = $mtime;
-		$starttime = $_SESSION['page_start_time_execution'];
+		$starttime = $_SESSION['page_start_time_execution']; 
 		$totaltime = ($endtime - $starttime);
 
 		$starttime = null;
@@ -152,7 +152,7 @@ if (api_is_platform_admin()) {
 		echo '<br />';
 		echo get_lang('MemoryUsagePeak').': '.number_format((memory_get_peak_usage()/1048576), 3, '.', '').' Mb';
 	}
-}
+}*/
 ?>
 <script>
 $(document).ready( function() {

+ 3 - 1
main/inc/global.inc.php

@@ -112,9 +112,11 @@ require_once $lib_path.'course.lib.php';
 require_once $lib_path.'sessionmanager.lib.php';
 require_once $lib_path.'tracking.lib.php';
 
-
+require_once $lib_path.'formvalidator/FormValidator.class.php';
 require_once $lib_path.'online.inc.php';
 
+require_once $lib_path.'template.lib.php';
+
 /*  DATABASE CONNECTION  */
 
 // @todo: this shouldn't be done here. It should be stored correctly during installation.

+ 2 - 0
main/inc/header.inc.php

@@ -52,9 +52,11 @@ $title_list[] = api_get_setting('siteName');
 if (!empty($course_title)) {
     $title_list[] = $course_title;
 }
+
 if ($nameTools != '') {
     $title_list[] = $nameTools;
 }
+
 $title_string = '';
 for($i=0; $i<count($title_list);$i++) {
     $title_string .=$title_list[$i];

+ 12 - 9
main/inc/lib/banner.lib.php

@@ -458,7 +458,8 @@ function show_header_3() {
 }
 
 //Header 4
-function show_header_4($interbreadcrumb, $language_file, $nameTools) {   
+function show_header_4($interbreadcrumb, $language_file, $nameTools) {  
+	 
     $session_id     = api_get_session_id();
     $session_name   = api_get_session_name($session_id);
     $_course        = api_get_course_info();    
@@ -545,7 +546,7 @@ function show_header_4($interbreadcrumb, $language_file, $nameTools) {
     
     // part 3: The tool itself. If we are on the course homepage we do not want to display the title of the course because this
     // is the same as the first part of the breadcrumbs (see part 1)
-    if (isset($nameTools) && $language_file != 'course_home') { // TODO: This condition $language_file != 'course_home' might bring surprises.
+    if (isset($nameTools) && $language_file != 'course_home') { // TODO: This condition $language_file != 'course_home' might bring surprises.    	
         $navigation_item['url'] = '#';
         $navigation_item['title'] = $nameTools;
         $navigation[] = $navigation_item;
@@ -564,9 +565,9 @@ function show_header_4($interbreadcrumb, $language_file, $nameTools) {
             $counter++;
         }
     }
-    
+    $html = '';
     if (!empty($final_navigation)) {
-        echo '<div id="header4">';
+        $html .= '<div id="header4">';
         $lis = '';
         $i = 0;
         $lis.= Display::tag('li', Display::url(Display::img(api_get_path(WEB_CSS_PATH).'home.png', get_lang('Homepage'), array('align'=>'middle')), api_get_path(WEB_PATH), array('class'=>'home')));        
@@ -574,13 +575,15 @@ function show_header_4($interbreadcrumb, $language_file, $nameTools) {
             $lis.= Display::tag('li', $bread);
             $i++;
         }
-        echo Display::tag('ul',$lis, array('class'=>'bread'));
-        echo '</div>';        
+        $html .= Display::tag('ul',$lis, array('class'=>'bread'));
+        $html .= '</div>';        
     } else {
-        echo '<div id="header4">';
-        echo '</div>';
+        $html .= '<div id="header4">';
+        $html .= '</div>';
     } 
-    echo '<div class="clear"></div>';
+    $html .= '<div class="clear"></div>';
+    
+    return $html ;
 }
 
 

+ 1 - 1
main/inc/lib/display.lib.php

@@ -456,7 +456,7 @@ class Display {
         $nameTools = $tool_name;
         global $_plugins, $lp_theme_css, $mycoursetheme, $user_theme, $platform_theme;
         global $httpHeadXtra, $htmlHeadXtra, $htmlIncHeadXtra, $_course, $_user, $clarolineRepositoryWeb, $text_dir, $plugins, $_user, $rootAdminWeb, $_cid, $interbreadcrumb, $charset, $language_file, $noPHP_SELF;
-        global $menu_navigation;
+        global $menu_navigation;        
         require api_get_path(INCLUDE_PATH).'header.inc.php';
     }
 

+ 32 - 19
main/inc/lib/main_api.lib.php

@@ -2809,31 +2809,32 @@ function api_display_language_form($hide_if_no_choice = false) {
 
     $original_languages = $language_list['name'];
     $folder = $language_list['folder']; // This line is probably no longer needed.
-?>
+	$html = '
     <script type="text/javascript">
     <!--
     function jumpMenu(targ,selObj,restore){ // v3.0
-        eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
+        eval(targ+".location=\'"+selObj.options[selObj.selectedIndex].value+"\'");
         if (restore) selObj.selectedIndex=0;
     }
     //-->
-    </script>
-<?php
-    echo '<form id="lang_form" name="lang_form" method="post" action="'.api_get_self().'">';
-    echo "<select class=\"chzn-select\" name=\"language_list\" onchange=\"javascript: jumpMenu('parent',this,0);\">";
+    </script>';
+
+    $html .= '<form id="lang_form" name="lang_form" method="post" action="'.api_get_self().'">';
+    $html .=  "<select class=\"chzn-select\" name=\"language_list\" onchange=\"javascript: jumpMenu('parent',this,0);\">";
     foreach ($original_languages as $key => $value) {
         if ($folder[$key] == $user_selected_language) {
             $option_end = ' selected="selected" >';
         } else {
             $option_end = '>';
         }
-        echo '<option value="'.api_get_self().'?language='.$folder[$key].'"'.$option_end;
+        $html .=  '<option value="'.api_get_self().'?language='.$folder[$key].'"'.$option_end;
         //echo substr($value, 0, 16); // Cut string to keep 800x600 aspect.
-        echo $value, '</option>', "\n";
+        $html .=  $value.'</option>';
     }
-    echo '</select>';
-    echo '<noscript><input type="submit" name="user_select_language" value="'.get_lang('Ok').'" /></noscript>';
-    echo '</form>';
+    $html .=  '</select>';
+    $html .=  '<noscript><input type="submit" name="user_select_language" value="'.get_lang('Ok').'" /></noscript>';
+    $html .=  '</form>';
+    return $html;
 }
 
 /**
@@ -4979,6 +4980,12 @@ function api_get_js($file) {
     return '<script type="text/javascript" src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/'.$file.'"></script>';
 }
 
+function api_get_css($file) {
+	$media = '';
+	return '<link rel="stylesheet" href="'.$file.'" type="text/css" media="'.$media.'" />';	
+}
+
+
 
 /**
  * Returns the js header to include the jquery library
@@ -5021,7 +5028,8 @@ function api_get_jquery_libraries_js($libraries) {
         
         $jquery_ui_version = '1.8.16';
         
-        $js .= '<link rel="stylesheet" href="'.$js_path.'jquery-ui/'.$theme.'/jquery-ui-'.$jquery_ui_version.'.custom.css" type="text/css">';
+        //$js .= '<link rel="stylesheet" href="'.$js_path.'jquery-ui/'.$theme.'/jquery-ui-'.$jquery_ui_version.'.custom.css" type="text/css">';
+        $js .= api_get_css($js_path.'jquery-ui/'.$theme.'/jquery-ui-'.$jquery_ui_version.'.custom.css');
         $js .= api_get_js('jquery-ui/'.$theme.'/jquery-ui-'.$jquery_ui_version.'.custom.min.js');
     }
     
@@ -5036,7 +5044,8 @@ function api_get_jquery_libraries_js($libraries) {
         if (in_array($platform_isocode, $jqgrid_langs)) {
             $languaje = $platform_isocode;
         }    
-        $js .= '<link rel="stylesheet" href="'.$js_path.'jqgrid/css/ui.jqgrid.css" type="text/css">';
+        //$js .= '<link rel="stylesheet" href="'.$js_path.'jqgrid/css/ui.jqgrid.css" type="text/css">';
+        $js .= api_get_css($js_path.'jqgrid/css/ui.jqgrid.css');
         $js .= api_get_js('jqgrid/js/i18n/grid.locale-'.$languaje.'.js');
         $js .= api_get_js('jqgrid/js/jquery.jqGrid.min.js');
     }
@@ -5045,20 +5054,19 @@ function api_get_jquery_libraries_js($libraries) {
     if (in_array('jquery-upload', $libraries)) {
         $js .= api_get_js('jquery-upload/jquery.fileupload.js'); 
         $js .= api_get_js('jquery-upload/jquery.fileupload-ui.js');
-        $js .= '<link rel="stylesheet" href="'.$js_path.'jquery-upload/jquery.fileupload-ui.css" type="text/css">';        
+        $js .= api_get_css($js_path.'jquery-upload/jquery.fileupload-ui.css');                
     }
     
     //jquery-ui css changes for Chamilo
     if (in_array('jquery-ui',$libraries)) {
-        //Adding default CSS changes of the jquery-ui themes for Chamilo in order to preserve the original jquery-ui css
-        $js .= '<link rel="stylesheet" href="'.$js_path.'jquery-ui/default.css" type="text/css">';
+        //Adding default CSS changes of the jquery-ui themes for Chamilo in order to preserve the original jquery-ui css        
+        $js .= api_get_css($js_path.'jquery-ui/default.css');
     }
     
     if (in_array('bxslider',$libraries)) {
     	$js .= api_get_js('bxslider/jquery.bxSlider.min.js');
-    	$js .= '<link rel="stylesheet" href="'.$js_path.'bxslider/bx_styles/bx_styles.css" type="text/css">';
-    }
-    
+    	$js .= api_get_css($js_path.'bxslider/bx_styles/bx_styles.css');    	
+    }    
     return $js;	
 }
 
@@ -5115,3 +5123,8 @@ function api_get_unique_id() {
     $id = md5(time().uniqid().api_get_user_id().api_get_course_id().api_get_session_id());    
     return $id;
 }
+
+
+
+
+

+ 291 - 0
main/inc/lib/template.lib.php

@@ -0,0 +1,291 @@
+<?php
+
+// Load Smarty library
+
+require_once api_get_path(LIBRARY_PATH).'smarty/Smarty.class.php';
+//include api_get_path(LIBRARY_PATH)."raintpl/rain.tpl.class.php";
+//include api_get_path(LIBRARY_PATH)."dwoo/dwooAutoload.php";
+
+class Template extends Smarty {
+	
+	var $style = 'default'; //see the template folder 
+	
+	function __construct($title = '') {
+		$this->title = $title;
+		
+		/*
+		 * 
+		 * Rain TPL
+		raintpl::configure("base_url", null );
+		raintpl::configure("tpl_dir", api_get_path(SYS_CODE_PATH).'template/' );
+		raintpl::configure("cache_dir", api_get_path(SYS_ARCHIVE_PATH));
+		$this->tpl = new RainTPL();
+		*/
+		
+		// Dwoo
+		
+		//$this->dwoo = new Dwoo(api_get_path(SYS_ARCHIVE_PATH), api_get_path(SYS_ARCHIVE_PATH));
+		
+		// Load a template file, this is reusable if you want to render multiple times the same template with different data
+		//$tpl = new Dwoo_Template_File('path/to/index.tpl');
+		
+		// Create a data set, this data set can be reused to render multiple templates if it contains enough data to fill them all
+		//$this->tpl  = new Dwoo_Data();
+
+		// Class Constructor.
+		// These automatically get set with each new instance.
+		
+		
+		$this->template_dir 	= api_get_path(SYS_CODE_PATH).'template/';	// '/web/www.example.com/guestbook/templates/';
+		$this->compile_dir  	= api_get_path(SYS_ARCHIVE_PATH); 	// '/web/www.example.com/guestbook/templates_c/';
+		$this->config_dir   	= api_get_path(SYS_ARCHIVE_PATH);	// '/web/www.example.com/guestbook/configs/'; main/inc/conf/config?
+		$this->cache_dir    	= api_get_path(SYS_ARCHIVE_PATH);	// '/web/www.example.com/guestbook/cache/';
+		
+		
+		$this->caching 			= true;
+		$this->cache_lifetime 	= Smarty::CACHING_OFF; // no caching
+		//$this->cache_lifetime 	= 120;
+					
+		$this->set_header_parameters();
+		$this->set_footer_parameters();	
+		
+		//$this->caching = Smarty::CACHING_LIFETIME_CURRENT;				
+		$this->assign('style', $this->style);
+		
+	}
+	
+	function get_template($name) {
+		return $this->style.'/'.$name;
+	}
+
+	public function set_header_parameters($help = null) {
+		$nameTools = $this->title;
+		global $_plugins, $lp_theme_css, $mycoursetheme, $user_theme, $platform_theme;
+		global $httpHeadXtra, $htmlHeadXtra, $_course, $_user, $clarolineRepositoryWeb, $text_dir, $plugins, $_user, 
+				$rootAdminWeb, $_cid, $interbreadcrumb, $charset, $language_file, $noPHP_SELF;		
+		global $menu_navigation;
+		global $_configuration, $show_learn_path;
+		
+		$this->assign('system_charset', api_get_system_encoding());		
+			
+		if (isset($httpHeadXtra) && $httpHeadXtra) {
+			foreach ($httpHeadXtra as & $thisHttpHead) {
+				header($thisHttpHead);
+			}
+		}
+		
+		// Get language iso-code for this page - ignore errors		
+		
+		$this->assign('document_language', api_get_language_isocode());
+		
+		$course_title = $_course['name'];
+		$title_list[] = api_get_setting('Institution');
+		$title_list[] = api_get_setting('siteName');
+		if (!empty($course_title)) {
+			$title_list[] = $course_title;
+		}
+		if ($nameTools != '') {
+			$title_list[] = $nameTools;
+		}
+		$title_string = '';
+		for($i=0; $i<count($title_list);$i++) {
+			$title_string .=$title_list[$i];
+			if (isset($title_list[$i+1])) {
+				$item = trim($title_list[$i+1]);
+				if (!empty($item))
+				$title_string .=' - ';
+			}
+		}
+		
+		$this->assign('title_string', $title_string);
+				
+		$platform_theme = api_get_setting('stylesheets');
+		$my_style 		= api_get_visual_theme();	
+		
+		$style = '';
+		//Base CSS
+		$style = '@import "'.api_get_path(WEB_CSS_PATH).'base.css";';
+		//Default CSS
+		$style .= '@import "'.api_get_path(WEB_CSS_PATH).$my_style.'/default.css";';
+		//Course CSS
+		$style .= '@import "'.api_get_path(WEB_CSS_PATH).$my_style.'/course.css";';
+		
+		if ($navigator_info['name']=='Internet Explorer' &&  $navigator_info['version']=='6') {
+			$style .= 'img, div { behavior: url('.api_get_path(WEB_LIBRARY_PATH).'javascript/iepngfix/iepngfix.htc) } ';
+		}
+		
+		$this->assign('css_style', $style);
+		
+		$style_print =  '@import "'.api_get_path(WEB_CSS_PATH).$my_style.'/print.css";';
+		$this->assign('css_style_print', $style_print);
+		
+		$js_files = array(
+			'jquery.min.js',
+			'chosen/chosen.jquery.min.js',
+			'thickbox.js',
+			'jquery.menu.js',
+			'dtree/dtree.js',
+			'email_links.lib.js.php',
+		);
+		
+		if (api_get_setting('accessibility_font_resize') == 'true') {
+			$js_files[] = 'fontresize.js';
+		}
+		
+		if (api_get_setting('include_asciimathml_script') == 'true') {
+			$js_files[] = 'asciimath/ASCIIMathML.js';
+		}
+		
+		$js_file_to_string = '';
+		
+		foreach($js_files as $js_file) {
+			$js_file_to_string .= api_get_js($js_file);
+		}
+		
+		$css_files = array (
+			api_get_path(WEB_LIBRARY_PATH).'javascript/thickbox.css',
+			api_get_path(WEB_LIBRARY_PATH).'javascript/chosen/chosen.css',
+			api_get_path(WEB_LIBRARY_PATH).'javascript/dtree/dtree.css',
+		);
+		
+		if ($show_learn_path) {
+			$css_files[] = api_get_path(WEB_CSS_PATH).$my_style.'/learnpath.css';
+		}
+		
+		$css_file_to_string = '';
+		foreach($css_files  as $css_file) {
+			$css_file_to_string .= api_get_css($css_file);
+		}
+		
+		$this->assign('css_file_to_string', $css_file_to_string);
+		$this->assign('js_file_to_string',  $js_file_to_string);		
+		$this->assign('text_direction',	 api_get_text_direction());		
+
+	
+		//@todo add this
+		/*<link rel="top" href="<?php echo api_get_path(WEB_PATH); ?>index.php" title="" />
+		<link rel="courses" href="<?php echo api_get_path(WEB_CODE_PATH); ?>auth/courses.php" title="<?php echo api_htmlentities(get_lang('OtherCourses'), ENT_QUOTES); ?>" />
+		<link rel="profil" href="<?php echo api_get_path(WEB_CODE_PATH); ?>auth/profile.php" title="<?php echo api_htmlentities(get_lang('ModifyProfile'), ENT_QUOTES); ?>" />
+		<link href="http://www.chamilo.org/documentation.php" rel="Help" />
+		<link href="http://www.chamilo.org/team.php" rel="Author" />
+		<link href="http://www.chamilo.org" rel="Copyright" />
+		<meta http-equiv="Content-Type" content="text/html; charset=<?php echo api_get_system_encoding(); ?>" />
+		<meta name="Generator" content="<?php echo $_configuration['software_name'].' '.substr($_configuration['system_version'],0,1);?>" />
+		*/
+		
+		$this->assign('style_print', $style_print);
+		
+		$extra_headers = '';		
+		if (isset($htmlHeadXtra) && $htmlHeadXtra) {
+		    foreach ($htmlHeadXtra as & $this_html_head) {
+		        $extra_headers .= $this_html_head;
+		    }
+		}
+		$this->assign('extra_headers', $extra_headers);
+	
+	
+		$favico = '<link rel="shortcut icon" href="'.api_get_path(WEB_PATH).'favicon.ico" type="image/x-icon" />';
+		if (isset($_configuration['multiple_access_urls']) && $_configuration['multiple_access_urls']) {
+		    $access_url_id = api_get_current_access_url_id();
+		    if ($access_url_id != -1) {
+		        $url_info = api_get_access_url($access_url_id);
+		        $url = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $url_info['url']));
+		        $clean_url = replace_dangerous_char($url);
+		        $clean_url = str_replace('/', '-', $clean_url);
+		        $clean_url .= '/';
+		        $homep            = api_get_path(REL_PATH).'home/'.$clean_url; //homep for Home Path               
+		        //we create the new dir for the new sites
+		        if (is_file($homep.'favicon.ico')) {
+		            $favico = '<link rel="shortcut icon" href="'.$homep.'favicon.ico" type="image/x-icon" />';
+		        }
+		    }
+		}
+		$this->assign('favico', $favico);
+		
+		//old banner.inc.php
+		
+		require_once api_get_path(LIBRARY_PATH).'banner.lib.php';
+		
+		global $my_session_id;
+		$session_id     = api_get_session_id();
+		$session_name   = api_get_session_name($my_session_id);
+		
+		$help_content = '';
+		if (!empty($help)) {
+			$help = Security::remove_XSS($help);			
+		    $help_content  = '<li class="help">';                   
+		    $help_content .= '<a href="'.api_get_path(WEB_CODE_PATH).'help/help.php?open='.$help.'&height=400&width=600" class="thickbox" title="'.get_lang('Help').'">';
+		    $help_content .= '<img src="'.api_get_path(WEB_IMG_PATH).'help.large.png" alt="'.get_lang('Help').'" title="'.get_lang('Help').'" />';
+		    $help_content .= '</a></li>';		
+		}
+
+		$this->assign('help_content', $help_content);
+		$bug_notification_link = '';
+		if (api_get_setting('show_link_bug_notification') == 'true') {
+			$bug_notification_link = '<li class="report">
+		        						<a href="http://support.chamilo.org/projects/chamilo-18/wiki/How_to_report_bugs" target="_blank">
+		        						<img src="'.api_get_path(WEB_IMG_PATH).'bug.large.png" style="vertical-align: middle;" alt="'.get_lang('ReportABug').'" title="'.get_lang('ReportABug').'"/></a>
+		    						  </li>';
+		}
+		
+		$this->assign('bug_notification_link', $bug_notification_link);
+		
+		if (isset($database_connection)) {
+			// connect to the main database.
+			// if single database, don't pefix table names with the main database name in SQL queries
+			// (ex. SELECT * FROM table)
+			// if multiple database, prefix table names with the course database name in SQL queries (or no prefix if the table is in
+			// the main database)
+			// (ex. SELECT * FROM table_from_main_db  -  SELECT * FROM courseDB.table_from_course_db)
+			Database::select_db($_configuration['main_database'], $database_connection);
+		}
+		
+		ob_start();
+		show_header_1($language_file, $nameTools);
+		$header1 = ob_get_contents();
+		ob_clean();
+		
+		ob_start();
+		show_header_2();
+		$header2 = ob_get_contents();
+		ob_clean();
+		
+		ob_start();
+		$menu_navigation = show_header_3();
+		$header3 = ob_get_contents();
+		ob_clean();
+		
+		$header4 = show_header_4($interbreadcrumb, $language_file, $nameTools);
+		
+		$this->assign('header1', $header1);
+		$this->assign('header2', $header2);
+		$this->assign('header3', $header3);
+		$this->assign('header4', $header4);
+		
+		header('Content-Type: text/html; charset='.api_get_system_encoding());
+		header('X-Powered-By: '.$_configuration['software_name'].' '.substr($_configuration['system_version'],0,1));
+	}
+
+	function set_footer_parameters() {
+		//Footer plugin
+		global $_plugins, $_configuration;
+		ob_start();
+		api_plugin('footer');
+		$plugin_footer = ob_get_contents();
+		ob_clean();
+		$this->assign('plugin_footer', $plugin_footer);
+		
+		$this->assign('show_administrator_data', api_get_setting('show_administrator_data'));
+		
+		$platform = get_lang('Platform').' <a href="'.$_configuration['software_url'].'" target="_blank">'.$_configuration['software_name'].' '.$_configuration['system_version'].'</a> &copy; '.date('Y');
+		
+		$this->assign('platform', $platform);
+		
+		$administrator_data = get_lang('Manager'). ' : '. Display::encrypted_mailto_link(api_get_setting('emailAdministrator'), api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))); 
+		$this->assign('administrator_data', $administrator_data);
+		
+		$stats = '';
+	
+		$this->assign('execution_stats', $stats);		
+	}
+}

+ 1286 - 0
main/inc/lib/userportal.lib.php

@@ -0,0 +1,1286 @@
+<?php 
+
+require_once api_get_path(LIBRARY_PATH).'system_announcements.lib.php';
+require_once api_get_path(LIBRARY_PATH).'groupmanager.lib.php';
+require_once api_get_path(SYS_CODE_PATH).'survey/survey.lib.php';
+
+
+class IndexManager {
+	var $tpl = false;
+	var $name = '';
+	
+	function __construct($title, $load_template = true) {
+		if ($load_template) {			
+			$this->tpl = new Template($title);					
+		}		
+	}
+	
+	
+	/* Functions */
+	
+	/**
+	 * This function handles the logout and is called whenever there is a $_GET['logout']
+	 *
+	 * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
+	 */
+	function logout() {
+		global $_configuration, $extAuthSource;
+		// Variable initialisation.
+		$query_string = '';
+	
+		if (!empty($_SESSION['user_language_choice'])) {
+			$query_string = '?language='.$_SESSION['user_language_choice'];
+		}
+	
+		// Database table definition.
+		$tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
+	
+		// Selecting the last login of the user.
+		$uid = intval($_GET['uid']);
+		$sql_last_connection = "SELECT login_id, login_date FROM $tbl_track_login WHERE login_user_id='$uid' ORDER BY login_date DESC LIMIT 0,1";
+		$q_last_connection = Database::query($sql_last_connection);
+		if (Database::num_rows($q_last_connection) > 0) {
+			$i_id_last_connection = Database::result($q_last_connection, 0, 'login_id');
+		}
+	
+		if (!isset($_SESSION['login_as'])) {
+			$current_date = date('Y-m-d H:i:s', time());
+			$s_sql_update_logout_date = "UPDATE $tbl_track_login SET logout_date='".$current_date."' WHERE login_id='$i_id_last_connection'";
+			Database::query($s_sql_update_logout_date);
+		}
+		LoginDelete($uid); // From inc/lib/online.inc.php - removes the "online" status.
+	
+		// The following code enables the use of an external logout function.
+		// Example: define a $extAuthSource['ldap']['logout'] = 'file.php' in configuration.php.
+		// Then a function called ldap_logout() inside that file
+		// (using *authent_name*_logout as the function name) and the following code
+		// will find and execute it.
+		$uinfo = api_get_user_info($uid);
+		if (($uinfo['auth_source'] != PLATFORM_AUTH_SOURCE) && is_array($extAuthSource)) {
+			if (is_array($extAuthSource[$uinfo['auth_source']])) {
+				$subarray = $extAuthSource[$uinfo['auth_source']];
+				if (!empty($subarray['logout']) && file_exists($subarray['logout'])) {
+					include_once ($subarray['logout']);
+					$logout_function = $uinfo['auth_source'].'_logout';
+					if (function_exists($logout_function)) {
+						$logout_function($uinfo);
+					}
+				}
+			}
+		}
+		exit_of_chat($uid);
+		api_session_destroy();
+		header("Location: index.php$query_string");
+		exit();
+	}
+	
+	/**
+	 * This function checks if there are courses that are open to the world in the platform course categories (=faculties)
+	 *
+	 * @param unknown_type $category
+	 * @return boolean
+	 */
+	function category_has_open_courses($category) {
+		global $setting_show_also_closed_courses;
+	
+		$user_identified = (api_get_user_id() > 0 && !api_is_anonymous());
+		$main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
+		$sql_query = "SELECT * FROM $main_course_table WHERE category_code='$category'";
+		$sql_result = Database::query($sql_query);
+		while ($course = Database::fetch_array($sql_result)) {
+			if (!$setting_show_also_closed_courses) {
+				if ((api_get_user_id() > 0
+				&& $course['visibility'] == COURSE_VISIBILITY_OPEN_PLATFORM)
+				|| ($course['visibility'] == COURSE_VISIBILITY_OPEN_WORLD)) {
+					return true; //at least one open course
+				}
+			} else {
+				if (isset($course['visibility'])) {
+					return true; // At least one course (it does not matter weither it's open or not because $setting_show_also_closed_courses = true).
+				}
+			}
+		}
+		return false;
+	}
+	
+	
+	/**
+	 * Displays the right-hand menu for anonymous users:
+	 * login form, useful links, help section
+	 * Warning: function defines globals
+	 * @version 1.0.1
+	 * @todo does $_plugins need to be global?
+	 */
+	function display_anonymous_right_menu() {
+		global $loginFailed, $_plugins, $_user, $menu_navigation, $home, $home_old;
+	
+		$platformLanguage       = api_get_setting('platformLanguage');	
+		
+		$display_add_course_link= api_is_allowed_to_create_course() && ($_SESSION['studentview'] != 'studentenview');
+	
+		$current_user_id        = api_get_user_id();
+	
+		$login_form = self::show_login_form($current_user_id);
+		if (!empty($login_form)) {
+			echo '<div class="menu" id="menu">';
+			echo $login_form;
+			echo '</div>';
+		}
+		
+		echo self::display_teacher_link($current_user_id);
+		
+		echo self::return_notice($home);
+		
+		//Plugin
+		echo self::return_plugin_campushomepage();	
+	}
+	
+	
+	
+	function display_teacher_link($current_user_id) {
+		$html = '';
+		if (!empty($current_user_id)) {
+			// tabs that are deactivated are added here
+		
+			$show_menu = false;
+			$show_create_link = false;
+			$show_course_link = false;
+		
+			if ($display_add_course_link) {
+				$show_menu = true;
+				$show_create_link = true;
+			}
+		
+			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
+		
+		if ($show_menu) {
+			$html .= '<ul class="menulist">';
+			if ($show_create_link) {			
+				$html .= '<li><a href="main/create_course/add_course.php">'.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'</a></li>';
+			}
+			
+			if ($show_course_link) {
+				if (!api_is_drh() && !api_is_session_admin()) {
+					$html .=  '<li><a href="main/auth/courses.php">'.get_lang('CourseManagement').'</a></li>';					
+				} else {
+					$html .= '<li><a href="main/dashboard/index.php">'.get_lang('Dashboard').'</a></li>';
+				}
+			}		
+			$html .= '</ul>';
+		}	
+		
+		if (!empty($html)) {
+			$html = self::show_right_block(get_lang('MenuUser'), $html);
+		}
+		return $html;
+	}
+	
+	
+	function return_home_page() {	
+		$home = 'home/';
+		if (api_get_multiple_access_url()) {
+			$access_url_id = api_get_current_access_url_id();
+			$url_info      = api_get_access_url($access_url_id);
+			$url           = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $url_info['url']));
+			$clean_url     = replace_dangerous_char($url);
+			$clean_url     = str_replace('/', '-', $clean_url);
+			$clean_url     .= '/';
+			$home_old      = 'home/';
+			// if $clean_url ==  "localhost/" means that the multiple URL was not well configured we don't rename the $home variable
+			if ($clean_url != 'localhost/')
+			$home          = 'home/'.$clean_url;
+		}
+		
+		// Including the page for the news
+		$html = '';
+		
+		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 {
+		
+			if (!empty($_SESSION['user_language_choice'])) {
+				$user_selected_language = $_SESSION['user_language_choice'];
+			} elseif (!empty($_SESSION['_user']['language'])) {
+				$user_selected_language = $_SESSION['_user']['language'];
+			} else {
+				$user_selected_language = api_get_setting('platformLanguage');
+			}
+		
+			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_old.'home_top.html');
+				}
+				$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 (trim($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);
+			$html = api_to_system_encoding($open, api_detect_encoding(strip_tags($open)));		
+		}
+		return $html;
+		
+	}
+	
+	function return_notice($home) {
+		$sys_path               = api_get_path(SYS_PATH);
+		$user_selected_language = api_get_interface_language();
+		
+		$html = '';
+		// 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)));
+			echo show_right_block('', $home_notice, 'note');
+		}
+		
+		if (isset($_SESSION['_user']['user_id']) && $_SESSION['_user']['user_id'] != 0) {
+			// Deleting the myprofile link.
+			if (api_get_setting('allow_social_tool') == 'true') {
+				unset($menu_navigation['myprofile']);
+			}
+		
+			if (!empty($menu_navigation)) {
+				$content = '<ul class="menulist">';
+				foreach ($menu_navigation as $section => $navigation_info) {
+					$current = $section == $GLOBALS['this_section'] ? ' id="current"' : '';
+					$content .='<li'.$current.'><a href="'.$navigation_info['url'].'" target="_self">'.$navigation_info['title'].'</a></li>';
+				}
+				$content .= '</ul>';
+				$html .= show_right_block(get_lang('MainNavigation'), $content);
+			}
+		}
+		
+		// Help section.
+		/* Hide right menu "general" and other parts on anonymous right menu. */
+		
+		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 .= '<ul class="menulist">';
+			$home_menu_content .= api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));
+			$home_menu_content .= '</ul>';
+			$html .= show_right_block(get_lang('MenuGeneral'), $home_menu_content);
+		}
+		
+		return $html;
+	}
+	
+	function return_plugin_campushomepage() {
+		$html = '';
+		if (api_get_user_id() && api_number_of_plugins('campushomepage_menu') > 0) {
+			ob_start();
+			api_plugin('campushomepage_menu');
+			$plugin_content = ob_get_contents();
+			ob_end_clean();
+			$html = self::show_right_block('', $plugin_content);
+		}
+		return $html;
+	}
+	
+	/**
+	 * Reacts on a failed login:
+	 * Displays an explanation with a link to the registration form.
+	 *
+	 * @version 1.0.1
+	 */
+	function handle_login_failed() {
+		if (!isset($_GET['error'])) {
+			$message = get_lang('InvalidId');
+			if (api_is_self_registration_allowed()) {
+				$message = get_lang('InvalidForSelfRegistration');
+			}
+		} else {
+			switch ($_GET['error']) {
+				case '':
+					$message = get_lang('InvalidId');
+					if (api_is_self_registration_allowed()) {
+						$message = get_lang('InvalidForSelfRegistration');
+					}
+					break;
+				case 'account_expired':
+					$message = get_lang('AccountExpired');
+					break;
+				case 'account_inactive':
+					$message = get_lang('AccountInactive');
+					break;
+				case 'user_password_incorrect':
+					$message = get_lang('InvalidId');
+					break;
+				case 'access_url_inactive':
+					$message = get_lang('AccountURLInactive');
+					break;
+			}
+		}
+		return '<div id="login_fail">'.$message.'</div>';
+	}
+	
+	
+	
+	/**
+	 * Displays a link to the lost password section
+	 */
+	function display_lost_password_info() {
+		return '<li><a href="main/auth/lostPassword.php">'.get_lang('LostPassword').'</a></li>';
+	}
+	
+	/**
+	 * Display list of courses in a category.
+	 * (for anonymous users)
+	 *
+	 * @version 1.1
+	 * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University - refactoring and code cleaning
+	 */
+	function display_anonymous_course_list() {
+		$ctok = $_SESSION['sec_token'];
+		$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']);
+		global $setting_show_also_closed_courses;
+	
+		// Database table definitions.
+		$main_course_table      = Database :: get_main_table(TABLE_MAIN_COURSE);
+		$main_category_table    = Database :: get_main_table(TABLE_MAIN_CATEGORY);
+	
+		$platformLanguage = api_get_setting('platformLanguage');
+	
+		// 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.
+		global $_configuration;
+		if ($_configuration['multiple_access_urls']) {
+			$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.course_code=course.code)
+	                    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.
+		global $_configuration;
+		if ($_configuration['multiple_access_urls']) {
+			$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.course_code=t3.code)
+	                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 = '<h4 style="margin-top: 0px;">'.get_lang('CatList').'</h4><ul>';
+			while ($catLine = Database::fetch_array($resCats)) {
+				if ($catLine['code'] != $category) {
+	
+					$category_has_open_courses = category_has_open_courses($catLine['code']);
+					if ($category_has_open_courses) {
+						// The category contains courses accessible to anonymous visitors.
+						$htmlListCat .= '<li>';
+						$htmlListCat .= '<a href="'.api_get_self().'?category='.$catLine['code'].'">'.$catLine['name'].'</a>';
+						if (api_get_setting('show_number_of_courses') == 'true') {
+							$htmlListCat .= ' ('.$catLine['nbCourse'].' '.get_lang('Courses').')';
+						}
+						$htmlListCat .= "</li>\n";
+						$thereIsSubCat = true;
+					} elseif ($catLine['children_count'] > 0) {
+						// The category has children, subcategories.
+						$htmlListCat .= '<li>';
+						$htmlListCat .= '<a href="'.api_get_self().'?category='.$catLine['code'].'">'.$catLine['name'].'</a>';
+						$htmlListCat .= "</li>\n";
+						$thereIsSubCat = true;
+					}
+					/* End changed code to eliminate the (0 courses) after empty categories. */
+					elseif (api_get_setting('show_empty_course_categories') == 'true') {
+						$htmlListCat .= '<li>';
+						$htmlListCat .= $catLine['name'];
+						$htmlListCat .= "</li>\n";
+						$thereIsSubCat = true;
+					} // Else don't set thereIsSubCat to true to avoid printing things if not requested.
+				} else {
+					$htmlTitre = '<p>';
+					if (api_get_setting('show_back_link_on_top_of_tree') == 'true') {
+						$htmlTitre .= '<a href="'.api_get_self().'">&lt;&lt; '.get_lang('BackToHomePage').'</a>';
+					}
+					if (!is_null($catLine['parent_id']) || (api_get_setting('show_back_link_on_top_of_tree') != 'true' && !is_null($catLine['code']))) {
+						$htmlTitre .= '<a href="'.api_get_self().'?category='.$catLine['parent_id'].'">&lt;&lt; '.get_lang('Up').'</a>';
+					}
+					$htmlTitre .= "</p>\n";
+					if ($category != "" && !is_null($catLine['code'])) {
+						$htmlTitre .= '<h3>'.$catLine['name']."</h3>\n";
+					} else {
+						$htmlTitre .= '<h3>'.get_lang('Categories')."</h3>\n";
+					}
+				}
+			}
+			$htmlListCat .= "</ul>";
+		}
+		echo $htmlTitre;
+		if ($thereIsSubCat) {
+			echo $htmlListCat;
+		}
+		while ($categoryName = Database::fetch_array($resCats)) {
+			echo '<h3>', $categoryName['name'], "</h3>\n";
+		}
+		$numrows = Database::num_rows($sql_result_courses);
+		$courses_list_string = '';
+		$courses_shown = 0;
+		if ($numrows > 0) {
+			if ($thereIsSubCat) {
+				$courses_list_string .= "<hr size=\"1\" noshade=\"noshade\">\n";
+			}
+			$courses_list_string .= '<h4 style="margin-top: 0px;">'.get_lang('CourseList')."</h4>\n<ul>\n";
+	
+			if (api_get_user_id()) {
+				$courses_of_user = 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 .= "<li>\n";
+						$courses_list_string .= '<a href="'.$web_course_path.$course['directory'].'/">'.$course['title'].'</a><br />';
+						if (api_get_setting('display_coursecode_in_courselist') == 'true') {
+							$courses_list_string .= $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') {
+							$courses_list_string .= $course['tutor_name'];
+						}
+						if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
+							$courses_list_string .= ' - '.$course['course_language'];
+						}
+						$courses_list_string .= "</li>\n";
+					}
+				}
+				// 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().
+				//
+				else {
+				$courses_shown++;
+					$courses_list_string .= "<li>\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 .= '<a href="'.$web_course_path.$course['directory'].'/">';
+	                }
+					$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 .= '</a><br />';
+				}
+						if (api_get_setting('display_coursecode_in_courselist') == 'true') {
+						$courses_list_string .= ' '.$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') {
+						$courses_list_string .= $course['tutor_name'];
+	                }
+	                if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
+						$courses_list_string .= ' - '.$course['course_language'];
+	                }
+						if (api_get_setting('show_different_course_language') == 'true' && $course['course_language'] != api_get_setting('platformLanguage')) {
+	                    $courses_list_string .= ' - '.$course['course_language'];
+	                }
+						// 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 .= '<form action="main/auth/courses.php?action=subscribe&category='.Security::remove_XSS($_GET['category']).'" method="post">';
+						$courses_list_string .= '<input type="hidden" name="sec_token" value="'.$stok.'">';
+						$courses_list_string .= '<input type="hidden" name="subscribe" value="'.$course['code'].'" />';
+	                        $courses_list_string .= '<input type="image" name="unsub" src="main/img/enroll.gif" alt="'.get_lang('Subscribe').'" />'.get_lang('Subscribe').'</form>';
+	                    } else {
+	                        $courses_list_string .= '<br />'.get_lang('SubscribingNotAllowed');
+	                        }
+						}
+						$courses_list_string .= "</li>\n";
+	            }
+	        }
+	        $courses_list_string .= "</ul>\n";
+						} else {
+						//echo '<blockquote>', get_lang('_No_course_publicly_available'), "</blockquote>\n";
+	    }
+						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).
+								echo $courses_list_string;
+						}
+								if ($category != '') {
+								echo '<p><a href="'.api_get_self().'"> ', Display :: return_icon('back.png', get_lang('BackToHomePage')), get_lang('BackToHomePage'), '</a></p>', "\n";
+								}
+		}
+	
+	/**
+	* retrieves all the courses that the user has already subscribed to
+		* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
+	* @param int $user_id: the id of the user
+	* @return array an array containing all the information of the courses of the given user
+		*/
+	function get_courses_of_user($user_id) {
+			$table_course       = Database::get_main_table(TABLE_MAIN_COURSE);
+	    	$table_course_user  = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+			// Secondly we select the courses that are in a category (user_course_cat <> 0) and sort these according to the sort of the category
+			$user_id = intval($user_id);
+			$sql_select_courses = "SELECT course.code k, course.visual_code  vc, course.subscribe subscr, course.unsubscribe unsubscr,
+			course.title i, course.tutor_name t, course.db_name db, course.directory dir, course_rel_user.status status,
+			course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat
+			FROM    $table_course       course,
+			$table_course_user  course_rel_user
+			WHERE course.code = course_rel_user.course_code
+			AND   course_rel_user.user_id = '".$user_id."'
+	                                AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH."
+	                                ORDER BY course_rel_user.sort ASC";
+	    $result = Database::query($sql_select_courses);
+	    $courses = array();
+	    while ($row = Database::fetch_array($result)) {
+	        // We only need the database name of the course.
+	        $courses[$row['k']] = array('db' => $row['db'], 'code' => $row['k'], 'visual_code' => $row['vc'], 'title' => $row['i'], 'directory' => $row['dir'], 'status' => $row['status'], 'tutor' => $row['t'], 'subscribe' => $row['subscr'], 'unsubscribe' => $row['unsubscr'], 'sort' => $row['sort'], 'user_course_category' => $row['user_course_cat']);
+	    }
+		return $courses;
+	}
+	
+	
+	function show_right_block($title, $content, $class = '') {
+	    $html = '';  
+		$html.= '<div id="menu" class="menu">';
+		$html.= '<div class="menusection '.$class.' ">';
+		if (!empty($title)) {
+			$html.= '<span class="menusectioncaption">'.$title.'</span>';
+		}
+		$html.= $content;
+	    $html.= '</div>';        
+	    $html.= '</div>';   
+		return $html;
+	}
+	
+	/**
+	 * Adds a form to let users login
+	 * @version 1.1
+	 */
+	function display_login_form() {
+		$form = new FormValidator('formLogin');
+		$form->addElement('text', 'login', get_lang('UserName'), array('size' => 17));
+		$form->addElement('password', 'password', get_lang('Pass'), array('size' => 17));
+		$form->addElement('style_submit_button','submitAuth', get_lang('LoginEnter'), array('class' => 'login'));
+		$renderer =& $form->defaultRenderer();
+		$renderer->setElementTemplate('<div><label>{label}</label></div><div>{element}</div>');
+		$html = $form->return_form();
+		if (api_get_setting('openid_authentication') == 'true') {
+			include_once 'main/auth/openid/login.php';
+			$html .= '<div>'.openid_form().'</div>';
+		}
+		return $html;
+	}
+	
+	function show_login_form($current_user_id) {
+		$login_form = '';
+		if (!($current_user_id) || api_is_anonymous($current_user_id) ) {
+		
+			// Only display if the user isn't logged in.
+			$login_form = api_display_language_form(true);
+		
+			$login_form .= self::display_login_form();
+		
+			if ($loginFailed) {
+				$login_form .= self::handle_login_failed();
+			}
+		
+			if (api_get_setting('allow_lostpassword') == 'true' || api_get_setting('allow_registration') == 'true') {
+				$login_form .= '<div class="menusection"><span class="menusectioncaption">'.get_lang('MenuUser').'</span><ul class="menulist">';
+				if (api_get_setting('allow_registration') != 'false') {
+					$login_form .= '<li><a href="main/auth/inscription.php">'.get_lang('Reg').'</a></li>';
+				}
+				if (api_get_setting('allow_lostpassword') == 'true') {
+					$login_form .= self::display_lost_password_info();
+				}
+				$login_form .= '</ul></div>';
+			}
+		
+			if (api_number_of_plugins('loginpage_menu') > 0) {
+				$login_form .= '<div class="note" style="background: none">';
+				ob_start();
+				api_plugin('loginpage_menu');
+				$plugin_login = ob_get_contents();
+				$login_form .= $plugin_login;
+				$login_form .= '</div>';
+			}
+		}
+		return $login_form;
+	}
+	
+	function return_search_block() {
+		$html = '';
+		
+		if (api_get_setting('search_enabled') == 'true') {
+			$html .= '<div class="searchbox">';
+			$search_btn = get_lang('Search');
+			$search_text_default = get_lang('YourTextHere');
+			$search_content = '<br />
+		    	<form action="main/search/" method="post">
+		    	<input type="text" id="query" size="15" name="query" value="" />
+		    	<button class="save" type="submit" name="submit" value="'.$search_btn.'" />'.$search_btn.' </button>
+		    	</form></div>';    
+			$html .= show_right_block(get_lang('Search'), $search_content);
+		}
+		return $html;	
+	}
+	
+	function return_classes_block() {
+		$html = '';
+		if (api_get_setting('show_groups_to_users') == 'true') {
+			require_once api_get_path(LIBRARY_PATH).'usergroup.lib.php';
+			$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'=>'menulist'));
+				$html .= show_right_block(get_lang('Classes'), $classes);
+			}		
+		}
+		return $html;
+	}
+	
+	function return_reservation_block() {
+		$html = '';
+		if (api_get_setting('allow_reservation') == 'true' && api_is_allowed_to_create_course()) {
+			$booking_content .='<ul class="menulist">';
+			$booking_content .='<a href="main/reservation/reservation.php">'.get_lang('ManageReservations').'</a><br />';
+			$booking_content .='</ul>';
+			$html .= show_right_block(get_lang('Booking'), $booking_content);
+		}
+		return $html;
+	}
+	
+	function return_plugin_courses_block() {
+		global $_plugins;
+		// Plugins for the my courses menu.
+		if (isset($_plugins['mycourses_menu']) && is_array($_plugins['mycourses_menu'])) {
+			ob_start();
+			api_plugin('mycourses_menu');
+			$plugin_content = ob_get_contents();
+			ob_end_clean();
+			echo show_right_block('', $plugin_content);
+		}
+	}
+	
+	function return_profile_block() {
+		$html = '';
+		$user_id = api_get_user_id();
+		if (empty($user_id)) {
+			return; 
+		}
+		
+		//Always show the user image
+		$img_array = UserManager::get_user_picture_path_by_id(api_get_user_id(), 'web', true, true);
+		$no_image = false;
+		if ($img_array['file'] == 'unknown.jpg') {
+			$no_image = true;
+		}
+		$img_array = UserManager::get_picture_user(api_get_user_id(), $img_array['file'], 50, USER_IMAGE_SIZE_MEDIUM, ' width="90" height="90" ');
+		
+		$profile_content = '<div id="social_widget">';
+		
+		$profile_content .= '<div id="social_widget_image">';
+		if (api_get_setting('allow_social_tool') == 'true') {
+			if (!$no_image) {
+				$profile_content .='<a href="'.api_get_path(WEB_PATH).'main/social/home.php"><img src="'.$img_array['file'].'"  '.$img_array['style'].' border="1"></a>';
+			} else {
+				$profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
+			}
+		} else {
+			$profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
+		}
+		$profile_content .= ' </div></div>';
+		
+		//  @todo Add a platform setting to add the user image.
+		if (api_get_setting('allow_message_tool') == 'true') {
+			require_once api_get_path(LIBRARY_PATH).'group_portal_manager.lib.php';
+		
+			// New messages.
+			$number_of_new_messages             = MessageManager::get_new_messages();
+			// New contact invitations.
+			$number_of_new_messages_of_friend   = SocialManager::get_message_number_invitation_by_user_id(api_get_user_id());
+		
+			// New group invitations sent by a moderator.
+			$group_pending_invitations = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_PENDING_INVITATION, false);
+			$group_pending_invitations = count($group_pending_invitations);
+		
+			$total_invitations = $number_of_new_messages_of_friend + $group_pending_invitations;
+			$cant_msg  = '';
+			if ($number_of_new_messages > 0) {
+				$cant_msg = ' ('.$number_of_new_messages.')';
+			}
+			$profile_content .= '<div class="clear"></div>';
+			$profile_content .= '<div class="message-content"><ul class="menulist">';
+			$link = '';
+			if (api_get_setting('allow_social_tool') == 'true') {
+				$link = '?f=social';
+			}
+			$profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php'.$link.'" class="message-body">'.get_lang('Inbox').$cant_msg.' </a></li>';
+			$profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/new_message.php'.$link.'" class="message-body">'.get_lang('Compose').' </a></li>';
+		
+			if (api_get_setting('allow_social_tool') == 'true') {
+				if ($total_invitations == 0) {
+					$total_invitations = '';
+				} else {
+					$total_invitations = ' ('.$total_invitations.')';
+				}
+				$profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/social/invitations.php" class="message-body">'.get_lang('PendingInvitations').' '.$total_invitations.' </a></li>';
+			}
+			$profile_content .= '</ul>';
+			$profile_content .= '</div>';
+		}
+		$html = self::show_right_block(get_lang('Profile'), $profile_content);
+		return $html;
+	}
+	
+	function return_navigation_course_links($menu_navigation) {
+		$html = '';
+		
+		// Deleting the myprofile link.
+		if (api_get_setting('allow_social_tool') == 'true') {
+			unset($menu_navigation['myprofile']);
+		}
+		
+		// Main navigation section.
+		// Tabs that are deactivated are added here.
+		if (!empty($menu_navigation)) {
+			$main_navigation_content .= '<ul class="menulist">';
+		
+			foreach ($menu_navigation as $section => $navigation_info) {
+				$current = $section == $GLOBALS['this_section'] ? ' id="current"' : '';
+				$main_navigation_content .= '<li'.$current.'>';
+				$main_navigation_content .= '<a href="'.$navigation_info['url'].'" target="_self">'.$navigation_info['title'].'</a>';
+				$main_navigation_content .= '</li>';
+			}
+			$main_navigation_content .= '</ul>';
+			$html = self::show_right_block(get_lang('MainNavigation'), $main_navigation_content);
+		}
+		return $html;
+	}
+	
+	function return_account_block() {
+		$html = '';
+		
+		$show_menu        = false;
+		$show_create_link = false;
+		$show_course_link = false;
+		$show_digest_link = false;
+		
+		$display_add_course_link = api_is_allowed_to_create_course() && ($_SESSION['studentview'] != 'studentenview');
+		if ($display_add_course_link) {
+			$show_menu = true;
+			$show_create_link = true;
+		}
+		
+		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 (isset($toolsList) && is_array($toolsList) && isset($digest)) {
+			$show_digest_link = true;
+			$show_menu = true;
+		}
+	
+		
+		// My account section.
+		if ($show_menu) {
+			$my_account_content = '<ul class="menulist">';
+			if ($show_create_link) {
+				$my_account_content .= '<li><a href="main/create_course/add_course.php">'.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'</a></li>';
+			}
+			if ($show_course_link) {
+				if (!api_is_drh()) {
+					$my_account_content .=  '<li><a href="main/auth/courses.php">'.get_lang('CourseManagement').'</a></li>';
+		
+					$url = api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses';
+					$my_account_content .=  Display::url(get_lang('SortMyCourses'), $url);
+		
+					if (api_get_setting('use_session_mode') == 'true') {
+						if (isset($_GET['history']) && intval($_GET['history']) == 1) {
+							$my_account_content .=  '<li><a href="user_portal.php">'.get_lang('DisplayTrainingList').'</a></li>';
+						} else {
+							$my_account_content .=  '<li><a href="user_portal.php?history=1">'.get_lang('HistoryTrainingSessions').'</a></li>';
+						}
+					}
+				} else {
+					$my_account_content .=  '<li><a href="main/dashboard/index.php">'.get_lang('Dashboard').'</a></li>';
+				}
+			}
+			if ($show_digest_link) {
+				//digest never used?
+				//$my_account_content .= Display :: display_digest($toolsList, $digest, $orderKey, $courses);
+			}
+			$my_account_content .= '</ul>';
+		}
+		
+		if (!empty($my_account_content)) {
+			$html =  self::show_right_block(get_lang('MenuUser'), $my_account_content);
+		}
+		return $html;
+	}
+	
+	function return_courses_main_plugin() {
+		ob_start();
+		echo '<div id="plugin-mycourses_main">';
+		api_plugin('mycourses_main');
+		echo '</div>';
+		$plugin_content = ob_get_contents();
+		ob_end_clean();
+		return $plugin_content;
+	}
+	
+	
+	
+	function return_courses_and_sessions($personal_course_list) {
+		
+		// Don't change these settings
+		define('SCRIPTVAL_No', 0);
+		define('SCRIPTVAL_InCourseList', 1);
+		define('SCRIPTVAL_UnderCourseList', 2);
+		define('SCRIPTVAL_Both', 3);
+		define('SCRIPTVAL_NewEntriesOfTheDay', 4);
+		define('SCRIPTVAL_NewEntriesOfTheDayOfLastLogin', 5);
+		define('SCRIPTVAL_NoTimeLimit', 6);
+		// End 'don't change' section	
+		
+		// ---- Course list options ----
+		define('CONFVAL_showCourseLangIfNotSameThatPlatform', true);
+		// Preview of course content
+		// to disable all: set CONFVAL_maxTotalByCourse = 0
+		// to enable all: set e.g. CONFVAL_maxTotalByCourse = 5
+		// by default disabled since what's new icons are better (see function display_digest() )
+		define('CONFVAL_maxValvasByCourse', 2); // Maximum number of entries
+		define('CONFVAL_maxAgendaByCourse', 2); // collected from each course
+		define('CONFVAL_maxTotalByCourse', 0); //  and displayed in summary.
+		define('CONFVAL_NB_CHAR_FROM_CONTENT', 80);
+		// Order to sort data
+		$orderKey = array('keyTools', 'keyTime', 'keyCourse'); // default "best" Choice
+		//$orderKey = array('keyTools', 'keyCourse', 'keyTime');
+		//$orderKey = array('keyCourse', 'keyTime', 'keyTools');
+		//$orderKey = array('keyCourse', 'keyTools', 'keyTime');
+		define('CONFVAL_showExtractInfo', SCRIPTVAL_UnderCourseList);
+		// SCRIPTVAL_InCourseList        // best choice if $orderKey[0] == 'keyCourse'
+		// SCRIPTVAL_UnderCourseList    // best choice
+		// SCRIPTVAL_Both // probably only for debug
+		//define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatShort'));
+		define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatLong'));
+		//define("CONFVAL_limitPreviewTo",SCRIPTVAL_NewEntriesOfTheDay);
+		//define("CONFVAL_limitPreviewTo",SCRIPTVAL_NoTimeLimit);
+		define("CONFVAL_limitPreviewTo", SCRIPTVAL_NewEntriesOfTheDayOfLastLogin);
+		
+		
+		if (isset($_GET['history']) && intval($_GET['history']) == 1) {
+			echo Display::tag('h2', get_lang('HistoryTrainingSession'));
+			//if (empty($courses_tree[0]['sessions'])){
+			if (empty($courses_tree)) {
+				echo get_lang('YouDoNotHaveAnySessionInItsHistory');
+			}
+		}
+		
+		
+		/* PERSONAL COURSE LIST */
+		
+		if (!isset ($maxValvas)) {
+			$maxValvas = CONFVAL_maxValvasByCourse; // Maximum number of entries
+		}
+		if (!isset ($maxAgenda)) {
+			$maxAgenda = CONFVAL_maxAgendaByCourse; // collected from each course
+		}
+		if (!isset ($maxCourse)) {
+			$maxCourse = CONFVAL_maxTotalByCourse; // and displayed in summary.
+		}
+		
+		$maxValvas = (int) $maxValvas;
+		$maxAgenda = (int) $maxAgenda;
+		$maxCourse = (int) $maxCourse; // 0 if invalid.
+		
+		/* DISPLAY COURSES */
+		
+		// Compose a structured array of session categories, sessions and courses
+		// for the current user.
+		
+		if (isset($_GET['history']) && intval($_GET['history']) == 1) {
+			$courses_tree = UserManager::get_sessions_by_category(api_get_user_id(), true, true, true);
+			if (empty($courses_tree[0]) && count($courses_tree) == 1) {
+				$courses_tree = null;
+			}
+		} else {
+			$courses_tree = UserManager::get_sessions_by_category(api_get_user_id(), true, false, true);
+		}
+		
+		if (!empty($courses_tree)) {
+			foreach ($courses_tree as $cat => $sessions) {
+				$courses_tree[$cat]['details'] = SessionManager::get_session_category($cat);
+				if ($cat == 0) {
+					$courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id(api_get_user_id(), false);
+				}
+				$courses_tree[$cat]['sessions'] = array_flip(array_flip($sessions));
+				if (count($courses_tree[$cat]['sessions']) > 0) {
+					foreach ($courses_tree[$cat]['sessions'] as $k => $s_id) {
+						$courses_tree[$cat]['sessions'][$k] = array('details' => SessionManager::fetch($s_id));
+						$courses_tree[$cat]['sessions'][$k]['courses'] = UserManager::get_courses_list_by_session(api_get_user_id(), $s_id);
+					}
+				}
+			}
+		}
+		
+		$list = '';
+		foreach ($personal_course_list as $my_course) {
+			
+			$thisCourseDbName 		= $my_course['db'];
+			$thisCourseSysCode 		= $my_course['k'];
+			$thisCoursePublicCode 	= $my_course['c'];
+			$thisCoursePath 		= $my_course['d'];
+			$sys_course_path 		= api_get_path(SYS_COURSE_PATH);
+			$dbname 				= $my_course['k'];
+			$status 				= array();
+			$status[$dbname] 		= $my_course['s'];
+		
+			$nbDigestEntries = 0; // Number of entries already collected.
+			if ($maxCourse < $maxValvas) {
+				$maxValvas = $maxCourse;
+			}
+			if ($maxCourse > 0) {
+				$courses[$thisCourseSysCode]['coursePath'] = $thisCoursePath;
+				$courses[$thisCourseSysCode]['courseCode'] = $thisCoursePublicCode;
+			}
+		
+			/*  Announcements */
+		
+			$course_database = $my_course['db'];
+			$course_tool_table = Database::get_course_table(TABLE_TOOL_LIST, $course_database);
+			$query = "SELECT visibility FROM $course_tool_table WHERE link = 'announcements/announcements.php' AND visibility = 1";
+			$result = Database::query($query);
+			// Collect from announcements, but only if tool is visible for the course.
+			if ($result && $maxValvas > 0 && Database::num_rows($result) > 0) {
+				// Search announcements table.
+				// Take the entries listed at the top of advalvas/announcements tool.
+				$course_announcement_table = Database::get_course_table(TABLE_ANNOUNCEMENT);
+				$sqlGetLastAnnouncements = "SELECT end_date publicationDate, content
+		                                            FROM ".$course_announcement_table;
+				switch (CONFVAL_limitPreviewTo) {
+					case SCRIPTVAL_NewEntriesOfTheDay :
+						$sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d')."'";
+						break;
+					case SCRIPTVAL_NoTimeLimit :
+						break;
+					case SCRIPTVAL_NewEntriesOfTheDayOfLastLogin :
+						// take care mysql -> DATE_FORMAT(time,format) php -> date(format,date)
+						$sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d', $_user['lastLogin'])."'";
+				}
+				$sqlGetLastAnnouncements .= "ORDER BY end_date DESC LIMIT ".$maxValvas;
+				$resGetLastAnnouncements = Database::query($sqlGetLastAnnouncements);
+				if ($resGetLastAnnouncements) {
+					while ($annoncement = Database::fetch_array($resGetLastAnnouncements)) {
+						$keyTools = 'valvas';
+						$keyTime = $annoncement['publicationDate'];
+						$keyCourse = $thisCourseSysCode;
+						$digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($annoncement['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset);
+						$nbDigestEntries ++; // summary has same order as advalvas
+					}
+				}
+			}
+		
+			/* Agenda */
+		
+			$course_database = $my_course['db'];
+			$course_tool_table = Database :: get_course_table(TABLE_TOOL_LIST, $course_database);
+			$query = "SELECT visibility FROM $course_tool_table WHERE link = 'calendar/agenda.php' AND visibility = 1";
+			$result = Database::query($query);
+			$thisAgenda = $maxCourse - $nbDigestEntries; // New max entries for agenda.
+			if ($maxAgenda < $thisAgenda) {
+				$thisAgenda = $maxAgenda;
+			}
+			// Collect from agenda, but only if tool is visible for the course.
+			if ($result && $thisAgenda > 0 && Database::num_rows($result) > 0) {
+				$tableCal = $courseTablePrefix.$thisCourseDbName.$_configuration['db_glue'].'calendar_event';
+				$sqlGetNextAgendaEvent = "SELECT start_date, title content, start_time
+		                                            FROM $tableCal
+		                                            WHERE start_date >= CURDATE()
+		                                            ORDER BY start_date, start_time
+		                                            LIMIT $maxAgenda";
+				$resGetNextAgendaEvent = Database::query($sqlGetNextAgendaEvent);
+				if ($resGetNextAgendaEvent) {
+					while ($agendaEvent = Database::fetch_array($resGetNextAgendaEvent)) {
+						$keyTools = 'agenda';
+						$keyTime = $agendaEvent['start_date'];
+						$keyCourse = $thisCourseSysCode;
+						$digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($agendaEvent['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset);
+						$nbDigestEntries ++; // Summary has same order as advalvas.
+					}
+				}
+			}
+		} // End while mycourse...
+		
+		
+		if (is_array($courses_tree)) {
+			foreach ($courses_tree as $key => $category) {
+				if ($key == 0) {
+					// Sessions and courses that are not in a session category.
+					if (!isset($_GET['history'])) {
+						// If we're not in the history view...
+						CourseManager :: display_special_courses(api_get_user_id(), $load_dirs);
+						CourseManager :: display_courses(api_get_user_id(), $load_dirs);
+					}
+					// Independent sessions.
+					foreach ($category['sessions'] as $session) {
+		
+						// Don't show empty sessions.
+						if (count($session['courses']) < 1) {
+							continue;
+						}
+		
+						// Courses inside the current session.
+						$date_session_start = $session['details']['date_start'];
+						$days_access_before_beginning  = $session['details']['nb_days_access_before_beginning'] * 24 * 3600;
+		
+						$session_now = time();
+						$html_courses_session = '';
+						$count_courses_session = 0;
+						foreach ($session['courses'] as $course) {
+							$is_coach_course = api_is_coach($session['details']['id'], $course['code']);
+							$allowed_time = 0;
+							if ($date_session_start != '0000-00-00') {
+								if ($is_coach_course) {
+									$allowed_time = api_strtotime($date_session_start) - $days_access_before_beginning;
+								} else {
+									$allowed_time = api_strtotime($date_session_start);
+								}
+							}
+							if ($session_now > $allowed_time) {
+								//read only and accesible
+								if (api_get_setting('hide_courses_in_sessions') == 'false') {
+									$c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item', true, $load_dirs);
+									//$c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item',($session['details']['visibility']==3?false:true));
+									$html_courses_session .= $c[1];
+								}
+								$count_courses_session++;
+							}
+						}
+		
+						if ($count_courses_session > 0) {
+							echo '<div class="userportal-session-item"><ul class="session_box">';
+							echo '<li class="session_box_title" id="session_'.$session['details']['id'].'" >';
+							echo Display::return_icon('window_list.png', get_lang('Expand').'/'.get_lang('Hide'), array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
+		
+							$s = Display :: get_session_title_box($session['details']['id']);
+							$extra_info = (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates'];
+							/*if ($session['details']['visibility'] == 3) {
+							 $session_link = $s['title'];
+							} else {*/
+							$session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id']));
+							//}
+							echo Display::tag('span',$session_link. ' </span> <span style="padding-left: 10px; font-size: 90%; font-weight: normal;">'.$extra_info);
+							if (api_is_platform_admin()) {
+								echo '<div style="float:right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session['details']['id'].'">'.
+								Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a></div>';
+							}
+							echo '</li>';
+							if (api_get_setting('hide_courses_in_sessions') == 'false') {
+								echo $html_courses_session;
+							}
+							echo '</ul></div>';
+						}
+					}
+				} else {
+					// All sessions included in.
+					if (!empty($category['details'])) {
+						$count_courses_session = 0;
+						$html_sessions = '';
+						foreach ($category['sessions'] as $session) {
+							// Don't show empty sessions.
+							if (count($session['courses']) < 1) {
+								continue;
+							}
+							$date_session_start = $session['details']['date_start'];
+							$days_access_before_beginning  = $session['details']['nb_days_access_before_beginning'] * 24 * 3600;
+							$session_now = time();
+							$html_courses_session = '';
+							$count = 0;
+							foreach ($session['courses'] as $course) {
+								$is_coach_course = api_is_coach($session['details']['id'], $course['code']);
+								if ($is_coach_course) {
+									$allowed_time = api_strtotime($date_session_start) - $days_access_before_beginning;
+								} else {
+									$allowed_time = api_strtotime($date_session_start);
+								}
+								if ($session_now > $allowed_time) {
+									$c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item');
+									$html_courses_session .= $c[1];
+									$count_courses_session++;
+									$count++;
+								}
+							}
+		
+							if ($count > 0) {
+								$s = Display :: get_session_title_box($session['details']['id']);
+								$html_sessions .= '<ul class="sub_session_box" id="session_'.$session['details']['id'].'">';
+								$html_sessions .= '<li class="sub_session_box_title" id="session_'.$session['details']['id'].'">';
+								//$html_sessions .= Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
+								$html_sessions .= Display::return_icon('window_list.png', get_lang('Expand').'/'.get_lang('Hide'), array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
+		
+								$session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id']));
+								$html_sessions .=  '<span>' . $session_link. ' </span> ';
+								$html_sessions .=  '<span style="padding-left: 10px; font-size: 90%; font-weight: normal;">';
+								$html_sessions .=  (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates'];
+								$html_sessions .=  '</span>';
+		
+								if (api_is_platform_admin()) {
+									$html_sessions .=  '<div style="float: right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session['details']['id'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a></div>';
+								}
+		
+								$html_sessions .= '</li>';
+								$html_sessions .= $html_courses_session;
+								$html_sessions .= '</ul>';
+							}
+						}
+		
+						if ($count_courses_session > 0) {
+		
+							echo '<div class="userportal-session-category-item" id="session_category_'.$category['details']['id'].'">';
+							echo '<div class="session_category_title_box" id="session_category_title_box_'.$category['details']['id'].'" style="color: #555555;">';
+		
+							echo Display::return_icon('folder_blue.png', get_lang('SessionCategory'), array('width'=>'48px', 'align' => 'absmiddle'));
+		
+							if (api_is_platform_admin()) {
+								echo'<div style="float: right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/session_category_edit.php?&id='.$category['details']['id'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array(),22).'</a></div>';
+							}
+		
+							echo '<span id="session_category_title">';
+							echo $category['details']['name'];
+							echo '</span>';
+		
+							echo '<span style="padding-left: 10px; font-size: 90%; font-weight: normal;">';
+							if ($category['details']['date_end'] != '0000-00-00') {
+								printf(get_lang('FromDateXToDateY'),$category['details']['date_start'],$category['details']['date_end']);
+							}
+							echo '</span></div>';
+		
+							echo $html_sessions;
+							echo '</div>';
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 34 - 0
main/template/default/layout/footer.tpl

@@ -0,0 +1,34 @@
+<div id="footer"> <!-- start of #footer section -->
+	<div id="bottom_corner"></div>
+	<div class="copyright">
+	    {if $show_administrator_data == 'true'}
+	        {* Platform manager *}
+	        <div align="right">
+	            {$administrator_data}            
+	        </div>
+	    {/if}    
+	    <div align="right">
+	    	{$platform}
+	    </div>    
+	</div>  {* //copyright div *}
+	
+	<div class="footer_emails">
+	
+	{*  Plugins for footer section *}
+	
+	<div id="plugin-footer">
+	{$plugin_footer}
+	</div>
+	
+	<div style="clear:both"></div>
+	</div>
+</div> <!-- end of #footer -->
+
+{literal}
+<script>
+$(document).ready( function() {
+    $(".chzn-select").chosen();
+});
+</script>
+{/literal}
+{$execution_stats}

+ 36 - 0
main/template/default/layout/head.tpl

@@ -0,0 +1,36 @@
+<title>{$title_string}</title>
+
+<style type="text/css" media="screen, projection">
+	/*<![CDATA[*/
+	{$css_style}
+	?>
+	/*]]>*/
+</style>
+<style type="text/css" media="print">
+	/*<![CDATA[*/
+	{$css_style_print}
+	/*]]>*/
+</style>	
+{literal}
+<script type="text/javascript">
+//<![CDATA[
+// This is a patch for the "__flash__removeCallback" bug, see FS#4378.
+if ( ( navigator.userAgent.toLowerCase().indexOf('msie') != -1 ) && ( navigator.userAgent.toLowerCase().indexOf( 'opera' ) == -1 ) ) {
+    window.attachEvent( 'onunload', function() {
+            window['__flash__removeCallback'] = function ( instance, name ) {
+                try {
+                    if ( instance ) {
+                        instance[name] = null ;
+                    }
+                } catch ( flashEx ) {
+                }
+            } ;
+    });
+}
+//]]>
+</script>
+{/literal}
+{$js_file_to_string}
+{$css_file_to_string}
+{$extra_headers}
+{$favico}

+ 6 - 0
main/template/default/layout/header.tpl

@@ -0,0 +1,6 @@
+<div id="header">
+	{$header1}
+	{$header2}
+	{$header3}
+	{$header4}
+</div>	

+ 13 - 0
main/template/default/layout/layout_one_col.tpl

@@ -0,0 +1,13 @@
+{extends file="default/layout/main.tpl"}
+
+{block name=header}
+	{include file="default/layout/header.tpl"}	
+{/block}
+
+{block name=body}	
+	{$content}
+{/block}
+
+{block name=footer}
+	{include file="default/layout/header.tpl"}	
+{/block}

+ 27 - 0
main/template/default/layout/layout_two_col.tpl

@@ -0,0 +1,27 @@
+{extends file="default/layout/main.tpl"}
+
+{block name=header}
+	{include file="default/layout/header.tpl"}	
+{/block}
+
+{block name=body}	
+	<div id="maincontent" class="maincontent">
+		{$plugin_courses_block}
+		{$content}
+	</div>
+	
+	<div id="menu-wrapper">	
+		{$profile_block}	
+		{$account_block}
+		{$teacher_block}
+		{$navigation_course_links}
+		{$plugin_courses_right_block}
+		{$reservation_block}
+		{$search_block}
+		{$classes_block}
+	</div>
+{/block}
+
+{block name=footer}
+	{include file="default/layout/footer.tpl"}	
+{/block}

+ 36 - 0
main/template/default/layout/main.tpl

@@ -0,0 +1,36 @@
+<!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{$document_language}" lang="{$document_language}">
+<head>
+{include file="default/layout/head.tpl"}
+</head>
+
+<body dir="{$text_direction}">
+
+<div class="skip">
+	<ul>
+		<li><a href="#menu"><?php echo get_lang('WCAGGoMenu'); ?></a></li>
+		<li><a href="#content" accesskey="2"><?php echo get_lang('WCAGGoContent'); ?></a></li>
+	</ul>
+</div>
+
+<div id="wrapper">
+	{* Bug and help notifications *}		
+	<ul id="navigation">
+		{$help_content}
+		{$bug_notification_link}
+	</ul>	
+	{block name="header"}{/block}
+	<div id="main">
+		<div id="submain">			
+			{block name="body"}{/block}
+			<div class="clear">&nbsp;</div> <!-- 'clearing' div to make sure that footer stays below the main and right column sections -->
+		</div> <!-- end of #main" started at the end of banner.inc.php -->
+	</div> <!-- end of #main" started at the end of banner.inc.php -->
+	<div class="push"></div>
+</div> <!-- end of #wrapper section -->
+
+{block name="footer"}{/block}
+</body>
+</html>

+ 14 - 0
main/template/experimental/layout/layout_one_col.tpl

@@ -0,0 +1,14 @@
+{extends file="default/layout/main.tpl"}
+
+{block name=header}
+	{include file="default/layout/header.tpl"}	
+{/block}
+
+{block name=body}
+	<h1>My experimental Template!!</h1>	
+	{$content}
+{/block}
+
+{block name=footer}
+	{include file="default/layout/header.tpl"}	
+{/block}

+ 28 - 0
main/template/experimental/layout/layout_two_col.tpl

@@ -0,0 +1,28 @@
+{extends file="default/layout/main.tpl"}
+
+{block name=header}
+	{include file="default/layout/header.tpl"}	
+{/block}
+
+{block name=body}
+	<h1>My experimental Template!!</h1>
+	<div id="maincontent" class="maincontent">
+		{$plugin_courses_block}
+		{$content}
+	</div>
+	
+	<div id="menu-wrapper">	
+		{$profile_block}	
+		{$account_block}
+		{$teacher_block}
+		{$navigation_course_links}
+		{$plugin_courses_right_block}
+		{$reservation_block}
+		{$search_block}
+		{$classes_block}
+	</div>
+{/block}
+
+{block name=footer}
+	{include file="default/layout/footer.tpl"}	
+{/block}

+ 31 - 582
user_portal.php

@@ -21,17 +21,6 @@
 /**
  * INIT SECTION
  */
-
-// Don't change these settings
-define('SCRIPTVAL_No', 0);
-define('SCRIPTVAL_InCourseList', 1);
-define('SCRIPTVAL_UnderCourseList', 2);
-define('SCRIPTVAL_Both', 3);
-define('SCRIPTVAL_NewEntriesOfTheDay', 4);
-define('SCRIPTVAL_NewEntriesOfTheDayOfLastLogin', 5);
-define('SCRIPTVAL_NoTimeLimit', 6);
-// End 'don't change' section
-
 // Language files that should be included.
 $language_file = array('courses', 'index','admin');
 
@@ -44,54 +33,17 @@ if (isset($_SESSION['this_section']))
 /* Included libraries */
 
 require_once './main/inc/global.inc.php';
-$libpath = api_get_path(LIBRARY_PATH);
-require_once $libpath.'system_announcements.lib.php';
-require_once $libpath.'groupmanager.lib.php';
-require_once 'main/survey/survey.lib.php';
-require_once $libpath.'sessionmanager.lib.php';
-
-api_block_anonymous_users(); // Only users who are logged in can proceed.
+require_once api_get_path(LIBRARY_PATH).'userportal.lib.php';
 
-/* Table definitions */
 
-// Database table definitions.
-$main_user_table        = Database :: get_main_table(TABLE_MAIN_USER);
-$main_admin_table       = Database :: get_main_table(TABLE_MAIN_ADMIN);
-$main_course_table      = Database :: get_main_table(TABLE_MAIN_COURSE);
-$main_course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
-$main_category_table    = Database :: get_main_table(TABLE_MAIN_CATEGORY);
+api_block_anonymous_users(); // Only users who are logged in can proceed.
 
 /* Constants and CONFIGURATION parameters */
 
-// ---- Course list options ----
-define('CONFVAL_showCourseLangIfNotSameThatPlatform', true);
-// Preview of course content
-// to disable all: set CONFVAL_maxTotalByCourse = 0
-// to enable all: set e.g. CONFVAL_maxTotalByCourse = 5
-// by default disabled since what's new icons are better (see function display_digest() )
-define('CONFVAL_maxValvasByCourse', 2); // Maximum number of entries
-define('CONFVAL_maxAgendaByCourse', 2); // collected from each course
-define('CONFVAL_maxTotalByCourse', 0); //  and displayed in summary.
-define('CONFVAL_NB_CHAR_FROM_CONTENT', 80);
-// Order to sort data
-$orderKey = array('keyTools', 'keyTime', 'keyCourse'); // default "best" Choice
-//$orderKey = array('keyTools', 'keyCourse', 'keyTime');
-//$orderKey = array('keyCourse', 'keyTime', 'keyTools');
-//$orderKey = array('keyCourse', 'keyTools', 'keyTime');
-define('CONFVAL_showExtractInfo', SCRIPTVAL_UnderCourseList);
-// SCRIPTVAL_InCourseList        // best choice if $orderKey[0] == 'keyCourse'
-// SCRIPTVAL_UnderCourseList    // best choice
-// SCRIPTVAL_Both // probably only for debug
-//define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatShort'));
-define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatLong'));
-//define("CONFVAL_limitPreviewTo",SCRIPTVAL_NewEntriesOfTheDay);
-//define("CONFVAL_limitPreviewTo",SCRIPTVAL_NoTimeLimit);
-define("CONFVAL_limitPreviewTo", SCRIPTVAL_NewEntriesOfTheDayOfLastLogin);
 
 //$load_dirs = api_get_setting('courses_list_document_dynamic_dropdown');
 $load_dirs = true;
 
-
 // This is the main function to get the course list.
 $personal_course_list = UserManager::get_personal_session_course_list(api_get_user_id());
 
@@ -150,18 +102,17 @@ if (api_get_setting('go_to_course_after_login') == 'true') {
         }
     */    
 }
-
+/*
 $nosession = false;
-
 if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
     $display_actives = !isset($_GET['inactives']);
-}
+}*/
 
 $nameTools = get_lang('MyCourses');
 $this_section = SECTION_COURSES;
 
 /* Check configuration parameters integrity */
-
+/*
 if (CONFVAL_showExtractInfo != SCRIPTVAL_UnderCourseList and $orderKey[0] != 'keyCourse') {
     // CONFVAL_showExtractInfo must be SCRIPTVAL_UnderCourseList to accept $orderKey[0] != 'keyCourse'
     if (DEBUG || api_is_platform_admin()){ // Show bug if admin. Else force a new order.
@@ -184,7 +135,8 @@ if (CONFVAL_showExtractInfo != SCRIPTVAL_UnderCourseList and $orderKey[0] != 'ke
     } else {
         $orderKey = array('keyCourse', 'keyTools', 'keyTime');
     }
-}
+}*/
+
 
 /*
     Header
@@ -231,552 +183,49 @@ if ($load_dirs) {
 	</script>';
 }
 
-
 Display :: display_header($nameTools);
 
 /* MAIN CODE */
 
-/* PERSONAL COURSE LIST */
-
-if (!isset ($maxValvas)) {
-    $maxValvas = CONFVAL_maxValvasByCourse; // Maximum number of entries
-}
-if (!isset ($maxAgenda)) {
-    $maxAgenda = CONFVAL_maxAgendaByCourse; // collected from each course
-}
-if (!isset ($maxCourse)) {
-    $maxCourse = CONFVAL_maxTotalByCourse; // and displayed in summary.
-}
-$maxValvas = (int) $maxValvas;
-$maxAgenda = (int) $maxAgenda;
-$maxCourse = (int) $maxCourse; // 0 if invalid.
-if ($maxCourse > 0) {
-    unset ($allentries); // We shall collect all summary$key1 entries in here:
-    $toolsList['agenda']['name'] = get_lang('Agenda');
-    $toolsList['agenda']['path'] = api_get_path(WEB_CODE_PATH).'calendar/agenda.php?cidReq=';
-    $toolsList['valvas']['name'] = get_lang('Valvas');
-    $toolsList['valvas']['path'] = api_get_path(WEB_CODE_PATH).'announcements/announcements.php?cidReq=';
-}
+$index = new IndexManager($nameTools, false);
 
 echo '<div class="maincontent" id="maincontent">'; // Start of content for logged in users.
-
-
-
-    
-// Plugins for the my courses main area.
-echo '<div id="plugin-mycourses_main">';
-api_plugin('mycourses_main');
-echo '</div>';
-
-
-/*$url = api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses';
-echo Display::div(Display::url(Display::return_icon('course_move.png', get_lang('SortMyCourses'),'','32'), $url), array('class'=>'userportal-order-courses-link'));*/
-
-if (!empty ($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/',$_GET['include'])) {
-    include './home/'.$_GET['include'];
-    $pageIncluded = true;
-} else {
-
-    /* DISPLAY COURSES */
-
-    // Compose a structured array of session categories, sessions and courses
-    // for the current user.
-
-    if (isset($_GET['history']) && intval($_GET['history']) == 1) {
-        $courses_tree = UserManager::get_sessions_by_category(api_get_user_id(), true, true, true);
-        if (empty($courses_tree[0]) && count($courses_tree) == 1) {
-            $courses_tree = null;
-        }
-    } else {
-        $courses_tree = UserManager::get_sessions_by_category(api_get_user_id(), true, false, true);
-    }    
-    
-  
-    
-    if (!empty($courses_tree)) {
-        foreach ($courses_tree as $cat => $sessions) {
-            $courses_tree[$cat]['details'] = SessionManager::get_session_category($cat);
-            if ($cat == 0) {
-                $courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id(api_get_user_id(), false);
-            }
-            $courses_tree[$cat]['sessions'] = array_flip(array_flip($sessions));
-            if (count($courses_tree[$cat]['sessions']) > 0) {
-                foreach ($courses_tree[$cat]['sessions'] as $k => $s_id) {
-                    $courses_tree[$cat]['sessions'][$k] = array('details' => SessionManager::fetch($s_id));
-                    $courses_tree[$cat]['sessions'][$k]['courses'] = UserManager::get_courses_list_by_session(api_get_user_id(), $s_id);
-                }
-            }
-        }
-    }
-
-    $list = '';
-    foreach ($personal_course_list as $my_course) {
-        $thisCourseDbName = $my_course['db'];
-        $thisCourseSysCode = $my_course['k'];
-        $thisCoursePublicCode = $my_course['c'];
-        $thisCoursePath = $my_course['d'];
-        $sys_course_path = api_get_path(SYS_COURSE_PATH);
-        $dbname = $my_course['k'];
-        $status = array();
-        $status[$dbname] = $my_course['s'];
-
-        $nbDigestEntries = 0; // Number of entries already collected.
-        if ($maxCourse < $maxValvas) {
-            $maxValvas = $maxCourse;
-        }
-        if ($maxCourse > 0) {
-            $courses[$thisCourseSysCode]['coursePath'] = $thisCoursePath;
-            $courses[$thisCourseSysCode]['courseCode'] = $thisCoursePublicCode;
-        }
-
-        /*  Announcements */
-
-        $course_database = $my_course['db'];
-        $course_tool_table = Database::get_course_table(TABLE_TOOL_LIST, $course_database);
-        $query = "SELECT visibility FROM $course_tool_table WHERE link = 'announcements/announcements.php' AND visibility = 1";
-        $result = Database::query($query);
-        // Collect from announcements, but only if tool is visible for the course.
-        if ($result && $maxValvas > 0 && Database::num_rows($result) > 0) {
-            // Search announcements table.
-            // Take the entries listed at the top of advalvas/announcements tool.
-            $course_announcement_table = Database::get_course_table(TABLE_ANNOUNCEMENT);
-            $sqlGetLastAnnouncements = "SELECT end_date publicationDate, content
-                                            FROM ".$course_announcement_table;
-            switch (CONFVAL_limitPreviewTo) {
-                case SCRIPTVAL_NewEntriesOfTheDay :
-                    $sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d')."'";
-                    break;
-                case SCRIPTVAL_NoTimeLimit :
-                    break;
-                case SCRIPTVAL_NewEntriesOfTheDayOfLastLogin :
-                    // take care mysql -> DATE_FORMAT(time,format) php -> date(format,date)
-                    $sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d', $_user['lastLogin'])."'";
-            }
-            $sqlGetLastAnnouncements .= "ORDER BY end_date DESC LIMIT ".$maxValvas;
-            $resGetLastAnnouncements = Database::query($sqlGetLastAnnouncements);
-            if ($resGetLastAnnouncements) {
-                while ($annoncement = Database::fetch_array($resGetLastAnnouncements)) {
-                    $keyTools = 'valvas';
-                    $keyTime = $annoncement['publicationDate'];
-                    $keyCourse = $thisCourseSysCode;
-                    $digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($annoncement['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset);
-                    $nbDigestEntries ++; // summary has same order as advalvas
-                }
-            }
-        }
-
-        /* Agenda */
-
-        $course_database = $my_course['db'];
-        $course_tool_table = Database :: get_course_table(TABLE_TOOL_LIST, $course_database);
-        $query = "SELECT visibility FROM $course_tool_table WHERE link = 'calendar/agenda.php' AND visibility = 1";
-        $result = Database::query($query);
-        $thisAgenda = $maxCourse - $nbDigestEntries; // New max entries for agenda.
-        if ($maxAgenda < $thisAgenda) {
-            $thisAgenda = $maxAgenda;
-        }
-        // Collect from agenda, but only if tool is visible for the course.
-        if ($result && $thisAgenda > 0 && Database::num_rows($result) > 0) {
-            $tableCal = $courseTablePrefix.$thisCourseDbName.$_configuration['db_glue'].'calendar_event';
-            $sqlGetNextAgendaEvent = "SELECT start_date, title content, start_time
-                                            FROM $tableCal
-                                            WHERE start_date >= CURDATE()
-                                            ORDER BY start_date, start_time
-                                            LIMIT $maxAgenda";
-            $resGetNextAgendaEvent = Database::query($sqlGetNextAgendaEvent);
-            if ($resGetNextAgendaEvent) {
-                while ($agendaEvent = Database::fetch_array($resGetNextAgendaEvent)) {
-                    $keyTools = 'agenda';
-                    $keyTime = $agendaEvent['start_date'];
-                    $keyCourse = $thisCourseSysCode;
-                    $digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($agendaEvent['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset);
-                    $nbDigestEntries ++; // Summary has same order as advalvas.
-                }
-            }
-        }
-
-        /*
-            Digest Display
-            Take collected data and display it.
-        */
-
-    } // End while mycourse...
-}
-
-if (isset($_GET['history']) && intval($_GET['history']) == 1) {
-    echo Display::tag('h2', get_lang('HistoryTrainingSession'));    
-    //if (empty($courses_tree[0]['sessions'])){    
-    if (empty($courses_tree)){
-        echo get_lang('YouDoNotHaveAnySessionInItsHistory');
-    }
-}
-
-if (is_array($courses_tree)) {
-    foreach ($courses_tree as $key => $category) {
-        if ($key == 0) {
-            // Sessions and courses that are not in a session category.
-            if (!isset($_GET['history'])) { 
-               // If we're not in the history view...
-                CourseManager :: display_special_courses(api_get_user_id(), $load_dirs);
-                CourseManager :: display_courses(api_get_user_id(), $load_dirs);
-            }
-            // Independent sessions.
-            foreach ($category['sessions'] as $session) {
-
-                // Don't show empty sessions.
-                if (count($session['courses']) < 1) { continue; }
-
-                // Courses inside the current session.
-                $date_session_start = $session['details']['date_start'];
-                $days_access_before_beginning  = $session['details']['nb_days_access_before_beginning'] * 24 * 3600;
-                
-                $session_now = time();
-                $html_courses_session = '';
-                $count_courses_session = 0;
-                foreach ($session['courses'] as $course) {
-                    $is_coach_course = api_is_coach($session['details']['id'], $course['code']);
-                    $allowed_time = 0;
-                    if ($date_session_start != '0000-00-00') {
-                        if ($is_coach_course) {                        
-                            $allowed_time = api_strtotime($date_session_start) - $days_access_before_beginning;
-                        } else {
-                            $allowed_time = api_strtotime($date_session_start);
-                        }                    
-                    }
-                    if ($session_now > $allowed_time) { //read only and accesible
-                        if (api_get_setting('hide_courses_in_sessions') == 'false') {  
-                            $c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item', true, $load_dirs);
-                            //$c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item',($session['details']['visibility']==3?false:true));
-                            $html_courses_session .= $c[1];
-                        }
-                        $count_courses_session++;
-                    }
-                }
-                
-                if ($count_courses_session > 0) {
-                    echo '<div class="userportal-session-item"><ul class="session_box">';
-                        echo '<li class="session_box_title" id="session_'.$session['details']['id'].'" >';
-                        echo Display::return_icon('window_list.png', get_lang('Expand').'/'.get_lang('Hide'), array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
-
-                        $s = Display :: get_session_title_box($session['details']['id']);
-                        $extra_info = (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates'];
-                        /*if ($session['details']['visibility'] == 3) {
-                            $session_link = $s['title'];
-                        } else {*/
-                            $session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id']));
-                        //}
-                        echo Display::tag('span',$session_link. ' </span> <span style="padding-left: 10px; font-size: 90%; font-weight: normal;">'.$extra_info);
-                        if (api_is_platform_admin()) {
-                            echo '<div style="float:right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session['details']['id'].'">'.
-                            Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a></div>';
-                        }
-                        echo '</li>';
-                        if (api_get_setting('hide_courses_in_sessions') == 'false') {
-                            echo $html_courses_session;
-                        }
-                    echo '</ul></div>';
-                } 
-            }
-        } else {
-            // All sessions included in.
-            if (!empty($category['details'])) {
-                $count_courses_session = 0;
-                $html_sessions = '';
-                foreach ($category['sessions'] as $session) {
-                    // Don't show empty sessions.
-                    if (count($session['courses']) < 1) { continue; }
-                    $date_session_start = $session['details']['date_start'];
-                    $days_access_before_beginning  = $session['details']['nb_days_access_before_beginning'] * 24 * 3600;
-                    $session_now = time();
-                    $html_courses_session = '';
-                    $count = 0;
-                    foreach ($session['courses'] as $course) {
-                        $is_coach_course = api_is_coach($session['details']['id'], $course['code']);
-                        if ($is_coach_course) {
-                            $allowed_time = api_strtotime($date_session_start) - $days_access_before_beginning;
-                        } else {
-                            $allowed_time = api_strtotime($date_session_start);
-                        }
-                        if ($session_now > $allowed_time) {
-                            $c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item');
-                            $html_courses_session .= $c[1];
-                            $count_courses_session++;
-                            $count++;
-                        }
-                    }
-
-                    if ($count > 0) {
-                        $s = Display :: get_session_title_box($session['details']['id']);
-                        $html_sessions .= '<ul class="sub_session_box" id="session_'.$session['details']['id'].'">';
-                        $html_sessions .= '<li class="sub_session_box_title" id="session_'.$session['details']['id'].'">';
-                        //$html_sessions .= Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
-                        $html_sessions .= Display::return_icon('window_list.png', get_lang('Expand').'/'.get_lang('Hide'), array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';
-
-                        $session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id']));                        
-                        $html_sessions .=  '<span>' . $session_link. ' </span> ';
-                        $html_sessions .=  '<span style="padding-left: 10px; font-size: 90%; font-weight: normal;">';
-                        $html_sessions .=  (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates'];
-                        $html_sessions .=  '</span>';
-
-                        if (api_is_platform_admin()) {
-                            $html_sessions .=  '<div style="float: right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session['details']['id'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a></div>';
-                        }
-
-                        $html_sessions .= '</li>';
-                        $html_sessions .= $html_courses_session;
-                        $html_sessions .= '</ul>';
-                    }
-                }
-
-                if ($count_courses_session > 0) {
-
-                    echo '<div class="userportal-session-category-item" id="session_category_'.$category['details']['id'].'">';
-                    echo '<div class="session_category_title_box" id="session_category_title_box_'.$category['details']['id'].'" style="color: #555555;">';
-            
-                    echo Display::return_icon('folder_blue.png', get_lang('SessionCategory'), array('width'=>'48px', 'align' => 'absmiddle'));
-
-                    if (api_is_platform_admin()) {
-                        echo'<div style="float: right;"><a href="'.api_get_path(WEB_CODE_PATH).'admin/session_category_edit.php?&id='.$category['details']['id'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array(),22).'</a></div>';
-                    }
-
-                    echo '<span id="session_category_title">';
-                    echo $category['details']['name'];
-                    echo '</span>';
-
-                    echo '<span style="padding-left: 10px; font-size: 90%; font-weight: normal;">';                    
-                    if ($category['details']['date_end'] != '0000-00-00') {
-                        printf(get_lang('FromDateXToDateY'),$category['details']['date_start'],$category['details']['date_end']);
-                    }
-                    echo '</span></div>';
-
-                    echo $html_sessions;
-                    echo '</div>';
-                }
-            }
-        }
-    }
-}
+   
+	// Plugins for the my courses main area.	
+	echo $index->return_courses_main_plugin(); 	
+	
+	// Main courses and session list
+	echo $index->return_courses_and_sessions($personal_course_list);    
 
 echo '</div>'; // End of content main-section
 
 
-
-
-// Register whether full admin or null admin course
-// by course through an array dbname x user status.
+// Register whether full admin or null admin course by course through an array dbname x user status.
 api_session_register('status');
 
 /* RIGHT MENU */
 
-$show_menu        = false;
-$show_create_link = false;
-$show_course_link = false;
-$show_digest_link = false;
-
-$display_add_course_link = api_is_allowed_to_create_course() && ($_SESSION['studentview'] != 'studentenview');
-if ($display_add_course_link) {
-    $show_menu = true;
-    $show_create_link = true;
-}
-
-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 (isset($toolsList) && is_array($toolsList) && isset($digest)) {
-    $show_digest_link = true;
-    $show_menu = true;
-}
-
-//Always show the user image
-$img_array = UserManager::get_user_picture_path_by_id(api_get_user_id(), 'web', true, true);
-$no_image = false;
-if ($img_array['file'] == 'unknown.jpg') {
-    $no_image = true;
-}
-$img_array = UserManager::get_picture_user(api_get_user_id(), $img_array['file'], 50, USER_IMAGE_SIZE_MEDIUM, ' width="90" height="90" ');
-
-$profile_content = '<div id="social_widget">';
-
-$profile_content .= '<div id="social_widget_image">';
-if (api_get_setting('allow_social_tool') == 'true') {
-    if (!$no_image) {
-        $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/social/home.php"><img src="'.$img_array['file'].'"  '.$img_array['style'].' border="1"></a>';
-    } else {
-        $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
-    }
-} else {
-    $profile_content .='<a href="'.api_get_path(WEB_PATH).'main/auth/profile.php"><img title="'.get_lang('EditProfile').'" src="'.$img_array['file'].'" '.$img_array['style'].' border="1"></a>';
-}
-$profile_content .= ' </div></div>';
-
-//  @todo Add a platform setting to add the user image.
-if (api_get_setting('allow_message_tool') == 'true') {
-    require_once api_get_path(LIBRARY_PATH).'group_portal_manager.lib.php';
-
-    // New messages.
-    $number_of_new_messages             = MessageManager::get_new_messages();
-    // New contact invitations.
-    $number_of_new_messages_of_friend   = SocialManager::get_message_number_invitation_by_user_id(api_get_user_id());
-
-    // New group invitations sent by a moderator.
-    $group_pending_invitations = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_PENDING_INVITATION, false);
-    $group_pending_invitations = count($group_pending_invitations);
-
-    $total_invitations = $number_of_new_messages_of_friend + $group_pending_invitations;
-    $cant_msg  = '';
-    if ($number_of_new_messages > 0) {
-        $cant_msg = ' ('.$number_of_new_messages.')';
-    }
-    $profile_content .= '<div class="clear"></div>';
-    $profile_content .= '<div class="message-content"><ul class="menulist">';
-    $link = '';
-    if (api_get_setting('allow_social_tool') == 'true') {
-        $link = '?f=social';
-    }
-    $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php'.$link.'" class="message-body">'.get_lang('Inbox').$cant_msg.' </a></li>';
-    $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/messages/new_message.php'.$link.'" class="message-body">'.get_lang('Compose').' </a></li>';
-    
-    if (api_get_setting('allow_social_tool') == 'true') {
-        if ($total_invitations == 0) {
-            $total_invitations = '';
-        } else {
-           $total_invitations = ' ('.$total_invitations.')';
-        }
-        $profile_content .= '<li><a href="'.api_get_path(WEB_PATH).'main/social/invitations.php" class="message-body">'.get_lang('PendingInvitations').' '.$total_invitations.' </a></li>';
-    }
-    $profile_content .= '</ul>';
-    $profile_content .= '</div>';      
-}
-
 echo '<div id="menu-wrapper">';
-//Profile content
-echo show_right_block(get_lang('Profile'), $profile_content);
-
-// My account section.
-if ($show_menu) {
-    $my_account_content = '<ul class="menulist">';
-    if ($show_create_link) {
-        $my_account_content .= '<li><a href="main/create_course/add_course.php">'.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'</a></li>';
-    }
-    if ($show_course_link) {
-        if (!api_is_drh()) {
-            $my_account_content .=  '<li><a href="main/auth/courses.php">'.get_lang('CourseManagement').'</a></li>';
-            
-            $url = api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses';
-            $my_account_content .=  Display::url(get_lang('SortMyCourses'), $url);
-            
-            if (api_get_setting('use_session_mode') == 'true') {
-                if (isset($_GET['history']) && intval($_GET['history']) == 1) {
-                    $my_account_content .=  '<li><a href="user_portal.php">'.get_lang('DisplayTrainingList').'</a></li>';
-                } else {
-                    $my_account_content .=  '<li><a href="user_portal.php?history=1">'.get_lang('HistoryTrainingSessions').'</a></li>';
-                }
-            }
-        } else {
-             $my_account_content .=  '<li><a href="main/dashboard/index.php">'.get_lang('Dashboard').'</a></li>';
-        }
-    }
-    if ($show_digest_link) {    
-       $my_account_content .= Display :: display_digest($toolsList, $digest, $orderKey, $courses);
-    }
-    $my_account_content .= '</ul>';
-}
-
-if (!empty($my_account_content)) {
-    echo show_right_block(get_lang('MenuUser'), $my_account_content);
-}
-
-// Deleting the myprofile link.
-if (api_get_setting('allow_social_tool') == 'true') {
-    unset($menu_navigation['myprofile']);
-}
-
-// Main navigation section.
-// Tabs that are deactivated are added here.
-if (!empty($menu_navigation)) {    
-    $main_navigation_content .= '<ul class="menulist">';
-        
-    foreach ($menu_navigation as $section => $navigation_info) {
-        $current = $section == $GLOBALS['this_section'] ? ' id="current"' : '';
-        $main_navigation_content .= '<li'.$current.'>';
-        $main_navigation_content .= '<a href="'.$navigation_info['url'].'" target="_self">'.$navigation_info['title'].'</a>';
-        $main_navigation_content .= '</li>';
-    }
-    $main_navigation_content .= '</ul>';
-    echo show_right_block(get_lang('MainNavigation'), $main_navigation_content);    
-}
 
-// Plugins for the my courses menu.
-if (isset($_plugins['mycourses_menu']) && is_array($_plugins['mycourses_menu'])) {    
-    ob_start();
-    api_plugin('mycourses_menu');
-    $plugin_content = ob_get_contents();
-    ob_end_clean();
-    echo show_right_block('', $plugin_content);
-}
+	//Profile content
+	echo $index->return_profile_block();
+	
+	echo $index->return_account_block();
+	
+	echo $index->return_navigation_course_links($menu_navigation);
+	
+	echo $index->return_plugin_courses_block();
+	
+	echo $index->return_reservation_block();
+	
+	echo $index->return_search_block();
+	
+	echo $index->return_classes_block();
 
-if (api_get_setting('allow_reservation') == 'true' && api_is_allowed_to_create_course()) {
-    $booking_content .='<ul class="menulist">';
-    $booking_content .='<a href="main/reservation/reservation.php">'.get_lang('ManageReservations').'</a><br />';
-    $booking_content .='</ul>';    
-    echo show_right_block(get_lang('Booking'), $booking_content);
-}
+echo '</div>'; // End of menu wrapper
 
 // Deleting the session_id.
 api_session_unregister('session_id');
 
-// Search textbox.
-if (api_get_setting('search_enabled') == 'true') {
-    echo '<div class="searchbox">';
-    $search_btn = get_lang('Search');
-    $search_text_default = get_lang('YourTextHere');
-    $search_content = '<br />
-    	<form action="main/search/" method="post">
-    	<input type="text" id="query" size="15" name="query" value="" />
-    	<button class="save" type="submit" name="submit" value="'.$search_btn.'" />'.$search_btn.' </button>
-    	</form></div>';    
-    echo show_right_block(get_lang('Search'), $search_content);  
-}
-
-if (api_get_setting('show_groups_to_users') == 'true') {   
-    require_once api_get_path(LIBRARY_PATH).'usergroup.lib.php';
-    $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'=>'menulist'));  
-        echo show_right_block(get_lang('Classes'), $classes);
-    }
-}
-echo '</div>'; // End of menu wrapper
-
-function show_right_block($title, $content) {    
-   
-        $html= '<div id="menu" class="menu">';    
-            $html.= '<div class="menusection">';
-                $html.= '<span class="menusectioncaption">'.$title.'</span>';        
-                $html.= $content;
-            $html.= '</div>';        
-        $html.= '</div>';
-   
-    return $html;
-}
 // Footer
-Display :: display_footer();
+Display :: display_footer();

+ 49 - 0
userportal-smarty.php

@@ -0,0 +1,49 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+/**
+ * @package chamilo.main 
+ */
+
+define('CHAMILO_HOMEPAGE', true);
+$language_file = array('courses', 'index');
+
+/* Flag forcing the 'current course' reset, as we're not inside a course anymore. */
+// Maybe we should change this into an api function? an example: Coursemanager::unset();
+$cidReset = true;
+
+/* Included libraries */
+require_once 'main/inc/global.inc.php';
+require_once api_get_path(LIBRARY_PATH).'userportal.lib.php';
+
+api_block_anonymous_users(); // Only users who are logged in can proceed.
+
+$userportal = new IndexManager(' ');
+$tpl = $userportal->tpl->get_template('layout/layout_two_col.tpl');
+
+//if (!$userportal->tpl->isCached($tpl, api_get_user_id())) {
+		
+	//@todo all this could be moved in the IndexManager
+		
+	$courses_list 			= $userportal->return_courses_main_plugin();
+	$personal_course_list 	= UserManager::get_personal_session_course_list(api_get_user_id());
+	
+		
+	// Main courses and session list
+	ob_start();
+	$userportal->return_courses_and_sessions($personal_course_list);
+	$courses_and_sessions = ob_get_contents();
+	ob_get_clean();	
+	$userportal->tpl->assign('plugin_courses_block', 		$userportal->return_courses_main_plugin());
+	$userportal->tpl->assign('content', 					$courses_and_sessions);	
+	$userportal->tpl->assign('profile_block', 				$userportal->return_profile_block());
+	$userportal->tpl->assign('account_block',				$userportal->return_account_block());
+	$userportal->tpl->assign('navigation_course_links', 	$userportal->return_navigation_course_links($menu_navigation));
+	$userportal->tpl->assign('plugin_courses_right_block', 	$userportal->return_plugin_courses_block());
+	$userportal->tpl->assign('reservation_block', 			$userportal->return_reservation_block());
+	$userportal->tpl->assign('search_block', 				$userportal->return_search_block());
+	$userportal->tpl->assign('classes_block', 				$userportal->return_classes_block());	
+/*} else {	
+}*/
+$userportal->tpl->display($tpl);
+