+ * $course_id];
+ * $obj = new UserGroup();
+ * $students = $obj->getUserGroupInCourse(
+ * $options,
+ * -1,
+ * false,
+ * true
+ * );
+ * echo "".var_export($students,true)."
";
+ * ?>
+ *
+ *
* @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;
}
}
}
diff --git a/main/user/class.php b/main/user/class.php
index 4218760b11..45448783b0 100755
--- a/main/user/class.php
+++ b/main/user/class.php
@@ -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;
}