Browse Source

Fix bug when filtering courses see BT#11421

jmontoyaa 8 years ago
parent
commit
4bda1d008d
2 changed files with 244 additions and 252 deletions
  1. 109 111
      main/inc/lib/add_courses_to_session_functions.lib.php
  2. 135 141
      main/session/add_courses_to_session.php

+ 109 - 111
main/inc/lib/add_courses_to_session_functions.lib.php

@@ -6,123 +6,121 @@
  */
 class AddCourseToSession
 {
-	/**
-	 * Searches a course, given a search string and a type of search box
-	 * @param string $needle Search string
-	 * @param string $type Type of search box ('single' or anything else)
-	 * @return xajaxResponse XajaxResponse
-	 * @assert ('abc', 'single') !== null
-	 * @assert ('abc', 'multiple') !== null
-	 */
-	public static function search_courses($needle, $type)
-	{
-		global $tbl_session_rel_course, $id_session;
+    /**
+     * Searches a course, given a search string and a type of search box
+     * @param string $needle Search string
+     * @param string $type Type of search box ('single' or anything else)
+     * @return xajaxResponse XajaxResponse
+     * @assert ('abc', 'single') !== null
+     * @assert ('abc', 'multiple') !== null
+     */
+    public static function search_courses($needle, $type)
+    {
+        global $tbl_session_rel_course, $id_session;
         $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
-		$course_title = null;
-		$xajax_response = new xajaxResponse();
-		$return = '';
-		if(!empty($needle) && !empty($type)) {
-			// xajax send utf8 datas... datas in db can be non-utf8 datas
-			$charset = api_get_system_encoding();
-			$needle = api_convert_encoding($needle, $charset, 'utf-8');
+        $course_title = null;
+        $xajax_response = new xajaxResponse();
+        $return = '';
+        if(!empty($needle) && !empty($type)) {
+            // xajax send utf8 datas... datas in db can be non-utf8 datas
+            $charset = api_get_system_encoding();
+            $needle = api_convert_encoding($needle, $charset, 'utf-8');
 
-			$cond_course_code = '';
-			if (!empty($id_session)) {
-				$id_session = intval($id_session);
-				// check course_code from session_rel_course table
-				$sql = 'SELECT c_id FROM '.$tbl_session_rel_course.'
-						WHERE session_id = '.$id_session;
-				$res = Database::query($sql);
-				$course_codes = '';
-				if (Database::num_rows($res) > 0) {
-					while ($row = Database::fetch_row($res)) {
-						$course_codes .= '\''.$row[0].'\',';
-					}
-					$course_codes = substr($course_codes,0,(strlen($course_codes)-1));
+            $cond_course_code = '';
+            if (!empty($id_session)) {
+                $id_session = intval($id_session);
+                // check course_code from session_rel_course table
+                $sql = 'SELECT c_id FROM '.$tbl_session_rel_course.'
+                        WHERE session_id = '.$id_session;
+                $res = Database::query($sql);
+                $course_codes = '';
+                if (Database::num_rows($res) > 0) {
+                    while ($row = Database::fetch_row($res)) {
+                        $course_codes .= '\''.$row[0].'\',';
+                    }
+                    $course_codes = substr($course_codes,0,(strlen($course_codes)-1));
 
-					$cond_course_code = ' AND course.id NOT IN('.$course_codes.') ';
-				}
-			}
+                    $cond_course_code = ' AND course.id NOT IN('.$course_codes.') ';
+                }
+            }
 
-			if ($type=='single') {
-				// search users where username or firstname or lastname begins likes $needle
-				$sql = 'SELECT
-							course.code,
-						 	course.visual_code,
-						 	course.title,
-						 	session_rel_course.session_id
-						FROM '.$tbl_course.' course
-						LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
-							ON course.id = session_rel_course.c_id
-							AND session_rel_course.session_id = '.intval($id_session).'
-						WHERE
-							course.visual_code LIKE "'.$needle.'%" OR
-							course.title LIKE "'.$needle.'%"';
-			} else {
-				$sql = 'SELECT course.code, course.visual_code, course.title
-						FROM '.$tbl_course.' course
-						WHERE
-							course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
-						ORDER BY course.code ';
-			}
+            if ($type == 'single') {
+                // search users where username or firstname or lastname begins likes $needle
+                $sql = 'SELECT
+                            course.id,
+                            course.visual_code,
+                            course.title,
+                            session_rel_course.session_id
+                        FROM '.$tbl_course.' course
+                        LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
+                            ON course.id = session_rel_course.c_id
+                            AND session_rel_course.session_id = '.intval($id_session).'
+                        WHERE
+                            course.visual_code LIKE "'.$needle.'%" OR
+                            course.title LIKE "'.$needle.'%"';
+            } else {
+                $sql = 'SELECT course.id, course.visual_code, course.title
+                        FROM '.$tbl_course.' course
+                        WHERE
+                            course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
+                        ORDER BY course.code ';
+            }
 
-			if (api_is_multiple_url_enabled()) {
-				$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
-				$access_url_id = api_get_current_access_url_id();
-				if ($access_url_id != -1){
+            if (api_is_multiple_url_enabled()) {
+                $tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+                $access_url_id = api_get_current_access_url_id();
+                if ($access_url_id != -1){
 
-					if ($type=='single') {
-						$sql = 'SELECT
-						            course.code,
-						            course.visual_code,
-						            course.title,
-						            session_rel_course.session_id
-								FROM '.$tbl_course.' course
-								LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
-									ON course.id = session_rel_course.c_id
-									AND session_rel_course.session_id = '.intval($id_session).'
-								INNER JOIN '.$tbl_course_rel_access_url.' url_course
-								ON (url_course.c_id = course.id)
-								WHERE
-									access_url_id = '.$access_url_id.' AND
-									(course.visual_code LIKE "'.$needle.'%" OR
-									course.title LIKE "'.$needle.'%" )';
-					} else {
-						$sql = 'SELECT course.code, course.visual_code, course.title
-								FROM '.$tbl_course.' course, '.$tbl_course_rel_access_url.' url_course
-								WHERE
-									url_course.c_id = course.id AND
-									access_url_id = '.$access_url_id.' AND
-									course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
-								ORDER BY course.code ';
-					}
-				}
-			}
+                    if ($type=='single') {
+                        $sql = 'SELECT
+                                    course.id,
+                                    course.visual_code,
+                                    course.title,
+                                    session_rel_course.session_id
+                                FROM '.$tbl_course.' course
+                                LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
+                                    ON course.id = session_rel_course.c_id
+                                    AND session_rel_course.session_id = '.intval($id_session).'
+                                INNER JOIN '.$tbl_course_rel_access_url.' url_course
+                                ON (url_course.c_id = course.id)
+                                WHERE
+                                    access_url_id = '.$access_url_id.' AND
+                                    (course.visual_code LIKE "'.$needle.'%" OR
+                                    course.title LIKE "'.$needle.'%" )';
+                    } else {
+                        $sql = 'SELECT course.id, course.visual_code, course.title
+                                FROM '.$tbl_course.' course, '.$tbl_course_rel_access_url.' url_course
+                                WHERE
+                                    url_course.c_id = course.id AND
+                                    access_url_id = '.$access_url_id.' AND
+                                    course.visual_code LIKE "'.$needle.'%" '.$cond_course_code.'
+                                ORDER BY course.code ';
+                    }
+                }
+            }
 
-			$rs = Database::query($sql);
-			$course_list = array();
-			if ($type=='single') {
+            $rs = Database::query($sql);
+            $course_list = array();
+            if ($type == 'single') {
+                while ($course = Database :: fetch_array($rs)) {
+                    $course_list[] = $course['code'];
+                    $course_title = str_replace("'", "\'", $course_title);
+                    $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 />';
+                }
+                $xajax_response -> addAssign('ajax_list_courses_single','innerHTML',api_utf8_encode($return));
+            } else {
+                $return .= '<select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:340px;">';
+                while ($course = Database :: fetch_array($rs)) {
+                    $course_list[] = $course['code'];
+                    $course_title=str_replace("'","\'",$course_title);
+                    $return .= '<option value="'.$course['id'].'" title="'.htmlspecialchars($course['title'].' ('.$course['visual_code'].')',ENT_QUOTES).'">'.$course['title'].' ('.$course['visual_code'].')</option>';
+                }
+                $return .= '</select>';
+                $xajax_response->addAssign('ajax_list_courses_multiple', 'innerHTML', api_utf8_encode($return));
+            }
+        }
+        $_SESSION['course_list'] = $course_list;
 
-				while($course = Database :: fetch_array($rs)) {
-					$course_list[] = $course['code'];
-					$course_title=str_replace("'","\'",$course_title);
-					$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 />';
-				}
-				$xajax_response -> addAssign('ajax_list_courses_single','innerHTML',api_utf8_encode($return));
-			} else {
-				$return .= '<select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:340px;">';
-				while($course = Database :: fetch_array($rs)) {
-					$course_list[] = $course['code'];
-					$course_title=str_replace("'","\'",$course_title);
-					$return .= '<option value="'.$course['code'].'" title="'.htmlspecialchars($course['title'].' ('.$course['visual_code'].')',ENT_QUOTES).'">'.$course['title'].' ('.$course['visual_code'].')</option>';
-				}
-				$return .= '</select>';
-
-				$xajax_response -> addAssign('ajax_list_courses_multiple','innerHTML',api_utf8_encode($return));
-			}
-		}
-		$_SESSION['course_list'] = $course_list;
-
-		return $xajax_response;
-	}
+        return $xajax_response;
+    }
 }

+ 135 - 141
main/session/add_courses_to_session.php

@@ -37,7 +37,7 @@ $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
 $tool_name= get_lang('SubscribeCoursesToSession');
 
 $add_type = 'multiple';
-if (isset($_GET['add_type']) && $_GET['add_type']!=''){
+if (isset($_GET['add_type']) && $_GET['add_type'] != '') {
     $add_type = Security::remove_XSS($_REQUEST['add_type']);
 }
 
@@ -151,7 +151,7 @@ if ($ajax_search) {
     $Courses = Database::store_result($result);
 
     foreach ($Courses as $course) {
-        $sessionCourses[$course['id']] = $course ;
+        $sessionCourses[$course['id']] = $course;
     }
 } else {
     $sql = "SELECT course.id, code, title, visual_code, session_id
@@ -175,7 +175,7 @@ if ($ajax_search) {
                     INNER JOIN $tbl_course_rel_access_url url_course
                     ON (url_course.c_id = course.id)
                     WHERE access_url_id = $access_url_id
-                    ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title";
+                    ORDER BY ".(sizeof($courses) ? "(code IN(".implode(',',$courses).")) DESC,":"")." title";
         }
     }
     $result = Database::query($sql);
@@ -206,162 +206,156 @@ if (!api_is_platform_admin() && api_is_teacher()) {
 
 unset($Courses);
 ?>
-    <form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?page=<?php echo $page; ?>&id_session=<?php echo $sessionId; ?><?php if(!empty($_GET['add'])) echo '&add=true' ; ?>" style="margin:0px;" <?php if($ajax_search){echo ' onsubmit="valide();"';}?>>
-        <legend><?php echo $tool_name.' ('.$session_info['name'].')'; ?></legend>
-        <input type="hidden" name="formSent" value="1" />
+<form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?page=<?php echo $page; ?>&id_session=<?php echo $sessionId; ?><?php if(!empty($_GET['add'])) echo '&add=true' ; ?>" style="margin:0px;" <?php if($ajax_search){echo ' onsubmit="valide();"';}?>>
+    <legend><?php echo $tool_name.' ('.$session_info['name'].')'; ?></legend>
+    <input type="hidden" name="formSent" value="1" />
 
-        <?php
-        if (!empty($errorMsg)) {
-            Display::display_normal_message($errorMsg); //main API
-        }
-        ?>
-        <div id="multiple-add-session" class="row">
-            <div class="col-md-4">
-                <label><?php echo get_lang('CourseListInPlatform') ?> :</label>
-                <?php
-                if (!($add_type == 'multiple')) {
-                    ?>
-                    <input type="text" id="course_to_add" onkeyup="xajax_search_courses(this.value,'single')" class="form-control"/>
-                    <div id="ajax_list_courses_single"></div>
-                <?php
-                } else {
-                    ?>
-                    <div id="ajax_list_courses_multiple">
-                        <select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" class="form-control">
-                            <?php foreach ($nosessionCourses as $enreg) { ?>
-                                <option value="<?php echo $enreg['id']; ?>" <?php echo 'title="'.htmlspecialchars($enreg['title'].' ('.$enreg['visual_code'].')',ENT_QUOTES).'"'; if(in_array($enreg['code'],$CourseList)) echo 'selected="selected"'; ?>>
-                                    <?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?>
-                                </option>
-                            <?php } ?>
-                        </select>
-                    </div>
-                <?php
-                }
-                unset($nosessionCourses);
+    <?php
+    if (!empty($errorMsg)) {
+        Display::display_normal_message($errorMsg); //main API
+    }
+    ?>
+    <div id="multiple-add-session" class="row">
+        <div class="col-md-4">
+            <label><?php echo get_lang('CourseListInPlatform') ?> :</label>
+            <?php
+            if (!($add_type == 'multiple')) {
                 ?>
-            </div>
-            <div class="col-md-4">
-                <?php if($add_type == 'multiple') { ?>
-                    <div class="code-course">
-                        <?php echo get_lang('FirstLetterCourse'); ?> :
-                        
-                        <select name="firstLetterCourse" onchange = "xajax_search_courses(this.value,'multiple')" class="selectpicker show-tick form-control">
-                            <option value="%">--</option>
-                            <?php
-                            echo Display :: get_alphabet_options();
-                            echo Display :: get_numeric_options(0,9,'');
-                            ?>
-                        </select>
-                    </div>
-                <?php } ?>
-                <div class="control-course">
-                    
-                <?php
-                if ($ajax_search) {
-                    ?>
-                    <div class="separate-action">
-                        <button class="btn btn-primary" type="button" onclick="remove_item(document.getElementById('destination'))">
-                            <em class="fa fa-chevron-left"></em>
-                        </button>
-                    </div>
-                <?php
-                } else {
-                    ?>
-                    <div class="separate-action">
-                        <button class="btn btn-primary" type="button" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))">
-                            <em class="fa fa-chevron-right"></em>
-                        </button>
-                    </div>
-                    <div class="separate-action">
-                        <button class="btn btn-primary" type="button" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))">
-                            <em class="fa fa-chevron-left"></em>
-                        </button>
-                    </div>    
-                    
-                <?php
-                }
+                <input type="text" id="course_to_add" onkeyup="xajax_search_courses(this.value,'single')" class="form-control"/>
+                <div id="ajax_list_courses_single"></div>
+            <?php
+            } else {
                 ?>
-                    <div class="separate-action">
-                        <label>
-                            <input type="checkbox" name="copy_evaluation">
-                            <?php echo get_lang('ImportGradebookInCourse'); ?>
-                        </label>
-                    </div>
-                    
-                <?php
-                echo '<div class="separate-action">';
-                if (isset($_GET['add'])) {
-                    echo '<button class="btn btn-success" type="button" value="" onclick="valide()" >'.get_lang('NextStep').'</button>';
-                } else {
-                    echo '<button class="btn btn-success" type="button" value="" onclick="valide()" >'.get_lang('SubscribeCoursesToSession').'</button>';
-                }
-                echo '</div>';
+                <div id="ajax_list_courses_multiple">
+                    <select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" class="form-control">
+                        <?php foreach ($nosessionCourses as $enreg) { ?>
+                            <option value="<?php echo $enreg['id']; ?>" <?php echo 'title="'.htmlspecialchars($enreg['title'].' ('.$enreg['visual_code'].')',ENT_QUOTES).'"'; if(in_array($enreg['code'],$CourseList)) echo 'selected="selected"'; ?>>
+                                <?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?>
+                            </option>
+                        <?php } ?>
+                    </select>
+                </div>
+            <?php
+            }
+            unset($nosessionCourses);
+            ?>
+        </div>
+        <div class="col-md-4">
+            <?php if($add_type == 'multiple') { ?>
+                <div class="code-course">
+                    <?php echo get_lang('FirstLetterCourse'); ?> :
+
+                    <select name="firstLetterCourse" onchange = "xajax_search_courses(this.value,'multiple')" class="selectpicker show-tick form-control">
+                        <option value="%">--</option>
+                        <?php
+                        echo Display :: get_alphabet_options();
+                        echo Display :: get_numeric_options(0, 9, '');
+                        ?>
+                    </select>
+                </div>
+            <?php } ?>
+            <div class="control-course">
+            <?php
+            if ($ajax_search) {
                 ?>
-
+                <div class="separate-action">
+                    <button class="btn btn-primary" type="button" onclick="remove_item(document.getElementById('destination'))">
+                        <em class="fa fa-chevron-left"></em>
+                    </button>
                 </div>
+            <?php
+            } else {
+                ?>
+                <div class="separate-action">
+                    <button class="btn btn-primary" type="button" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))">
+                        <em class="fa fa-chevron-right"></em>
+                    </button>
+                </div>
+                <div class="separate-action">
+                    <button class="btn btn-primary" type="button" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))">
+                        <em class="fa fa-chevron-left"></em>
+                    </button>
+                </div>
+            <?php } ?>
+                <div class="separate-action">
+                    <label>
+                        <input type="checkbox" name="copy_evaluation">
+                        <?php echo get_lang('ImportGradebookInCourse'); ?>
+                    </label>
+                </div>
+            <?php
+            echo '<div class="separate-action">';
+            if (isset($_GET['add'])) {
+                echo '<button class="btn btn-success" type="button" value="" onclick="valide()" >'.get_lang('NextStep').'</button>';
+            } else {
+                echo '<button class="btn btn-success" type="button" value="" onclick="valide()" >'.get_lang('SubscribeCoursesToSession').'</button>';
+            }
+            echo '</div>';
+            ?>
             </div>
-            <div class="col-md-4">
-                <label><?php echo get_lang('CourseListInSession') ?> :</label>
-                <select id='destination' name="SessionCoursesList[]" multiple="multiple" size="20" class="form-control">
+        </div>
+        <div class="col-md-4">
+            <label><?php echo get_lang('CourseListInSession') ?> :</label>
+            <select id='destination' name="SessionCoursesList[]" multiple="multiple" size="20" class="form-control">
 
-                    <?php
-                    foreach($sessionCourses as $enreg) {
-                        ?>
-                        <option value="<?php echo $enreg['id']; ?>" title="<?php echo htmlspecialchars($enreg['title'].' ('.$enreg['visual_code'].')',ENT_QUOTES); ?>">
-                            <?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?>
-                        </option>
-                    <?php
-                    }
-                    unset($sessionCourses);
+                <?php
+                foreach($sessionCourses as $enreg) {
                     ?>
-                </select>
-            </div>
-        </div>
-    </form>
-    <script>
-        function moveItem(origin , destination) {
-            for(var i = 0 ; i<origin.options.length ; i++) {
-                if(origin.options[i].selected) {
-                    destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
-                    origin.options[i]=null;
-                    i = i-1;
+                    <option value="<?php echo $enreg['id']; ?>" title="<?php echo htmlspecialchars($enreg['title'].' ('.$enreg['visual_code'].')',ENT_QUOTES); ?>">
+                        <?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?>
+                    </option>
+                <?php
                 }
+                unset($sessionCourses);
+                ?>
+            </select>
+        </div>
+    </div>
+</form>
+<script>
+    function moveItem(origin , destination) {
+        for(var i = 0 ; i<origin.options.length ; i++) {
+            if(origin.options[i].selected) {
+                destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
+                origin.options[i]=null;
+                i = i-1;
             }
-            destination.selectedIndex = -1;
-            sortOptions(destination.options);
         }
+        destination.selectedIndex = -1;
+        sortOptions(destination.options);
+    }
 
-        function sortOptions(options) {
-            newOptions = new Array();
-            for (i = 0 ; i<options.length ; i++) {
-                newOptions[i] = options[i];
-            }
+    function sortOptions(options) {
+        newOptions = new Array();
+        for (i = 0 ; i<options.length ; i++) {
+            newOptions[i] = options[i];
+        }
 
-            newOptions = newOptions.sort(mysort);
-            options.length = 0;
+        newOptions = newOptions.sort(mysort);
+        options.length = 0;
 
-            for(i = 0 ; i < newOptions.length ; i++){
-                options[i] = newOptions[i];
-            }
+        for(i = 0 ; i < newOptions.length ; i++){
+            options[i] = newOptions[i];
         }
+    }
 
-        function mysort(a, b) {
-            if(a.text.toLowerCase() > b.text.toLowerCase()){
-                return 1;
-            }
-            if(a.text.toLowerCase() < b.text.toLowerCase()){
-                return -1;
-            }
-            return 0;
+    function mysort(a, b) {
+        if(a.text.toLowerCase() > b.text.toLowerCase()){
+            return 1;
+        }
+        if(a.text.toLowerCase() < b.text.toLowerCase()){
+            return -1;
         }
+        return 0;
+    }
 
-        function valide() {
-            var options = document.getElementById('destination').options;
-            for (i = 0 ; i<options.length ; i++)
-                options[i].selected = true;
+    function valide() {
+        var options = document.getElementById('destination').options;
+        for (i = 0 ; i<options.length ; i++)
+            options[i].selected = true;
 
-            document.forms.formulaire.submit();
-        }
-    </script>
+        document.forms.formulaire.submit();
+    }
+</script>
 <?php
 Display::display_footer();