engelsystem/includes/model/ShiftEntry_model.php

263 lines
5.9 KiB
PHP
Raw Normal View History

2013-12-09 17:10:07 +01:00
<?php
use Engelsystem\Database\DB;
2018-10-09 21:47:31 +02:00
use Engelsystem\Models\User\User;
/**
* Returns an array with the attributes of shift entries.
* FIXME! Needs entity object.
2017-01-03 03:22:48 +01:00
*
* @return array
*/
2017-01-02 03:57:23 +01:00
function ShiftEntry_new()
{
return [
2017-01-02 15:43:36 +01:00
'id' => null,
'SID' => null,
'TID' => null,
'UID' => null,
'Comment' => null,
'freeloaded_comment' => null,
'freeloaded' => false
];
}
2014-09-28 15:01:02 +02:00
/**
* Counts all freeloaded shifts.
2017-01-03 03:22:48 +01:00
*
* @return int
2014-09-28 15:01:02 +02:00
*/
2017-12-25 23:12:52 +01:00
function ShiftEntries_freeloaded_count()
2017-01-02 03:57:23 +01:00
{
$result = DB::selectOne('SELECT COUNT(*) FROM `ShiftEntry` WHERE `freeloaded` = 1');
if (empty($result)) {
return 0;
}
return (int)array_shift($result);
2014-09-28 15:01:02 +02:00
}
2014-12-07 17:07:19 +01:00
/**
2017-12-25 23:12:52 +01:00
* List users subscribed to a given shift.
2017-01-03 03:22:48 +01:00
*
* @param int $shift_id
* @return array
2014-12-07 17:07:19 +01:00
*/
2017-01-02 03:57:23 +01:00
function ShiftEntries_by_shift($shift_id)
{
2017-01-21 19:37:42 +01:00
return DB::select('
SELECT
`User`.`Nick`,
`User`.`email`,
`User`.`email_shiftinfo`,
`User`.`Sprache`,
`User`.`Gekommen`,
`ShiftEntry`.`UID`,
`ShiftEntry`.`TID`,
`ShiftEntry`.`SID`,
`AngelTypes`.`name` AS `angel_type_name`,
`ShiftEntry`.`Comment`,
`ShiftEntry`.`freeloaded`
FROM `ShiftEntry`
JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID`
JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id`
2017-01-21 19:37:42 +01:00
WHERE `ShiftEntry`.`SID` = ?',
[$shift_id]
);
}
2014-12-07 16:45:09 +01:00
/**
* Create a new shift entry.
*
2017-01-03 03:22:48 +01:00
* @param array $shift_entry
* @return bool
2014-12-07 16:45:09 +01:00
*/
2017-01-02 03:57:23 +01:00
function ShiftEntry_create($shift_entry)
{
2018-10-09 21:47:31 +02:00
$user = User::find($shift_entry['UID']);
$shift = Shift($shift_entry['SID']);
$result = DB::insert('
INSERT INTO `ShiftEntry` (
`SID`,
`TID`,
`UID`,
`Comment`,
`freeload_comment`,
`freeloaded`
)
VALUES(?, ?, ?, ?, ?, ?)
',
[
$shift_entry['SID'],
$shift_entry['TID'],
$shift_entry['UID'],
$shift_entry['Comment'],
$shift_entry['freeload_comment'],
(int)$shift_entry['freeloaded'],
]
);
engelsystem_log(
'User ' . User_Nick_render($user)
. ' signed up for shift ' . $shift['name']
. ' from ' . date('Y-m-d H:i', $shift['start'])
. ' to ' . date('Y-m-d H:i', $shift['end'])
2017-12-25 23:12:52 +01:00
);
mail_shift_assign($user, $shift);
2017-12-25 23:12:52 +01:00
return $result;
2014-12-07 16:45:09 +01:00
}
2014-12-07 17:13:14 +01:00
/**
* Update a shift entry.
2017-01-03 03:22:48 +01:00
*
* @param array $shift_entry
2014-12-07 17:13:14 +01:00
*/
2017-01-02 03:57:23 +01:00
function ShiftEntry_update($shift_entry)
{
DB::update('
UPDATE `ShiftEntry`
SET
`Comment` = ?,
`freeload_comment` = ?,
`freeloaded` = ?
WHERE `id` = ?',
[
$shift_entry['Comment'],
$shift_entry['freeload_comment'],
(int)$shift_entry['freeloaded'],
$shift_entry['id']
]
);
2014-12-07 17:13:14 +01:00
}
2014-12-07 20:29:01 +01:00
/**
* Get a shift entry.
2017-01-03 03:22:48 +01:00
*
* @param int $shift_entry_id
2018-01-14 23:07:34 +01:00
* @return array|null
2014-12-07 20:29:01 +01:00
*/
2017-01-02 03:57:23 +01:00
function ShiftEntry($shift_entry_id)
{
2018-01-14 23:07:34 +01:00
$shiftEntry = DB::selectOne('SELECT * FROM `ShiftEntry` WHERE `id` = ?', [$shift_entry_id]);
return empty($shiftEntry) ? null : $shiftEntry;
2014-12-07 20:29:01 +01:00
}
2014-12-07 17:07:19 +01:00
/**
* Delete a shift entry.
2017-01-03 03:22:48 +01:00
*
* @param array $shiftEntry
2014-12-07 17:07:19 +01:00
*/
function ShiftEntry_delete($shiftEntry)
2017-01-02 03:57:23 +01:00
{
2017-12-19 22:24:06 +01:00
DB::delete('DELETE FROM `ShiftEntry` WHERE `id` = ?', [$shiftEntry['id']]);
2017-12-25 23:12:52 +01:00
2018-10-09 21:47:31 +02:00
$signout_user = User::find($shiftEntry['UID']);
$shift = Shift($shiftEntry['SID']);
$shifttype = ShiftType($shift['shifttype_id']);
$room = Room($shift['RID']);
$angeltype = AngelType($shiftEntry['TID']);
2017-12-25 23:12:52 +01:00
engelsystem_log(
2017-12-25 23:12:52 +01:00
'Shift signout: ' . User_Nick_render($signout_user) . ' from shift ' . $shifttype['name']
. ' at ' . $room['Name']
. ' from ' . date('Y-m-d H:i', $shift['start'])
. ' to ' . date('Y-m-d H:i', $shift['end'])
. ' as ' . $angeltype['name']
2017-12-25 23:12:52 +01:00
);
mail_shift_removed(User::find($shiftEntry['UID']), Shift($shiftEntry['SID']));
2014-12-07 17:07:19 +01:00
}
2014-08-23 01:55:18 +02:00
/**
* Returns next (or current) shifts of given user.
2014-12-07 16:45:09 +01:00
*
2018-10-09 21:47:31 +02:00
* @param int $userId
* @return array
2014-08-23 01:55:18 +02:00
*/
2018-10-09 21:47:31 +02:00
function ShiftEntries_upcoming_for_user($userId)
2017-01-02 03:57:23 +01:00
{
return DB::select('
SELECT *
FROM `ShiftEntry`
JOIN `Shifts` ON (`Shifts`.`SID` = `ShiftEntry`.`SID`)
JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id`
WHERE `ShiftEntry`.`UID` = ?
AND `Shifts`.`end` > ?
ORDER BY `Shifts`.`end`
',
[
2018-10-09 21:47:31 +02:00
$userId,
time(),
]
);
2014-08-23 01:55:18 +02:00
}
/**
* Returns shifts completed by the given user.
*
2018-10-09 21:47:31 +02:00
* @param int $userId
* @return array
*/
2018-10-09 21:47:31 +02:00
function ShiftEntries_finished_by_user($userId)
2017-01-02 03:57:23 +01:00
{
return DB::select('
SELECT *
FROM `ShiftEntry`
JOIN `Shifts` ON (`Shifts`.`SID` = `ShiftEntry`.`SID`)
JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id`
WHERE `ShiftEntry`.`UID` = ?
AND `Shifts`.`end` < ?
AND `ShiftEntry`.`freeloaded` = 0
ORDER BY `Shifts`.`end`
',
[
2018-10-09 21:47:31 +02:00
$userId,
time(),
]
);
}
2013-12-09 17:10:07 +01:00
/**
* Returns all shift entries in given shift for given angeltype.
2014-08-23 01:55:18 +02:00
*
2017-01-02 03:57:23 +01:00
* @param int $shift_id
* @param int $angeltype_id
* @return array
2013-12-09 17:10:07 +01:00
*/
2017-01-02 03:57:23 +01:00
function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id)
{
return DB::select('
SELECT *
FROM `ShiftEntry`
WHERE `SID` = ?
AND `TID` = ?
',
[
$shift_id,
$angeltype_id,
]
);
2013-12-09 17:10:07 +01:00
}
2013-12-27 18:45:27 +01:00
/**
* Returns all freeloaded shifts for given user.
2017-01-03 03:22:48 +01:00
*
2018-10-09 21:47:31 +02:00
* @param int $userId
* @return array
2013-12-27 18:45:27 +01:00
*/
2018-10-09 21:47:31 +02:00
function ShiftEntries_freeloaded_by_user($userId)
2017-01-02 03:57:23 +01:00
{
return DB::select('
SELECT *
FROM `ShiftEntry`
WHERE `freeloaded` = 1
AND `UID` = ?
',
[
2018-10-09 21:47:31 +02:00
$userId
]
);
2013-12-27 18:45:27 +01:00
}