You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

232 lines
7.7 KiB
PHP

<?php
use Engelsystem\Database\DB;
/**
* @return string
*/
function admin_arrive_title()
{
return _('Arrived angels');
}
/**
* @return string
*/
function admin_arrive()
{
$msg = '';
$search = '';
$request = request();
if ($request->has('search')) {
$search = strip_request_item('search');
$search = trim($search);
}
if ($request->has('reset') && preg_match('/^\d+$/', $request->input('reset'))) {
$user_id = $request->input('reset');
$user_source = User($user_id);
if (!empty($user_source)) {
DB::update('
UPDATE `User`
SET `Gekommen`=0, `arrival_date` = NULL
WHERE `UID`=?
LIMIT 1
', [$user_id]);
engelsystem_log('User set to not arrived: ' . User_Nick_render($user_source));
success(_('Reset done. Angel has not arrived.'));
redirect(user_link($user_source));
} else {
$msg = error(_('Angel not found.'), true);
}
} elseif ($request->has('arrived') && preg_match('/^\d+$/', $request->input('arrived'))) {
$user_id = $request->input('arrived');
$user_source = User($user_id);
if (!empty($user_source)) {
DB::update('
UPDATE `User`
SET `Gekommen`=1, `arrival_date`=?
WHERE `UID`=?
LIMIT 1
', [time(), $user_id]);
engelsystem_log('User set has arrived: ' . User_Nick_render($user_source));
success(_('Angel has been marked as arrived.'));
redirect(user_link($user_source));
} else {
$msg = error(_('Angel not found.'), true);
}
}
$users = DB::select('SELECT * FROM `User` ORDER BY `Nick`');
$arrival_count_at_day = [];
$planned_arrival_count_at_day = [];
$planned_departure_count_at_day = [];
$users_matched = [];
if ($search == '') {
$tokens = [];
} else {
$tokens = explode(' ', $search);
}
foreach ($users as $usr) {
if (count($tokens) > 0) {
$match = false;
$index = join(' ', $usr);
foreach ($tokens as $t) {
if (stristr($index, trim($t))) {
$match = true;
break;
}
}
if (!$match) {
continue;
}
}
$usr['nick'] = User_Nick_render($usr);
if (!is_null($usr['planned_departure_date'])) {
$usr['rendered_planned_departure_date'] = date('Y-m-d', $usr['planned_departure_date']);
} else {
$usr['rendered_planned_departure_date'] = '-';
}
$usr['rendered_planned_arrival_date'] = date('Y-m-d', $usr['planned_arrival_date']);
$usr['rendered_arrival_date'] = $usr['arrival_date'] > 0 ? date('Y-m-d', $usr['arrival_date']) : '-';
$usr['arrived'] = $usr['Gekommen'] == 1 ? _('yes') : '';
$usr['actions'] = $usr['Gekommen'] == 1
? '<a href="' . page_link_to(
'admin_arrive',
['reset' => $usr['UID'], 'search' => $search]
) . '">' . _('reset') . '</a>'
: '<a href="' . page_link_to(
'admin_arrive',
['arrived' => $usr['UID'], 'search' => $search]
) . '">' . _('arrived') . '</a>';
if ($usr['arrival_date'] > 0) {
$day = date('Y-m-d', $usr['arrival_date']);
if (!isset($arrival_count_at_day[$day])) {
$arrival_count_at_day[$day] = 0;
}
$arrival_count_at_day[$day]++;
}
if (!is_null($usr['planned_arrival_date'])) {
$day = date('Y-m-d', $usr['planned_arrival_date']);
if (!isset($planned_arrival_count_at_day[$day])) {
$planned_arrival_count_at_day[$day] = 0;
}
$planned_arrival_count_at_day[$day]++;
}
if (!is_null($usr['planned_departure_date']) && $usr['Gekommen'] == 1) {
$day = date('Y-m-d', $usr['planned_departure_date']);
if (!isset($planned_departure_count_at_day[$day])) {
$planned_departure_count_at_day[$day] = 0;
}
$planned_departure_count_at_day[$day]++;
}
$users_matched[] = $usr;
}
ksort($arrival_count_at_day);
ksort($planned_arrival_count_at_day);
ksort($planned_departure_count_at_day);
$arrival_at_day = [];
$arrival_sum = 0;
foreach ($arrival_count_at_day as $day => $count) {
$arrival_sum += $count;
$arrival_at_day[$day] = [
'day' => $day,
'count' => $count,
'sum' => $arrival_sum
];
}
$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] = [
'day' => $day,
'count' => $count,
'sum' => $planned_arrival_sum
];
}
$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] = [
'day' => $day,
'count' => $count,
'sum' => $planned_departure_sum
];
}
return page_with_title(admin_arrive_title(), [
$msg . msg(),
form([
form_text('search', _('Search'), $search),
form_submit('submit', _('Search'))
]),
table([
'nick' => _('Nickname'),
'rendered_planned_arrival_date' => _('Planned arrival'),
'arrived' => _('Arrived?'),
'rendered_arrival_date' => _('Arrival date'),
'rendered_planned_departure_date' => _('Planned departure'),
'actions' => ''
], $users_matched),
div('row', [
div('col-md-4', [
heading(_('Planned arrival statistics'), 2),
bargraph('planned_arrives', 'day', [
'count' => _('arrived'),
'sum' => _('arrived sum')
], [
'count' => '#090',
'sum' => '#888'
], $planned_arrival_at_day),
table([
'day' => _('Date'),
'count' => _('Count'),
'sum' => _('Sum')
], $planned_arrival_at_day)
]),
div('col-md-4', [
heading(_('Arrival statistics'), 2),
bargraph('arrives', 'day', [
'count' => _('arrived'),
'sum' => _('arrived sum')
], [
'count' => '#090',
'sum' => '#888'
], $arrival_at_day),
table([
'day' => _('Date'),
'count' => _('Count'),
'sum' => _('Sum')
], $arrival_at_day)
]),
div('col-md-4', [
heading(_('Planned departure statistics'), 2),
bargraph('planned_departures', 'day', [
'count' => _('arrived'),
'sum' => _('arrived sum')
], [
'count' => '#090',
'sum' => '#888'
], $planned_departure_at_day),
table([
'day' => _('Date'),
'count' => _('Count'),
'sum' => _('Sum')
], $planned_departure_at_day)
])
])
]);
}