From e97bd18fd3fda073b79ca8b440802421d62405e7 Mon Sep 17 00:00:00 2001
From: Torben Hansen <derhansen@gmail.com>
Date: Tue, 17 Jan 2023 21:16:29 +0100
Subject: [PATCH] [FEATURE] Allow to provide name for new admin users in
 ext:install
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The field `realName` has been added to the "Create Administrative User"
modal in ext:install, so it is possible to provide the name of a new
admin user.

The notice in the header of the model has been removed, since it is
superfluous now.

Resolves: #99584
Releases: main
Signed-off-by: Torben Hansen <derhansen@gmail.com>
Change-Id: I6732bfe4d664f200b2bcc3471c6f0ffd9859365b
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/77455
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
---
 .../module/maintenance/create-admin.ts        |  1 +
 ...deRealNameForNewAdminUsersInExtinstall.rst | 26 +++++++++++++++++++
 .../Controller/MaintenanceController.php      |  2 ++
 .../Templates/Maintenance/CreateAdmin.html    | 13 +++++++---
 .../module/maintenance/create-admin.js        |  2 +-
 5 files changed, 39 insertions(+), 5 deletions(-)
 create mode 100644 typo3/sysext/core/Documentation/Changelog/12.2/Feature-99584-AllowToProvideRealNameForNewAdminUsersInExtinstall.rst

diff --git a/Build/Sources/TypeScript/install/module/maintenance/create-admin.ts b/Build/Sources/TypeScript/install/module/maintenance/create-admin.ts
index ae144c6a0e4f..4258dfbfdeb6 100644
--- a/Build/Sources/TypeScript/install/module/maintenance/create-admin.ts
+++ b/Build/Sources/TypeScript/install/module/maintenance/create-admin.ts
@@ -72,6 +72,7 @@ class CreateAdmin extends AbstractInteractableModule {
         userPassword: this.findInModal('.t3js-createAdmin-password').val(),
         userPasswordCheck: this.findInModal('.t3js-createAdmin-password-check').val(),
         userEmail: this.findInModal('.t3js-createAdmin-email').val(),
+        realName: this.findInModal('.t3js-createAdmin-realname').val(),
         userSystemMaintainer: (this.findInModal('.t3js-createAdmin-system-maintainer').is(':checked')) ? 1 : 0,
       },
     };
diff --git a/typo3/sysext/core/Documentation/Changelog/12.2/Feature-99584-AllowToProvideRealNameForNewAdminUsersInExtinstall.rst b/typo3/sysext/core/Documentation/Changelog/12.2/Feature-99584-AllowToProvideRealNameForNewAdminUsersInExtinstall.rst
new file mode 100644
index 000000000000..257c6c2abca0
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/12.2/Feature-99584-AllowToProvideRealNameForNewAdminUsersInExtinstall.rst
@@ -0,0 +1,26 @@
+.. include:: /Includes.rst.txt
+
+.. _feature-99584-1673985938:
+
+==========================================================================
+Feature: #99584 - Allow to provide name for new admin users in ext:install
+==========================================================================
+
+See :issue:`99584`
+
+Description
+===========
+
+The field `realName` has been added to the "Create Administrative User" modal
+in ext:install, so it is possible to provide the name of a new admin user.
+
+The notice in the header of the model has been removed, since it is
+superfluous now.
+
+Impact
+======
+
+It is now possible to provide the field `realName`, when a new admin user
+is created in ext:install.
+
+.. index:: Backend, ext:install
diff --git a/typo3/sysext/install/Classes/Controller/MaintenanceController.php b/typo3/sysext/install/Classes/Controller/MaintenanceController.php
index 88788fe6de0c..7cd0b4b0cf54 100644
--- a/typo3/sysext/install/Classes/Controller/MaintenanceController.php
+++ b/typo3/sysext/install/Classes/Controller/MaintenanceController.php
@@ -489,6 +489,7 @@ class MaintenanceController extends AbstractController
         $password = $request->getParsedBody()['install']['userPassword'];
         $passwordCheck = $request->getParsedBody()['install']['userPasswordCheck'];
         $email = $request->getParsedBody()['install']['userEmail'] ?? '';
+        $realName = $request->getParsedBody()['install']['realName'] ?? '';
         $isSystemMaintainer = ((bool)$request->getParsedBody()['install']['userSystemMaintainer'] == '1') ? true : false;
 
         $messages = new FlashMessageQueue('install');
@@ -533,6 +534,7 @@ class MaintenanceController extends AbstractController
                     'username' => $username,
                     'password' => $hashedPassword,
                     'admin' => 1,
+                    'realName' => $realName,
                     'tstamp' => $GLOBALS['EXEC_TIME'],
                     'crdate' => $GLOBALS['EXEC_TIME'],
                 ];
diff --git a/typo3/sysext/install/Resources/Private/Templates/Maintenance/CreateAdmin.html b/typo3/sysext/install/Resources/Private/Templates/Maintenance/CreateAdmin.html
index 10f31bd91987..1ecb11f299a0 100644
--- a/typo3/sysext/install/Resources/Private/Templates/Maintenance/CreateAdmin.html
+++ b/typo3/sysext/install/Resources/Private/Templates/Maintenance/CreateAdmin.html
@@ -1,9 +1,5 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
 
-<p>
-    After you've created the user, log in and add the rest of the user information, like real name.
-</p>
-
 <div class="t3js-module-content" data-create-admin-token="{createAdminToken}">
     <form action="" id="t3js-createAdmin-form" method="post" spellcheck="false">
         <div class="form-group">
@@ -44,6 +40,15 @@
                 required
             />
         </div>
+        <div class="form-group">
+            <label for="t3-install-admin-realname" class="control-label">Name</label>
+            <input
+                type="text"
+                class="t3-install-form-input-text t3js-createAdmin-realname form-control"
+                name="realName"
+                id="t3-install-admin-realname"
+            />
+        </div>
         <div class="form-group">
             <label for="t3-install-admin-email" class="control-label">Email address</label>
             <input
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/module/maintenance/create-admin.js b/typo3/sysext/install/Resources/Public/JavaScript/module/maintenance/create-admin.js
index 0c2a34d158ae..260e00921217 100644
--- a/typo3/sysext/install/Resources/Public/JavaScript/module/maintenance/create-admin.js
+++ b/typo3/sysext/install/Resources/Public/JavaScript/module/maintenance/create-admin.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-import Modal from"@typo3/backend/modal.js";import Notification from"@typo3/backend/notification.js";import AjaxRequest from"@typo3/core/ajax/ajax-request.js";import Router from"@typo3/install/router.js";import PasswordStrength from"@typo3/install/module/password-strength.js";import{AbstractInteractableModule}from"@typo3/install/module/abstract-interactable-module.js";class CreateAdmin extends AbstractInteractableModule{constructor(){super(...arguments),this.selectorAdminCreateButton=".t3js-createAdmin-create"}initialize(t){this.currentModal=t,this.getData(),t.on("click",this.selectorAdminCreateButton,(t=>{t.preventDefault(),this.create()})),t.on("click",".t3-install-form-password-strength",(()=>{PasswordStrength.initialize(".t3-install-form-password-strength")}))}getData(){const t=this.getModalBody();new AjaxRequest(Router.getUrl("createAdminGetData")).get({cache:"no-cache"}).then((async e=>{const s=await e.resolve();!0===s.success?(t.empty().append(s.html),Modal.setButtons(s.buttons)):Notification.error("Something went wrong","The request was not processed successfully. Please check the browser's console and TYPO3's log.")}),(e=>{Router.handleAjaxError(e,t)}))}create(){this.setModalButtonsState(!1);const t=this.getModalBody(),e={install:{action:"createAdmin",token:this.getModuleContent().data("create-admin-token"),userName:this.findInModal(".t3js-createAdmin-user").val(),userPassword:this.findInModal(".t3js-createAdmin-password").val(),userPasswordCheck:this.findInModal(".t3js-createAdmin-password-check").val(),userEmail:this.findInModal(".t3js-createAdmin-email").val(),userSystemMaintainer:this.findInModal(".t3js-createAdmin-system-maintainer").is(":checked")?1:0}};this.getModuleContent().find(":input").prop("disabled",!0),new AjaxRequest(Router.getUrl()).post(e).then((async t=>{const e=await t.resolve();!0===e.success&&Array.isArray(e.status)?(e.status.forEach((t=>{Notification.showMessage(t.title,t.message,t.severity)})),e.userCreated&&(this.findInModal(".t3js-createAdmin-user").val(""),this.findInModal(".t3js-createAdmin-password").val(""),this.findInModal(".t3js-createAdmin-password-check").val(""),this.findInModal(".t3js-createAdmin-email").val(""),this.findInModal(".t3js-createAdmin-system-maintainer").prop("checked",!1))):Notification.error("Something went wrong","The request was not processed successfully. Please check the browser's console and TYPO3's log.")}),(e=>{Router.handleAjaxError(e,t)})).finally((()=>{this.setModalButtonsState(!0),this.getModuleContent().find(":input").prop("disabled",!1)}))}}export default new CreateAdmin;
\ No newline at end of file
+import Modal from"@typo3/backend/modal.js";import Notification from"@typo3/backend/notification.js";import AjaxRequest from"@typo3/core/ajax/ajax-request.js";import Router from"@typo3/install/router.js";import PasswordStrength from"@typo3/install/module/password-strength.js";import{AbstractInteractableModule}from"@typo3/install/module/abstract-interactable-module.js";class CreateAdmin extends AbstractInteractableModule{constructor(){super(...arguments),this.selectorAdminCreateButton=".t3js-createAdmin-create"}initialize(t){this.currentModal=t,this.getData(),t.on("click",this.selectorAdminCreateButton,(t=>{t.preventDefault(),this.create()})),t.on("click",".t3-install-form-password-strength",(()=>{PasswordStrength.initialize(".t3-install-form-password-strength")}))}getData(){const t=this.getModalBody();new AjaxRequest(Router.getUrl("createAdminGetData")).get({cache:"no-cache"}).then((async e=>{const s=await e.resolve();!0===s.success?(t.empty().append(s.html),Modal.setButtons(s.buttons)):Notification.error("Something went wrong","The request was not processed successfully. Please check the browser's console and TYPO3's log.")}),(e=>{Router.handleAjaxError(e,t)}))}create(){this.setModalButtonsState(!1);const t=this.getModalBody(),e={install:{action:"createAdmin",token:this.getModuleContent().data("create-admin-token"),userName:this.findInModal(".t3js-createAdmin-user").val(),userPassword:this.findInModal(".t3js-createAdmin-password").val(),userPasswordCheck:this.findInModal(".t3js-createAdmin-password-check").val(),userEmail:this.findInModal(".t3js-createAdmin-email").val(),realName:this.findInModal(".t3js-createAdmin-realname").val(),userSystemMaintainer:this.findInModal(".t3js-createAdmin-system-maintainer").is(":checked")?1:0}};this.getModuleContent().find(":input").prop("disabled",!0),new AjaxRequest(Router.getUrl()).post(e).then((async t=>{const e=await t.resolve();!0===e.success&&Array.isArray(e.status)?(e.status.forEach((t=>{Notification.showMessage(t.title,t.message,t.severity)})),e.userCreated&&(this.findInModal(".t3js-createAdmin-user").val(""),this.findInModal(".t3js-createAdmin-password").val(""),this.findInModal(".t3js-createAdmin-password-check").val(""),this.findInModal(".t3js-createAdmin-email").val(""),this.findInModal(".t3js-createAdmin-system-maintainer").prop("checked",!1))):Notification.error("Something went wrong","The request was not processed successfully. Please check the browser's console and TYPO3's log.")}),(e=>{Router.handleAjaxError(e,t)})).finally((()=>{this.setModalButtonsState(!0),this.getModuleContent().find(":input").prop("disabled",!1)}))}}export default new CreateAdmin;
\ No newline at end of file
-- 
GitLab