misuzu/templates/user/macros.twig

341 lines
15 KiB
Twig

{% macro user_card(user) %}
{% from 'macros.twig' import avatar %}
<div class="usercard"{% if user.user_colour is defined %} style="{{ user.user_colour|html_colour('--accent-colour') }}"{% endif %}>
<div class="usercard__background"></div>
<a class="usercard__link" href="{{ url('user-profile', {'user': user.user_id}) }}" title="Visit {{ user.username }}'{{ user.username|last|lower == 's' ? '' : 's' }} profile"></a>
<div class="usercard__avatar">
{{ avatar(user.user_id, 50, user.username) }}
</div>
<div class="usercard__details">
<div class="usercard__details_inner">
<div class="usercard__details__username"{% if user.user_colour is defined %} style="{{ user.user_colour|html_colour }}"{% endif %}>
{{ user.username }}
</div>
{% if user.user_title is defined and user.user_title is not empty %}
<div class="usercard__details__title">
{{ user.user_title }}
</div>
{% endif %}
{% if user.user_country|default('XX') != 'XX' %}
<div class="usercard__details__country">
<div class="flag flag--{{ user.user_country|lower }}"></div>
<div class="usercard__details__country__name">
{{ user.user_country|country_name }}
</div>
</div>
{% endif %}
</div>
</div>
<div class="usercard__stats">
{% if user.user_count_topics|default(0) > 0 %}
<a class="usercard__stat" href="{{ url('user-profile-forum-topics', {'user': user.user_id}) }}">
<div class="usercard__stat__name">Topics</div>
<div class="usercard__stat__value">{{ user.user_count_topics|number_format }}</div>
</a>
{% endif %}
{% if user.user_count_posts|default(0) > 0 %}
<a class="usercard__stat" href="{{ url('user-profile-forum-posts', {'user': user.user_id}) }}">
<div class="usercard__stat__name">Posts</div>
<div class="usercard__stat__value">{{ user.user_count_posts|number_format }}</div>
</a>
{% endif %}
{% if user.user_active is defined and user.user_active is not null %}
<div class="usercard__stat usercard__stat--wide" title="{{ user.user_active|date('r') }}">
<div class="usercard__stat__name">Last seen</div>
<div class="usercard__stat__value"><time datetime="{{ user.user_active|date('c') }}">{{ user.user_active|time_format }}</time></div>
</div>
{% endif %}
{% if user.user_created is defined %}
<div class="usercard__stat usercard__stat--wide" title="{{ user.user_created|date('r') }}">
<div class="usercard__stat__name">Joined</div>
<div class="usercard__stat__value"><time datetime="{{ user.user_created|date('c') }}">{{ user.user_created|time_format }}</time></div>
</div>
{% endif %}
</div>
</div>
{% endmacro %}
{% macro user_session(session, is_current_session) %}
{% from '_layout/input.twig' import input_hidden, input_csrf, input_checkbox_raw %}
<div class="settings__session{% if is_current_session %} settings__session--current{% endif %}" id="session-{{ session.id }}">
<div class="settings__session__container">
<div class="settings__session__important">
<div class="flag flag--{{ session.country|lower }} settings__session__flag" title="{{ session.countryName }}">{{ session.country }}</div>
<div class="settings__session__description">
{{ session.clientInfo }}
</div>
<form class="settings__session__actions" method="post" action="{{ url('settings-sessions') }}">
{{ input_csrf() }}
{{ input_hidden('session[]', session.id) }}
<button class="settings__session__action" title="{{ is_current_session ? 'Logout' : 'End Session' }}">
{% if is_current_session %}
<i class="fas fa-sign-out-alt"></i>
{% else %}
<i class="fas fa-times-circle"></i>
{% endif %}
</button>
</form>
</div>
<div class="settings__session__details">
<div class="settings__session__detail">
<div class="settings__session__detail__title">
Created from IP
</div>
<div class="settings__session__detail__value">
{{ session.initialRemoteAddress }}
</div>
</div>
{% if session.hasLastRemoteAddress %}
<div class="settings__session__detail">
<div class="settings__session__detail__title">
Last used from IP
</div>
<div class="settings__session__detail__value">
{{ session.lastRemoteAddress }}
</div>
</div>
{% endif %}
<div class="settings__session__detail" title="{{ session.createdTime|date('r') }}">
<div class="settings__session__detail__title">
Created
</div>
<time class="settings__session__detail__value" datetime="{{ session.createdTime|date('c') }}">
{{ session.createdTime|time_format }}
</time>
</div>
<div class="settings__session__detail" title="{{ session.expiresTime|date('r') }}">
<div class="settings__session__detail__title">
Expires{% if not session.shouldBumpExpire %} (static){% endif %}
</div>
<time class="settings__session__detail__value" datetime="{{ session.expiresTime|date('c') }}">
{{ session.expiresTime|time_format }}
</time>
</div>
{% if session.hasActiveTime %}
<div class="settings__session__detail" title="{{ session.activeTime|date('r') }}">
<div class="settings__session__detail__title">
Last Active
</div>
<time class="settings__session__detail__value" datetime="{{ session.activeTime|date('c') }}">
{{ session.activeTime|time_format }}
</time>
</div>
{% endif %}
<div class="settings__session__detail">
<div class="settings__session__detail__title">
User Agent
</div>
<div class="settings__session__detail__value">
{{ session.userAgent is empty ? 'None' : session.userAgent }}
</div>
</div>
</div>
</div>
</div>
{% endmacro %}
{% macro user_login_attempt(attempt) %}
<div class="settings__login-attempt{% if not attempt.success %} settings__login-attempt--failed{% endif %}">
<div class="settings__login-attempt__container">
<div class="settings__login-attempt__important">
<div class="flag flag--{{ attempt.countryCode|lower }} settings__login-attempt__flag" title="{{ attempt.countryCode|country_name }}">{{ attempt.countryCode }}</div>
<div class="settings__login-attempt__description">
{{ attempt.clientInfo }}
</div>
</div>
<div class="settings__login-attempt__details">
<div class="settings__login-attempt__detail">
<div class="settings__login-attempt__detail__title">
IP Address
</div>
<div class="settings__login-attempt__detail__value">
{{ attempt.remoteAddressRaw }}
</div>
</div>
<div class="settings__login-attempt__detail">
<div class="settings__login-attempt__detail__title">
Succeeded
</div>
<div class="settings__login-attempt__detail__value">
{{ attempt.success ? 'Yes' : 'No' }}
</div>
</div>
<div class="settings__login-attempt__detail" title="{{ attempt.createdTime|date('r') }}">
<div class="settings__login-attempt__detail__title">
Attempted
</div>
<time class="settings__login-attempt__detail__value" datetime="{{ attempt.createdTime|date('c') }}">
{{ attempt.createdTime|time_format }}
</time>
</div>
<div class="settings__login-attempt__detail">
<div class="settings__login-attempt__detail__title">
User Agent
</div>
<div class="settings__login-attempt__detail__value">
{{ attempt.userAgentString }}
</div>
</div>
</div>
</div>
</div>
{% endmacro %}
{% macro user_account_log(data, users) %}
{% from 'macros.twig' import avatar %}
<div class="settings__account-log">
{% if data.hasUserId and users[data.userId] is defined %}
{% set user = users[data.userId] %}
<a href="{{ url('user-profile', {'user': user.id}) }}" class="settings__account-log__user" style="--user-colour: {{ user.colour }}">
<div class="settings__account-log__user__avatar">{{ avatar(user.id, 20, user.username) }}</div>
<div class="settings__account-log__user__name">{{ user.username }}</div>
</a>
{% endif %}
<div class="settings__account-log__container">
<div class="settings__account-log__important">
<div class="flag flag--{{ data.countryCode|lower }} settings__login-attempt__flag" title="{{ data.countryCode|country_name }}">{{ data.countryCode }}</div>
<div class="settings__login-attempt__description">
{{ data.formatted }}
</div>
</div>
<div class="settings__account-log__details">
<div class="settings__account-log__detail">
<div class="settings__account-log__detail__title">
IP Address
</div>
<div class="settings__account-log__detail__value">
{{ data.remoteAddress }}
</div>
</div>
<div class="settings__account-log__detail" title="{{ data.createdTime|date('r') }}">
<div class="settings__account-log__detail__title">
Date
</div>
<time class="settings__account-log__detail__value" datetime="{{ data.createdTime|date('c') }}">
{{ data.createdTime|time_format }}
</time>
</div>
</div>
</div>
</div>
{% endmacro %}
{% macro user_profile_warning(warning, show_private_note, show_user_info, delete_csrf) %}
{% from 'macros.twig' import avatar %}
{% if warning.isSilence %}
{% set warning_text = 'Silence' %}
{% set warning_class = 'silence' %}
{% elseif warning.isBan %}
{% set warning_text = 'Ban' %}
{% set warning_class = 'ban' %}
{% elseif warning.isWarning %}
{% set warning_text = 'Warning' %}
{% set warning_class = 'warning' %}
{% else %}
{% set warning_text = 'Note' %}
{% set warning_class = 'note' %}
{% endif %}
<div class="profile__warning profile__warning--{{ warning_class }}{% if show_user_info or delete_csrf %} profile__warning--extendo{% endif %}">
<div class="profile__warning__background"></div>
{% if show_user_info or delete_csrf %}
<div class="profile__warning__tools">
{% if show_user_info %}
<div class="profile__warning__user">
<div class="profile__warning__user__avatar">
{{ avatar(warning.user.id, 20, warning.user.username) }}
</div>
<a class="profile__warning__user__username" href="{{ url('user-profile', {'user': warning.user.id}) }}">
{{ warning.user.username }}
</a>
<div class="profile__warning__user__ip">
{{ warning.userRemoteAddress }}
</div>
</div>
<div class="profile__warning__user">
<div class="profile__warning__user__avatar">
{{ avatar(warning.issuer.id, 20, warning.issuer.username) }}
</div>
<a class="profile__warning__user__username" href="{{ url('user-profile', {'user': warning.issuer.id}) }}">
{{ warning.issuer.username }}
</a>
<div class="profile__warning__user__ip">
{{ warning.issuerRemoteAddress }}
</div>
</div>
{% endif %}
{% if delete_csrf %}
<div class="profile__warning__options">
<a href="{{ url('manage-users-warning-delete', {'warning': warning.id}) }}" class="profile__warning__option"><i class="far fa-trash-alt"></i> Delete</a>
</div>
{% endif %}
</div>
{% endif %}
<div class="profile__warning__content">
<div class="profile__warning__type">
{{ warning_text }}
</div>
<time datetime="{{ warning.createdTime|date('c') }}" title="{{ warning.createdTime|date('r') }}" class="profile__warning__created">
{{ warning.createdTime|time_format }}
</time>
{% if warning.isPermanent %}
<div class="profile__warning__duration">
<b>PERMANENT</b>
</div>
{% elseif warning.hasDuration %}
<div class="profile__warning__duration">
{{ warning.durationString }}
</div>
{% else %}
<div class="profile__warning__duration"></div>
{% endif %}
<div class="profile__warning__note">
{{ warning.publicNote }}
{% if show_private_note and warning.hasPrivateNote %}
<div class="profile__warning__private">
{{ warning.privateNote|nl2br }}
</div>
{% endif %}
</div>
</div>
</div>
{% endmacro %}