Matthias Schmidt [Fri, 9 Apr 2021 11:54:30 +0000 (13:54 +0200)]
Add `Ui/Message/Share/Dialog` as reusable share dialog module (#4108)
* Add `Ui/Message/Share/Dialog` as reusable share dialog module
Close #4026
* Apply suggestions from code review
* Apply suggestions from code review
Tim Düsterhus [Fri, 9 Apr 2021 08:49:47 +0000 (10:49 +0200)]
Merge pull request #4110 from WoltLab/xars-oof
Set X-Auto-Response-Suppress: OOF header on all mail
Tim Düsterhus [Fri, 9 Apr 2021 08:43:57 +0000 (10:43 +0200)]
Set X-Auto-Response-Suppress: OOF header on all mail
I was not able to think of a case where out-of-office notifications would be
desired in response to an email sent by WoltLab Suite, so onto all emails it
goes.
Resolves #4104
Matthias Schmidt [Fri, 9 Apr 2021 07:31:12 +0000 (09:31 +0200)]
Consistently use "The entered X" in English phrases (#4109)
See #3801
Matthias Schmidt [Fri, 9 Apr 2021 06:46:02 +0000 (08:46 +0200)]
Merge branch '5.3'
Joshua Rüsweg [Wed, 7 Apr 2021 10:50:45 +0000 (12:50 +0200)]
Merge pull request #4103 from WoltLab/acp-user-email-search
Add acp user email search
Joshua Rüsweg [Wed, 7 Apr 2021 10:50:37 +0000 (12:50 +0200)]
Fix codestyle
Co-authored-by: Tim Düsterhus <duesterhus@woltlab.com>
joshuaruesweg [Wed, 7 Apr 2021 10:49:03 +0000 (12:49 +0200)]
Remove German language tag for spider URL
See
2f4ab6f10ee34601a2931307cc6cc1601943fcd7
Marcel Werk [Wed, 7 Apr 2021 10:01:50 +0000 (12:01 +0200)]
Merge branch '5.3'
Marcel Werk [Wed, 7 Apr 2021 09:54:07 +0000 (11:54 +0200)]
Merge branch '5.2' into 5.3
Marcel Werk [Wed, 7 Apr 2021 09:53:54 +0000 (11:53 +0200)]
Lack of filtering of content from ignored users
Tim Düsterhus [Wed, 7 Apr 2021 08:14:52 +0000 (10:14 +0200)]
Merge branch '5.3'
Tim Düsterhus [Wed, 7 Apr 2021 07:18:44 +0000 (09:18 +0200)]
Merge pull request #4105 from WoltLab/notification-markAllAsRead
Attempt to prevent deadlocks involving marking all notifications as read
Tim Düsterhus [Tue, 6 Apr 2021 14:24:49 +0000 (16:24 +0200)]
Attempt to prevent deadlocks involving marking all notifications as read
The previous implementation, UPDATEing all rows with a specific userID, needed
to create pretty coarse locks on the `userID` INDEX. Specifically it also
created gap locks, preventing concurrent *creation* of INDEX records that would
have been matched.
My current understanding of MySQL's locking behavior is that the `confirmTime`
being part of the INDEX is what caused the issue:
The `userID` INDEX includes the columns userID, eventID, objectID and
confirmTime. Now consider the following:
Thread 1: Marks all notifications for userID = A as read.
Thread 2: Marks objects X, Y and Z for userID A as read.
Thread 1 will lock all existing notifications for userID = A as well as all
insertions into the `userID` INDEX with that specific userID. This includes
marking notifications as read, because this will delete the old index record
and insert a new index record with an updated confirmTime.
Thread 2 will lock the specific notifications for userID = A as well as all
insertions into the `userID` INDEX with that specific userID and objectIDs.
This includes marking notifications as read, because this will delete the old
index record and insert a new index record with an updated confirmTime.
Now consider the following timeline:
T1: Locks the gaps for userID = A.
T2: Locks the gaps for userID = A, objects X, Y, Z.
These locks are allowed to coexist:
> Gap locks in InnoDB are “purely inhibitive”, which means that their only
> purpose is to prevent other transactions from inserting to the gap.
(https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html)
T1: Wants to UPDATE the confirmTime for userID = A, object X.
-> This is prevented by the gap lock held by T2, thus T1 waits.
T2: Wants to UPDATE the confirmTime for userID = A, object X.
-> This is prevented by the gap lock held by T1, thus T2 waits.
Now we have a deadlock.
As the current query needs to UPDATE a large number of rows it is fairly slow,
holding the locks for a long time and also needing to update the rows
one-by-one. This gives other threads enough opportunity to run in-between,
wreaking havoc.
Fix this issue by first selecting the exact notifications we need to mark as
read using a simple SELECT. This SELECT should not be able to deadlock with
concurrent write statements.
Afterwards we update the notifications based off a condition matching specific
rows within the PRIMARY KEY. As these must match existing rows only, no gap
locks will be needed, thus reducing the chance to block concurrent threads.
Additionally we only need to update a very small number of rows (should be less
than 50 in the vast majority of cases), reducing the time spent in the query,
further closing the window for concurrent requests and possibly making the
process faster due to less rows being updated (and thus needing to be written
to disk).
Tim Düsterhus [Tue, 6 Apr 2021 12:57:48 +0000 (14:57 +0200)]
Update to Guzzle 7.3
Tim Düsterhus [Tue, 6 Apr 2021 10:20:40 +0000 (12:20 +0200)]
Merge pull request #4098 from netzhuffle/patch-4
Fix param type for handleException
joshuaruesweg [Sun, 4 Apr 2021 20:23:09 +0000 (22:23 +0200)]
Add acp user email search
joshuaruesweg [Sun, 4 Apr 2021 19:49:45 +0000 (21:49 +0200)]
Add meta tags for trophy page
joshuaruesweg [Sun, 4 Apr 2021 15:29:33 +0000 (17:29 +0200)]
Add PetalBot
joshuaruesweg [Sun, 4 Apr 2021 15:13:58 +0000 (17:13 +0200)]
Add Googlebot-Video
joshuaruesweg [Sun, 4 Apr 2021 15:11:36 +0000 (17:11 +0200)]
Add WoltLab Suite bot
joshuaruesweg [Sun, 4 Apr 2021 15:02:20 +0000 (17:02 +0200)]
Add meta tags for CategoryArticleListPage
Matthias Schmidt [Wed, 31 Mar 2021 11:33:12 +0000 (13:33 +0200)]
Fix code style
Matthias Schmidt [Wed, 31 Mar 2021 11:16:37 +0000 (13:16 +0200)]
Fix code style
Matthias Schmidt [Wed, 31 Mar 2021 11:15:21 +0000 (13:15 +0200)]
Merge branch '5.3'
Marcel Werk [Wed, 31 Mar 2021 09:16:59 +0000 (11:16 +0200)]
Preview images and cover photos were exported twice
Marcel Werk [Tue, 30 Mar 2021 17:54:29 +0000 (19:54 +0200)]
Remove/replace nbsp when copying code to the clipboard
Matthias Schmidt [Tue, 30 Mar 2021 16:44:40 +0000 (18:44 +0200)]
Merge branch '5.3'
Marcel Werk [Tue, 30 Mar 2021 16:39:32 +0000 (18:39 +0200)]
Cover photo deletion was not saved properly
Marcel Werk [Tue, 30 Mar 2021 13:24:21 +0000 (15:24 +0200)]
Always fetch package information using the default language
Matthias Schmidt [Tue, 30 Mar 2021 13:08:34 +0000 (15:08 +0200)]
Improve `Ui/Object/Action` implementation (#4101)
* Improve `Ui/Object/Action` implementation
1. The `objectAction` callback of `Ui/Object/Action/Handler` no gets the whole `data: ObjectActionData` data structure instead of each element separately.
2. `ObjectActionData` now also contains the container element.
3. Add support for `data-object-action-handler` for action buttons. The default actions ignore actions triggered by buttons with such attributes. Instead, custom handlers can react to specific actions by checking for the value of this attribute.
* Use `insertAdjacentElement` in `Ui/Object/Action/Delete`
Co-authored-by: Alexander Ebert <ebert@woltlab.com>
Marcel Werk [Tue, 30 Mar 2021 13:08:03 +0000 (15:08 +0200)]
Fixed missing language variables for error messages
Marcel Werk [Tue, 30 Mar 2021 13:04:08 +0000 (15:04 +0200)]
Removed obsolete language variables
Marcel Werk [Mon, 29 Mar 2021 16:24:45 +0000 (18:24 +0200)]
Merge branch '5.2' into 5.3
Marcel Werk [Mon, 29 Mar 2021 16:24:08 +0000 (18:24 +0200)]
Merge branch '3.1' into 5.2
Marcel Werk [Mon, 29 Mar 2021 16:23:50 +0000 (18:23 +0200)]
Update the user rank after users change their profile
Matthias Schmidt [Mon, 29 Mar 2021 14:13:03 +0000 (16:13 +0200)]
Fix identifier of DOM change listener in `Ui/Object/Action`
Marcel Werk [Mon, 29 Mar 2021 13:52:14 +0000 (15:52 +0200)]
Removed obsolete Chrome workaround for dialogs with scrollbars
Marcel Werk [Sun, 28 Mar 2021 12:29:18 +0000 (14:29 +0200)]
Removed obsolete whitespaces
Marcel Werk [Sun, 28 Mar 2021 12:13:50 +0000 (14:13 +0200)]
Delete trophy images when deleting tropies
Marcel Werk [Sun, 28 Mar 2021 12:13:14 +0000 (14:13 +0200)]
Fixed wrong parameter type
Marcel Werk [Sun, 28 Mar 2021 11:17:59 +0000 (13:17 +0200)]
Missing margin for trophies with images
Marcel Werk [Sun, 28 Mar 2021 11:02:52 +0000 (13:02 +0200)]
Hide comment counter when comments are disabled
Marcel Werk [Sun, 28 Mar 2021 10:48:19 +0000 (12:48 +0200)]
Made sure ids in toc are unique
Marcel Werk [Sun, 28 Mar 2021 09:51:29 +0000 (11:51 +0200)]
Merge branch '5.2' into 5.3
Marcel Werk [Sun, 28 Mar 2021 09:38:13 +0000 (11:38 +0200)]
Merge branch '3.1' into 5.2
Marcel Werk [Sun, 28 Mar 2021 09:37:09 +0000 (11:37 +0200)]
Strip rtl override char
Joshua Rüsweg [Fri, 26 Mar 2021 13:58:27 +0000 (14:58 +0100)]
Merge pull request #4093 from WoltLab/redirect-guard
Add RedirectGuard
Alexander Ebert [Fri, 26 Mar 2021 11:36:18 +0000 (12:36 +0100)]
Permit the use of `array_diff` in templates
If only developers would stop moving business logic into templates…
Matthias Schmidt [Wed, 24 Mar 2021 12:40:48 +0000 (13:40 +0100)]
Merge pull request #4080 from WoltLab/ts_dbo_action
Add global `WCF.Action.(Delete|Toggle)` replacement modules
Matthias Schmidt [Wed, 24 Mar 2021 12:37:19 +0000 (13:37 +0100)]
Merge branch 'master' into ts_dbo_action
Matthias Schmidt [Wed, 24 Mar 2021 12:35:46 +0000 (13:35 +0100)]
Avoid using template compiler in `ObjectActionFunctionTemplatePlugin`
Language items in `wcf.global.` do not support template scripting by default. Instead of "manually" adding support for template scripting for this specific case, the relevant language item has been moved to a different language item category.
Matthias Schmidt [Wed, 24 Mar 2021 08:02:24 +0000 (09:02 +0100)]
Replace use of `WCF.Search.User` with `Ui/User/Search/Input` (#4096)
* Replace use of `WCF.Search.User` with `Ui/User/Search/Input`
See #3876
* Remove obsolete TODO
See
9d7cfda776e5c3809babfeb003d1212c29413619
Co-authored-by: Alexander Ebert <ebert@woltlab.com>
Co-authored-by: Alexander Ebert <ebert@woltlab.com>
Jannis Grimm [Tue, 23 Mar 2021 19:32:39 +0000 (20:32 +0100)]
Fix param type for handleException
WCF::handleException incorrectly stated it would receive only \Exception, while it is registered to receive any \Throwable.
Alexander Ebert [Tue, 23 Mar 2021 18:16:23 +0000 (19:16 +0100)]
Incorrect position of the suggestion drop-down
Related issue: #4096
Matthias Schmidt [Mon, 22 Mar 2021 12:21:17 +0000 (13:21 +0100)]
Remove duplicate colon
Matthias Schmidt [Mon, 22 Mar 2021 12:04:08 +0000 (13:04 +0100)]
Remove trailing whitespace in ObjectActionFunctionTemplatePlugin documentation
Matthias Schmidt [Mon, 22 Mar 2021 11:58:39 +0000 (12:58 +0100)]
Extend documentation of `ObjectActionFunctionTemplatePlugin`
Matthias Schmidt [Mon, 22 Mar 2021 11:45:18 +0000 (12:45 +0100)]
Make `wcf.global.button.delete.confirmMessage` globally available in JS code
Matthias Schmidt [Sun, 21 Mar 2021 13:50:23 +0000 (14:50 +0100)]
Update obsolete comment in `Media/Manager/Base`
Matthias Schmidt [Sun, 21 Mar 2021 13:49:29 +0000 (14:49 +0100)]
Deprecate `WCF.Action.*` classes
Matthias Schmidt [Sun, 21 Mar 2021 13:47:16 +0000 (14:47 +0100)]
Use `Ui/Object/Action/Delete` for attachments
joshuaruesweg [Sun, 21 Mar 2021 11:30:10 +0000 (12:30 +0100)]
Add Applebot as spider
Matthias Schmidt [Sun, 21 Mar 2021 09:54:05 +0000 (10:54 +0100)]
Remove obsolete import
Matthias Schmidt [Sun, 21 Mar 2021 09:48:28 +0000 (10:48 +0100)]
Replace use of `WCF.Action.SimpleProxy` with `Ui/Object/Action`
Matthias Schmidt [Sun, 21 Mar 2021 09:47:20 +0000 (10:47 +0100)]
Remove obsolete JavaScript function
Matthias Schmidt [Sun, 21 Mar 2021 09:42:34 +0000 (10:42 +0100)]
Use `Ui/Object/Action` for media files
Matthias Schmidt [Sun, 21 Mar 2021 08:54:16 +0000 (09:54 +0100)]
Use `Ui/Object/Action/Delete` in more places in ACP
Matthias Schmidt [Sun, 21 Mar 2021 08:43:42 +0000 (09:43 +0100)]
Support nested structures in `Ui/Object/Action/Delete`
Matthias Schmidt [Sun, 21 Mar 2021 08:33:51 +0000 (09:33 +0100)]
Convert last uses of `WCF.Action.Toggle` to `Ui/Action/Toggle`
Matthias Schmidt [Sun, 21 Mar 2021 08:33:13 +0000 (09:33 +0100)]
Add support for `(enable|disable)Title` for toggling in `{objectAction}`
Matthias Schmidt [Sat, 20 Mar 2021 12:22:53 +0000 (13:22 +0100)]
Fix code formatting in ObjectActionFunctionTemplatePlugin
Matthias Schmidt [Sat, 20 Mar 2021 12:15:38 +0000 (13:15 +0100)]
Use `Ui/Object/Action/Delete` in frontend
Matthias Schmidt [Sat, 20 Mar 2021 12:09:28 +0000 (13:09 +0100)]
Use ObjectActionFunctionTemplatePlugin in more places in ACP
Matthias Schmidt [Thu, 18 Mar 2021 10:04:08 +0000 (11:04 +0100)]
Add and use ObjectActionFunctionTemplatePlugin
Matthias Schmidt [Wed, 17 Mar 2021 15:07:32 +0000 (16:07 +0100)]
Use new templates for object action delete and toggle icons
Matthias Schmidt [Wed, 17 Mar 2021 15:07:16 +0000 (16:07 +0100)]
Add templates for object action delete and toggle icons
Matthias Schmidt [Tue, 16 Mar 2021 13:56:07 +0000 (14:56 +0100)]
Start using `Ui/Object/Action/*` in ACP
Matthias Schmidt [Mon, 15 Mar 2021 09:13:46 +0000 (10:13 +0100)]
Apply suggestions from code review
Matthias Schmidt [Mon, 15 Mar 2021 09:00:04 +0000 (10:00 +0100)]
Move `Controller/ClipboardData` to `Controller/Clipboard/Data`
Matthias Schmidt [Sun, 14 Mar 2021 12:26:02 +0000 (13:26 +0100)]
Add draft for global `WCF.Action.(Delete|Toggle)` replacement modules
Matthias Schmidt [Sun, 21 Mar 2021 09:20:50 +0000 (10:20 +0100)]
Fix editing newly uploaded media files
Matthias Schmidt [Sun, 21 Mar 2021 09:13:19 +0000 (10:13 +0100)]
Merge pull request #4095 from WoltLab/WCF_Action_Proxy
Stop using `WCF.Action.Proxy` in templates
Matthias Schmidt [Sun, 21 Mar 2021 08:11:42 +0000 (09:11 +0100)]
Apply suggestions from code review
Co-authored-by: Alexander Ebert <ebert@woltlab.com>
joshuaruesweg [Sat, 20 Mar 2021 16:48:03 +0000 (17:48 +0100)]
Throw `UserInputException` insteadof `InvalidArgumentException` for invalid captchas
See
80d79b25e7c027b48487bc822faf4256534f22e2
joshuaruesweg [Sat, 20 Mar 2021 16:40:54 +0000 (17:40 +0100)]
Merge branch '5.3'
joshuaruesweg [Sat, 20 Mar 2021 15:38:02 +0000 (16:38 +0100)]
Throw `UserInputException` insteadof `InvalidArgumentException` for invalid captchas
Currently, bots are deliberately manipulating the field to provoke an exception. This is prevented with this fix.
Matthias Schmidt [Sat, 20 Mar 2021 13:01:40 +0000 (14:01 +0100)]
Use `Ui/Sortable/List` instead of `WCF.Sortable.List`
See #3876
Matthias Schmidt [Sat, 20 Mar 2021 12:43:01 +0000 (13:43 +0100)]
Use modern JavaScript to reset data import mapping
Matthias Schmidt [Sat, 20 Mar 2021 12:37:38 +0000 (13:37 +0100)]
Move cronjob execution to `BootstrapFrontend` and use `Ajax` module
joshuaruesweg [Sat, 20 Mar 2021 11:39:51 +0000 (12:39 +0100)]
Add missing new line
joshuaruesweg [Sat, 20 Mar 2021 11:36:16 +0000 (12:36 +0100)]
Add UGC tag only for user generated content
Tim Düsterhus [Thu, 18 Mar 2021 10:51:53 +0000 (11:51 +0100)]
Use RedirectGuard in ImageProxy
Tim Düsterhus [Thu, 18 Mar 2021 10:51:22 +0000 (11:51 +0100)]
Use RedirectGuard during URL unfurling
Tim Düsterhus [Thu, 18 Mar 2021 10:51:09 +0000 (11:51 +0100)]
Add RedirectGuard for Guzzle
Marcel Werk [Thu, 18 Mar 2021 10:42:28 +0000 (11:42 +0100)]
Merge pull request #4091 from WoltLab/password-focus
Maintain focus of the password input when adding the password visibility button
Tim Düsterhus [Wed, 17 Mar 2021 15:31:21 +0000 (16:31 +0100)]
Merge branch '5.3'
Tim Düsterhus [Wed, 17 Mar 2021 15:17:10 +0000 (16:17 +0100)]
Merge pull request #4092 from WoltLab/woltlab-source-isactive
Use WoltLabSource.isActive() to check whether the source view is enabled
Tim Düsterhus [Wed, 17 Mar 2021 14:58:36 +0000 (15:58 +0100)]
Use WoltLabSource.isActive() to check whether the source view is enabled
Apparently the previous version, checking the height of the textarea, is broken
in the Kiwi Browser for Android even though it pretends to be a standard Chrome
88 without indicating anywhere within the User-Agent that it is not.
Luckily the fix is easy enough and technically the more correct solution even
for non-broken browsers.
I verified the correct functionality using Kiwi on Android and Firefox on
Linux.
Tim Düsterhus [Wed, 17 Mar 2021 13:04:15 +0000 (14:04 +0100)]
Maintain focus of the password input when adding the password visibility button
Fixes #4050