[svn r14282] allow to create session even with a great number of users (exemple : campus.dokeos.com)

skala
Eric Marguin 18 years ago
parent 06aaa31bb3
commit 2900a6bd6f
  1. 164
      main/admin/add_courses_to_session.php
  2. 162
      main/admin/add_users_to_session.php
  3. 95
      main/admin/session_add.php
  4. 38
      main/css/academica/default.css
  5. 38
      main/css/baby/default.css
  6. 38
      main/css/corporativa/default.css
  7. 38
      main/css/default/default.css
  8. 38
      main/css/default_with_tabs/default.css
  9. 38
      main/css/dokeosgrey/default.css

@ -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 .= '<a href="#" onclick="add_course_to_session(\''.$course['code'].'\',\''.$course['title'].' ('.$course['visual_code'].')'.'\')">'.$course['title'].' ('.$course['visual_code'].')</a><br />';
}
}
$xajax_response -> addAssign('ajax_list_courses','innerHTML',utf8_encode($return));
return $xajax_response;
}
$xajax -> processRequests();
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
$htmlHeadXtra[] = '
<script type="text/javascript">
function add_course_to_session (code, content) {
document.getElementById("course_to_add").value = "";
document.getElementById("ajax_list_courses").innerHTML = "";
destination = document.getElementById("destination");
destination.options[destination.length] = new Option(content,code);
destination.selectedIndex = -1;
sortOptions(destination.options);
}
function remove_item(origin)
{
for(var i = 0 ; i<origin.options.length ; i++) {
if(origin.options[i].selected) {
origin.options[i]=null;
i = i-1;
}
}
}
</script>';
$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))
<td align="center" width="45%"><b><?php echo get_lang('CourseListInSession') ?> :</b></td>
</tr>
<tr>
<td width="45%" align="center"><select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:300px;">
<?php
foreach($nosessionCourses as $enreg)
{
?>
<option value="<?php echo $enreg['code']; ?>" <?php if(in_array($enreg['code'],$CourseList)) echo 'selected="selected"'; ?>><?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?></option>
<td width="45%" align="center">
<?php
if($ajax_search){
?>
<input type="text" id="course_to_add" onkeyup="xajax_search_courses(this.value)" />
<div id="ajax_list_courses"></div>
<?php
}
else
{
?> <select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:300px;"> <?php
foreach($nosessionCourses as $enreg)
{
?>
<option value="<?php echo $enreg['code']; ?>" <?php if(in_array($enreg['code'],$CourseList)) echo 'selected="selected"'; ?>><?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?></option>
<?php
}
?> </select> <?php
}
unset($nosessionCourses);
?>
</select></td>
<td width="10%" valign="middle" align="center">
<?php
if($ajax_search)
{
?>
<input type="button" onclick="remove_item(document.getElementById('destination'))" value="<<" />
<?php
}
else
{
?>
<input type="button" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))" value=">>" />
<br /><br />
<input type="button" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))" value="<<" />
<?php
}
?>
<br /><br /><br /><br /><br /><br />
<?php
if(isset($_GET['add']))

@ -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_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 .= '<a href="#" onclick="add_user_to_session(\''.$user['user_id'].'\',\''.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')'.'\')">'.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')</a><br />';
}
}
$xajax_response -> addAssign('ajax_list_users','innerHTML',utf8_encode($return));
return $xajax_response;
}
$xajax -> processRequests();
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
$htmlHeadXtra[] = '
<script type="text/javascript">
function add_user_to_session (code, content) {
document.getElementById("user_to_add").value = "";
document.getElementById("ajax_list_users").innerHTML = "";
destination = document.getElementById("destination_users");
destination.options[destination.length] = new Option(content,code);
destination.selectedIndex = -1;
sortOptions(destination.options);
}
function remove_item(origin)
{
for(var i = 0 ; i<origin.options.length ; i++) {
if(origin.options[i].selected) {
origin.options[i]=null;
i = i-1;
}
}
}
</script>';
$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))
<tr>
<td align="center">
<div id="content_source">
<?php
if($ajax_search)
{
?>
<input type="text" id="user_to_add" onkeyup="xajax_search_users(this.value)" />
<div id="ajax_list_users"></div>
<?php
}
else
{
?>
<select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" style="width:300px;">
<?php
@ -234,12 +316,28 @@ if(!empty($errorMsg))
?>
</select>
<?php
}
?>
</div>
</td>
<td width="10%" valign="middle" align="center">
<?php
if($ajax_search)
{
?>
<input type="button" onclick="remove_item(document.getElementById('destination_users'))" value="<<" />
<?php
}
else
{
?>
<input type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))" value=">>" />
<br /><br />
<input type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))" value="<<" />
<?php
}
?>
<br /><br /><br /><br /><br /><br />
</td>
<td align="center">

@ -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 .= '<a href="#" onclick="fill_coach_field(\''.$user['username'].'\')">'.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')</a><br />';
}
}
$xajax_response -> addAssign('ajax_list_coachs','innerHTML',utf8_encode($return));
return $xajax_response;
}
$xajax -> processRequests();
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
$htmlHeadXtra[] = '
<script type="text/javascript">
function fill_coach_field (username) {
document.getElementById("coach_username").value = username;
document.getElementById("ajax_list_coachs").innerHTML = "";
}
</script>';
$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))
</tr>
<tr>
<td width="30%"><?php echo get_lang('CoachName') ?>&nbsp;&nbsp;</td>
<td width="70%"><select name="id_coach" value="true" style="width:250px;">
<option value="0"><?php get_lang('None'); ?></option>
<td width="70%">
<?php
foreach($Coaches as $enreg)
{
?>
$sql = 'SELECT COUNT(1) FROM '.$tbl_user.' WHERE status=1';
$rs = api_sql_query($sql, __FILE__, __LINE__);
$count_users = mysql_result($rs, 0, 0);
<option value="<?php echo $enreg['user_id']; ?>" <?php if($sent && $enreg['user_id'] == $id_coach) echo 'selected="selected"'; ?>><?php echo $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')'; ?></option>
<?php
if(intval($count_users)<50)
{
$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);
?>
<select name="coach_username" value="true" style="width:250px;">
<option value="0"><?php get_lang('None'); ?></option>
<?php foreach($Coaches as $enreg): ?>
<option value="<?php echo $enreg['username']; ?>" <?php if($sent && $enreg['user_id'] == $id_coach) echo 'selected="selected"'; ?>><?php echo $enreg['firstname'].' '.$enreg['lastname'].' ('.$enreg['username'].')'; ?></option>
<?php endforeach; ?>
</select>
<?php
}
else
{
?>
<input type="text" name="coach_username" id="coach_username" onkeyup="xajax_search_coachs(document.getElementById('coach_username').value)" /><div id="ajax_list_coachs"></div>
<?php
}
unset($Coaches);
?>
</select></td>
</td>
</tr>
<tr>
<td width="30%"><?php echo get_lang('NoTimeLimits') ?></td>

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}
Loading…
Cancel
Save