Add "User::block()" to console command
authornupplaPhil <admin+github@philipp.info>
Fri, 21 Feb 2020 22:12:07 +0000 (23:12 +0100)
committernupplaPhil <admin+github@philipp.info>
Sat, 29 Feb 2020 16:10:28 +0000 (17:10 +0100)
src/Console/User.php
src/Model/User.php
src/Module/Admin/Users.php

index 85aad7e..2c0e1ad 100644 (file)
@@ -60,6 +60,8 @@ Usage
        bin/console user add [<name> [<nickname> [<email> [<language>]]]] [-h|--help|-?] [-v]
        bin/console user allow [<nickname>] [-h|--help|-?] [-v]
        bin/console user deny [<nickname>] [-h|--help|-?] [-v]
+       bin/console user block [<nickname>] [-h|--help|-?] [-v]
+       bin/console user unblock [<nickname>] [-h|--help|-?] [-v]
 
 Description
        Modify user settings per console commands.
@@ -108,6 +110,10 @@ HELP;
                                return $this->pendingUser(true);
                        case 'deny':
                                return $this->pendingUser(false);
+                       case 'block':
+                               return $this->blockUser(true);
+                       case 'unblock':
+                               return $this->blockUser(false);
                        default:
                                throw new \Asika\SimpleConsole\CommandArgsException('Wrong command.');
                }
@@ -210,7 +216,7 @@ HELP;
         * @return bool True, if allow was successful
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public function pendingUser(bool $allow = true)
+       private function pendingUser(bool $allow = true)
        {
                $nick = $this->getArgument(1);
 
@@ -234,4 +240,32 @@ HELP;
 
                return ($allow) ? UserModel::allow($pending['hash']) : UserModel::deny($pending['hash']);
        }
+
+       /**
+        * Blocks/unblocks a user
+        *
+        * @param bool $block True, if the given user should get blocked
+        *
+        * @return bool True, if the command was successful
+        * @throws \Exception
+        */
+       private function blockUser(bool $block = true)
+       {
+               $nick = $this->getArgument(1);
+
+               if (!$nick) {
+                       $this->out($this->l10n->t('Enter user nickname: '));
+                       $nick = CliPrompt::prompt();
+                       if (empty($nick)) {
+                               throw new RuntimeException('A nick name must be set.');
+                       }
+               }
+
+               $user = $this->dba->selectFirst('user', ['uid'], ['nickname' => $nick]);
+               if (empty($user)) {
+                       throw new RuntimeException($this->l10n->t('User not found'));
+               }
+
+               return $block ? UserModel::block($user['uid'] ?? 0) : UserModel::block($user['uid'] ?? 0, false);
+       }
 }
index b1736a7..4c4534b 100644 (file)
@@ -894,7 +894,7 @@ class User
         */
        public static function block(int $uid, bool $block = true)
        {
-               return DBA::update('user', ['blocked' => 0], ['uid' => $uid]);
+               return DBA::update('user', ['blocked' => $block], ['uid' => $uid]);
        }
 
        /**
@@ -1150,11 +1150,11 @@ class User
        }
 
        /**
-        * @param object $uid user to remove
+        * @param int $uid user to remove
         * @return bool
         * @throws InternalServerErrorException
         */
-       public static function remove($uid)
+       public static function remove(int $uid)
        {
                if (!$uid) {
                        return false;
index bc99be2..d859469 100644 (file)
@@ -130,14 +130,12 @@ class Users extends BaseAdmin
                                        break;
                                case 'block':
                                        parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
-                                       // @TODO Move this to Model\User:block([$uid]);
-                                       DBA::update('user', ['blocked' => 1], ['uid' => $uid]);
+                                       User::block($uid);
                                        notice(DI::l10n()->t('User "%s" blocked', $user['username']));
                                        break;
                                case 'unblock':
                                        parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
-                                       // @TODO Move this to Model\User:unblock([$uid]);
-                                       DBA::update('user', ['blocked' => 0], ['uid' => $uid]);
+                                       User::block($uid, false);
                                        notice(DI::l10n()->t('User "%s" unblocked', $user['username']));
                                        break;
                        }