engelsystem/includes/pages/admin_arrive.php

229 lines
7.8 KiB
PHP
Raw Normal View History

<?php
2015-07-12 14:45:58 +02:00
2018-10-09 21:47:31 +02:00
use Engelsystem\Models\User\User;
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function admin_arrive_title()
{
return __('Arrived angels');
2013-11-25 21:04:58 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function admin_arrive()
{
2017-01-03 14:12:17 +01:00
$msg = '';
$search = '';
$request = request();
if ($request->has('search')) {
2017-01-02 03:57:23 +01:00
$search = strip_request_item('search');
$search = trim($search);
}
2017-01-02 15:43:36 +01:00
2017-08-30 14:59:27 +02:00
if ($request->has('reset') && preg_match('/^\d+$/', $request->input('reset'))) {
$user_id = $request->input('reset');
2018-10-09 21:47:31 +02:00
$user_source = User::find($user_id);
if ($user_source) {
$user_source->state->arrived = false;
2018-10-14 00:26:05 +02:00
$user_source->state->arrival_date = null;
$user_source->state->save();
2017-01-03 14:12:17 +01:00
engelsystem_log('User set to not arrived: ' . User_Nick_render($user_source));
success(__('Reset done. Angel has not arrived.'));
2018-10-09 21:47:31 +02:00
redirect(user_link($user_source->id));
2017-01-02 03:57:23 +01:00
} else {
$msg = error(__('Angel not found.'), true);
2017-01-02 03:57:23 +01:00
}
2017-08-30 14:59:27 +02:00
} elseif ($request->has('arrived') && preg_match('/^\d+$/', $request->input('arrived'))) {
$user_id = $request->input('arrived');
2018-10-09 21:47:31 +02:00
$user_source = User::find($user_id);
if ($user_source) {
$user_source->state->arrived = true;
2018-10-14 00:26:05 +02:00
$user_source->state->arrival_date = new Carbon\Carbon();
$user_source->personalData->save();
2017-01-03 14:12:17 +01:00
engelsystem_log('User set has arrived: ' . User_Nick_render($user_source));
success(__('Angel has been marked as arrived.'));
2018-10-09 21:47:31 +02:00
redirect(user_link($user_source->id));
2017-01-02 03:57:23 +01:00
} else {
$msg = error(__('Angel not found.'), true);
2013-11-28 22:49:15 +01:00
}
2012-12-26 14:02:27 +01:00
}
2017-01-02 15:43:36 +01:00
/** @var User[] $users */
$users = User::query()->orderBy('name')->get();
2017-01-02 03:57:23 +01:00
$arrival_count_at_day = [];
$planned_arrival_count_at_day = [];
$planned_departure_count_at_day = [];
$users_matched = [];
2017-01-03 14:12:17 +01:00
if ($search == '') {
2017-01-02 03:57:23 +01:00
$tokens = [];
} else {
2017-01-03 14:12:17 +01:00
$tokens = explode(' ', $search);
}
2017-01-02 03:57:23 +01:00
foreach ($users as $usr) {
if (count($tokens) > 0) {
$match = false;
$index = join(' ', $usr->toArray());
2017-01-02 03:57:23 +01:00
foreach ($tokens as $t) {
if (stristr($index, trim($t))) {
$match = true;
break;
}
}
2017-01-02 15:43:36 +01:00
if (!$match) {
2017-01-02 03:57:23 +01:00
continue;
}
}
2017-01-02 15:43:36 +01:00
$usr->name = User_Nick_render($usr);
if ($usr->personalData->planned_departure_date) {
$usr['rendered_planned_departure_date'] = $usr->personalData->planned_departure_date->format('Y-m-d');
2017-01-02 03:57:23 +01:00
} else {
$usr['rendered_planned_departure_date'] = '-';
}
$usr['rendered_planned_arrival_date'] = $usr->personalData->planned_arrival_date->format('Y-m-d');
2018-10-14 00:26:05 +02:00
$usr['rendered_arrival_date'] = $usr->state->arrival_date ? $usr->state->arrival_date->format('Y-m-d') : '-';
$usr['arrived'] = $usr->state->arrived ? __('yes') : '';
$usr['actions'] = $usr->state->arrived == 1
2017-08-28 16:21:10 +02:00
? '<a href="' . page_link_to(
'admin_arrive',
['reset' => $usr->id, 'search' => $search]
) . '">' . __('reset') . '</a>'
2017-08-28 16:21:10 +02:00
: '<a href="' . page_link_to(
'admin_arrive',
['arrived' => $usr->id, 'search' => $search]
) . '">' . __('arrived') . '</a>';
2017-01-02 15:43:36 +01:00
2018-10-14 00:26:05 +02:00
if ($usr->state->arrival_date) {
$day = $usr->state->arrival_date->format('Y-m-d');
2017-01-02 15:43:36 +01:00
if (!isset($arrival_count_at_day[$day])) {
2017-01-02 03:57:23 +01:00
$arrival_count_at_day[$day] = 0;
}
2017-01-02 15:43:36 +01:00
$arrival_count_at_day[$day]++;
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
if ($usr->personalData->planned_arrival_date) {
$day = $usr->personalData->planned_arrival_date->format('Y-m-d');
2017-01-02 15:43:36 +01:00
if (!isset($planned_arrival_count_at_day[$day])) {
2017-01-02 03:57:23 +01:00
$planned_arrival_count_at_day[$day] = 0;
}
2017-01-02 15:43:36 +01:00
$planned_arrival_count_at_day[$day]++;
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
if ($usr->personalData->planned_departure_date && $usr->state->arrived) {
$day = $usr->personalData->planned_departure_date->format('Y-m-d');
2017-01-02 15:43:36 +01:00
if (!isset($planned_departure_count_at_day[$day])) {
2017-01-02 03:57:23 +01:00
$planned_departure_count_at_day[$day] = 0;
}
2017-01-02 15:43:36 +01:00
$planned_departure_count_at_day[$day]++;
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$users_matched[] = $usr;
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
ksort($arrival_count_at_day);
ksort($planned_arrival_count_at_day);
ksort($planned_departure_count_at_day);
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$arrival_at_day = [];
$arrival_sum = 0;
foreach ($arrival_count_at_day as $day => $count) {
$arrival_sum += $count;
$arrival_at_day[$day] = [
2017-01-02 15:43:36 +01:00
'day' => $day,
'count' => $count,
'sum' => $arrival_sum
];
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$planned_arrival_at_day = [];
$planned_arrival_sum = 0;
foreach ($planned_arrival_count_at_day as $day => $count) {
$planned_arrival_sum += $count;
$planned_arrival_at_day[$day] = [
2017-01-02 15:43:36 +01:00
'day' => $day,
'count' => $count,
'sum' => $planned_arrival_sum
];
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$planned_departure_at_day = [];
$planned_departure_sum = 0;
foreach ($planned_departure_count_at_day as $day => $count) {
$planned_departure_sum += $count;
$planned_departure_at_day[$day] = [
2017-01-02 15:43:36 +01:00
'day' => $day,
'count' => $count,
'sum' => $planned_departure_sum
];
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return page_with_title(admin_arrive_title(), [
2017-01-03 03:22:48 +01:00
$msg . msg(),
2017-01-02 15:43:36 +01:00
form([
form_text('search', __('Search'), $search),
form_submit('submit', __('Search'))
2017-01-02 15:43:36 +01:00
]),
table([
'nick' => __('Nickname'),
'rendered_planned_arrival_date' => __('Planned arrival'),
'arrived' => __('Arrived?'),
'rendered_arrival_date' => __('Arrival date'),
'rendered_planned_departure_date' => __('Planned departure'),
2017-01-03 14:12:17 +01:00
'actions' => ''
2017-01-02 15:43:36 +01:00
], $users_matched),
div('row', [
div('col-md-4', [
heading(__('Planned arrival statistics'), 2),
2017-01-02 15:43:36 +01:00
bargraph('planned_arrives', 'day', [
'count' => __('arrived'),
'sum' => __('arrived sum')
2017-01-02 15:43:36 +01:00
], [
'count' => '#090',
'sum' => '#888'
], $planned_arrival_at_day),
table([
'day' => __('Date'),
'count' => __('Count'),
'sum' => __('Sum')
2017-01-02 15:43:36 +01:00
], $planned_arrival_at_day)
]),
div('col-md-4', [
heading(__('Arrival statistics'), 2),
2017-01-02 15:43:36 +01:00
bargraph('arrives', 'day', [
'count' => __('arrived'),
'sum' => __('arrived sum')
2017-01-02 15:43:36 +01:00
], [
'count' => '#090',
'sum' => '#888'
], $arrival_at_day),
table([
'day' => __('Date'),
'count' => __('Count'),
'sum' => __('Sum')
2017-01-02 15:43:36 +01:00
], $arrival_at_day)
]),
div('col-md-4', [
heading(__('Planned departure statistics'), 2),
2017-01-02 15:43:36 +01:00
bargraph('planned_departures', 'day', [
'count' => __('arrived'),
'sum' => __('arrived sum')
2017-01-02 15:43:36 +01:00
], [
'count' => '#090',
'sum' => '#888'
], $planned_departure_at_day),
table([
'day' => __('Date'),
'count' => __('Count'),
'sum' => __('Sum')
2017-01-02 15:43:36 +01:00
], $planned_departure_at_day)
])
])
]);
}