<?php

/************************************************************************/
/* DOCEBO LMS - Learning Managment System                               */
/* ============================================                         */
/*                                                                      */
/* Copyright (c) 2004                                                   */
/* http://www.docebo.com                                                */
/*                                                                      */
/* This program is free software. You can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License.       */
/************************************************************************/

if(!defined('IN_DOCEBO')) die('You cannot access this file directly');

if($GLOBALS['current_user']->isAnonymous()) die("You can't access");

require_once($GLOBALS['where_lms'].'/lib/lib.levels.php');
require_once($GLOBALS['where_lms'].'/lib/lib.course.php');

function mycourses(&$url) {
	checkPerm('view');
	require_once($GLOBALS['where_framework'].'/lib/lib.user_profile.php');
	$lang 		=& DoceboLanguage::createInstance('coursecatalogue');

	require_once($GLOBALS['where_lms'].'/lib/lib.middlearea.php');
	$ma = new Man_MiddleArea();

	$course_stats = userCourseList($url, $ma->currentCanAccessObj('lo_tab'));

	$access_career 				= $ma->currentCanAccessObj('career');
	$access_news 				= $ma->currentCanAccessObj('news');
	$access_search_form 		= $ma->currentCanAccessObj('search_form');
	$access_user_details_full 	= $ma->currentCanAccessObj('user_details_full');
	$access_user_details_short 	= $ma->currentCanAccessObj('user_details_short');

	$onecol = (!$access_career && !$access_news && !$access_user_details_full && !$access_user_details_short);

	require_once($GLOBALS['where_framework'].'/lib/lib.myfriends.php');
	$friends = new MyFriends(getLogUserId());
	$pendent = count($friends->getPendentRequest());

	$GLOBALS['page']->addStart(''
		.'<div id="mycourse_top">'
		.( $onecol ? '' : '<div class="mycourse_left">' )
	, 'content');


	// user_details_short ------------------------------------------------------------------------

	if($access_user_details_short) {

		$profile = new UserProfile(getLogUserId());
		$profile->init('profile', 'lms', 'index.php?modname=course&op=mycourses', 'ap');
		$GLOBALS['page']->addStart($profile->userIdMailProfile('normal', false, false), 'content');
	}
	// user_details_full ------------------------------------------------------------------------
	if($access_user_details_full) {

		$profile = new UserProfile(getLogUserId());
		$profile->init('profile', 'lms', 'index.php?modname=course&op=mycourses', 'ap');
		$GLOBALS['page']->addStart($profile->homeUserProfile('normal', false, false), 'content');

	}
	// career ------------------------------------------------------------------------
	if($access_career) {

		$base_url = 'index.php?modname=course&amp;op=mycourses&amp;filter=';
		$end = 0;
		if(isset($course_stats['with_ustatus'][_CUS_END]) && $course_stats['with_ustatus'][_CUS_END] != 0) {
			$end = $course_stats['with_ustatus'][_CUS_END];
		}
		

		$GLOBALS['page']->addStart(''
			.'<div class="course_stat">'
			.'<table summary="">'
			.'<caption>'.$lang->def('_CAREER').'</caption>'

			.'<tr><th scope="row">'.$lang->def('_TOTAL_COURSE').' :</th><td><a href="'.$base_url.'nothing">'.($course_stats['total'] - $end).'</a></td></tr>'
			
			.( isset($course_stats['with_ustatus'][_CUS_END]) && $course_stats['with_ustatus'][_CUS_END] != 0
				? '<tr><th scope="row">'.$lang->def('_COURSE_END').' :</th><td><a href="'.$base_url.'end">'.$course_stats['with_ustatus'][_CUS_END].'</a></td></tr>'
				: '' )

			.( isset($course_stats['expiring']) && $course_stats['expiring'] != 0
				? '<tr><th scope="row">'.$lang->def('_COURSE_EXPIRING').' :</th><td><a href="'.$base_url.'expiring">'.$course_stats['expiring'].'</a></td></tr>'
				: '' )

		, 'content');
		
		if(count($course_stats['with_ulevel']) > 1) {

			require_once($GLOBALS['where_lms'].'/lib/lib.levels.php');
			$lvl = CourseLevel::getLevels();
			foreach($course_stats['with_ulevel'] as $lvl_num => $quantity) {

				$GLOBALS['page']->addStart(''
					.'<tr><th scope="row">'.str_replace('[level]', $lvl[$lvl_num], $lang->def('_COURSE_AS') ).' :</th><td><a href="'.$base_url.'level&amp;filter_on='.$lvl_num.'">'.$quantity.'</a></td></tr>'
				, 'content');
			} //end foreach

		}
		
		$GLOBALS['page']->addStart(''

			.( isset($course_stats['cert_relesable']) && $course_stats['cert_relesable'] != 0
				? '<tr><th scope="row">'.$lang->def('_CERT_RELESABLE').' :</th><td><a href="index.php?modname=mycertificate&amp;op=mycertificate">'.$course_stats['cert_relesable'].'</a></td></tr>'
				: '' )

			.( $pendent != 0
				? '<tr><th scope="row">'.$lang->def('_FRIEND_PENDENT').' :</th><td><a href="index.php?modname=myfriends&amp;op=myfriends">'.$pendent.'</a></td></tr>'
				: '' )
			
			.'</table>'
			.'</div>'
		, 'content');
		
	}
		

	// career ------------------------------------------------------------------------
	if($access_search_form) {	
		
		$year_array = array(0 => $lang->def('_ALL_YEAR'));
		$query_year = "SELECT DISTINCT create_date" .
			" FROM ".$GLOBALS['prefix_lms']."_course";
		
		$result = mysql_query($query_year);
		while (list($year) = mysql_fetch_row($result)) {
			$year_array[$year{0}.$year{1}.$year{2}.$year{3}] = $year{0}.$year{1}.$year{2}.$year{3};
		}
		if(isset($year_array['0000'])) unset($year_array['0000']);
		
		$GLOBALS['page']->addStart(''
			
			.'<div class="course_search">'
			.'<h2>'.$lang->def('_SEARCH').'</h2>'
			.Form::openForm('course_filter', 'index.php?modname=course&amp;op=mycourses')
			
			.'<p>'
				.Form::getLabel('search', $lang->def('_WORD'))
			.'</p>'
			.Form::getInputTextfield( 'textfield_nowh', 'search', 'search', importVar('search'), $lang->def('_WORD'), '255', '').'<br/>'
			
			.'<p>'
				.Form::getLabel('year', $lang->def('_YEAR'))
			.'</p>'
			.Form::getInputDropdown( 'dropdown_nowh', 'year', 'year', $year_array, importVar('year'), '')
			
			.Form::getButton('apply_filter', 'apply_filter', $lang->def('_APPLY_FILTER'))
			.Form::closeForm()
	
			.'</div>'
		, 'content');
	}
	// news ------------------------------------------------------------------------

	if($access_news) {

		$GLOBALS['page']->addStart(''
			.'<div class="course_news">'
			.'<h2>'.$lang->def('_NEWS').'</h2>'
		, 'content');

		$user_level = $GLOBALS['current_user']->getUserLevelId();

		$user_assigned = $GLOBALS['current_user']->getArrSt();

		$query_news = "
		SELECT idNews, publish_date, title, short_desc, important, viewer
		FROM ".$GLOBALS['prefix_lms']."_news_internal
		WHERE language = '".getLanguage()."'
		ORDER BY important DESC, publish_date DESC ";
		$re_news = mysql_query($query_news);

		$displayed = 0;
		while(list($id_news, $publish_date, $title, $short_desc, $impo, $viewer) = mysql_fetch_row($re_news)) {

			$viewer = ( is_string($viewer) && $viewer != false ? unserialize($viewer) : array() );
			$intersect = array_intersect($user_assigned, $viewer);
			if(!empty($intersect) || empty($viewer)) {

				$GLOBALS['page']->addStart(
					'<h3>'.$title.'</h3>'
					.'<div class="news_textof">'
					.'<span class="news_data">'.$GLOBALS['regset']->databaseToRegional($publish_date, 'date').' - </span>'
						.$short_desc
					.'</div>'
				, 'content' );
				$displayed++;
			}

		} // end news display
		if(!$displayed) { $GLOBALS['page']->addStart($lang->def('_NO_NEWS'), 'content'); }


		$GLOBALS['page']->addStart(''
			.'</div>'
		, 'content');
	}
	if(!$onecol) {
		$GLOBALS['page']->addStart(''
			.'</div>'
		, 'content');
		$GLOBALS['page']->addStart(''
			.'<div id="mycourse_right">'
		, 'content');
	}

	// ------------------------------------------------------------------------
	if(!$onecol) {
		$GLOBALS['page']->addEnd(''
			.'</div>'
			.'<div class="no_float"></div>'
		, 'content');
	}

	$GLOBALS['page']->addEnd(''
		.'</div>'
	, 'content');

	if($ma->currentCanAccessObj('lo_tab')) {

		$current_tab = importVar('current_tab', false, 'lo_plan');

		$GLOBALS['page']->addStart(
			'<div class="lo_tab">'

			.'<h1>'
				.$lang->def('_WELCOME').': '
				.'<span>'.$GLOBALS['current_user']->getUserName().'</span>'
			.'</h1>'

			.'<ul class="flat_tab">'

			.( $course_stats['with_ustatus'][_CUS_END] != $course_stats['total'] ?
			 	'<li '.( $current_tab == 'lo_plan' ? 'class="now_selected"' : '').'>'
				.'<a href="index.php?modname=course&amp;op=mycourses&amp;current_tab=lo_plan"><span>'.$lang->def('_LO_PLAN').'</span></a></li>'
				: ''
			)
			.( $course_stats['with_ustatus'][_CUS_END] != 0 ?
				'<li '.( $current_tab == 'lo_history' ? 'class="now_selected"' : '').'>'
					.'<a href="index.php?modname=course&amp;op=mycourses&amp;current_tab=lo_history"><span>'.$lang->def('_LO_HISTORY').'</span></a></li>'
				: ''
			)
			.( $course_stats['with_wstatus'][_CUS_RESERVED] != 0 || $course_stats['with_wstatus'][_CUS_WAITING_LIST] != 0 ?
				'<li '.( $current_tab == 'lo_waiting' ? 'class="now_selected"' : '').'>'
					.'<a href="index.php?modname=course&amp;op=mycourses&amp;current_tab=lo_waiting"><span>'.$lang->def('_LO_WAITING').'</span></a></li>'
				: ''
			)
			.'</ul>'
			.'</div>'
		, 'content');

	} else {

		$GLOBALS['page']->addStart(
			'<div class="lo_tab">'
			.'<h1 class="no_tab">'
				.$lang->def('_WELCOME').': '
				.'<span>'.$GLOBALS['current_user']->getUserName().'</span>'
			.'</h1>'

			.'</div>'
		, 'content');
	}
}

function userCourseList(&$url, $use_tab = true) {

	require_once($GLOBALS['where_framework'].'/lib/lib.form.php');
	require_once($GLOBALS['where_framework'].'/lib/lib.user_profile.php');
	require_once($GLOBALS['where_framework'].'/lib/lib.navbar.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.preassessment.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.catalogue.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.course.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.coursereport.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.coursepath.php');
	require_once($GLOBALS["where_framework"]."/lib/lib.ajax_comment.php");
	require_once($GLOBALS['where_lms'].'/lib/lib.classroom.php');

	// pre-loading coursepath ------------------------------------------------------------------
	$path_man = new CoursePath_Manager();

	// search for the coursepath ----------------------------------------------------------
	$user_coursepath 	= $path_man->getUserSubscriptionsInfo(getLogUserId(), true);
	$coursepath 		= $path_man->getCoursepathAllInfo(array_keys($user_coursepath));

	if(!empty($coursepath)) {

		// find structures of the course path ---------------------------------------------
		$path_courses 	= $path_man->getPathStructure(array_keys($coursepath));
		$cp_info =$path_man->getAllCoursesInfo($path_courses['all_paths']);
		/*echo "<pre>\n\n";
		print_r($cp_info);
		echo "\n\n</pre>";*/
	}

	// ------------------------------------------------------------------------
	$course_stats = array(
		'total' => 0,
		'u_can_enter' => 0,
		'with_status' => array(
			CST_AVAILABLE => 0,
			CST_EFFECTIVE => 0,
			CST_CONCLUDED => 0,
			CST_CANCELLED => 0
		),
		'with_ustatus' => array(
			_CUS_SUBSCRIBED => 0,
			_CUS_BEGIN 		=> 0,
			_CUS_END 		=> 0,
			_CUS_SUSPEND 	=> 0,
		),
		'with_wstatus' => array(
			_CUS_RESERVED		=> 0,
			_CUS_WAITING_LIST	=> 0),
		'with_ulevel' => array(),
		'expiring' => 0,
		'cert_relesable' => 0
	);
	// ------------------------------------------------------------------------
	
	$filter = importVar('filter', false, 'total');
	
	if($filter == 'level')
		$filter_level = importVar('filter_on', true, 0);
	
	$current_tab = importVar('current_tab', false, 'lo_plan');

	if($use_tab) {

		addCss('style_tab');

		$lo_plan = importVar('lo_plan', false, 0);
		$lo_history = importVar('lo_history', false, 0);

		if($lo_plan != 0)$current_tab = 'lo_plan';
		if($lo_history != 0)$current_tab = 'lo_history';
	}
	
	if($use_tab) {
		
		addCss('style_tab');
		
		$lo_plan = importVar('lo_plan', false, 0);
		$lo_history = importVar('lo_history', false, 0);
		
		if($lo_plan != 0)$current_tab = 'lo_plan'; 
		if($lo_history != 0)$current_tab = 'lo_history';
		

	}
	
	require_once($GLOBALS['where_lms'].'/lib/lib.certificate.php');
	$cert = new Certificate();
	
	$released = $cert->certificateReleased(getLogUserId());
	$available_cert = $cert->certificateForCourses(false, false);
	
	
	addCss('style_profile', 'lms');
	addCss('style_course_list', 'lms');
	addScriptaculousJs();
	addJs($GLOBALS['where_lms_relative'].'/modules/coursecatalogue/', 'ajax.coursecatalogue.js');

	$GLOBALS['page']->add('<script type="text/javascript">'
		.' setup_coursecatalogue(\''.$GLOBALS['where_lms_relative'].'/modules/coursecatalogue/ajax.coursecatalogue.php\'); '
		.'</script>', 'page_head');
	
	
	// cahce classroom -----------------------------------------------------------------
	$classroom_man 	= new ClassroomManager();
	$classrooms = $classroom_man->getClassroomNameList();
	
	$lang 		=& DoceboLanguage::createInstance('coursecatalogue');
	$lang_c 	=& DoceboLanguage::createInstance('course');

	$man_course 	= new Man_Course();
	
	$subcourse_list = mysql_query(""
		." SELECT u.idCourse, u.edition_id, level, u.date_inscr, u.date_first_access, "
		."		u.date_complete, u.status AS user_status, u.waiting, u.edition_id "
		." FROM ".$GLOBALS['prefix_lms']."_courseuser AS u"
		." WHERE idUser = '".getLogUserId()."'");
	
	$subscription = array();
	while($cinfo = mysql_fetch_assoc($subcourse_list)) {
		
		$subscription['course'][$cinfo['idCourse']] = $cinfo;
		if($cinfo['edition_id'] != 0) $subscription['edition'][$cinfo['idCourse']][$cinfo['edition_id']] = $cinfo;
	}
	// searching courses ---------------------------------------------------------------
	$select_course = ""
	." SELECT c.idCourse, c.course_type, c.idCategory, c.code, c.name, c.description, c.lang_code, c.difficult, " 
	."	c.subscribe_method, c.date_begin, c.date_end, c.max_num_subscribe, "
	."	c.selling, c.prize, c.create_date, c.status AS course_status, c.course_edition, " 
	."	c.classrooms, c.img_material, c.course_demo, c.course_vote, "
	."	c.can_subscribe, c.sub_start_date, c.sub_end_date, c.valid_time, c.userStatusOp, u.status AS user_status, u.level "
	
	.", c.use_logo_in_courselist, c.img_course ";
	
	$from_course = " FROM ".$GLOBALS['prefix_lms']."_course AS c "
	."	 JOIN ".$GLOBALS['prefix_lms']."_courseuser AS u ";
	
	$where_course 		= " c.idCourse = u.idCourse "
		." AND u.idUser = '".getLogUserId()."' "
		." AND ( c.status <> '".CST_PREPARATION."' OR u.level >= 3 )"
		." AND c.course_type <> 'assessment' ";
	
	$selected_year = 0;
	$selected_search = '';
		
	if (isset($_POST['apply_filter'])) {
		if ($_POST['year']) {
			$where_course .= " AND c.create_date BETWEEN '".$_POST['year']."-01-01 00:00:00' AND '".$_POST['year']."-12-31 23:59:59'";
			$selected_year = $_POST['year'];
		}
		
		if ($_POST['search'] !== '') {
			$where_course .= " AND c.name LIKE '%".$_POST['search']."%'";
			$selected_search = $_POST['search'];
		}
	}
	
	$group_by_course	= " GROUP BY c.idCourse ";
	$order_course 		= " ORDER BY ";
	
	if (isset($GLOBALS['lms']['tablist_mycourses'])) {
    $arr_order_course = explode(',', $GLOBALS['lms']['tablist_mycourses'] );
    $arr_temp = array();
    foreach ($arr_order_course as $key=>$value) {
      switch ($value) {
        case 'status': $arr_temp[] = ' u.status '; break;
        case 'code': $arr_temp[] = ' c.code '; break;
        case 'name': $arr_temp[] = ' c.name '; break;
      }
    }
    $string_temp = implode(', ', $arr_temp);
    if ($string_temp == '') $order_course=''; else $order_course.=$string_temp;
  } else { //default without parameter
    $order_course .= "u.status, c.code, c.name  ";
  }
  
  // apply search filter --------------------------------------------------------------
	$all_lang = $GLOBALS['globLangManager']->getAllLangCode();
	
	$re_course = mysql_query($select_course
		.$from_course
		." WHERE ".$where_course
		.$group_by_course
		.$order_course);
	
	// retrive editions ----------------------------------------------------------------
	
	$select_edition = " SELECT e.* ";
	$from_edition 	= " FROM ".$GLOBALS["prefix_lms"]."_course_edition AS e "
		." JOIN ".$GLOBALS["prefix_lms"]."_courseuser AS u ";
	$where_edition 	= " WHERE e.status <> '".CST_PREPARATION."' AND e.idCourseEdition = u.edition_id ";
	
	$re_edition = mysql_query($select_edition
		.$from_edition
		.$where_edition);
	
	// --------------------------------------------------------------------------------
	
	$editions = array();
	if($re_edition)
	while($edition_elem = mysql_fetch_assoc($re_edition)) {
		
		$edition_elem['classrooms'] = ( isset($classrooms[$edition_elem['classrooms']]) ? $classrooms[$edition_elem['classrooms']] : '' );
		$editions[$edition_elem["idCourse"]][$edition_elem["idCourseEdition"]] = $edition_elem;
	}
	
	$man_courseuser = new Man_CourseUser();
	$ax_comm 		= new AjaxComment('course', 'lms');
	$comment_count 	= $ax_comm->getResourceCommentCount();
	$user_score 	= $man_courseuser->getUserCourseScored(getLogUserId());
	
	
	// -----------------------------------------------------------------------------
	
	$needed_info_for = array();
	if(!empty($subscription['course'])) {
		
		$id_course_list = array_keys($subscription['course']);
		// find last access to the courses ---------------------------------------------------------------------
		require_once($GLOBALS['where_lms'].'/lib/lib.track_user.php');
		$last_access_courses = TrackUser::getLastAccessToCourse( getLogUserId() );
		
		// retrive unreaded advice -----------------------------------------------------------------------------
		require_once($GLOBALS['where_lms'].'/lib/lib.advice.php');
		$advices = Man_Advice::getCountUnreaded( getLogUserId(), $id_course_list, $last_access_courses );
		
		// retrive unreaded forum messages ---------------------------------------------------------------------
		require_once($GLOBALS['where_lms'].'/lib/lib.forum.php');
		$forums = Man_Forum::getCountUnreaded( getLogUserId(), $id_course_list, $last_access_courses );
		
		// retrive new lesson ----------------------------------------------------------------------------------
		require_once($GLOBALS['where_lms'].'/lib/lib.orgchart.php');
		$org_chart = OrganizationManagement::getCountUnreaded( getLogUserId(), $id_course_list, $last_access_courses );
		
		if(!empty($path_courses['all_items'])) {
			$needed_info_for = array_diff($path_courses['all_items'], $id_course_list);
		}
		$enroll_list = mysql_query(""
			." SELECT u.idCourse, u.edition_id, COUNT(*) as number "
			." FROM ".$GLOBALS['prefix_lms']."_courseuser AS u"
			." WHERE u.idCourse IN (".implode($id_course_list, ',').") "
			." AND u.level = '3'"
			." AND u.status IN ('"._CUS_CONFIRMED."', '"._CUS_SUBSCRIBED."', '"._CUS_BEGIN."', '"._CUS_END."', '"._CUS_SUSPEND."', '"._CUS_WAITING_LIST."')"
			." AND u.absent = '0'"
			." GROUP BY u.idCourse, u.edition_id ");
	
		$enrolled = array();
		while($cinfo = mysql_fetch_assoc($enroll_list)) {
			
			$enrolled[$cinfo['idCourse']][$cinfo['edition_id']] = $cinfo['number'];
		}
		
	}
	
	// search pre-assessment -----------------------------------------------------------
	
	$select_assess = ""
	." SELECT c.idCourse, c.course_type, c.idCategory, c.code, c.name, c.description, c.lang_code, c.difficult, " 
	."	c.subscribe_method, c.date_begin, c.date_end, c.max_num_subscribe, "
	."	c.selling, c.prize, c.create_date, c.status AS course_status, c.course_edition, " 
	."	c.classrooms, c.img_material, c.course_demo, c.course_vote, "
	."	c.can_subscribe, c.sub_start_date, c.sub_end_date, c.valid_time, c.userStatusOp, "
	."	u.level, u.date_inscr, u.date_first_access, u.date_complete, u.status AS user_status, u.waiting, c.advance, u.waiting ";
	
	$from_assess = " FROM ".$GLOBALS['prefix_lms']."_course AS c "
	."	 JOIN ".$GLOBALS['prefix_lms']."_courseuser AS u ";
	
	$where_assess = " c.idCourse = u.idCourse "
		." AND u.idUser = '".getLogUserId()."' "
		." AND c.course_type = 'assessment' "
		." AND  ( c.status <> '".CST_PREPARATION."' OR u.level > 3 ) "
		.($filter == 'level' ? " AND level = '".$filter_level."'" : "") ;
		//." AND ( u.status <> '"._CUS_END."' OR u.level > 3 ) ";
	
	$preass_list = mysql_query($select_assess
		.$from_assess
		." WHERE ".$where_assess
		." ORDER BY c.name ");
	
	// pre assessment list ---------------------------------------------------------------------------------------
	$i = 0;
	if(mysql_num_rows($preass_list) && $current_tab == 'lo_plan') {
		
		$GLOBALS['page']->add(
			'<div id="mycourse_asses">'
			.'<h1>'.$lang_c->def('_ASSESSMENT_LIST').'</h1>'
		, 'content');
		while($cinfo = mysql_fetch_assoc($preass_list)) {
			
			
			$cinfo['user_score'] = ( isset($user_score[$cinfo['idCourse']]) ? $user_score[$cinfo['idCourse']] : NULL );
			
			if(isset($comment_count[$cinfo['idCourse']])) $cinfo['comment_count'] = $comment_count[$cinfo['idCourse']];
			
			$GLOBALS['page']->add(dashmyassess(	$url, 
												$lang_c, 
												$cinfo, 
												$i++), 'content');
		}
		$GLOBALS['page']->add('</div>', 'content');
	}
	
	// page intest ------------------------------------------------------------
	require_once($GLOBALS['where_lms'].'/lib/lib.levels.php');
	$lvl = CourseLevel::getLevels();
			
	$title = $lang->def('_COURSE_LIST');
	switch($filter) {
		case "access" : 	{ $title = $lang->def('_COURSE_YOU_CAN_ACCESS'); };break;
		case "expiring" : 	{ $title = $lang->def('_COURSE_EXPIRING'); };break;
		case "subscribed" : { $title = $lang->def('_COURSE_SUBSCRIBED'); };break;
		case "begin" : 		{ $title = $lang->def('_COURSE_BEGIN'); };break;
		case "end" : 		{ $title = $lang->def('_COURSE_END'); };break;
		case "level" : 		{ $title = str_replace('[level]', $lvl[$_GET['filter_on']], $lang->def('_COURSE_AS') ); };break;
	}
	$GLOBALS['page']->add(
		'<div id="mycourse_list">'
		.'<h1>'.$title.'</h1>'
	, 'content');
	
	$i = 0;
	
	while($cinfo = mysql_fetch_assoc($re_course)) {
		
		$cinfo['edition_list'] 	= ( isset($editions[$cinfo['idCourse']]) ? $editions[$cinfo['idCourse']] : array() );
		$cinfo['user_score'] 	= ( isset($user_score[$cinfo['idCourse']]) ? $user_score[$cinfo['idCourse']] : NULL );
		$cinfo['enrolled'] 		= ( isset($enrolled[$cinfo['idCourse']]) ? $enrolled[$cinfo['idCourse']] : false );
		
		if(isset($comment_count[$cinfo['idCourse']])) $cinfo['comment_count'] = $comment_count[$cinfo['idCourse']];
		
		$cinfo['classrooms'] 	= ( isset($classrooms[$cinfo['classrooms']]) ? $classrooms[$cinfo['classrooms']] : '' );
		
		// advertising --------------------------------------------------------------------------------------------
		$cinfo['to_read']['advice'] = ( isset($advices[$cinfo['idCourse']]) ? $advices[$cinfo['idCourse']] 	: 0 );
		$cinfo['to_read']['forum'] 	= ( isset($forums[$cinfo['idCourse']]) 	? $forums[$cinfo['idCourse']] 	: 0 );
		$cinfo['to_read']['lobj'] 	= ( isset($org_chart[$cinfo['idCourse']]) 	? $org_chart[$cinfo['idCourse']] 	: 0 );
		
		// 10 days in the future
		$range = time() + ( 10 * 24 * 60 *60);
		$expiring = false;
		if($cinfo['date_end'] != '0000-00-00') {
			$time_end = fromDatetimeToTimestamp($cinfo['date_end']);
			if($range > $time_end) { $expiring = true; $course_stats['expiring']++; }
		}
		if($cinfo['valid_time'] != '0' && $cinfo['valid_time'] != '' && $cinfo['date_first_access'] != '') {

			$time_first_access = fromDatetimeToTimestamp($cinfo['date_first_access']);
			if($range > ( $time_first_access + ($cinfo['valid_time'] * 24 * 3600 ) )) { $expiring = true; $course_stats['expiring']++; }
		}
		
		$access = Man_Course::canEnterCourse($cinfo);
		
		$course_stats['total']++;
		if ($cinfo['user_status'] == _CUS_RESERVED || $cinfo['user_status'] == _CUS_WAITING_LIST)
			$course_stats['with_wstatus'][$cinfo['user_status']]++;
		elseif($access['can']) $course_stats['u_can_enter']++;
		
		if(isset($course_stats['with_ustatus'][$cinfo['user_status']])) $course_stats['with_ustatus'][$cinfo['user_status']]++;
		else $course_stats['with_ustatus'][$cinfo['user_status']] = 1;
		
		if(!isset($course_stats['with_ulevel'][$cinfo['level']])) $course_stats['with_ulevel'][$cinfo['level']] = 1;
		else $course_stats['with_ulevel'][$cinfo['level']]++;
		
		if(isset($available_cert[$cinfo['idCourse']]))
		while(list($id_cert, $certificate) = each($available_cert[$cinfo['idCourse']])) {
			
			if(!isset($released[$id_cert]) && $cert->canRelease($certificate[CERT_AV_STATUS], $cinfo['user_status'])) {
				$course_stats['cert_relesable']++;
			}
		}
		
		// --------------------------------------------------------------------
		
		if(!isset($path_courses['all_items'][$cinfo['idCourse']])) {
			
			// the course is not related with a coursepath, so i can print it --------------
			if($filter == 'level')
			{
				if($subscription['course'][$cinfo['idCourse']]['level'] == $filter_level)
					$dash = dashmycourse(	$url, 
										$lang_c, 
										$subscription, 
										$cinfo, 
										$i++);
				else
					$dash = '';
			}
			else
				$dash = dashmycourse(	$url, 
										$lang_c, 
										$subscription, 
										$cinfo, 
										$i++);
			
			if($use_tab == true) {
				if($course_stats['with_ustatus'][_CUS_END] == $course_stats['total']) $current_tab = 'lo_history';
				
				if($current_tab == 'lo_history') {
					
					if($cinfo['user_status'] == _CUS_END)  $GLOBALS['page']->add($dash, 'content');
				} else {
				
					if($cinfo['user_status'] != _CUS_END || $cinfo['level']>=4)  $GLOBALS['page']->add($dash, 'content');
				}
			
			} else {
					
				switch($filter) {
					case "access" : { 
						if($access['can']) $GLOBALS['page']->add($dash, 'content'); 
					};break;
					case "expiring" : {
						if($expiring) $GLOBALS['page']->add($dash, 'content');
					};break;
					case "subscribed" : {
						if($cinfo['user_status'] == _CUS_SUBSCRIBED) $GLOBALS['page']->add($dash, 'content');
					};break;
					case "begin" : {
						if($cinfo['user_status'] == _CUS_BEGIN) $GLOBALS['page']->add($dash, 'content');
					};break;
					case "end" : {
						if($cinfo['user_status'] == _CUS_END) $GLOBALS['page']->add($dash, 'content');
					};break;
					case "level" : {
						if($_GET['filter_on'] == $cinfo['level']) $GLOBALS['page']->add($dash, 'content');
					};break;
					default: $GLOBALS['page']->add($dash, 'content');
				}
			}
			
		} else {

			// the course is related with a coursepath, so i must wait to print it ----------
			//$cinfo['prerequisites'] = $path_courses['all_items'][$cinfo['idCourse']]; // <- useless?
			
			//$courses =array($cinfo['idCourse']=>$cinfo);
			$prere =$cp_info[$cinfo['idCourse']]["prerequisites"];
			if($path_man->checkPrerequisites($prere, $subscription)) {
				$cinfo['prerequisites_satisfied'] = true;
			} else {
				$cinfo['prerequisites_satisfied'] = false;
			}

			if($filter == 'level')
			{
				if($subscription['course'][$cinfo['idCourse']]['level'] == $filter_level)
					$course_cache[$cinfo['idCourse']] = dashmycourse(	$url, 
																		$lang_c, 
																		$subscription, 
																		$cinfo, 
																		1,
																		true,
																		4);
				else
					$course_cache[$cinfo['idCourse']] = '';
			}
			else
				$course_cache[$cinfo['idCourse']] = dashmycourse(	$url, 
																	$lang_c, 
																	$subscription, 
																	$cinfo, 
																	1,
																	true,
																	4);

		} // end else-if -------------------------------------------------------
		
	} //  end while ------------------------------------------------------------
	
	if($course_stats['total'] == 0) {

		$GLOBALS['page']->add(''
			.'<b>'.$lang->def('_NO_COURSE').'</b> '.'<br />'
		, 'content');
	}
	
	$GLOBALS['page']->add('</div>', 'content');

	// Coursepath --------------------------------------------------------------

	if(!empty($coursepath)) {

		// find structures of the course path ----------------------------------
		$path_slot = $path_man->getPathSlot(array_keys($coursepath));

		// coursepath list -----------------------------------------------------
				
		$GLOBALS['page']->add(
			'<div id="mycoursepath_list">'
			.'<h1>'.$lang->def('_COURSEPATH_LIST').'</h1>'
		, 'content');
		
		$i = 0;
		
		// find course basilar information -------------------------------------
		if(!empty($needed_info_for)) $course_info = $man_course->getAllCourses(false, false, $needed_info_for);
		else $course_info = array();
		
		while(list($id_path, $path) = each($coursepath)) {
			
			$html = '<div class="coursepath_container coursepath_container_simple">';
			
			$html .= '<h2>'
				
				.( $path[COURSEPATH_CODE] != '' ? '['.$path[COURSEPATH_CODE].'] ' : '' )
				.$path[COURSEPATH_NAME]
				
				.'</h2>';
			if(!isset($path_courses[$id_path]) || empty($path_courses[$id_path])) {
				
				$html .= $lang->def('_NO_COURSE_ASSIGNED_TO_COURSEPATH').'<br />'; 
			} else {
				
				// display the slots
				//$html .= '<h3>'.$lang->def('_PATH_COURSELIST').'</h3>';
				foreach($path_slot[$id_path]  as $id_slot => $slot_info) {
					
					if($id_slot == 0) {
						
						$html .= '<h3>'.$lang->def('_COURSE_PATH_MAIN').'</h3>';
						if(!empty($path_courses[$id_path][$id_slot])) $html .= '<ul class="coursepath_mainslot">';
					} else {
						
						if($slot_info['min_selection'] > 0 && $slot_info['max_selection'] > 0) {
							
							$title = str_replace( 	array('[min_selection]', '[max_selection]'), 
													array($slot_info['min_selection'], $slot_info['max_selection']), 
													$lang->def('_COURSE_PATH_SLOT_MIN_MAX'));
						} elseif($slot_info['max_selection'] > 0) {
							
							$title = str_replace( 	'[max_selection]', 
													$slot_info['max_selection'], 
													$lang->def('_COURSE_PATH_SLOT_MAX'));
						} else {
							
							$title = $lang->def('_COURSE_PATH_SLOT');
						}
						$html .= '<h3>'.$title.'</h3>';
						if(!empty($path_courses[$id_path][$id_slot])) $html .= '<ul class="coursepath_otherslot">';
					}
					
					while(list($id) = each($path_courses[$id_path][$id_slot])) {
						
						if(isset($course_cache[$id])) {
							$html .= '<li>'.$course_cache[$id].'</li>';
						} else {
							$html .= '<li>'.dashAcourse($id, 4).'</li>';
						}
					}
					
					if(!empty($path_courses[$id_path][$id_slot])) $html .= '</ul>';
				}
			}
			$html .= '</div>';
			$GLOBALS['page']->add($html, 'content');
		}
		$GLOBALS['page']->add('</div>', 'content');
	}
	if($course_stats['cert_relesable'] < 0) $course_stats['cert_relesable'] = 0;
	return $course_stats;
}

function dashmyassess(&$url, $lang, $cinfo, $index) {
	
	$html = '<div class="course_container'.( $index == 0 ? ' course_container_first' : '' ).'">'
		.'<h2>';
	
	$access = Man_Course::canEnterCourse($cinfo);
	if($access['can']) {
		
		$html .= ''
				//.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
				.'<a class="course_enter" href="index.php?modname=course&amp;op=aula&amp;idCourse='.$cinfo['idCourse'].'" '
				.'title="'.$lang->def('_ENTERT').'">'
				.( trim($cinfo['code']) != '' ? '['.$cinfo['code'].'] ' : '' ).$cinfo['name']
				.'</a>';
	} else {
				
		$html .= ''
			.'<img id="locked_'.$cinfo['idCourse'].'" src="'.getPathImage().'course/lock.gif" alt="'.$lang->def('_NOENTER').'" '
			.' onclick="balloonAtElement(this.id, \'\',\''.$lang->def('_NOTACCESS_'.strtoupper($access['reason'])).'\');" />'
			//.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
			.( trim($cinfo['code']) != '' ? '['.$cinfo['code'].'] ' : '' ).$cinfo['name'];
	}
	$html .= '</h2>';
	
	if(trim($cinfo['description']) == '') $html .= '';
	elseif(strpos($cinfo['description'], '<p') === false) $html .= '<p class="course_description">'.$cinfo['description'].'</p>';
	else  $html .= '<div class="course_description">'.$cinfo['description'].'</div>';
	
	$html .= '</div>';
	return $html;
}

function dashmycourse(&$url, $lang, &$subscription, $cinfo, $index) {
	
	require_once($GLOBALS['where_lms'].'/lib/lib.levels.php');
	$lvl = CourseLevel::getLevels();
	
	$arr_status = array(_CUS_RESERVED 		=> $lang->def('_USER_STATUS_RESERVED'),
						_CUS_WAITING_LIST 	=> $lang->def('_USER_STATUS_WLIST'),
						_CUS_CONFIRMED 		=> $lang->def('_USER_STATUS_CONFIRMED'),
						
						_CUS_SUBSCRIBED 	=> $lang->def('_USER_STATUS_INSCR'),
						_CUS_BEGIN 			=> $lang->def('_USER_STATUS_BEGIN'),
						_CUS_END 			=> $lang->def('_USER_STATUS_END') );
	
	DoceboLanguage::createInstance('admin_course_managment', 'lms');
	
	$arr_coursestatus = array(
		CST_PREPARATION => $lang->def('_CST_PREPARATION', 'admin_course_managment', 'lms'), 
		CST_AVAILABLE 	=> $lang->def('_CST_AVAILABLE', 'admin_course_managment', 'lms'), 
		CST_EFFECTIVE 	=> $lang->def('_CST_CONFIRMED', 'admin_course_managment', 'lms'), 
		CST_CONCLUDED 	=> $lang->def('_CST_CONCLUDED', 'admin_course_managment', 'lms'), 
		CST_CANCELLED 	=> $lang->def('_CST_CANCELLED', 'admin_course_managment', 'lms') );
	
	$course_type 	= $cinfo['course_type'];
	$there_material	= array();
	
	if($cinfo['img_material'] != '') $there_material[] = '&id_course='.$cinfo['idCourse'];
	
	// course title -----------------------------------------------------
	$cinfo = array_merge($cinfo, $subscription['course'][$cinfo['idCourse']]);
	
	// -----------------------------------------------------------------
	$courseuser_st = -10;
	$html = '';
	$intest = '';
	if(!isset($subscription['edition'][$cinfo['idCourse']])) {
		
		$access = Man_Course::canEnterCourse($cinfo);
		
		$intest .= '<h2>';
		if($access['can']) {
			
			$intest .= ''
					.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
					.'<a class="course_enter" href="index.php?modname=course&amp;op=aula&amp;idCourse='.$cinfo['idCourse'].'" '
					.'title="'.$lang->def('_ENTERT').'">'
					
					//.( trim($cinfo['code']) != '' ? '['.$cinfo['code'].'] ' : '' )
					.$cinfo['name']
					
					.'</a>';
		} else {
					
			$intest .= '<img class="image_lock" id="locked_'.$cinfo['idCourse'].'" src="'.getPathImage().'course/lock.gif" alt="'.$lang->def('_NOENTER').'" '
				.' onclick="balloonAtElement(this.id, \'\',\''.$lang->def('_NOTACCESS_'.strtoupper($access['reason'])).'\');" />'
				.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
				//.( trim($cinfo['code']) != '' ? '['.$cinfo['code'].'] ' : '' )
				.$cinfo['name']
				
				.'';
					
		}
		$intest .= '</h2>';
		// not editon
		//if($cinfo['level'] >= 4) {
		
			$intest .= '<p class="course_support_info">'.
				str_replace(	array('[course_type]', '[create_date]', '[enrolled]', '[course_status]'), 
								array(	$course_type, 
										createDateDistance($cinfo['create_date'], 'coursecatalogue', true), 
										( isset($cinfo['enrolled'][0]) ? $cinfo['enrolled'][0] : 0 ), 
										$arr_coursestatus[$cinfo['course_status']]), 
								$lang->def('_COURSE_INTRO')).
								
				( $cinfo['date_begin'] != '0000-00-00' || $cinfo['date_end'] != '0000-00-00' 
					? 
						str_replace(	array('[date_begin]', '[date_end]'), 
									array(	$GLOBALS['regset']->databaseToRegional($cinfo['date_begin'], 'date'), 
											$GLOBALS['regset']->databaseToRegional($cinfo['date_end'], 'date')), 
									$lang->def('_COURSE_DATE'))
					
					: '' ).			
				'</p>';
		//}
		
		if($cinfo['classrooms'] != '') {
			
			$intest .= '<p class="course_support_info">'.
					str_replace(	array('[classrooms_name]', '[classrooms_location]'), 
									array($cinfo['classrooms']['classroom'], $cinfo['classrooms']['location']), 
									$lang->def('_IN_THE_CLASSROOM') 	)
					.'</p>'; 
		}
		 
		$intest .= '<p class="course_support_info">'
			.$arr_status[$cinfo['user_status']]
			.( $cinfo['level'] >= 4 
				? str_replace('[level]', $lvl[$cinfo['level']], $lang->def('_USER_LVL') )
			. ' '.( trim($cinfo['code']) != '' ? '<br />['.$cinfo['code'].'] ' : '' )
				: ''
			)
			.'</p>';
		if(isset($access['expiring_in']) && $access['expiring_in'] != false && $access['expiring_in'] < 30) {
			
			$intest .= '<p class="course_support_info">'.
					str_replace('[expiring_in]', $access['expiring_in'], $lang->def('_EXPIRING_IN') )
					.'</p>';
		}
		$courseuser_st = $cinfo['user_status'];
		
	} elseif(count($subscription['edition'][$cinfo['idCourse']]) == 1) {
		
		// edition unique--------------------------------------------------------------------------------
		list($ed_id, $sub_info)  = each($subscription['edition'][$cinfo['idCourse']]);
		$ed_info =& $cinfo['edition_list'][$ed_id];
		
		$cinfo['date_begin'] 	= $ed_info['date_begin'];
		$cinfo['date_end'] 		= $ed_info['date_end'];
		$access = Man_Course::canEnterCourse($cinfo);
		
		if($ed_info['date_begin'] == '0000-00-00') $ed_info['date_begin'] = '';
		if($ed_info['date_end'] == '0000-00-00') $ed_info['date_end'] = '';
			
		$intest = '<h2>';
		if($access['can']) {
			
			$intest .= '<a class="course_enter" href="index.php?modname=course&amp;op=aula&amp;idCourse='.$cinfo['idCourse'].'&amp;id_e='.$ed_id.'" '
					.'title="'.$lang->def('_ENTERT').'">'
					.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
					//.( trim($ed_info['code']) != '' ? '['.$ed_info['code'].'] ' : '' )
					.$ed_info['name']
					
					.( $ed_info['date_begin'] != '' || $ed_info['date_end'] != '' 
						? ' <span>( '
							.$GLOBALS['regset']->databaseToRegional($ed_info['date_begin'], 'date')
							.' '.$GLOBALS['regset']->databaseToRegional($ed_info['date_end'], 'date')
							.' )</span> ' 
						: '')
					
					.'</a>';
		} else {
					
			$intest .= '<img id="locked_'.$cinfo['idCourse'].'" src="'.getPathImage().'course/lock.gif" alt="'.$lang->def('_NOENTER').'" '
				.' onclick="balloonAtElement(this.id, \'\',\''.$lang->def('_NOTACCESS_'.strtoupper($access['reason'])).'\');" />'
				.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
				.( trim($ed_info['code']) != '' ? '['.$ed_info['code'].'] ' : '' ).$ed_info['name']
					
					.( $ed_info['date_begin'] != '' || $ed_info['date_end'] != '' 
						? ' <span>( '
							.$GLOBALS['regset']->databaseToRegional($ed_info['date_begin'], 'date')
							.' '.$GLOBALS['regset']->databaseToRegional($ed_info['date_end'], 'date')
							.' )</span> ' 
						: '');
		}
		$intest .= '</h2>';
		//if($sub_info['level'] >= 4) {
			
			$intest .= '<p class="course_support_info">'
				.str_replace(	array('[course_type]', '[create_date]', '[enrolled]', '[course_status]'), 
								array(	$ed_info['edition_type'], 
										createDateDistance($cinfo['create_date'], 'coursecatalogue', true), 
										$cinfo['enrolled'][$ed_id],
										$arr_coursestatus[$ed_info['status']]), 
								$lang->def('_COURSE_INTRO'))
				.'</p>';
		//}
		if($ed_info['classrooms'] != '') {
			
			$intest .= '<p class="course_support_info">'.
					str_replace(	array('[classrooms_name]', '[classrooms_location]'), 
									array($ed_info['classrooms']['classroom'], $ed_info['classrooms']['location']), 
									$lang->def('_IN_THE_CLASSROOM') 	)
					.'</p>'; 
		}
		$intest .= '<p class="course_support_info">'
			.$arr_status[$sub_info['user_status']]
			.str_replace('[level]', $lvl[$sub_info['level']], $lang->def('_USER_LVL') )
			.' '.( trim($cinfo['code']) != '' && $sub_info['level'] >= 4 ? '<br />['.$cinfo['code'].'] ' : '' )
			.'</p>';
		if($access['expiring_in'] != false && $access['expiring_in'] < 30) {
			
			$intest .= '<p class="course_support_info">'.
					str_replace('[expiring_in]', $access['expiring_in'], $lang->def('_EXPIRING_IN') )
					.'</p>';
		}
		$courseuser_st = $sub_info['user_status'];
	} else {
		// più di una edizione ------------------------------------------------------------------------
		
		foreach($subscription['edition'][$cinfo['idCourse']] as $ed_id => $sub_info) {
			
			//list($ed_id, $sub_info)  = each($subscription['edition'][$cinfo['idCourse']]);
			$ed_info =& $cinfo['edition_list'][$ed_id];
			
			$cinfo['date_begin'] 	= $ed_info['date_begin'];
			$cinfo['date_end'] 		= $ed_info['date_end'];
			$access = Man_Course::canEnterCourse($cinfo);
			
			if($ed_info['date_begin'] == '0000-00-00') $ed_info['date_begin'] = '';
			if($ed_info['date_end'] == '0000-00-00') $ed_info['date_end'] = '';
			
			$intest .= '<h2>';
			if($access['can']) {
				
				$intest .= '<a class="course_enter" href="index.php?modname=course&amp;op=aula&amp;idCourse='.$cinfo['idCourse'].'&amp;id_e='.$ed_id.'" '
						.'title="'.$lang->def('_ENTERT').'">'
						.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
						//.( trim($ed_info['code']) != '' ? '['.$ed_info['code'].'] ' : '' )
						.$ed_info['name']
						
						.( $ed_info['date_begin'] != '' || $ed_info['date_end'] != '' 
							? ' <span>( '
								.$GLOBALS['regset']->databaseToRegional($ed_info['date_begin'], 'date')
								.' '.$GLOBALS['regset']->databaseToRegional($ed_info['date_end'], 'date')
								.' )</span> ' 
							: '')
						
						.'</a>';
			} else {
						
				$intest .= '<img id="locked_'.$cinfo['idCourse'].'" src="'.getPathImage().'course/lock.gif" alt="'.$lang->def('_NOENTER').'" '
					.' onclick="balloonAtElement(this.id, \'\',\''.$lang->def('_NOTACCESS_'.strtoupper($access['reason'])).'\');" />'
					.( $cinfo['lang_code'] ? '<img src="'.getPathImage('cms').'language/'.$cinfo['lang_code'].'.png" alt="'.$cinfo['lang_code'].'" /> ' : '' )
					.( trim($ed_info['code']) != '' ? '['.$ed_info['code'].'] ' : '' ).$ed_info['name']
						
						.( $ed_info['date_begin'] != '' || $ed_info['date_end'] != '' 
							? ' <span>( '
								.$GLOBALS['regset']->databaseToRegional($ed_info['date_begin'], 'date')
								.' '.$GLOBALS['regset']->databaseToRegional($ed_info['date_end'], 'date')
								.' )</span> ' 
							: '');
			}
			$intest .= '</h2>';
			
			//if($sub_info['level'] >= 4) {
			
				$intest .= '<p class="course_support_info">'
					.str_replace(	array('[course_type]', '[create_date]', '[enrolled]', '[course_status]'), 
									array($ed_info['edition_type'], 
											createDateDistance($cinfo['create_date'], 'coursecatalogue', true), 
											$cinfo['enrolled'][$ed_id],
											$arr_coursestatus[$ed_info['status']]), 
									$lang->def('_COURSE_INTRO'))
					.'</p>';
			//}
			
			if($ed_info['classrooms'] != '') {
				
				$intest .= '<p class="course_support_info">'.
						str_replace(	array('[classrooms_name]', '[classrooms_location]'), 
										array($ed_info['classrooms']['classroom'], $ed_info['classrooms']['location']), 
										$lang->def('_IN_THE_CLASSROOM') 	)
						.'</p>'; 
			}
			$intest .= '<p class="course_support_info">'
				.$arr_status[$sub_info['user_status']]
				.str_replace('[level]', $lvl[$sub_info['level']], $lang->def('_USER_LVL') )
				
				.( trim($cinfo['code']) != '' && $sub_info['level'] >= 4 ? '<br />['.$cinfo['code'].'] ' : '' )
				.'</p>';
		}
		if($access['expiring_in'] != false && $access['expiring_in'] < 30) {
			
			$intest .= '<p class="course_support_info">'.
					str_replace('[expiring_in]', $access['expiring_in'], $lang->def('_EXPIRING_IN') )
					.'</p>';
		}
		$courseuser_st = ( $courseuser_st < $sub_info['user_status'] ? $sub_info['user_status'] : $courseuser_st );
	}
	// -----------------------------------------------------------------------------------------
	
	$html = '<div class="course_container'
		.( $GLOBALS['lms']['use_social_courselist'] == 'on' ? ' double_height' : '' )
		.( $index == 0 ? ' course_container_first' : '' )

		.( $courseuser_st == _CUS_SUBSCRIBED ? ' cc_inprogress' : '' )
		.( $courseuser_st == _CUS_BEGIN ? ' cc_begin' : '' )
		
		.'">';
	
	
	if(($cinfo['use_logo_in_courselist'] == '1' && $cinfo['img_course'] != '') 
		|| $GLOBALS['lms']['use_social_courselist'] == 'on') $html .= '<div class="course_info_container">';
	
	
	if($cinfo['use_logo_in_courselist'] == '1' && $cinfo['img_course'] != '') {
		$html .= '<ul class="course_score"><li>';
	 	$html .= '<img height="70" src="'.$GLOBALS['where_files_relative'].'/doceboLms/'.$GLOBALS['lms']['pathcourse']
	 			.$cinfo['img_course'].'" alt="'.$lang->def('_COURSE_LOGO').'" />';
		$html .= '</li></ul>';
	} 
	
	
	$html .= $intest;
	
	$li = '';
	$li .= '<li class="advice_to_read">'
		.'<img src="'.getPathImage('lms').'coursecatalogue/'.( $cinfo['to_read']['advice'] != 0 ? 'adv_advice' : 'no_advice' ) .'.jpg" '
		.' title="'.str_replace('[advice]', $cinfo['to_read']['advice'], $lang->def('_ADVERT_ADVICE')).'" '
		.' alt="'.str_replace('[advice]', $cinfo['to_read']['advice'], $lang->def('_ADVERT_ADVICE')).'" />'
		.'</li>';
	
	$li .= '<li class="forum_to_read">'
		.'<img src="'.getPathImage('lms').'coursecatalogue/'.( $cinfo['to_read']['forum'] != 0 ? 'adv_forum' : 'no_forum' ) .'.jpg" '
		.' title="'.str_replace('[forum]', $cinfo['to_read']['forum'], $lang->def('_ADVERT_FORUM')).'" '
		.' alt="'.str_replace('[forum]', $cinfo['to_read']['forum'], $lang->def('_ADVERT_FORUM')).'" />'
		.'</li>';
	
	$li .= '<li class="lobj_to_read">'
		.'<img src="'.getPathImage('lms').'coursecatalogue/'.( $cinfo['to_read']['lobj'] != 0 ? 'adv_lobj' : 'no_lobj' ) .'.jpg" '
		.' title="'.str_replace('[lobj]', $cinfo['to_read']['lobj'], $lang->def('_ADVERT_LOBJ')).'" '
		.' alt="'.str_replace('[lobj]', $cinfo['to_read']['lobj'], $lang->def('_ADVERT_LOBJ')).'" />'
		.'</li>';
	
	if($li != '') $html .= '<ul class="course_advertising">'.$li.'</ul>';
	
	
	// course related extra option -------------------------------------------------------------
	if($GLOBALS['lms']['use_social_courselist'] == 'on' || !empty($there_material)) {
		
		$li = '';
		if($GLOBALS['lms']['use_social_courselist'] == 'on') {
			
			$li .= '<li class="course_comment">'
					.'<a href="javascript:;" onclick="openComment(\''.$cinfo['idCourse'].'\'); return false;">'
					.'<span>'.$lang->def('_COMMENTS').' ('
					.( isset($cinfo['comment_count']) ? $cinfo['comment_count'] : '0' ).')</span></a>'
					.'</li>';
		}
		// the course material ----------------------------------------------------------------- 
		if(!empty($there_material))  {
			
			if(count($there_material) == 1) {
				
				// direct download of material -------------------------------------------------
				$li .= '<li class="course_materials">'
					.'<a href="'.$url->getUrl('op=donwloadmaterials'.array_pop($there_material)).'">'
					.'<span>'.$lang->def('_MATERIALS').'</span></a>'
					.'</li>';
			} else {
			
				// popup download of material --------------------------------------------------
				$li .= '<li class="course_materials">'
					.'<a href="javascript:;" onclick="openWindowWithAction(\''.$cinfo['idCourse'].'\', \'course_materials\'); return false;">'
					.'<span>'.$lang->def('_MATERIALS').'</span></a>'
					.'</li>';
			}
		}
		if($li != '') $html .= '<ul class="course_related_actions">'.$li.'</ul>';
	}
	
	// score and subscribe action ------------------------------------------------------------
	
	if($GLOBALS['lms']['use_social_courselist'] == 'on') {
		
		$html .= '<ul class="course_score">';
		
		$html .= '<li class="current_score"><span>'.$lang->def('_COURSE_VOTE').'</span><br />'
			.'<strong id="course_score_'.$cinfo['idCourse'].'">'.$cinfo['course_vote'].'</strong></li>';
		if($cinfo['waiting'] == 0)  {
			
			$html .= '<li class="score_it">'
					.'<a class="good" href="javascript:;" '
						.'onclick="course_vote(\''.$cinfo['idCourse'].'\', \'good\'); return false;" '
						.'title="'.$lang->def('_VOTE_GOOD_TITLE').'">'
						
						.'<img id="score_image_good_'.$cinfo['idCourse'].'" src="'.getPathImage().'coursecatalogue/good'
							.( $cinfo['user_score'] == '1' ? '_grey' : '' )
							.'.png" alt="'.$lang->def('_VOTE_GOOD_ALT').' : '.strip_tags($cinfo['name']).'" />'
					.'</a> '
					.'<a class="bad" href="javascript:;" '
						.'onclick="course_vote(\''.$cinfo['idCourse'].'\', \'bad\'); return false;" '
						.'title="'.$lang->def('_VOTE_BAD_TITLE').'">'
						
						.'<img id="score_image_bad_'.$cinfo['idCourse'].'" src="'.getPathImage().'coursecatalogue/bad'
							.( $cinfo['user_score'] == '-1' ? '_grey' : '' )
							.'.png" alt="'.$lang->def('_VOTE_BAD_ALT').' : '.strip_tags($cinfo['name']).'" />'
					.'</a>'
				.'</li>';
		} else {
			
			$li .= '<li class="score_it" id="score_action_'.$cinfo['idCourse'].'">'
					.'<img src="'.getPathImage().'coursecatalogue/good_grey.png" alt="'.$lang->def('_VOTE_GOOD_ALT').' : '.strip_tags($cinfo['name']).'" /> '
					.'<img src="'.getPathImage().'coursecatalogue/bad_grey.png" alt="'.$lang->def('_VOTE_BAD_ALT').' : '.strip_tags($cinfo['name']).'" />'
				.'</li>';
		}
		$html .= '</ul>';
	}
	
	if(($cinfo['use_logo_in_courselist'] == '1' && $cinfo['img_course'] != '') 
		|| $GLOBALS['lms']['use_social_courselist'] == 'on') $html .= '</div>';
	
	$html .= '</div>';
	return $html;
}

function dashAcourse($id_course, $h_number) {

	require_once($GLOBALS['where_framework'].'/lib/lib.form.php');
	require_once($GLOBALS['where_framework'].'/lib/lib.user_profile.php');
	require_once($GLOBALS['where_framework'].'/lib/lib.navbar.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.preassessment.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.catalogue.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.coursepath.php');
	require_once($GLOBALS['where_lms'].'/lib/lib.course.php');
	require_once($GLOBALS["where_lms"]."/modules/coursecatalogue/lib.coursecatalogue.php");
	$lang =& DoceboLanguage::createInstance( 'standard', 'framework');
	$lang->setGlobal();
	$lang =& DoceboLanguage::createInstance( 'course', 'lms');
	
	$normal_subs = 1;
	
	$man_course	= new DoceboCourse($id_course);
	$cinfo = $man_course->getAllInfo();
	
	$man_courseuser = new Man_CourseUser();
	$usercourses =& $man_courseuser->getUserSubscriptionsInfo(getLogUserId(), false);
	
	$select_edition = " SELECT * ";
	$from_edition 	= " FROM ".$GLOBALS["prefix_lms"]."_course_edition";
	$where_edition 	= " WHERE idCourse = '".$id_course."' ";
	$order_edition 	= " ORDER BY date_begin ";
	$re_edition = mysql_query($select_edition.$from_edition.$where_edition.$order_edition);
	$editions = array();
	
	if($re_edition)
	while($edition_elem = mysql_fetch_assoc($re_edition)) {
		
		$edition_elem['waiting'] = 0;
		$edition_elem['user_count'] = 0;
		$edition_elem['theacher_list'] = getSubscribed($edition_elem["idCourse"], false, 6, true, $edition_elem["idCourseEdition"]);
		$editions[$edition_elem["idCourse"]][$edition_elem["idCourseEdition"]] = $edition_elem;
	}
	
	$select_ed_count 	= "SELECT idCourse, edition_id, sum(waiting) as waiting, COUNT(*) as user_count ";
	$from_ed_count 		= "FROM ".$GLOBALS["prefix_lms"]."_courseuser ";
	$where_ed_count 	= "WHERE edition_id <> 0 AND idCourse = '".$id_course."'";
	$group_ed_count 	= "GROUP BY edition_id ";
	$re_ed_count = mysql_query($select_ed_count.$from_ed_count.$where_ed_count.$group_ed_count );
	if($re_ed_count)
	while($ed_count_elem = mysql_fetch_assoc($re_ed_count)) {
		
		$editions[$ed_count_elem["idCourse"]][$ed_count_elem["edition_id"]]['waiting'] = $ed_count_elem['waiting'];
		$editions[$ed_count_elem["idCourse"]][$ed_count_elem["edition_id"]]['user_count'] = $ed_count_elem['user_count'];
	}
	
	$cinfo['theacher_list'] = getSubscribed($cinfo['idCourse'], false, 6, true);
	$cinfo['edition_list'] = ( isset($editions[$cinfo['idCourse']]) ? $editions[$cinfo['idCourse']] : array() );
	$cinfo['edition_available'] = count($cinfo['edition_list']);
	$cinfo['user_score'] = ( isset($user_score[$cinfo['idCourse']]) ? $user_score[$cinfo['idCourse']] : NULL );
	
	
	require_once($GLOBALS['where_framework'].'/lib/lib.urlmanager.php');
	$url =& UrlManager::getInstance('coursecatalogue');
	$url->setStdQuery('modname=course&op=mycourses');
	if($normal_subs == 0) $cinfo['can_subscribe'] = 0;
	$html = dashcourse($url, $lang, $cinfo, ( isset($usercourses[$cinfo['idCourse']]) ? $usercourses[$cinfo['idCourse']] : false ), 0, $h_number);
	
	return $html;
}

//---------------------------------------------------------------------------------------
// dispatching --------------------------------------------------------------------------
//---------------------------------------------------------------------------------------

function courseDispatch($op) {
	
	require_once($GLOBALS['where_framework'].'/lib/lib.urlmanager.php');
	$url =& UrlManager::getInstance('course');
	$url->setStdQuery('modname=course&op=mycourses');
	
	switch($op) {
		case "unregistercourse" :
		case "mycourses" : {
			mycourses($url);
		};break;
	}
}

?>
