simplify user_angeltype_add_controller

main
msquare 8 years ago
parent 9fce3b22aa
commit 1debe567f5

@ -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;
}
?>

@ -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();
$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'));
// User is joining by itself
if (! User_is_AngelType_coordinator($user, $angeltype)) {
return user_angeltype_join_controller($angeltype);
}
if (User_is_AngelType_coordinator($user, $angeltype)) {
// Allow to add any user
$user_id = $user['UID'];
// Allow to add any user
$users_source = Users_by_angeltype_inverted($angeltype);
if ($users_source === false) {
engelsystem_error("Unable to load users.");
}
// Default selection
$user_source = $user;
if (isset($_REQUEST['submit'])) {
$valid = true;
// 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 (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 (isset($_REQUEST['submit'])) {
$user_source = load_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)
];
}
/**

@ -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;
}
?>

@ -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.
*

Loading…
Cancel
Save