feat(groups): user_groups lookup, admin assignment UI, public directory with DataTables
This commit is contained in:
54
application/model/GroupModel.php
Normal file
54
application/model/GroupModel.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
class GroupModel
|
||||
{
|
||||
public static function getAllGroups()
|
||||
{
|
||||
$database = DatabaseFactory::getFactory()->getConnection();
|
||||
$sql = "SELECT group_id, group_name FROM user_groups ORDER BY group_id";
|
||||
$query = $database->prepare($sql);
|
||||
$query->execute();
|
||||
return $query->fetchAll();
|
||||
}
|
||||
|
||||
public static function getGroupNameById($group_id)
|
||||
{
|
||||
$database = DatabaseFactory::getFactory()->getConnection();
|
||||
$sql = "SELECT group_name FROM user_groups WHERE group_id = :gid LIMIT 1";
|
||||
$query = $database->prepare($sql);
|
||||
$query->execute(array(':gid' => $group_id));
|
||||
$row = $query->fetch();
|
||||
return $row ? $row->group_name : null;
|
||||
}
|
||||
|
||||
public static function setUserGroup($userId, $groupId)
|
||||
{
|
||||
if (!is_numeric($userId) || !is_numeric($groupId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not allow changing own group via admin UI to prevent lockout
|
||||
if ((int)$userId === (int)Session::get('user_id')) {
|
||||
Session::add('feedback_negative', Text::get('FEEDBACK_ACCOUNT_CANT_DELETE_SUSPEND_OWN'));
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only allow groups that exist in lookup
|
||||
$database = DatabaseFactory::getFactory()->getConnection();
|
||||
$check = $database->prepare("SELECT 1 FROM user_groups WHERE group_id = :gid LIMIT 1");
|
||||
$check->execute([':gid' => $groupId]);
|
||||
if ($check->rowCount() !== 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$query = $database->prepare("UPDATE users SET user_account_type = :gid WHERE user_id = :uid LIMIT 1");
|
||||
$query->execute([':gid' => $groupId, ':uid' => $userId]);
|
||||
|
||||
if ($query->rowCount() === 1) {
|
||||
Session::add('feedback_positive', 'Benutzergruppe aktualisiert.');
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ class UserModel
|
||||
{
|
||||
$database = DatabaseFactory::getFactory()->getConnection();
|
||||
|
||||
$sql = "SELECT user_id, user_name, user_email, user_active, user_has_avatar, user_deleted FROM users";
|
||||
$sql = "SELECT user_id, user_name, user_email, user_active, user_has_avatar, user_deleted, user_account_type FROM users";
|
||||
$query = $database->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
@@ -39,11 +39,46 @@ class UserModel
|
||||
$all_users_profiles[$user->user_id]->user_active = $user->user_active;
|
||||
$all_users_profiles[$user->user_id]->user_deleted = $user->user_deleted;
|
||||
$all_users_profiles[$user->user_id]->user_avatar_link = (Config::get('USE_GRAVATAR') ? AvatarModel::getGravatarLinkByEmail($user->user_email) : AvatarModel::getPublicAvatarFilePathOfUser($user->user_has_avatar, $user->user_id));
|
||||
$all_users_profiles[$user->user_id]->user_account_type = $user->user_account_type;
|
||||
}
|
||||
|
||||
return $all_users_profiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets list of users including their group name via user_groups lookup.
|
||||
* @return array
|
||||
*/
|
||||
public static function getUsersWithGroups()
|
||||
{
|
||||
$database = DatabaseFactory::getFactory()->getConnection();
|
||||
|
||||
$sql = "SELECT u.user_id, u.user_name, u.user_email, u.user_active, u.user_has_avatar, u.user_deleted, u.user_account_type,
|
||||
g.group_name
|
||||
FROM users u
|
||||
LEFT JOIN user_groups g ON g.group_id = u.user_account_type";
|
||||
$query = $database->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$result = [];
|
||||
foreach ($query->fetchAll() as $user) {
|
||||
array_walk_recursive($user, 'Filter::XSSFilter');
|
||||
|
||||
$obj = new stdClass();
|
||||
$obj->user_id = $user->user_id;
|
||||
$obj->user_name = $user->user_name;
|
||||
$obj->user_email = $user->user_email;
|
||||
$obj->user_active = $user->user_active;
|
||||
$obj->user_deleted = $user->user_deleted;
|
||||
$obj->user_account_type = $user->user_account_type;
|
||||
$obj->group_name = $user->group_name;
|
||||
$obj->user_avatar_link = (Config::get('USE_GRAVATAR') ? AvatarModel::getGravatarLinkByEmail($user->user_email) : AvatarModel::getPublicAvatarFilePathOfUser($user->user_has_avatar, $user->user_id));
|
||||
|
||||
$result[] = $obj;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a user's profile data, according to the given $user_id
|
||||
* @param int $user_id The user's id
|
||||
|
||||
Reference in New Issue
Block a user