Skip to content

Commit 4bda1d0

Browse files
committed
Fix bug when filtering courses see BT#11421
1 parent 71592f1 commit 4bda1d0

File tree

2 files changed

+244
-252
lines changed

2 files changed

+244
-252
lines changed

main/inc/lib/add_courses_to_session_functions.lib.php

Lines changed: 109 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -6,123 +6,121 @@
66
*/
77
class AddCourseToSession
88
{
9-
/**
10-
* Searches a course, given a search string and a type of search box
11-
* @param string $needle Search string
12-
* @param string $type Type of search box ('single' or anything else)
13-
* @return xajaxResponse XajaxResponse
14-
* @assert ('abc', 'single') !== null
15-
* @assert ('abc', 'multiple') !== null
16-
*/
17-
public static function search_courses($needle, $type)
18-
{
19-
global $tbl_session_rel_course, $id_session;
9+
/**
10+
* Searches a course, given a search string and a type of search box
11+
* @param string $needle Search string
12+
* @param string $type Type of search box ('single' or anything else)
13+
* @return xajaxResponse XajaxResponse
14+
* @assert ('abc', 'single') !== null
15+
* @assert ('abc', 'multiple') !== null
16+
*/
17+
public static function search_courses($needle, $type)
18+
{
19+
global $tbl_session_rel_course, $id_session;
2020
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
21-
$course_title = null;
22-
$xajax_response = new xajaxResponse();
23-
$return = '';
24-
if(!empty($needle) && !empty($type)) {
25-
// xajax send utf8 datas... datas in db can be non-utf8 datas
26-
$charset = api_get_system_encoding();
27-
$needle = api_convert_encoding($needle, $charset, 'utf-8');
21+
$course_title = null;
22+
$xajax_response = new xajaxResponse();
23+
$return = '';
24+
if(!empty($needle) && !empty($type)) {
25+
// xajax send utf8 datas... datas in db can be non-utf8 datas
26+
$charset = api_get_system_encoding();
27+
$needle = api_convert_encoding($needle, $charset, 'utf-8');
2828

29-
$cond_course_code = '';
30-
if (!empty($id_session)) {
31-
$id_session = intval($id_session);
32-
// check course_code from session_rel_course table
33-
$sql = 'SELECT c_id FROM '.$tbl_session_rel_course.'
34-
WHERE session_id = '.$id_session;
35-
$res = Database::query($sql);
36-
$course_codes = '';
37-
if (Database::num_rows($res) > 0) {
38-
while ($row = Database::fetch_row($res)) {
39-
$course_codes .= '\''.$row[0].'\',';
40-
}
41-
$course_codes = substr($course_codes,0,(strlen($course_codes)-1));
29+
$cond_course_code = '';
30+
if (!empty($id_session)) {
31+
$id_session = intval($id_session);
32+
// check course_code from session_rel_course table
33+
$sql = 'SELECT c_id FROM '.$tbl_session_rel_course.'
34+
WHERE session_id = '.$id_session;
35+
$res = Database::query($sql);
36+
$course_codes = '';
37+
if (Database::num_rows($res) > 0) {
38+
while ($row = Database::fetch_row($res)) {
39+
$course_codes .= '\''.$row[0].'\',';
40+
}
41+
$course_codes = substr($course_codes,0,(strlen($course_codes)-1));
4242

43-
$cond_course_code = ' AND course.id NOT IN('.$course_codes.') ';
44-
}
45-
}
43+
$cond_course_code = ' AND course.id NOT IN('.$course_codes.') ';
44+
}
45+
}
4646

47-
if ($type=='single') {
48-
// search users where username or firstname or lastname begins likes $needle
49-
$sql = 'SELECT
50-
course.code,
51-
course.visual_code,
52-
course.title,
53-
session_rel_course.session_id
54-
FROM '.$tbl_course.' course
55-
LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
56-
ON course.id = session_rel_course.c_id
57-
AND session_rel_course.session_id = '.intval($id_session).'
58-
WHERE
59-
course.visual_code LIKE "'.$needle.'%" OR
60-
course.title LIKE "'.$needle.'%"';
61-
} else {
62-
$sql = 'SELECT course.code, course.visual_code, course.title
63-
FROM '.$tbl_course.' course
64-
WHERE
65-
course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
66-
ORDER BY course.code ';
67-
}
47+
if ($type == 'single') {
48+
// search users where username or firstname or lastname begins likes $needle
49+
$sql = 'SELECT
50+
course.id,
51+
course.visual_code,
52+
course.title,
53+
session_rel_course.session_id
54+
FROM '.$tbl_course.' course
55+
LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
56+
ON course.id = session_rel_course.c_id
57+
AND session_rel_course.session_id = '.intval($id_session).'
58+
WHERE
59+
course.visual_code LIKE "'.$needle.'%" OR
60+
course.title LIKE "'.$needle.'%"';
61+
} else {
62+
$sql = 'SELECT course.id, course.visual_code, course.title
63+
FROM '.$tbl_course.' course
64+
WHERE
65+
course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
66+
ORDER BY course.code ';
67+
}
6868

69-
if (api_is_multiple_url_enabled()) {
70-
$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
71-
$access_url_id = api_get_current_access_url_id();
72-
if ($access_url_id != -1){
69+
if (api_is_multiple_url_enabled()) {
70+
$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
71+
$access_url_id = api_get_current_access_url_id();
72+
if ($access_url_id != -1){
7373

74-
if ($type=='single') {
75-
$sql = 'SELECT
76-
course.code,
77-
course.visual_code,
78-
course.title,
79-
session_rel_course.session_id
80-
FROM '.$tbl_course.' course
81-
LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
82-
ON course.id = session_rel_course.c_id
83-
AND session_rel_course.session_id = '.intval($id_session).'
84-
INNER JOIN '.$tbl_course_rel_access_url.' url_course
85-
ON (url_course.c_id = course.id)
86-
WHERE
87-
access_url_id = '.$access_url_id.' AND
88-
(course.visual_code LIKE "'.$needle.'%" OR
89-
course.title LIKE "'.$needle.'%" )';
90-
} else {
91-
$sql = 'SELECT course.code, course.visual_code, course.title
92-
FROM '.$tbl_course.' course, '.$tbl_course_rel_access_url.' url_course
93-
WHERE
94-
url_course.c_id = course.id AND
95-
access_url_id = '.$access_url_id.' AND
96-
course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
97-
ORDER BY course.code ';
98-
}
99-
}
100-
}
74+
if ($type=='single') {
75+
$sql = 'SELECT
76+
course.id,
77+
course.visual_code,
78+
course.title,
79+
session_rel_course.session_id
80+
FROM '.$tbl_course.' course
81+
LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
82+
ON course.id = session_rel_course.c_id
83+
AND session_rel_course.session_id = '.intval($id_session).'
84+
INNER JOIN '.$tbl_course_rel_access_url.' url_course
85+
ON (url_course.c_id = course.id)
86+
WHERE
87+
access_url_id = '.$access_url_id.' AND
88+
(course.visual_code LIKE "'.$needle.'%" OR
89+
course.title LIKE "'.$needle.'%" )';
90+
} else {
91+
$sql = 'SELECT course.id, course.visual_code, course.title
92+
FROM '.$tbl_course.' course, '.$tbl_course_rel_access_url.' url_course
93+
WHERE
94+
url_course.c_id = course.id AND
95+
access_url_id = '.$access_url_id.' AND
96+
course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
97+
ORDER BY course.code ';
98+
}
99+
}
100+
}
101101

102-
$rs = Database::query($sql);
103-
$course_list = array();
104-
if ($type=='single') {
102+
$rs = Database::query($sql);
103+
$course_list = array();
104+
if ($type == 'single') {
105+
while ($course = Database :: fetch_array($rs)) {
106+
$course_list[] = $course['code'];
107+
$course_title = str_replace("'", "\'", $course_title);
108+
$return .= '<a href="javascript: void(0);" onclick="javascript: add_course_to_session(\''.$course['id'].'\',\''.$course_title.' ('.$course['visual_code'].')'.'\')">'.$course['title'].' ('.$course['visual_code'].')</a><br />';
109+
}
110+
$xajax_response -> addAssign('ajax_list_courses_single','innerHTML',api_utf8_encode($return));
111+
} else {
112+
$return .= '<select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:340px;">';
113+
while ($course = Database :: fetch_array($rs)) {
114+
$course_list[] = $course['code'];
115+
$course_title=str_replace("'","\'",$course_title);
116+
$return .= '<option value="'.$course['id'].'" title="'.htmlspecialchars($course['title'].' ('.$course['visual_code'].')',ENT_QUOTES).'">'.$course['title'].' ('.$course['visual_code'].')</option>';
117+
}
118+
$return .= '</select>';
119+
$xajax_response->addAssign('ajax_list_courses_multiple', 'innerHTML', api_utf8_encode($return));
120+
}
121+
}
122+
$_SESSION['course_list'] = $course_list;
105123

106-
while($course = Database :: fetch_array($rs)) {
107-
$course_list[] = $course['code'];
108-
$course_title=str_replace("'","\'",$course_title);
109-
$return .= '<a href="javascript: void(0);" onclick="javascript: add_course_to_session(\''.$course['code'].'\',\''.$course_title.' ('.$course['visual_code'].')'.'\')">'.$course['title'].' ('.$course['visual_code'].')</a><br />';
110-
}
111-
$xajax_response -> addAssign('ajax_list_courses_single','innerHTML',api_utf8_encode($return));
112-
} else {
113-
$return .= '<select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:340px;">';
114-
while($course = Database :: fetch_array($rs)) {
115-
$course_list[] = $course['code'];
116-
$course_title=str_replace("'","\'",$course_title);
117-
$return .= '<option value="'.$course['code'].'" title="'.htmlspecialchars($course['title'].' ('.$course['visual_code'].')',ENT_QUOTES).'">'.$course['title'].' ('.$course['visual_code'].')</option>';
118-
}
119-
$return .= '</select>';
120-
121-
$xajax_response -> addAssign('ajax_list_courses_multiple','innerHTML',api_utf8_encode($return));
122-
}
123-
}
124-
$_SESSION['course_list'] = $course_list;
125-
126-
return $xajax_response;
127-
}
124+
return $xajax_response;
125+
}
128126
}

0 commit comments

Comments
 (0)