allow to delete local user accounts (Mantis#1089)
authorDenis Ovsienko <denis@ovsienko.info>
Mon, 17 Sep 2018 15:52:11 +0000 (16:52 +0100)
committerDenis Ovsienko <denis@ovsienko.info>
Mon, 17 Sep 2018 15:52:11 +0000 (16:52 +0100)
* commitDeleteUserAccount(): new database interface function
* renderUserListEditor(): extend the form with a "delete" button
* deleteUser(): a new ophandler function

ChangeLog
wwwroot/inc/database.php
wwwroot/inc/interface-config.php
wwwroot/inc/navigation.php
wwwroot/inc/ophandlers.php

index 4fb66e4..e5c6c3f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
        update: ability to extend supported device breed list via plug-in
        update: add a server configuration report (same as before install/upgrade)
        update: new modular port type 'SFP28'
+       update: allow to delete local user accounts (Mantis#1089)
        new feature: "shared router" allocation (GH#210 by Vladimir Ivanov)
        new feature: optional tag descriptions
 0.21.1 2017-10-22
index 125cf2c..5c7cb44 100644 (file)
@@ -3382,6 +3382,15 @@ function commitUpdateUserAccount ($id, $new_username, $new_realname, $new_passwo
        );
 }
 
+function commitDeleteUserAccount ($id)
+{
+       if ($id == 1)
+               throw new InvalidArgException ('id', $id, 'belongs to the administrator account');
+       $userinfo = spotEntity ('user', $id);
+       usePreparedDeleteBlade ('UserConfig', array ('user' => $userinfo['user_name']));
+       usePreparedDeleteBlade ('UserAccount', array ('user_id' => $id));
+}
+
 // This function returns an array of all port type pairs from PortCompat table.
 function getPortOIFCompat ($ignore_cache = FALSE)
 {
index f432349..eebee42 100644 (file)
@@ -45,11 +45,18 @@ function renderUserListEditor ()
        $accounts = listCells ('user');
        startPortlet ('Manage existing (' . count ($accounts) . ')');
        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
-       echo '<tr><th>Username</th><th>Real name</th><th>New password (use old if blank)</th><th>&nbsp;</th></tr>';
+       echo '<tr><th>&nbsp;</th><th>Username</th><th>Real name</th><th>New password (use old if blank)</th><th>&nbsp;</th></tr>';
        foreach ($accounts as $account)
        {
                printOpFormIntro ('updateUser', array ('user_id' => $account['user_id']));
-               echo "<tr><td><input type=text name=username value='${account['user_name']}' size=16></td>";
+               echo '<tr>';
+               echo '<td>';
+               if ($account['user_id'] == 1)
+                       printImageHREF ('nodestroy', 'the administrator account cannot be deleted');
+               else
+                       echo getOpLink (array ('op' => 'deleteUser', 'id' => $account['user_id']), '', 'destroy', 'delete user account');
+               echo '</td>';
+               echo "<td><input type=text name=username value='${account['user_name']}' size=16></td>";
                echo "<td><input type=text name=realname value='${account['user_realname']}' size=24></td>";
                echo "<td><input type=password name=password size=40></td><td>";
                printImageHREF ('save', 'Save changes', TRUE);
index 0e58903..00b47e7 100644 (file)
@@ -516,6 +516,7 @@ $tabhandler['userlist']['default'] = 'renderUserList';
 $tabhandler['userlist']['edit'] = 'renderUserListEditor';
 $ophandler['userlist']['edit']['updateUser'] = 'updateUser';
 $ophandler['userlist']['edit']['createUser'] = 'createUser';
+$ophandler['userlist']['edit']['deleteUser'] = 'deleteUser';
 $interface_requires['userlist-*'] = 'interface-config.php';
 
 $page['user']['parent'] = 'userlist';
index a56ab82..60c89d5 100644 (file)
@@ -1088,6 +1088,15 @@ function updateUser ()
        showFuncMessage (__FUNCTION__, 'OK', array ($username));
 }
 
+function deleteUser ()
+{
+       setFuncMessages (__FUNCTION__, array ('OK' => 7));
+       $user_id = genericAssertion ('id', 'natural');
+       $userinfo = spotEntity ('user', $user_id);
+       commitDeleteUserAccount ($user_id);
+       showFuncMessage (__FUNCTION__, 'OK', array ($userinfo['user_name']));
+}
+
 function supplementAttrMap ()
 {
        setFuncMessages (__FUNCTION__, array ('OK' => 48, 'ERR1' => 154));