Browse Source

changes to auto-register mechanism for courses #5376

Carlos Vargas 15 years ago
parent
commit
67f70a3c3f

+ 41 - 2
main/admin/course_edit.php

@@ -29,6 +29,8 @@ $tool_name = get_lang('ModifyCourseInfo');
 $interbreadcrumb[] = array ("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
 $interbreadcrumb[] = array ("url" => "course_list.php", "name" => get_lang('AdminCourses'));
 
+define('USER_FIELD_TYPE_CHECKBOX', 10);
+
 /*
 -----------------------------------------------------------
 	Libraries
@@ -167,6 +169,26 @@ $form->addElement('radio', 'unsubscribe', null, get_lang('NotAllowedToUnsubscrib
 $form->addElement('text','disk_quota',get_lang('CourseQuota'));
 $form->addRule('disk_quota', get_lang('ThisFieldIsRequired'),'required');
 $form->addRule('disk_quota',get_lang('ThisFieldShouldBeNumeric'),'numeric');
+
+$list_course_extra_field = CourseManager::get_course_extra_field_list($course_code);
+foreach($list_course_extra_field as $extra_field){
+	switch($extra_field['field_type']){
+		/* case USER_FIELD_TYPE_TEXT:
+		case USER_FIELD_TYPE_TEXTAREA:
+		case USER_FIELD_TYPE_RADIO: */
+		case USER_FIELD_TYPE_CHECKBOX:
+			$checked = (array_key_exists('extra_field_value', $extra_field) && $extra_field['extra_field_value'] == 1)? array('checked'=>'checked'): '';
+			$form->addElement('hidden', '_extra_'.$extra_field['field_variable'], 0);
+			$field_display_text=$extra_field['field_display_text'];
+			$form->addElement('checkbox', 'extra_'.$extra_field['field_variable'],get_lang($field_display_text) , get_lang($extra_field['field_default_value']), $checked);
+			break;
+		/* case USER_FIELD_TYPE_SELECT_MULTIPLE:
+		case USER_FIELD_TYPE_DATE:
+		case USER_FIELD_TYPE_DATETIME:
+		case USER_FIELD_TYPE_DOUBLE_SELECT:
+		case USER_FIELD_TYPE_DIVIDER: */
+	}
+}
 $form->addElement('style_submit_button', 'button', get_lang('ModifyCourseInfo'),'onclick="valide()"; class="save"');
 // Set some default values
 
@@ -196,7 +218,17 @@ if( $form->validate())
         }
         $warn = substr($warn,0,-1);
     }
-
+    // an extra field
+    $extras = array();
+    foreach($course as $key => $value) {
+	    if(substr($key,0,6)=='extra_') {  
+			$extras[substr($key,6)] = $value;
+		}
+		if(substr($key,0,7)=='_extra_') {
+			if(!array_key_exists(substr($key,7), $extras)) $extras[substr($key,7)] = $value;
+		}
+    }
+    
 	$tutor_id = $course['tutor_name'];
 	$tutor_name=$platform_teachers[$tutor_id];
 
@@ -228,7 +260,14 @@ if( $form->validate())
 								unsubscribe='".Database::escape_string($unsubscribe)."'
 							WHERE code='".Database::escape_string($course_code)."'";
 	Database::query($sql, __FILE__, __LINE__);
-
+	
+	//update the extra fields
+	if(count($extras) > 0){ 
+		foreach($extras as $key => $value) {
+			CourseManager::update_course_extra_field_value($course_code, $key, $value);
+		}
+	}
+	
 	//Delete only teacher relations that doesn't match the selected teachers
 	$cond='';
 	if(count($teachers)>0){

BIN
main/img/klipper.png


+ 83 - 8
main/inc/lib/course.lib.php

@@ -1642,14 +1642,63 @@ class CourseManager {
 		$course_list = array();
 		$codes = array();
 
-		$result = Database::query('SELECT c.code,c.db_name,c.title
-				FROM '.Database::get_main_table(TABLE_MAIN_COURSE).' c
-				INNER JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' cru
-				ON c.code=cru.course_code
-				WHERE cru.user_id='.$user_id, __FILE__, __LINE__);
-		while ($row = Database::fetch_array($result, 'ASSOC')) {
-			$course_list[] = $row;
-			$codes[] = $row['code'];
+		$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
+		$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+		$tbl_course_field 			= Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
+		$tbl_course_field_value		= Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+		$tbl_user_course_category   = Database :: get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+	
+		// get course list auto-register
+		$sql = "SELECT course_code FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf ON " .
+				" tcfv.field_id =  tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";	
+								
+		$special_course_result = Database::query($sql, __FILE__, __LINE__);					
+		if(Database::num_rows($special_course_result)>0) {
+			$special_course_list = array();
+			while ($result_row = Database::fetch_array($special_course_result)) {
+				$special_course_list[] = '"'.$result_row['course_code'].'"';
+			}
+		}
+		$with_special_courses = $without_special_courses = '';
+		if (!empty($special_course_list)) {
+			$with_special_courses = ' course.code IN ('.implode(',',$special_course_list).')';
+			$without_special_courses = ' AND course.code NOT IN ('.implode(',',$special_course_list).')';
+		}
+
+		if (!empty($with_special_courses)) {
+			$sql = "SELECT course.code, course.db_name db_name, course.title 
+												FROM    ".$tbl_course_user." course_rel_user
+												LEFT JOIN ".$tbl_course." course
+												ON course.code = course_rel_user.course_code
+												LEFT JOIN ".$tbl_user_course_category." user_course_category
+												ON course_rel_user.user_course_cat = user_course_category.id
+												WHERE  $with_special_courses 
+												GROUP BY course.code 
+												ORDER BY user_course_category.sort,course.title,course_rel_user.sort ASC";																																		
+			$rs_special_course = api_sql_query($sql, __FILE__, __LINE__);		
+			if (Database::num_rows($rs_special_course) > 0) {		
+				while ($result_row = Database::fetch_array($rs_special_course)) {
+						$result_row['special_course'] = 1;						
+						$course_list[] = $result_row;
+						$codes[] = $result_row['code'];
+				}
+			}
+		}
+		
+		// get course list not auto-register		
+		$sql = "SELECT course.code,course.db_name,course.title
+				FROM $tbl_course course
+				INNER JOIN $tbl_course_user cru
+				ON course.code=cru.course_code
+				WHERE  cru.user_id='$user_id' $without_special_courses";
+							
+		$result = Database::query($sql, __FILE__, __LINE__);
+				
+		if (Database::num_rows($result)) {		
+			while ($row = Database::fetch_array($result, 'ASSOC')) {
+				$course_list[] = $row;
+				$codes[] = $row['code'];
+			}
 		}
 
 		if ($include_sessions === true) {
@@ -1896,6 +1945,32 @@ class CourseManager {
 			0, 'session_category');
 	}
 
+	/**
+	 * Get the course id of an course by the database name
+	 * @param string The database name
+	 * @return string The course id
+	 */
+	public static function get_course_extra_field_list($code) {
+		$tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
+		$tbl_course_field_value	= Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+		$sql_field = "SELECT id, field_type, field_variable, field_display_text, field_default_value 
+			FROM $tbl_course_field  WHERE field_visible = '1' ";
+		$res_field = api_sql_query($sql_field,__FILE__,__LINE__);
+		$extra_fields = array();
+		while($rowcf = Database::fetch_array($res_field)) {
+			$extra_field_id = $rowcf['id'];
+			$sql_field_value = "SELECT field_value FROM $tbl_course_field_value WHERE course_code = '$code' AND field_id = '$extra_field_id' ";
+			$res_field_value = api_sql_query($sql_field_value, __FILE__, __LINE__);
+			if(Database::num_rows($res_field_value) > 0 ) {
+				$r_field_value = Database::fetch_row($res_field_value);
+				$rowcf['extra_field_value'] = $r_field_value[0];
+			}
+			$extra_fields[] = $rowcf; 
+		}
+		return $extra_fields; 
+	}
+
+
 	/**
 	 * Get the database name of a course by the code
 	 * @param string The course code

+ 60 - 0
main/inc/lib/usermanager.lib.php

@@ -2733,4 +2733,64 @@ class UserManager
 			 '</span>';		 
 		echo '</div>';*/
 	}
+	/**
+	 * Gives a list of course auto-register (field special_course)
+	 * @return array  list of course
+	 * @author Jhon Hinojosa <jhon.hinojosa@dokeos.com>
+	 * @since Dokeos 1.8.6.2
+	 */
+	public static function get_special_course_list() {
+		// Database Table Definitions
+		$tbl_course_user 			= Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+		$tbl_course 				= Database :: get_main_table(TABLE_MAIN_COURSE);
+		$tbl_course_field 			= Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
+		$tbl_course_field_value		= Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+		$tbl_user_course_category   = Database :: get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+		
+		//we filter the courses from the URL
+		$join_access_url=$where_access_url='';		
+		global $_configuration;
+		if ($_configuration['multiple_access_urls']==true) {
+			$access_url_id = api_get_current_access_url_id();
+			if($access_url_id!=-1) {
+				$tbl_url_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);		
+				$join_access_url= "LEFT JOIN $tbl_url_course url_rel_course ON url_rel_course.course_code= course.code";
+				$where_access_url=" AND access_url_id = $access_url_id ";
+			}
+		}
+		
+		// Filter special courses
+		$sql_special_course = "SELECT course_code FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf ON " .
+				" tcfv.field_id =  tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
+		$special_course_result = Database::query($sql_special_course, __FILE__, __LINE__);
+		$code_special_courses = '';
+		if(Database::num_rows($special_course_result)>0) {
+			$special_course_list = array();
+			while ($result_row = Database::fetch_array($special_course_result)) {
+				$special_course_list[] = '"'.$result_row['course_code'].'"';
+			}
+			$code_special_courses = ' course.code IN ('.join($special_course_list, ',').') ';
+		}
+		
+		// variable initialisation
+		$course_list_sql = '';
+		$course_list = array();
+		if(!empty($code_special_courses)){
+			$course_list_sql = "SELECT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, course.tutor_name t, course.course_language l, course_rel_user.status s, course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat
+											FROM    ".$tbl_course_user." course_rel_user
+											LEFT JOIN ".$tbl_course." course
+											ON course.code = course_rel_user.course_code
+											LEFT JOIN ".$tbl_user_course_category." user_course_category
+											ON course_rel_user.user_course_cat = user_course_category.id
+											$join_access_url
+											WHERE  $code_special_courses $where_access_url 
+											GROUP BY course.code 
+											ORDER BY user_course_category.sort,course.title,course_rel_user.sort ASC";
+			$course_list_sql_result = api_sql_query($course_list_sql, __FILE__, __LINE__);
+			while ($result_row = Database::fetch_array($course_list_sql_result)) {
+				$course_list[] = $result_row;
+			}
+		}
+		return $course_list;
+	}
 }

+ 2 - 0
main/install/migrate-db-1.8.6.1-1.8.6.2-pre.sql

@@ -64,6 +64,8 @@ INSERT INTO user_field (field_type, field_variable, field_display_text, field_vi
 
 UPDATE TABLE settings_current SET selected_value = '1.8.6.2.9070' WHERE variable = 'dokeos_database_version';
 
+INSERT INTO course_field (field_type, field_variable, field_display_text, field_default_value, field_visible, field_changeable) values (10, 'special_course','SpecialCourse', 'Yes', 1 , 1);
+
 -- xxSTATSxx
 ALTER TABLE track_e_exercices ADD COLUMN expired_time_control datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
 ALTER TABLE track_e_online ADD INDEX (course);

+ 7 - 5
user_portal.php

@@ -479,7 +479,7 @@ function get_logged_user_course_html($course, $session_id = 0, $class='courses')
 	if ($s_course_status == 2 || ($is_coach && $s_course_status != 1)) {
 		$s_htlm_status_icon=Display::return_icon('coachs.gif', get_lang('GeneralCoach'));
 	}
-	if ($s_course_status == 5 && !$is_coach) {
+	if (($s_course_status == 5 && !$is_coach) || empty($s_course_status)) {
 		$s_htlm_status_icon=Display::return_icon('students.gif', get_lang('Student'));
 	}
 
@@ -523,7 +523,7 @@ function get_logged_user_course_html($course, $session_id = 0, $class='courses')
 				}
 			}
 
-			if ($s_course_status == 1 || ($s_course_status == 5 && empty($my_course['id_session']))) {
+			if ($s_course_status == 1 || ($s_course_status == 5 && empty($my_course['id_session'])) || empty($s_course_status)) {
 				$result .= $course_teacher;
 			}
 			
@@ -541,6 +541,8 @@ function get_logged_user_course_html($course, $session_id = 0, $class='courses')
 		}
 	}
 
+	$result .= (isset($course['special_course']))? ' '.Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : '';
+	
 	$current_course_settings = CourseManager :: get_access_settings($my_course['k']);
 
 	// display the what's new icons
@@ -861,8 +863,9 @@ if (!empty ($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/',$_GET['in
 	}
 	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($_user['user_id'],false);
+
+		if ($cat == 0) {						
+			$courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id($_user['user_id'],false);											
 		}
 		$courses_tree[$cat]['sessions'] = array_flip(array_flip($sessions));
 		if (count($courses_tree[$cat]['sessions'])>0) {
@@ -1040,7 +1043,6 @@ if ( is_array($courses_tree) ) {
 					foreach ($session['courses'] as $course) {
 						//echo '<li class="session_course_item" id="session_course_item_'.$course['code'].'" style="padding:5px">';
 						$c = get_logged_user_course_html($course, $session['details']['id'], 'session_course_item');
-						//var_dump($c);
 						echo $c[1];
 						//echo $course['code'];
 						//echo '</li>';