diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/controller/angeltypes_controller.php | 21 | ||||
-rw-r--r-- | includes/controller/user_driver_licenses_controller.php | 26 | ||||
-rw-r--r-- | includes/model/AngelType_model.php | 17 | ||||
-rw-r--r-- | includes/model/UserAngelTypes_model.php | 6 | ||||
-rw-r--r-- | includes/model/User_model.php | 4 | ||||
-rw-r--r-- | includes/sys_menu.php | 4 | ||||
-rw-r--r-- | includes/view/AngelTypes_view.php | 75 |
7 files changed, 113 insertions, 40 deletions
diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index 16f0a4f2..0fdbaa28 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -97,6 +97,7 @@ function angeltype_edit_controller() { $name = ""; $restricted = false; $description = ""; + $requires_driver_license = false; if (isset($_REQUEST['angeltype_id'])) { $angeltype = AngelType($_REQUEST['angeltype_id']); @@ -108,6 +109,7 @@ function angeltype_edit_controller() { $name = $angeltype['name']; $restricted = $angeltype['restricted']; $description = $angeltype['description']; + $requires_driver_license = $angeltype['requires_driver_license']; if (! User_is_AngelType_coordinator($user, $angeltype)) redirect(page_link_to('angeltypes')); @@ -132,6 +134,7 @@ function angeltype_edit_controller() { } $restricted = isset($_REQUEST['restricted']); + $requires_driver_license = isset($_REQUEST['requires_driver_license']); } if (isset($_REQUEST['description'])) @@ -140,26 +143,26 @@ function angeltype_edit_controller() { if ($ok) { $restricted = $restricted ? 1 : 0; if (isset($angeltype)) { - $result = AngelType_update($angeltype['id'], $name, $restricted, $description); + $result = AngelType_update($angeltype['id'], $name, $restricted, $description, $requires_driver_license); if ($result === false) engelsystem_error("Unable to update angeltype."); - engelsystem_log("Updated angeltype: " . $name . ", restricted: " . $restricted); + engelsystem_log("Updated angeltype: " . $name . ($restricted ? ", restricted" : "") . ($requires_driver_license ? ", requires driver license" : "")); $angeltype_id = $angeltype['id']; } else { - $angeltype_id = AngelType_create($name, $restricted, $description); + $angeltype_id = AngelType_create($name, $restricted, $description, $requires_driver_license); if ($angeltype_id === false) engelsystem_error("Unable to create angeltype."); - engelsystem_log("Created angeltype: " . $name . ", restricted: " . $restricted); + engelsystem_log("Created angeltype: " . $name . ($restricted ? ", restricted" : "") . ($requires_driver_license ? ", requires driver license" : "")); } success("Angel type saved."); - redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype_id); + redirect(angeltype_link($angeltype_id)); } } return array( sprintf(_("Edit %s"), $name), - AngelType_edit_view($name, $restricted, $description, $coordinator_mode) + AngelType_edit_view($name, $restricted, $description, $coordinator_mode, $requires_driver_license) ); } @@ -185,13 +188,17 @@ function angeltype_controller() { if ($user_angeltype === false) engelsystem_error("Unable to load user angeltype."); + $user_driver_license = UserDriverLicense($user['UID']); + if ($user_driver_license === false) + engelsystem_error("Unable to load user driver license."); + $members = Users_by_angeltype($angeltype); if ($members === false) engelsystem_error("Unable to load members."); return array( sprintf(_("Team %s"), $angeltype['name']), - AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges) || $user_angeltype['coordinator'], in_array('admin_angel_types', $privileges), $user_angeltype['coordinator']) + AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges) || $user_angeltype['coordinator'], in_array('admin_angel_types', $privileges), $user_angeltype['coordinator'], $user_driver_license, $user) ); } diff --git a/includes/controller/user_driver_licenses_controller.php b/includes/controller/user_driver_licenses_controller.php index b18a78b6..ec094220 100644 --- a/includes/controller/user_driver_licenses_controller.php +++ b/includes/controller/user_driver_licenses_controller.php @@ -1,6 +1,32 @@ <?php /** + * Generates a hint, if user joined angeltypes that require a driving license and the user has no driver license information provided. + */ +function user_driver_license_required_hint() { + global $user; + + $angeltypes = User_angeltypes($user); + if ($angeltypes === false) + engelsystem_error("Unable to load user angeltypes."); + $user_driver_license = UserDriverLicense($user['UID']); + if ($user_driver_license === false) + engelsystem_error("Unable to load user driver license."); + + $driving_license_information_required = false; + foreach ($angeltypes as $angeltype) + if ($angeltype['requires_driver_license']) { + $driving_license_information_required = true; + break; + } + + if ($driving_license_information_required && $user_driver_license == null) + return info(sprintf(_("You joined an angeltype which requires a driving license. Please edit your driving license information here: %s."), '<a href="' . user_driver_license_edit_link() . '">' . _("driving license information") . '</a>'), true); + + return ''; +} + +/** * Route user driver licenses actions. */ function user_driver_licenses_controller() { diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php index 5e7f4fb6..e4aef450 100644 --- a/includes/model/AngelType_model.php +++ b/includes/model/AngelType_model.php @@ -17,15 +17,17 @@ function AngelType_delete($angeltype) { * * @param int $angeltype_id * @param string $name - * @param boolean $restricted + * @param bool $restricted * @param string $description + * @param bool $requires_driver_license */ -function AngelType_update($angeltype_id, $name, $restricted, $description) { +function AngelType_update($angeltype_id, $name, $restricted, $description, $requires_driver_license) { return sql_query(" UPDATE `AngelTypes` SET `name`='" . sql_escape($name) . "', - `restricted`='" . sql_escape($restricted ? 1 : 0) . "', - `description`='" . sql_escape($description) . "' + `restricted`=" . sql_bool($restricted) . ", + `description`='" . sql_escape($description) . "', + `requires_driver_license`=" . sql_bool($requires_driver_license) . " WHERE `id`='" . sql_escape($angeltype_id) . "' LIMIT 1"); } @@ -38,12 +40,13 @@ function AngelType_update($angeltype_id, $name, $restricted, $description) { * @param string $description * @return New Angeltype id */ -function AngelType_create($name, $restricted, $description) { +function AngelType_create($name, $restricted, $description, $requires_driver_license) { $result = sql_query(" INSERT INTO `AngelTypes` SET `name`='" . sql_escape($name) . "', - `restricted`='" . sql_escape($restricted ? 1 : 0) . "', - `description`='" . sql_escape($description) . "'"); + `restricted`=" . sql_bool($restricted) . ", + `description`='" . sql_escape($description) . "', + `requires_driver_license`=" . sql_bool($requires_driver_license)); if ($result === false) return false; return sql_id(); diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php index b2ebd9fe..f942483e 100644 --- a/includes/model/UserAngelTypes_model.php +++ b/includes/model/UserAngelTypes_model.php @@ -1,8 +1,14 @@ <?php + /** * User angeltypes model */ +/** + * List users angeltypes. + * + * @param User $user + */ function User_angeltypes($user) { return sql_select(" SELECT `AngelTypes`.*, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`coordinator` diff --git a/includes/model/User_model.php b/includes/model/User_model.php index bd3ec31f..d051b3e9 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -123,9 +123,11 @@ function Users_by_angeltype($angeltype) { `User`.*, `UserAngelTypes`.`id` as `user_angeltype_id`, `UserAngelTypes`.`confirm_user_id`, - `UserAngelTypes`.`coordinator` + `UserAngelTypes`.`coordinator`, + `UserDriverLicenses`.* FROM `User` JOIN `UserAngelTypes` ON `User`.`UID`=`UserAngelTypes`.`user_id` + LEFT JOIN `UserDriverLicenses` ON `User`.`UID`=`UserDriverLicenses`.`user_id` WHERE `UserAngelTypes`.`angeltype_id`='" . sql_escape($angeltype['id']) . "' ORDER BY `Nick`"); } diff --git a/includes/sys_menu.php b/includes/sys_menu.php index c7ecfb88..b475136d 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -48,6 +48,10 @@ function header_toolbar() { if (! isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) $hints[] = info(_("Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities."), true); + $driver_license_required = user_driver_license_required_hint(); + if ($driver_license_required != '') + $hints[] = $driver_license_required; + if (User_is_freeloader($user)) { $hints[] = error(sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts), true); $hint_class = 'danger'; diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index 758d5706..fae52713 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -50,7 +50,7 @@ function AngelType_delete_view($angeltype) { )); } -function AngelType_edit_view($name, $restricted, $description, $coordinator_mode) { +function AngelType_edit_view($name, $restricted, $description, $coordinator_mode, $requires_driver_license) { return page_with_title(sprintf(_("Edit %s"), $name), array( buttons(array( button(page_link_to('angeltypes'), _("Angeltypes"), 'back') @@ -59,6 +59,7 @@ function AngelType_edit_view($name, $restricted, $description, $coordinator_mode form(array( $coordinator_mode ? form_info(_("Name"), $name) : form_text('name', _("Name"), $name), $coordinator_mode ? form_info(_("Restricted"), $restricted ? _("Yes") : _("No")) : form_checkbox('restricted', _("Restricted"), $restricted), + $coordinator_mode ? form_info(_("Requires driver license"), $requires_driver_license ? _("Yes") : _("No")) : form_checkbox('requires_driver_license', _("Requires driver license"), $requires_driver_license), form_info("", _("Restricted angel types can only be used by an angel if enabled by an archangel (double opt-in).")), form_textarea('description', _("Description"), $description), form_info("", _("Please use markdown for the description.")), @@ -67,14 +68,20 @@ function AngelType_edit_view($name, $restricted, $description, $coordinator_mode )); } -function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $coordinator) { - $buttons = array( +function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $coordinator, $user_driver_license, $user) { + $buttons = [ button(page_link_to('angeltypes'), _("Angeltypes"), 'back') - ); + ]; + + if ($angeltype['requires_driver_license']) + $buttons[] = button(user_driver_license_edit_link($user), glyph("road") . _("my driving license")); if ($user_angeltype == null) $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); else { + if ($angeltype['requires_driver_license'] && $user_driver_license == null) + error(_("This angeltype requires a driver license. Please enter your driver license information!")); + if ($angeltype['restricted'] && $user_angeltype['confirm_user_id'] == null) error(sprintf(_("You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed."), $angeltype['name'])); $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $user_angeltype['id'], _("leave"), 'cancel'); @@ -94,14 +101,23 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel $parsedown = new Parsedown(); if ($angeltype['description'] != "") $page[] = '<div class="well">' . $parsedown->parse($angeltype['description']) . '</div>'; - - // Team-Coordinators list missing $coordinators = array(); $members_confirmed = array(); $members_unconfirmed = array(); foreach ($members as $member) { $member['Nick'] = User_Nick_render($member); + + if ($angeltype['requires_driver_license']) { + $member['wants_to_drive'] = glyph_bool($member['user_id']); + $member['has_car'] = glyph_bool($member['has_car']); + $member['has_license_car'] = glyph_bool($member['has_license_car']); + $member['has_license_3_5t_transporter'] = glyph_bool($member['has_license_3_5t_transporter']); + $member['has_license_7_5t_truck'] = glyph_bool($member['has_license_7_5t_truck']); + $member['has_license_12_5t_truck'] = glyph_bool($member['has_license_12_5t_truck']); + $member['has_license_forklift'] = glyph_bool($member['has_license_forklift']); + } + if ($angeltype['restricted'] && $member['confirm_user_id'] == null) { $member['actions'] = table_buttons([ button(page_link_to('user_angeltypes') . '&action=confirm&user_angeltype_id=' . $member['user_angeltype_id'], _("confirm"), 'btn-xs'), @@ -125,13 +141,30 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel $members_confirmed[] = $member; } } - if (count($coordinators) > 0) { - $page[] = '<h3>' . _("Coordinators") . '</h3>'; - $page[] = table(array( + + $table_headers = [ + 'Nick' => _("Nick"), + 'DECT' => _("DECT"), + 'actions' => '' + ]; + + if ($angeltype['requires_driver_license'] && ($coordinator || $admin_angeltypes)) + $table_headers = [ 'Nick' => _("Nick"), 'DECT' => _("DECT"), - 'actions' => "" - ), $coordinators); + 'wants_to_drive' => _("Driver"), + 'has_car' => _("Has car"), + 'has_license_car' => _("Car"), + 'has_license_3_5t_transporter' => _("3,5t Transporter"), + 'has_license_7_5t_truck' => _("7,5t Truck"), + 'has_license_12_5t_truck' => _("12,5t Truck"), + 'has_license_forklift' => _("Forklift"), + 'actions' => '' + ]; + + if (count($coordinators) > 0) { + $page[] = '<h3>' . _("Coordinators") . '</h3>'; + $page[] = table($table_headers, $coordinators); } if (count($members_confirmed) > 0) @@ -150,26 +183,18 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel $page[] = '<h3>' . _("Members") . '</h3>'; if ($admin_user_angeltypes) - $page[] = buttons(array( + $page[] = buttons([ button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("Add"), 'add') - )); - $page[] = table(array( - 'Nick' => _("Nick"), - 'DECT' => _("DECT"), - 'actions' => "" - ), $members_confirmed); + ]); + $page[] = table($table_headers, $members_confirmed); if ($admin_user_angeltypes && $angeltype['restricted'] && count($members_unconfirmed) > 0) { $page[] = '<h3>' . _("Unconfirmed") . '</h3>'; - $page[] = buttons(array( + $page[] = buttons([ button(page_link_to('user_angeltypes') . '&action=confirm_all&angeltype_id=' . $angeltype['id'], _("confirm all"), 'ok'), button(page_link_to('user_angeltypes') . '&action=delete_all&angeltype_id=' . $angeltype['id'], _("deny all"), 'cancel') - )); - $page[] = table(array( - 'Nick' => _("Nick"), - 'DECT' => _("DECT"), - 'actions' => "" - ), $members_unconfirmed); + ]); + $page[] = table($table_headers, $members_unconfirmed); } return page_with_title(sprintf(_("Team %s"), $angeltype['name']), $page); |