+
+ /**
+ * Pull the primary site account to use in single-user mode.
+ * If a valid user nickname is listed in 'singleuser':'nickname'
+ * in the config, this will be used; otherwise the site owner
+ * account is taken by default.
+ *
+ * @return User
+ * @throws ServerException if no valid single user account is present
+ * @throws ServerException if called when not in single-user mode
+ */
+ static function singleUser()
+ {
+ if (common_config('singleuser', 'enabled')) {
+
+ $user = null;
+
+ $nickname = common_config('singleuser', 'nickname');
+
+ if (!empty($nickname)) {
+ $user = User::staticGet('nickname', $nickname);
+ }
+
+ // if there was no nickname or no user by that nickname,
+ // try the site owner.
+
+ if (empty($user)) {
+ $user = User::siteOwner();
+ }
+
+ if (!empty($user)) {
+ return $user;
+ } else {
+ // TRANS: Server exception.
+ throw new ServerException(_('No single user defined for single-user mode.'));
+ }
+ } else {
+ // TRANS: Server exception.
+ throw new ServerException(_('Single-user mode code called when not enabled.'));
+ }
+ }
+
+ /**
+ * This is kind of a hack for using external setup code that's trying to
+ * build single-user sites.
+ *
+ * Will still return a username if the config singleuser/nickname is set
+ * even if the account doesn't exist, which normally indicates that the
+ * site is horribly misconfigured.
+ *
+ * At the moment, we need to let it through so that router setup can
+ * complete, otherwise we won't be able to create the account.
+ *
+ * This will be easier when we can more easily create the account and
+ * *then* switch the site to 1user mode without jumping through hoops.
+ *
+ * @return string
+ * @throws ServerException if no valid single user account is present
+ * @throws ServerException if called when not in single-user mode
+ */
+ static function singleUserNickname()
+ {
+ try {
+ $user = User::singleUser();
+ return $user->nickname;
+ } catch (Exception $e) {
+ if (common_config('singleuser', 'enabled') && common_config('singleuser', 'nickname')) {
+ common_log(LOG_WARN, "Warning: code attempting to pull single-user nickname when the account does not exist. If this is not setup time, this is probably a bug.");
+ return common_config('singleuser', 'nickname');
+ }
+ throw $e;
+ }
+ }