isNotEmpty()) { $first_news = $important_news->first(); $news = div('alert alert-warning text-center', [ '' . $first_news->title . '', ]); } if (count($free_shifts) > 0) { $shift_panels = [ '
', ]; foreach ($free_shifts as $i => $shift) { $shift_panels[] = public_dashboard_shift_render($shift); if ($i % 4 == 3) { $shift_panels[] = '
'; } } $shift_panels[] = '
'; $needed_angels = div('first', [ div('col-md-12', [ heading(__('Needed angels:')), ]), div('container-fluid', [ join($shift_panels), ]), ]); } $isFiltered = request()->get('filtered'); $filter = collect(session()->get('shifts-filter'))->only(['rooms', 'types'])->toArray(); return page([ div('wrapper', [ div('public-dashboard', [ div('first row', [ stats(__('Angels needed in the next 3 hrs'), $stats['needed-3-hours']), stats(__('Angels needed for nightshifts'), $stats['needed-night']), stats(__('Angels currently working'), $stats['angels-working'], 'default'), stats(__('Hours to be worked'), $stats['hours-to-work'], 'default'), ], 'statistics'), $news, $needed_angels, ], 'public-dashboard'), ]), div('first col-md-12 text-center', [buttons([ button( '#', icon('fullscreen') . __('Fullscreen'), '', 'dashboard-fullscreen' ), auth()->user() ? button( public_dashboard_link($isFiltered ? [] : ['filtered' => 1] + $filter), icon('filter') . ($isFiltered ? __('All') : __('Filtered')) ) : '', ])], 'fullscreen-button'), ]); } /** * Renders a single shift panel for a dashboard shift with needed angels * * @param array $shift * @return string */ function public_dashboard_shift_render($shift) { $panel_body = icon('clock-history') . $shift['start'] . ' - ' . $shift['end']; $panel_body .= ' (' . $shift['duration'] . ' h)'; $panel_body .= '
' . icon('list-task') . $shift['shifttype_name']; if (!empty($shift['title'])) { $panel_body .= ' (' . $shift['title'] . ')'; } $panel_body .= '
' . icon('pin-map-fill') . $shift['room_name']; foreach ($shift['needed_angels'] as $needed_angels) { $panel_body .= '
' . icon('person') . '' . $needed_angels['need'] . ' × ' . $needed_angels['angeltype_name'] . ''; } $type = 'bg-dark'; if (theme_type() == 'light') { $type = 'bg-light'; } return div('col-md-3 mb-3', [ div('dashboard-card card border-' . $shift['style'] . ' ' . $type, [ div('card-body', [ '', $panel_body, ]), ]), ]); }