Browse Source

Fix teacher list when adding/editing course - refs BT#13165

The new list is according to Enroll Teachers page
Angel Fernando Quiroz Campos 7 years ago
parent
commit
910bc17127
3 changed files with 69 additions and 28 deletions
  1. 6 24
      main/admin/course_add.php
  2. 11 3
      main/admin/course_edit.php
  3. 52 1
      main/inc/ajax/user_manager.ajax.php

+ 6 - 24
main/admin/course_add.php

@@ -23,26 +23,6 @@ $em = Database::getManager();
 $courseCategoriesRepo = $em->getRepository('ChamiloCoreBundle:CourseCategory');
 // Get all possible teachers.
 $accessUrlId = api_get_current_access_url_id();
-$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname';
-$table_user = Database::get_main_table(TABLE_MAIN_USER);
-$sql = "SELECT user_id,lastname,firstname
-        FROM $table_user
-        WHERE status=1".$order_clause;
-// Filtering teachers when creating a course.
-if (api_is_multiple_url_enabled()) {
-    $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
-    $sql = "SELECT u.user_id,lastname,firstname
-            FROM $table_user as u
-            INNER JOIN $access_url_rel_user_table url_rel_user
-            ON (u.user_id=url_rel_user.user_id)
-            WHERE url_rel_user.access_url_id=".$accessUrlId." AND status=1".$order_clause;
-}
-
-$res = Database::query($sql);
-$teachers = array();
-while ($obj = Database::fetch_object($res)) {
-    $teachers[$obj->user_id] = api_get_person_name($obj->firstname, $obj->lastname);
-}
 
 // Build the form.
 $form = new FormValidator('update_course');
@@ -115,12 +95,14 @@ $form->addRule(
     CourseManager::MAX_COURSE_LENGTH_CODE
 );
 
-$form->addElement(
-    'select',
+$currentTeacher = api_get_user_entity(api_get_user_id());
+
+$form->addSelectAjax(
     'course_teachers',
     get_lang('CourseTeachers'),
-    $teachers,
+    [$currentTeacher->getId() => $currentTeacher->getCompleteNameWithUsername()],
     [
+        'url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=teacher_to_basis_course',
         'id' => 'course_teachers',
         'multiple' => 'multiple'
     ]
@@ -230,7 +212,7 @@ if (isset($default_course_visibility)) {
 }
 $values['subscribe'] = 1;
 $values['unsubscribe'] = 0;
-$values['course_teachers'] = array(api_get_user_id());
+$values['course_teachers'] = [$currentTeacher->getId()];
 
 $form->setDefaults($values);
 

+ 11 - 3
main/admin/course_edit.php

@@ -3,6 +3,7 @@
 
 use Chamilo\CoreBundle\Entity\Repository\CourseCategoryRepository;
 use Chamilo\CoreBundle\Entity\CourseCategory;
+use Chamilo\UserBundle\Entity\User;
 
 /**
  * @package chamilo.admin
@@ -178,12 +179,19 @@ if ($countCategories >= 100) {
     );
 }
 
+$courseTeacherNames = [];
 
-$form->addElement(
-    'advmultiselect',
+foreach ($course_teachers as $courseTeacherId) {
+    /** @var User $courseTeacher */
+    $courseTeacher = UserManager::getRepository()->find($courseTeacherId);
+    $courseTeacherNames[$courseTeacher->getUserId()] = $courseTeacher->getCompleteNameWithUsername();
+}
+
+$form->addSelectAjax(
     'course_teachers',
     get_lang('CourseTeachers'),
-    $allTeachers
+    $courseTeacherNames,
+    ['url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=teacher_to_basis_course', 'multiple' => 'multiple']
 );
 $courseInfo['course_teachers'] = $course_teachers;
 if (array_key_exists('add_teachers_to_sessions_courses', $courseInfo)) {

+ 52 - 1
main/inc/ajax/user_manager.ajax.php

@@ -1,7 +1,8 @@
 <?php
 /* For licensing terms, see /license.txt */
 use Doctrine\Common\Collections\Criteria,
-    Chamilo\UserBundle\Entity\User;
+    Chamilo\UserBundle\Entity\User,
+    Doctrine\ORM\Query\Expr\Join;
 
 /**
  * Responses to AJAX calls
@@ -214,6 +215,56 @@ switch ($action) {
             ];
         }
 
+        header('Content-Type: application/json');
+        echo json_encode(['items' => $items]);
+        break;
+    case 'teacher_to_basis_course':
+        api_block_anonymous_users(false);
+
+        $sortByFirstName = api_sort_by_first_name();
+        $urlId = api_get_current_access_url_id();
+
+        $qb = UserManager::getRepository()->createQueryBuilder('u');
+        $qb->where(
+            $qb->expr()->orX(
+                $qb->expr()->like('u.username', ':q'),
+                $qb->expr()->like('u.firstname', ':q'),
+                $qb->expr()->like('u.lastname', ':q')
+            )
+        );
+
+        if (api_is_multiple_url_enabled()) {
+            $qb
+                ->innerJoin('ChamiloCoreBundle:AccessUrlRelUser', 'uru', Join::WITH, 'u.userId = uru.userId')
+                ->andWhere('uru.accessUrlId = '.$urlId);
+        }
+
+        $qb
+            ->andWhere('u.status != '.DRH.' AND u.status != '.ANONYMOUS)
+            ->orderBy(
+                $sortByFirstName
+                    ? 'u.firstname, u.firstname'
+                    : 'u.firstname, u.lastname'
+            )
+            ->setParameter('q', '%'.$_REQUEST['q'].'%');
+
+        $users = $qb->getQuery()->getResult();
+
+        if (!$users) {
+            echo json_encode([]);
+            break;
+        }
+
+        $items = [];
+
+        /** @var User $user */
+        foreach ($users as $user) {
+            $items[] = [
+                'id' => $user->getId(),
+                'text' => $user->getCompleteNameWithUsername()
+            ];
+        }
+
         header('Content-Type: application/json');
         echo json_encode(['items' => $items]);
         break;