diff --git a/scripts/user/account_admin.php b/scripts/user/account_admin.php --- a/scripts/user/account_admin.php +++ b/scripts/user/account_admin.php @@ -200,9 +200,28 @@ $editor->updateUser($user, $verify_email); } - $editor->makeAdminUser($user, $set_admin); $editor->makeSystemAgentUser($user, $set_system_agent); + $xactions = array(); + $xactions[] = id(new PhabricatorUserTransaction()) + ->setTransactionType( + PhabricatorUserEmpowerTransaction::TRANSACTIONTYPE) + ->setNewValue($set_admin); + + $actor = PhabricatorUser::getOmnipotentUser(); + $content_source = PhabricatorContentSource::newForSource( + PhabricatorConsoleContentSource::SOURCECONST); + + $people_application_phid = id(new PhabricatorPeopleApplication())->getPHID(); + + $transaction_editor = id(new PhabricatorUserTransactionEditor()) + ->setActor($actor) + ->setActingAsPHID($people_application_phid) + ->setContentSource($content_source) + ->setContinueOnMissingFields(true); + + $transaction_editor->applyTransactions($user, $xactions); + $user->saveTransaction(); echo pht('Saved changes.')."\n"; diff --git a/src/applications/auth/controller/PhabricatorAuthRegisterController.php b/src/applications/auth/controller/PhabricatorAuthRegisterController.php --- a/src/applications/auth/controller/PhabricatorAuthRegisterController.php +++ b/src/applications/auth/controller/PhabricatorAuthRegisterController.php @@ -416,7 +416,26 @@ } if ($is_setup) { - $editor->makeAdminUser($user, true); + $xactions = array(); + $xactions[] = id(new PhabricatorUserTransaction()) + ->setTransactionType( + PhabricatorUserEmpowerTransaction::TRANSACTIONTYPE) + ->setNewValue(true); + + $actor = PhabricatorUser::getOmnipotentUser(); + $content_source = PhabricatorContentSource::newFromRequest( + $request); + + $people_application_phid = id(new PhabricatorPeopleApplication()) + ->getPHID(); + + $transaction_editor = id(new PhabricatorUserTransactionEditor()) + ->setActor($actor) + ->setActingAsPHID($people_application_phid) + ->setContentSource($content_source) + ->setContinueOnMissingFields(true); + + $transaction_editor->applyTransactions($user, $xactions); } $account->setUserPHID($user->getPHID()); diff --git a/src/applications/people/xaction/PhabricatorUserEmpowerTransaction.php b/src/applications/people/xaction/PhabricatorUserEmpowerTransaction.php --- a/src/applications/people/xaction/PhabricatorUserEmpowerTransaction.php +++ b/src/applications/people/xaction/PhabricatorUserEmpowerTransaction.php @@ -45,7 +45,10 @@ 'status as an administrator.'), $xaction); } - if (!$actor->getIsAdmin()) { + $is_admin = $actor->getIsAdmin(); + $is_omnipotent = $actor->isOmnipotent(); + + if (!$is_admin && !$is_omnipotent) { $errors[] = $this->newInvalidError( pht('You must be an administrator to create administrators.'), $xaction);