Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
a7ba6e1
Migrate SettingsForm to form builder, backed by form options for user…
BurntimeX Oct 1, 2026
cc587ee
Add `UserOptionBuilder` with create/update/delete commands
BurntimeX Oct 1, 2026
03cf16b
Set default values for required language, style and color scheme sele…
BurntimeX Oct 1, 2026
3918c76
Add `UserBuilder` with create/update/delete commands and migrate `Set…
BurntimeX Oct 2, 2026
6039d53
Move user deletion cleanup from `UserBuilder` into `DeleteUser`
BurntimeX Oct 2, 2026
ca8e7b1
Migrate `RegisterForm` to form builder
BurntimeX Oct 2, 2026
921d35b
Drop `SingletonFactory` requirement for user profile menu content cla…
BurntimeX Oct 2, 2026
68d08f9
Render the user profile "About" tab with UserProfileAboutView and for…
BurntimeX Oct 3, 2026
a4c0164
Replace legacy inline profile editor with form builder dialog
BurntimeX Oct 3, 2026
f4e5836
Move user profile tab content loading to RPC endpoint
BurntimeX Oct 3, 2026
8cf4fff
Decouple profile editor from tab menu and set it up via profile contr…
BurntimeX Oct 3, 2026
749a229
Remove redundant `wcf.user.activityPoint` jsphrase from profile templ…
BurntimeX Oct 3, 2026
e0d6390
Replace frontend user search with user option filters on the members …
BurntimeX Oct 3, 2026
6f33dc1
Add age filter
BurntimeX Oct 3, 2026
d8794fa
Move registration username/email validation to RPC endpoints, enforce…
BurntimeX Oct 4, 2026
5e74aad
Refactor `UserListPage` into a grid view
BurntimeX Oct 4, 2026
f349eb9
Sort ACP user list by newest registrations by default
BurntimeX Oct 4, 2026
e5e78c1
Fix ban dialog crash caused by mismatched date save format
BurntimeX Oct 4, 2026
c4ed40a
Use `wcf.user.banned` for ban status tooltip in user grid view
BurntimeX Oct 4, 2026
c0462c7
Make status icon tooltips in user grid view hoverable
BurntimeX Oct 4, 2026
454d53c
Add "Show Profile" interaction to ACP user actions
BurntimeX Oct 4, 2026
df2261e
Extract user merge logic into `MergeUsers` command
BurntimeX Oct 5, 2026
4c0ce27
Remove obsolete user clipboard unmarking
BurntimeX Oct 5, 2026
d4aeeb9
Remove obsolete user, tag and article clipboard object types
BurntimeX Oct 5, 2026
815bf8a
Remove obsolete tag `SynonymsHandler` clipboard module
BurntimeX Oct 5, 2026
57898ce
Drop `IClipboardAction` from `UserAction` and deprecate unmark methods
BurntimeX Oct 5, 2026
40d6485
Configure default columns for `UserGridView`
BurntimeX Oct 5, 2026
fd78ede
Add user-configurable column visibility to grid views
BurntimeX Oct 5, 2026
f7052a7
Add hidden user option columns to `UserGridView`
BurntimeX Oct 5, 2026
65e6bcb
Fix sorting `UserGridView` by user option columns
BurntimeX Oct 5, 2026
c4f19b4
Move avatar, rank, online status and privacy checks from `UserProfile…
BurntimeX Oct 6, 2026
9fac096
Move user administration permission checks from `UserAdministrationPo…
BurntimeX Oct 6, 2026
74a6789
Add `UserOption::getFormattedValue()` to deduplicate option value for…
BurntimeX Oct 6, 2026
1a48ea6
Remove user option output classes in favor of `UserOption::getFormatt…
BurntimeX Oct 6, 2026
603c4d9
Convert legacy user option types to their form option equivalents
BurntimeX Oct 6, 2026
3a632b5
Remove legacy ban fields from user edit form in favor of the ban inte…
BurntimeX Oct 6, 2026
afb350d
Move ban and enable/disable profile interactions to generic dialog an…
BurntimeX Oct 6, 2026
2bd0d2b
Move disable/enable avatar to dialog and RPC interactions
BurntimeX Oct 6, 2026
f9a9e9a
Move disable/enable cover photo to dialog and RPC interactions
BurntimeX Oct 6, 2026
9ac9dd7
Move disable/enable signature to dialog and RPC interactions
BurntimeX Oct 6, 2026
1136fad
Show user profile header on ACP user edit page
BurntimeX Oct 6, 2026
38e0202
Remove legacy avatar/cover photo tabs from ACP user edit form
BurntimeX Oct 6, 2026
e84a84e
Show 3rd-party login and MFA status in ACP user profile header
BurntimeX Oct 6, 2026
9188bea
Move 3rd-party login disconnect to RPC interaction
BurntimeX Oct 6, 2026
ea36084
Move MFA disable to RPC interaction with manageability check
BurntimeX Oct 6, 2026
6d12bc2
Remove legacy signature-block fields from ACP user add/edit forms
BurntimeX Oct 6, 2026
1499e88
Migrate ACP user add/edit form to form builder
BurntimeX Oct 7, 2026
bf07a01
Pass user to `wcf.user.banned` phrase in profile header
BurntimeX Oct 7, 2026
0a66ece
Merge ACP user form language/style sections into general container
BurntimeX Oct 7, 2026
dd106ff
Remove legacy user search condition object types and deprecate `condi…
BurntimeX Oct 7, 2026
258cabf
Add user option object filters
BurntimeX Oct 7, 2026
a173635
Support date user options in user filters by comparing `Y-m-d` bounds
BurntimeX Oct 7, 2026
a397352
Replace `UserOptionHandler` in GDPR export with `TUserOptionsByCategory`
BurntimeX Oct 7, 2026
4739f10
Migrate `UserOptionSetDefaultsForm` to form builder using `TUserOptio…
BurntimeX Oct 7, 2026
23a7558
Replace `UserOptionHandler` in `UserMenu` with `TUserOptionsByCategory`
BurntimeX Oct 7, 2026
adb2c22
Migrate UserOptionPackageInstallationPlugin to database object builders
BurntimeX Oct 7, 2026
df0a8e0
Deprecate `UserOptionHandler` and legacy user option search/condition…
BurntimeX Oct 7, 2026
5be87f9
Remove unused `enableOptions` from user options
BurntimeX Oct 7, 2026
975333b
Replace `labeledUrl` with `socialMedia` user option type and migrate …
BurntimeX Oct 7, 2026
ce128d4
require absolute http(s) URLs in `UrlFormField` to prevent XSS
BurntimeX Oct 7, 2026
fb33e07
Move `labeledUrl` validation pattern to `profileNamePattern` and drop…
BurntimeX Oct 7, 2026
e87d59d
Remove unused `contentPattern` from user option PIP
BurntimeX Oct 7, 2026
4eae141
Drop `additionalData`/`messageObjectType` from user options
BurntimeX Oct 7, 2026
c0d0dc2
Decouple `UserOption` from legacy `Option` base class
BurntimeX Oct 7, 2026
790de0f
Remove legacy `UserOptionHandler`, `UserOptionListForm` and `UserOpti…
BurntimeX Oct 7, 2026
004bad4
Deprecate `ViewableUserOption`
BurntimeX Oct 7, 2026
03bc1d4
Remove unused `$optionValue` property from `UserOption`
BurntimeX Oct 7, 2026
589a415
Pass target user to `UserOption::isVisible()`/`isEditable()` instead …
BurntimeX Oct 7, 2026
390c2f1
Restrict `TimezoneFormOption` to the built-in user option and hide it…
BurntimeX Oct 8, 2026
f0b1df7
Migrate `UserOptionAddForm` to `DatabaseObjectBuilder` via new `Abstr…
BurntimeX Oct 8, 2026
b174c34
Convert legacy option types and configuration in the user option impo…
BurntimeX Oct 8, 2026
43ee5a9
Store user option titles and descriptions in the l10n storage
BurntimeX Oct 8, 2026
b48dfaf
Move column definition to `UserOptionBuilder` and deprecate legacy us…
BurntimeX Oct 8, 2026
a3c1014
Remove duplicate `CreateOption`/`UpdateOption` commands in favor of `…
BurntimeX Oct 8, 2026
3398cd0
Remove `UserOptionBuilder::resetCache()` in favor of direct `UserOpti…
BurntimeX Oct 8, 2026
94c2ae6
Manage user option value columns via DatabaseTableChangeProcessor usi…
BurntimeX Oct 8, 2026
a829b21
Delete user option categories via `UserOptionCategoryBuilder`
BurntimeX Oct 11, 2026
fa18167
Delete obsolete code
BurntimeX Oct 11, 2026
4927641
Migrate user option category titles to l10n storage with builder-base…
BurntimeX Oct 11, 2026
aeaeb8e
Reduce cover photo height and add spacing for profile header on ACP u…
BurntimeX Oct 11, 2026
614e81b
Refresh ACP user profile header via RPC after interactions instead of…
BurntimeX Oct 11, 2026
a64a4cb
Pass users to content removal dialog description
BurntimeX Oct 11, 2026
0e8312f
Inline UserContentRemoveBulkInteraction as anonymous class
BurntimeX Oct 11, 2026
509707f
Honor skipNotification in UserAction::confirmEmail() to avoid admin a…
BurntimeX Oct 11, 2026
6abe823
Migrate user merge to form builder dialog
BurntimeX Oct 11, 2026
04f2429
Extract user merge column reassignment into UserColumn/ReassignUserCo…
BurntimeX Oct 11, 2026
72e214e
Hide user merge bulk interaction when fewer than two users are selected
BurntimeX Oct 11, 2026
6fe0d07
Migrate user content revert changes to form builder dialog
BurntimeX Oct 11, 2026
7fd4866
Migrate user assign to group to form builder dialog
BurntimeX Oct 11, 2026
cefc51c
Migrate user email address export to form builder dialog
BurntimeX Oct 11, 2026
473cd1c
Inline user group, language and option persistence into UserBuilder
BurntimeX Oct 11, 2026
40c8e83
Extract user rank refresh into RefreshUserRanks command
BurntimeX Oct 11, 2026
c188f9b
Extract user online marking refresh into RefreshUserOnlineMarkings co…
BurntimeX Oct 11, 2026
5e20845
Migrate detailed activity point list to RPC endpoint
BurntimeX Oct 11, 2026
f8fb914
Extract special trophy update into SetSpecialTrophies command
BurntimeX Oct 11, 2026
fb613b4
Migrate signature preview to RPC endpoint
BurntimeX Oct 11, 2026
7aa7e58
Deprecate `UserProfileAction`
BurntimeX Oct 11, 2026
de49ba6
Remove obsolete `UserContentAction`
BurntimeX Oct 11, 2026
b175c80
Remove obsolete `UserRegistrationAction` and legacy registration vali…
BurntimeX Oct 11, 2026
c8a1b47
Deprecate legacy `UserAction` methods
BurntimeX Oct 11, 2026
325e89c
Migrate user deletion callers to `DeleteUser` command
BurntimeX Oct 12, 2026
7c7b966
Deprecate `UserAction::delete()` in favor of `DeleteUser` command
BurntimeX Oct 12, 2026
4091946
Replace `cancelLostPasswordRequest` action with `UserBuilder` in logi…
BurntimeX Oct 12, 2026
a898840
Add `RemoveUserFromGroups` command and deprecate `UserAction::removeF…
BurntimeX Oct 12, 2026
2ffffd1
Add `AddUserToGroups` command and deprecate `UserAction::addToGroups()`
BurntimeX Oct 12, 2026
92bd188
Replace `devtoolsSetLanguage` action with `SetLanguage` RPC endpoint
BurntimeX Oct 12, 2026
f76f818
Replace `saveUserConsent` action with `SaveUserConsent` RPC endpoint
BurntimeX Oct 12, 2026
21e28c9
Replace `UserAction::create()` calls with `CreateUser`/`UserBuilder` …
BurntimeX Oct 12, 2026
e53b763
Replace remaining `UserAction::update()` calls with `UpdateUser` and …
BurntimeX Oct 12, 2026
ef6859e
Add `UserRenamed::updateUsernameColumn()` to register username column…
BurntimeX Oct 12, 2026
143f77f
Deprecate `UserAction` in favor of `UserBuilder` and user commands
BurntimeX Oct 12, 2026
3b05f5e
Replace remaining `UserEditor` usages with `UserBuilder` and user com…
BurntimeX Oct 12, 2026
c6ca747
Fix PHPStan issue
BurntimeX Oct 12, 2026
2b4ce7c
Convert checkbox defaults/values, labeledUrl and wysiwyg in user opti…
BurntimeX Oct 12, 2026
59f3642
Add `User::canConfirmEmail()` with `UserEmailConfirmationChecking` ev…
BurntimeX Oct 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 7 additions & 1 deletion XSD/userOption.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
<xs:element name="menuicon" type="woltlab_varchar_nullable" minOccurs="0" />
<xs:element name="parent" type="woltlab_varchar_nullable" minOccurs="0" />
<xs:element name="showorder" type="xs:unsignedInt" minOccurs="0" />
<xs:element name="options" type="xs:string" minOccurs="0" />
<xs:element name="permissions" type="xs:string" minOccurs="0" />
</xs:all>
</xs:extension>
</xs:complexContent>
Expand All @@ -66,11 +68,12 @@
<xs:element name="selectoptions" type="xs:string" minOccurs="0" />
<xs:element name="enableoptions" type="xs:string" minOccurs="0" />
<xs:element name="required" type="woltlab_boolean" minOccurs="0" />
<xs:element name="askduringregistration" type="woltlab_boolean" minOccurs="0" />
<xs:element name="editable" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="4" />
<xs:maxInclusive value="6" />
</xs:restriction>
</xs:simpleType>
</xs:element>
Expand All @@ -90,6 +93,9 @@
<xs:element name="isdisabled" type="woltlab_boolean" minOccurs="0" />
<xs:element name="messageObjectType" type="woltlab_varchar" minOccurs="0" />
<xs:element name="contentpattern" type="xs:string" minOccurs="0" />
<xs:element name="profilenamepattern" type="xs:string" minOccurs="0" />
<xs:element name="profileurlpattern" type="xs:string" minOccurs="0" />
<xs:element name="labeledurl" type="xs:string" minOccurs="0" />
</xs:all>
</xs:extension>
</xs:complexContent>
Expand Down
6 changes: 6 additions & 0 deletions com.woltlab.wcf/acpTemplateDelete.xml
Original file line number Diff line number Diff line change
Expand Up @@ -157,5 +157,11 @@
<template>imageViewer</template>
<template>tagSetAsSynonyms</template>
<template>contactSettings</template>
<template>removeUserContentDialog</template>
<template>userSearch</template>
<template>userMerge</template>
<template>userContentRevertChanges</template>
<template>userAssignToGroup</template>
<template>userEmailAddressExport</template>
</delete>
</data>
58 changes: 29 additions & 29 deletions com.woltlab.wcf/clipboardAction.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/6.0/clipboardAction.xsd">
<import>
<!-- com.woltlab.wcf.media -->
<action name="insert">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>1</showorder>
<pages>
<page>menuManagerDialog-editor</page>
</pages>
</action>
<action name="delete">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>2</showorder>
<pages>
<page>wcf\acp\page\MediaListPage</page>
<page>menuManagerDialog-editor</page>
<page>menuManagerDialog-select</page>
</pages>
</action>
<action name="setCategory">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>3</showorder>
<pages>
<page>wcf\acp\page\MediaListPage</page>
<page>menuManagerDialog-editor</page>
<page>menuManagerDialog-select</page>
</pages>
</action>
<!-- /com.woltlab.wcf.media -->
</import>
<delete>
<!-- com.woltlab.wcf.user -->
<action name="assignToGroup">
<actionclassname>wcf\system\clipboard\action\UserClipboardAction</actionclassname>
Expand Down Expand Up @@ -94,35 +123,6 @@
</pages>
</action>
<!-- /com.woltlab.wcf.user -->
<!-- com.woltlab.wcf.media -->
<action name="insert">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>1</showorder>
<pages>
<page>menuManagerDialog-editor</page>
</pages>
</action>
<action name="delete">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>2</showorder>
<pages>
<page>wcf\acp\page\MediaListPage</page>
<page>menuManagerDialog-editor</page>
<page>menuManagerDialog-select</page>
</pages>
</action>
<action name="setCategory">
<actionclassname>wcf\system\clipboard\action\MediaClipboardAction</actionclassname>
<showorder>3</showorder>
<pages>
<page>wcf\acp\page\MediaListPage</page>
<page>menuManagerDialog-editor</page>
<page>menuManagerDialog-select</page>
</pages>
</action>
<!-- /com.woltlab.wcf.media -->
</import>
<delete>
<!-- com.woltlab.wcf.article -->
<action name="trash">
<actionclassname>wcf\system\clipboard\action\ArticleClipboardAction</actionclassname>
Expand Down
41 changes: 41 additions & 0 deletions com.woltlab.wcf/fileDelete.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@
<file>js/WoltLabSuite/Core/Ui/User/CoverPhoto/Delete.js</file>
<file>js/WoltLabSuite/Core/Ui/User/CoverPhoto/Upload.js</file>
<file>lib/form/AvatarEditForm.class.php</file>
<file>lib/form/UserSearchForm.class.php</file>
<file>lib/action/EmailValidationAction.class.php</file>
<file>lib/action/UsernameValidationAction.class.php</file>
<file>js/WoltLabSuite/Core/Acp/Controller/User/List.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Editor.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/Abstract.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/BanAction.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/DeleteAction.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/DisableAction.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/SendNewPasswordAction.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/ToggleConfirmEmailAction.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Ban.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Ban/Dialog.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Action/Handler/Delete.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Content/Remove/Clipboard.js</file>
<file>js/WoltLabSuite/Core/Acp/Ui/User/Content/Remove/Handler.js</file>
<file>js/WoltLabSuite/Core/Ui/User/Editor.js</file>
<file>lib/acp/action/UserQuickSearchAction.class.php</file>
<file>lib/acp/form/UserSearchForm.class.php</file>
<file>lib/data/user/UserContentAction.class.php</file>
<file>lib/data/user/UserRegistrationAction.class.php</file>
<file>lib/system/clipboard/action/UserClipboardAction.class.php</file>
<file>lib/system/clipboard/action/UserContentClipboardAction.class.php</file>
<file>lib/system/listView/user/UserSearchResultsListView.class.php</file>
<file>lib/system/api/cuyz/valinor/qa/PHPStan/Stubs/Psr/SimpleCache/CacheInterface.stub</file>
<file>lib/system/api/cuyz/valinor/src/Cache/ChainCache.php</file>
<file>lib/system/api/cuyz/valinor/src/Cache/WarmupCache.php</file>
Expand Down Expand Up @@ -76,6 +100,23 @@
<file>lib/system/upload/AvatarUploadFileValidationStrategy.class.php</file>
<file>lib/system/upload/UserCoverPhotoUploadFileSaveStrategy.class.php</file>
<file>lib/system/upload/UserCoverPhotoUploadFileValidationStrategy.class.php</file>
<file>lib/system/option/user/BirthdayUserOptionOutput.class.php</file>
<file>lib/system/option/user/DateUserOptionOutput.class.php</file>
<file>lib/system/option/user/FacebookUserOptionOutput.class.php</file>
<file>lib/system/option/user/FloatUserOptionOutput.class.php</file>
<file>lib/system/option/user/ImageUserOptionOutput.class.php</file>
<file>lib/system/option/user/LabeledUrlUserOptionOutput.class.php</file>
<file>lib/system/option/user/MessageUserOptionOutput.class.php</file>
<file>lib/system/option/user/NewlineToBreakUserOptionOutput.class.php</file>
<file>lib/system/option/user/SelectOptionsUserOptionOutput.class.php</file>
<file>lib/system/option/user/TwitterUserOptionOutput.class.php</file>
<file>lib/system/option/user/URLUserOptionOutput.class.php</file>
<file>lib/system/option/user/UserOptionHandler.class.php</file>
<file>lib/acp/form/UserOptionListForm.class.php</file>
<file>lib/system/condition/UserOptionsCondition.class.php</file>
<file>lib/acp/form/UserContentRevertChangesForm.class.php</file>
<file>lib/acp/form/UserAssignToGroupForm.class.php</file>
<file>lib/acp/form/UserEmailAddressExportForm.class.php</file>

<file>icon/font-awesome/v6/brands/42-group.svg</file>
<file>icon/font-awesome/v6/brands/500px.svg</file>
Expand Down
6 changes: 0 additions & 6 deletions com.woltlab.wcf/menuItem.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,6 @@
<title language="en">Staff</title>
<page>com.woltlab.wcf.Team</page>
</item>
<item identifier="com.woltlab.wcf.UserSearch">
<parent>com.woltlab.wcf.MembersList</parent>
<title language="de">Mitgliedersuche</title>
<title language="en">Search Members</title>
<page>com.woltlab.wcf.UserSearch</page>
</item>
<item identifier="com.woltlab.wcf.PrivacyPolicy">
<menu>com.woltlab.wcf.FooterMenu</menu>
<title language="de">Datenschutzerklärung</title>
Expand Down
Loading
Loading