From 2900a6bd6f046a2d15fb4ea0310b220359dad3c6 Mon Sep 17 00:00:00 2001 From: Eric Marguin Date: Tue, 12 Feb 2008 10:45:29 +0100 Subject: [PATCH] [svn r14282] allow to create session even with a great number of users (exemple : campus.dokeos.com) --- main/admin/add_courses_to_session.php | 164 +++++++++++++++++++++---- main/admin/add_users_to_session.php | 162 +++++++++++++++++++----- main/admin/session_add.php | 95 +++++++++++--- main/css/academica/default.css | 38 ++++++ main/css/baby/default.css | 38 ++++++ main/css/corporativa/default.css | 38 ++++++ main/css/default/default.css | 38 ++++++ main/css/default_with_tabs/default.css | 38 ++++++ main/css/dokeosgrey/default.css | 38 ++++++ 9 files changed, 573 insertions(+), 76 deletions(-) diff --git a/main/admin/add_courses_to_session.php b/main/admin/add_courses_to_session.php index 533df81107..39ef56fc57 100644 --- a/main/admin/add_courses_to_session.php +++ b/main/admin/add_courses_to_session.php @@ -36,6 +36,11 @@ $cidReset=true; // including some necessary dokeos files require('../inc/global.inc.php'); +require_once ('../inc/lib/xajax/xajax.inc.php'); +$xajax = new xajax(); +//$xajax->debugOn(); +$xajax -> registerFunction ('search_courses'); + // setting the section (for the tabs) $this_section = SECTION_PLATFORM_ADMIN; @@ -58,6 +63,64 @@ $tool_name= get_lang('SubscribeCoursesToSession'); $id_session=intval($_GET['id_session']); + + +function search_courses($needle) +{ + global $tbl_course, $tbl_session_rel_course, $id_session; + + $xajax_response = new XajaxResponse(); + $return = ''; + if(!empty($needle)) + { + // search users where username or firstname or lastname begins likes $needle + $sql = 'SELECT course.code, course.visual_code, course.title, session_rel_course.id_session + FROM '.$tbl_course.' course + LEFT JOIN '.$tbl_session_rel_course.' session_rel_course + ON course.code = session_rel_course.course_code + AND session_rel_course.id_session = '.intval($id_session).' + WHERE course.visual_code LIKE "'.$needle.'%" + OR course.title LIKE "'.$needle.'%"'; + + $rs = api_sql_query($sql, __FILE__, __LINE__); + + while($course = Database :: fetch_array($rs)) + { + $return .= ''.$course['title'].' ('.$course['visual_code'].')
'; + } + } + $xajax_response -> addAssign('ajax_list_courses','innerHTML',utf8_encode($return)); + return $xajax_response; +} +$xajax -> processRequests(); + +$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); +$htmlHeadXtra[] = ' +'; + + $formSent=0; $errorMsg=$firstLetterCourse=$firstLetterSession=''; $CourseList=$SessionList=array(); @@ -151,28 +214,56 @@ Display::display_header($tool_name); api_display_tool_title($tool_name); +$sql = 'SELECT COUNT(1) FROM '.$tbl_course; +$rs = api_sql_query($sql, __FILE__, __LINE__); +$count_courses = mysql_result($rs, 0, 0); +$ajax_search = $count_courses > 50 ? true : false; -$sql="SELECT code, title, visual_code, id_session - FROM $tbl_course - LEFT JOIN $tbl_session_rel_course - ON code = course_code - ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title"; - -$result=api_sql_query($sql,__FILE__,__LINE__); - -$Courses=api_store_result($result); $nosessionCourses = $sessionCourses = array(); +if($ajax_search) +{ -foreach($Courses as $course) - if($course['id_session'] == $id_session) + $sql="SELECT code, title, visual_code, id_session + FROM $tbl_course course + INNER JOIN $tbl_session_rel_course session_rel_course + ON course.code = session_rel_course.course_code + AND session_rel_course.id_session = ".intval($id_session)." + ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title"; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $Courses=api_store_result($result); + + + foreach($Courses as $course) + { $sessionCourses[$course['code']] = $course ; - -foreach($Courses as $course) - if(empty($sessionCourses[$course['code']]) && empty($nosessionCourses[$course['code']])) - $nosessionCourses[$course['code']] = $course ; - - + } +} +else +{ + $sql="SELECT code, title, visual_code, id_session + FROM $tbl_course course + LEFT JOIN $tbl_session_rel_course session_rel_course + ON course.code = session_rel_course.course_code + AND session_rel_course.id_session = ".intval($id_session)." + ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title"; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $Courses=api_store_result($result); + + foreach($Courses as $course) + { + if($course['id_session'] == $id_session) + { + $sessionCourses[$course['code']] = $course ; + } + else + { + $nosessionCourses[$course['code']] = $course ; + } + } +} unset($Courses); ?> @@ -194,26 +285,47 @@ if(!empty($errorMsg)) : - +
+ + + +

+





debugOn(); +$xajax -> registerFunction ('search_users'); + // setting the section (for the tabs) $this_section = SECTION_PLATFORM_ADMIN; @@ -61,6 +66,63 @@ $tbl_class_user = Database::get_main_table(TABLE_MAIN_CLASS_USER); $tool_name=get_lang('SubscribeUsersToSession'); $id_session=intval($_GET['id_session']); + + +function search_users($needle) +{ + global $tbl_user; + + $xajax_response = new XajaxResponse(); + $return = ''; + if(!empty($needle)) + { + // search users where username or firstname or lastname begins likes $needle + $sql = 'SELECT user_id, username, lastname, firstname FROM '.$tbl_user.' user + WHERE (username LIKE "'.$needle.'%" + OR firstname LIKE "'.$needle.'%" + OR lastname LIKE "'.$needle.'%") + ORDER BY lastname, firstname, username + LIMIT 10'; + + $rs = api_sql_query($sql, __FILE__, __LINE__); + + while($user = Database :: fetch_array($rs)) + { + $return .= ''.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')
'; + } + } + $xajax_response -> addAssign('ajax_list_users','innerHTML',utf8_encode($return)); + return $xajax_response; +} +$xajax -> processRequests(); + +$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); +$htmlHeadXtra[] = ' +'; + + $formSent=0; $errorMsg=$firstLetterUser=$firstLetterSession=''; $UserList=$SessionList=array(); @@ -153,40 +215,48 @@ Display::display_header($tool_name); api_display_tool_title($tool_name); -$nosessionUsersList = $sessionUsersList = $nosessionClassesList = $sessionClassesList = array(); - -//classes -$sql="SELECT id, name FROM $tbl_class ORDER BY name"; -$result=api_sql_query($sql,__FILE__,__LINE__); - -$Classes=api_store_result($result); -foreach($Classes as $classe) - if($classe['id_session'] == $id_session) - $sessionClassesList[$classe['id']] = $classe ; - -foreach($Classes as $classe) - if(empty($sessionClassesList[$classe['user_id']]) && empty($nosessionClassesList[$classe['user_id']])) - $nosessionClassesList[$classe['id']] = $classe ; +$nosessionUsersList = $sessionUsersList = array(); +$sql = 'SELECT COUNT(1) FROM '.$tbl_user; +$rs = api_sql_query($sql, __FILE__, __LINE__); +$count_courses = mysql_result($rs, 0, 0); +$ajax_search = $count_courses > 100 ? true : false; - -//users -$sql="SELECT user_id, lastname, firstname, username, id_session - FROM $tbl_user - LEFT JOIN $tbl_session_rel_user - ON $tbl_session_rel_user.id_user = $tbl_user.user_id - ORDER BY lastname,firstname,username"; - -$result=api_sql_query($sql,__FILE__,__LINE__); - -$Users=api_store_result($result); - -foreach($Users as $user) - if($user['id_session'] == $id_session) +if($ajax_search) +{ + $sql="SELECT user_id, lastname, firstname, username, id_session + FROM $tbl_user + INNER JOIN $tbl_session_rel_user + ON $tbl_session_rel_user.id_user = $tbl_user.user_id + AND $tbl_session_rel_user.id_session = ".intval($id_session)." + ORDER BY lastname,firstname,username"; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $Users=api_store_result($result); + + foreach($Users as $user) + { $sessionUsersList[$user['user_id']] = $user ; - -foreach($Users as $user) - if(empty($sessionUsersList[$user['user_id']]) && empty($nosessionUsersList[$user['user_id']])) - $nosessionUsersList[$user['user_id']] = $user ; + } +} +else +{ + $sql="SELECT user_id, lastname, firstname, username, id_session + FROM $tbl_user + LEFT JOIN $tbl_session_rel_user + ON $tbl_session_rel_user.id_user = $tbl_user.user_id + ORDER BY lastname,firstname,username"; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $Users=api_store_result($result); + + foreach($Users as $user) + { + if($user['id_session'] == $id_session) + $sessionUsersList[$user['user_id']] = $user ; + else + $nosessionUsersList[$user['user_id']] = $user ; + } +} @@ -218,6 +288,18 @@ if(!empty($errorMsg))
+ + +
+ + +
+ + +

+





diff --git a/main/admin/session_add.php b/main/admin/session_add.php index c4c242c49e..38598052aa 100644 --- a/main/admin/session_add.php +++ b/main/admin/session_add.php @@ -6,6 +6,11 @@ $cidReset=true; include('../inc/global.inc.php'); +require_once ('../inc/lib/xajax/xajax.inc.php'); +$xajax = new xajax(); +//$xajax->debugOn(); +$xajax -> registerFunction ('search_coachs'); + // setting the section (for the tabs) $this_section=SECTION_PLATFORM_ADMIN; @@ -18,6 +23,48 @@ $errorMsg=''; $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); +function search_coachs($needle) +{ + global $tbl_user; + + $xajax_response = new XajaxResponse(); + $return = ''; + + if(!empty($needle)) + { + // search users where username or firstname or lastname begins likes $needle + $sql = 'SELECT username, lastname, firstname FROM '.$tbl_user.' user + WHERE (username LIKE "'.$needle.'%" + OR firstname LIKE "'.$needle.'%" + OR lastname LIKE "'.$needle.'%") + AND status=1 + ORDER BY lastname, firstname, username + LIMIT 10'; + + $rs = api_sql_query($sql, __FILE__, __LINE__); + + while($user = Database :: fetch_array($rs)) + { + $return .= ''.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')
'; + } + } + $xajax_response -> addAssign('ajax_list_coachs','innerHTML',utf8_encode($return)); + return $xajax_response; +} +$xajax -> processRequests(); + +$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); + +$htmlHeadXtra[] = ' +'; + $tool_name = get_lang('AddSession'); $interbreadcrumb[]=array('url' => 'index.php',"name" => get_lang('PlatformAdmin')); @@ -34,7 +81,10 @@ if($_POST['formSent']) $year_end=intval($_POST['year_end']); $month_end=intval($_POST['month_end']); $day_end=intval($_POST['day_end']); - $id_coach=intval($_POST['id_coach']); + + $sql = 'SELECT user_id FROM '.$tbl_user.' WHERE username="'.Database::escape_string($_POST['coach_username']).'"'; + $rs = api_sql_query($sql, __FILE__, __LINE__); + $id_coach = mysql_result($rs,0,'user_id'); if(empty($_POST['nolimit'])){ $date_start="$year_start-".(($month_start < 10)?"0$month_start":$month_start)."-".(($day_start < 10)?"0$day_start":$day_start); @@ -44,6 +94,7 @@ if($_POST['formSent']) $date_start="000-00-00"; $date_end="000-00-00"; } + if(empty($name)) $errorMsg=get_lang('SessionNameIsRequired'); elseif(empty($_POST['nolimit']) && (!$month_start || !$day_start || !$year_start || !checkdate($month_start,$day_start,$year_start))) $errorMsg=get_lang('InvalidStartDate'); elseif(empty($_POST['nolimit']) && (!$month_end || !$day_end || !$year_end || !checkdate($month_end,$day_end,$year_end))) $errorMsg=get_lang('InvalidEndDate'); @@ -64,11 +115,6 @@ if($_POST['formSent']) } } -$sql="SELECT user_id,lastname,firstname,username FROM $tbl_user WHERE status='1' ORDER BY lastname,firstname,username"; - -$result=api_sql_query($sql,__FILE__,__LINE__); - -$Coaches=api_store_result($result); $thisYear=date('Y'); $thisMonth=date('m'); @@ -109,23 +155,36 @@ if(!empty($errorMsg))    - + + + + + + +
+ - + + diff --git a/main/css/academica/default.css b/main/css/academica/default.css index 78de20661c..5a7345e8cf 100644 --- a/main/css/academica/default.css +++ b/main/css/academica/default.css @@ -1498,4 +1498,42 @@ div.system_announcement { color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file diff --git a/main/css/baby/default.css b/main/css/baby/default.css index 2fcd781957..4755564d19 100644 --- a/main/css/baby/default.css +++ b/main/css/baby/default.css @@ -1424,4 +1424,42 @@ div.system_announcement { color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file diff --git a/main/css/corporativa/default.css b/main/css/corporativa/default.css index 0c13409681..46f249cf96 100644 --- a/main/css/corporativa/default.css +++ b/main/css/corporativa/default.css @@ -1381,4 +1381,42 @@ div.system_announcement { color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file diff --git a/main/css/default/default.css b/main/css/default/default.css index 104a77f944..a37431d906 100644 --- a/main/css/default/default.css +++ b/main/css/default/default.css @@ -2086,4 +2086,42 @@ input.forms { color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file diff --git a/main/css/default_with_tabs/default.css b/main/css/default_with_tabs/default.css index 66e3850575..8a8d346933 100644 --- a/main/css/default_with_tabs/default.css +++ b/main/css/default_with_tabs/default.css @@ -1502,4 +1502,42 @@ padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;} color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file diff --git a/main/css/dokeosgrey/default.css b/main/css/dokeosgrey/default.css index ca19c3754e..1153e70c39 100644 --- a/main/css/dokeosgrey/default.css +++ b/main/css/dokeosgrey/default.css @@ -1417,4 +1417,42 @@ padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;} color:#000; padding:5px; /*border: 1px solid #264269;*/ +} + +/* +------------------------------------------------------------------------------^M + sessions +------------------------------------------------------------------------------^M +*/ + +#ajax_list_coachs { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + margin-top:-23px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_courses { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; +} +#ajax_list_users { + position:absolute; + border:1px solid #4171B5; + margin:0px; + padding:0px; + margin-left:200px; + background-color:#FFFFFF; + height:auto; + overflow:auto; } \ No newline at end of file