Tim Düsterhus [Wed, 27 Jan 2021 10:35:04 +0000 (11:35 +0100)]
Stop accessing wcf1_tag_to_object.languageID during DELETE in TagEngine
This stops accessing the redundant `languageID` column that is functionally
dependent on the tagID (see #3803).
Tim Düsterhus [Wed, 27 Jan 2021 09:59:30 +0000 (10:59 +0100)]
Stop accessing wcf1_tag_to_object.languageID in TagCloudCacheBuilder::getTags()
This change comes with one primary benefit:
This stops accessing the redundant `languageID` column that is functionally
dependent on the tagID (see #3803).
On MariaDB 10.1 at a first glance this results in a *much* better query plan
(note the lower row count for the first query):
MariaDB [*snip*]> EXPLAIN
-> SELECT tag.tagid,
-> Count(object.objectid) AS counter
-> FROM wcf1_tag_to_object object
-> INNER JOIN wcf1_tag tag
-> ON tag.tagid = object.tagid
-> WHERE object.objecttypeid IN ( 92 )
-> AND tag.languageid IN ( 1 )
-> GROUP BY tag.tagid
-> ORDER BY counter DESC,
-> tag.tagid DESC
-> LIMIT 500;
+------+-------------+--------+------+-----------------------------------+------------+---------+---------------------------+------+-----------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+--------+------+-----------------------------------+------------+---------+---------------------------+------+-----------------------------------------------------------+
| 1 | SIMPLE | tag | ref | PRIMARY,languageID | languageID | 4 | const | 5299 | Using where; Using index; Using temporary; Using filesort |
| 1 | SIMPLE | object | ref | objectTypeID,objectTypeID_2,tagID | tagID | 8 | *snip*.tag.tagID,const | 3 | Using index |
+------+-------------+--------+------+-----------------------------------+------------+---------+---------------------------+------+-----------------------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [*snip*]>
MariaDB [*snip*]> EXPLAIN
-> SELECT object.tagid,
-> Count(*) AS counter
-> FROM wcf1_tag_to_object object
-> WHERE object.objecttypeid IN ( 92 )
-> AND object.languageid IN ( 1 )
-> GROUP BY object.tagid
-> ORDER BY counter DESC,
-> object.tagid DESC
-> LIMIT 500;
+------+-------------+--------+------+-----------------------------------------------------------------+--------------+---------+-------------+-------+-----------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+--------+------+-----------------------------------------------------------------+--------------+---------+-------------+-------+-----------------------------------------------------------+
| 1 | SIMPLE | object | ref | objectTypeID,objectTypeID_2,cbbba36334575d806c002a8756c8a107_fk | objectTypeID | 8 | const,const | 56293 | Using where; Using index; Using temporary; Using filesort |
+------+-------------+--------+------+-----------------------------------------------------------------+--------------+---------+-------------+-------+-----------------------------------------------------------+
1 row in set (0.00 sec)
When running the query this unfortunately is a bit slower 0.05 (new) vs 0.03
(old) seconds. This can also be confirmed with a (larger) MySQL 8 installation
and using EXPLAIN ANALYZE:
> EXPLAIN ANALYZE
-> SELECT tag.tagid,
-> Count(object.objectid) AS counter
-> FROM wcf1_tag_to_object object
-> INNER JOIN wcf1_tag tag
-> ON tag.tagid = object.tagid
-> WHERE object.objecttypeid IN ( 203, 337 )
-> AND tag.languageid IN ( 1 )
-> GROUP BY tag.tagid
-> ORDER BY counter DESC
-> LIMIT 500 \G
*************************** 1. row ***************************
EXPLAIN: -> Limit: 500 row(s) (actual time=166.506..166.540 rows=500 loops=1)
-> Sort: counter DESC, limit input to 500 row(s) per chunk (actual time=166.505..166.520 rows=500 loops=1)
-> Table scan on <temporary> (actual time=0.001..0.509 rows=16716 loops=1)
-> Aggregate using temporary table (actual time=163.863..165.054 rows=16716 loops=1)
-> Nested loop inner join (cost=14797.71 rows=87401) (actual time=0.056..112.533 rows=201296 loops=1)
-> Index lookup on tag using languageID (languageID=1) (cost=1132.88 rows=9229) (actual time=0.037..3.809 rows=18651 loops=1)
-> Filter: (object.objectTypeID in (203,337)) (cost=0.27 rows=9) (actual time=0.002..0.005 rows=11 loops=18651)
-> Index lookup on object using tagID (tagID=tag.tagID) (cost=0.27 rows=12) (actual time=0.002..0.004 rows=11 loops=18651)
1 row in set (0.16 sec)
> EXPLAIN ANALYZE
-> SELECT object.tagid,
-> Count(*) AS counter
-> FROM wcf1_tag_to_object object
-> WHERE object.objecttypeid IN ( 203, 337 )
-> AND object.languageid IN ( 1 )
-> GROUP BY object.tagid
-> ORDER BY counter DESC
-> LIMIT 500 \G
*************************** 1. row ***************************
EXPLAIN: -> Limit: 500 row(s) (actual time=135.420..135.461 rows=500 loops=1)
-> Sort: counter DESC, limit input to 500 row(s) per chunk (actual time=135.419..135.437 rows=500 loops=1)
-> Table scan on <temporary> (actual time=0.000..0.560 rows=16716 loops=1)
-> Aggregate using temporary table (actual time=132.599..133.936 rows=16716 loops=1)
-> Filter: ((object.languageID = 1) and (object.objectTypeID in (203,337))) (cost=31642.06 rows=157965) (actual time=0.080..72.889 rows=201296 loops=1)
-> Index range scan on object using objectTypeID (cost=31642.06 rows=157965) (actual time=0.076..53.904 rows=201296 loops=1)
1 row in set (0.14 sec)
Nonetheless this appears to be worth it. Especially if we can remove the
`languageID` column in the future.
I also attempted to get rid of the second query, by simply putting a `tag.*`
into the column list of the first query. Unfortunately MariaDB 10.1 (which is
our minimum requirement) is too dumb to determine that all the columns in the
`tag` table are functionally dependent on `tag.tagID`. MySQL 8 is able to handle
that correctly.
I have verified that both queries result in the same results (except for the
undefined ordering when the counter is identical).
Tim Düsterhus [Fri, 29 Jan 2021 15:24:32 +0000 (16:24 +0100)]
Merge branch '5.3'
Matthias Schmidt [Fri, 29 Jan 2021 15:23:00 +0000 (16:23 +0100)]
Merge branch '5.2' into 5.3
Matthias Schmidt [Fri, 29 Jan 2021 15:22:50 +0000 (16:22 +0100)]
Fix which index object is used when dropping indices with PHP API
Only `$matchingExistingIndex` is guaranteed to have the correct index name.
Tim Düsterhus [Fri, 29 Jan 2021 15:02:09 +0000 (16:02 +0100)]
Merge branch '5.3'
Matthias Schmidt [Fri, 29 Jan 2021 14:55:51 +0000 (15:55 +0100)]
Merge branch '5.2' into 5.3
Matthias Schmidt [Fri, 29 Jan 2021 14:55:26 +0000 (15:55 +0100)]
Fix checked property when adding indices to `DatabaseTable`
Alexander Ebert [Fri, 29 Jan 2021 14:25:33 +0000 (15:25 +0100)]
Merge branch '5.2' into 5.3
Alexander Ebert [Fri, 29 Jan 2021 14:01:03 +0000 (15:01 +0100)]
Release 5.2.11
Alexander Ebert [Fri, 29 Jan 2021 13:56:16 +0000 (14:56 +0100)]
Merge branch '3.1' into 5.2
Alexander Ebert [Fri, 29 Jan 2021 13:44:59 +0000 (14:44 +0100)]
Release 3.1.19
WoltLab [Fri, 29 Jan 2021 13:38:27 +0000 (13:38 +0000)]
Updating minified JavaScript files
Marcel Werk [Fri, 29 Jan 2021 13:23:24 +0000 (14:23 +0100)]
Merge pull request #3911 from WoltLab/master-password
Deprecate Master Password
Tim Düsterhus [Fri, 29 Jan 2021 12:57:45 +0000 (13:57 +0100)]
Merge branch '5.3'
joshuaruesweg [Fri, 29 Jan 2021 12:35:25 +0000 (13:35 +0100)]
Merge branch '5.2' into 5.3
joshuaruesweg [Fri, 29 Jan 2021 12:32:24 +0000 (13:32 +0100)]
Merge branch '3.1' into 5.2
joshuaruesweg [Fri, 29 Jan 2021 12:30:56 +0000 (13:30 +0100)]
Fix converting float value to integer
Tim Düsterhus [Fri, 29 Jan 2021 10:49:54 +0000 (11:49 +0100)]
Add reformatting of constants.php to .git-blame-ignore-revs
Tim Düsterhus [Fri, 29 Jan 2021 10:43:56 +0000 (11:43 +0100)]
Add backslash before define() in constants.php
Alexander Ebert [Thu, 28 Jan 2021 17:42:18 +0000 (18:42 +0100)]
Incorrect comparison for the height of an image
Alexander Ebert [Thu, 28 Jan 2021 17:14:42 +0000 (18:14 +0100)]
Missing update of the version number in `wcf\system\WCF`
Tim Düsterhus [Thu, 28 Jan 2021 12:37:50 +0000 (13:37 +0100)]
Use stronger wording in master password deprecation notice
Tim Düsterhus [Thu, 28 Jan 2021 11:17:13 +0000 (12:17 +0100)]
Merge pull request #3912 from WoltLab/blocklist-deprecation
Deprecate the client blocklists
Tim Düsterhus [Thu, 28 Jan 2021 10:57:00 +0000 (11:57 +0100)]
Bump version to 5.4.0 Alpha 1
The current development state diverged quite a lot from 5.3. Adjust the version
to prevent accidents with the developer tools.
Tim Düsterhus [Thu, 28 Jan 2021 10:39:39 +0000 (11:39 +0100)]
Fix .gitattributes for Template.grammar.js
The `ts/` folder now resides in the root of the repository.
Tim Düsterhus [Thu, 28 Jan 2021 10:26:38 +0000 (11:26 +0100)]
Add ILoggingAwareException
Tim Düsterhus [Thu, 28 Jan 2021 10:20:17 +0000 (11:20 +0100)]
Add types for functions in core.functions.php
These cannot be inherited from, thus we can add the types without breaking
compatibility.
Tim Düsterhus [Thu, 28 Jan 2021 10:17:29 +0000 (11:17 +0100)]
Merge pull request #3915 from WoltLab/composer
Update composer dependencies
Tim Düsterhus [Thu, 28 Jan 2021 10:00:24 +0000 (11:00 +0100)]
Ignore symfony/polyfill-mbstring/bootstrap80.php during syntax check
Tim Düsterhus [Thu, 28 Jan 2021 09:49:42 +0000 (10:49 +0100)]
Update composer dependencies
Tim Düsterhus [Thu, 28 Jan 2021 09:04:39 +0000 (10:04 +0100)]
Remove bogus extra newline in WCF.class.php
Tim Düsterhus [Thu, 28 Jan 2021 08:58:12 +0000 (09:58 +0100)]
Deprecate blacklist_ip_addresses and blacklist_user_agents
Resolves #3909
Tim Düsterhus [Thu, 28 Jan 2021 08:51:10 +0000 (09:51 +0100)]
Remove the `blacklist_hostnames` option
The hostname blocklist requires a PTR lookup for every single request. This is
slow and unreliable.
see #3909
Tim Düsterhus [Thu, 28 Jan 2021 08:45:27 +0000 (09:45 +0100)]
Show deprecation message on master password authentication
Resolves #3698
Tim Düsterhus [Thu, 28 Jan 2021 08:26:54 +0000 (09:26 +0100)]
Mark the master password as deprecated in the option description
see #3698
Tim Düsterhus [Thu, 28 Jan 2021 08:35:22 +0000 (09:35 +0100)]
Fix formatting in LogoutAction
Apparently the editor on GitHub.com defaults to tabs, even if the whole file consists of spaces only.
Tim Düsterhus [Thu, 28 Jan 2021 08:33:28 +0000 (09:33 +0100)]
Clear the master password on ACP logout
Alexander Ebert [Wed, 27 Jan 2021 17:36:18 +0000 (18:36 +0100)]
Release 5.3.3
Tim Düsterhus [Wed, 27 Jan 2021 16:30:36 +0000 (17:30 +0100)]
Add previous commit to .git-blame-ignore-revs
Tim Düsterhus [Wed, 27 Jan 2021 16:28:25 +0000 (17:28 +0100)]
Marcel Werk [Wed, 27 Jan 2021 16:23:53 +0000 (17:23 +0100)]
Merge branch '5.3'
Marcel Werk [Wed, 27 Jan 2021 16:14:41 +0000 (17:14 +0100)]
Object edit link led to the admin panel
Tim Düsterhus [Wed, 27 Jan 2021 15:32:32 +0000 (16:32 +0100)]
Merge branch '5.3'
Tim Düsterhus [Wed, 27 Jan 2021 15:31:11 +0000 (16:31 +0100)]
Make update_com.woltlab.wcf_5.3_packageServer.php compatible with WCF_N != 1
joshuaruesweg [Wed, 27 Jan 2021 14:59:14 +0000 (15:59 +0100)]
Merge branch '5.3'
joshuaruesweg [Wed, 27 Jan 2021 14:58:09 +0000 (15:58 +0100)]
Merge branch '5.2' into 5.3
Joshua Rüsweg [Wed, 27 Jan 2021 14:57:30 +0000 (15:57 +0100)]
Merge pull request #3908 from WoltLab/pr_build_package
Add wcfsetup workflow
Tim Düsterhus [Wed, 27 Jan 2021 14:51:42 +0000 (15:51 +0100)]
Merge pull request #3901 from WoltLab/require-multifactor
Implement multi-factor requirement
Alexander Ebert [Wed, 27 Jan 2021 14:50:29 +0000 (15:50 +0100)]
Merge pull request #3906 from WoltLab/item-list-input-event
Use the `input` event to detect the comma on Chromium for Android
Tim Düsterhus [Wed, 27 Jan 2021 14:49:02 +0000 (15:49 +0100)]
Fix informal phrase in de.xml
joshuaruesweg [Wed, 27 Jan 2021 14:30:47 +0000 (15:30 +0100)]
Add wcfsetup workflow
This workflow generates the WCFSetup and stores it as an artifact.
Tim Düsterhus [Wed, 27 Jan 2021 14:09:18 +0000 (15:09 +0100)]
Merge pull request #3907 from WoltLab/mfa-update-multiple-requests
Split update_com.woltlab.wcf_5.4_migrate_multifactor across multiple requests
Tim Düsterhus [Wed, 27 Jan 2021 13:04:11 +0000 (14:04 +0100)]
Split update_com.woltlab.wcf_5.4_migrate_multifactor across multiple requests
Resolves #3796
Alexander Ebert [Wed, 27 Jan 2021 12:23:11 +0000 (13:23 +0100)]
Use the `input` event to detect the comma on Chromium for Android
Tim Düsterhus [Wed, 27 Jan 2021 11:48:57 +0000 (12:48 +0100)]
Merge pull request #3905 from WoltLab/benchmark-parameters
Replace placeholders by actual values in Benchmark
Tim Düsterhus [Wed, 27 Jan 2021 11:39:51 +0000 (12:39 +0100)]
Replace placeholders by actual values in Benchmark
In most cases this allows one to simply copy the query to easily edit it within
a MySQL shell. The code (intentionally) does not handle single quotes
correctly. It also truncates the parameter after 100 characters and handles at
most 30 parameters.
Alexander Ebert [Wed, 27 Jan 2021 11:26:46 +0000 (12:26 +0100)]
Merge branch '5.3'
Alexander Ebert [Wed, 27 Jan 2021 11:20:57 +0000 (12:20 +0100)]
Improved message for rejected credentials on paid packages (#3903)
joshuaruesweg [Wed, 27 Jan 2021 11:03:47 +0000 (12:03 +0100)]
Throw NotImplementedException exception for unsupported method call
Tim Düsterhus [Wed, 27 Jan 2021 10:57:40 +0000 (11:57 +0100)]
Add dev tools description for multi-factor object type definition (#3897)
see #3892
Co-authored-by: Matthias Schmidt <gravatronics@live.com>
joshuaruesweg [Wed, 27 Jan 2021 10:54:50 +0000 (11:54 +0100)]
Change default username in dev installation to 'dev'
Closes #3866
joshuaruesweg [Wed, 27 Jan 2021 10:46:35 +0000 (11:46 +0100)]
Use FQN for internal PHP functions
joshuaruesweg [Wed, 27 Jan 2021 10:42:23 +0000 (11:42 +0100)]
Fix codestyle
joshuaruesweg [Wed, 27 Jan 2021 10:38:40 +0000 (11:38 +0100)]
Update phpBB3 password hash
Closes #3885
Matthias Schmidt [Wed, 27 Jan 2021 09:57:41 +0000 (10:57 +0100)]
Reformat SQL queries in install and update scripts
Marcel Werk [Tue, 26 Jan 2021 15:46:33 +0000 (16:46 +0100)]
missing id attribute
Tim Düsterhus [Tue, 26 Jan 2021 14:58:25 +0000 (15:58 +0100)]
Enforce the multi-factor requirement in ACP
Tim Düsterhus [Tue, 26 Jan 2021 14:40:48 +0000 (15:40 +0100)]
Add TMultifactorRequirementEnforcer
Tim Düsterhus [Tue, 26 Jan 2021 14:30:31 +0000 (15:30 +0100)]
Check for multi-factor requirement in MultifactorDisableForm
Tim Düsterhus [Tue, 26 Jan 2021 14:22:28 +0000 (15:22 +0100)]
Add RejectEverythingFormField
Tim Düsterhus [Tue, 26 Jan 2021 14:17:45 +0000 (15:17 +0100)]
Reduce duplication in MultifactorDisableForm
Tim Düsterhus [Tue, 26 Jan 2021 13:58:12 +0000 (14:58 +0100)]
Add User::requiresMultifactor()
Tim Düsterhus [Tue, 26 Jan 2021 13:49:59 +0000 (14:49 +0100)]
Add requireMultifactor property to user groups
Tim Düsterhus [Tue, 26 Jan 2021 14:15:02 +0000 (15:15 +0100)]
Merge remote-tracking branch 'origin/master'
Tim Düsterhus [Tue, 26 Jan 2021 14:14:48 +0000 (15:14 +0100)]
Merge branch '5.3'
Tim Düsterhus [Tue, 26 Jan 2021 14:12:20 +0000 (15:12 +0100)]
Merge branch '5.2' into 5.3
Tim Düsterhus [Tue, 26 Jan 2021 14:11:49 +0000 (15:11 +0100)]
Merge pull request #3900 from WoltLab/hasOwnerAccess
Fix User::hasOwnerAccess()
Tim Düsterhus [Tue, 26 Jan 2021 14:03:22 +0000 (15:03 +0100)]
Check owner access after checking controller blacklist in RequestHandler
This ensures that the check only happens when absolute required.
Tim Düsterhus [Tue, 26 Jan 2021 14:00:28 +0000 (15:00 +0100)]
Remove caching from User::hasOwnerAccess()
The current caching logic is buggy as reported in issue #3899. This patch
removes this caching, as this method already is quite fast and it also is
seldomly called. Within the frontend it is only called when the user is banned.
Fixes #3899
joshuaruesweg [Tue, 26 Jan 2021 13:08:58 +0000 (14:08 +0100)]
Show content from all content languages for guests
Closes #3713
Tim Düsterhus [Tue, 26 Jan 2021 09:11:15 +0000 (10:11 +0100)]
Remove useless WCFSetup workaround in SessionHandler::needsReauthentication()
Apparently I did not conduct my testing properly yesterday and piled on
non-effective workarounds for the WCFSetup issue. This one is particularly bad,
because I inverted the condition, disabling reauthentication everywhere, except
in WCFSetup.
Thus this patch removes this buggy workaround again.
see
ff5d8cec55f0a953a353165b2d996f84a56838f6
see
4b5f3b084ef062b48eaba18b3f497ba89743ddcd
Alexander Ebert [Mon, 25 Jan 2021 18:36:08 +0000 (19:36 +0100)]
The compression quality was not applied in Imagick
Tim Düsterhus [Mon, 25 Jan 2021 18:13:46 +0000 (19:13 +0100)]
Fix the cookie refresh after WCFSetup
We need to set user_session, as acp_session is gone.
Tim Düsterhus [Mon, 25 Jan 2021 18:13:14 +0000 (19:13 +0100)]
Move the call to registerReauthentication() to WCFSetup
This was forgotten in the previous commit.
Tim Düsterhus [Mon, 25 Jan 2021 18:04:17 +0000 (19:04 +0100)]
Unbreak WCFSetup
Alexander Ebert [Mon, 25 Jan 2021 16:18:28 +0000 (17:18 +0100)]
Dynamic WebP avatars (#3889)
Matthias Schmidt [Mon, 25 Jan 2021 15:31:07 +0000 (16:31 +0100)]
Replace usage of `setObjectTitles()` with `replaceLinks()`
See #3881
Matthias Schmidt [Mon, 25 Jan 2021 15:26:13 +0000 (16:26 +0100)]
Use `UserProfileRuntimeCache` instead of `UserProfile::getUserProfiles()`
See #3880
Alexander Ebert [Mon, 25 Jan 2021 15:25:16 +0000 (16:25 +0100)]
New UI design for the list of attachments (#3890)
* New UI design for the list of attachments
* Exchange the icon on focus (a11y)
* Improved a11y for attachments
* Inconsistent indentation
* Consistent use of whitespaces
* Fix indentation in en.xml
Co-authored-by: Tim Düsterhus <duesterhus@woltlab.com>
Matthias Schmidt [Mon, 25 Jan 2021 15:13:11 +0000 (16:13 +0100)]
Replace usage of `LikeHandler` with `ReactionHandler`
… whereever possible.
Matthias Schmidt [Mon, 25 Jan 2021 14:53:14 +0000 (15:53 +0100)]
Stop using `TLegacyUserPropertyAccess`
See #3880
Matthias Schmidt [Mon, 25 Jan 2021 14:30:10 +0000 (15:30 +0100)]
Add dev tools description for flood control object type definition
See #3892
Matthias Schmidt [Mon, 25 Jan 2021 14:22:58 +0000 (15:22 +0100)]
Add button to delete missing phrases logs for phrases existing now (#3896)
Replaces #3716
Marcel Werk [Mon, 25 Jan 2021 14:11:20 +0000 (15:11 +0100)]
Merge pull request #3893 from WoltLab/deprecate-gravatar
Deprecate Gravatar support
Tim Düsterhus [Mon, 25 Jan 2021 14:02:43 +0000 (15:02 +0100)]
Add SCSS Prettiering to .git-blame-ignore-revs
Tim Düsterhus [Mon, 25 Jan 2021 14:02:18 +0000 (15:02 +0100)]
Use prettier for SCSS (#3895)
Tim Düsterhus [Mon, 25 Jan 2021 13:45:19 +0000 (14:45 +0100)]
Add PHPDoc to update scripts
Tim Düsterhus [Mon, 25 Jan 2021 13:34:34 +0000 (14:34 +0100)]
Deprecate Gravatar support
Resolves #3658
Tim Düsterhus [Wed, 8 Jul 2020 12:50:28 +0000 (14:50 +0200)]
Fix parsing of packageName / packageDescription in PackageArchive
Previously a lowercase key remained in the returned array.