/**
  * @task edit
  */
 public function changePassword(PhabricatorUser $user, PhutilOpaqueEnvelope $envelope)
 {
     if (!$user->getID()) {
         throw new Exception("User has not been created yet!");
     }
     $user->openTransaction();
     $user->reload();
     $user->setPassword($envelope);
     $user->save();
     $log = PhabricatorUserLog::newLog($this->actor, $user, PhabricatorUserLog::ACTION_CHANGE_PASSWORD);
     $log->save();
     $user->saveTransaction();
 }
// it.
phutil_passthru('stty -echo');
$password = phutil_console_prompt("Enter a password for this user [blank to leave unchanged]:");
phutil_passthru('stty echo');
if (strlen($password)) {
    $changed_pass = $password;
}
$is_admin = $user->getIsAdmin();
$set_admin = phutil_console_confirm('Should this user be an administrator?', $default_no = !$is_admin);
$user->setIsAdmin($set_admin);
echo "\n\nACCOUNT SUMMARY\n\n";
$tpl = "%12s   %-30s   %-30s\n";
printf($tpl, null, 'OLD VALUE', 'NEW VALUE');
printf($tpl, 'Username', $original->getUsername(), $user->getUsername());
printf($tpl, 'Real Name', $original->getRealName(), $user->getRealName());
printf($tpl, 'Email', $original->getEmail(), $user->getEmail());
printf($tpl, 'Password', null, $changed_pass !== false ? 'Updated' : 'Unchanged');
printf($tpl, 'Admin', $original->getIsAdmin() ? 'Y' : 'N', $user->getIsAdmin() ? 'Y' : 'N');
echo "\n";
if (!phutil_console_confirm("Save these changes?", $default_no = false)) {
    echo "Cancelled.\n";
    exit(1);
}
$user->save();
if ($changed_pass !== false) {
    // This must happen after saving the user because we use their PHID as a
    // component of the password hash.
    $user->setPassword($changed_pass);
    $user->save();
}
echo "Saved changes.\n";