/** * User joining an Angeltype (Or Coordinator doing this for him). */ function user_angeltype_add_controller() { global $user, $privileges; if (!isset($_REQUEST['angeltype_id'])) { error(_("Angeltype doesn't exist.")); 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')); } if (User_is_AngelType_coordinator($user, $angeltype)) { // Allow to add any user $user_id = $user['UID']; $users_source = Users_by_angeltype_inverted($angeltype); if ($users_source === false) { engelsystem_error("Unable to load users."); } if (isset($_REQUEST['submit'])) { $ok = 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 { $ok = false; error(_("Please select a user.")); } if ($ok) { 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 array(_("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 ($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 array(sprintf(_("Become a %s"), $angeltype['name']), UserAngelType_join_view($user, $angeltype)); } }
/** * Change an Angeltype. */ function angeltype_edit_controller() { global $privileges, $user; $name = ""; $restricted = false; $description = ""; if (isset($_REQUEST['angeltype_id'])) { $angeltype = AngelType($_REQUEST['angeltype_id']); if ($angeltype === false) { engelsystem_error("Unable to load angeltype."); } if ($angeltype == null) { redirect(page_link_to('angeltypes')); } $name = $angeltype['name']; $restricted = $angeltype['restricted']; $description = $angeltype['description']; if (!User_is_AngelType_coordinator($user, $angeltype)) { redirect(page_link_to('angeltypes')); } } else { if (!in_array('admin_angel_types', $privileges)) { redirect(page_link_to('angeltypes')); } } // In coordinator mode only allow to modify description $coordinator_mode = !in_array('admin_angel_types', $privileges); if (isset($_REQUEST['submit'])) { $ok = true; if (!$coordinator_mode) { if (isset($_REQUEST['name'])) { list($valid, $name) = AngelType_validate_name($_REQUEST['name'], $angeltype); if (!$valid) { $ok = false; error(_("Please check the name. Maybe it already exists.")); } } $restricted = isset($_REQUEST['restricted']); } if (isset($_REQUEST['description'])) { $description = strip_request_item_nl('description'); } if ($ok) { $restricted = $restricted ? 1 : 0; if (isset($angeltype)) { $result = AngelType_update($angeltype['id'], $name, $restricted, $description); if ($result === false) { engelsystem_error("Unable to update angeltype."); } engelsystem_log("Updated angeltype: " . $name . ", restricted: " . $restricted); $angeltype_id = $angeltype['id']; } else { $angeltype_id = AngelType_create($name, $restricted, $description); if ($angeltype_id === false) { engelsystem_error("Unable to create angeltype."); } engelsystem_log("Created angeltype: " . $name . ", restricted: " . $restricted); } success("Angel type saved."); redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype_id); } } return array(sprintf(_("Edit %s"), $name), AngelType_edit_view($name, $restricted, $description, $coordinator_mode)); }