diff --git a/.gitignore b/.gitignore index 43dfe16..f36e7e0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ installer/slave_sfx.py installer/master_sfx.py *.pyc testing +.geanyprj diff --git a/frontend/locales/english.lng b/frontend/locales/english.lng index a35ba55..01262dd 100644 --- a/frontend/locales/english.lng +++ b/frontend/locales/english.lng @@ -248,6 +248,13 @@ admin-level-nodeadmin; Node administrator admin-level-masteradmin; Master administrator header-admin-user-vpses; VPSes owned by this user +## User editing +title-admin-edituser; Edit user +edituser-username; Username +edituser-email; Email address +edituser-access; Account type +button-admin-edituser; Apply changes + ## VPS list title-admin-vpslist; VPS overview list-column-hostname; Hostname diff --git a/frontend/modules/admin/user/edit.php b/frontend/modules/admin/user/edit.php new file mode 100644 index 0000000..9cf61e0 --- /dev/null +++ b/frontend/modules/admin/user/edit.php @@ -0,0 +1,78 @@ +uParameters[1]); +} +catch (NotFoundException $e) +{ + throw new RouterException("Specified user does not exist."); +} + +$sErrors = array(); + +if($router->uMethod == "post") +{ + if(empty($_POST['username']) || preg_match("/^[a-z0-9_.-]+$/i", $_POST['username']) === 0) + { + $sErrors[] = "You did not enter a valid username."; + } + + if(empty($_POST['email']) || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) + { + $sErrors[] = "You did not enter a valid e-mail address."; + } + + if(empty($_POST['access']) || preg_match("/^[0-9]+$/", $_POST['access']) === 0) + { + $sErrors[] = "You did not specify a valid user type."; + } + else + { + if($sUser->sAccessLevel == 30 && $_POST['access'] < 30) + { + /* This user is a master admin, check if any other master admins exist before lowering + * the permissions of this one, to prevent lock-outs. */ + + try + { + User::CreateFromQuery("SELECT * FROM users WHERE `AccessLevel` = 30 AND `Id` != :Id", array(":Id" => $sUser->sId), 0); + } + catch (NotFoundException $e) + { + $sErrors[] = "You can't remove your master administrator permissions if no other master administrators exist!"; + } + } + } + + if(empty($sErrors)) + { + $sUser->uUsername = $_POST['username']; + $sUser->uEmailAddress = $_POST['email']; + $sUser->uAccessLevel = $_POST['access']; + $sUser->InsertIntoDatabase(); + redirect("/admin/user/{$sUser->sId}/"); + } +} + +$sPageContents = NewTemplater::Render("{$sTheme}/admin/user/edit", $locale->strings, array( + "errors" => $sErrors, + "id" => $router->uParameters[1] +), array( + "username" => $sUser->sUsername, + "email" => $sUser->sEmailAddress, + "access" => $sUser->sAccessLevel +)); diff --git a/frontend/rewrite.php b/frontend/rewrite.php index c59a783..4bd6ee6 100644 --- a/frontend/rewrite.php +++ b/frontend/rewrite.php @@ -136,6 +136,13 @@ try 'auth_error' => "modules/error/access.php", '_menu' => "admin" ), + /* Admin - Users - Edit */ + '^/admin/user/([0-9]+)/edit/?$' => array( + 'target' => "modules/admin/user/edit.php", + 'authenticator' => "authenticators/admin.php", + 'auth_error' => "modules/error/access.php", + '_menu' => "admin" + ), /* Admin - Users - Create VPS */ '^/admin/user/([0-9]+)/add/?$' => array( 'target' => "modules/admin/vps/create.php", diff --git a/frontend/templates/default/admin/user/edit.tpl b/frontend/templates/default/admin/user/edit.tpl new file mode 100644 index 0000000..6ada2b7 --- /dev/null +++ b/frontend/templates/default/admin/user/edit.tpl @@ -0,0 +1,45 @@ +

{%!title-admin-edituser}

+ +{%if isempty|errors == false} +
+
{%!error-form}
+
+ +
+
+{%/if} + +
+
+ + {%input type="text" group="edituser" name="username"} +
+
+ +
+ + {%input type="text" group="edituser" name="email"} +
+
+ +
+ + {%select type="text" group="edituser" name="access"} + {%option value="1" text="{%!admin-level-enduser}"} + + {%option value="20" text="{%!admin-level-nodeadmin}"} + {%option value="30" text="{%!admin-level-masteradmin}"} + {%/select} +
+
+ +
+
+ +
+
+