]> git.ipfire.org Git - ipfire.org.git/blob - src/templates/users/show.html
40a5ae65fe586004ec2543b43ee0ab189f8b7450
[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
140 {# SIP Channels #}
141
142 {% if sip_channels %}
143 <section class="section">
144 <div class="container">
145 {% for channel in sip_channels %}
146 <div class="notification
147 {% if channel.is_ringing() %}is-warning
148 {% elif channel.is_connected() %}is-success
149 {% end %}">
150 <span class="icon-text">
151 <span class="icon">
152 <i class="fa-solid fa-phone-volume"></i>
153 </span>
154 <span>{{ channel }}</span>
155 </span>
156
157 {% if channel.duration %}
158 <span class="is-pulled-right">
159 {{ format_time(channel.duration) }}
160 </span>
161 {% end %}
162 </div>
163 {% end %}
164 </div>
165 </section>
166 {% end %}
167
168 <section class="section">
169 <div class="container">
170 <div class="columns">
171 {# Address #}
172 {% if account.address %}
173 <div class="column">
174 <h6 class="title is-6">{{ _("Address") }}</h6>
175
176 <address>
177 {{ account.name }}<br>
178 {% for line in account.address %}
179 {{ line }}<br>
180 {% end %}
181 </address>
182 </div>
183 {% end %}
184
185 {# Phone Numbers #}
186 {% if account.phone_number or account.fax_number %}
187 <div class="column">
188 <h6 class="title is-6">{{ _("Phone Numbers") }}</h6>
189
190 <ul>
191 {% if account.has_sip() %}
192 <li>
193 {% if sip_channels %}
194 <i class="fas fa-phone-volume has-text-warning fa-fw"></i>
195 {% elif account.sip_registrations %}
196 <i class="fas fa-phone-square has-text-success fa-fw"></i>
197 {% elif account.uses_sip_forwarding() %}
198 <i class="fas fa-phone-square has-text-warning fa-fw"></i>
199 {% else %}
200 <i class="fas fa-phone-square has-text-danger fa-fw"></i>
201 {% end %}
202
203 <a href="sip:{{ account.sip_url }}">{{ account.sip_id }}</a>
204 </li>
205 {% end %}
206
207 {% if account.phone_number %}
208 <li>
209 <i class="fas fa-phone fa-fw"></i>
210
211 <a href="tel:{{ format_phone_number_to_e164(account.phone_number) }}">
212 {{ format_phone_number(account.phone_number) }}
213 </a>
214 </li>
215 {% end %}
216
217 {% if account.fax_number %}
218 <li>
219 <i class="fas fa-fax fa-fw"></i>
220
221 <a href="fax:{{ format_phone_number_to_e164(account.fax_number) }}">
222 {{ format_phone_number(account.fax_number) }}
223 </a>
224 </li>
225 {% end %}
226 </ul>
227 </div>
228 {% end %}
229
230 {% if current_user.is_staff() %}
231 {% if account.groups %}
232 <div class="column is-half">
233 <h6 class="title is-6">{{ _("Groups") }}</h6>
234
235 <nav class="panel">
236 {% for g in account.groups %}
237 <a class="panel-block" href="/users/groups/{{ g.gid }}">
238 <span class="panel-icon">
239 <i class="fas fa-users" aria-hidden="true"></i>
240 </span>
241 {{ g }}
242 </a>
243 {% end %}
244 </nav>
245 </div>
246 {% end %}
247 {% end %}
248 </div>
249 </div>
250 </section>
251
252 <section class="section">
253 <div class="container">
254 <nav class="level">
255 <div class="level-item has-text-centered">
256 <div>
257 <p class="heading">{{ _("Joined") }}</p>
258 <p>
259 {{ locale.format_date(account.created_at, shorter=True) }}
260 </p>
261 </div>
262 </div>
263
264 <div class="level-item has-text-centered">
265 <div>
266 <p class="heading">{{ _("Last Modified") }}</p>
267 <p>
268 {{ locale.format_date(account.modified_at) }}
269 </p>
270 </div>
271 </div>
272
273 {% if account.last_successful_authentication %}
274 <div class="level-item has-text-centered">
275 <div>
276 <p class="heading">{{ _("Last Successful Authentication") }}</p>
277 <p>
278 {{ locale.format_date(account.last_successful_authentication) }}
279 </p>
280 </div>
281 </div>
282 {% end %}
283
284 {% if account.failed_login_count %}
285 <div class="level-item has-text-warning has-text-centered">
286 <div>
287 <p class="heading">{{ _("Failed Authentication Attempts") }}</p>
288 <p>{{ account.failed_login_count }}</p>
289 </div>
290 </div>
291
292 {% if account.last_failed_authentication %}
293 <div class="level-item has-text-warning has-text-centered">
294 <div>
295 <p class="heading">{{ _("Last Failed Authentication Attempt") }}</p>
296 <p>{{ locale.format_date(account.last_failed_authentication) }}</p>
297 </div>
298 </div>
299 {% end %}
300 {% end %}
301 </nav>
302 </div>
303 </section>
304 {% end %}
305 {% end block %}