Browse Source

Add usergroup support see BT#5768

Julio Montoya 9 years ago
parent
commit
b39d0cf48a
2 changed files with 69 additions and 20 deletions
  1. 28 19
      main/group/member_settings.php
  2. 41 1
      main/inc/lib/usergroup.lib.php

+ 28 - 19
main/group/member_settings.php

@@ -11,8 +11,6 @@
  *	@todo course admin functionality to create groups based on who is in which course (or class).
  */
 
-/*	INIT SECTION */
-
 require_once '../inc/global.inc.php';
 $this_section = SECTION_COURSES;
 $current_course_tool  = TOOL_GROUP;
@@ -107,7 +105,10 @@ function check_group_members($value)
     if ($value['max_student'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
         return true;
     }
-    if (isset($value['max_student']) && isset($value['group_members']) && $value['max_student'] < count($value['group_members'])) {
+    if (isset($value['max_student']) &&
+        isset($value['group_members']) &&
+        $value['max_student'] < count($value['group_members'])
+    ) {
         return array('group_members' => get_lang('GroupTooMuchMembers'));
     }
 
@@ -130,26 +131,28 @@ $form->addElement('hidden', 'action');
 $form->addElement('hidden', 'max_student', $current_group['max_student']);
 $complete_user_list = GroupManager::fill_groups_list($current_group['id']);
 
+$orderUserListByOfficialCode = api_get_configuration_value('order_user_list_by_official_code');
 $possible_users = array();
+$userGroup = new UserGroup();
+
 if (!empty($complete_user_list)) {
     usort($complete_user_list, 'sort_users');
     foreach ($complete_user_list as $index => $user) {
         $officialCode = !empty($user['official_code']) ? ' - '.$user['official_code'] : null;
 
-        $name = api_get_person_name(
-                $user['firstname'],
-                $user['lastname']
-                ).' ('.$user['username'].')'.$officialCode;
+        $groups = $userGroup->getUserGroupListByUser($user['user_id']);
+        $groupNameListToString = '';
+        if (!empty($groups)) {
+            $groupNameList = array_column($groups, 'name');
+            $groupNameListToString = ' - ['.implode(', ', $groupNameList).']';
+        }
+
+        $name = api_get_person_name($user['firstname'], $user['lastname']).
+                ' ('.$user['username'].')'.$officialCode.$groupNameListToString;
 
-        global $_configuration;
-        if (isset($_configuration['order_user_list_by_official_code']) &&
-            $_configuration['order_user_list_by_official_code']
-        ) {
+        if ($orderUserListByOfficialCode) {
             $officialCode = !empty($user['official_code']) ? $user['official_code']." - " : '? - ';
-            $name = $officialCode." ".api_get_person_name(
-                $user['firstname'],
-                $user['lastname']
-            ).' ('.$user['username'].')';
+            $name = $officialCode." ".api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
         }
         $possible_users[$user['user_id']] = $name;
     }
@@ -181,14 +184,20 @@ if ($form->validate()) {
     $values = $form->exportValues();
 
     // Storing the users (we first remove all users and then add only those who were selected)
-    GroupManager :: unsubscribe_all_users($current_group['id']);
+    GroupManager:: unsubscribe_all_users($current_group['id']);
     if (isset ($_POST['group_members']) && count($_POST['group_members']) > 0) {
-        GroupManager :: subscribe_users($values['group_members'], $current_group['id']);
+        GroupManager:: subscribe_users(
+            $values['group_members'],
+            $current_group['id']
+        );
     }
 
     // Returning to the group area (note: this is inconsistent with the rest of chamilo)
     $cat = GroupManager :: get_category_from_group($current_group['id']);
-    if (isset($_POST['group_members']) && count($_POST['group_members']) > $max_member && $max_member != GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
+    if (isset($_POST['group_members']) &&
+        count($_POST['group_members']) > $max_member &&
+        $max_member != GroupManager::MEMBER_PER_GROUP_NO_LIMIT
+    ) {
         header('Location: group.php?'.api_get_cidreq(true, false).'&action=warning_message&msg='.get_lang('GroupTooMuchMembers'));
     } else {
         header('Location: group.php?'.api_get_cidreq(true, false).'&action=success_message&msg='.get_lang('GroupSettingsModified').'&category='.$cat['id']);
@@ -200,7 +209,7 @@ $action = isset($_GET['action']) ? $_GET['action'] : null;
 switch ($action) {
     case 'empty':
         if (api_is_allowed_to_edit(false, true)) {
-            GroupManager :: unsubscribe_all_users($group_id);
+            GroupManager:: unsubscribe_all_users($group_id);
             Display :: display_confirmation_message(get_lang('GroupEmptied'));
         }
         break;

+ 41 - 1
main/inc/lib/usergroup.lib.php

@@ -149,6 +149,7 @@ class UserGroup extends Model
      * Gets a list of course ids by user group
      * @param int $id user group id
      * @param array $loadCourseData
+     *
      * @return  array
      */
     public function get_courses_by_usergroup($id, $loadCourseData = false)
@@ -399,6 +400,45 @@ class UserGroup extends Model
         return $array;
     }
 
+    /**
+     * @param int $userId
+     *
+     * @return array
+     */
+    public function getUserGroupListByUser($userId)
+    {
+        if ($this->useMultipleUrl) {
+            $urlId = api_get_current_access_url_id();
+            $from = $this->usergroup_rel_user_table." u
+                INNER JOIN {$this->access_url_rel_usergroup} a
+                ON (a.usergroup_id AND u.usergroup_id)
+                INNER JOIN {$this->table} g
+                ON (u.usergroup_id = g.id)
+                ";
+            $where =  array('where' => array('user_id = ? AND access_url_id = ? ' => array($userId, $urlId)));
+        } else {
+            $from = $this->usergroup_rel_user_table." u
+                INNER JOIN {$this->table} g
+                ON (u.usergroup_id = g.id)
+                ";
+            $where =  array('where' => array('user_id = ?' => $userId));
+        }
+
+        $results = Database::select(
+            'g.*',
+            $from,
+            $where
+        );
+        $array = array();
+        if (!empty($results)) {
+            foreach ($results as $row) {
+                $array[] = $row;
+            }
+        }
+
+        return $array;
+    }
+
     /**
      * Gets the usergroup id list by user id
      * @param   int $userId user id
@@ -899,4 +939,4 @@ class UserGroup extends Model
     }
 
 }
-/* CREATE TABLE IF NOT EXISTS access_url_rel_usergroup (access_url_id int unsigned NOT NULL, usergroup_id int unsigned NOT NULL, PRIMARY KEY (access_url_id, usergroup_id));*/
+