Restyled the manage user listing.

This commit is contained in:
flash 2019-02-04 12:38:20 +01:00
parent 21c2fd9ffe
commit 2379d953ac
5 changed files with 185 additions and 20 deletions

View file

@ -0,0 +1,113 @@
.manage__user {
display: flex;
text-shadow: 0 1px 4px #000;
box-shadow: 0 1px 4px #000A;
margin-bottom: 4px;
&:last-child {
margin-bottom: 0;
}
&--deleted {
opacity: .5;
transition: opacity .2s;
&:hover,
&:focus,
&:focus-within {
opacity: .8;
}
}
&__background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--accent-colour);
}
&__container {
display: flex;
flex-wrap: wrap;
align-items: center;
background-color: var(--background-colour-translucent-9);
width: 100%;
height: 100%;
margin-left: 5px;
pointer-events: none;
transition: background-color .2s;
}
&:hover &__container,
&:focus &__container,
&:focus-within &__container {
background-color: var(--background-colour-translucent-8);
}
&__avatar {
width: 40px;
height: 40px;
margin: 10px;
flex: 0 0 auto;
overflow: hidden;
}
&__info {
display: inline-flex;
flex-direction: column;
flex: 1 1 auto;
}
&__name {
font-size: 1.4em;
line-height: 1.4em;
}
&__details {
font-size: .9em;
line-height: 1.3em;
display: inline-flex;
align-items: center;
}
&__detail {
border-radius: 10px;
background-color: var(--accent-colour);
box-shadow: 0 1px 4px #111;
padding: 3px 8px;
pointer-events: initial;
margin: 2px;
}
&__actions {
display: flex;
flex: 0 0 auto;
margin: 10px;
}
&__action {
width: 32px;
height: 32px;
line-height: 32px;
font-size: 1.5em;
border-radius: 2px;
margin: 5px;
margin-right: 0;
color: #fff;
cursor: pointer;
pointer-events: initial;
transition: background-color .2s;
text-align: center;
&:hover,
&:focus {
background-color: fade(#fff, 20%);
}
&:active {
background-color: fade(#fff, 10%);
}
}
}

View file

@ -0,0 +1,7 @@
.manage__users {
&__collection,
&__pagination {
padding: 5px;
}
}

View file

@ -132,6 +132,8 @@ html {
@import "classes/manage/blacklist";
@import "classes/manage/role";
@import "classes/manage/roles";
@import "classes/manage/user";
@import "classes/manage/users";
// Profile
@import "classes/profile/container";

View file

@ -35,10 +35,12 @@ switch ($_GET['v'] ?? null) {
$getManageUsers = db_prepare('
SELECT
u.`user_id`, u.`username`, u.`user_country`, r.`role_id`,
COALESCE(u.`user_title`, r.`role_title`, r.`role_name`) as `user_title`,
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`
FROM `msz_users` as u
LEFT JOIN `msz_roles` as r
u.`user_created`, u.`user_active`, u.`user_deleted`,
INET6_NTOA(u.`register_ip`) AS `register_ip`, INET6_NTOA(u.`last_ip`) AS `last_ip`,
COALESCE(u.`user_title`, r.`role_title`, r.`role_name`) AS `user_title`,
COALESCE(u.`user_colour`, r.`role_colour`) AS `user_colour`
FROM `msz_users` AS u
LEFT JOIN `msz_roles` AS r
ON u.`display_role` = r.`role_id`
ORDER BY `user_id`
LIMIT :offset, :take

View file

@ -1,21 +1,62 @@
{% extends 'manage/users/master.twig' %}
{% from 'macros.twig' import pagination %}
{% from 'user/macros.twig' import user_card %}
{% from 'macros.twig' import pagination, container_title %}
{% set users_pagination = pagination(manage_users_pagination, '/manage/users.php', null, {'v': 'listing'}) %}
{% block manage_content %}
<div class="userlist">
{% for user in manage_users %}
<div class="userlist__item">
{{ user_card(user, '?v=view&u=%d', '?v=role&r=%d', [
{
'href': '/profile.php?u=%d'|format(user.user_id),
'title': 'Profile',
'icon': 'fas fa-user',
}
]) }}
</div>
{% endfor %}
</div>
<div class="container manage__users">
{{ container_title('<i class="fas fa-users fa-fw"></i> Users') }}
{{ pagination(manage_users_pagination, '/manage/users.php', null, {'v': 'listing'}) }}
{% if users_pagination|trim|length > 0 %}
<div class="manage__users__pagination">
{{ users_pagination }}
</div>
{% endif %}
<div class="manage__users__collection">
{% for user in manage_users %}
<div class="manage__user{% if user.user_deleted is not null %} manage__user--deleted{% endif %}" style="{{ user.user_colour|html_colour('--accent-colour') }}">
<a href="{{ url('manage-user-edit', {'user': user.user_id}) }}" class="manage__user__background"></a>
<div class="manage__user__container">
<div class="avatar manage__user__avatar" style="background-image: url('{{ url('user-avatar', {'user': user.user_id}) }}')"></div>
<div class="manage__user__info">
<div class="manage__user__name">
{{ user.username }}
</div>
<div class="manage__user__details">
<div class="manage__user__detail">
<i class="fas fa-user-plus fa-fw"></i>
<time datetime="{{ user.user_created|date('c') }}" title="{{ user.user_created|date('r') }}">{{ user.user_created|time_diff }}</time> /
<span>{{ user.register_ip }}</span>
</div>
<div class="manage__user__detail">
<i class="fas fa-user-clock fa-fw"></i>
<time datetime="{{ user.user_active|date('c') }}" title="{{ user.user_active|date('r') }}">{{ user.user_active|time_diff }}</time> /
<span>{{ user.last_ip }}</span>
</div>
{% if user.user_deleted is not null %}
<div class="manage__user__detail">
<i class="fas fa-trash-alt fa-fw"></i>
<time datetime="{{ user.user_deleted|date('c') }}" title="{{ user.user_deleted|date('r') }}">{{ user.user_deleted|time_diff }}</time>
</div>
{% endif %}
</div>
</div>
<div class="manage__role__actions">
<a href="{{ url('user-profile', {'user': user.user_id}) }}" class="manage__user__action" title="Profile">
<i class="fas fa-user fa-fw"></i>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% if users_pagination|trim|length > 0 %}
<div class="manage__users__pagination">
{{ users_pagination }}
</div>
{% endif %}
</div>
{% endblock %}