GitHub/WoltLab/WCF.git
3 years agoAdd update instructions for index updates of `wcf1_tag_to_object`
Matthias Schmidt [Fri, 29 Jan 2021 16:31:38 +0000 (17:31 +0100)]
Add update instructions for index updates of `wcf1_tag_to_object`

3 years agoMake wcf1_tag_to_object's PRIMARY KEY a UNIQUE KEY
Tim Düsterhus [Wed, 27 Jan 2021 10:52:30 +0000 (11:52 +0100)]
Make wcf1_tag_to_object's PRIMARY KEY a UNIQUE KEY

see #3803

3 years agoRemove redundant column from wcf1_tag_to_object.tagID key
Tim Düsterhus [Wed, 27 Jan 2021 10:49:23 +0000 (11:49 +0100)]
Remove redundant column from wcf1_tag_to_object.tagID key

This key was identical to the `(objectTypeID, tagID)` key. We don't need the
objectTypeID here.

3 years agoRemove the languageID column from keys in wcf1_tag_to_object
Tim Düsterhus [Wed, 27 Jan 2021 10:47:10 +0000 (11:47 +0100)]
Remove the languageID column from keys in wcf1_tag_to_object

This column is functionally dependent on tagID. Since the previous commits this
column is no longer used and only filled for backwards compatibility.

See #3803

3 years agoStop accessing wcf1_tag_to_object.languageID in TagEngine::getObjectsTags()
Tim Düsterhus [Wed, 27 Jan 2021 10:44:09 +0000 (11:44 +0100)]
Stop accessing wcf1_tag_to_object.languageID in TagEngine::getObjectsTags()

This stops accessing the redundant `languageID` column that is functionally
dependent on the tagID (see #3803).

This change will make the query a little bit slower, but this will be
remediated by adjusting the indices on the wcf1_tag_to_object table after which
the performance will be identical:

    MariaDB [*snip*]> EXPLAIN
        -> SELECT tag.*,
        ->        tag_to_object.objectid
        -> FROM   wcf1_tag_to_object tag_to_object
        ->        LEFT JOIN wcf1_tag tag
        ->               ON ( tag.tagid = tag_to_object.tagid )
        -> WHERE  tag_to_object.objecttypeid = 92
        ->        AND tag_to_object.objectid IN ( 3553, 7990 )
        ->        AND tag_to_object.languageid IN ( 1 );
    +------+-------------+---------------+--------+----------------------------------------------------------------------+-------------------------------------+---------+-------------------------------+------+--------------------------+
    | id   | select_type | table         | type   | possible_keys                                                        | key                                 | key_len | ref                           | rows | Extra                    |
    +------+-------------+---------------+--------+----------------------------------------------------------------------+-------------------------------------+---------+-------------------------------+------+--------------------------+
    |    1 | SIMPLE      | tag_to_object | range  | objectTypeID,objectTypeID_2,cbbba36334575d806c002a8756c8a107_fk,test | cbbba36334575d806c002a8756c8a107_fk | 12      | NULL                          |    8 | Using where; Using index |
    |    1 | SIMPLE      | tag           | eq_ref | PRIMARY                                                              | PRIMARY                             | 4       | *snip*.tag_to_object.tagID    |    1 |                          |
    +------+-------------+---------------+--------+----------------------------------------------------------------------+-------------------------------------+---------+-------------------------------+------+--------------------------+
    2 rows in set (0.00 sec)

    MariaDB [*snip*]>
    MariaDB [*snip*]> EXPLAIN
        -> SELECT tag.*,
        ->        tag_to_object.objectid
        -> FROM   wcf1_tag_to_object tag_to_object
        ->        LEFT JOIN wcf1_tag tag
        ->               ON ( tag.tagid = tag_to_object.tagid )
        -> WHERE  tag_to_object.objecttypeid = 92
        ->        AND tag_to_object.objectid IN ( 3553, 7990 )
        ->        AND tag.languageid IN ( 1 );
    +------+-------------+---------------+--------+----------------------------------------+---------+---------+-------------------------------+------+--------------------------+
    | id   | select_type | table         | type   | possible_keys                          | key     | key_len | ref                           | rows | Extra                    |
    +------+-------------+---------------+--------+----------------------------------------+---------+---------+-------------------------------+------+--------------------------+
    |    1 | SIMPLE      | tag_to_object | range  | objectTypeID,objectTypeID_2,tagID,test | test    | 8       | NULL                          |    8 | Using where; Using index |
    |    1 | SIMPLE      | tag           | eq_ref | PRIMARY,languageID                     | PRIMARY | 4       | *snip*.tag_to_object.tagID    |    1 | Using where              |
    +------+-------------+---------------+--------+----------------------------------------+---------+---------+-------------------------------+------+--------------------------+
    2 rows in set (0.00 sec)

3 years agoStop accessing wcf1_tag_to_object.languageID during DELETE in TagEngine
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).

3 years agoStop accessing wcf1_tag_to_object.languageID in TagCloudCacheBuilder::getTags()
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).

3 years agoMerge branch '5.3'
Tim Düsterhus [Fri, 29 Jan 2021 15:24:32 +0000 (16:24 +0100)]
Merge branch '5.3'

3 years agoMerge branch '5.2' into 5.3
Matthias Schmidt [Fri, 29 Jan 2021 15:23:00 +0000 (16:23 +0100)]
Merge branch '5.2' into 5.3

3 years agoFix which index object is used when dropping indices with PHP API
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.

3 years agoMerge branch '5.3'
Tim Düsterhus [Fri, 29 Jan 2021 15:02:09 +0000 (16:02 +0100)]
Merge branch '5.3'

3 years agoMerge branch '5.2' into 5.3
Matthias Schmidt [Fri, 29 Jan 2021 14:55:51 +0000 (15:55 +0100)]
Merge branch '5.2' into 5.3

3 years agoFix checked property when adding indices to `DatabaseTable`
Matthias Schmidt [Fri, 29 Jan 2021 14:55:26 +0000 (15:55 +0100)]
Fix checked property when adding indices to `DatabaseTable`

3 years agoMerge branch '5.2' into 5.3 5.3.3
Alexander Ebert [Fri, 29 Jan 2021 14:25:33 +0000 (15:25 +0100)]
Merge branch '5.2' into 5.3

3 years agoRelease 5.2.11 5.2.11
Alexander Ebert [Fri, 29 Jan 2021 14:01:03 +0000 (15:01 +0100)]
Release 5.2.11

3 years agoMerge branch '3.1' into 5.2
Alexander Ebert [Fri, 29 Jan 2021 13:56:16 +0000 (14:56 +0100)]
Merge branch '3.1' into 5.2

3 years agoRelease 3.1.19 3.1.19
Alexander Ebert [Fri, 29 Jan 2021 13:44:59 +0000 (14:44 +0100)]
Release 3.1.19

3 years agoUpdating minified JavaScript files
WoltLab [Fri, 29 Jan 2021 13:38:27 +0000 (13:38 +0000)]
Updating minified JavaScript files

3 years agoMerge pull request #3911 from WoltLab/master-password
Marcel Werk [Fri, 29 Jan 2021 13:23:24 +0000 (14:23 +0100)]
Merge pull request #3911 from WoltLab/master-password

Deprecate Master Password

3 years agoMerge branch '5.3'
Tim Düsterhus [Fri, 29 Jan 2021 12:57:45 +0000 (13:57 +0100)]
Merge branch '5.3'

3 years agoMerge branch '5.2' into 5.3
joshuaruesweg [Fri, 29 Jan 2021 12:35:25 +0000 (13:35 +0100)]
Merge branch '5.2' into 5.3

3 years agoMerge branch '3.1' into 5.2
joshuaruesweg [Fri, 29 Jan 2021 12:32:24 +0000 (13:32 +0100)]
Merge branch '3.1' into 5.2

3 years agoFix converting float value to integer
joshuaruesweg [Fri, 29 Jan 2021 12:30:56 +0000 (13:30 +0100)]
Fix converting float value to integer

3 years agoAdd reformatting of constants.php to .git-blame-ignore-revs
Tim Düsterhus [Fri, 29 Jan 2021 10:49:54 +0000 (11:49 +0100)]
Add reformatting of constants.php to .git-blame-ignore-revs

3 years agoAdd backslash before define() in constants.php
Tim Düsterhus [Fri, 29 Jan 2021 10:43:56 +0000 (11:43 +0100)]
Add backslash before define() in constants.php

3 years agoIncorrect comparison for the height of an image
Alexander Ebert [Thu, 28 Jan 2021 17:42:18 +0000 (18:42 +0100)]
Incorrect comparison for the height of an image

3 years agoMissing update of the version number in `wcf\system\WCF`
Alexander Ebert [Thu, 28 Jan 2021 17:14:42 +0000 (18:14 +0100)]
Missing update of the version number in `wcf\system\WCF`

3 years agoUse stronger wording in master password deprecation notice
Tim Düsterhus [Thu, 28 Jan 2021 12:37:50 +0000 (13:37 +0100)]
Use stronger wording in master password deprecation notice

3 years agoMerge pull request #3912 from WoltLab/blocklist-deprecation
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

3 years agoBump version to 5.4.0 Alpha 1
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.

3 years agoFix .gitattributes for Template.grammar.js
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.

3 years agoAdd ILoggingAwareException
Tim Düsterhus [Thu, 28 Jan 2021 10:26:38 +0000 (11:26 +0100)]
Add ILoggingAwareException

3 years agoAdd types for functions in core.functions.php
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.

3 years agoMerge pull request #3915 from WoltLab/composer
Tim Düsterhus [Thu, 28 Jan 2021 10:17:29 +0000 (11:17 +0100)]
Merge pull request #3915 from WoltLab/composer

Update composer dependencies

3 years agoIgnore symfony/polyfill-mbstring/bootstrap80.php during syntax check
Tim Düsterhus [Thu, 28 Jan 2021 10:00:24 +0000 (11:00 +0100)]
Ignore symfony/polyfill-mbstring/bootstrap80.php during syntax check

3 years agoUpdate composer dependencies
Tim Düsterhus [Thu, 28 Jan 2021 09:49:42 +0000 (10:49 +0100)]
Update composer dependencies

3 years agoRemove bogus extra newline in WCF.class.php
Tim Düsterhus [Thu, 28 Jan 2021 09:04:39 +0000 (10:04 +0100)]
Remove bogus extra newline in WCF.class.php

3 years agoDeprecate blacklist_ip_addresses and blacklist_user_agents
Tim Düsterhus [Thu, 28 Jan 2021 08:58:12 +0000 (09:58 +0100)]
Deprecate blacklist_ip_addresses and blacklist_user_agents

Resolves #3909

3 years agoRemove the `blacklist_hostnames` option
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

3 years agoShow deprecation message on master password authentication
Tim Düsterhus [Thu, 28 Jan 2021 08:45:27 +0000 (09:45 +0100)]
Show deprecation message on master password authentication

Resolves #3698

3 years agoMark the master password as deprecated in the option description
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

3 years agoFix formatting in LogoutAction
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.

3 years agoClear the master password on ACP logout
Tim Düsterhus [Thu, 28 Jan 2021 08:33:28 +0000 (09:33 +0100)]
Clear the master password on ACP logout

3 years agoRelease 5.3.3
Alexander Ebert [Wed, 27 Jan 2021 17:36:18 +0000 (18:36 +0100)]
Release 5.3.3

3 years agoAdd previous commit to .git-blame-ignore-revs
Tim Düsterhus [Wed, 27 Jan 2021 16:30:36 +0000 (17:30 +0100)]
Add previous commit to .git-blame-ignore-revs

3 years agoFix bad merge
Tim Düsterhus [Wed, 27 Jan 2021 16:28:25 +0000 (17:28 +0100)]
Fix bad merge

see 521f18fb9505d68091945d6ee484277dac89645c
see fa8aae2ad5f9299fdbce5feed23fe03a4fb335d4

3 years agoMerge branch '5.3'
Marcel Werk [Wed, 27 Jan 2021 16:23:53 +0000 (17:23 +0100)]
Merge branch '5.3'

3 years agoObject edit link led to the admin panel
Marcel Werk [Wed, 27 Jan 2021 16:14:41 +0000 (17:14 +0100)]
Object edit link led to the admin panel

3 years agoMerge branch '5.3'
Tim Düsterhus [Wed, 27 Jan 2021 15:32:32 +0000 (16:32 +0100)]
Merge branch '5.3'

3 years agoMake update_com.woltlab.wcf_5.3_packageServer.php compatible with WCF_N != 1
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

3 years agoMerge branch '5.3'
joshuaruesweg [Wed, 27 Jan 2021 14:59:14 +0000 (15:59 +0100)]
Merge branch '5.3'

3 years agoMerge branch '5.2' into 5.3
joshuaruesweg [Wed, 27 Jan 2021 14:58:09 +0000 (15:58 +0100)]
Merge branch '5.2' into 5.3

3 years agoMerge pull request #3908 from WoltLab/pr_build_package
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

3 years agoMerge pull request #3901 from WoltLab/require-multifactor
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

3 years agoMerge pull request #3906 from WoltLab/item-list-input-event
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

3 years agoFix informal phrase in de.xml
Tim Düsterhus [Wed, 27 Jan 2021 14:49:02 +0000 (15:49 +0100)]
Fix informal phrase in de.xml

3 years agoAdd wcfsetup workflow
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.

3 years agoMerge pull request #3907 from WoltLab/mfa-update-multiple-requests
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

3 years agoSplit 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

3 years agoUse the `input` event to detect the comma on Chromium for Android
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

3 years agoMerge pull request #3905 from WoltLab/benchmark-parameters
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

3 years agoReplace 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.

3 years agoMerge branch '5.3'
Alexander Ebert [Wed, 27 Jan 2021 11:26:46 +0000 (12:26 +0100)]
Merge branch '5.3'

3 years agoImproved message for rejected credentials on paid packages (#3903)
Alexander Ebert [Wed, 27 Jan 2021 11:20:57 +0000 (12:20 +0100)]
Improved message for rejected credentials on paid packages (#3903)

3 years agoThrow NotImplementedException exception for unsupported method call
joshuaruesweg [Wed, 27 Jan 2021 11:03:47 +0000 (12:03 +0100)]
Throw NotImplementedException exception for unsupported method call

3 years agoAdd dev tools description for multi-factor object type definition (#3897)
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>
3 years agoChange default username in dev installation to 'dev'
joshuaruesweg [Wed, 27 Jan 2021 10:54:50 +0000 (11:54 +0100)]
Change default username in dev installation to 'dev'
Closes #3866

3 years agoUse FQN for internal PHP functions
joshuaruesweg [Wed, 27 Jan 2021 10:46:35 +0000 (11:46 +0100)]
Use FQN for internal PHP functions

3 years agoFix codestyle
joshuaruesweg [Wed, 27 Jan 2021 10:42:23 +0000 (11:42 +0100)]
Fix codestyle

3 years agoUpdate phpBB3 password hash
joshuaruesweg [Wed, 27 Jan 2021 10:38:40 +0000 (11:38 +0100)]
Update phpBB3 password hash
Closes #3885

3 years agoReformat SQL queries in install and update scripts
Matthias Schmidt [Wed, 27 Jan 2021 09:57:41 +0000 (10:57 +0100)]
Reformat SQL queries in install and update scripts

3 years agomissing id attribute
Marcel Werk [Tue, 26 Jan 2021 15:46:33 +0000 (16:46 +0100)]
missing id attribute

3 years agoEnforce the multi-factor requirement in ACP
Tim Düsterhus [Tue, 26 Jan 2021 14:58:25 +0000 (15:58 +0100)]
Enforce the multi-factor requirement in ACP

3 years agoAdd TMultifactorRequirementEnforcer
Tim Düsterhus [Tue, 26 Jan 2021 14:40:48 +0000 (15:40 +0100)]
Add TMultifactorRequirementEnforcer

3 years agoCheck for multi-factor requirement in MultifactorDisableForm
Tim Düsterhus [Tue, 26 Jan 2021 14:30:31 +0000 (15:30 +0100)]
Check for multi-factor requirement in MultifactorDisableForm

3 years agoAdd RejectEverythingFormField
Tim Düsterhus [Tue, 26 Jan 2021 14:22:28 +0000 (15:22 +0100)]
Add RejectEverythingFormField

3 years agoReduce duplication in MultifactorDisableForm
Tim Düsterhus [Tue, 26 Jan 2021 14:17:45 +0000 (15:17 +0100)]
Reduce duplication in MultifactorDisableForm

3 years agoAdd User::requiresMultifactor()
Tim Düsterhus [Tue, 26 Jan 2021 13:58:12 +0000 (14:58 +0100)]
Add User::requiresMultifactor()

3 years agoAdd requireMultifactor property to user groups
Tim Düsterhus [Tue, 26 Jan 2021 13:49:59 +0000 (14:49 +0100)]
Add requireMultifactor property to user groups

3 years agoMerge remote-tracking branch 'origin/master'
Tim Düsterhus [Tue, 26 Jan 2021 14:15:02 +0000 (15:15 +0100)]
Merge remote-tracking branch 'origin/master'

3 years agoMerge branch '5.3'
Tim Düsterhus [Tue, 26 Jan 2021 14:14:48 +0000 (15:14 +0100)]
Merge branch '5.3'

3 years agoMerge branch '5.2' into 5.3
Tim Düsterhus [Tue, 26 Jan 2021 14:12:20 +0000 (15:12 +0100)]
Merge branch '5.2' into 5.3

3 years agoMerge pull request #3900 from WoltLab/hasOwnerAccess
Tim Düsterhus [Tue, 26 Jan 2021 14:11:49 +0000 (15:11 +0100)]
Merge pull request #3900 from WoltLab/hasOwnerAccess

Fix User::hasOwnerAccess()

3 years agoCheck owner access after checking controller blacklist in RequestHandler
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.

3 years agoRemove caching from User::hasOwnerAccess()
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

3 years agoShow content from all content languages for guests
joshuaruesweg [Tue, 26 Jan 2021 13:08:58 +0000 (14:08 +0100)]
Show content from all content languages for guests
Closes #3713

3 years agoRemove useless WCFSetup workaround in SessionHandler::needsReauthentication()
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

3 years agoThe compression quality was not applied in Imagick
Alexander Ebert [Mon, 25 Jan 2021 18:36:08 +0000 (19:36 +0100)]
The compression quality was not applied in Imagick

3 years agoFix the cookie refresh after WCFSetup
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.

3 years agoMove the call to registerReauthentication() to WCFSetup
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.

3 years agoUnbreak WCFSetup
Tim Düsterhus [Mon, 25 Jan 2021 18:04:17 +0000 (19:04 +0100)]
Unbreak WCFSetup

3 years agoDynamic WebP avatars (#3889)
Alexander Ebert [Mon, 25 Jan 2021 16:18:28 +0000 (17:18 +0100)]
Dynamic WebP avatars (#3889)

3 years agoReplace usage of `setObjectTitles()` with `replaceLinks()`
Matthias Schmidt [Mon, 25 Jan 2021 15:31:07 +0000 (16:31 +0100)]
Replace usage of `setObjectTitles()` with `replaceLinks()`

See #3881

3 years agoUse `UserProfileRuntimeCache` instead of `UserProfile::getUserProfiles()`
Matthias Schmidt [Mon, 25 Jan 2021 15:26:13 +0000 (16:26 +0100)]
Use `UserProfileRuntimeCache` instead of `UserProfile::getUserProfiles()`

See #3880

3 years agoNew UI design for the list of attachments (#3890)
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>
3 years agoReplace usage of `LikeHandler` with `ReactionHandler`
Matthias Schmidt [Mon, 25 Jan 2021 15:13:11 +0000 (16:13 +0100)]
Replace usage of `LikeHandler` with `ReactionHandler`

… whereever possible.

3 years agoStop using `TLegacyUserPropertyAccess`
Matthias Schmidt [Mon, 25 Jan 2021 14:53:14 +0000 (15:53 +0100)]
Stop using `TLegacyUserPropertyAccess`

See #3880

3 years agoAdd dev tools description for flood control object type definition
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

3 years agoAdd button to delete missing phrases logs for phrases existing now (#3896)
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

3 years agoMerge pull request #3893 from WoltLab/deprecate-gravatar
Marcel Werk [Mon, 25 Jan 2021 14:11:20 +0000 (15:11 +0100)]
Merge pull request #3893 from WoltLab/deprecate-gravatar

Deprecate Gravatar support