supporters can view users_myshifts

This commit is contained in:
Xu 2024-04-22 10:55:47 +02:00 committed by Igor Scheller
parent c82e3183d6
commit 13ded8de49
2 changed files with 33 additions and 13 deletions

View File

@ -206,7 +206,7 @@ function user_controller()
} }
} }
$shifts = Shifts_by_user($user_source->id, auth()->can('user_shifts_admin')); $shifts = Shifts_by_user($user_source->id, true);
foreach ($shifts as $shift) { foreach ($shifts as $shift) {
// TODO: Move queries to model // TODO: Move queries to model
$shift->needed_angeltypes = Db::select( $shift->needed_angeltypes = Db::select(

View File

@ -314,6 +314,7 @@ function User_view_myshift(Shift $shift, $user_source, $its_me)
$goodie = GoodieType::from(config('goodie_type')); $goodie = GoodieType::from(config('goodie_type'));
$goodie_enabled = $goodie !== GoodieType::None; $goodie_enabled = $goodie !== GoodieType::None;
$goodie_tshirt = $goodie === GoodieType::Tshirt; $goodie_tshirt = $goodie === GoodieType::Tshirt;
$supporter = auth()->user()->isAngelTypeSupporter(AngelType::findOrFail($shift->angel_type_id));
$shift_info = '<a href="' . shift_link($shift) . '">' . htmlspecialchars($shift->shiftType->name) . '</a>'; $shift_info = '<a href="' . shift_link($shift) . '">' . htmlspecialchars($shift->shiftType->name) . '</a>';
if ($shift->title) { if ($shift->title) {
@ -358,7 +359,7 @@ function User_view_myshift(Shift $shift, $user_source, $its_me)
$myshift['duration'] = '<p class="text-danger"><s>' $myshift['duration'] = '<p class="text-danger"><s>'
. sprintf('%.2f', ($shift->end->timestamp - $shift->start->timestamp) / 3600) . '&nbsp;h' . sprintf('%.2f', ($shift->end->timestamp - $shift->start->timestamp) / 3600) . '&nbsp;h'
. '</s></p>'; . '</s></p>';
if (auth()->can('user_shifts_admin')) { if (auth()->can('user_shifts_admin') || $supporter) {
$myshift['comment'] .= '<br />' $myshift['comment'] .= '<br />'
. '<p class="text-danger">' . '<p class="text-danger">'
. __('Freeloaded') . ': ' . htmlspecialchars($shift->freeloaded_comment) . __('Freeloaded') . ': ' . htmlspecialchars($shift->freeloaded_comment)
@ -383,7 +384,7 @@ function User_view_myshift(Shift $shift, $user_source, $its_me)
$myshift['actions'] = [ $myshift['actions'] = [
button(shift_link($shift), icon('eye'), 'btn-sm btn-info', '', __('View')), button(shift_link($shift), icon('eye'), 'btn-sm btn-info', '', __('View')),
]; ];
if ($its_me || auth()->can('user_shifts_admin')) { if ($its_me || auth()->can('user_shifts_admin') || $supporter) {
$myshift['actions'][] = button( $myshift['actions'][] = button(
url('/user-myshifts', ['edit' => $shift->shift_entry_id, 'id' => $user_source->id]), url('/user-myshifts', ['edit' => $shift->shift_entry_id, 'id' => $user_source->id]),
icon('pencil'), icon('pencil'),
@ -432,10 +433,21 @@ function User_view_myshifts(
$goodie = GoodieType::from(config('goodie_type')); $goodie = GoodieType::from(config('goodie_type'));
$goodie_enabled = $goodie !== GoodieType::None; $goodie_enabled = $goodie !== GoodieType::None;
$goodie_tshirt = $goodie === GoodieType::Tshirt; $goodie_tshirt = $goodie === GoodieType::Tshirt;
$supported_angeltypes = auth()->user()
->userAngelTypes()
->where('supporter', true)
->pluck('angel_types.id');
$show_sum = true;
$myshifts_table = []; $myshifts_table = [];
$timeSum = 0; $timeSum = 0;
foreach ($shifts as $shift) { foreach ($shifts as $shift) {
$key = $shift->start->timestamp . '-shift-' . $shift->shift_entry_id . $shift->id; $key = $shift->start->timestamp . '-shift-' . $shift->shift_entry_id . $shift->id;
$supporter = $supported_angeltypes->contains($shift->angel_type_id);
if (!auth()->can('user_shifts_admin') && !$supporter && !$its_me) {
$show_sum = false;
continue;
}
$myshifts_table[$key] = User_view_myshift($shift, $user_source, $its_me); $myshifts_table[$key] = User_view_myshift($shift, $user_source, $its_me);
if (!$shift->freeloaded) { if (!$shift->freeloaded) {
$timeSum += ($shift->end->timestamp - $shift->start->timestamp); $timeSum += ($shift->end->timestamp - $shift->start->timestamp);
@ -466,6 +478,7 @@ function User_view_myshifts(
$shift['row-class'] = 'border-bottom border-info'; $shift['row-class'] = 'border-bottom border-info';
} }
} }
if ($show_sum) {
$myshifts_table[] = [ $myshifts_table[] = [
'date' => '<b>' . __('Sum:') . '</b>', 'date' => '<b>' . __('Sum:') . '</b>',
'duration' => '<b>' . sprintf('%.2f', round($timeSum / 3600, 2)) . '&nbsp;h</b>', 'duration' => '<b>' . sprintf('%.2f', round($timeSum / 3600, 2)) . '&nbsp;h</b>',
@ -475,6 +488,7 @@ function User_view_myshifts(
'comment' => '', 'comment' => '',
'actions' => '', 'actions' => '',
]; ];
}
if ($goodie_enabled && ($its_me || $goodie_admin || auth()->can('admin_user'))) { if ($goodie_enabled && ($its_me || $goodie_admin || auth()->can('admin_user'))) {
$myshifts_table[] = [ $myshifts_table[] = [
'date' => '<b>' . ($goodie_tshirt ? __('T-shirt score') : __('Goodie score')) . '&trade;:</b>', 'date' => '<b>' . ($goodie_tshirt ? __('T-shirt score') : __('Goodie score')) . '&trade;:</b>',
@ -578,7 +592,13 @@ function User_view(
$user_name = htmlspecialchars((string) $user_source->personalData->first_name) . ' ' $user_name = htmlspecialchars((string) $user_source->personalData->first_name) . ' '
. htmlspecialchars((string) $user_source->personalData->last_name); . htmlspecialchars((string) $user_source->personalData->last_name);
$myshifts_table = ''; $myshifts_table = '';
if ($its_me || $admin_user_privilege || $goodie_admin) { $user_angeltypes_supporter = false;
foreach ($user_source->userAngelTypes as $user_angeltype) {
$user_angeltypes_supporter = $user_angeltypes_supporter
|| $auth->user()->isAngelTypeSupporter($user_angeltype);
}
if ($its_me || $admin_user_privilege || $goodie_admin || $user_angeltypes_supporter) {
$my_shifts = User_view_myshifts( $my_shifts = User_view_myshifts(
$shifts, $shifts,
$user_source, $user_source,