From 8dca5cdb5a04e01fc9f63e5302a1dc06e1b105db Mon Sep 17 00:00:00 2001 From: vrana Date: Fri, 18 May 2012 11:51:24 -0700 Subject: [PATCH] Add Conduit method to disable user Summary: There's no method for enabling users somewhat intentionally. Test Plan: Disable myself (oops, this is probably my last diff ever). Reviewers: btrahan Reviewed By: btrahan CC: aran, epriestley Differential Revision: https://secure.phabricator.com/D2497 --- src/__phutil_library_map__.php | 2 + .../ConduitAPI_user_disable_Method.php | 67 +++++++++++++++++++ .../conduit/method/user/disable/__init__.php | 16 +++++ 3 files changed, 85 insertions(+) create mode 100644 src/applications/conduit/method/user/disable/ConduitAPI_user_disable_Method.php create mode 100644 src/applications/conduit/method/user/disable/__init__.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 849bcc992f..4d4e6d2dd8 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -184,6 +184,7 @@ phutil_register_library_map(array( 'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/info', 'ConduitAPI_user_Method' => 'applications/conduit/method/user/base', 'ConduitAPI_user_addstatus_Method' => 'applications/conduit/method/user/addstatus', + 'ConduitAPI_user_disable_Method' => 'applications/conduit/method/user/disable', 'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find', 'ConduitAPI_user_getcurrentstatus_Method' => 'applications/conduit/method/user/getcurrentstatus', 'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info', @@ -1217,6 +1218,7 @@ phutil_register_library_map(array( 'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod', 'ConduitAPI_user_Method' => 'ConduitAPIMethod', 'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method', + 'ConduitAPI_user_disable_Method' => 'ConduitAPI_user_Method', 'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method', 'ConduitAPI_user_getcurrentstatus_Method' => 'ConduitAPI_user_Method', 'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method', diff --git a/src/applications/conduit/method/user/disable/ConduitAPI_user_disable_Method.php b/src/applications/conduit/method/user/disable/ConduitAPI_user_disable_Method.php new file mode 100644 index 0000000000..29c32016ec --- /dev/null +++ b/src/applications/conduit/method/user/disable/ConduitAPI_user_disable_Method.php @@ -0,0 +1,67 @@ + 'required list', + ); + } + + public function defineReturnType() { + return 'void'; + } + + public function defineErrorTypes() { + return array( + 'ERR-PERMISSIONS' => 'Only admins can call this method.', + 'ERR-BAD-PHID' => 'Non existent user PHID.', + ); + } + + protected function execute(ConduitAPIRequest $request) { + if (!$request->getUser()->getIsAdmin()) { + throw new ConduitException('ERR-PERMISSIONS'); + } + + $phids = $request->getValue('phids'); + + $users = id(new PhabricatorUser())->loadAllWhere( + 'phid IN (%Ls)', + $phids); + + if (count($phids) != count($users)) { + throw new ConduitException('ERR-BAD-PHID'); + } + + foreach ($users as $user) { + $user->setIsDisabled(true); + $user->save(); + } + } + +} diff --git a/src/applications/conduit/method/user/disable/__init__.php b/src/applications/conduit/method/user/disable/__init__.php new file mode 100644 index 0000000000..c8554888c6 --- /dev/null +++ b/src/applications/conduit/method/user/disable/__init__.php @@ -0,0 +1,16 @@ +