diff options
Diffstat (limited to 'app/Http/Controllers/AdminUsersController.php')
| -rw-r--r-- | app/Http/Controllers/AdminUsersController.php | 744 |
1 files changed, 379 insertions, 365 deletions
diff --git a/app/Http/Controllers/AdminUsersController.php b/app/Http/Controllers/AdminUsersController.php index ff5679c32a..5b2937e82d 100644 --- a/app/Http/Controllers/AdminUsersController.php +++ b/app/Http/Controllers/AdminUsersController.php @@ -37,435 +37,449 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Controller for user administration. */ -class AdminUsersController extends AbstractBaseController { - const SECONDS_PER_DAY = 24 * 60 * 60; +class AdminUsersController extends AbstractBaseController +{ + const SECONDS_PER_DAY = 24 * 60 * 60; - protected $layout = 'layouts/administration'; + protected $layout = 'layouts/administration'; - /** - * @param Request $request - * - * @return Response - */ - public function cleanup(Request $request): Response { - $months = (int) $request->get('months', 6); + /** + * @param Request $request + * + * @return Response + */ + public function cleanup(Request $request): Response + { + $months = (int)$request->get('months', 6); - $inactive_threshold = time() - $months * 30 * self::SECONDS_PER_DAY; - $unverified_threshold = time() - 7 * self::SECONDS_PER_DAY; + $inactive_threshold = time() - $months * 30 * self::SECONDS_PER_DAY; + $unverified_threshold = time() - 7 * self::SECONDS_PER_DAY; - $users = User::all(); + $users = User::all(); - $inactive_users = array_filter($users, function (User $user) use ($inactive_threshold) { - if ($user->getPreference('sessiontime') === '0') { - $datelogin = (int) $user->getPreference('reg_timestamp'); - } else { - $datelogin = (int) $user->getPreference('sessiontime'); - } + $inactive_users = array_filter($users, function (User $user) use ($inactive_threshold) { + if ($user->getPreference('sessiontime') === '0') { + $datelogin = (int)$user->getPreference('reg_timestamp'); + } else { + $datelogin = (int)$user->getPreference('sessiontime'); + } - return $datelogin < $inactive_threshold && $user->getPreference('verified'); - }); + return $datelogin < $inactive_threshold && $user->getPreference('verified'); + }); - $unverified_users = array_filter($users, function (User $user) use ($unverified_threshold) { - if ($user->getPreference('sessiontime') === '0') { - $datelogin = (int) $user->getPreference('reg_timestamp'); - } else { - $datelogin = (int) $user->getPreference('sessiontime'); - } + $unverified_users = array_filter($users, function (User $user) use ($unverified_threshold) { + if ($user->getPreference('sessiontime') === '0') { + $datelogin = (int)$user->getPreference('reg_timestamp'); + } else { + $datelogin = (int)$user->getPreference('sessiontime'); + } - return $datelogin < $unverified_threshold && !$user->getPreference('verified'); - }); + return $datelogin < $unverified_threshold && !$user->getPreference('verified'); + }); - $options = $this->monthOptions(); + $options = $this->monthOptions(); - $title = I18N::translate('Delete inactive users'); + $title = I18N::translate('Delete inactive users'); - return $this->viewResponse('admin/users-cleanup', [ - 'months' => $months, - 'options' => $options, - 'title' => $title, - 'inactive_users' => $inactive_users, - 'unverified_users' => $unverified_users, - ]); - } + return $this->viewResponse('admin/users-cleanup', [ + 'months' => $months, + 'options' => $options, + 'title' => $title, + 'inactive_users' => $inactive_users, + 'unverified_users' => $unverified_users, + ]); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function cleanupAction(Request $request): RedirectResponse { - foreach (User::all() as $user) { - if ((bool) $request->get('del_' . $user->getUserId())) { - Log::addAuthenticationLog('Deleted user: ' . $user->getUserName()); - $user->delete(); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function cleanupAction(Request $request): RedirectResponse + { + foreach (User::all() as $user) { + if ((bool)$request->get('del_' . $user->getUserId())) { + Log::addAuthenticationLog('Deleted user: ' . $user->getUserName()); + $user->delete(); - FlashMessages::addMessage(I18N::translate('The user %s has been deleted.', e($user->getUserName())), 'success'); - } - } + FlashMessages::addMessage(I18N::translate('The user %s has been deleted.', e($user->getUserName())), 'success'); + } + } - $url = route('admin-users-cleanup'); + $url = route('admin-users-cleanup'); - return new RedirectResponse($url); - } + return new RedirectResponse($url); + } - /** - * @param Request $request - * - * @return Response - */ - public function index(Request $request): Response { - /** @var User $user */ - $user = $request->attributes->get('user'); + /** + * @param Request $request + * + * @return Response + */ + public function index(Request $request): Response + { + /** @var User $user */ + $user = $request->attributes->get('user'); - $filter = $request->get('filter', ''); + $filter = $request->get('filter', ''); - $all_users = User::all(); + $all_users = User::all(); - $page_size = (int) $user->getPreference(' admin_users_page_size', 10); + $page_size = (int)$user->getPreference(' admin_users_page_size', 10); - $title = I18N::translate('User administration'); + $title = I18N::translate('User administration'); - return $this->viewResponse('admin/users', [ - 'all_users' => $all_users, - 'filter' => $filter, - 'page_size' => $page_size, - 'title' => $title, - ]); - } + return $this->viewResponse('admin/users', [ + 'all_users' => $all_users, + 'filter' => $filter, + 'page_size' => $page_size, + 'title' => $title, + ]); + } - /** - * @param Request $request - * - * @return JsonResponse - */ - public function data(Request $request): JsonResponse { - /** @var User $user */ - $user = $request->attributes->get('user'); + /** + * @param Request $request + * + * @return JsonResponse + */ + public function data(Request $request): JsonResponse + { + /** @var User $user */ + $user = $request->attributes->get('user'); - $search = $request->get('search')['value']; - $start = (int) $request->get('start'); - $length = (int) $request->get('length'); - $order = $request->get('order', []); - $draw = (int) $request->get('draw'); + $search = $request->get('search')['value']; + $start = (int)$request->get('start'); + $length = (int)$request->get('length'); + $order = $request->get('order', []); + $draw = (int)$request->get('draw'); - $sql_select = - "SELECT SQL_CALC_FOUND_ROWS '', u.user_id, user_name, real_name, email, us1.setting_value, us2.setting_value, NULL, us3.setting_value, NULL, us4.setting_value, us5.setting_value" . - " FROM `##user` u" . - " LEFT JOIN `##user_setting` us1 ON (u.user_id=us1.user_id AND us1.setting_name='language')" . - " LEFT JOIN `##user_setting` us2 ON (u.user_id=us2.user_id AND us2.setting_name='reg_timestamp')" . - " LEFT JOIN `##user_setting` us3 ON (u.user_id=us3.user_id AND us3.setting_name='sessiontime')" . - " LEFT JOIN `##user_setting` us4 ON (u.user_id=us4.user_id AND us4.setting_name='verified')" . - " LEFT JOIN `##user_setting` us5 ON (u.user_id=us5.user_id AND us5.setting_name='verified_by_admin')" . - " WHERE u.user_id > 0"; + $sql_select = + "SELECT SQL_CALC_FOUND_ROWS '', u.user_id, user_name, real_name, email, us1.setting_value, us2.setting_value, NULL, us3.setting_value, NULL, us4.setting_value, us5.setting_value" . + " FROM `##user` u" . + " LEFT JOIN `##user_setting` us1 ON (u.user_id=us1.user_id AND us1.setting_name='language')" . + " LEFT JOIN `##user_setting` us2 ON (u.user_id=us2.user_id AND us2.setting_name='reg_timestamp')" . + " LEFT JOIN `##user_setting` us3 ON (u.user_id=us3.user_id AND us3.setting_name='sessiontime')" . + " LEFT JOIN `##user_setting` us4 ON (u.user_id=us4.user_id AND us4.setting_name='verified')" . + " LEFT JOIN `##user_setting` us5 ON (u.user_id=us5.user_id AND us5.setting_name='verified_by_admin')" . + " WHERE u.user_id > 0"; - $args = []; + $args = []; - if ($search) { - $sql_select .= " AND (user_name LIKE CONCAT('%', :search_1, '%') OR real_name LIKE CONCAT('%', :search_2, '%') OR email LIKE CONCAT('%', :search_3, '%'))"; - $args['search_1'] = $search; - $args['search_2'] = $search; - $args['search_3'] = $search; - } + if ($search) { + $sql_select .= " AND (user_name LIKE CONCAT('%', :search_1, '%') OR real_name LIKE CONCAT('%', :search_2, '%') OR email LIKE CONCAT('%', :search_3, '%'))"; + $args['search_1'] = $search; + $args['search_2'] = $search; + $args['search_3'] = $search; + } - if ($order) { - $sql_select .= " ORDER BY "; - foreach ($order as $key => $value) { - if ($key > 0) { - $sql_select .= ','; - } - // Columns in datatables are numbered from zero. - // Columns in MySQL are numbered starting with one. - switch ($value['dir']) { - case 'asc': - $sql_select .= (1 + $value['column']) . " ASC "; - break; - case 'desc': - $sql_select .= (1 + $value['column']) . " DESC "; - break; - } - } - } else { - $sql_select = " ORDER BY 1 ASC"; - } + if ($order) { + $sql_select .= " ORDER BY "; + foreach ($order as $key => $value) { + if ($key > 0) { + $sql_select .= ','; + } + // Columns in datatables are numbered from zero. + // Columns in MySQL are numbered starting with one. + switch ($value['dir']) { + case 'asc': + $sql_select .= (1 + $value['column']) . " ASC "; + break; + case 'desc': + $sql_select .= (1 + $value['column']) . " DESC "; + break; + } + } + } else { + $sql_select = " ORDER BY 1 ASC"; + } - if ($length) { - $user->setPreference('admin_users_page_size', $length); - $sql_select .= " LIMIT :limit OFFSET :offset"; - $args['limit'] = $length; - $args['offset'] = $start; - } + if ($length) { + $user->setPreference('admin_users_page_size', $length); + $sql_select .= " LIMIT :limit OFFSET :offset"; + $args['limit'] = $length; + $args['offset'] = $start; + } - // This becomes a JSON list, not array, so need to fetch with numeric keys. - $data = Database::prepare($sql_select)->execute($args)->fetchAll(PDO::FETCH_NUM); + // This becomes a JSON list, not array, so need to fetch with numeric keys. + $data = Database::prepare($sql_select)->execute($args)->fetchAll(PDO::FETCH_NUM); - // Total filtered/unfiltered rows - $recordsFiltered = (int) Database::prepare("SELECT FOUND_ROWS()")->fetchOne(); - $recordsTotal = (int) Database::prepare("SELECT COUNT(*) FROM `##user` WHERE user_id > 0")->fetchOne(); + // Total filtered/unfiltered rows + $recordsFiltered = (int)Database::prepare("SELECT FOUND_ROWS()")->fetchOne(); + $recordsTotal = (int)Database::prepare("SELECT COUNT(*) FROM `##user` WHERE user_id > 0")->fetchOne(); - $installed_languages = []; - foreach (I18N::installedLocales() as $installed_locale) { - $installed_languages[$installed_locale->languageTag()] = $installed_locale->endonym(); - } + $installed_languages = []; + foreach (I18N::installedLocales() as $installed_locale) { + $installed_languages[$installed_locale->languageTag()] = $installed_locale->endonym(); + } - // Reformat various columns for display - foreach ($data as &$datum) { - $user_id = $datum[1]; - $user_name = $datum[2]; + // Reformat various columns for display + foreach ($data as &$datum) { + $user_id = $datum[1]; + $user_name = $datum[2]; - if ($user_id != $user->getUserId()) { - $admin_options = '<div class="dropdown-item"><a href="#" onclick="return masquerade(' . $user_id . ')"><i class="far fa-user fa-fw"></i> ' . /* I18N: Pretend to be another user, by logging in as them */ - I18N::translate('Masquerade as this user') . '</a></div>' . '<div class="dropdown-item"><a href="#" data-confirm="' . I18N::translate('Are you sure you want to delete “%s”?', e($user_name)) . '" onclick="delete_user(this.dataset.confirm, ' . $user_id . ');"><i class="fas fa-trash-alt fa-fw" aria-hidden="true"></i> ' . I18N::translate('Delete') . '</a></div>'; - } else { - // Do not delete ourself! - $admin_options = ''; - } + if ($user_id != $user->getUserId()) { + $admin_options = '<div class="dropdown-item"><a href="#" onclick="return masquerade(' . $user_id . ')"><i class="far fa-user fa-fw"></i> ' . /* I18N: Pretend to be another user, by logging in as them */ + I18N::translate('Masquerade as this user') . '</a></div>' . '<div class="dropdown-item"><a href="#" data-confirm="' . I18N::translate('Are you sure you want to delete “%s”?', e($user_name)) . '" onclick="delete_user(this.dataset.confirm, ' . $user_id . ');"><i class="fas fa-trash-alt fa-fw" aria-hidden="true"></i> ' . I18N::translate('Delete') . '</a></div>'; + } else { + // Do not delete ourself! + $admin_options = ''; + } - $datum[0] = '<div class="dropdown"><button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" id="edit-user-button-' . $user_id . '" aria-haspopup="true" aria-expanded="false"><i class="fas fa-pencil-alt"></i> <span class="caret"></span></button><div class="dropdown-menu" aria-labelledby="edit-user-button-' . $user_id . '"><div class="dropdown-item"><a href="' . e(route('admin-users-edit', ['user_id' => $user_id])) . '"><i class="fas fa-pencil-alt fa-fw"></i> ' . I18N::translate('Edit') . '</a></div><div class="divider"></div><div class="dropdown-item"><a href="' . e(route('user-page-user-edit', ['user_id' => $user_id])) . '"><i class="fas fa-th-large fa-fw" aria-hidden="true"></i> ' . I18N::translate('Change the blocks on this user’s “My page”') . '</a></div>' . $admin_options . '</div></div>'; - // The real name - $datum[3] = '<span dir="auto">' . e($datum[3]) . '</span>'; - // $datum[4] is the email address - if ($user_id != $user->getUserId()) { - $datum[4] = '<a href="' . e(route('message', ['to' => $datum[2], 'url' => route('admin-users')])) . '">' . e($datum[4]) . '</a>'; - } - // The username - $datum[2] = '<span dir="auto">' . e($datum[2]) . '</span>'; - // The langauge - if (array_key_exists($datum[5], $installed_languages)) { - $datum[5] = $installed_languages[$datum[5]]; - } - // $datum[6] is the sortable registration timestamp - $datum[7] = $datum[6] ? FunctionsDate::formatTimestamp($datum[6] + WT_TIMESTAMP_OFFSET) : ''; - if (date('U') - $datum[6] > 604800 && !$datum[10]) { - $datum[7] = '<span class="red">' . $datum[7] . '</span>'; - } - // $The sortable last-login timestamp - if ($datum[8]) { - $datum[9] = FunctionsDate::formatTimestamp($datum[8] + WT_TIMESTAMP_OFFSET) . '<br>' . I18N::timeAgo(WT_TIMESTAMP - $datum[8]); - } else { - $datum[9] = I18N::translate('Never'); - } - $datum[10] = $datum[10] ? I18N::translate('yes') : I18N::translate('no'); - $datum[11] = $datum[11] ? I18N::translate('yes') : I18N::translate('no'); - } + $datum[0] = '<div class="dropdown"><button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" id="edit-user-button-' . $user_id . '" aria-haspopup="true" aria-expanded="false"><i class="fas fa-pencil-alt"></i> <span class="caret"></span></button><div class="dropdown-menu" aria-labelledby="edit-user-button-' . $user_id . '"><div class="dropdown-item"><a href="' . e(route('admin-users-edit', ['user_id' => $user_id])) . '"><i class="fas fa-pencil-alt fa-fw"></i> ' . I18N::translate('Edit') . '</a></div><div class="divider"></div><div class="dropdown-item"><a href="' . e(route('user-page-user-edit', ['user_id' => $user_id])) . '"><i class="fas fa-th-large fa-fw" aria-hidden="true"></i> ' . I18N::translate('Change the blocks on this user’s “My page”') . '</a></div>' . $admin_options . '</div></div>'; + // The real name + $datum[3] = '<span dir="auto">' . e($datum[3]) . '</span>'; + // $datum[4] is the email address + if ($user_id != $user->getUserId()) { + $datum[4] = '<a href="' . e(route('message', ['to' => $datum[2], + 'url' => route('admin-users'), + ])) . '">' . e($datum[4]) . '</a>'; + } + // The username + $datum[2] = '<span dir="auto">' . e($datum[2]) . '</span>'; + // The langauge + if (array_key_exists($datum[5], $installed_languages)) { + $datum[5] = $installed_languages[$datum[5]]; + } + // $datum[6] is the sortable registration timestamp + $datum[7] = $datum[6] ? FunctionsDate::formatTimestamp($datum[6] + WT_TIMESTAMP_OFFSET) : ''; + if (date('U') - $datum[6] > 604800 && !$datum[10]) { + $datum[7] = '<span class="red">' . $datum[7] . '</span>'; + } + // $The sortable last-login timestamp + if ($datum[8]) { + $datum[9] = FunctionsDate::formatTimestamp($datum[8] + WT_TIMESTAMP_OFFSET) . '<br>' . I18N::timeAgo(WT_TIMESTAMP - $datum[8]); + } else { + $datum[9] = I18N::translate('Never'); + } + $datum[10] = $datum[10] ? I18N::translate('yes') : I18N::translate('no'); + $datum[11] = $datum[11] ? I18N::translate('yes') : I18N::translate('no'); + } - // See http://www.datatables.net/usage/server-side - return new JsonResponse([ - 'draw' => $draw, - 'recordsTotal' => $recordsTotal, - 'recordsFiltered' => $recordsFiltered, - 'data' => $data, - ]); + // See http://www.datatables.net/usage/server-side + return new JsonResponse([ + 'draw' => $draw, + 'recordsTotal' => $recordsTotal, + 'recordsFiltered' => $recordsFiltered, + 'data' => $data, + ]); - } + } - /** - * @param Request $request - * - * @return Response - */ - public function create(Request $request): Response { - $email = $request->get('email', ''); - $real_name = $request->get('real_name', ''); - $username = $request->get('username', ''); - $title = I18N::translate('Add a user'); + /** + * @param Request $request + * + * @return Response + */ + public function create(Request $request): Response + { + $email = $request->get('email', ''); + $real_name = $request->get('real_name', ''); + $username = $request->get('username', ''); + $title = I18N::translate('Add a user'); - return $this->viewResponse('admin/users-create', [ - 'email' => $email, - 'real_name' => $real_name, - 'title' => $title, - 'username' => $username, - ]); - } + return $this->viewResponse('admin/users-create', [ + 'email' => $email, + 'real_name' => $real_name, + 'title' => $title, + 'username' => $username, + ]); + } - /** - * @param Request $request - * - * @return Response - */ - public function edit(Request $request): Response { - $user_id = (int) $request->get('user_id'); - $user = User::find($user_id); + /** + * @param Request $request + * + * @return Response + */ + public function edit(Request $request): Response + { + $user_id = (int)$request->get('user_id'); + $user = User::find($user_id); - if ($user === null) { - throw new NotFoundHttpException(I18N::translate('%1$s does not exist.', 'user_id:' . $user_id)); - } + if ($user === null) { + throw new NotFoundHttpException(I18N::translate('%1$s does not exist.', 'user_id:' . $user_id)); + } - return $this->viewResponse('admin/users-edit', [ - 'contact_methods' => FunctionsEdit::optionsContactMethods(), - 'default_locale' => WT_LOCALE, - 'locales' => I18N::installedLocales(), - 'roles' => $this->roles(), - 'trees' => Tree::getAll(), - 'theme_options' => $this->themeOptions(), - 'title' => I18N::translate('Edit the user'), - 'user' => $user, - ]); - } + return $this->viewResponse('admin/users-edit', [ + 'contact_methods' => FunctionsEdit::optionsContactMethods(), + 'default_locale' => WT_LOCALE, + 'locales' => I18N::installedLocales(), + 'roles' => $this->roles(), + 'trees' => Tree::getAll(), + 'theme_options' => $this->themeOptions(), + 'title' => I18N::translate('Edit the user'), + 'user' => $user, + ]); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function save(Request $request): RedirectResponse { - $username = $request->get('username'); - $real_name = $request->get('real_name'); - $email = $request->get('email'); - $pass1 = $request->get('pass1'); - $pass2 = $request->get('pass2'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function save(Request $request): RedirectResponse + { + $username = $request->get('username'); + $real_name = $request->get('real_name'); + $email = $request->get('email'); + $pass1 = $request->get('pass1'); + $pass2 = $request->get('pass2'); - $errors = false; - if (User::findByUserName($username)) { - FlashMessages::addMessage(I18N::translate('Duplicate username. A user with that username already exists. Please choose another username.')); - $errors = true; - } + $errors = false; + if (User::findByUserName($username)) { + FlashMessages::addMessage(I18N::translate('Duplicate username. A user with that username already exists. Please choose another username.')); + $errors = true; + } - if (User::findByEmail($email)) { - FlashMessages::addMessage(I18N::translate('Duplicate email address. A user with that email already exists.')); - $errors = true; - } + if (User::findByEmail($email)) { + FlashMessages::addMessage(I18N::translate('Duplicate email address. A user with that email already exists.')); + $errors = true; + } - if ($pass1 !== $pass2) { - FlashMessages::addMessage(I18N::translate('The passwords do not match.')); - $errors = true; - } + if ($pass1 !== $pass2) { + FlashMessages::addMessage(I18N::translate('The passwords do not match.')); + $errors = true; + } - if ($errors) { - $url = route('admin-users-create', [ - 'email' => $email, - 'real_name' => $real_name, - 'username' => $username, - ]); + if ($errors) { + $url = route('admin-users-create', [ + 'email' => $email, + 'real_name' => $real_name, + 'username' => $username, + ]); - return new RedirectResponse($url); - } + return new RedirectResponse($url); + } - $new_user = User::create($username, $real_name, $email, $pass1) - ->setPreference('verified', '1') - ->setPreference('language', WT_LOCALE) - ->setPreference('timezone', Site::getPreference('TIMEZONE')) - ->setPreference('reg_timestamp', date('U')) - ->setPreference('sessiontime', '0'); + $new_user = User::create($username, $real_name, $email, $pass1) + ->setPreference('verified', '1') + ->setPreference('language', WT_LOCALE) + ->setPreference('timezone', Site::getPreference('TIMEZONE')) + ->setPreference('reg_timestamp', date('U')) + ->setPreference('sessiontime', '0'); - Log::addAuthenticationLog('User ->' . $username . '<- created'); + Log::addAuthenticationLog('User ->' . $username . '<- created'); - $url = route('admin-users-edit', [ - 'user_id' => $new_user->getUserId(), - ]); + $url = route('admin-users-edit', [ + 'user_id' => $new_user->getUserId(), + ]); - return new RedirectResponse($url); - } + return new RedirectResponse($url); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function update(Request $request): RedirectResponse { - /** @var User $user */ - $user = $request->attributes->get('user'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function update(Request $request): RedirectResponse + { + /** @var User $user */ + $user = $request->attributes->get('user'); - $user_id = (int) $request->get('user_id'); - $username = $request->get('username'); - $real_name = $request->get('real_name'); - $email = $request->get('email'); - $pass1 = $request->get('pass1'); - $theme = $request->get('theme'); - $language = $request->get('language'); - $timezone = $request->get('timezone'); - $contact_method = $request->get('contact_method'); - $comment = $request->get('comment'); - $auto_accept = (bool) $request->get('auto_accept'); - $canadmin = (bool) $request->get('canadmin'); - $visible_online = (bool) $request->get('visible_online'); - $verified = (bool) $request->get('verified'); - $approved = (bool) $request->get('approved'); + $user_id = (int)$request->get('user_id'); + $username = $request->get('username'); + $real_name = $request->get('real_name'); + $email = $request->get('email'); + $pass1 = $request->get('pass1'); + $theme = $request->get('theme'); + $language = $request->get('language'); + $timezone = $request->get('timezone'); + $contact_method = $request->get('contact_method'); + $comment = $request->get('comment'); + $auto_accept = (bool)$request->get('auto_accept'); + $canadmin = (bool)$request->get('canadmin'); + $visible_online = (bool)$request->get('visible_online'); + $verified = (bool)$request->get('verified'); + $approved = (bool)$request->get('approved'); - $edit_user = User::find($user_id); + $edit_user = User::find($user_id); - if ($edit_user === null) { - throw new NotFoundHttpException(I18N::translate('%1$s does not exist', 'user_id:' . $user_id)); - } + if ($edit_user === null) { + throw new NotFoundHttpException(I18N::translate('%1$s does not exist', 'user_id:' . $user_id)); + } - $edit_user - ->setRealName($real_name) - ->setEmail($email) - ->setUserName($username) - ->setPassword($pass1) - ->setPreference('theme', $theme) - ->setPreference('language', $language) - ->setPreference('TIMEZONE', $timezone) - ->setPreference('contactmethod', $contact_method) - ->setPreference('comment', $comment) - ->setPreference('auto_accept', (string) $auto_accept) - ->setPreference('visibleonline', (string) $visible_online) - ->setPreference('verified', (string) $verified) - ->setPreference('verified_by_admin', (string) $approved); + $edit_user + ->setRealName($real_name) + ->setEmail($email) + ->setUserName($username) + ->setPassword($pass1) + ->setPreference('theme', $theme) + ->setPreference('language', $language) + ->setPreference('TIMEZONE', $timezone) + ->setPreference('contactmethod', $contact_method) + ->setPreference('comment', $comment) + ->setPreference('auto_accept', (string)$auto_accept) + ->setPreference('visibleonline', (string)$visible_online) + ->setPreference('verified', (string)$verified) + ->setPreference('verified_by_admin', (string)$approved); - // We cannot change our own admin status. Another admin will need to do it. - if ($edit_user->getUserId() !== $user->getUserId()) { - $edit_user->setPreference('canadmin', $canadmin ? '1' : '0'); - } + // We cannot change our own admin status. Another admin will need to do it. + if ($edit_user->getUserId() !== $user->getUserId()) { + $edit_user->setPreference('canadmin', $canadmin ? '1' : '0'); + } - foreach (Tree::getAll() as $tree) { - $path_length = (int) $request->get('RELATIONSHIP_PATH_LENGTH' . $tree->getTreeId()); - $gedcom_id = $request->get('gedcomid' . $tree->getTreeId()); - $can_edit = $request->get('canedit' . $tree->getTreeId()); + foreach (Tree::getAll() as $tree) { + $path_length = (int)$request->get('RELATIONSHIP_PATH_LENGTH' . $tree->getTreeId()); + $gedcom_id = $request->get('gedcomid' . $tree->getTreeId()); + $can_edit = $request->get('canedit' . $tree->getTreeId()); - // Do not allow a path length to be set if the individual ID is not - if ($gedcom_id !== '') { - $path_length = 0; - } + // Do not allow a path length to be set if the individual ID is not + if ($gedcom_id !== '') { + $path_length = 0; + } - $tree->setUserPreference($edit_user, 'gedcomid', $gedcom_id); - $tree->setUserPreference($edit_user, 'canedit', $can_edit); - $tree->setUserPreference($edit_user, 'RELATIONSHIP_PATH_LENGTH', (string) $path_length); - } + $tree->setUserPreference($edit_user, 'gedcomid', $gedcom_id); + $tree->setUserPreference($edit_user, 'canedit', $can_edit); + $tree->setUserPreference($edit_user, 'RELATIONSHIP_PATH_LENGTH', (string)$path_length); + } - $url = route('admin-users'); + $url = route('admin-users'); - return new RedirectResponse($url); - } + return new RedirectResponse($url); + } - /** - * @return string[] - */ - private function roles(): array { - return [ - 'none' => /* I18N: Listbox entry; name of a role */ - I18N::translate('Visitor'), - 'access' => /* I18N: Listbox entry; name of a role */ - I18N::translate('Member'), - 'edit' => /* I18N: Listbox entry; name of a role */ - I18N::translate('Editor'), - 'accept' => /* I18N: Listbox entry; name of a role */ - I18N::translate('Moderator'), - 'admin' => /* I18N: Listbox entry; name of a role */ - I18N::translate('Manager'), - ]; - } + /** + * @return string[] + */ + private function roles(): array + { + return [ + 'none' => /* I18N: Listbox entry; name of a role */ + I18N::translate('Visitor'), + 'access' => /* I18N: Listbox entry; name of a role */ + I18N::translate('Member'), + 'edit' => /* I18N: Listbox entry; name of a role */ + I18N::translate('Editor'), + 'accept' => /* I18N: Listbox entry; name of a role */ + I18N::translate('Moderator'), + 'admin' => /* I18N: Listbox entry; name of a role */ + I18N::translate('Manager'), + ]; + } - /** - * Delete users older than this. - * - * @return string[] - */ - private function monthOptions(): array { - return [ - 3 => I18N::number(3), - 6 => I18N::number(6), - 9 => I18N::number(9), - 12 => I18N::number(12), - 18 => I18N::number(18), - 24 => I18N::number(24), - ]; - } + /** + * Delete users older than this. + * + * @return string[] + */ + private function monthOptions(): array + { + return [ + 3 => I18N::number(3), + 6 => I18N::number(6), + 9 => I18N::number(9), + 12 => I18N::number(12), + 18 => I18N::number(18), + 24 => I18N::number(24), + ]; + } - /** - * @return string[] - */ - private function themeOptions(): array { - return ['' => I18N::translate('<default theme>')] + Theme::themeNames(); - } + /** + * @return string[] + */ + private function themeOptions(): array + { + return ['' => I18N::translate('<default theme>')] + Theme::themeNames(); + } } |
