diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index 5607ea7c..cb2bb2fb 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -101,6 +101,7 @@ function angeltype_delete_controller() { function angeltype_edit_controller() { global $privileges, $user; + $angeltype = null; $name = ""; $restricted = false; $description = ""; @@ -266,4 +267,24 @@ function angeltypes_list_controller() { AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges)) ]; } + +/** + * Loads an angeltype from given angeltype_id request param. + */ +function load_angeltype() { + if (! isset($_REQUEST['angeltype_id'])) { + redirect(page_link_to('angeltypes')); + } + + $angeltype = AngelType($_REQUEST['angeltype_id']); + if ($angeltype === false) { + engelsystem_error("Unable to load angeltype."); + } + if ($angeltype == null) { + error(_("Angeltype doesn't exist.")); + redirect(page_link_to('angeltypes')); + } + + return $angeltype; +} ?> diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php index cdd6f951..418f21f9 100644 --- a/includes/controller/user_angeltypes_controller.php +++ b/includes/controller/user_angeltypes_controller.php @@ -310,107 +310,94 @@ function user_angeltype_update_controller() { * User joining an Angeltype (Or Coordinator doing this for him). */ function user_angeltype_add_controller() { - global $user, $privileges; + global $user; - if (! isset($_REQUEST['angeltype_id'])) { - error(_("Angeltype doesn't exist.")); - redirect(page_link_to('angeltypes')); + $angeltype = load_angeltype(); + + // User is joining by itself + if (! User_is_AngelType_coordinator($user, $angeltype)) { + return user_angeltype_join_controller($angeltype); } - $angeltype = AngelType($_REQUEST['angeltype_id']); - if ($angeltype === false) { - engelsystem_error("Unable to load angeltype."); - } - if ($angeltype == null) { - error(_("Angeltype doesn't exist.")); - redirect(page_link_to('angeltypes')); + // Allow to add any user + + // Default selection + $user_source = $user; + + // Load possible users, that are not in the angeltype already + $users_source = Users_by_angeltype_inverted($angeltype); + if ($users_source === false) { + engelsystem_error("Unable to load users."); } - if (User_is_AngelType_coordinator($user, $angeltype)) { - // Allow to add any user - $user_id = $user['UID']; + if (isset($_REQUEST['submit'])) { + $user_source = load_user(); - $users_source = Users_by_angeltype_inverted($angeltype); - if ($users_source === false) { - engelsystem_error("Unable to load users."); - } - - if (isset($_REQUEST['submit'])) { - $valid = true; - - if (isset($_REQUEST['user_id']) && in_array($_REQUEST['user_id'], array_map(function ($user) { - return $user['UID']; - }, $users_source))) { - $user_id = $_REQUEST['user_id']; - } else { - $valid = false; - error(_("Please select a user.")); - } - - if ($valid) { - foreach ($users_source as $user_source) { - if ($user_source['UID'] == $user_id) { - $user_angeltype_id = UserAngelType_create($user_source, $angeltype); - if ($user_angeltype_id === false) { - engelsystem_error("Unable to create user angeltype."); - } - - engelsystem_log(sprintf("User %s added to %s.", User_Nick_render($user_source), AngelType_name_render($angeltype))); - success(sprintf(_("User %s added to %s."), User_Nick_render($user_source), AngelType_name_render($angeltype))); - - $result = UserAngelType_confirm($user_angeltype_id, $user_source); - if ($result === false) { - engelsystem_error("Unable to confirm user angeltype."); - } - engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); - - redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); - } - } - } - } - - return [ - _("Add user to angeltype"), - UserAngelType_add_view($angeltype, $users_source, $user_id) - ]; - } else { - // Allow only me - $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); - if ($user_angeltype === false) { - engelsystem_error("Unable to load user angeltype."); - } - if ($user_angeltype != null) { - error(sprintf(_("You are already a %s."), $angeltype['name'])); - redirect(page_link_to('angeltypes')); - } - - if (isset($_REQUEST['confirmed'])) { - $user_angeltype_id = UserAngelType_create($user, $angeltype); + if (! UserAngelType_exists($user_source, $angeltype)) { + $user_angeltype_id = UserAngelType_create($user_source, $angeltype); if ($user_angeltype_id === false) { engelsystem_error("Unable to create user angeltype."); } - $success_message = sprintf(_("You joined %s."), $angeltype['name']); - engelsystem_log(sprintf("User %s joined %s.", User_Nick_render($user), AngelType_name_render($angeltype))); - success($success_message); + engelsystem_log(sprintf("User %s added to %s.", User_Nick_render($user_source), AngelType_name_render($angeltype))); + success(sprintf(_("User %s added to %s."), User_Nick_render($user_source), AngelType_name_render($angeltype))); - if (in_array('admin_user_angeltypes', $privileges)) { - $result = UserAngelType_confirm($user_angeltype_id, $user); - if ($result === false) { - engelsystem_error("Unable to confirm user angeltype."); - } - engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); + $result = UserAngelType_confirm($user_angeltype_id, $user_source); + if ($result === false) { + engelsystem_error("Unable to confirm user angeltype."); } + engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - - return [ - sprintf(_("Become a %s"), $angeltype['name']), - UserAngelType_join_view($user, $angeltype) - ]; } + + return [ + _("Add user to angeltype"), + UserAngelType_add_view($angeltype, $users_source, $user_source['UID']) + ]; +} + +/** + * A user joins an angeltype. + */ +function user_angeltype_join_controller($angeltype) { + global $user, $privileges; + + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); + if ($user_angeltype === false) { + engelsystem_error("Unable to load user angeltype."); + } + if ($user_angeltype != null) { + error(sprintf(_("You are already a %s."), $angeltype['name'])); + redirect(page_link_to('angeltypes')); + } + + if (isset($_REQUEST['confirmed'])) { + $user_angeltype_id = UserAngelType_create($user, $angeltype); + if ($user_angeltype_id === false) { + engelsystem_error("Unable to create user angeltype."); + } + + $success_message = sprintf(_("You joined %s."), $angeltype['name']); + engelsystem_log(sprintf("User %s joined %s.", User_Nick_render($user), AngelType_name_render($angeltype))); + success($success_message); + + if (in_array('admin_user_angeltypes', $privileges)) { + $result = UserAngelType_confirm($user_angeltype_id, $user); + if ($result === false) { + engelsystem_error("Unable to confirm user angeltype."); + } + engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); + } + + redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); + } + + return [ + sprintf(_("Become a %s"), $angeltype['name']), + UserAngelType_join_view($user, $angeltype) + ]; } /** diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php index ca1b8c8d..9ead4bca 100644 --- a/includes/controller/users_controller.php +++ b/includes/controller/users_controller.php @@ -299,4 +299,25 @@ function user_password_recovery_title() { return _("Password recovery"); } +/** + * Loads a user from param user_id. + */ +function load_user() { + if (! isset($_REQUEST['user_id'])) { + redirect(page_link_to()); + } + + $user = User($_REQUEST['user_id']); + if ($user === false) { + engelsystem_error("Unable to load user."); + } + + if ($user == null) { + error(_("User doesn't exist.")); + redirect(page_link_to()); + } + + return $user; +} + ?> diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php index d3538f09..fe5293f8 100644 --- a/includes/model/UserAngelTypes_model.php +++ b/includes/model/UserAngelTypes_model.php @@ -4,6 +4,24 @@ * User angeltypes model */ +/** + * Checks if a user joined an angeltype. + * + * @param User $user + * The user to be checked + * @param Angeltype $angeltype + * The angeltype to be checked + * @return boolean + */ +function UserAngelType_exists($user, $angeltype) { + return sql_num_query(" + SELECT `id` + FROM `UserAngelTypes` + WHERE `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "' + AND `angeltype_id`='" . sql_escape($angeltype['id']) . "' + ") > 0; +} + /** * List users angeltypes. *