diff --git a/XSD/userOption.xsd b/XSD/userOption.xsd
index 4e805d33ff3..581b398ff64 100644
--- a/XSD/userOption.xsd
+++ b/XSD/userOption.xsd
@@ -41,6 +41,8 @@
+
+
@@ -66,11 +68,12 @@
+
-
+
@@ -90,6 +93,9 @@
+
+
+
diff --git a/com.woltlab.wcf/acpTemplateDelete.xml b/com.woltlab.wcf/acpTemplateDelete.xml
index d147759f63b..9bf79c79679 100644
--- a/com.woltlab.wcf/acpTemplateDelete.xml
+++ b/com.woltlab.wcf/acpTemplateDelete.xml
@@ -157,5 +157,11 @@
imageViewer
tagSetAsSynonyms
contactSettings
+ removeUserContentDialog
+ userSearch
+ userMerge
+ userContentRevertChanges
+ userAssignToGroup
+ userEmailAddressExport
diff --git a/com.woltlab.wcf/clipboardAction.xml b/com.woltlab.wcf/clipboardAction.xml
index 66c6f2ebf5e..21ffa86a7bf 100644
--- a/com.woltlab.wcf/clipboardAction.xml
+++ b/com.woltlab.wcf/clipboardAction.xml
@@ -1,6 +1,35 @@
+
+
+ wcf\system\clipboard\action\MediaClipboardAction
+ 1
+
+ menuManagerDialog-editor
+
+
+
+ wcf\system\clipboard\action\MediaClipboardAction
+ 2
+
+ wcf\acp\page\MediaListPage
+ menuManagerDialog-editor
+ menuManagerDialog-select
+
+
+
+ wcf\system\clipboard\action\MediaClipboardAction
+ 3
+
+ wcf\acp\page\MediaListPage
+ menuManagerDialog-editor
+ menuManagerDialog-select
+
+
+
+
+
wcf\system\clipboard\action\UserClipboardAction
@@ -94,35 +123,6 @@
-
-
- wcf\system\clipboard\action\MediaClipboardAction
- 1
-
- menuManagerDialog-editor
-
-
-
- wcf\system\clipboard\action\MediaClipboardAction
- 2
-
- wcf\acp\page\MediaListPage
- menuManagerDialog-editor
- menuManagerDialog-select
-
-
-
- wcf\system\clipboard\action\MediaClipboardAction
- 3
-
- wcf\acp\page\MediaListPage
- menuManagerDialog-editor
- menuManagerDialog-select
-
-
-
-
-
wcf\system\clipboard\action\ArticleClipboardAction
diff --git a/com.woltlab.wcf/fileDelete.xml b/com.woltlab.wcf/fileDelete.xml
index b75e6e2cbe4..0059cf6e82a 100644
--- a/com.woltlab.wcf/fileDelete.xml
+++ b/com.woltlab.wcf/fileDelete.xml
@@ -8,6 +8,30 @@
js/WoltLabSuite/Core/Ui/User/CoverPhoto/Delete.js
js/WoltLabSuite/Core/Ui/User/CoverPhoto/Upload.js
lib/form/AvatarEditForm.class.php
+ lib/form/UserSearchForm.class.php
+ lib/action/EmailValidationAction.class.php
+ lib/action/UsernameValidationAction.class.php
+ js/WoltLabSuite/Core/Acp/Controller/User/List.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Editor.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/Abstract.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/BanAction.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/DeleteAction.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/DisableAction.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/SendNewPasswordAction.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/ToggleConfirmEmailAction.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Ban.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Ban/Dialog.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Delete.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Content/Remove/Clipboard.js
+ js/WoltLabSuite/Core/Acp/Ui/User/Content/Remove/Handler.js
+ js/WoltLabSuite/Core/Ui/User/Editor.js
+ lib/acp/action/UserQuickSearchAction.class.php
+ lib/acp/form/UserSearchForm.class.php
+ lib/data/user/UserContentAction.class.php
+ lib/data/user/UserRegistrationAction.class.php
+ lib/system/clipboard/action/UserClipboardAction.class.php
+ lib/system/clipboard/action/UserContentClipboardAction.class.php
+ lib/system/listView/user/UserSearchResultsListView.class.php
lib/system/api/cuyz/valinor/qa/PHPStan/Stubs/Psr/SimpleCache/CacheInterface.stub
lib/system/api/cuyz/valinor/src/Cache/ChainCache.php
lib/system/api/cuyz/valinor/src/Cache/WarmupCache.php
@@ -76,6 +100,23 @@
lib/system/upload/AvatarUploadFileValidationStrategy.class.php
lib/system/upload/UserCoverPhotoUploadFileSaveStrategy.class.php
lib/system/upload/UserCoverPhotoUploadFileValidationStrategy.class.php
+ lib/system/option/user/BirthdayUserOptionOutput.class.php
+ lib/system/option/user/DateUserOptionOutput.class.php
+ lib/system/option/user/FacebookUserOptionOutput.class.php
+ lib/system/option/user/FloatUserOptionOutput.class.php
+ lib/system/option/user/ImageUserOptionOutput.class.php
+ lib/system/option/user/LabeledUrlUserOptionOutput.class.php
+ lib/system/option/user/MessageUserOptionOutput.class.php
+ lib/system/option/user/NewlineToBreakUserOptionOutput.class.php
+ lib/system/option/user/SelectOptionsUserOptionOutput.class.php
+ lib/system/option/user/TwitterUserOptionOutput.class.php
+ lib/system/option/user/URLUserOptionOutput.class.php
+ lib/system/option/user/UserOptionHandler.class.php
+ lib/acp/form/UserOptionListForm.class.php
+ lib/system/condition/UserOptionsCondition.class.php
+ lib/acp/form/UserContentRevertChangesForm.class.php
+ lib/acp/form/UserAssignToGroupForm.class.php
+ lib/acp/form/UserEmailAddressExportForm.class.php
icon/font-awesome/v6/brands/42-group.svg
icon/font-awesome/v6/brands/500px.svg
diff --git a/com.woltlab.wcf/menuItem.xml b/com.woltlab.wcf/menuItem.xml
index 10d767af59e..438cdf36f49 100644
--- a/com.woltlab.wcf/menuItem.xml
+++ b/com.woltlab.wcf/menuItem.xml
@@ -49,12 +49,6 @@
Staff
com.woltlab.wcf.Team
- -
- com.woltlab.wcf.MembersList
- Mitgliedersuche
- Search Members
- com.woltlab.wcf.UserSearch
-
-
Datenschutzerklärung
diff --git a/com.woltlab.wcf/objectType.xml b/com.woltlab.wcf/objectType.xml
index 6ee56891aaa..c384a1714a8 100644
--- a/com.woltlab.wcf/objectType.xml
+++ b/com.woltlab.wcf/objectType.xml
@@ -2,26 +2,11 @@
-
- com.woltlab.wcf.user
- com.woltlab.wcf.clipboardItem
- wcf\data\user\UserList
-
-
- com.woltlab.wcf.tag
- com.woltlab.wcf.clipboardItem
- wcf\data\tag\TagList
-
com.woltlab.wcf.media
com.woltlab.wcf.clipboardItem
wcf\data\media\ViewableMediaList
-
- com.woltlab.wcf.article
- com.woltlab.wcf.clipboardItem
- wcf\data\article\ArticleList
-
@@ -667,12 +652,6 @@
likesReceived
0
-
- com.woltlab.wcf.userOptions
- com.woltlab.wcf.condition.trophy
- wcf\system\condition\UserOptionsCondition
- userOptions
-
com.woltlab.wcf.userTrophyCondition
com.woltlab.wcf.condition.trophy
@@ -957,12 +936,6 @@
likesReceived
0
-
- com.woltlab.wcf.userOptions
- com.woltlab.wcf.bulkProcessing.user.condition
- wcf\system\condition\UserOptionsCondition
- userOptions
-
com.woltlab.wcf.userTrophyCondition
com.woltlab.wcf.bulkProcessing.user.condition
@@ -978,109 +951,6 @@
0
-
-
- com.woltlab.wcf.userID
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserUserIDCondition
- general
-
-
- com.woltlab.wcf.username
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserUsernameCondition
- general
-
-
- com.woltlab.wcf.email
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserEmailCondition
- general
-
-
- com.woltlab.wcf.userGroup
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserGroupCondition
- general
-
-
- com.woltlab.wcf.languages
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserLanguageCondition
- general
-
-
- com.woltlab.wcf.registrationDate
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserRegistrationDateCondition
- general
-
-
- com.woltlab.wcf.registrationDateInterval
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserRegistrationDateIntervalCondition
- general
-
-
- com.woltlab.wcf.lastActivityTime
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserTimestampPropertyCondition
- general
- lastActivityTime
-
-
- com.woltlab.wcf.avatar
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserAvatarCondition
- general
-
-
- com.woltlab.wcf.signature
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserSignatureCondition
- general
-
-
- com.woltlab.wcf.coverPhoto
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserCoverPhotoCondition
- general
-
-
- com.woltlab.wcf.state
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserStateCondition
- general
-
-
- com.woltlab.wcf.activityPoints
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserIntegerPropertyCondition
- contents
- activityPoints
- 0
-
-
- com.woltlab.wcf.likesReceived
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserIntegerPropertyCondition
- contents
- likesReceived
- 0
-
-
- com.woltlab.wcf.userOptions
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserOptionsCondition
- userOptions
-
-
- com.woltlab.wcf.user.multifactor
- com.woltlab.wcf.condition.userSearch
- wcf\system\condition\UserMultifactorCondition
- general
-
-
com.woltlab.wcf.recentActivityList
@@ -1613,5 +1483,70 @@
com.woltlab.wcf.condition.ad
+
+ com.woltlab.wcf.clipboardItem
+
+
+ com.woltlab.wcf.clipboardItem
+
+
+ com.woltlab.wcf.clipboardItem
+
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+ com.woltlab.wcf.condition.userSearch
+
+
+
+ com.woltlab.wcf.condition.trophy
+
+
+ com.woltlab.wcf.bulkProcessing.user.condition
+
diff --git a/com.woltlab.wcf/objectTypeDefinition.xml b/com.woltlab.wcf/objectTypeDefinition.xml
index a9348bec6b4..190e29d1ff2 100644
--- a/com.woltlab.wcf/objectTypeDefinition.xml
+++ b/com.woltlab.wcf/objectTypeDefinition.xml
@@ -131,6 +131,7 @@
com.woltlab.wcf.condition.notice
wcf\system\condition\IContentCondition
+
com.woltlab.wcf.condition.userSearch
wcf\system\condition\IObjectListCondition
diff --git a/com.woltlab.wcf/package.xml b/com.woltlab.wcf/package.xml
index d4f63a11a66..f6e92e09037 100644
--- a/com.woltlab.wcf/package.xml
+++ b/com.woltlab.wcf/package.xml
@@ -87,12 +87,19 @@
acp/update_com.woltlab.wcf_6.3_contactRecipientL10n.php
acp/update_com.woltlab.wcf_6.3_paidSubscriptionL10n.php
acp/update_com.woltlab.wcf_6.3_userOptionL10n.php
+ acp/update_com.woltlab.wcf_6.3_userOptionCategoryL10n.php
acp/update_com.woltlab.wcf_6.3_captchaQuestionL10n.php
+ acp/update_com.woltlab.wcf_6.3_userOptionConfiguration.php
acp/database/update_com.woltlab.wcf_6.3_step3.php
The following step requires the new files and must run before the `cronjob` PIP, which precedes the `objectType` PIP:
acp/update_com.woltlab.wcf_6.3_cronjobL10n.php
`acp/database/update_com.woltlab.wcf_6.3_step3.php` must run after all of the scripts above, including `acp/update_com.woltlab.wcf_6.3_cronjobL10n.php`.
+
+ The `userOption` PIP must run after `update_com.woltlab.wcf_6.3_userOptionConfiguration.php`,
+ because the script rebuilds the configuration of all user options and would discard the
+ social media profile configuration of the `facebook` and `twitter` options.
+
-->
diff --git a/com.woltlab.wcf/page.xml b/com.woltlab.wcf/page.xml
index c3acbad30a7..47d092f9306 100644
--- a/com.woltlab.wcf/page.xml
+++ b/com.woltlab.wcf/page.xml
@@ -59,21 +59,6 @@
Team
-
- system
- wcf\form\UserSearchForm
- Benutzer suchen
- Search Users
- com.woltlab.wcf.MembersList
- module_members_list
- user.profile.canViewMembersList
-
- Search Users
-
-
- Benutzer suchen
-
-
system
wcf\form\AccountManagementForm
@@ -915,5 +900,7 @@ E-Mail: [E-Mail-Adresse der verantwortlichen Stelle]
diff --git a/com.woltlab.wcf/templates/messageUserOptionOutput.tpl b/com.woltlab.wcf/templates/messageUserOptionOutput.tpl
deleted file mode 100644
index d6da2f16af6..00000000000
--- a/com.woltlab.wcf/templates/messageUserOptionOutput.tpl
+++ /dev/null
@@ -1,11 +0,0 @@
-{hascontent}
-
- {content}
- {unsafe:$value}
- {/content}
-
-
-
-{/hascontent}
diff --git a/com.woltlab.wcf/templates/multiSelectSearchableOptionType.tpl b/com.woltlab.wcf/templates/multiSelectSearchableOptionType.tpl
deleted file mode 100644
index e4d9b4b307f..00000000000
--- a/com.woltlab.wcf/templates/multiSelectSearchableOptionType.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
diff --git a/com.woltlab.wcf/templates/register.tpl b/com.woltlab.wcf/templates/register.tpl
index e6831cc5d1e..3c7f791a31c 100644
--- a/com.woltlab.wcf/templates/register.tpl
+++ b/com.woltlab.wcf/templates/register.tpl
@@ -6,236 +6,29 @@
{lang}wcf.user.3rdparty.{$__wcf->session->getVar('__3rdPartyProvider')}.register{/lang}
{/if}
-{include file='shared_formError'}
-
-
-
-
- *
- {lang}wcf.global.form.required{/lang}
-
-
-
+
+{/if}
{include file='authFlowFooter'}
diff --git a/com.woltlab.wcf/templates/selectSearchableOptionType.tpl b/com.woltlab.wcf/templates/selectSearchableOptionType.tpl
deleted file mode 100644
index e05649bc5e5..00000000000
--- a/com.woltlab.wcf/templates/selectSearchableOptionType.tpl
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
diff --git a/com.woltlab.wcf/templates/settings.tpl b/com.woltlab.wcf/templates/settings.tpl
index ccb855d79bb..e63bd0d4a98 100644
--- a/com.woltlab.wcf/templates/settings.tpl
+++ b/com.woltlab.wcf/templates/settings.tpl
@@ -6,143 +6,6 @@
{include file='header' __disableAds=true __sidebarLeftHasMenu=true}
-{include file='shared_formError'}
-
-{if $success|isset}
-
{lang}wcf.global.success.edit{/lang}
-{/if}
-
-
+{unsafe:$form->getHtml()}
{include file='footer' __disableAds=true}
diff --git a/com.woltlab.wcf/templates/shared_adminUserProfileHeader.tpl b/com.woltlab.wcf/templates/shared_adminUserProfileHeader.tpl
new file mode 100644
index 00000000000..29d29761c12
--- /dev/null
+++ b/com.woltlab.wcf/templates/shared_adminUserProfileHeader.tpl
@@ -0,0 +1,155 @@
+
+
+
diff --git a/com.woltlab.wcf/templates/shared_gridView.tpl b/com.woltlab.wcf/templates/shared_gridView.tpl
index b44f4a2161c..381d1e33f05 100644
--- a/com.woltlab.wcf/templates/shared_gridView.tpl
+++ b/com.woltlab.wcf/templates/shared_gridView.tpl
@@ -1,5 +1,5 @@
- {if $view->isFilterable()}
+ {if $view->isFilterable() || $view->isColumnConfigurable()}
{foreach from=$view->getActiveFilters() item='value' key='key'}
@@ -16,10 +16,18 @@
{/foreach}
-
+ {if $view->isColumnConfigurable()}
+
+ {/if}
+ {if $view->isFilterable()}
+
+ {/if}
{/if}
@@ -33,29 +41,7 @@
{/if}
- {foreach from=$view->getVisibleColumns() item='column'}
-
isSortable()}data-default-sort-order="{$column->getDefaultSortOrder()}"{/if}
- {if $column->isSortable()}
- {if $view->isSortedBy($column)}
- aria-sort="{if $view->getSortOrder() === 'ASC'}ascending{else}descending{/if}"
- {else}
- aria-sort="none"
- {/if}
- {/if}
- >
- {if $column->isSortable()}
-
- {else}
- {unsafe:$column->getLabel()}
- {/if}
- |
- {/foreach}
+ {unsafe:$view->renderHeaderColumns()}
{if $view->hasInteractions()}
|
{/if}
@@ -117,6 +103,7 @@
['{unsafe:$name|encodeJS}', {unsafe:$value|json}],
{/foreach}
]),
+ {if $view->getVisibleColumnIDs() !== null}{unsafe:$view->getVisibleColumnIDs()|json}{else}undefined{/if},
);
});
diff --git a/com.woltlab.wcf/templates/shared_gridViewHeaderColumns.tpl b/com.woltlab.wcf/templates/shared_gridViewHeaderColumns.tpl
new file mode 100644
index 00000000000..6f3972ce465
--- /dev/null
+++ b/com.woltlab.wcf/templates/shared_gridViewHeaderColumns.tpl
@@ -0,0 +1,23 @@
+{foreach from=$view->getVisibleColumns() item='column'}
+
isSortable()}data-default-sort-order="{$column->getDefaultSortOrder()}"{/if}
+ {if $column->isSortable()}
+ {if $view->isSortedBy($column)}
+ aria-sort="{if $view->getSortOrder() === 'ASC'}ascending{else}descending{/if}"
+ {else}
+ aria-sort="none"
+ {/if}
+ {/if}
+ >
+ {if $column->isSortable()}
+
+ {else}
+ {unsafe:$column->getLabel()}
+ {/if}
+ |
+{/foreach}
diff --git a/com.woltlab.wcf/templates/shared_userConditions.tpl b/com.woltlab.wcf/templates/shared_userConditions.tpl
index 56077ea7471..94d1f5382c4 100644
--- a/com.woltlab.wcf/templates/shared_userConditions.tpl
+++ b/com.woltlab.wcf/templates/shared_userConditions.tpl
@@ -11,18 +11,13 @@
{foreach from=$groupedObjectTypes key='conditionGroup' item='conditionObjectTypes'}
{/foreach}
diff --git a/com.woltlab.wcf/templates/shared_userOptionsCondition.tpl b/com.woltlab.wcf/templates/shared_userOptionsCondition.tpl
deleted file mode 100644
index 312a2960d28..00000000000
--- a/com.woltlab.wcf/templates/shared_userOptionsCondition.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-{foreach from=$optionTree item='category'}
-
-
-
- {include file='optionFieldList' options=$category[options] langPrefix='wcf.user.option.'}
-
-{/foreach}
diff --git a/com.woltlab.wcf/templates/textSearchableOptionType.tpl b/com.woltlab.wcf/templates/textSearchableOptionType.tpl
deleted file mode 100644
index 9bfdfbaa309..00000000000
--- a/com.woltlab.wcf/templates/textSearchableOptionType.tpl
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
required} required{/if}>
-
-
diff --git a/com.woltlab.wcf/templates/textareaSearchableOptionType.tpl b/com.woltlab.wcf/templates/textareaSearchableOptionType.tpl
deleted file mode 100644
index d98eb4d79fc..00000000000
--- a/com.woltlab.wcf/templates/textareaSearchableOptionType.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
diff --git a/com.woltlab.wcf/templates/user.tpl b/com.woltlab.wcf/templates/user.tpl
index 7df99f62937..099fbce7918 100644
--- a/com.woltlab.wcf/templates/user.tpl
+++ b/com.woltlab.wcf/templates/user.tpl
@@ -3,60 +3,12 @@
{capture assign='headContent'}
{event name='javascriptInclude'}
diff --git a/com.woltlab.wcf/templates/userCard.tpl b/com.woltlab.wcf/templates/userCard.tpl
index b8197b41f69..c2fae04ad7a 100644
--- a/com.woltlab.wcf/templates/userCard.tpl
+++ b/com.woltlab.wcf/templates/userCard.tpl
@@ -101,8 +101,8 @@
{/if}
{foreach from=$user->getUserCardOptions() item=userCardOption}
-
{$userCardOption->getTitle()}
-
{unsafe:$userCardOption->optionValue}
+
{$userCardOption[title]}
+
{unsafe:$userCardOption[value]}
{/foreach}
{event name='afterDetails'}
diff --git a/com.woltlab.wcf/templates/userOptionFieldList.tpl b/com.woltlab.wcf/templates/userOptionFieldList.tpl
deleted file mode 100644
index 4af1dcf5bde..00000000000
--- a/com.woltlab.wcf/templates/userOptionFieldList.tpl
+++ /dev/null
@@ -1,19 +0,0 @@
-{foreach from=$options item=optionData}
- {assign var=option value=$optionData[object]}
-
- - {if $isSearchMode|empty || !$optionData[hideLabelInSearch]}{if $isSearchMode|empty && $option->required} *{/if}{/if}
- - {unsafe:$optionData[html]}
- {$option->getDescription()}
-
- {if $errorType|is_array && $errorType[$option->optionName]|isset}
-
- {if $errorType[$option->optionName] == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}{$langPrefix}error.{$errorType[$option->optionName]}{/lang}
- {/if}
-
- {/if}
-
-
-{/foreach}
diff --git a/com.woltlab.wcf/templates/userProfileAbout.tpl b/com.woltlab.wcf/templates/userProfileAbout.tpl
index bcf9db8681a..db174239885 100644
--- a/com.woltlab.wcf/templates/userProfileAbout.tpl
+++ b/com.woltlab.wcf/templates/userProfileAbout.tpl
@@ -2,19 +2,17 @@
{content}
{event name='beforeUserOptions'}
- {foreach from=$options item=category}
- {foreach from=$category[categories] item=optionCategory}
-
- {lang}wcf.user.option.category.{$optionCategory[object]->categoryName}{/lang}
-
- {foreach from=$optionCategory[options] item=userOption}
-
- - {$userOption[object]->getTitle()}
- - {unsafe:$userOption[object]->optionValue}
-
- {/foreach}
-
- {/foreach}
+ {foreach from=$view->getOptionValuesOutput() key=categoryName item=userOptions}
+
+ {$view->getCategoryTitle($categoryName)}
+
+ {foreach from=$userOptions item=userOption}
+
+ - {$userOption[object]->getTitle()}
+ - {unsafe:$userOption[output]}
+
+ {/foreach}
+
{/foreach}
{event name='afterUserOptions'}
diff --git a/com.woltlab.wcf/templates/userProfileAboutEditable.tpl b/com.woltlab.wcf/templates/userProfileAboutEditable.tpl
deleted file mode 100644
index 323b624d376..00000000000
--- a/com.woltlab.wcf/templates/userProfileAboutEditable.tpl
+++ /dev/null
@@ -1,29 +0,0 @@
-{foreach from=$optionTree item=categoryLevel1}
- {foreach from=$categoryLevel1[categories] item=categoryLevel2}
-
- {/foreach}
-{/foreach}
-
-
-
-
-
diff --git a/com.woltlab.wcf/templates/userProfileHeader.tpl b/com.woltlab.wcf/templates/userProfileHeader.tpl
index c89e47c2d6b..6a53e393e18 100644
--- a/com.woltlab.wcf/templates/userProfileHeader.tpl
+++ b/com.woltlab.wcf/templates/userProfileHeader.tpl
@@ -1,23 +1,6 @@