engelsystem/includes/pages/admin_free.php

126 lines
4.0 KiB
PHP
Raw Normal View History

<?php
use Engelsystem\Database\DB;
use Engelsystem\Models\User\User;
2018-10-17 01:30:10 +02:00
use Illuminate\Database\Query\JoinClause;
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function admin_free_title()
{
return __('Free 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_free()
{
$request = request();
2017-01-02 15:43:36 +01:00
2017-01-03 14:12:17 +01:00
$search = '';
if ($request->has('search')) {
2017-01-02 03:57:23 +01:00
$search = strip_request_item('search');
}
2017-01-02 15:43:36 +01:00
$angel_types_source = DB::select('SELECT `id`, `name` FROM `AngelTypes` ORDER BY `name`');
2017-01-02 03:57:23 +01:00
$angel_types = [
'' => __('Alle')
2017-01-02 15:43:36 +01:00
];
2017-01-02 03:57:23 +01:00
foreach ($angel_types_source as $angel_type) {
$angel_types[$angel_type['id']] = $angel_type['name'];
}
2017-01-02 15:43:36 +01:00
2018-10-17 01:30:10 +02:00
$angelType = $request->input('angeltype', '');
2019-12-26 19:07:51 +01:00
$query = User::with('personalData')
2018-10-17 01:30:10 +02:00
->select('users.*')
->leftJoin('ShiftEntry', 'users.id', 'ShiftEntry.UID')
->leftJoin('users_state', 'users.id', 'users_state.user_id')
->leftJoin('Shifts', function ($join) {
/** @var JoinClause $join */
$join->on('ShiftEntry.SID', '=', 'Shifts.SID')
->where('Shifts.start', '<', time())
->where('Shifts.end', '>', time());
})
->where('users_state.arrived', '=', 1)
->whereNull('Shifts.SID')
->orderBy('users.name')
2018-10-17 01:30:10 +02:00
->groupBy('users.id');
if (!empty($angelType)) {
$query->join('UserAngelTypes', function ($join) use ($angelType) {
2018-10-17 01:30:10 +02:00
/** @var JoinClause $join */
$join->on('UserAngelTypes.user_id', '=', 'users.id')
->where('UserAngelTypes.angeltype_id', '=', $angelType);
});
$query->join('AngelTypes', 'UserAngelTypes.angeltype_id', 'AngelTypes.id')
->whereNotNull('UserAngelTypes.confirm_user_id')
->orWhere('AngelTypes.restricted', '=', '0');
2018-10-17 01:30:10 +02:00
}
2017-01-02 15:43:36 +01:00
2019-04-21 17:52:08 +02:00
if ($request->has('submit')) {
$users = $query->get();
} else {
$users = [];
}
2017-01-02 03:57:23 +01:00
$free_users_table = [];
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;
2019-12-26 19:07:51 +01:00
$index = join('', $usr->attributesToArray());
foreach ($tokens as $token) {
$token = trim($token);
if (!empty($token) && stristr($index, $token)) {
2017-01-02 03:57:23 +01:00
$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
2021-01-12 14:19:24 +01:00
$email = ($usr->contact->email ? $usr->contact->email : $usr->email);
2017-01-02 03:57:23 +01:00
$free_users_table[] = [
2019-12-26 19:07:51 +01:00
'name' => User_Nick_render($usr) . User_Pronoun_render($usr),
2017-01-02 15:43:36 +01:00
'shift_state' => User_shift_state_render($usr),
'last_shift' => User_last_shift_render($usr),
2021-01-12 14:19:24 +01:00
'dect' => sprintf('<a href="tel:%s">%1$s</a>', $usr->contact->dect),
'email' => $usr->settings->email_human
? sprintf('<a href="email:%s">%1$s</a>', $email)
: icon('eye-slash'),
2017-01-02 15:43:36 +01:00
'actions' =>
auth()->can('admin_user')
2021-07-23 01:52:19 +02:00
? button(page_link_to('admin_user', ['id' => $usr->id]), __('edit'), 'btn-sm')
2017-01-02 15:43:36 +01:00
: ''
];
2017-01-02 03:57:23 +01:00
}
return page_with_title(admin_free_title(), [
2017-01-02 15:43:36 +01:00
form([
2019-04-21 17:52:08 +02:00
div('row', [
div('col-md-12 form-inline', [
2020-05-01 16:29:28 +02:00
div('inline-form-spacing', [
form_text('search', __('Search'), $search),
form_select('angeltype', __('Angeltype'), $angel_types, $angelType),
form_submit('submit', __('Search'))
]),
2019-04-21 17:52:08 +02:00
]),
]),
2017-01-02 15:43:36 +01:00
]),
table([
'name' => __('Nick'),
'shift_state' => __('Next shift'),
'last_shift' => __('Last shift'),
'dect' => __('DECT'),
'email' => __('E-Mail'),
2017-01-02 15:43:36 +01:00
'actions' => ''
2019-04-21 17:52:08 +02:00
], $free_users_table),
2017-01-02 15:43:36 +01:00
]);
}