summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2016-09-30 16:55:47 +0200
committermsquare <msquare@notrademark.de>2016-09-30 16:55:47 +0200
commit1debe567f5f9fdeff5a2afbaa4619992da67f437 (patch)
tree285c426c316d726f5f5b05eac4a4af56448aebe4
parent9fce3b22aa76fe68abe81f36b46a763df0535aef (diff)
simplify user_angeltype_add_controller
-rw-r--r--includes/controller/angeltypes_controller.php21
-rw-r--r--includes/controller/user_angeltypes_controller.php155
-rw-r--r--includes/controller/users_controller.php21
-rw-r--r--includes/model/UserAngelTypes_model.php18
4 files changed, 131 insertions, 84 deletions
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();
- $angeltype = AngelType($_REQUEST['angeltype_id']);
- if ($angeltype === false) {
- engelsystem_error("Unable to load angeltype.");
+ // User is joining by itself
+ if (! User_is_AngelType_coordinator($user, $angeltype)) {
+ return user_angeltype_join_controller($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'];
-
- $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['submit'])) {
+ $user_source = load_user();
- 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 [
+ _("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);
- return [
- sprintf(_("Become a %s"), $angeltype['name']),
- UserAngelType_join_view($user, $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)));
+ }
+
+ 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
@@ -5,6 +5,24 @@
*/
/**
+ * 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.
*
* @param User $user