278 lines
10 KiB
PHTML
278 lines
10 KiB
PHTML
|
|
<?php
|
||
|
|
|
||
|
|
use MintyPHP\Service\UserAvatarService;
|
||
|
|
use MintyPHP\I18n;
|
||
|
|
|
||
|
|
$values = $user ?? [];
|
||
|
|
$name = trim(($values['first_name'] ?? '') . ' ' . ($values['last_name'] ?? ''));
|
||
|
|
$displayName = $name !== '' ? $name : ($values['email'] ?? t('Address book'));
|
||
|
|
$email = trim((string) ($values['email'] ?? ''));
|
||
|
|
$phone = trim((string) ($values['phone'] ?? ''));
|
||
|
|
$mobile = trim((string) ($values['mobile'] ?? ''));
|
||
|
|
$shortDial = trim((string) ($values['short_dial'] ?? ''));
|
||
|
|
$address = trim((string) ($values['address'] ?? ''));
|
||
|
|
$postalCode = trim((string) ($values['postal_code'] ?? ''));
|
||
|
|
$city = trim((string) ($values['city'] ?? ''));
|
||
|
|
$region = trim((string) ($values['region'] ?? ''));
|
||
|
|
$country = trim((string) ($values['country'] ?? ''));
|
||
|
|
$profileDescription = trim((string) ($values['profile_description'] ?? ''));
|
||
|
|
$jobTitle = trim((string) ($values['job_title'] ?? ''));
|
||
|
|
$hireDate = trim((string) ($values['hire_date'] ?? ''));
|
||
|
|
$hireDateLabel = '';
|
||
|
|
if ($hireDate !== '') {
|
||
|
|
$format = (strpos((string) (I18n::$locale ?? ''), 'de') === 0) ? 'd.m.Y' : 'Y-m-d';
|
||
|
|
try {
|
||
|
|
$hireDateLabel = (new \DateTimeImmutable($hireDate))->format($format);
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
$hireDateLabel = $hireDate;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$avatarUuid = (string) ($values['uuid'] ?? '');
|
||
|
|
$hasAvatar = $avatarUuid !== '' && UserAvatarService::hasAvatar($avatarUuid);
|
||
|
|
|
||
|
|
$initials = '';
|
||
|
|
if ($displayName !== '') {
|
||
|
|
$parts = array_filter(array_map('trim', preg_split('/\s+/', $displayName) ?: []));
|
||
|
|
$chars = '';
|
||
|
|
foreach ($parts as $part) {
|
||
|
|
if (function_exists('mb_substr')) {
|
||
|
|
$chars .= mb_substr($part, 0, 1);
|
||
|
|
} else {
|
||
|
|
$chars .= substr($part, 0, 1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$initials = strtoupper($chars !== '' ? $chars : '?');
|
||
|
|
}
|
||
|
|
$tenantGroups = $values['tenant_groups'] ?? [];
|
||
|
|
$roleLabels = $values['role_labels'] ?? [];
|
||
|
|
$hasContact = ($email !== '' || $phone !== '' || $mobile !== '' || $shortDial !== '');
|
||
|
|
$hasAddress = ($address !== '' || $postalCode !== '' || $city !== '' || $region !== '' || $country !== '');
|
||
|
|
$hasOrganization = (!empty($tenantGroups) || !empty($roleLabels));
|
||
|
|
$aboutSummary = '';
|
||
|
|
if ($profileDescription !== '') {
|
||
|
|
foreach (preg_split('/\\r\\n|\\r|\\n/', $profileDescription) as $line) {
|
||
|
|
$line = trim((string) $line);
|
||
|
|
if ($line !== '') {
|
||
|
|
$aboutSummary = $line;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
?>
|
||
|
|
|
||
|
|
<div class="app-details-container">
|
||
|
|
<section>
|
||
|
|
<div class="app-breadcrumb">
|
||
|
|
<a href="address-book"><?php e(t('Address book')); ?></a><i
|
||
|
|
class="bi bi-chevron-right"></i><?php e($displayName); ?>
|
||
|
|
</div>
|
||
|
|
<!-- <div class="app-details-titlebar">
|
||
|
|
<h1>
|
||
|
|
<a href="address-book" title="<?php e(t('Back')); ?>"><i class="bi bi-arrow-left"></i></a>
|
||
|
|
<?php e(t('Address book')); ?>
|
||
|
|
</h1>
|
||
|
|
</div> -->
|
||
|
|
|
||
|
|
<div class="app-profile-card-container">
|
||
|
|
<div class="app-profile-card">
|
||
|
|
<div class="app-profile-banner"></div>
|
||
|
|
<div class="app-profile-header">
|
||
|
|
<div class="user-avatar-block avatar-round app-profile-avatar">
|
||
|
|
<?php if ($hasAvatar): ?>
|
||
|
|
<a data-fslightbox="address-book-avatar"
|
||
|
|
href="admin/users/avatar-file?uuid=<?php e($avatarUuid); ?>&size=256">
|
||
|
|
<img class="user-avatar-image" src="admin/users/avatar-file?uuid=<?php e($avatarUuid); ?>&size=160"
|
||
|
|
alt="">
|
||
|
|
</a>
|
||
|
|
<?php else: ?>
|
||
|
|
<span class="user-avatar-placeholder"><?php e($initials ?: '?'); ?></span>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
<div class="app-profile-meta">
|
||
|
|
<hgroup>
|
||
|
|
<h2><?php e($displayName); ?></h2>
|
||
|
|
<?php if ($jobTitle !== ''): ?>
|
||
|
|
<p><small><?php e($jobTitle); ?></small></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($email !== ''): ?>
|
||
|
|
<p>
|
||
|
|
<a href="mailto:<?php e($email); ?>">
|
||
|
|
<small><?php e($email); ?></small>
|
||
|
|
</a>
|
||
|
|
</p>
|
||
|
|
<?php endif; ?>
|
||
|
|
</hgroup>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="app-profile-body-container">
|
||
|
|
<div class="app-profile-body">
|
||
|
|
<div class="app-tabs" data-tabs data-tabs-param="tab" data-tabs-storage-key="address-book-profile">
|
||
|
|
<div class="app-tabs-nav">
|
||
|
|
<?php if ($hasContact): ?>
|
||
|
|
<button type="button" data-tab="contact" data-tab-default><small><?php e(t('Contact')); ?></small></button>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($hasAddress): ?>
|
||
|
|
<button type="button" data-tab="address"><small><?php e(t('Address')); ?></small></button>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($hasOrganization): ?>
|
||
|
|
<button type="button" data-tab="organization"><small><?php e(t('Organization')); ?></small></button>
|
||
|
|
<?php endif; ?>
|
||
|
|
<button type="button" data-tab="about"><small><?php e(t('About')); ?></small></button>
|
||
|
|
</div>
|
||
|
|
<?php if ($hasContact): ?>
|
||
|
|
<div data-tab-panel="contact">
|
||
|
|
<div class="grid">
|
||
|
|
<?php if ($email !== ''): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Email')); ?></small>
|
||
|
|
<p><a href="mailto:<?php e($email); ?>"><?php e($email); ?></a></p>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($phone !== ''): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Phone')); ?></small>
|
||
|
|
<p><a href="tel:<?php e($phone); ?>"><?php e($phone); ?></a></p>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
<div class="grid">
|
||
|
|
<?php if ($mobile !== ''): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Mobile')); ?></small>
|
||
|
|
<p><a href="tel:<?php e($mobile); ?>"><?php e($mobile); ?></a></p>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($shortDial !== ''): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Short dial')); ?></small>
|
||
|
|
<p><?php e($shortDial); ?></p>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($hasAddress): ?>
|
||
|
|
<div data-tab-panel="address">
|
||
|
|
<div>
|
||
|
|
<?php if ($address !== ''): ?>
|
||
|
|
<p><?php e($address); ?></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php $line2 = trim($postalCode . ' ' . $city); ?>
|
||
|
|
<?php if ($line2 !== ''): ?>
|
||
|
|
<p><?php e($line2); ?></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($region !== ''): ?>
|
||
|
|
<p><?php e($region); ?></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($country !== ''): ?>
|
||
|
|
<p><?php e($country); ?></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($hasOrganization): ?>
|
||
|
|
<div data-tab-panel="organization">
|
||
|
|
<?php if (!empty($tenantGroups)): ?>
|
||
|
|
<table class="app-profile-table">
|
||
|
|
<thead>
|
||
|
|
<tr>
|
||
|
|
<th><?php e(t('Tenant')); ?></th>
|
||
|
|
<th><?php e(t('Departments')); ?></th>
|
||
|
|
</tr>
|
||
|
|
</thead>
|
||
|
|
<tbody>
|
||
|
|
<?php foreach ($tenantGroups as $group): ?>
|
||
|
|
<?php
|
||
|
|
$departments = $group['departments'] ?? [];
|
||
|
|
$departments = is_array($departments) ? $departments : [];
|
||
|
|
?>
|
||
|
|
<tr>
|
||
|
|
<td>
|
||
|
|
<?php e($group['label'] ?? ''); ?>
|
||
|
|
<?php if (!empty($group['is_primary'])): ?>
|
||
|
|
<small>(<?php e(t('Primary tenant')); ?>)</small>
|
||
|
|
<?php endif; ?>
|
||
|
|
</td>
|
||
|
|
<td>
|
||
|
|
<?php if (!empty($departments)): ?>
|
||
|
|
<?php e(implode(', ', $departments)); ?>
|
||
|
|
<?php else: ?>
|
||
|
|
-
|
||
|
|
<?php endif; ?>
|
||
|
|
</td>
|
||
|
|
</tr>
|
||
|
|
<?php endforeach; ?>
|
||
|
|
</tbody>
|
||
|
|
</table>
|
||
|
|
<hr>
|
||
|
|
<?php elseif (!empty($roleLabels)): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Roles')); ?></small>
|
||
|
|
<p><?php e(implode(', ', $roleLabels)); ?></p>
|
||
|
|
</div>
|
||
|
|
<?php else: ?>
|
||
|
|
<p>-</p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if (!empty($roleLabels)): ?>
|
||
|
|
<table class="app-profile-table">
|
||
|
|
<thead>
|
||
|
|
<tr>
|
||
|
|
<th><?php e(t('Roles')); ?></th>
|
||
|
|
</tr>
|
||
|
|
</thead>
|
||
|
|
<tbody>
|
||
|
|
<tr>
|
||
|
|
<td><?php e(implode(', ', $roleLabels)); ?></td>
|
||
|
|
</tr>
|
||
|
|
</tbody>
|
||
|
|
</table>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<div data-tab-panel="about">
|
||
|
|
<?php if ($hireDateLabel !== ''): ?>
|
||
|
|
<div>
|
||
|
|
<small><?php e(t('Hire date')); ?></small>
|
||
|
|
<p><?php e($hireDateLabel); ?></p>
|
||
|
|
</div>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($profileDescription !== ''): ?>
|
||
|
|
<?php foreach (preg_split('/\\r\\n|\\r|\\n/', $profileDescription) as $line): ?>
|
||
|
|
<?php if (trim($line) !== ''): ?>
|
||
|
|
<p><?php e($line); ?></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php endforeach; ?>
|
||
|
|
<?php elseif ($hireDateLabel === ''): ?>
|
||
|
|
<p>-</p>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</section>
|
||
|
|
<aside id="app-details-aside-section">
|
||
|
|
<div class="app-details-aside-section">
|
||
|
|
<hgroup>
|
||
|
|
<h2><?php e(t('Contact')); ?></h2>
|
||
|
|
<p><?php e(t('Quick actions')); ?></p>
|
||
|
|
</hgroup>
|
||
|
|
<hr>
|
||
|
|
<?php if ($email !== ''): ?>
|
||
|
|
<p><a href="mailto:<?php e($email); ?>"><?php e(t('Send email')); ?></a></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($phone !== ''): ?>
|
||
|
|
<p><a href="tel:<?php e($phone); ?>"><?php e(t('Call phone')); ?></a></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if ($mobile !== ''): ?>
|
||
|
|
<p><a href="tel:<?php e($mobile); ?>"><?php e(t('Call mobile')); ?></a></p>
|
||
|
|
<?php endif; ?>
|
||
|
|
<?php if (!$hasContact): ?>
|
||
|
|
<p>-</p>
|
||
|
|
<?php endif; ?>
|
||
|
|
</div>
|
||
|
|
</aside>
|
||
|
|
</div>
|