]> git.ipfire.org Git - ipfire.org.git/blob - src/templates/users/show.html
842f11ede93d310947dfc0d09528cdbc1c426a7c
[ipfire.org.git] / src / templates / users / show.html
1 {% extends "../base.html" %}
2
3 {% block title %}{{ account }}{% end block %}
4
5 {% block container %}
6 {% import phonenumbers %}
7
8 <section class="hero {% if account.is_lwl() %}is-lwl{% else %}is-dark{% end %}">
9 <div class="hero-body">
10 <div class="container">
11 <div class="columns is-vcentered">
12 <div class="column">
13 <nav class="breadcrumb is-medium" aria-label="breadcrumbs">
14 <ul>
15 <li>
16 <a href="/">
17 {{ _("Home") }}
18 </a>
19 </li>
20 <li>
21 <a href="/users">
22 {{ _("Users") }}
23 </a>
24 </li>
25 <li class="is-active">
26 <a href="#" aria-current="page">{{ account }}</a>
27 </li>
28 </ul>
29 </nav>
30
31 <h1 class="title is-1">{{ account }}</h1>
32 <h6 class="subtitle is-6">{{ account.uid }}</h6>
33
34 {# Description #}
35 {% if account.description %}
36 <div class="block">
37 <div class="content">
38 {% module Markdown(account.description) %}
39 </div>
40 </div>
41 {% end %}
42 </div>
43
44 <div class="column is-narrow is-hidden-mobile">
45 <figure class="image">
46 <img class="is-rounded" src="{{ account.avatar_url(192) }}">
47 </figure>
48 </div>
49 </div>
50 </div>
51 </div>
52 </section>
53
54 <section class="section">
55 <div class="container">
56 <div class="buttons">
57 <a class="button is-light" href="mailto:{{ account.email }}">
58 <span class="icon-text">
59 <span class="icon">
60 <i class="fas fa-envelope"></i>
61 </span>
62 <span>{{ account.email }}</span>
63 </span>
64 </a>
65
66 <a class="button is-light" href="https://community.ipfire.org/u/{{ account.uid }}">
67 <span class="icon-text">
68 <span class="icon">
69 <i class="fas fa-users"></i>
70 </span>
71 <span>{{ _("Community Profile") }}</span>
72 </span>
73 </a>
74
75 {% if account.has_shell() %}
76 <a class="button is-dark" href="/~{{ account.uid }}/">
77 <span class="icon-text">
78 <span class="icon">
79 <i class="fas fa-home"></i>
80 </span>
81 <span>{{ _("Home Directory") }}</span>
82 </span>
83 </a>
84 {% end %}
85
86 {% if account.can_be_managed_by(current_user) %}
87 {% if account.has_sip() %}
88 <a class="button is-success" href="/users/{{ account.uid }}/calls">
89 <span class="icon-text">
90 <span class="icon">
91 <i class="fas fa-phone"></i>
92 </span>
93 <span>{{ _("Calls") }}</span>
94 </span>
95 </a>
96 {% end %}
97
98 <a class="button is-light" href="/users/{{ account.uid }}/passwd">
99 {{ _("Change Password") }}
100 </a>
101
102 <a class="button is-warning" href="/users/{{ account.uid }}/edit">
103 {{ _("Edit") }}
104 </a>
105
106 <a class="button is-danger" href="/users/{{ account.uid }}/delete"
107 {% if not account.can_be_deleted_by(current_user) %}disabled{% end %}>
108 {{ _("Delete") }}
109 </a>
110 {% end %}
111 </div>
112
113 {% if account == current_user %}
114 {# Suggest adding a description #}
115 {% if not current_user.description %}
116 <div class="notification is-info">
117 <strong>{{ _("Tell Us About Yourself!") }}</strong>
118
119 {{ _("Add a couple of lines about yourself to your profile so that others get to know you better") }}
120
121 <a href="/users/{{ account.uid }}/edit#description">{{ _("Edit Profile") }}</a>
122 </div>
123
124 {# Suggest uploading an avatar if this user does not have one #}
125 {% elif not current_user.has_avatar() %}
126 <div class="notification is-info">
127 <strong>{{ _("Upload An Avatar!") }}</strong>
128
129 {{ _("A picture says more than a thousand words") }}
130
131 <a href="/users/{{ account.uid }}/edit#avatar">{{ _("Upload Avatar") }}</a>
132 </div>
133 {% end %}
134 {% end %}
135 </div>
136 </section>
137
138 {% if current_user == account or current_user.is_staff() %}
139 <section class="section">
140 <div class="container">
141 <div class="columns">
142 {# Address #}
143 {% if account.address %}
144 <div class="column">
145 <h6 class="title is-6">{{ _("Address") }}</h6>
146
147 <address>
148 {{ account.name }}<br>
149 {% for line in account.address %}
150 {{ line }}<br>
151 {% end %}
152 </address>
153 </div>
154 {% end %}
155
156 {# Phone Numbers #}
157 {% if account.phone_number or account.fax_number %}
158 <div class="column">
159 <h6 class="title is-6">{{ _("Phone Numbers") }}</h6>
160
161 <ul>
162 {% if account.has_sip() %}
163 <li>
164 {% if account.sip_channels %}
165 <i class="fas fa-phone-volume has-text-warning fa-fw"></i>
166 {% elif account.sip_registrations %}
167 <i class="fas fa-phone-square has-text-success fa-fw"></i>
168 {% elif account.uses_sip_forwarding() %}
169 <i class="fas fa-phone-square has-text-warning fa-fw"></i>
170 {% else %}
171 <i class="fas fa-phone-square has-text-danger fa-fw"></i>
172 {% end %}
173
174 <a href="sip:{{ account.sip_url }}">{{ account.sip_id }}</a>
175 </li>
176 {% end %}
177
178 {% if account.phone_number %}
179 <li>
180 <i class="fas fa-phone fa-fw"></i>
181
182 <a href="tel:{{ format_phone_number_to_e164(account.phone_number) }}">
183 {{ format_phone_number(account.phone_number) }}
184 </a>
185 </li>
186 {% end %}
187
188 {% if account.fax_number %}
189 <li>
190 <i class="fas fa-fax fa-fw"></i>
191
192 <a href="fax:{{ format_phone_number_to_e164(account.fax_number) }}">
193 {{ format_phone_number(account.fax_number) }}
194 </a>
195 </li>
196 {% end %}
197 </ul>
198 </div>
199 {% end %}
200
201 {% if current_user.is_staff() %}
202 {% if account.groups %}
203 <div class="column is-half">
204 <h6 class="title is-6">{{ _("Groups") }}</h6>
205
206 <nav class="panel">
207 {% for g in account.groups %}
208 <a class="panel-block" href="/users/groups/{{ g.gid }}">
209 <span class="panel-icon">
210 <i class="fas fa-users" aria-hidden="true"></i>
211 </span>
212 {{ g }}
213 </a>
214 {% end %}
215 </nav>
216 </div>
217 {% end %}
218 {% end %}
219 </div>
220 </div>
221 </section>
222
223 <section class="section">
224 <div class="container">
225 <nav class="level">
226 <div class="level-item has-text-centered">
227 <div>
228 <p class="heading">{{ _("Joined") }}</p>
229 <p>
230 {{ locale.format_date(account.created_at, shorter=True) }}
231 </p>
232 </div>
233 </div>
234
235 <div class="level-item has-text-centered">
236 <div>
237 <p class="heading">{{ _("Last Modified") }}</p>
238 <p>
239 {{ locale.format_date(account.modified_at) }}
240 </p>
241 </div>
242 </div>
243
244 {% if account.last_successful_authentication %}
245 <div class="level-item has-text-centered">
246 <div>
247 <p class="heading">{{ _("Last Successful Authentication") }}</p>
248 <p>
249 {{ locale.format_date(account.last_successful_authentication) }}
250 </p>
251 </div>
252 </div>
253 {% end %}
254
255 {% if account.failed_login_count %}
256 <div class="level-item has-text-warning has-text-centered">
257 <div>
258 <p class="heading">{{ _("Failed Authentication Attempts") }}</p>
259 <p>{{ account.failed_login_count }}</p>
260 </div>
261 </div>
262
263 {% if account.last_failed_authentication %}
264 <div class="level-item has-text-warning has-text-centered">
265 <div>
266 <p class="heading">{{ _("Last Failed Authentication Attempt") }}</p>
267 <p>{{ locale.format_date(account.last_failed_authentication) }}</p>
268 </div>
269 </div>
270 {% end %}
271 {% end %}
272 </nav>
273 </div>
274 </section>
275 {% end %}
276 {% end block %}