Fix queries when using multiple URL config see BT#15891

pull/2958/head
Julio Montoya 6 years ago
parent 9c2d6005c9
commit 1dacd354a3
  1. 2
      main/admin/access_url_edit_usergroup_to_url.php
  2. 2
      main/admin/usergroup_user_import.php
  3. 4
      main/inc/lib/formvalidator/FormValidator.class.php
  4. 2
      main/inc/lib/sessionmanager.lib.php
  5. 423
      main/inc/lib/usergroup.lib.php
  6. 6
      main/social/groups.php

@ -109,7 +109,7 @@ echo '</div>';
api_display_tool_title($tool_name);
$noUserGroupList = $userGroupList = [];
$ajax_search = $add_type == 'unique' ? true : false;
$ajax_search = $add_type === 'unique' ? true : false;
if ($ajax_search) {
$userGroups = UrlManager::get_url_rel_usergroup_data($access_url_id);

@ -83,7 +83,7 @@ function save_data($users_classes, $deleteUsersNotInList = false)
WHERE username = '".Database::escape_string(UserManager::purify_username($user_class['UserName'], $purification_option_for_usernames))."'";
$res1 = Database::query($sql1);
$obj1 = Database::fetch_object($res1);
$id = $usergroup->get_id_by_name($user_class['ClassName']);
$id = $usergroup->getIdByName($user_class['ClassName']);
if ($obj1 && $id) {
$csv_data[$id]['user_list'][] = $obj1->user_id;

@ -914,7 +914,9 @@ EOT;
*/
public function addHeader($text)
{
$this->addElement('header', $text);
if (!empty($text)) {
$this->addElement('header', $text);
}
}
/**

@ -9161,7 +9161,7 @@ SQL;
}
$usergroup->subscribe_sessions_to_usergroup(
$usergroup->get_id_by_name($className),
$usergroup->getIdByName($className),
[$sessionId],
$deleteClassSessions
);

@ -29,12 +29,20 @@ class UserGroup extends Model
public $useMultipleUrl = false;
public $groupType = 0;
public $showGroupTypeSetting = false;
public $usergroup_rel_user_table;
public $usergroup_rel_course_table;
public $usergroup_rel_session_table;
public $access_url_rel_usergroup;
public $access_url_rel_user;
public $table_course;
public $table_user;
/**
* Set ups DB tables.
*/
public function __construct()
{
parent::__construct();
$this->table = Database::get_main_table(TABLE_USERGROUP);
$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);
@ -62,7 +70,23 @@ class UserGroup extends Model
*/
public function getTotalCount()
{
$row = Database::select('count(*) as count', $this->table, [], 'first');
$options = [];
$from = $this->table;
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$options = [
'where' => [
'access_url_id = ?' => [
$urlId,
],
],
];
$from = " $this->table u
INNER JOIN $this->access_url_rel_usergroup a
ON (u.id = a.usergroup_id) ";
}
$row = Database::select('count(*) as count', $from, $options, 'first');
return $row['count'];
}
@ -77,22 +101,21 @@ class UserGroup extends Model
{
$id = (int) $id;
$select = ' u.* ';
if ($getCount) {
$select = 'COUNT(u.id) count ';
} else {
$select = ' u.* ';
}
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT $select
FROM ".$this->usergroup_rel_user_table." u
INNER JOIN ".$this->access_url_rel_user." a
FROM $this->usergroup_rel_user_table u
INNER JOIN $this->access_url_rel_user a
ON (u.user_id = a.user_id)
WHERE u.usergroup_id = $id AND access_url_id = $urlId ";
} else {
$sql = "SELECT $select
FROM ".$this->usergroup_rel_user_table." u
FROM $this->usergroup_rel_user_table u
WHERE u.usergroup_id = $id";
}
$result = Database::query($sql);
@ -171,6 +194,8 @@ class UserGroup extends Model
public function get_count($type = -1)
{
$authorCondition = '';
$type = (int) $type;
if ($this->allowTeachers()) {
if (!api_is_platform_admin()) {
$userId = api_get_user_id();
@ -178,10 +203,11 @@ class UserGroup extends Model
}
}
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT count(u.id) as count FROM ".$this->table." u
INNER JOIN ".$this->access_url_rel_usergroup." a
$sql = "SELECT count(u.id) as count
FROM $this->table u
INNER JOIN $this->access_url_rel_usergroup a
ON (u.id = a.usergroup_id)
WHERE access_url_id = $urlId $authorCondition
";
@ -197,10 +223,8 @@ class UserGroup extends Model
} else {
$typeCondition = '';
if ($type != -1) {
$type = (int) $type;
$typeCondition = " AND group_type = $type ";
}
$sql = "SELECT count(a.id) as count
FROM {$this->table} a
WHERE 1 =1
@ -224,7 +248,7 @@ class UserGroup extends Model
*/
public function getUserGroupByCourseWithDataCount($course_id, $type = -1)
{
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$course_id = (int) $course_id;
$urlId = api_get_current_access_url_id();
$sql = "SELECT count(c.usergroup_id) as count
@ -271,7 +295,7 @@ class UserGroup extends Model
*
* @return mixed
*/
public function get_id_by_name($name)
public function getIdByName($name)
{
$row = Database::select(
'id',
@ -350,7 +374,7 @@ class UserGroup extends Model
*/
public function get_courses_by_usergroup($id, $loadCourseData = false)
{
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$from = $this->usergroup_rel_course_table." c
INNER JOIN {$this->access_url_rel_usergroup} a
@ -360,30 +384,18 @@ class UserGroup extends Model
} else {
$whereConditionSql = 'usergroup_id = ?';
$whereConditionValues = [$id];
$from = $this->usergroup_rel_course_table." c ";
$from = $this->usergroup_rel_course_table.' c ';
}
if ($loadCourseData) {
$from .= " INNER JOIN {$this->table_course} as course ON c.course_id = course.id";
}
/*
if (!empty($conditionsLike)) {
$from .= " INNER JOIN {$this->table_course} as course ON c.course_id = course.id";
$conditionSql = [];
foreach ($conditionsLike as $field => $value) {
$conditionSql[] = $field.' LIKE %?%';
$whereConditionValues[] = $value;
}
$whereConditionSql .= ' AND '.implode(' AND ', $conditionSql);
}*/
$where = ['where' => [$whereConditionSql => $whereConditionValues]];
$select = 'course_id';
if ($loadCourseData) {
$select = 'course.*';
} else {
$select = 'course_id';
}
$results = Database::select(
@ -414,9 +426,10 @@ class UserGroup extends Model
*/
public function getUserGroupInCourse($options = [], $type = -1)
{
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT u.* FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
INNER JOIN {$this->table_course} c
ON (usergroup.course_id = c.id)
@ -448,7 +461,7 @@ class UserGroup extends Model
$sql .= $conditions;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql .= " AND access_url_id = $urlId ";
}
@ -457,7 +470,7 @@ class UserGroup extends Model
$limits = explode(',', $options['LIMIT']);
$limits = array_map('intval', $limits);
if (isset($limits[0]) && isset($limits[1])) {
$sql .= " LIMIT ".$limits[0].', '.$limits[1];
$sql .= ' LIMIT '.$limits[0].', '.$limits[1];
}
}
@ -491,8 +504,7 @@ class UserGroup extends Model
$typeCondition = " AND group_type = $type ";
}
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
if ($this->getUseMultipleUrl()) {
$sql = "SELECT DISTINCT u.*
FROM {$this->table} u
INNER JOIN {$this->access_url_rel_usergroup} a
@ -517,7 +529,8 @@ class UserGroup extends Model
$sql .= $conditions;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql .= " AND access_url_id = $urlId";
}
@ -525,7 +538,7 @@ class UserGroup extends Model
$limits = explode(',', $options['LIMIT']);
$limits = array_map('intval', $limits);
if (isset($limits[0]) && isset($limits[1])) {
$sql .= " LIMIT ".$limits[0].', '.$limits[1];
$sql .= ' LIMIT '.$limits[0].', '.$limits[1];
}
}
@ -537,12 +550,12 @@ class UserGroup extends Model
/**
* @param int $course_id
*
* @deprecated ?
* @return array
*/
public function get_usergroup_by_course($course_id)
{
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$options = [
'where' => [
@ -552,9 +565,9 @@ class UserGroup extends Model
],
],
];
$from = $this->usergroup_rel_course_table." as c
INNER JOIN ".$this->access_url_rel_usergroup." a
ON c.usergroup_id = a.usergroup_id";
$from = " $this->usergroup_rel_course_table as c
INNER JOIN $this->access_url_rel_usergroup a
ON c.usergroup_id = a.usergroup_id ";
} else {
$options = ['where' => ['c.course_id = ?' => $course_id]];
$from = $this->usergroup_rel_course_table." c";
@ -595,7 +608,7 @@ class UserGroup extends Model
/**
* Gets a list of session ids by user group.
*
* @param int $id user group id
* @param int $id group id
*
* @return array
*/
@ -638,9 +651,9 @@ class UserGroup extends Model
$relationConditionArray[] = " relation_type = $relation ";
}
}
$relationCondition = " AND ( ";
$relationCondition = ' AND ( ';
$relationCondition .= implode('OR', $relationConditionArray);
$relationCondition .= " ) ";
$relationCondition .= ' ) ';
}
if (empty($id)) {
@ -709,7 +722,7 @@ class UserGroup extends Model
public function getUserGroupListByUser($userId, $filterByType = null)
{
$userId = (int) $userId;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$from = $this->usergroup_rel_user_table." u
INNER JOIN {$this->access_url_rel_usergroup} a
@ -755,10 +768,11 @@ class UserGroup extends Model
public function get_usergroup_by_user($userId)
{
$userId = (int) $userId;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$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 = u.usergroup_id)";
INNER JOIN {$this->access_url_rel_usergroup} a
ON (a.usergroup_id = u.usergroup_id) ";
$where = ['where' => ['user_id = ? AND access_url_id = ? ' => [$userId, $urlId]]];
} else {
$from = $this->usergroup_rel_user_table.' u ';
@ -790,8 +804,8 @@ class UserGroup extends Model
*/
public function subscribe_sessions_to_usergroup($usergroup_id, $list, $deleteCurrentSessions = true)
{
$current_list = self::get_sessions_by_usergroup($usergroup_id);
$user_list = self::get_users_by_usergroup($usergroup_id);
$current_list = $this->get_sessions_by_usergroup($usergroup_id);
$user_list = $this->get_users_by_usergroup($usergroup_id);
$delete_items = $new_items = [];
if (!empty($list)) {
@ -853,8 +867,8 @@ class UserGroup extends Model
*/
public function subscribe_courses_to_usergroup($usergroup_id, $list, $delete_groups = true)
{
$current_list = self::get_courses_by_usergroup($usergroup_id);
$user_list = self::get_users_by_usergroup($usergroup_id);
$current_list = $this->get_courses_by_usergroup($usergroup_id);
$user_list = $this->get_users_by_usergroup($usergroup_id);
$delete_items = $new_items = [];
if (!empty($list)) {
@ -874,7 +888,7 @@ class UserGroup extends Model
}
if ($delete_groups) {
self::unsubscribe_courses_from_usergroup($usergroup_id, $delete_items);
$this->unsubscribe_courses_from_usergroup($usergroup_id, $delete_items);
}
// Adding new relationships
@ -911,7 +925,7 @@ class UserGroup extends Model
{
// Deleting items.
if (!empty($delete_items)) {
$user_list = self::get_users_by_usergroup($usergroup_id);
$user_list = $this->get_users_by_usergroup($usergroup_id);
foreach ($delete_items as $course_id) {
$course_info = api_get_course_info_by_id($course_id);
@ -953,9 +967,9 @@ class UserGroup extends Model
$delete_users_not_present_in_list = true,
$relationType = 0
) {
$current_list = self::get_users_by_usergroup($usergroup_id);
$course_list = self::get_courses_by_usergroup($usergroup_id);
$session_list = self::get_sessions_by_usergroup($usergroup_id);
$current_list = $this->get_users_by_usergroup($usergroup_id);
$course_list = $this->get_courses_by_usergroup($usergroup_id);
$session_list = $this->get_sessions_by_usergroup($usergroup_id);
$session_list = array_filter($session_list);
$relationType = (int) $relationType;
@ -1055,7 +1069,7 @@ class UserGroup extends Model
public function usergroup_exists($name)
{
$name = Database::escape_string($name);
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT * FROM $this->table u
INNER JOIN {$this->access_url_rel_usergroup} a
@ -1092,9 +1106,11 @@ class UserGroup extends Model
$start = (int) $start;
$limit = (int) $limit;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$from = $this->table." u INNER JOIN {$this->access_url_rel_usergroup} a ON (u.id = a.usergroup_id)";
$from = $this->table." u
INNER JOIN {$this->access_url_rel_usergroup} a
ON (u.id = a.usergroup_id)";
$where = [' access_url_id = ?' => $urlId];
} else {
$from = $this->table.' u ';
@ -1166,9 +1182,10 @@ class UserGroup extends Model
*/
public function getDataToExport($options = [])
{
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$from = $this->table." u INNER JOIN {$this->access_url_rel_usergroup} a
$from = $this->table." u
INNER JOIN {$this->access_url_rel_usergroup} a
ON (u.id = a.usergroup_id)";
$options = ['where' => ['access_url_id = ? ' => $urlId]];
if ($this->allowTeachers()) {
@ -1204,18 +1221,38 @@ class UserGroup extends Model
/**
* @param string $firstLetter
* @param int $limit
*
* @return array
*/
public function filterByFirstLetter($firstLetter)
public function filterByFirstLetter($firstLetter, $limit = 0)
{
$firstLetter = Database::escape_string($firstLetter);
$sql = "SELECT id, name FROM $this->table
$limit = (int) $limit;
$sql = ' SELECT g.id, name ';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql .= " FROM $this->table g
INNER JOIN $this->access_url_rel_usergroup a
ON (g.id = a.usergroup_id) ";
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql = " FROM $this->table g ";
}
$sql .= "
WHERE
name LIKE '".$firstLetter."%' OR
name LIKE '".api_strtolower($firstLetter)."%'
$urlCondition
ORDER BY name DESC ";
if (!empty($limit)) {
$sql .= " LIMIT $limit ";
}
$result = Database::query($sql);
return Database::store_result($result);
@ -1237,7 +1274,19 @@ class UserGroup extends Model
$list = array_map('intval', $list);
$listToString = implode("','", $list);
$sql = "SELECT * FROM {$this->table} WHERE id NOT IN ('$listToString')";
$sql = 'SELECT * ';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql .= " FROM $this->table g
INNER JOIN $this->access_url_rel_usergroup a
ON (g.id = a.usergroup_id)";
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql = " FROM $this->table g ";
}
$sql .= " WHERE g.id NOT IN ('$listToString') $urlCondition ";
$result = Database::query($sql);
return Database::store_result($result, 'ASSOC');
@ -1262,7 +1311,7 @@ class UserGroup extends Model
}
$id = parent::save($params, $show_query);
if ($id) {
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$this->subscribeToUrl($id, api_get_current_access_url_id());
}
@ -1343,13 +1392,13 @@ class UserGroup extends Model
}
/**
* @param $group_id
* @param int $groupId
*
* @return string
*/
public function delete_group_picture($group_id)
public function delete_group_picture($groupId)
{
return self::update_group_picture($group_id);
return $this->update_group_picture($groupId);
}
/**
@ -1371,7 +1420,6 @@ class UserGroup extends Model
*/
public function update_group_picture($group_id, $file = null, $source_file = null)
{
// Validation 1.
$group_id = (int) $group_id;
if (empty($group_id)) {
@ -1383,7 +1431,7 @@ class UserGroup extends Model
}
// User-reserved directory where photos have to be placed.
$path_info = self::get_group_picture_path_by_id($group_id, 'system', true);
$path_info = $this->get_group_picture_path_by_id($group_id, 'system', true);
$path = $path_info['dir'];
@ -1501,7 +1549,7 @@ class UserGroup extends Model
public function delete($id)
{
$id = (int) $id;
if ($this->useMultipleUrl) {
if ($this->getUseMultipleUrl()) {
$this->unsubscribeToUrl($id, api_get_current_access_url_id());
}
@ -1568,7 +1616,7 @@ class UserGroup extends Model
$charset = api_get_system_encoding();
$needle = api_convert_encoding($needle, $charset, 'utf-8');
$needle = Database::escape_string($needle);
// search courses where username or firstname or lastname begins likes $needle
$sql = 'SELECT id, name
FROM '.Database::get_main_table(TABLE_USERGROUP).' u
WHERE name LIKE "'.$needle.'%"
@ -1602,8 +1650,8 @@ class UserGroup extends Model
public function getUserListByUserGroup($id)
{
$id = (int) $id;
$sql = "SELECT u.* FROM ".$this->table_user." u
INNER JOIN ".$this->usergroup_rel_user_table." c
$sql = "SELECT u.* FROM $this->table_user u
INNER JOIN $this->usergroup_rel_user_table c
ON c.user_id = u.id
WHERE c.usergroup_id = $id"
;
@ -1619,6 +1667,7 @@ class UserGroup extends Model
*/
public function setForm($form, $type = 'add', $data = [])
{
$header = '';
switch ($type) {
case 'add':
$header = get_lang('Add');
@ -1628,9 +1677,9 @@ class UserGroup extends Model
break;
}
$form->addElement('header', $header);
$form->addHeader($header);
//Name
// Name
$form->addElement('text', 'name', get_lang('Name'), ['maxlength' => 255]);
$form->applyFilter('name', 'trim');
@ -1690,7 +1739,7 @@ class UserGroup extends Model
* @param string $id group id
* @param string picture group name
* @param string height
* @param string picture size it can be small_, medium_ or big_
* @param string $size_picture picture size it can be small_, medium_ or big_
* @param string style css
*
* @return array with the file and the style of an image i.e $array['file'] $array['style']
@ -1902,7 +1951,7 @@ class UserGroup extends Model
GROUP_USER_PERMISSION_READER,
GROUP_USER_PERMISSION_HRM,
];
$user_role = self::get_user_group_role($user_id, $group_id);
$user_role = $this->get_user_group_role($user_id, $group_id);
if (in_array($user_role, $roles)) {
return true;
} else {
@ -1924,11 +1973,15 @@ class UserGroup extends Model
{
$table_group_rel_user = $this->usergroup_rel_user_table;
$return_value = 0;
$user_id = (int) $user_id;
$group_id = (int) $group_id;
if (!empty($user_id) && !empty($group_id)) {
$sql = "SELECT relation_type FROM $table_group_rel_user
$sql = "SELECT relation_type
FROM $table_group_rel_user
WHERE
usergroup_id = ".intval($group_id)." AND
user_id = ".intval($user_id)." ";
usergroup_id = $group_id AND
user_id = $user_id ";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
@ -1947,7 +2000,7 @@ class UserGroup extends Model
*/
public function getUserRoleToString($userId, $groupId)
{
$role = self::get_user_group_role($userId, $groupId);
$role = $this->get_user_group_role($userId, $groupId);
$roleToString = '';
switch ($role) {
@ -1991,13 +2044,16 @@ class UserGroup extends Model
if (is_array($user_list) && is_array($group_list)) {
foreach ($group_list as $group_id) {
foreach ($user_list as $user_id) {
$role = self::get_user_group_role($user_id, $group_id);
$user_id = (int) $user_id;
$group_id = (int) $group_id;
$role = $this->get_user_group_role($user_id, $group_id);
if ($role == 0) {
$sql = "INSERT INTO $table_url_rel_group
SET
user_id = ".intval($user_id).",
usergroup_id = ".intval($group_id).",
relation_type = ".$relation_type;
user_id = $user_id ,
usergroup_id = $group_id ,
relation_type = $relation_type ";
$result = Database::query($sql);
if ($result) {
@ -2057,7 +2113,7 @@ class UserGroup extends Model
{
$table_url_rel_group = $this->usergroup_rel_user_table;
if (!empty($user_id) && !empty($group_id)) {
$role = self::get_user_group_role($user_id, $group_id);
$role = $this->get_user_group_role($user_id, $group_id);
if ($role == 0) {
$sql = "INSERT INTO $table_url_rel_group
@ -2087,11 +2143,12 @@ class UserGroup extends Model
public function update_user_role($user_id, $group_id, $relation_type = GROUP_USER_PERMISSION_READER)
{
$table_group_rel_user = $this->usergroup_rel_user_table;
$group_id = intval($group_id);
$user_id = intval($user_id);
$group_id = (int) $group_id;
$user_id = (int) $user_id;
$relation_type = (int) $relation_type;
$sql = "UPDATE $table_group_rel_user
SET relation_type = ".intval($relation_type)."
SET relation_type = $relation_type
WHERE user_id = $user_id AND usergroup_id = $group_id";
Database::query($sql);
}
@ -2122,27 +2179,40 @@ class UserGroup extends Model
}
}
$sql = "SELECT
$sql = 'SELECT
g.picture,
g.name,
g.description,
g.id ,
gu.relation_type
FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id
WHERE
gu.relation_type';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$sql .= " FROM $tbl_group g
INNER JOIN ".$this->access_url_rel_usergroup." a
ON (g.id = a.usergroup_id)
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
$urlId = api_get_current_access_url_id();
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql .= " FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
}
$sql .= " WHERE
g.group_type = ".self::SOCIAL_CLASS." AND
gu.user_id = $user_id
$relationCondition
$urlCondition
ORDER BY created_at DESC ";
$result = Database::query($sql);
$array = [];
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
if ($with_image) {
$picture = self::get_picture_group($row['id'], $row['picture'], 80);
$picture = $this->get_picture_group($row['id'], $row['picture'], 80);
$img = '<img src="'.$picture['file'].'" />';
$row['picture'] = $img;
}
@ -2168,15 +2238,34 @@ class UserGroup extends Model
if (empty($num)) {
$num = 6;
} else {
$num = intval($num);
$num = (int) $num;
}
// only show admins and readers
$where_relation_condition = " WHERE g.group_type = ".self::SOCIAL_CLASS." AND
gu.relation_type IN ('".GROUP_USER_PERMISSION_ADMIN."' , '".GROUP_USER_PERMISSION_READER."', '".GROUP_USER_PERMISSION_HRM."') ";
$sql = "SELECT DISTINCT count(user_id) as count, g.picture, g.name, g.description, g.id
FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id $where_relation_condition
$whereCondition = " WHERE
g.group_type = ".self::SOCIAL_CLASS." AND
gu.relation_type IN
('".GROUP_USER_PERMISSION_ADMIN."' , '".GROUP_USER_PERMISSION_READER."', '".GROUP_USER_PERMISSION_HRM."') ";
$sql = 'SELECT DISTINCT count(user_id) as count, g.picture, g.name, g.description, g.id ';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$sql .= " FROM $tbl_group g
INNER JOIN ".$this->access_url_rel_usergroup." a
ON (g.id = a.usergroup_id)
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
$urlId = api_get_current_access_url_id();
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql .= " FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
}
$sql .= "
$whereCondition
$urlCondition
GROUP BY g.id
ORDER BY count DESC
LIMIT $num";
@ -2185,7 +2274,7 @@ class UserGroup extends Model
$array = [];
while ($row = Database::fetch_array($result, 'ASSOC')) {
if ($with_image) {
$picture = self::get_picture_group($row['id'], $row['picture'], 80);
$picture = $this->get_picture_group($row['id'], $row['picture'], 80);
$img = '<img src="'.$picture['file'].'" />';
$row['picture'] = $img;
}
@ -2200,13 +2289,13 @@ class UserGroup extends Model
/** Gets the last groups created
* @param int $num quantity of records
* @param bool $with_image show groups with image or not
* @param bool $withImage show groups with image or not
*
* @return array with group content
*
* @author Julio Montoya
* */
public function get_groups_by_age($num = 6, $with_image = true)
public function get_groups_by_age($num = 6, $withImage = true)
{
$table_group_rel_user = $this->usergroup_rel_user_table;
$tbl_group = $this->table;
@ -2214,7 +2303,7 @@ class UserGroup extends Model
if (empty($num)) {
$num = 6;
} else {
$num = intval($num);
$num = (int) $num;
}
$where = " WHERE
@ -2225,16 +2314,30 @@ class UserGroup extends Model
'".GROUP_USER_PERMISSION_MODERATOR."',
'".GROUP_USER_PERMISSION_HRM."')
";
$sql = "SELECT DISTINCT
$sql = 'SELECT DISTINCT
count(user_id) as count,
g.picture,
g.name,
g.description,
g.id
FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id
g.id ';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$sql .= " FROM $tbl_group g
INNER JOIN ".$this->access_url_rel_usergroup." a
ON (g.id = a.usergroup_id)
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
$urlId = api_get_current_access_url_id();
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql .= " FROM $tbl_group g
INNER JOIN $table_group_rel_user gu
ON gu.usergroup_id = g.id";
}
$sql .= "
$where
$urlCondition
GROUP BY g.id
ORDER BY created_at DESC
LIMIT $num ";
@ -2242,8 +2345,8 @@ class UserGroup extends Model
$result = Database::query($sql);
$array = [];
while ($row = Database::fetch_array($result, 'ASSOC')) {
if ($with_image) {
$picture = self::get_picture_group($row['id'], $row['picture'], 80);
if ($withImage) {
$picture = $this->get_picture_group($row['id'], $row['picture'], 80);
$img = '<img src="'.$picture['file'].'" />';
$row['picture'] = $img;
}
@ -2270,7 +2373,7 @@ class UserGroup extends Model
*/
public function get_users_by_group(
$group_id,
$with_image = false,
$withImage = false,
$relation_type = [],
$from = null,
$limit = null,
@ -2278,7 +2381,7 @@ class UserGroup extends Model
) {
$table_group_rel_user = $this->usergroup_rel_user_table;
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$group_id = intval($group_id);
$group_id = (int) $group_id;
if (empty($group_id)) {
return [];
@ -2286,8 +2389,8 @@ class UserGroup extends Model
$limit_text = '';
if (isset($from) && isset($limit)) {
$from = intval($from);
$limit = intval($limit);
$from = (int) $from;
$limit = (int) $limit;
$limit_text = "LIMIT $from, $limit";
}
@ -2296,7 +2399,7 @@ class UserGroup extends Model
} else {
$new_relation_type = [];
foreach ($relation_type as $rel) {
$rel = intval($rel);
$rel = (int) $rel;
$new_relation_type[] = "'$rel'";
}
$relation_type = implode(',', $new_relation_type);
@ -2318,10 +2421,9 @@ class UserGroup extends Model
$result = Database::query($sql);
$array = [];
while ($row = Database::fetch_array($result, 'ASSOC')) {
if ($with_image) {
if ($withImage) {
$userInfo = api_get_user_info($row['id']);
$userPicture = UserManager::getUserPicture($row['id']);
$row['image'] = '<img src="'.$userPicture.'" />';
$row['user_info'] = $userInfo;
}
@ -2343,7 +2445,7 @@ class UserGroup extends Model
{
$table_group_rel_user = $this->usergroup_rel_user_table;
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$group_id = intval($group_id);
$group_id = (int) $group_id;
if (empty($group_id)) {
return [];
@ -2368,8 +2470,9 @@ class UserGroup extends Model
/**
* Shows the left column of the group page.
*
* @param int group id
* @param int user id
* @param int $group_id
* @param int $user_id
* @param string $show
*
* @return string
*/
@ -2379,7 +2482,7 @@ class UserGroup extends Model
$group_info = $this->get($group_id);
//my relation with the group is set here
$my_group_role = self::get_user_group_role($user_id, $group_id);
$my_group_role = $this->get_user_group_role($user_id, $group_id);
// Loading group permission
$links = '';
@ -2470,10 +2573,11 @@ class UserGroup extends Model
public function delete_topic($group_id, $topic_id)
{
$table_message = Database::get_main_table(TABLE_MESSAGE);
$topic_id = intval($topic_id);
$group_id = intval($group_id);
$topic_id = (int) $topic_id;
$group_id = (int) $group_id;
$sql = "UPDATE $table_message SET
msg_status = 3
msg_status = 3
WHERE
group_id = $group_id AND
(id = '$topic_id' OR parent_id = $topic_id)
@ -2486,6 +2590,8 @@ class UserGroup extends Model
* @param string $relation_type
* @param bool $with_image
*
* @deprecated
*
* @return int
*/
public function get_groups_by_user_count(
@ -2531,19 +2637,31 @@ class UserGroup extends Model
{
$group_table = $this->table;
$tag = Database::escape_string($tag);
$from = intval($from);
$number_of_items = intval($number_of_items);
$from = (int) $from;
$number_of_items = (int) $number_of_items;
$return = [];
$keyword = $tag;
$sql = "SELECT g.id, g.name, g.description, g.url, g.picture
FROM $group_table g";
$sql = 'SELECT g.id, g.name, g.description, g.url, g.picture ';
$urlCondition = '';
if ($this->getUseMultipleUrl()) {
$urlId = api_get_current_access_url_id();
$sql .= " FROM $this->table g
INNER JOIN $this->access_url_rel_usergroup a
ON (g.id = a.usergroup_id)";
$urlCondition = " AND access_url_id = $urlId ";
} else {
$sql .= " FROM $group_table g";
}
if (isset($keyword)) {
$sql .= " WHERE (
g.name LIKE '%".$keyword."%' OR
g.description LIKE '%".$keyword."%' OR
g.url LIKE '%".$keyword."%'
)";
) $urlCondition
";
} else {
$sql .= " WHERE 1 = 1 $urlCondition ";
}
$direction = 'ASC';
@ -2551,10 +2669,9 @@ class UserGroup extends Model
$direction = 'ASC';
}
$from = intval($from);
$number_of_items = intval($number_of_items);
$sql .= " LIMIT $from,$number_of_items";
$from = (int) $from;
$number_of_items = (int) $number_of_items;
$sql .= " LIMIT $from, $number_of_items";
$res = Database::query($sql);
if (Database::num_rows($res) > 0) {
@ -2579,10 +2696,9 @@ class UserGroup extends Model
$group_id = (int) $group_id;
$max_level = 10;
$select_part = "SELECT ";
$select_part = 'SELECT ';
$cond_part = '';
for ($i = 1; $i <= $max_level; $i++) {
$g_number = $i;
$rg_number = $i - 1;
if ($i == $max_level) {
$select_part .= "rg$rg_number.group_id as id_$rg_number ";
@ -2590,9 +2706,12 @@ class UserGroup extends Model
$select_part .= "rg$rg_number.group_id as id_$rg_number, ";
}
if ($i == 1) {
$cond_part .= "FROM $t_rel_group rg0 LEFT JOIN $t_rel_group rg$i on rg$rg_number.group_id = rg$i.subgroup_id ";
$cond_part .= "FROM $t_rel_group rg0
LEFT JOIN $t_rel_group rg$i
ON rg$rg_number.group_id = rg$i.subgroup_id ";
} else {
$cond_part .= " LEFT JOIN $t_rel_group rg$i on rg$rg_number.group_id = rg$i.subgroup_id ";
$cond_part .= " LEFT JOIN $t_rel_group rg$i
ON rg$rg_number.group_id = rg$i.subgroup_id ";
}
}
$sql = $select_part.' '.$cond_part."WHERE rg0.subgroup_id='$group_id'";
@ -2645,7 +2764,7 @@ class UserGroup extends Model
}
foreach ($groupsId as $groupId) {
$groupUsers = self::get_users_by_group($groupId);
$groupUsers = $this->get_users_by_group($groupId);
if (empty($groupUsers)) {
continue;
@ -2656,7 +2775,7 @@ class UserGroup extends Model
continue;
}
$userIdList[] = intval($member['user_id']);
$userIdList[] = (int) $member['user_id'];
}
}
@ -2680,17 +2799,18 @@ class UserGroup extends Model
$groupTable = Database::get_main_table(TABLE_USERGROUP);
$groupRelGroupTable = Database::get_main_table(TABLE_USERGROUP_REL_USERGROUP);
$select = "SELECT ";
$select = 'SELECT ';
$from = "FROM $groupTable g1 ";
for ($i = 1; $i <= $levels; $i++) {
$tableIndexNumber = $i;
$tableIndexJoinNumber = $i - 1;
$select .= "g$i.id as id_$i ";
$select .= ($i != $levels ? ", " : null);
$select .= $i != $levels ? ', ' : null;
if ($i == 1) {
$from .= "INNER JOIN $groupRelGroupTable gg0 ON g1.id = gg0.subgroup_id and gg0.group_id = $groupId ";
$from .= " INNER JOIN $groupRelGroupTable gg0
ON g1.id = gg0.subgroup_id and gg0.group_id = $groupId ";
} else {
$from .= "LEFT JOIN $groupRelGroupTable gg$tableIndexJoinNumber ";
$from .= " ON g$tableIndexJoinNumber.id = gg$tableIndexJoinNumber.group_id ";
@ -2724,8 +2844,8 @@ class UserGroup extends Model
public function setParentGroup($group_id, $parent_group_id, $relation_type = 1)
{
$table = Database::get_main_table(TABLE_USERGROUP_REL_USERGROUP);
$group_id = intval($group_id);
$parent_group_id = intval($parent_group_id);
$group_id = (int) $group_id;
$parent_group_id = (int) $parent_group_id;
if ($parent_group_id == 0) {
$sql = "DELETE FROM $table WHERE subgroup_id = $group_id";
} else {
@ -2780,7 +2900,6 @@ class UserGroup extends Model
}
$nameList = '<ul class="list-unstyled">';
foreach ($groupsNameListParsed as $name) {
$nameList .= '<li>'.Display::span($name, ['class' => 'label label-info']).'</li>';
}

@ -21,10 +21,10 @@ $allowed_views = ['mygroups', 'newest', 'pop'];
$content = null;
if (isset($_GET['view']) && in_array($_GET['view'], $allowed_views)) {
if ($_GET['view'] == 'mygroups') {
if ($_GET['view'] === 'mygroups') {
$interbreadcrumb[] = ['url' => 'groups.php', 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('MyGroups')];
} elseif ($_GET['view'] == 'newest') {
} elseif ($_GET['view'] === 'newest') {
$interbreadcrumb[] = ['url' => 'groups.php', 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Newest')];
} else {
@ -41,9 +41,7 @@ if (isset($_GET['view']) && in_array($_GET['view'], $allowed_views)) {
// getting group information
$relation_group_title = '';
$my_group_role = 0;
$usergroup = new UserGroup();
$create_thread_link = '';
$show_menu = 'browse_groups';

Loading…
Cancel
Save