Session: List the classes registered in a session in the section groups -> classes + fix enrollment - refs BT#17984

pull/3651/head
carlos alvarado 5 years ago committed by GitHub
parent 6f7e4fc005
commit 7dca452277
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 27
      main/inc/ajax/model.ajax.php
  2. 277
      main/inc/lib/usergroup.lib.php
  3. 26
      main/user/class.php

@ -880,6 +880,7 @@ switch ($action) {
$course_id = api_get_course_int_id();
$options = [];
$options['course_id'] = $course_id;
$options['session_id'] = $_SESSION['id_session'];
switch ($type) {
case 'not_registered':
@ -887,13 +888,18 @@ switch ($action) {
if (!empty($keyword)) {
$options['where']['AND name like %?% '] = $keyword;
}
$count = $obj->getUserGroupNotInCourse($options, $groupFilter, true);
$count = $obj->getUserGroupNotInCourse(
$options,
$groupFilter,
true
);
break;
case 'registered':
$options['where'] = [' usergroup.course_id = ? ' => $course_id];
$count = $obj->getUserGroupInCourse(
$options,
$groupFilter,
true,
true
);
break;
@ -2353,12 +2359,19 @@ switch ($action) {
$columns = ['name', 'users', 'status', 'group_type', 'actions'];
$options['order'] = "name $sord";
$options['limit'] = "$start , $limit";
$options['session_id'] = $_SESSION['id_session'];
switch ($type) {
case 'not_registered':
$result = $obj->getUserGroupNotInCourse($options, $groupFilter);
$result = $obj->getUserGroupNotInCourse($options, $groupFilter);
break;
case 'registered':
$result = $obj->getUserGroupInCourse($options, $groupFilter);
$result = $obj->getUserGroupInCourse(
$options,
$groupFilter,
false,
true
);
break;
}
@ -2378,8 +2391,12 @@ switch ($action) {
);
}
if ($obj->usergroup_was_added_in_course($group['id'], $course_id)) {
$url = 'class.php?action=remove_class_from_course&id='.$group['id'].'&'.api_get_cidreq();
if ($obj->usergroup_was_added_in_course(
$group['id'],
$course_id,
$_SESSION['id_session']
)) {
$url = 'class.php?action=remove_class_from_course&id='.$group['id'].'&'.api_get_cidreq().'&id_session='.$_SESSION['id_session'];
$icon = Display::return_icon('delete.png', get_lang('Remove'));
} else {
$url = 'class.php?action=add_class_to_course&id='.$group['id'].'&'.api_get_cidreq().'&type=not_registered';

@ -29,8 +29,11 @@ class UserGroup extends Model
public $showGroupTypeSetting = false;
public $usergroup_rel_user_table;
public $usergroup_rel_course_table;
public $usergroup;
public $usergroup_rel_session_table;
public $session_table;
public $access_url_rel_usergroup;
public $session_rel_course_table;
public $access_url_rel_user;
public $table_course;
public $table_user;
@ -45,7 +48,10 @@ class UserGroup extends Model
$this->usergroup_rel_user_table = Database::get_main_table(TABLE_USERGROUP_REL_USER);
$this->usergroup_rel_course_table = Database::get_main_table(TABLE_USERGROUP_REL_COURSE);
$this->usergroup_rel_session_table = Database::get_main_table(TABLE_USERGROUP_REL_SESSION);
$this->session_table = Database::get_main_table(TABLE_MAIN_SESSION);
$this->usergroup_table = Database::get_main_table(TABLE_USERGROUP);
$this->access_url_rel_usergroup = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$this->session_rel_course_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$this->access_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$this->table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$this->table_user = Database::get_main_table(TABLE_MAIN_USER);
@ -436,20 +442,80 @@ class UserGroup extends Model
}
/**
* Gets all users that are part of a group or class.
*
* Example to obtain the number of registered:
* <code>
* <?php
*
* $options['where'] = [' usergroup.course_id = ? ' => $course_id];
* $obj = new UserGroup();
* $count = $obj->getUserGroupInCourse(
* $options,
* -1,
* true,
* true
* );
* echo "<pre>".var_export($count,true)."</pre>";
* ?>
* </code>
*
*
* Example to obtain the list of classes or groups registered:
* <code>
* <?php
*
* $options['where'] = [' usergroup.course_id = ? ' => $course_id];
* $obj = new UserGroup();
* $students = $obj->getUserGroupInCourse(
* $options,
* -1,
* false,
* true
* );
* echo "<pre>".var_export($students,true)."</pre>";
* ?>
* </code>
*
* @param array $options
* @param int $type 0 = classes / 1 = social groups
* @param bool $withClasses Return with clases
*
* @return array
*/
public function getUserGroupInCourse($options = [], $type = -1, $getCount = false)
{
public function getUserGroupInCourse(
$options = [],
$type = -1,
$getCount = false,
$withClasses = false
) {
$data = [];
$sqlClasses = '';
$whereClasess = '';
$resultClasess = null;
$counts = 0;
$select = 'DISTINCT u.*';
if ($getCount) {
$select = 'count(u.id) as count';
}
if (
$withClasses == true &&
isset($options['session_id']) &&
(int) $options['session_id'] != 0
) {
$sessionId = (int) $options['session_id'];
$courseId = (int) $options['course_id'];
unset($options['session_id']);
$whereClasess = " WHERE ur.session_id = $sessionId AND sc.c_id = $courseId ";
} else {
$withClasses = false;
}
if ($this->getUseMultipleUrl()) {
$sql = "SELECT $select
if ($withClasses != true) {
$sql = "SELECT $select
FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
@ -458,16 +524,37 @@ class UserGroup extends Model
INNER JOIN {$this->access_url_rel_usergroup} a
ON (a.usergroup_id = u.id)
";
} else {
$sqlClasses = "SELECT".
" $select ".
" FROM".
" {$this->usergroup_rel_session_table} ur".
" INNER JOIN {$this->usergroup_table} u ON u.id = ur.usergroup_id ".
" INNER JOIN `{$this->session_table}` s ON s.id = ur.session_id".
" INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id = u.id) ".
" INNER JOIN {$this->session_rel_course_table} sc ON s.id = sc.session_id ".
" $whereClasess ";
}
} else {
$sql = "SELECT $select
if ($withClasses != true) {
$sql = "SELECT $select
FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
INNER JOIN {$this->table_course} c
ON (usergroup.course_id = c.id)
";
} else {
$sqlClasses = "SELECT".
" $select ".
" FROM".
" {$this->usergroup_rel_session_table} ur".
" INNER JOIN {$this->usergroup_table} u ON u.id = ur.usergroup_id ".
" INNER JOIN `{$this->session_table}` s ON s.id = ur.session_id".
" INNER JOIN {$this->session_rel_course_table} sc ON s.id = sc.session_id ".
" $whereClasess ";
}
}
if (-1 != $type) {
$type = (int) $type;
$options['where']['AND group_type = ? '] = $type;
@ -479,29 +566,65 @@ class UserGroup extends Model
$conditions = Database::parse_conditions($options);
$sql .= $conditions;
$result = Database::query($sql);
if ($withClasses == true) {
$resultClasess = Database::query($sqlClasses);
} else {
$result = Database::query($sql);
}
if ($getCount) {
if (Database::num_rows($result)) {
$row = Database::fetch_array($result);
if (!empty($result)) {
if (Database::num_rows($result)) {
$row = Database::fetch_array($result);
$counts += $row['count'];
}
}
if (!empty($sqlClasses)) {
if (Database::num_rows($resultClasess)) {
$row = Database::fetch_array($resultClasess);
$counts += $row['count'];
}
}
return $row['count'];
return $counts;
}
if (!empty($result)) {
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$data[] = $row;
}
}
}
if (!empty($sqlClasses)) {
if (Database::num_rows($resultClasess) > 0) {
while ($row = Database::fetch_array($resultClasess, 'ASSOC')) {
$data[] = $row;
}
}
}
return Database::store_result($result, 'ASSOC');
return $data;
}
/**
* @param array $options
* @param int $type
* @param bool $getCount
* @param bool $withClasses
*
* @return array|bool
*/
public function getUserGroupNotInCourse($options = [], $type = -1, $getCount = false)
{
public function getUserGroupNotInCourse(
$options = [],
$type = -1,
$getCount = false,
$withClasses = false
) {
$data = [];
$sqlClasses = '';
$whereClasess = '';
$resultClasess = null;
$course_id = null;
if (isset($options['course_id'])) {
$course_id = (int) $options['course_id'];
@ -517,20 +640,56 @@ class UserGroup extends Model
$select = 'count(u.id) as count';
}
if (
$withClasses == true &&
isset($options['session_id']) &&
(int) $options['session_id'] != 0
) {
$sessionId = (int) $options['session_id'];
unset($options['session_id']);
$courseId = (int) $options['course_id'];
$whereClasess = " WHERE ur.session_id = $sessionId AND sc.c_id = $courseId";
} else {
$withClasses = false;
}
if ($this->getUseMultipleUrl()) {
$sql = "SELECT $select
if ($withClasses == false) {
$sql = "SELECT $select
FROM {$this->table} u
INNER JOIN {$this->access_url_rel_usergroup} a
ON (a.usergroup_id = u.id)
LEFT OUTER JOIN {$this->usergroup_rel_course_table} urc
ON (u.id = urc.usergroup_id AND course_id = $course_id)
";
} else {
$sqlClasses = " SELECT".
" $select".
" FROM".
" {$this->usergroup_rel_session_table} ur".
" LEFT OUTER JOIN {$this->usergroup_table} u ON u.id = ur.usergroup_id".
" INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id = u.id) ".
" INNER JOIN `{$this->session_table}` s ON s.id = ur.session_id".
" INNER JOIN {$this->session_rel_course_table} sc ON s.id = sc.session_id ".
" $whereClasess ";
}
} else {
$sql = "SELECT $select
if ($withClasses == false) {
$sql = "SELECT $select
FROM {$this->table} u
LEFT OUTER JOIN {$this->usergroup_rel_course_table} urc
ON (u.id = urc.usergroup_id AND course_id = $course_id)
";
} else {
$sqlClasses = " SELECT".
" $select".
" FROM".
" {$this->usergroup_rel_session_table} ur".
" LEFT OUTER JOIN {$this->usergroup_table} u ON u.id = ur.usergroup_id".
" INNER JOIN `{$this->session_table}` s ON s.id = ur.session_id".
" INNER JOIN {$this->session_rel_course_table} sc ON s.id = sc.session_id ".
" $whereClasess ";
}
}
if (-1 != $type) {
@ -553,16 +712,43 @@ class UserGroup extends Model
$sql .= $conditions;
if ($getCount) {
if ($withClasses == true) {
$resultClasess = Database::query($sqlClasses);
} else {
$result = Database::query($sql);
$array = Database::fetch_array($result, 'ASSOC');
}
if ($getCount) {
if (!empty($result)) {
$result = Database::query($sql);
$array = Database::fetch_array($result, 'ASSOC');
return $array['count'];
}
if (!empty($sqlClasses)) {
if (Database::num_rows($resultClasess)) {
$row = Database::fetch_array($resultClasess);
return $array['count'];
return $row['count'];
}
}
}
if (!empty($result)) {
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$data[] = $row;
}
}
}
if (!empty($sqlClasses)) {
if (Database::num_rows($resultClasess) > 0) {
while ($row = Database::fetch_array($resultClasess, 'ASSOC')) {
$data[] = $row;
}
}
}
$result = Database::query($sql);
$array = Database::store_result($result, 'ASSOC');
return $array;
return $data;
}
/**
@ -609,15 +795,29 @@ class UserGroup extends Model
*
* @return bool
*/
public function usergroup_was_added_in_course($usergroup_id, $course_id)
{
public function usergroup_was_added_in_course(
$usergroup_id,
$course_id,
$Session = 0
) {
$Session = (int) $Session;
$results = Database::select(
'usergroup_id',
$this->usergroup_rel_course_table,
['where' => ['course_id = ? AND usergroup_id = ?' => [$course_id, $usergroup_id]]]
);
if (empty($results)) {
$resultSession = Database::select(
'usergroup_id',
$this->usergroup_rel_session_table,
['where' => ['session_id = ? AND usergroup_id = ?' => [$Session, $usergroup_id]]]
);
if (empty($results) && $Session == 0) {
return false;
}
if ((empty($resultSession)) && $Session != 0) {
return false;
}
@ -940,12 +1140,13 @@ class UserGroup extends Model
* @param int $usergroup_id
* @param array $delete_items
*/
public function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items)
public function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items, $sessionId = 0)
{
$sessionId = (int) $sessionId;
// Deleting items.
if (!empty($delete_items)) {
$user_list = $this->get_users_by_usergroup($usergroup_id);
$groupId = isset($_GET['id']) ? (int) $_GET['id'] : 0;
foreach ($delete_items as $course_id) {
$course_info = api_get_course_info_by_id($course_id);
if ($course_info) {
@ -953,20 +1154,26 @@ class UserGroup extends Model
foreach ($user_list as $user_id) {
CourseManager::unsubscribe_user(
$user_id,
$course_info['code']
$course_info['code'],
$sessionId
);
}
}
Database::delete(
$this->usergroup_rel_course_table,
[
'usergroup_id = ? AND course_id = ?' => [
$usergroup_id,
$course_id,
],
]
);
$this->usergroup_rel_course_table,
[
'usergroup_id = ? AND course_id = ?' => [
$usergroup_id,
$course_id,
],
]
);
}
if ($sessionId != 0 && $groupId != 0) {
$this->subscribe_sessions_to_usergroup($groupId, [0]);
} else {
$s = $sessionId;
}
}
}

@ -81,7 +81,9 @@ if (api_is_allowed_to_edit()) {
switch ($action) {
case 'add_class_to_course':
$id = $_GET['id'];
if (!empty($id)) {
$idSession = (int) isset($_GET['id_session']) ? $_GET['id_session'] : 0;
if (!empty($id) and $idSession == 0) {
/* To suscribe Groups*/
$usergroup->subscribe_courses_to_usergroup(
$id,
[api_get_course_int_id()],
@ -90,16 +92,36 @@ if (api_is_allowed_to_edit()) {
Display::addFlash(Display::return_message(get_lang('Added')));
header('Location: class.php?'.api_get_cidreq().'&type=registered');
exit;
} elseif ($idSession != 0) {
/* To suscribe session*/
$usergroup->subscribe_sessions_to_usergroup($id, [$idSession]);
Display::addFlash(Display::return_message(get_lang('Added')));
header('Location: class.php?'.api_get_cidreq().'&type=registered');
exit;
}
break;
case 'remove_class_from_course':
$id = $_GET['id'];
$idSession = (int) isset($_GET['id_session']) ? $_GET['id_session'] : 0;
if (!empty($id)) {
$usergroup->unsubscribe_courses_from_usergroup(
$id,
[api_get_course_int_id()]
[api_get_course_int_id()],
$idSession
);
Display::addFlash(Display::return_message(get_lang('Deleted')));
/* Remove class */
$user_list = $usergroup->get_users_by_usergroup($id);
if (!empty($user_list)) {
foreach ($user_list as $user_id) {
SessionManager::unsubscribe_user_from_session($id, $user_id);
}
}
Database::delete(
$usergroup->usergroup_rel_session_table,
['usergroup_id = ? AND session_id = ?' => [$id, $idSession]]
);
/* Remove class */
}
break;
}

Loading…
Cancel
Save