Merge remote-tracking branch 'engelsystem/feature-igel-rewrite'

# Conflicts:
#	includes/controller/angeltypes_controller.php
#	includes/pages/admin_groups.php
#	includes/pages/user_settings.php
#	includes/sys_page.php
#	src/Exceptions/Handler.php
#	src/Http/Request.php
This commit is contained in:
Igor Scheller 2017-08-29 23:06:46 +02:00
commit d0074cf006
45 changed files with 232 additions and 644 deletions

View File

@ -91,7 +91,7 @@ function event_config_edit_controller()
}
if ($valid) {
$result = EventConfig_update(
EventConfig_update(
$event_name,
$buildup_start_date,
$event_start_date,
@ -100,10 +100,6 @@ function event_config_edit_controller()
$event_welcome_msg
);
if ($result === false) {
engelsystem_error('Unable to update event config.');
}
engelsystem_log(
'Changed event config: $event_name, $event_welcome_msg, '
. date('Y-m-d', $buildup_start_date) . ', ' . date('Y-m-d', $event_start_date) . ', '

View File

@ -80,10 +80,7 @@ function rooms_controller()
case 'list':
default:
redirect(page_link_to('admin_rooms'));
break;
}
exit;
}
/**

View File

@ -43,7 +43,7 @@ function shift_entry_add_controller()
$type = AngelType($type_id);
} else {
// TODO: Move queries to model
$type = DB::select('
$type = DB::selectOne('
SELECT *
FROM `UserAngelTypes`
JOIN `AngelTypes` ON (`UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`)
@ -56,7 +56,6 @@ function shift_entry_add_controller()
)
)
', [$type_id, $user['UID']]);
$type = array_shift($type);
}
if (empty($type)) {
@ -130,7 +129,7 @@ function shift_entry_add_controller()
}
$comment = strip_request_item_nl('comment');
$result = ShiftEntry_create([
ShiftEntry_create([
'SID' => $shift_id,
'TID' => $selected_type_id,
'UID' => $user_id,
@ -138,9 +137,6 @@ function shift_entry_add_controller()
'freeloaded' => $freeloaded,
'freeload_comment' => $freeload_comment
]);
if ($result === false) {
engelsystem_error('Unable to create shift entry.');
}
if (
$type['restricted'] == 0
@ -244,7 +240,7 @@ function shift_entry_delete_controller()
}
$entry_id = $request->input('entry_id');
$shift_entry_source = DB::select('
$shift_entry_source = DB::selectOne('
SELECT
`User`.`Nick`,
`ShiftEntry`.`Comment`,
@ -263,19 +259,14 @@ function shift_entry_delete_controller()
WHERE `ShiftEntry`.`id`=?',
[$entry_id]
);
if (count($shift_entry_source) > 0) {
$shift_entry_source = array_shift($shift_entry_source);
if (!empty($shift_entry_source)) {
if (!in_array('user_shifts_admin', $privileges) && (!in_array('shiftentry_edit_angeltype_supporter',
$privileges) || !User_is_AngelType_supporter($user, AngelType($shift_entry_source['angeltype_id'])))
) {
redirect(page_link_to('user_shifts'));
}
$result = ShiftEntry_delete($entry_id);
if ($result === false) {
engelsystem_error('Unable to delete shift entry.');
}
ShiftEntry_delete($entry_id);
engelsystem_log(
'Deleted ' . User_Nick_render($shift_entry_source) . '\'s shift: ' . $shift_entry_source['name']

View File

@ -141,10 +141,7 @@ function shift_edit_controller()
$shift['start'] = $start;
$shift['end'] = $end;
$result = Shift_update($shift);
if ($result === false) {
engelsystem_error('Unable to update shift.');
}
Shift_update($shift);
NeededAngelTypes_delete_by_shift($shift_id);
$needed_angel_types_info = [];
foreach ($needed_angel_types as $type_id => $count) {
@ -337,7 +334,6 @@ function shift_next_controller()
}
redirect(page_link_to('user_shifts'));
exit;
}
/**
@ -361,9 +357,6 @@ function shifts_json_export_all_controller()
}
$shifts_source = Shifts();
if ($shifts_source === false) {
engelsystem_error('Unable to load shifts.');
}
header('Content-Type: application/json; charset=utf-8');
raw_output(json_encode($shifts_source));

View File

@ -28,10 +28,7 @@ function shifttype_delete_controller()
}
if ($request->has('confirmed')) {
$result = ShiftType_delete($shifttype['id']);
if (empty($result)) {
engelsystem_error('Unable to delete shifttype.');
}
ShiftType_delete($shifttype['id']);
engelsystem_log('Deleted shifttype ' . $shifttype['name']);
success(sprintf(_('Shifttype %s deleted.'), $shifttype['name']));
@ -93,17 +90,13 @@ function shifttype_edit_controller()
if ($valid) {
if ($shifttype_id) {
$result = ShiftType_update($shifttype_id, $name, $angeltype_id, $description);
if ($result === false) {
engelsystem_error('Unable to update shifttype.');
}
ShiftType_update($shifttype_id, $name, $angeltype_id, $description);
engelsystem_log('Updated shifttype ' . $name);
success(_('Updated shifttype.'));
} else {
$shifttype_id = ShiftType_create($name, $angeltype_id, $description);
if ($shifttype_id === false) {
engelsystem_error('Unable to create shifttype.');
}
engelsystem_log('Created shifttype ' . $name);
success(_('Created shifttype.'));
}
@ -150,9 +143,6 @@ function shifttype_controller()
function shifttypes_list_controller()
{
$shifttypes = ShiftTypes();
if ($shifttypes === false) {
engelsystem_error('Unable to load shifttypes.');
}
return [
shifttypes_title(),

View File

@ -214,10 +214,7 @@ function user_angeltype_delete_controller()
}
if ($request->has('confirmed')) {
$result = UserAngelType_delete($user_angeltype);
if ($result === false) {
engelsystem_error('Unable to delete user angeltype.');
}
UserAngelType_delete($user_angeltype);
$success_message = sprintf(_('User %s removed from %s.'), User_Nick_render($user_source), $angeltype['name']);
engelsystem_log($success_message);
@ -421,6 +418,5 @@ function user_angeltypes_controller()
return user_angeltype_add_controller();
default:
redirect(page_link_to('angeltypes'));
exit;
}
}

View File

@ -76,10 +76,7 @@ function user_delete_controller()
}
if ($valid) {
$result = User_delete($user_source['UID']);
if ($result === false) {
engelsystem_error('Unable to delete user.');
}
User_delete($user_source['UID']);
mail_user_delete($user_source);
success(_('User deleted.'));
@ -166,10 +163,7 @@ function user_edit_vouchers_controller()
if ($valid) {
$user_source['got_voucher'] = $vouchers;
$result = User_update($user_source);
if ($result === false) {
engelsystem_error('Unable to update user.');
}
User_update($user_source);
success(_('Saved the number of vouchers.'));
engelsystem_log(User_Nick_render($user_source) . ': ' . sprintf('Got %s vouchers',
@ -265,10 +259,6 @@ function users_list_controller()
}
$users = Users($order_by);
if ($users === false) {
engelsystem_error('Unable to load users.');
}
foreach ($users as &$user) {
$user['freeloads'] = count(ShiftEntries_freeloaded_by_user($user));
}

View File

@ -77,31 +77,25 @@ function AngelType_contact_info($angeltype)
* Delete an Angeltype.
*
* @param array $angeltype
* @return bool
*/
function AngelType_delete($angeltype)
{
$result = DB::delete('
DB::delete('
DELETE FROM `AngelTypes`
WHERE `id`=?
LIMIT 1
', [$angeltype['id']]);
if (is_null($result)) {
engelsystem_error('Unable to delete angeltype.');
}
engelsystem_log('Deleted angeltype: ' . AngelType_name_render($angeltype));
return true;
}
/**
* Update Angeltype.
*
* @param array $angeltype The angeltype
* @return bool
*/
function AngelType_update($angeltype)
{
$result = DB::update('
DB::update('
UPDATE `AngelTypes` SET
`name` = ?,
`restricted` = ?,
@ -126,15 +120,12 @@ function AngelType_update($angeltype)
$angeltype['id'],
]
);
if (is_null($result)) {
engelsystem_error('Unable to update angeltype.');
}
engelsystem_log(
'Updated angeltype: ' . $angeltype['name'] . ($angeltype['restricted'] ? ', restricted' : '')
. ($angeltype['no_self_signup'] ? ', no_self_signup' : '')
. ($angeltype['requires_driver_license'] ? ', requires driver license' : '')
);
return true;
}
/**
@ -145,7 +136,7 @@ function AngelType_update($angeltype)
*/
function AngelType_create($angeltype)
{
$result = DB::insert('
DB::insert('
INSERT INTO `AngelTypes` (
`name`,
`restricted`,
@ -171,9 +162,7 @@ function AngelType_create($angeltype)
$angeltype['contact_email'],
]
);
if (is_null($result)) {
engelsystem_error('Unable to create angeltype.');
}
$angeltype['id'] = DB::getPdo()->lastInsertId();
engelsystem_log(
'Created angeltype: ' . $angeltype['name']
@ -224,7 +213,7 @@ function AngelType_validate_name($name, $angeltype)
*/
function AngelTypes_with_user($user)
{
$result = DB::select('
return DB::select('
SELECT `AngelTypes`.*,
`UserAngelTypes`.`id` AS `user_angeltype_id`,
`UserAngelTypes`.`confirm_user_id`,
@ -233,11 +222,6 @@ function AngelTypes_with_user($user)
LEFT JOIN `UserAngelTypes` ON `AngelTypes`.`id`=`UserAngelTypes`.`angeltype_id`
AND `UserAngelTypes`.`user_id` = ?
ORDER BY `name`', [$user['UID']]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load angeltypes.');
}
return $result;
}
/**
@ -247,15 +231,10 @@ function AngelTypes_with_user($user)
*/
function AngelTypes()
{
$result = DB::select('
return DB::select('
SELECT *
FROM `AngelTypes`
ORDER BY `name`');
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load angeltypes.');
}
return $result;
}
/**
@ -266,10 +245,6 @@ function AngelTypes()
function AngelType_ids()
{
$result = DB::select('SELECT `id` FROM `AngelTypes`');
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load angeltypes.');
}
return select_array($result, 'id', 'id');
}
@ -281,18 +256,8 @@ function AngelType_ids()
*/
function AngelType($angeltype_id)
{
$angelType_source = DB::select(
return DB::selectOne(
'SELECT * FROM `AngelTypes` WHERE `id`=?',
[$angeltype_id]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load angeltype.');
}
if (empty($angelType_source)) {
return null;
}
return array_shift($angelType_source);
}

View File

@ -9,17 +9,7 @@ use Engelsystem\Database\DB;
*/
function EventConfig()
{
$event_config = DB::select('SELECT * FROM `EventConfig` LIMIT 1');
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load event config.');
return null;
}
if (empty($event_config)) {
return null;
}
return array_shift($event_config);
return DB::selectOne('SELECT * FROM `EventConfig` LIMIT 1');
}
/**
@ -31,7 +21,7 @@ function EventConfig()
* @param int $event_end_date
* @param int $teardown_end_date
* @param string $event_welcome_msg
* @return bool
* @return int Rows updated
*/
function EventConfig_update(
$event_name,

View File

@ -20,11 +20,7 @@ function Message_ids()
*/
function Message($message_id)
{
$message_source = DB::select('SELECT * FROM `Messages` WHERE `id`=? LIMIT 1', [$message_id]);
if (empty($message_source)) {
return null;
}
return array_shift($message_source);
return DB::selectOne('SELECT * FROM `Messages` WHERE `id`=? LIMIT 1', [$message_id]);
}
/**

View File

@ -17,7 +17,7 @@ use Engelsystem\Database\DB;
*/
function NeededAngelType_add($shift_id, $angeltype_id, $room_id, $count)
{
$result = DB::insert('
DB::insert('
INSERT INTO `NeededAngelTypes` ( `shift_id`, `angel_type_id`, `room_id`, `count`)
VALUES (?, ?, ?, ?)
',
@ -27,9 +27,6 @@ function NeededAngelType_add($shift_id, $angeltype_id, $room_id, $count)
$room_id,
$count,
]);
if ($result === false) {
return false;
}
return DB::getPdo()->lastInsertId();
}
@ -38,22 +35,20 @@ function NeededAngelType_add($shift_id, $angeltype_id, $room_id, $count)
* Deletes all needed angel types from given shift.
*
* @param int $shift_id id of the shift
* @return int count of affected rows
*/
function NeededAngelTypes_delete_by_shift($shift_id)
{
return (int)DB::delete('DELETE FROM `NeededAngelTypes` WHERE `shift_id` = ?', [$shift_id]);
DB::delete('DELETE FROM `NeededAngelTypes` WHERE `shift_id` = ?', [$shift_id]);
}
/**
* Deletes all needed angel types from given room.
*
* @param int $room_id id of the room
* @return int count of affected rows
*/
function NeededAngelTypes_delete_by_room($room_id)
{
return (int)DB::delete(
DB::delete(
'DELETE FROM `NeededAngelTypes` WHERE `room_id` = ?',
[$room_id]
);
@ -76,9 +71,6 @@ function NeededAngelTypes_by_shift($shiftId)
ORDER BY `room_id` DESC',
[$shiftId]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load needed angeltypes.');
}
// Use settings from room
if (count($needed_angeltypes_source) == 0) {
@ -91,9 +83,6 @@ function NeededAngelTypes_by_shift($shiftId)
AND `count` > 0
ORDER BY `room_id` DESC
', [$shiftId]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load needed angeltypes.');
}
}
$shift_entries = ShiftEntries_by_shift($shiftId);

View File

@ -17,11 +17,10 @@ function Rooms($show_all = false)
* Delete a room
*
* @param int $room_id
* @return bool
*/
function Room_delete($room_id)
{
return DB::delete('DELETE FROM `Room` WHERE `RID` = ?', [$room_id]);
DB::delete('DELETE FROM `Room` WHERE `RID` = ?', [$room_id]);
}
/**
@ -35,7 +34,7 @@ function Room_delete($room_id)
*/
function Room_create($name, $from_frab, $public, $number = null)
{
$result = DB::insert('
DB::insert('
INSERT INTO `Room` (`Name`, `FromPentabarf`, `show`, `Number`)
VALUES (?, ?, ?, ?)
',
@ -46,9 +45,6 @@ function Room_create($name, $from_frab, $public, $number = null)
(int)$number,
]
);
if (!$result) {
return false;
}
return DB::getPdo()->lastInsertId();
}
@ -62,21 +58,11 @@ function Room_create($name, $from_frab, $public, $number = null)
*/
function Room($room_id, $onlyVisible = true)
{
$room_source = DB::select('
return DB::selectOne('
SELECT *
FROM `Room`
WHERE `RID` = ?
' . ($onlyVisible ? 'AND `show` = \'Y\'' : ''),
[$room_id]
);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
if (empty($room_source)) {
return null;
}
return array_shift($room_source);
}

View File

@ -28,10 +28,9 @@ function ShiftEntry_new()
*/
function ShiftEntries_freeleaded_count()
{
$result = DB::select('SELECT COUNT(*) FROM `ShiftEntry` WHERE `freeloaded` = 1');
$result = array_shift($result);
$result = DB::selectOne('SELECT COUNT(*) FROM `ShiftEntry` WHERE `freeloaded` = 1');
if (!is_array($result)) {
if (empty($result)) {
return 0;
}
@ -102,7 +101,6 @@ function ShiftEntry_create($shift_entry)
* Update a shift entry.
*
* @param array $shift_entry
* @return bool
*/
function ShiftEntry_update($shift_entry)
{
@ -120,39 +118,29 @@ function ShiftEntry_update($shift_entry)
$shift_entry['id']
]
);
return (DB::getStm()->errorCode() == '00000');
}
/**
* Get a shift entry.
*
* @param int $shift_entry_id
* @return array|false|null
* @return array|null
*/
function ShiftEntry($shift_entry_id)
{
$shift_entry = DB::select('SELECT * FROM `ShiftEntry` WHERE `id` = ?', [$shift_entry_id]);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
if (empty($shift_entry)) {
return null;
}
return $shift_entry[0];
return DB::selectOne('SELECT * FROM `ShiftEntry` WHERE `id` = ?', [$shift_entry_id]);
}
/**
* Delete a shift entry.
*
* @param int $shift_entry_id
* @return bool
*/
function ShiftEntry_delete($shift_entry_id)
{
$shift_entry = ShiftEntry($shift_entry_id);
mail_shift_removed(User($shift_entry['UID']), Shift($shift_entry['SID']));
return DB::delete('DELETE FROM `ShiftEntry` WHERE `id` = ?', [$shift_entry_id]);
DB::delete('DELETE FROM `ShiftEntry` WHERE `id` = ?', [$shift_entry_id]);
}
/**
@ -213,7 +201,7 @@ function ShiftEntries_finished_by_user($user)
*/
function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id)
{
$result = DB::select('
return DB::select('
SELECT *
FROM `ShiftEntry`
WHERE `SID` = ?
@ -224,10 +212,6 @@ function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id)
$angeltype_id,
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shift entries.');
}
return $result;
}
/**

View File

@ -6,11 +6,10 @@ use Engelsystem\Database\DB;
* Delete a shift type.
*
* @param int $shifttype_id
* @return bool
*/
function ShiftType_delete($shifttype_id)
{
return DB::delete('DELETE FROM `ShiftTypes` WHERE `id`=?', [$shifttype_id]);
DB::delete('DELETE FROM `ShiftTypes` WHERE `id`=?', [$shifttype_id]);
}
/**
@ -20,7 +19,6 @@ function ShiftType_delete($shifttype_id)
* @param string $name
* @param int $angeltype_id
* @param string $description
* @return bool
*/
function ShiftType_update($shifttype_id, $name, $angeltype_id, $description)
{
@ -38,8 +36,6 @@ function ShiftType_update($shifttype_id, $name, $angeltype_id, $description)
$shifttype_id,
]
);
return DB::getStm()->errorCode() == '00000';
}
/**
@ -52,7 +48,7 @@ function ShiftType_update($shifttype_id, $name, $angeltype_id, $description)
*/
function ShiftType_create($name, $angeltype_id, $description)
{
$result = DB::insert('
DB::insert('
INSERT INTO `ShiftTypes` (`name`, `angeltype_id`, `description`)
VALUES(?, ?, ?)
',
@ -63,10 +59,6 @@ function ShiftType_create($name, $angeltype_id, $description)
]
);
if ($result === false) {
return false;
}
return DB::getPdo()->lastInsertId();
}
@ -78,28 +70,15 @@ function ShiftType_create($name, $angeltype_id, $description)
*/
function ShiftType($shifttype_id)
{
$shifttype = DB::select('SELECT * FROM `ShiftTypes` WHERE `id`=?', [$shifttype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shift type.');
}
if (empty($shifttype)) {
return null;
}
return array_shift($shifttype);
return DB::selectOne('SELECT * FROM `ShiftTypes` WHERE `id`=?', [$shifttype_id]);
}
/**
* Get all shift types.
*
* @return array|false
* @return array
*/
function ShiftTypes()
{
$result = DB::select('SELECT * FROM `ShiftTypes` ORDER BY `name`');
if (DB::getStm()->errorCode() != '00000') {
return false;
}
return $result;
return DB::select('SELECT * FROM `ShiftTypes` ORDER BY `name`');
}

View File

@ -10,11 +10,7 @@ use Engelsystem\ShiftSignupState;
*/
function Shifts_by_room($room)
{
$result = DB::select('SELECT * FROM `Shifts` WHERE `RID`=? ORDER BY `start`', [$room['RID']]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shifts.');
}
return $result;
return DB::select('SELECT * FROM `Shifts` WHERE `RID`=? ORDER BY `start`', [$room['RID']]);
}
/**
@ -49,7 +45,8 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
AND NOT `Shifts`.`PSID` IS NULL) AS tmp_shifts
ORDER BY `start`';
$result = DB::select(
return DB::select(
$sql,
[
$shiftsFilter->getStartTime(),
@ -58,10 +55,6 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
$shiftsFilter->getEndTime(),
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shifts by filter.');
}
return $result;
}
/**
@ -100,7 +93,8 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ')
AND `start` BETWEEN ? AND ?
AND NOT `Shifts`.`PSID` IS NULL';
$result = DB::select(
return DB::select(
$sql,
[
$shiftsFilter->getStartTime(),
@ -109,10 +103,6 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
$shiftsFilter->getEndTime(),
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load needed angeltypes by filter.');
}
return $result;
}
/**
@ -122,7 +112,7 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
*/
function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype)
{
$result = DB::select('
return DB::selectOne('
SELECT
`NeededAngelTypes`.*,
`Shifts`.`SID`,
@ -160,13 +150,6 @@ function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype)
$angeltype['id']
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load needed angeltypes by filter.');
}
if (empty($result)) {
return null;
}
return $result[0];
}
/**
@ -193,17 +176,13 @@ function ShiftEntries_by_ShiftsFilter(ShiftsFilter $shiftsFilter)
WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ')
AND `start` BETWEEN ? AND ?
ORDER BY `Shifts`.`start`';
$result = DB::select(
return DB::select(
$sql,
[
$shiftsFilter->getStartTime(),
$shiftsFilter->getEndTime(),
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shift entries by filter.');
}
return $result;
}
/**
@ -402,41 +381,29 @@ function Shift_signup_allowed(
* Delete a shift by its external id.
*
* @param int $shift_psid
* @return bool
*/
function Shift_delete_by_psid($shift_psid)
{
DB::delete('DELETE FROM `Shifts` WHERE `PSID`=?', [$shift_psid]);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
return true;
}
/**
* Delete a shift.
*
* @param int $shift_id
* @return bool
*/
function Shift_delete($shift_id)
{
mail_shift_delete(Shift($shift_id));
$result = DB::delete('DELETE FROM `Shifts` WHERE `SID`=?', [$shift_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to delete shift.');
}
return $result;
DB::delete('DELETE FROM `Shifts` WHERE `SID`=?', [$shift_id]);
}
/**
* Update a shift.
*
* @param array $shift
* @return bool
* @return int Updated row count
*/
function Shift_update($shift)
{
@ -444,7 +411,7 @@ function Shift_update($shift)
$shift['name'] = ShiftType($shift['shifttype_id'])['name'];
mail_shift_change(Shift($shift['SID']), $shift);
return (bool)DB::update('
return DB::update('
UPDATE `Shifts` SET
`shifttype_id` = ?,
`start` = ?,
@ -480,16 +447,13 @@ function Shift_update($shift)
*/
function Shift_update_by_psid($shift)
{
$shift_source = DB::select('SELECT `SID` FROM `Shifts` WHERE `PSID`=?', [$shift['PSID']]);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
$shift_source = DB::selectOne('SELECT `SID` FROM `Shifts` WHERE `PSID`=?', [$shift['PSID']]);
if (empty($shift_source)) {
return null;
throw new Exception('Shift not found.');
}
$shift['SID'] = $shift_source[0]['SID'];
$shift['SID'] = $shift_source['SID'];
return Shift_update($shift);
}
@ -497,7 +461,7 @@ function Shift_update_by_psid($shift)
* Create a new shift.
*
* @param array $shift
* @return int|false shift id or false
* @return int ID of the new created shift
*/
function Shift_create($shift)
{
@ -528,9 +492,7 @@ function Shift_create($shift)
time(),
]
);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
return DB::getPdo()->lastInsertId();
}
@ -543,7 +505,7 @@ function Shift_create($shift)
*/
function Shifts_by_user($user, $include_freeload_comments = false)
{
$result = DB::select('
return DB::select('
SELECT `ShiftTypes`.`id` AS `shifttype_id`, `ShiftTypes`.`name`,
`ShiftEntry`.`id`, `ShiftEntry`.`SID`, `ShiftEntry`.`TID`, `ShiftEntry`.`UID`, `ShiftEntry`.`freeloaded`, `ShiftEntry`.`Comment`,
' . ($include_freeload_comments ? '`ShiftEntry`.`freeload_comment`, ' : '') . '
@ -559,10 +521,6 @@ function Shifts_by_user($user, $include_freeload_comments = false)
$user['UID']
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load users shifts.');
}
return $result;
}
/**
@ -573,22 +531,16 @@ function Shifts_by_user($user, $include_freeload_comments = false)
*/
function Shift($shift_id)
{
$shifts_source = DB::select('
$result = DB::selectOne('
SELECT `Shifts`.*, `ShiftTypes`.`name`
FROM `Shifts`
JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`)
WHERE `SID`=?', [$shift_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load shift.');
}
if (empty($shifts_source)) {
if (empty($result)) {
return null;
}
$result = $shifts_source[0];
$shiftsEntry_source = DB::select('
SELECT `id`, `TID` , `UID` , `freeloaded`
FROM `ShiftEntry`
@ -613,7 +565,7 @@ function Shift($shift_id)
/**
* Returns all shifts with needed angeltypes and count of subscribed jobs.
*
* @return array|false
* @return array
*/
function Shifts()
{
@ -624,10 +576,6 @@ function Shifts()
JOIN `Room` ON `Room`.`RID` = `Shifts`.`RID`
');
if (DB::getStm()->errorCode() != '00000') {
return false;
}
foreach ($shifts_source as &$shift) {
$needed_angeltypes = NeededAngelTypes_by_shift($shift['SID']);
$shift['angeltypes'] = $needed_angeltypes;

View File

@ -27,23 +27,16 @@ function UserAngelType_exists($user, $angeltype)
* List users angeltypes.
*
* @param array $user
* @return array|false
* @return array
*/
function User_angeltypes($user)
{
$result = DB::select('
return DB::select('
SELECT `AngelTypes`.*, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`supporter`
FROM `UserAngelTypes`
JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`
WHERE `UserAngelTypes`.`user_id`=?
', [$user['UID']]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user angeltypes.');
return false;
}
return $result;
}
/**
@ -54,7 +47,7 @@ function User_angeltypes($user)
*/
function User_unconfirmed_AngelTypes($user)
{
$result = DB::select('
return DB::select('
SELECT
`UserAngelTypes`.*,
`AngelTypes`.`name`,
@ -69,12 +62,6 @@ function User_unconfirmed_AngelTypes($user)
GROUP BY `UserAngelTypes`.`angeltype_id`
ORDER BY `AngelTypes`.`name`
', [$user['UID']]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user angeltypes.');
}
return $result;
}
/**
@ -110,29 +97,21 @@ function User_is_AngelType_supporter(&$user, $angeltype)
*
* @param int $user_angeltype_id
* @param bool $supporter
* @return int
*/
function UserAngelType_update($user_angeltype_id, $supporter)
{
$result = DB::update('
DB::update('
UPDATE `UserAngelTypes`
SET `supporter`=?
WHERE `id`=?
LIMIT 1
', [$supporter, $user_angeltype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to update supporter rights.');
}
return $result;
}
/**
* Delete all unconfirmed UserAngelTypes for given Angeltype.
*
* @param int $angeltype_id
* @return bool
*/
function UserAngelTypes_delete_all($angeltype_id)
{
@ -141,12 +120,6 @@ function UserAngelTypes_delete_all($angeltype_id)
WHERE `angeltype_id`=?
AND `confirm_user_id` IS NULL
', [$angeltype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to delete all unconfirmed users.');
}
return true;
}
/**
@ -154,22 +127,15 @@ function UserAngelTypes_delete_all($angeltype_id)
*
* @param int $angeltype_id
* @param array $confirm_user
* @return bool
*/
function UserAngelTypes_confirm_all($angeltype_id, $confirm_user)
{
$result = DB::update('
DB::update('
UPDATE `UserAngelTypes`
SET `confirm_user_id`=?
WHERE `angeltype_id`=?
AND `confirm_user_id` IS NULL
', [$confirm_user['UID'], $angeltype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to confirm all users.');
}
return (bool)$result;
}
/**
@ -181,26 +147,21 @@ function UserAngelTypes_confirm_all($angeltype_id, $confirm_user)
*/
function UserAngelType_confirm($user_angeltype_id, $confirm_user)
{
$result = DB::update('
DB::update('
UPDATE `UserAngelTypes`
SET `confirm_user_id`=?
WHERE `id`=?
LIMIT 1', [$confirm_user['UID'], $user_angeltype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to confirm user angeltype.');
}
return (bool)$result;
}
/**
* Delete an UserAngelType.
*
* @param array $user_angeltype
* @return bool
*/
function UserAngelType_delete($user_angeltype)
{
return (bool)DB::delete('
DB::delete('
DELETE FROM `UserAngelTypes`
WHERE `id`=?
LIMIT 1', [$user_angeltype['id']]);
@ -225,10 +186,6 @@ function UserAngelType_create($user, $angeltype)
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to create user angeltype.');
}
return DB::getPdo()->lastInsertId();
}
@ -240,21 +197,11 @@ function UserAngelType_create($user, $angeltype)
*/
function UserAngelType($user_angeltype_id)
{
$angeltype = DB::select('
return DB::selectOne('
SELECT *
FROM `UserAngelTypes`
WHERE `id`=?
LIMIT 1', [$user_angeltype_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user angeltype.');
}
if (empty($angeltype)) {
return null;
}
return $angeltype[0];
}
/**
@ -266,7 +213,7 @@ function UserAngelType($user_angeltype_id)
*/
function UserAngelType_by_User_and_AngelType($user, $angeltype)
{
$angeltype = DB::select('
return DB::selectOne('
SELECT *
FROM `UserAngelTypes`
WHERE `user_id`=?
@ -278,14 +225,4 @@ function UserAngelType_by_User_and_AngelType($user, $angeltype)
$angeltype['id']
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user angeltype.');
}
if (empty($angeltype)) {
return null;
}
return array_shift($angeltype);
}

View File

@ -41,25 +41,14 @@ function UserDriverLicense_valid($user_driver_license)
* Get a users driver license information
*
* @param int $user_id The users id
* @return array|false|null
* @return array|null
*/
function UserDriverLicense($user_id)
{
$user_driver_license = DB::select('
return DB::selectOne('
SELECT *
FROM `UserDriverLicenses`
WHERE `user_id`=?', [$user_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user driver license.');
return false;
}
if (empty($user_driver_license)) {
return null;
}
return array_shift($user_driver_license);
}
/**
@ -94,9 +83,6 @@ function UserDriverLicenses_create($user_driver_license, $user)
(bool)$user_driver_license['has_license_forklift'],
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to create user driver license');
}
return $user_driver_license;
}
@ -105,11 +91,10 @@ function UserDriverLicenses_create($user_driver_license, $user)
* Update a user's driver license entry
*
* @param array $user_driver_license The UserDriverLicense to update
* @return bool
*/
function UserDriverLicenses_update($user_driver_license)
{
$result = DB::update('
DB::update('
UPDATE `UserDriverLicenses`
SET
`has_car`=?,
@ -130,23 +115,14 @@ function UserDriverLicenses_update($user_driver_license)
$user_driver_license['user_id'],
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to update user driver license information');
}
return $result;
}
/**
* Delete a user's driver license entry
*
* @param int $user_id
* @return bool
*/
function UserDriverLicenses_delete($user_id)
{
$result = DB::delete('DELETE FROM `UserDriverLicenses` WHERE `user_id`=?', [$user_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to remove user driver license information');
}
return $result;
DB::delete('DELETE FROM `UserDriverLicenses` WHERE `user_id`=?', [$user_id]);
}

View File

@ -11,24 +11,20 @@ use Engelsystem\ValidationResult;
* Delete a user
*
* @param int $user_id
* @return bool
*/
function User_delete($user_id)
{
DB::delete('DELETE FROM `User` WHERE `UID`=?', [$user_id]);
return DB::getStm()->errorCode() == '00000';
}
/**
* Update user.
*
* @param array $user
* @return bool
*/
function User_update($user)
{
return (bool)DB::update('
DB::update('
UPDATE `User` SET
`Nick`=?,
`Name`=?,
@ -91,8 +87,7 @@ function User_update($user)
*/
function User_force_active_count()
{
$result = DB::select('SELECT COUNT(*) FROM `User` WHERE `force_active` = 1');
$result = array_shift($result);
$result = DB::selectOne('SELECT COUNT(*) FROM `User` WHERE `force_active` = 1');
if (empty($result)) {
return 0;
@ -106,8 +101,7 @@ function User_force_active_count()
*/
function User_active_count()
{
$result = DB::select('SELECT COUNT(*) FROM `User` WHERE `Aktiv` = 1');
$result = array_shift($result);
$result = DB::selectOne('SELECT COUNT(*) FROM `User` WHERE `Aktiv` = 1');
if (empty($result)) {
return 0;
@ -121,8 +115,7 @@ function User_active_count()
*/
function User_got_voucher_count()
{
$result = DB::select('SELECT SUM(`got_voucher`) FROM `User`');
$result = array_shift($result);
$result = DB::selectOne('SELECT SUM(`got_voucher`) FROM `User`');
if (empty($result)) {
return 0;
@ -136,8 +129,7 @@ function User_got_voucher_count()
*/
function User_arrived_count()
{
$result = DB::select('SELECT COUNT(*) FROM `User` WHERE `Gekommen` = 1');
$result = array_shift($result);
$result = DB::selectOne('SELECT COUNT(*) FROM `User` WHERE `Gekommen` = 1');
if (empty($result)) {
return 0;
@ -151,8 +143,7 @@ function User_arrived_count()
*/
function User_tshirts_count()
{
$result = DB::select('SELECT COUNT(*) FROM `User` WHERE `Tshirt` = 1');
$result = array_shift($result);
$result = DB::selectOne('SELECT COUNT(*) FROM `User` WHERE `Tshirt` = 1');
if (empty($result)) {
return 0;
@ -188,23 +179,17 @@ function User_sortable_columns()
* Get all users, ordered by Nick by default or by given param.
*
* @param string $order_by
* @return array|false
* @return array
*/
function Users($order_by = 'Nick')
{
$result = DB::select(sprintf('
return DB::select(sprintf('
SELECT *
FROM `User`
ORDER BY `%s` ASC
',
trim(DB::getPdo()->quote($order_by), '\'')
));
if (DB::getStm()->errorCode() != '00000') {
return false;
}
return $result;
}
/**
@ -228,7 +213,7 @@ function User_is_freeloader($user)
*/
function Users_by_angeltype_inverted($angeltype)
{
$result = DB::select('
return DB::select('
SELECT `User`.*
FROM `User`
LEFT JOIN `UserAngelTypes`
@ -240,10 +225,6 @@ function Users_by_angeltype_inverted($angeltype)
$angeltype['id']
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load users.');
}
return $result;
}
/**
@ -254,12 +235,13 @@ function Users_by_angeltype_inverted($angeltype)
*/
function Users_by_angeltype($angeltype)
{
$result = DB::select('
return DB::select('
SELECT
`User`.*,
`UserAngelTypes`.`id` AS `user_angeltype_id`,
`UserAngelTypes`.`confirm_user_id`,
`UserAngelTypes`.`supporter`,
(`UserDriverLicenses`.`user_id` IS NOT NULL) as `wants_to_drive`,
`UserDriverLicenses`.*
FROM `User`
JOIN `UserAngelTypes` ON `User`.`UID`=`UserAngelTypes`.`user_id`
@ -271,10 +253,6 @@ function Users_by_angeltype($angeltype)
$angeltype['id']
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load members.');
}
return $result;
}
/**
@ -399,17 +377,7 @@ function User_validate_planned_departure_date($planned_arrival_date, $planned_de
*/
function User($user_id)
{
$user_source = DB::select('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$user_id]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user.');
}
if (empty($user_source)) {
return null;
}
return array_shift($user_source);
return DB::selectOne('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$user_id]);
}
/**
@ -417,21 +385,11 @@ function User($user_id)
*
* @param string $api_key
* User api key
* @return array|null Matching user, null on error
* @return array|null Matching user, null if not found
*/
function User_by_api_key($api_key)
{
$user = DB::select('SELECT * FROM `User` WHERE `api_key`=? LIMIT 1', [$api_key]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to find user by api key.');
}
if (empty($user)) {
return null;
}
return $user[0];
return DB::selectOne('SELECT * FROM `User` WHERE `api_key`=? LIMIT 1', [$api_key]);
}
/**
@ -442,38 +400,18 @@ function User_by_api_key($api_key)
*/
function User_by_email($email)
{
$user = DB::select('SELECT * FROM `User` WHERE `email`=? LIMIT 1', [$email]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user.');
}
if (empty($user)) {
return null;
}
return array_shift($user);
return DB::selectOne('SELECT * FROM `User` WHERE `email`=? LIMIT 1', [$email]);
}
/**
* Returns User by password token.
*
* @param string $token
* @return array|null Matching user, null or false on error
* @return array|null Matching user, null when not found
*/
function User_by_password_recovery_token($token)
{
$user = DB::select('SELECT * FROM `User` WHERE `password_recovery_token`=? LIMIT 1', [$token]);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to load user.');
}
if (empty($user)) {
return null;
}
return array_shift($user);
return DB::selectOne('SELECT * FROM `User` WHERE `password_recovery_token`=? LIMIT 1', [$token]);
}
/**
@ -481,7 +419,6 @@ function User_by_password_recovery_token($token)
*
* @param array $user
* @param bool $log
* @return bool
*/
function User_reset_api_key(&$user, $log = true)
{
@ -497,15 +434,10 @@ function User_reset_api_key(&$user, $log = true)
$user['UID']
]
);
if (DB::getStm()->errorCode() != '00000') {
return false;
}
if ($log) {
engelsystem_log(sprintf('API key resetted (%s).', User_Nick_render($user)));
}
return true;
}
/**
@ -528,9 +460,6 @@ function User_generate_password_recovery_token(&$user)
$user['UID'],
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to generate password recovery token.');
}
engelsystem_log('Password recovery for ' . User_Nick_render($user) . ' started.');
return $user['password_recovery_token'];
}

View File

@ -232,19 +232,17 @@ function admin_active()
$shirt_statistics = [];
foreach (array_keys($tshirt_sizes) as $size) {
if (!empty($size)) {
$sc = DB::select(
$sc = DB::selectOne(
'SELECT count(*) FROM `User` WHERE `Size`=? AND `Gekommen`=1',
[$size]
);
$sc = array_shift($sc);
$sc = array_shift($sc);
$gc = DB::select(
$gc = DB::selectOne(
'SELECT count(*) FROM `User` WHERE `Size`=? AND `Tshirt`=1',
[$size]
);
$gc = array_shift($gc);
$gc = array_shift($gc);
$shirt_statistics[] = [
'size' => $size,
@ -254,8 +252,7 @@ function admin_active()
}
}
$uc = DB::select('SELECT count(*) FROM `User` WHERE `Tshirt`=1');
$uc = array_shift($uc);
$uc = DB::selectOne('SELECT count(*) FROM `User` WHERE `Tshirt`=1');
$uc = array_shift($uc);
$shirt_statistics[] = [

View File

@ -112,23 +112,21 @@ function admin_groups()
return error('Incomplete call, missing Groups ID.', true);
}
$group = DB::select('SELECT * FROM `Groups` WHERE `UID`=? LIMIT 1', [$group_id]);
$group = DB::selectOne('SELECT * FROM `Groups` WHERE `UID`=? LIMIT 1', [$group_id]);
$privileges = $request->postData('privileges');
if (!is_array($privileges)) {
$privileges = [];
}
if (!empty($group)) {
$group = array_shift($group);
DB::delete('DELETE FROM `GroupPrivileges` WHERE `group_id`=?', [$group_id]);
$privilege_names = [];
foreach ($privileges as $privilege) {
if (preg_match('/^\d{1,}$/', $privilege)) {
$group_privileges_source = DB::select(
$group_privileges_source = DB::selectOne(
'SELECT `name` FROM `Privileges` WHERE `id`=? LIMIT 1',
[$privilege]
);
if (!empty($group_privileges_source)) {
$group_privileges_source = array_shift($group_privileges_source);
DB::insert(
'INSERT INTO `GroupPrivileges` (`group_id`, `privilege_id`) VALUES (?, ?)',
[$group_id, $privilege]

View File

@ -45,9 +45,6 @@ function admin_import()
$add_minutes_end = 15;
$shifttypes_source = ShiftTypes();
if ($shifttypes_source === false) {
engelsystem_error('Unable to load shifttypes.');
}
$shifttypes = [];
foreach ($shifttypes_source as $shifttype) {
$shifttypes[$shifttype['id']] = $shifttype['name'];
@ -251,9 +248,7 @@ function admin_import()
list($rooms_new, $rooms_deleted) = prepare_rooms($import_file);
foreach ($rooms_new as $room) {
$result = Room_create($room, true, true);
if ($result === false) {
engelsystem_error('Unable to create room.');
}
$rooms_import[trim($room)] = $result;
}
foreach ($rooms_deleted as $room) {
@ -267,24 +262,15 @@ function admin_import()
$add_minutes_end
);
foreach ($events_new as $event) {
$result = Shift_create($event);
if ($result === false) {
engelsystem_error('Unable to create shift.');
}
Shift_create($event);
}
foreach ($events_updated as $event) {
$result = Shift_update_by_psid($event);
if ($result === false) {
engelsystem_error('Unable to update shift.');
}
Shift_update_by_psid($event);
}
foreach ($events_deleted as $event) {
$result = Shift_delete_by_psid($event['PSID']);
if ($result === false) {
engelsystem_error('Unable to delete shift.');
}
Shift_delete_by_psid($event['PSID']);
}
engelsystem_log('Frab import done');

View File

@ -21,14 +21,13 @@ function admin_news()
return error('Incomplete call, missing News ID.', true);
}
$news = DB::select('SELECT * FROM `News` WHERE `ID`=? LIMIT 1', [$news_id]);
$news = DB::selectOne('SELECT * FROM `News` WHERE `ID`=? LIMIT 1', [$news_id]);
if (empty($news)) {
return error('No News found.', true);
}
switch ($request->input('action')) {
case 'edit':
$news = array_shift($news);
$user_source = User($news['UID']);
$html .= form(
@ -81,7 +80,6 @@ function admin_news()
break;
case 'delete':
$news = array_shift($news);
DB::delete('DELETE FROM `News` WHERE `ID`=? LIMIT 1', [$news_id]);
engelsystem_log('News deleted: ' . $news['Betreff']);
success(_('News entry deleted.'));

View File

@ -105,11 +105,11 @@ function admin_questions()
return error('Incomplete call, missing Question ID.', true);
}
$question = DB::select(
$question = DB::selectOne(
'SELECT * FROM `Questions` WHERE `QID`=? LIMIT 1',
[$question_id]
);
if (count($question) > 0 && $question[0]['AID'] == null) {
if (!empty($question) && $question['AID'] == null) {
$answer = trim(
preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui",
'',
@ -129,7 +129,7 @@ function admin_questions()
$question_id,
]
);
engelsystem_log('Question ' . $question[0]['Question'] . ' answered: ' . $answer);
engelsystem_log('Question ' . $question['Question'] . ' answered: ' . $answer);
redirect(page_link_to('admin_questions'));
} else {
return error('Enter an answer!', true);
@ -145,13 +145,13 @@ function admin_questions()
return error('Incomplete call, missing Question ID.', true);
}
$question = DB::select(
$question = DB::selectOne(
'SELECT * FROM `Questions` WHERE `QID`=? LIMIT 1',
[$question_id]
);
if (count($question) > 0) {
if (!empty($question)) {
DB::delete('DELETE FROM `Questions` WHERE `QID`=? LIMIT 1', [$question_id]);
engelsystem_log('Question deleted: ' . $question[0]['Question']);
engelsystem_log('Question deleted: ' . $question['Question']);
redirect(page_link_to('admin_questions'));
} else {
return error('No question found.', true);

View File

@ -22,8 +22,8 @@ function admin_rooms()
foreach ($rooms_source as $room) {
$rooms[] = [
'name' => Room_name_render($room),
'from_pentabarf' => $room['FromPentabarf'] == 'Y' ? '✓' : '',
'public' => $room['show'] == 'Y' ? '✓' : '',
'from_pentabarf' => glyph_bool($room['FromPentabarf'] == 'Y'),
'public' => glyph_bool($room['show'] == 'Y'),
'actions' => table_buttons([
button(page_link_to('admin_rooms', ['show' => 'edit', 'id' => $room['RID']]), _('edit'), 'btn-xs'),
button(page_link_to('admin_rooms', ['show' => 'delete', 'id' => $room['RID']]), _('delete'), 'btn-xs')
@ -50,9 +50,6 @@ function admin_rooms()
if (test_request_int('id')) {
$room = Room($request->input('id'), false);
if ($room === false) {
engelsystem_error('Unable to load room.');
}
if ($room == null) {
redirect(page_link_to('admin_rooms'));
}
@ -150,9 +147,7 @@ function admin_rooms()
);
} else {
$room_id = Room_create($name, $from_pentabarf, $public, $number);
if ($room_id === false) {
engelsystem_error('Unable to create room.');
}
engelsystem_log(
'Room created: ' . $name
. ', pentabarf import: '
@ -214,9 +209,7 @@ function admin_rooms()
]);
} elseif ($request->input('show') == 'delete') {
if ($request->has('ack')) {
if (!Room_delete($room_id)) {
engelsystem_error('Unable to delete room.');
}
Room_delete($room_id);
engelsystem_log('Room deleted: ' . $name);
success(sprintf(_('Room %s deleted.'), $name));

View File

@ -44,9 +44,6 @@ function admin_shifts()
// Load shift types
$shifttypes_source = ShiftTypes();
if ($shifttypes_source === false) {
engelsystem_error('Unable to load shift types.');
}
$shifttypes = [];
foreach ($shifttypes_source as $shifttype) {
$shifttypes[$shifttype['id']] = $shifttype['name'];
@ -317,9 +314,6 @@ function admin_shifts()
$shift['URL'] = null;
$shift['PSID'] = null;
$shift_id = Shift_create($shift);
if ($shift_id === false) {
engelsystem_error('Unable to create shift.');
}
engelsystem_log(
'Shift created: ' . $shifttypes[$shift['shifttype_id']]
@ -329,7 +323,7 @@ function admin_shifts()
);
foreach ($_SESSION['admin_shifts_types'] as $type_id => $count) {
$angel_type_source = DB::select('
$angel_type_source = DB::selectOne('
SELECT *
FROM `AngelTypes`
WHERE `id` = ?
@ -345,7 +339,7 @@ function admin_shifts()
$count
]
);
$needed_angel_types_info[] = $angel_type_source[0]['name'] . ': ' . $count;
$needed_angel_types_info[] = $angel_type_source['name'] . ': ' . $count;
}
}
}

View File

@ -119,20 +119,20 @@ function admin_user()
$html .= '<hr />';
$my_highest_group = DB::select(
$my_highest_group = DB::selectOne(
'SELECT group_id FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id` LIMIT 1',
[$user['UID']]
);
if (count($my_highest_group) > 0) {
$my_highest_group = $my_highest_group[0]['group_id'];
if (!empty($my_highest_group)) {
$my_highest_group = $my_highest_group['group_id'];
}
$his_highest_group = DB::select(
$his_highest_group = DB::selectOne(
'SELECT `group_id` FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id` LIMIT 1',
[$user_id]
);
if (count($his_highest_group) > 0) {
$his_highest_group = $his_highest_group[0]['group_id'];
if (!empty($his_highest_group)) {
$his_highest_group = $his_highest_group['group_id'];
}
if ($user_id != $user['UID'] && $my_highest_group <= $his_highest_group) {
@ -192,7 +192,7 @@ function admin_user()
count($my_highest_group) > 0
&& (
count($his_highest_group) == 0
|| ($my_highest_group[0]['group_id'] <= $his_highest_group[0]['group_id'])
|| ($my_highest_group['group_id'] <= $his_highest_group['group_id'])
)
) {
$groups_source = DB::select('
@ -207,7 +207,7 @@ function admin_user()
',
[
$user_id,
$my_highest_group[0]['group_id'],
$my_highest_group['group_id'],
]
);
$groups = [];

View File

@ -399,9 +399,8 @@ function guest_login()
if ($request->has('submit')) {
if ($request->has('nick') && strlen(User_validate_Nick($request->input('nick'))) > 0) {
$nick = User_validate_Nick($request->input('nick'));
$login_user = DB::select('SELECT * FROM `User` WHERE `Nick`=?', [$nick]);
if (count($login_user) > 0) {
$login_user = $login_user[0];
$login_user = DB::selectOne('SELECT * FROM `User` WHERE `Nick`=?', [$nick]);
if (!empty($login_user)) {
if ($request->has('password')) {
if (!verify_password($request->postData('password'), $login_user['Passwort'], $login_user['UID'])) {
$valid = false;

View File

@ -17,13 +17,12 @@ function guest_stats()
list($arrived_user_count) = DB::select('SELECT count(*) AS `user_count` FROM `User` WHERE `Gekommen`=1');
$stats['arrived_user_count'] = $arrived_user_count['user_count'];
$done_shifts_seconds = DB::select('
$done_shifts_seconds = DB::selectOne('
SELECT SUM(`Shifts`.`end` - `Shifts`.`start`)
FROM `ShiftEntry`
JOIN `Shifts` USING (`SID`)
WHERE `Shifts`.`end` < UNIX_TIMESTAMP()
');
$done_shifts_seconds = array_shift($done_shifts_seconds);
$done_shifts_seconds = (int)array_shift($done_shifts_seconds);
$stats['done_work_hours'] = round($done_shifts_seconds / (60 * 60), 0);

View File

@ -130,11 +130,11 @@ function user_messages()
return error(_('Incomplete call, missing Message ID.'), true);
}
$message = DB::select(
$message = DB::selectOne(
'SELECT `RUID` FROM `Messages` WHERE `id`=? LIMIT 1',
[$message_id]
);
if (count($message) > 0 && $message[0]['RUID'] == $user['UID']) {
if (!empty($message) && $message['RUID'] == $user['UID']) {
DB::update(
'UPDATE `Messages` SET `isRead`=\'Y\' WHERE `id`=? LIMIT 1',
[$message_id]
@ -152,11 +152,11 @@ function user_messages()
return error(_('Incomplete call, missing Message ID.'), true);
}
$message = DB::select(
$message = DB::selectOne(
'SELECT `SUID` FROM `Messages` WHERE `id`=? LIMIT 1',
[$message_id]
);
if (count($message) > 0 && $message[0]['SUID'] == $user['UID']) {
if (!empty($message) && $message['SUID'] == $user['UID']) {
DB::delete('DELETE FROM `Messages` WHERE `id`=? LIMIT 1', [$message_id]);
redirect(page_link_to('user_messages'));
} else {

View File

@ -31,8 +31,7 @@ function user_myshifts()
$user_id = $user['UID'];
}
$shifts_user = DB::select('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$user_id]);
$shifts_user = array_shift($shifts_user);
$shifts_user = DB::selectOne('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$user_id]);
if ($request->has('reset')) {
if ($request->input('reset') == 'ack') {
@ -49,7 +48,7 @@ function user_myshifts()
]);
} elseif ($request->has('edit') && preg_match('/^\d*$/', $request->input('edit'))) {
$user_id = $request->input('edit');
$shift = DB::select('
$shift = DB::selectOne('
SELECT
`ShiftEntry`.`freeloaded`,
`ShiftEntry`.`freeload_comment`,
@ -74,7 +73,6 @@ function user_myshifts()
]
);
if (count($shift) > 0) {
$shift = array_shift($shift);
$freeloaded = $shift['freeloaded'];
$freeload_comment = $shift['freeload_comment'];
@ -93,15 +91,12 @@ function user_myshifts()
$user_source = User($shift['UID']);
if ($valid) {
$result = ShiftEntry_update([
ShiftEntry_update([
'id' => $user_id,
'Comment' => $comment,
'freeloaded' => $freeloaded,
'freeload_comment' => $freeload_comment
]);
if ($result === false) {
engelsystem_error('Unable to update shift entry.');
}
engelsystem_log(
'Updated ' . User_Nick_render($user_source) . '\'s shift ' . $shift['name']
@ -131,7 +126,7 @@ function user_myshifts()
}
} elseif ($request->has('cancel') && preg_match('/^\d*$/', $request->input('cancel'))) {
$user_id = $request->input('cancel');
$shift = DB::select('
$shift = DB::selectOne('
SELECT *
FROM `Shifts`
INNER JOIN `ShiftEntry` USING (`SID`)
@ -143,15 +138,12 @@ function user_myshifts()
]
);
if (count($shift) > 0) {
$shift = array_shift($shift);
if (
($shift['start'] > time() + config('last_unsubscribe') * 3600)
|| in_array('user_shifts_admin', $privileges)
) {
$result = ShiftEntry_delete($user_id);
if ($result === false) {
engelsystem_error('Unable to delete shift entry.');
}
ShiftEntry_delete($user_id);
$room = Room($shift['RID']);
$angeltype = AngelType($shift['TID']);
$shifttype = ShiftType($shift['shifttype_id']);

View File

@ -126,8 +126,7 @@ function user_news_comments()
&& count(DB::select('SELECT `ID` FROM `News` WHERE `ID`=? LIMIT 1', [$request->input('nid')])) > 0
) {
$nid = $request->input('nid');
$news = DB::select('SELECT * FROM `News` WHERE `ID`=? LIMIT 1', [$nid]);
$news = array_shift($news);
$news = DB::selectOne('SELECT * FROM `News` WHERE `ID`=? LIMIT 1', [$nid]);
if ($request->has('text')) {
$text = preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", '', strip_tags($request->input('text')));
DB::insert('

View File

@ -43,15 +43,13 @@ function user_questions()
case 'ask':
$question = strip_request_item_nl('question');
if ($question != '') {
$result = DB::insert('
DB::insert('
INSERT INTO `Questions` (`UID`, `Question`)
VALUES (?, ?)
',
[$user['UID'], $question]
);
if (!$result) {
engelsystem_error(_('Unable to save question.'));
}
success(_('You question was saved.'));
redirect(page_link_to('user_questions'));
} else {
@ -67,11 +65,11 @@ function user_questions()
return error(_('Incomplete call, missing Question ID.'), true);
}
$question = DB::select(
$question = DB::selectOne(
'SELECT `UID` FROM `Questions` WHERE `QID`=? LIMIT 1',
[$question_id]
);
if (count($question) > 0 && $question[0]['UID'] == $user['UID']) {
if (!empty($question) && $question['UID'] == $user['UID']) {
DB::delete(
'DELETE FROM `Questions` WHERE `QID`=? LIMIT 1',
[$question_id]

View File

@ -84,6 +84,7 @@ function user_settings_main($user_source, $enable_tshirt_size, $tshirt_sizes)
if ($valid) {
User_update($user_source);
success(_('Settings saved.'));
redirect(page_link_to('user_settings'));
}
@ -108,10 +109,9 @@ function user_settings_password($user_source)
error(_('Your password is to short (please use at least 6 characters).'));
} elseif ($request->postData('new_password') != $request->postData('new_password2')) {
error(_('Your passwords don\'t match.'));
} elseif (set_password($user_source['UID'], $request->postData('new_password'))) {
success(_('Password saved.'));
} else {
error(_('Failed setting password.'));
set_password($user_source['UID'], $request->postData('new_password'));
success(_('Password saved.'));
}
redirect(page_link_to('user_settings'));
}

View File

@ -11,10 +11,9 @@ function load_auth()
$user = null;
if (isset($_SESSION['uid'])) {
$user = DB::select('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$_SESSION['uid']]);
if (count($user) > 0) {
$user = DB::selectOne('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$_SESSION['uid']]);
if (!empty($user)) {
// User ist eingeloggt, Datensatz zur Verfügung stellen und Timestamp updaten
$user = array_shift($user);
DB::update('
UPDATE `User`
SET `lastLogIn` = ?
@ -55,11 +54,10 @@ function generate_salt($length = 16)
*
* @param int $uid
* @param string $password
* @return bool
*/
function set_password($uid, $password)
{
$result = DB::update('
DB::update('
UPDATE `User`
SET `Passwort` = ?,
`password_recovery_token`=NULL
@ -71,10 +69,6 @@ function set_password($uid, $password)
$uid
]
);
if (DB::getStm()->errorCode() != '00000') {
engelsystem_error('Unable to update password.');
}
return $result;
}
/**

View File

@ -411,7 +411,7 @@ function html_select_key($dom_id, $name, $rows, $selected)
{
$html = '<select class="form-control" id="' . $dom_id . '" name="' . $name . '">';
foreach ($rows as $key => $row) {
if (($key == $selected) || ($row == $selected)) {
if (($key == $selected) || ($row === $selected)) {
$html .= '<option value="' . $key . '" selected="selected">' . $row . '</option>';
} else {
$html .= '<option value="' . $key . '">' . $row . '</option>';

View File

@ -184,7 +184,6 @@ function AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $a
$members_unconfirmed = [];
foreach ($members as $member) {
$member['Nick'] = User_Nick_render($member);
if ($angeltype['requires_driver_license']) {
$member['wants_to_drive'] = glyph_bool($member['wants_to_drive']);
$member['has_car'] = glyph_bool($member['has_car']);

View File

@ -2,6 +2,8 @@
namespace Engelsystem;
use Exception;
/**
* Represents a single lane in a shifts calendar.
*/
@ -38,15 +40,15 @@ class ShiftCalendarLane
* Returns true on success.
*
* @param array $shift The shift to add
* @return boolean true on success
* @throws Exception if the shift doesn't fit into the lane.
*/
public function addShift($shift)
{
if ($this->shiftFits($shift)) {
$this->shifts[] = $shift;
return true;
return;
}
return false;
throw new Exception('Unable to add shift to shift calendar lane.');
}
/**

View File

@ -1,9 +1,11 @@
<?php
namespace Engelsystem;
use Exception;
class ShiftCalendarRenderer
{
/**
* 15m * 60s/m = 900s
*/
@ -49,9 +51,9 @@ class ShiftCalendarRenderer
/**
* ShiftCalendarRenderer constructor.
*
* @param array[] $shifts
* @param array[] $needed_angeltypes
* @param array[] $shift_entries
* @param array[] $shifts
* @param array[] $needed_angeltypes
* @param array[] $shift_entries
* @param ShiftsFilter $shiftsFilter
*/
public function __construct($shifts, $needed_angeltypes, $shift_entries, ShiftsFilter $shiftsFilter)
@ -67,7 +69,8 @@ class ShiftCalendarRenderer
/**
* Assigns the shifts to different lanes per room if they collide
*
* @param array[] $shifts The shifts to assign
* @param array[] $shifts
* The shifts to assign
*
* @return array Returns an array that assigns a room_id to an array of ShiftCalendarLane containing the shifts
*/
@ -79,10 +82,10 @@ class ShiftCalendarRenderer
foreach ($shifts as $shift) {
$room_id = $shift['RID'];
$header = Room_name_render([
'RID' => $room_id,
'RID' => $room_id,
'Name' => $shift['room_name']
]);
if (!isset($lanes[$room_id])) {
if (! isset($lanes[$room_id])) {
// initialize room with one lane
$lanes[$room_id] = [
new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot())
@ -92,17 +95,16 @@ class ShiftCalendarRenderer
$shift_added = false;
foreach ($lanes[$room_id] as $lane) {
/** @var ShiftCalendarLane $lane */
$shift_added = $lane->addShift($shift);
if ($shift_added == true) {
if($lane->shiftFits($shift)) {
$lane->addShift($shift);
$shift_added = true;
break;
}
}
// If all lanes for this room are busy, create a new lane and add shift to it
if ($shift_added == false) {
$newLane = new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot());
if (!$newLane->addShift($shift)) {
engelsystem_error('Unable to add shift to new lane.');
}
$newLane->addShift($shift);
$lanes[$room_id][] = $newLane;
}
}
@ -111,6 +113,7 @@ class ShiftCalendarRenderer
}
/**
*
* @return int
*/
public function getFirstBlockStartTime()
@ -119,6 +122,7 @@ class ShiftCalendarRenderer
}
/**
*
* @return int
*/
public function getLastBlockEndTime()
@ -127,6 +131,7 @@ class ShiftCalendarRenderer
}
/**
*
* @return float
*/
public function getBlocksPerSlot()
@ -148,9 +153,9 @@ class ShiftCalendarRenderer
return '';
}
return div('shift-calendar', [
$this->renderTimeLane(),
$this->renderShiftLanes()
]) . $this->renderLegend();
$this->renderTimeLane(),
$this->renderShiftLanes()
]) . $this->renderLegend();
}
/**
@ -173,7 +178,8 @@ class ShiftCalendarRenderer
/**
* Renders a single lane
*
* @param ShiftCalendarLane $lane The lane to render
* @param ShiftCalendarLane $lane
* The lane to render
* @return string
*/
private function renderLane(ShiftCalendarLane $lane)
@ -190,12 +196,7 @@ class ShiftCalendarRenderer
$rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW;
}
list($shift_height, $shift_html) = $shift_renderer->render(
$shift,
$this->needed_angeltypes[$shift['SID']],
$this->shift_entries[$shift['SID']],
$user
);
list ($shift_height, $shift_html) = $shift_renderer->render($shift, $this->needed_angeltypes[$shift['SID']], $this->shift_entries[$shift['SID']], $user);
$html .= $shift_html;
$rendered_until += $shift_height * ShiftCalendarRenderer::SECONDS_PER_ROW;
}
@ -214,21 +215,23 @@ class ShiftCalendarRenderer
/**
* Renders a tick/block for given time
*
* @param int $time unix timestamp
* @param boolean $label Should time labels be generated?
* @param int $time
* unix timestamp
* @param boolean $label
* Should time labels be generated?
* @return string rendered tick html
*/
private function renderTick($time, $label = false)
{
if ($time % (24 * 60 * 60) == 23 * 60 * 60) {
if (!$label) {
if (! $label) {
return div('tick day');
}
return div('tick day', [
date('m-d<b\r />H:i', $time)
]);
} elseif ($time % (60 * 60) == 0) {
if (!$label) {
if (! $label) {
return div('tick hour');
}
return div('tick hour', [
@ -250,7 +253,7 @@ class ShiftCalendarRenderer
_('Time')
])
];
for ($block = 0; $block < $this->getBlocksPerSlot(); $block++) {
for ($block = 0; $block < $this->getBlocksPerSlot(); $block ++) {
$thistime = $this->getFirstBlockStartTime() + ($block * ShiftCalendarRenderer::SECONDS_PER_ROW);
$time_slot[] = $this->renderTick($thistime, true);
}
@ -258,6 +261,7 @@ class ShiftCalendarRenderer
}
/**
*
* @param array[] $shifts
* @return int
*/
@ -273,6 +277,7 @@ class ShiftCalendarRenderer
}
/**
*
* @param array[] $shifts
* @return int
*/
@ -288,6 +293,7 @@ class ShiftCalendarRenderer
}
/**
*
* @return int
*/
private function calcBlocksPerSlot()

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
@ -1095,7 +1095,6 @@ a:focus {
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -2524,7 +2523,6 @@ select[size] {
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -3015,7 +3013,6 @@ select[multiple].input-lg {
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@ -22,8 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
@ -1118,7 +1118,6 @@ a:focus {
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -2547,7 +2546,6 @@ select[size] {
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -3038,7 +3036,6 @@ select[multiple].input-lg {
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
@ -1095,7 +1095,6 @@ a:focus {
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -2524,7 +2523,6 @@ select[size] {
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -3015,7 +3013,6 @@ select[multiple].input-lg {
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@ -8,8 +8,8 @@
color: #000;
}
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
@ -1104,7 +1104,6 @@ a:focus {
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -2533,7 +2532,6 @@ select[size] {
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -3024,7 +3022,6 @@ select[multiple].input-lg {
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@ -22,8 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
@ -1118,7 +1118,6 @@ a:focus {
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -2547,7 +2546,6 @@ select[size] {
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
@ -3038,7 +3036,6 @@ select[multiple].input-lg {
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@ -80,18 +80,35 @@ class Db
return self::$stm->fetchAll(PDO::FETCH_ASSOC);
}
/**
* Run a select query and return only the first result or null if no result is found.
* @param string $query
* @param array $bindings
* @return array|null
*/
public static function selectOne($query, array $bindings = [])
{
$result = self::select($query, $bindings);
if(empty($result)) {
return null;
}
return array_shift($result);
}
/**
* Run an insert query
*
* @param string $query
* @param array $bindings
* @return int|bool
* @return int Row count
*/
public static function insert($query, array $bindings = [])
{
self::query($query, $bindings);
return (self::$lastStatus ? self::$stm->rowCount() : false);
return self::$stm->rowCount();
}
/**
@ -99,13 +116,13 @@ class Db
*
* @param string $query
* @param array $bindings
* @return int|bool
* @return int
*/
public static function update($query, array $bindings = [])
{
self::query($query, $bindings);
return (self::$lastStatus ? self::$stm->rowCount() : false);
return self::$stm->rowCount();
}
/**
@ -113,13 +130,13 @@ class Db
*
* @param string $query
* @param array $bindings
* @return int|bool
* @return int
*/
public static function delete($query, array $bindings = [])
{
self::query($query, $bindings);
return (self::$lastStatus ? self::$stm->rowCount() : false);
return self::$stm->rowCount();
}
/**

View File

@ -2,7 +2,7 @@
namespace Engelsystem\Exceptions;
use Exception;
use Throwable;
class Handler
{
@ -40,9 +40,9 @@ class Handler
}
/**
* @param Exception $e
* @param Throwable $e
*/
public function exceptionHandler(Exception $e)
public function exceptionHandler(Throwable $e)
{
$this->handle(
'exception',