GitHub/WoltLab/WCF.git
2 years agoRedirect controller-less ACP requests to IndexPage of `wcf`
Tim Düsterhus [Fri, 27 May 2022 11:44:01 +0000 (13:44 +0200)]
Redirect controller-less ACP requests to IndexPage of `wcf`

2 years agoMerge pull request #4827 from WoltLab/api-url
Tim Düsterhus [Fri, 27 May 2022 10:51:48 +0000 (12:51 +0200)]
Merge pull request #4827 from WoltLab/api-url

Move the `WSC_API_URL` into com.woltlab.wcf

2 years agoMerge pull request #4826 from WoltLab/upgrade-workaround-cleanup
Tim Düsterhus [Fri, 27 May 2022 10:51:41 +0000 (12:51 +0200)]
Merge pull request #4826 from WoltLab/upgrade-workaround-cleanup

Remove obsolete upgrade workarounds

2 years agoRemove support for implicitly routing *Action requests to com.woltlab.wcf
Tim Düsterhus [Fri, 27 May 2022 10:36:14 +0000 (12:36 +0200)]
Remove support for implicitly routing *Action requests to com.woltlab.wcf

This is no longer required since the removal of multi-domain support

see 5d1c96bc6e92b8b44170922b8abb26b898582f8c

2 years agoDeprecate WCF::getActivePath()
Tim Düsterhus [Fri, 27 May 2022 10:07:13 +0000 (12:07 +0200)]
Deprecate WCF::getActivePath()

see 5d1c96bc6e92b8b44170922b8abb26b898582f8c

2 years agoMove the `WSC_API_URL` into com.woltlab.wcf
Tim Düsterhus [Fri, 27 May 2022 10:02:55 +0000 (12:02 +0200)]
Move the `WSC_API_URL` into com.woltlab.wcf

This workaround is no longer required with the removal of multi-domain setups.

see 5d1c96bc6e92b8b44170922b8abb26b898582f8c

2 years agoRemove workaround for the WCF app in RoutingCacheBuilder
Tim Düsterhus [Fri, 27 May 2022 09:28:04 +0000 (11:28 +0200)]
Remove workaround for the WCF app in RoutingCacheBuilder

2 years agoRemove upgrade workaround from ApplicationHandler
Tim Düsterhus [Fri, 27 May 2022 09:26:25 +0000 (11:26 +0200)]
Remove upgrade workaround from ApplicationHandler

2 years agoUse `->prepare()` instead of `->prepareStatement()` in RoutingCacheBuilder
Tim Düsterhus [Fri, 27 May 2022 09:22:35 +0000 (11:22 +0200)]
Use `->prepare()` instead of `->prepareStatement()` in RoutingCacheBuilder

2 years agoMerge pull request #4822 from WoltLab/requesthandler-cleanup
Tim Düsterhus [Fri, 27 May 2022 09:06:07 +0000 (11:06 +0200)]
Merge pull request #4822 from WoltLab/requesthandler-cleanup

Clean up route processing in RequestHandler

2 years agoMerge branch '5.5'
Tim Düsterhus [Fri, 27 May 2022 08:43:43 +0000 (10:43 +0200)]
Merge branch '5.5'

2 years agoShow a text cursor while the item list accepts items
Alexander Ebert [Thu, 26 May 2022 11:45:20 +0000 (13:45 +0200)]
Show a text cursor while the item list accepts items

2 years agoReordered the generic search filters
Alexander Ebert [Thu, 26 May 2022 11:34:29 +0000 (13:34 +0200)]
Reordered the generic search filters

2 years agoTighten up composer version constraints
Tim Düsterhus [Wed, 25 May 2022 13:52:38 +0000 (15:52 +0200)]
Tighten up composer version constraints

2 years agoUpdate composer dependencies
Tim Düsterhus [Wed, 25 May 2022 13:49:19 +0000 (15:49 +0200)]
Update composer dependencies

2 years agoMerge branch '5.5'
Tim Düsterhus [Wed, 25 May 2022 13:48:15 +0000 (15:48 +0200)]
Merge branch '5.5'

2 years agoMerge commit '0b2cf258cc824c78eb1168141244ffbc1a8954be'
Tim Düsterhus [Wed, 25 May 2022 13:48:07 +0000 (15:48 +0200)]
Merge commit '0b2cf258cc824c78eb1168141244ffbc1a8954be'

2 years agoMerge branch '5.4' into 5.5
Tim Düsterhus [Wed, 25 May 2022 13:45:38 +0000 (15:45 +0200)]
Merge branch '5.4' into 5.5

2 years agoRegenerate composer autoloader
Tim Düsterhus [Wed, 25 May 2022 13:44:51 +0000 (15:44 +0200)]
Regenerate composer autoloader

2 years agoMerge branch '5.3' into 5.4
Tim Düsterhus [Wed, 25 May 2022 13:43:01 +0000 (15:43 +0200)]
Merge branch '5.3' into 5.4

2 years agoRegenerate composer autoloader
Tim Düsterhus [Wed, 25 May 2022 13:33:31 +0000 (15:33 +0200)]
Regenerate composer autoloader

2 years agoUpdate Guzzle
Tim Düsterhus [Wed, 25 May 2022 13:31:40 +0000 (15:31 +0200)]
Update Guzzle

see guzzle/guzzle@f092dd734083473658de3ee4bef093ed77d2689c

2 years agoRegenerate composer autoloader
Tim Düsterhus [Wed, 25 May 2022 13:30:33 +0000 (15:30 +0200)]
Regenerate composer autoloader

2 years agoImproved behavior of the mobile search
Alexander Ebert [Tue, 24 May 2022 16:38:52 +0000 (18:38 +0200)]
Improved behavior of the mobile search

An already active overlay such as the mobile menu could cause the page to become scrollable.

See https://www.woltlab.com/community/thread/295731-mobil-%C3%B6ffnen-der-suche-nach-%C3%B6ffnen-eines-men%C3%BCs-fehlerhaft/

2 years agoImproved phrases in search form
Marcel Werk [Tue, 24 May 2022 16:20:38 +0000 (18:20 +0200)]
Improved phrases in search form

2 years agoFixed wrong language variable
Marcel Werk [Tue, 24 May 2022 16:06:21 +0000 (18:06 +0200)]
Fixed wrong language variable

2 years agoRemoved time information in account ban duration message
Marcel Werk [Tue, 24 May 2022 12:56:13 +0000 (14:56 +0200)]
Removed time information in account ban duration message

2 years agoMerge branch '5.4' into 5.5
Alexander Ebert [Tue, 24 May 2022 09:48:58 +0000 (11:48 +0200)]
Merge branch '5.4' into 5.5

2 years agoForce case-insensitive check for smiley codes
Alexander Ebert [Mon, 23 May 2022 17:08:46 +0000 (19:08 +0200)]
Force case-insensitive check for smiley codes

The smiley table uses a case-insensitive unique key for the smiley code.

See https://www.woltlab.com/community/thread/295708-bug-beim-erstellen-eines-smileys-mit-bereits-vorhandenem-smileycode-duplikat/

2 years agoContent navigation buttons were unintentionally truncated in mobile version
Marcel Werk [Mon, 23 May 2022 17:00:48 +0000 (19:00 +0200)]
Content navigation buttons were unintentionally truncated in mobile version

2 years agoMerge pull request #4825 from WoltLab/standalone-notification-list
Alexander Ebert [Mon, 23 May 2022 15:59:45 +0000 (17:59 +0200)]
Merge pull request #4825 from WoltLab/standalone-notification-list

Moved the notification list into the global space

2 years agoMoved the notification list into the global space
Alexander Ebert [Mon, 23 May 2022 15:23:28 +0000 (17:23 +0200)]
Moved the notification list into the global space

The notification list was placed in the user menu a long time ago, but never really fitted in there. The link was already (and continues to be) reachable through the drop-down menu, removing the need of an additional location.

Moving the notification list into the global page space makes more sense and aligns with similar lists such as the conversations.

2 years agoThe extra profile link now starts the edit mode
Alexander Ebert [Mon, 23 May 2022 15:09:52 +0000 (17:09 +0200)]
The extra profile link now starts the edit mode

See https://www.woltlab.com/community/thread/295243-pro-und-kontra-neues-kontrollzentrum/

2 years agoMark quotes that have been stripped empty
Alexander Ebert [Mon, 23 May 2022 15:04:16 +0000 (17:04 +0200)]
Mark quotes that have been stripped empty

See https://www.woltlab.com/community/thread/295675-zitieren-von-zitaten-f%C3%BChrt-zu-leerem-zitat/

2 years agoMerge branch '5.5'
Tim Düsterhus [Mon, 23 May 2022 14:42:24 +0000 (16:42 +0200)]
Merge branch '5.5'

2 years agoIncorrect alignment of the user profile header
Alexander Ebert [Mon, 23 May 2022 14:22:51 +0000 (16:22 +0200)]
Incorrect alignment of the user profile header

See https://www.woltlab.com/community/thread/295692-contenttitle-im-benutzerprofil-leicht-versetzt/

2 years agoIncorrect handling of HTML elements in `<pre>`
Alexander Ebert [Mon, 23 May 2022 14:01:28 +0000 (16:01 +0200)]
Incorrect handling of HTML elements in `<pre>`

Fixes #4824

2 years agoMerge branch '5.4' into 5.5
Tim Düsterhus [Mon, 23 May 2022 08:01:44 +0000 (10:01 +0200)]
Merge branch '5.4' into 5.5

2 years agoFix typo in de.xml
Tim Düsterhus [Mon, 23 May 2022 07:58:20 +0000 (09:58 +0200)]
Fix typo in de.xml

2 years agoRelease 5.5.0 Beta 3 5.5.0_Beta_3
Alexander Ebert [Fri, 20 May 2022 14:20:42 +0000 (16:20 +0200)]
Release 5.5.0 Beta 3

2 years agoIncorrect visuals when the title is alone
Alexander Ebert [Fri, 20 May 2022 14:12:34 +0000 (16:12 +0200)]
Incorrect visuals when the title is alone

See 405de3b60f453dfca0c11555f653128694b7ecb6

2 years agoUpdating minified JavaScript files
WoltLab [Fri, 20 May 2022 14:01:45 +0000 (14:01 +0000)]
Updating minified JavaScript files

2 years agoMerge pull request #4823 from WoltLab/page-search
Alexander Ebert [Fri, 20 May 2022 13:50:22 +0000 (15:50 +0200)]
Merge pull request #4823 from WoltLab/page-search

Exclude page versions of disabled languages from search results

2 years agoMerge pull request #4817 from WoltLab/search-by-author
Alexander Ebert [Fri, 20 May 2022 13:49:32 +0000 (15:49 +0200)]
Merge pull request #4817 from WoltLab/search-by-author

Support search for multiple authors

2 years agoMerge branch '5.5' into search-by-author
Alexander Ebert [Fri, 20 May 2022 13:49:10 +0000 (15:49 +0200)]
Merge branch '5.5' into search-by-author

2 years agoExclude page versions of disabled languages from search results
Marcel Werk [Fri, 20 May 2022 13:43:49 +0000 (15:43 +0200)]
Exclude page versions of disabled languages from search results

ref https://www.woltlab.com/community/thread/295670-inexistente-cms-seiten-im-suchindex-nach-entfernen-der-mehrsprachigkeit/

2 years agoEnforce that routes return a controller for non-default-controller routes
Tim Düsterhus [Fri, 20 May 2022 13:37:09 +0000 (15:37 +0200)]
Enforce that routes return a controller for non-default-controller routes

2 years agoMerge pull request #4819 from WoltLab/search-form-subject-only
Alexander Ebert [Fri, 20 May 2022 13:20:11 +0000 (15:20 +0200)]
Merge pull request #4819 from WoltLab/search-form-subject-only

Improved structure of the search form filter options

2 years agoRewrite condition in RequestHandler::buildRequest() to be more clear
Tim Düsterhus [Fri, 20 May 2022 13:01:39 +0000 (15:01 +0200)]
Rewrite condition in RequestHandler::buildRequest() to be more clear

It now has an explicit “then” (ACP) and “else” (Frontend) part.

2 years agoClean up `$classData` in RequestHandler::buildRequest()
Tim Düsterhus [Fri, 20 May 2022 12:51:31 +0000 (14:51 +0200)]
Clean up `$classData` in RequestHandler::buildRequest()

Since the recent changes only the `className` member of this array was access.
Simplify this to a simple `$className` variable.

2 years agoMake ControllerMap::isLandingPage() take a className, not a classData array
Tim Düsterhus [Fri, 20 May 2022 12:46:47 +0000 (14:46 +0200)]
Make ControllerMap::isLandingPage() take a className, not a classData array

It is only interested in the className field of the given array and taking a
className directly makes the API clearer.

2 years agoRemove dead stores in RequestHandler::buildRequest()
Tim Düsterhus [Fri, 20 May 2022 12:43:57 +0000 (14:43 +0200)]
Remove dead stores in RequestHandler::buildRequest()

These array fields are never accessed after being unset.

2 years agoRemove `$pageName` from `wcf\system\request\Request`
Tim Düsterhus [Fri, 20 May 2022 12:40:59 +0000 (14:40 +0200)]
Remove `$pageName` from `wcf\system\request\Request`

The value is unused and badly named, because it refers to the controller name
and not the name of some page.

2 years agoDo not take `routeData` by reference in RequestHandler::handleDefaultController()
Tim Düsterhus [Fri, 20 May 2022 12:38:37 +0000 (14:38 +0200)]
Do not take `routeData` by reference in RequestHandler::handleDefaultController()

By returning the updated data the data flow becomes clearer.

2 years agoRemove dead branch in RequestHandler::redirect()
Tim Düsterhus [Fri, 20 May 2022 12:36:06 +0000 (14:36 +0200)]
Remove dead branch in RequestHandler::redirect()

The `redirect()` method is only called in a single location where `$controller`
will also be set to a string.

2 years agoMark RequestHandler as final
Tim Düsterhus [Fri, 20 May 2022 12:35:04 +0000 (14:35 +0200)]
Mark RequestHandler as final

2 years agoMove local `$controller` variable into a more appropriate "scope" in RequestHandler...
Tim Düsterhus [Fri, 20 May 2022 12:30:56 +0000 (14:30 +0200)]
Move local `$controller` variable into a more appropriate "scope" in RequestHandler::buildRequest()

The variable is only referenced in the `else`, move it there to make the data
flow clearer.

2 years agoRemove the `pageType` from `\wcf\system\request\Request`
Tim Düsterhus [Fri, 20 May 2022 12:15:58 +0000 (14:15 +0200)]
Remove the `pageType` from `\wcf\system\request\Request`

This value is currently unused, incorrectly documented (`page` was a valid
value since the addition of CMS pages), of questionable value and will break
with the addition of PSR-15 controllers.

2 years agoMerge pull request #4820 from WoltLab/psr-7-pipeline
Tim Düsterhus [Fri, 20 May 2022 11:06:10 +0000 (13:06 +0200)]
Merge pull request #4820 from WoltLab/psr-7-pipeline

Add PSR-7 / PSR-15 Pipeline

2 years agoMerge pull request #4821 from WoltLab/wcfsetup-clean-all-tmps
Tim Düsterhus [Fri, 20 May 2022 10:43:28 +0000 (12:43 +0200)]
Merge pull request #4821 from WoltLab/wcfsetup-clean-all-tmps

Clean all directories that match the tmp naming pattern at the end of WCFSetup

2 years agoClean all directories that match the tmp naming pattern at the end of WCFSetup
Tim Düsterhus [Fri, 20 May 2022 09:30:12 +0000 (11:30 +0200)]
Clean all directories that match the tmp naming pattern at the end of WCFSetup

Since e41dfd007b12baed65ab7679fb679e53bcd2adf5 the temporary directory for
WCFSetup resides in the webroot instead of some system internal temporary
directory. As such temporary files might remain in the webroot and likely will
never be cleaned if the install.php is accessed multiple times before the setup
is completed.

Fix this by deleting all directories that match the pattern for the name of the
temporary directory once the setup is completed successfully.

2 years agoAdd `CheckForEnterpriseNonOwnerAccess` middleware
Tim Düsterhus [Fri, 20 May 2022 08:12:09 +0000 (10:12 +0200)]
Add `CheckForEnterpriseNonOwnerAccess` middleware

2 years agoAdd `CheckForExpiredAppEvaluation` middleware
Tim Düsterhus [Fri, 20 May 2022 08:01:12 +0000 (10:01 +0200)]
Add `CheckForExpiredAppEvaluation` middleware

2 years agoAdd `CheckForOfflineMode` middleware
Tim Düsterhus [Fri, 20 May 2022 07:49:02 +0000 (09:49 +0200)]
Add `CheckForOfflineMode` middleware

2 years agoAdd `AddAcpSecurityHeaders` middleware
Tim Düsterhus [Thu, 19 May 2022 14:35:45 +0000 (16:35 +0200)]
Add `AddAcpSecurityHeaders` middleware

2 years agoMake EnforceFrameOptions compatible with legacy and PSR-15 controllers
Tim Düsterhus [Thu, 19 May 2022 14:33:50 +0000 (16:33 +0200)]
Make EnforceFrameOptions compatible with legacy and PSR-15 controllers

2 years agoInline RequestHandler::sendPsr7Response()
Tim Düsterhus [Thu, 19 May 2022 14:11:57 +0000 (16:11 +0200)]
Inline RequestHandler::sendPsr7Response()

2 years agoAdd `EnforceFrameOptions` middleware
Tim Düsterhus [Thu, 19 May 2022 14:11:14 +0000 (16:11 +0200)]
Add `EnforceFrameOptions` middleware

2 years agoMove the cache-control adjustments from RequestHandler into a middleware
Tim Düsterhus [Thu, 19 May 2022 14:09:25 +0000 (16:09 +0200)]
Move the cache-control adjustments from RequestHandler into a middleware

2 years agoSend the requests through the middleware Pipeline in RequestHandler
Tim Düsterhus [Thu, 19 May 2022 14:06:25 +0000 (16:06 +0200)]
Send the requests through the middleware Pipeline in RequestHandler

2 years agoAdd \wcf\http\Pipeline and \wcf\http\RequestHandlerMiddleware
Tim Düsterhus [Thu, 19 May 2022 14:01:42 +0000 (16:01 +0200)]
Add \wcf\http\Pipeline and \wcf\http\RequestHandlerMiddleware

2 years agoSupport `RequestHandlerInterface`-based controllers in `wcf\system\request\Request`
Tim Düsterhus [Thu, 19 May 2022 13:15:16 +0000 (15:15 +0200)]
Support `RequestHandlerInterface`-based controllers in `wcf\system\request\Request`

2 years agoImplement `Psr\Http\Message\ServerRequestInterface` in `wcf\system\request\Request`
Tim Düsterhus [Thu, 19 May 2022 13:13:48 +0000 (15:13 +0200)]
Implement `Psr\Http\Message\ServerRequestInterface` in `wcf\system\request\Request`

2 years agoMark `\wcf\system\request\Request` as final
Tim Düsterhus [Thu, 19 May 2022 13:10:21 +0000 (15:10 +0200)]
Mark `\wcf\system\request\Request` as final

2 years agoAdd `psr/http-server-middleware` composer dependency
Tim Düsterhus [Thu, 19 May 2022 12:23:05 +0000 (14:23 +0200)]
Add `psr/http-server-middleware` composer dependency

2 years agoRemove obsolete check for `ResponseInterface` in RequestHandler::handle()
Tim Düsterhus [Thu, 19 May 2022 12:53:17 +0000 (14:53 +0200)]
Remove obsolete check for `ResponseInterface` in RequestHandler::handle()

2 years agoReturn LegacyPlaceholderResponse from `Request::execute()`
Tim Düsterhus [Thu, 19 May 2022 12:52:04 +0000 (14:52 +0200)]
Return LegacyPlaceholderResponse from `Request::execute()`

2 years agoHandle LegacyPlaceholderResponse in RequestHandler
Tim Düsterhus [Thu, 19 May 2022 12:50:40 +0000 (14:50 +0200)]
Handle LegacyPlaceholderResponse in RequestHandler

2 years agoAdd `\wcf\http\LegacyPlaceholderResponse`
Tim Düsterhus [Thu, 19 May 2022 12:49:33 +0000 (14:49 +0200)]
Add `\wcf\http\LegacyPlaceholderResponse`

2 years agoExplicitly require `psr/http-message` composer dependency
Tim Düsterhus [Thu, 19 May 2022 12:22:39 +0000 (14:22 +0200)]
Explicitly require `psr/http-message` composer dependency

2 years agoExplicitly require `psr/http-server-handler` composer dependency
Tim Düsterhus [Thu, 19 May 2022 12:22:06 +0000 (14:22 +0200)]
Explicitly require `psr/http-server-handler` composer dependency

2 years agoAdd missing comma to headIncludeJavaScript.tpl
Tim Düsterhus [Thu, 19 May 2022 13:04:02 +0000 (15:04 +0200)]
Add missing comma to headIncludeJavaScript.tpl

see a5c441a61209584360c5917871536500ef7a12bd

2 years agoMerge branch '5.5'
Tim Düsterhus [Thu, 19 May 2022 12:54:57 +0000 (14:54 +0200)]
Merge branch '5.5'

2 years agoFix filename of the update scripts for 5.6
Tim Düsterhus [Thu, 19 May 2022 11:55:50 +0000 (13:55 +0200)]
Fix filename of the update scripts for 5.6

2 years agoAdd `x-frame-options` response header to PSR-7 responses in RequestHandler
Tim Düsterhus [Thu, 19 May 2022 08:36:22 +0000 (10:36 +0200)]
Add `x-frame-options` response header to PSR-7 responses in RequestHandler

2 years agoRemove obsolete checks for `!PACKAGE_ID` / `NO_IMPORTS`
Tim Düsterhus [Thu, 19 May 2022 08:33:50 +0000 (10:33 +0200)]
Remove obsolete checks for `!PACKAGE_ID` / `NO_IMPORTS`

see #4818

2 years agoMerge pull request #4818 from WoltLab/wcfsetup-psr-7
Tim Düsterhus [Thu, 19 May 2022 07:09:45 +0000 (09:09 +0200)]
Merge pull request #4818 from WoltLab/wcfsetup-psr-7

Migrate WCFSetup to PSR-7

2 years agoWork-around when closing a closing dialog
Alexander Ebert [Wed, 18 May 2022 16:38:36 +0000 (18:38 +0200)]
Work-around when closing a closing dialog

See https://www.woltlab.com/community/thread/295669-uidialog-cannot-read-properties-of-undefined-reading-closable/

2 years agoImproved structure of the search form filter options
Marcel Werk [Wed, 18 May 2022 16:24:37 +0000 (18:24 +0200)]
Improved structure of the search form filter options

2 years agoImage viewer broke during orientation change
Alexander Ebert [Wed, 18 May 2022 16:21:59 +0000 (18:21 +0200)]
Image viewer broke during orientation change

See https://www.woltlab.com/community/thread/295628-mobil-bildanzeige-skaliert-beim-drehen/

2 years agoMissing language variable
Marcel Werk [Wed, 18 May 2022 16:15:21 +0000 (18:15 +0200)]
Missing language variable

2 years agoInline WCFSetup::installFiles()
Tim Düsterhus [Wed, 18 May 2022 14:57:54 +0000 (16:57 +0200)]
Inline WCFSetup::installFiles()

`->unzipFiles()` basically consisted only of the call to `::installFiles()`,
simplify the control flow by putting those three lines of code inline to make
`->unzipFiles()` self-contained.

2 years agoMigrate WCFSetup to PSR-7
Tim Düsterhus [Wed, 18 May 2022 14:50:32 +0000 (16:50 +0200)]
Migrate WCFSetup to PSR-7

2 years agoMark WCFSetup as final
Tim Düsterhus [Wed, 18 May 2022 14:49:42 +0000 (16:49 +0200)]
Mark WCFSetup as final

2 years agoMerge pull request #4816 from WoltLab/template-engine-psr-7
Tim Düsterhus [Wed, 18 May 2022 15:52:03 +0000 (17:52 +0200)]
Merge pull request #4816 from WoltLab/template-engine-psr-7

Add TemplateEngine::fetchStream() to efficiently render a template as a PSR-7 StreamInterface

2 years agoFixed code style
Marcel Werk [Wed, 18 May 2022 15:46:22 +0000 (17:46 +0200)]
Fixed code style

2 years agoCheck if at least one author exists when searching for author
Marcel Werk [Wed, 18 May 2022 15:39:48 +0000 (17:39 +0200)]
Check if at least one author exists when searching for author

2 years agoInconsistent sort order of the mobile ACP header
Alexander Ebert [Wed, 18 May 2022 15:39:43 +0000 (17:39 +0200)]
Inconsistent sort order of the mobile ACP header

See https://www.woltlab.com/community/thread/295662-mobiles-men%C3%BC-im-acp/

2 years agoSupport search for multiple authors
Marcel Werk [Wed, 18 May 2022 15:33:45 +0000 (17:33 +0200)]
Support search for multiple authors

2 years agoAdd TemplateEngine::fetchStream() to efficiently render a template as a PSR-7 StreamI...
Tim Düsterhus [Wed, 18 May 2022 14:16:15 +0000 (16:16 +0200)]
Add TemplateEngine::fetchStream() to efficiently render a template as a PSR-7 StreamInterface