GitHub/WoltLab/WCF.git
2 years agoDo not trust the source file hash in UserAvatarImporter
Tim Düsterhus [Wed, 9 Feb 2022 11:33:18 +0000 (12:33 +0100)]
Do not trust the source file hash in UserAvatarImporter

see 5969fa3dfada7df170ff10b8c4d8bf349c38cef9

2 years agoMake UserAvatarImporter determine the extension based on the mime type
Tim Düsterhus [Wed, 9 Feb 2022 11:32:09 +0000 (12:32 +0100)]
Make UserAvatarImporter determine the extension based on the mime type

Resolves #4665

2 years agoCheck `is_readable()` in UserAvatarImporter
Tim Düsterhus [Wed, 9 Feb 2022 11:31:29 +0000 (12:31 +0100)]
Check `is_readable()` in UserAvatarImporter

2 years agoMerge branch '5.4'
Tim Düsterhus [Tue, 8 Feb 2022 15:57:45 +0000 (16:57 +0100)]
Merge branch '5.4'

2 years agoMerge pull request #4664 from WoltLab/formbuilder-checkbox-ajax
Tim Düsterhus [Tue, 8 Feb 2022 15:45:26 +0000 (16:45 +0100)]
Merge pull request #4664 from WoltLab/formbuilder-checkbox-ajax

Add `CheckedVoid` form builder data handler for CheckboxFormField

2 years agoAdd `CheckedVoid` form builder data handler for CheckboxFormField
Tim Düsterhus [Tue, 8 Feb 2022 14:54:22 +0000 (15:54 +0100)]
Add `CheckedVoid` form builder data handler for CheckboxFormField

The `Checked` data handler is not usable for the CheckboxFormField, because its
behavior differs from the non-AJAX behavior by always sending a value whereas
checkboxes that are not checked will not send anything within a regular form.

It was considered to simply reuse the `readValue()` implementation in
BooleanFormField, because it appears to do the right thing at a glance. However
this would effectively revert 7d36c55726af2b5b9d9ab1706a05ccf5e52e84b8 which is
a fix to allow unchecking checkboxes that are checked by default.

Also matching the behavior of AJAX and non-AJAX forms 100% is considered a good
thing, so a new JavaScript module to handle this, is the best solution.

2 years agoReject YEAR(2) in PHP DDL
Tim Düsterhus [Tue, 8 Feb 2022 09:15:21 +0000 (10:15 +0100)]
Reject YEAR(2) in PHP DDL

Length 2 for YEAR columns is not supported by MySQL 8 and not really useful for
older versions either:

https://dev.mysql.com/doc/refman/8.0/en/year.html

> MySQL 8.0 does not support the 2-digit YEAR(2) data type permitted in older
> versions of MySQL. For instructions on converting to 4-digit YEAR, see
> 2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR, in MySQL 5.7
> Reference Manual.

2 years agoMerge branch '5.4'
Tim Düsterhus [Tue, 8 Feb 2022 09:12:46 +0000 (10:12 +0100)]
Merge branch '5.4'

2 years agoMerge branch '5.3' into 5.4
Tim Düsterhus [Tue, 8 Feb 2022 09:12:31 +0000 (10:12 +0100)]
Merge branch '5.3' into 5.4

2 years agoIgnore `length` when diffing YearDatabaseTableColumn
Tim Düsterhus [Tue, 8 Feb 2022 09:07:00 +0000 (10:07 +0100)]
Ignore `length` when diffing YearDatabaseTableColumn

Similarly to INT columns MySQL 8 ignores the length of YEAR columns:

https://dev.mysql.com/doc/refman/8.0/en/year.html

> As of MySQL 8.0.19, the YEAR(4) data type with an explicit display width is
> deprecated and you should expect support for it to be removed in a future
> version of MySQL. Instead, use YEAR without a display width, which has the
> same meaning.

2 years agoShow direct link to media file in admin panel
Marcel Werk [Mon, 7 Feb 2022 16:50:52 +0000 (17:50 +0100)]
Show direct link to media file in admin panel

Closes #4663

2 years agoMerge branch '5.4'
Tim Düsterhus [Mon, 7 Feb 2022 13:04:38 +0000 (14:04 +0100)]
Merge branch '5.4'

2 years agoFix template syntax error in wcf.user.notification.articleComment.response(Owner...
Tim Düsterhus [Mon, 7 Feb 2022 13:00:48 +0000 (14:00 +0100)]
Fix template syntax error in wcf.user.notification.articleComment.response(Owner)?.mail.html

see cc5632977059ae88aa5cfe1c27407f0e00fa68c1

2 years agoUse more specific return type in PHP DDL column factories
Tim Düsterhus [Mon, 7 Feb 2022 11:23:41 +0000 (12:23 +0100)]
Use more specific return type in PHP DDL column factories

see b0d267facda16a3fcefdef5c2c2740c4cd790b63

2 years agoWhitelist `array_key_exists` in enterprise mode
Tim Düsterhus [Mon, 7 Feb 2022 08:16:08 +0000 (09:16 +0100)]
Whitelist `array_key_exists` in enterprise mode

2 years agoMerge pull request #4661 from WoltLab/55-package-update-shortest-thread
Alexander Ebert [Sat, 5 Feb 2022 15:26:49 +0000 (16:26 +0100)]
Merge pull request #4661 from WoltLab/55-package-update-shortest-thread

Graceful handling of incoherent update paths

2 years agoIncorrect error type for rejected credentials
Alexander Ebert [Sat, 5 Feb 2022 15:01:31 +0000 (16:01 +0100)]
Incorrect error type for rejected credentials

2 years agoSilently discard incoherent update paths if a valid path remains to be checked
Alexander Ebert [Sat, 5 Feb 2022 14:59:51 +0000 (15:59 +0100)]
Silently discard incoherent update paths if a valid path remains to be checked

2 years agoMoved the exceptions inside the shortest update path calculation into separate classes
Alexander Ebert [Sat, 5 Feb 2022 14:55:54 +0000 (15:55 +0100)]
Moved the exceptions inside the shortest update path calculation into separate classes

2 years agoConsistent box-shadow for elevated elements
Alexander Ebert [Sat, 5 Feb 2022 13:03:43 +0000 (14:03 +0100)]
Consistent box-shadow for elevated elements

2 years agoPermission 'canOnlyAccessOwnMedia' did not work as expected
Marcel Werk [Sat, 5 Feb 2022 12:59:32 +0000 (13:59 +0100)]
Permission 'canOnlyAccessOwnMedia' did not work as expected

It was still possible to find files from other users through the search function.

2 years agoFile size was displayed twice when uploading media
Marcel Werk [Sat, 5 Feb 2022 12:56:59 +0000 (13:56 +0100)]
File size was displayed twice when uploading media

2 years agoMissing z-index for the scrollbar in user menu items
Alexander Ebert [Sat, 5 Feb 2022 12:21:09 +0000 (13:21 +0100)]
Missing z-index for the scrollbar in user menu items

Fixes #4660

2 years agoUser menu items now support the display of usernames
Alexander Ebert [Sat, 5 Feb 2022 12:18:23 +0000 (13:18 +0100)]
User menu items now support the display of usernames

See WoltLab/com.woltlab.wcf.conversation#169

2 years agoAdjusted the code style
Alexander Ebert [Fri, 4 Feb 2022 16:59:21 +0000 (17:59 +0100)]
Adjusted the code style

2 years agoImproved the styling of the user menus
Alexander Ebert [Fri, 4 Feb 2022 16:54:20 +0000 (17:54 +0100)]
Improved the styling of the user menus

2 years agoReverted removed suppression of encoding and template scripting support
Marcel Werk [Fri, 4 Feb 2022 15:58:56 +0000 (16:58 +0100)]
Reverted removed suppression of encoding and template scripting support

Previous change caused some broken page titles (e.g. within the dev tools).

2 years agoFix update instructions from 5.4
Tim Düsterhus [Fri, 4 Feb 2022 15:14:05 +0000 (16:14 +0100)]
Fix update instructions from 5.4

2 years agoFix call to `\str_ends_with()` in PackageUpdateServerAddForm
Tim Düsterhus [Thu, 3 Feb 2022 11:17:32 +0000 (12:17 +0100)]
Fix call to `\str_ends_with()` in PackageUpdateServerAddForm

2 years agoSkip close requests originating from the search drop-down itself
Alexander Ebert [Fri, 4 Feb 2022 13:10:58 +0000 (14:10 +0100)]
Skip close requests originating from the search drop-down itself

2 years agoThe mobile search behavior conflicted with the desktop view
Alexander Ebert [Fri, 4 Feb 2022 12:52:58 +0000 (13:52 +0100)]
The mobile search behavior conflicted with the desktop view

2 years agoMerge pull request #4658 from WoltLab/dynamic-phrases-templates
Marcel Werk [Thu, 3 Feb 2022 16:03:09 +0000 (17:03 +0100)]
Merge pull request #4658 from WoltLab/dynamic-phrases-templates

Overhauled handling of dynamic phrases in templates

2 years agoIncorrect behavior of user menus with overflowing content
Alexander Ebert [Thu, 3 Feb 2022 15:40:25 +0000 (16:40 +0100)]
Incorrect behavior of user menus with overflowing content

2 years agoRemoved suppression of encoding in places where it was not necessary
Marcel Werk [Thu, 3 Feb 2022 15:20:47 +0000 (16:20 +0100)]
Removed suppression of encoding in places where it was not necessary

2 years agoMerge branch '5.4'
Marcel Werk [Thu, 3 Feb 2022 13:45:05 +0000 (14:45 +0100)]
Merge branch '5.4'

2 years agoEmail column in notification settings was too small
Marcel Werk [Thu, 3 Feb 2022 13:44:19 +0000 (14:44 +0100)]
Email column in notification settings was too small

2 years agoOverhauled handling of dynamic phrases in templates
Marcel Werk [Thu, 3 Feb 2022 13:35:10 +0000 (14:35 +0100)]
Overhauled handling of dynamic phrases in templates

Closes #4657

2 years ago`saveInstant()` yields an incorrect selection after formatting
Alexander Ebert [Wed, 2 Feb 2022 18:29:42 +0000 (19:29 +0100)]
`saveInstant()` yields an incorrect selection after formatting

Consider the example `Hello World` where the word `World` is selected. Marking the selection as bold did not mark the button as active.

This was caused by the way the selection is created, causing it to be `Hello |<strong>World|</strong>` when using `saveInstant()` (the pipe denotes the selection boundary).

2 years agoInclude the `$envelopeTo` address within the target filename in DebugFolderEmailTransport
Tim Düsterhus [Wed, 2 Feb 2022 15:45:37 +0000 (16:45 +0100)]
Include the `$envelopeTo` address within the target filename in DebugFolderEmailTransport

It was verified that the resulting Maildir still is a valid Maildir by opening
it with mutt.

2 years agoUpdating minified JavaScript files
WoltLab [Wed, 2 Feb 2022 12:30:48 +0000 (12:30 +0000)]
Updating minified JavaScript files

2 years agoMerge branch '5.4'
Tim Düsterhus [Wed, 2 Feb 2022 11:05:30 +0000 (12:05 +0100)]
Merge branch '5.4'

2 years agoMerge pull request #4656 from WoltLab/dialog-alert
Tim Düsterhus [Wed, 2 Feb 2022 11:05:19 +0000 (12:05 +0100)]
Merge pull request #4656 from WoltLab/dialog-alert

Fix rendering of alert boxes at the top of a dialog

2 years agoRemove obsolete inline CSS in removeUserContentDialog.tpl
Tim Düsterhus [Wed, 2 Feb 2022 11:01:43 +0000 (12:01 +0100)]
Remove obsolete inline CSS in removeUserContentDialog.tpl

see 0d0aecf7b629619de450304945989074522dbca2

2 years agoFix rendering of alert boxes at the top of a dialog
Tim Düsterhus [Wed, 2 Feb 2022 10:50:13 +0000 (11:50 +0100)]
Fix rendering of alert boxes at the top of a dialog

2 years agoMerge pull request #4655 from WoltLab/report-flood
Marcel Werk [Wed, 2 Feb 2022 10:40:57 +0000 (11:40 +0100)]
Merge pull request #4655 from WoltLab/report-flood

Add flood protection to creating new reports

2 years agoAdd flood protection to creating new reports
Tim Düsterhus [Wed, 2 Feb 2022 10:12:21 +0000 (11:12 +0100)]
Add flood protection to creating new reports

2 years agoFix adding of classes updateCounter() in user menu
Tim Düsterhus [Wed, 2 Feb 2022 10:11:38 +0000 (11:11 +0100)]
Fix adding of classes updateCounter() in user menu

2 years agoMerge pull request #4654 from WoltLab/5.5-poll
Joshua Rüsweg [Wed, 2 Feb 2022 08:01:02 +0000 (09:01 +0100)]
Merge pull request #4654 from WoltLab/5.5-poll

Standardize Poll Creation

2 years agoDeprecate `WCF.Poll.Management` JS module
joshuaruesweg [Tue, 1 Feb 2022 10:44:02 +0000 (11:44 +0100)]
Deprecate `WCF.Poll.Management` JS module

2 years agoUse TypeScript implementation for message polls
joshuaruesweg [Tue, 1 Feb 2022 10:41:31 +0000 (11:41 +0100)]
Use TypeScript implementation for message polls

2 years agoStandardize poll input names
joshuaruesweg [Tue, 1 Feb 2022 10:41:00 +0000 (11:41 +0100)]
Standardize poll input names

The old implementation uses names like `pollQuestion` instead of `Poll_question`. Unifying these, make it easier to maintain the code and use the TypeScript implementation for old and new code.

2 years agoMerge branch '5.4'
Tim Düsterhus [Tue, 1 Feb 2022 11:26:00 +0000 (12:26 +0100)]
Merge branch '5.4'

2 years agoUpdate composer dependencies
Tim Düsterhus [Tue, 1 Feb 2022 11:24:38 +0000 (12:24 +0100)]
Update composer dependencies

2 years agoRelease 5.4.13 5.4.13
Alexander Ebert [Mon, 31 Jan 2022 16:33:14 +0000 (17:33 +0100)]
Release 5.4.13

2 years agoMerge branch '5.3' into 5.4
Alexander Ebert [Mon, 31 Jan 2022 16:32:20 +0000 (17:32 +0100)]
Merge branch '5.3' into 5.4

2 years agoRelease 5.3.19 5.3.19
Alexander Ebert [Mon, 31 Jan 2022 16:30:49 +0000 (17:30 +0100)]
Release 5.3.19

2 years agoMerge branch '5.2' into 5.3
Alexander Ebert [Mon, 31 Jan 2022 16:30:10 +0000 (17:30 +0100)]
Merge branch '5.2' into 5.3

2 years agoRelease 5.2.19 5.2.19
Alexander Ebert [Mon, 31 Jan 2022 16:28:38 +0000 (17:28 +0100)]
Release 5.2.19

2 years agoMerge branch '3.1' into 5.2
Alexander Ebert [Mon, 31 Jan 2022 16:27:54 +0000 (17:27 +0100)]
Merge branch '3.1' into 5.2

2 years agoRelease 3.1.27 3.1.27
Alexander Ebert [Mon, 31 Jan 2022 16:24:44 +0000 (17:24 +0100)]
Release 3.1.27

2 years agoMerge branch '5.4'
Tim Düsterhus [Mon, 31 Jan 2022 16:22:00 +0000 (17:22 +0100)]
Merge branch '5.4'

2 years agoMerge branch '5.3' into 5.4
Tim Düsterhus [Mon, 31 Jan 2022 16:21:49 +0000 (17:21 +0100)]
Merge branch '5.3' into 5.4

2 years agoMerge branch '5.2' into 5.3
Tim Düsterhus [Mon, 31 Jan 2022 16:18:38 +0000 (17:18 +0100)]
Merge branch '5.2' into 5.3

2 years agoMerge branch '3.1' into 5.2
Tim Düsterhus [Mon, 31 Jan 2022 16:18:14 +0000 (17:18 +0100)]
Merge branch '3.1' into 5.2

2 years agoMerge branch 'unknown-bbcode-xss' into 3.1
Tim Düsterhus [Mon, 31 Jan 2022 16:17:54 +0000 (17:17 +0100)]
Merge branch 'unknown-bbcode-xss' into 3.1

2 years agoFix XSS vulnerability in HtmlBBCodeParser::buildBBCodeTag()
Tim Düsterhus [Mon, 31 Jan 2022 13:18:17 +0000 (14:18 +0100)]
Fix XSS vulnerability in HtmlBBCodeParser::buildBBCodeTag()

Thanks to @methosiea for responsibly reporting this issue.

Resolves #4653

2 years agoMerge branch '5.4'
Tim Düsterhus [Mon, 31 Jan 2022 13:41:34 +0000 (14:41 +0100)]
Merge branch '5.4'

2 years agoFix PHP 8.1.2 compatibility in DatabaseException
Tim Düsterhus [Mon, 31 Jan 2022 13:40:44 +0000 (14:40 +0100)]
Fix PHP 8.1.2 compatibility in DatabaseException

> Cannot access protected property PDOException::$code

2 years agoUpdate missed `.htaccess`
Tim Düsterhus [Mon, 31 Jan 2022 11:52:34 +0000 (12:52 +0100)]
Update missed `.htaccess`

see 75cc4fdef3cd84589e0a87871ea2dc0b92c6f570

2 years agoUpdate `.htaccess` authz rules for Apache 2.4
Tim Düsterhus [Mon, 31 Jan 2022 11:41:12 +0000 (12:41 +0100)]
Update `.htaccess` authz rules for Apache 2.4

see https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html
see https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require

2 years agoSlightly defer the menu overflow calculation to avoid an early style recalculation
Alexander Ebert [Sun, 30 Jan 2022 14:53:42 +0000 (15:53 +0100)]
Slightly defer the menu overflow calculation to avoid an early style recalculation

2 years agoImproved the behavior of the search button
Alexander Ebert [Sun, 30 Jan 2022 14:47:51 +0000 (15:47 +0100)]
Improved the behavior of the search button

2 years agoAdded the quick search button to the user list
Alexander Ebert [Fri, 28 Jan 2022 20:52:55 +0000 (21:52 +0100)]
Added the quick search button to the user list

Closes #3954

2 years agoMerge pull request #4651 from WoltLab/attachment-link-no-thumbnail
Tim Düsterhus [Fri, 28 Jan 2022 15:15:05 +0000 (16:15 +0100)]
Merge pull request #4651 from WoltLab/attachment-link-no-thumbnail

Always link image attachments in attachments.tpl

2 years agoAlways link image attachments in attachments.tpl
Tim Düsterhus [Fri, 28 Jan 2022 13:42:18 +0000 (14:42 +0100)]
Always link image attachments in attachments.tpl

Previously only attachments with a larger version were linked. This made it
hard to "rightclick-save" very small attachments and also suppressed them from
the image viewer, allowing users to miss them when watching the image viewer's
slideshow.

Resolves #4601

2 years agoUpdating minified JavaScript files
Alexander Ebert [Fri, 28 Jan 2022 13:40:25 +0000 (14:40 +0100)]
Updating minified JavaScript files

2 years agoMerge branch '55-js-bundle'
Alexander Ebert [Fri, 28 Jan 2022 13:33:16 +0000 (14:33 +0100)]
Merge branch '55-js-bundle'

2 years agoStrip prism from the `tiny` bundle
Alexander Ebert [Fri, 28 Jan 2022 13:08:50 +0000 (14:08 +0100)]
Strip prism from the `tiny` bundle

2 years agoRemoved a faulty workaround for the module bundle
Alexander Ebert [Fri, 28 Jan 2022 12:54:26 +0000 (13:54 +0100)]
Removed a faulty workaround for the module bundle

2 years agoProperly remove lazy-loaded modules from the bundle
Alexander Ebert [Thu, 27 Jan 2022 18:53:06 +0000 (19:53 +0100)]
Properly remove lazy-loaded modules from the bundle

2 years agoExclude modules that only contain TypeScript types and interfaces
Alexander Ebert [Thu, 27 Jan 2022 18:21:01 +0000 (19:21 +0100)]
Exclude modules that only contain TypeScript types and interfaces

2 years agoDeprecate the module `WoltLabSuite/Core/Ui/FlexibleMenu`
Alexander Ebert [Thu, 27 Jan 2022 18:00:42 +0000 (19:00 +0100)]
Deprecate the module `WoltLabSuite/Core/Ui/FlexibleMenu`

The module remains unused for years and has not been adopted by third parties.

2 years agoLoad additional modules on-demand
Alexander Ebert [Thu, 27 Jan 2022 17:56:30 +0000 (18:56 +0100)]
Load additional modules on-demand

2 years agoLazy load the style changer and poll editor
Alexander Ebert [Thu, 27 Jan 2022 17:46:26 +0000 (18:46 +0100)]
Lazy load the style changer and poll editor

2 years agoLoad the "pica" library on demand
Alexander Ebert [Thu, 27 Jan 2022 17:24:09 +0000 (18:24 +0100)]
Load the "pica" library on demand

2 years agoDefer the overflow handling for the main menu
Alexander Ebert [Thu, 27 Jan 2022 15:51:50 +0000 (16:51 +0100)]
Defer the overflow handling for the main menu

The previous code would inject the overflow handles immediately if the `screen-lg` environment matches. However, depending on the time it took this could have caused a forced reflow because the width of the menu was considered to be stale following the injection of the elements.

2 years agoSkip the template compilation step for phrases without curly braces
Alexander Ebert [Thu, 27 Jan 2022 15:02:01 +0000 (16:02 +0100)]
Skip the template compilation step for phrases without curly braces

2 years agoStop relying on `ts-node` from the global scope
Alexander Ebert [Thu, 27 Jan 2022 13:45:58 +0000 (14:45 +0100)]
Stop relying on `ts-node` from the global scope

2 years agoRemoved a forced reflow that effectively did nothing
Alexander Ebert [Thu, 27 Jan 2022 13:35:59 +0000 (14:35 +0100)]
Removed a forced reflow that effectively did nothing

2 years agoMerge branch '5.4'
Tim Düsterhus [Thu, 27 Jan 2022 13:18:04 +0000 (14:18 +0100)]
Merge branch '5.4'

2 years agoMerge branch '5.3' into 5.4
Tim Düsterhus [Thu, 27 Jan 2022 13:09:56 +0000 (14:09 +0100)]
Merge branch '5.3' into 5.4

2 years agoFix regular expression for the `atext` production in EmailGrammar
Tim Düsterhus [Thu, 27 Jan 2022 13:01:33 +0000 (14:01 +0100)]
Fix regular expression for the `atext` production in EmailGrammar

Due to the missing escaping of the hyphen with a backslash the allowed
characters were not just:

- The plus sign (`+`, 0x2B),
- the dash      (`-`, 0x2D), and
- the slash     (`/`, 0x2F).

But all ASCII characters between 0x2B and 0x2F, namely:

- The plus sign (`+`, 0x2B),
- the comma     (`,`, 0x2C),
- the dash      (`-`, 0x2D),
- the dot       (`.`, 0x2E), and
- the slash     (`/`, 0x2F).

i.e. the comma and dot in addition to the actually allowed characters.

This error caused an incorrect encoding of headers in `::encodeHeader()`.
Specifically the real name of a mailbox was affected by this issue. As a result
a real name that included a dot, but otherwise matched the `atom` grammar was
improperly encoded, possibly causing email parsing failures for MUAs.

2 years agoProvide the current `url` to all login links
Tim Düsterhus [Thu, 27 Jan 2022 09:18:17 +0000 (10:18 +0100)]
Provide the current `url` to all login links

see 6e5b36526f992eb1f04fb4ebc28f3ae38bed6aff

2 years agoRemoved the no longer used API compatibility from exported packages
Alexander Ebert [Wed, 26 Jan 2022 18:44:20 +0000 (19:44 +0100)]
Removed the no longer used API compatibility from exported packages

2 years agoRequiring a minimum age for registrations now marks the fields as required
Alexander Ebert [Wed, 26 Jan 2022 18:31:09 +0000 (19:31 +0100)]
Requiring a minimum age for registrations now marks the fields as required

See https://www.woltlab.com/community/thread/291431-mindestalter-geburtsdatum-ist-pflichtfeld-wird-aber-nicht-so-deklariert/

2 years agoPlaceholder color for textareas, replaced legacy properties with `::placeholder`
Alexander Ebert [Wed, 26 Jan 2022 18:16:15 +0000 (19:16 +0100)]
Placeholder color for textareas, replaced legacy properties with `::placeholder`

See https://www.woltlab.com/community/thread/292757-unterschiedliche-placeholder-farben/

2 years agoDo not replace files in `custom/` during style import
Tim Düsterhus [Wed, 26 Jan 2022 09:40:01 +0000 (10:40 +0100)]
Do not replace files in `custom/` during style import

Resolves #3748

2 years agoUse `str_contains()` instead of `strpos() !== false` in StyleEditor
Tim Düsterhus [Wed, 26 Jan 2022 09:37:06 +0000 (10:37 +0100)]
Use `str_contains()` instead of `strpos() !== false` in StyleEditor

2 years agoShorten overly long line in StyleEditor
Tim Düsterhus [Wed, 26 Jan 2022 09:30:00 +0000 (10:30 +0100)]
Shorten overly long line in StyleEditor

2 years agoImplemented the StoreCode (#4649)
Alexander Ebert [Tue, 25 Jan 2022 14:45:56 +0000 (15:45 +0100)]
Implemented the StoreCode (#4649)

Co-authored-by: Tim Düsterhus <duesterhus@woltlab.com>