* hardcode sql limits within their respective components instead of
having them configurable
* creating a new DBTypeList defaults it to being unlimited
* SQL_LIMIT_NONE (0) > removed as it only existed for consistency
* SQL_LIMIT_DEFAULT (300) > frontend / Listview::DEFAULT_SIZE
* SQL_LIMIT_SEARCH (500) > Search::DEFAULT_MAX_RESULTS
* SQL_LIMIT_QUICKSEARCH (10) > Search::SUGGESTIONS_MAX_RESULTS
* partially revert eb70065e0f as the
regex without the /u flag destroys valid umlauts like 'ß'
* convert strings from utf8 to utf8 instead to achieve the same effect
* improve handling of invalid unicode sequences in urls (%xx).
Page no longer breaks entirely, just misses the search term as the faulty string gets silently dropped.
* don't perform searches if you don't have valid terms to search for
* recreate date functions from javascript in new class DateTime
* move date and time functions from Util to new class
* fixes various cooldown messages for account recovery
* fix cache id collision when category == dbTypeId for a given dbType
* increment version number to invalidate existing caches
* maps endpoint doesn't need caching. It is entirely static content.
* so we can't directly use BackedEnum::tryFrom as validator, because if
the Enum is of <int> and the string is not what php considers numeric,
we get a straight TypeError Exception instead of null for failing the tryFrom.
* redo page render following the logic of:
Response ─┬─> TextResponse ─> TextResponseImpl
└─> TemplateResponse ─> TemplateResponseImpl
* split up giant files, one per response path
* caching becomes a trait, implemented where necessary
* TextResponses (Ajax) can now be cached
* make use of previously defined php classes for js objects
* Tabs, Listview, Tooltip, Announcement, Markup, Book, ...
* \Aowow\Template\PageTemplate is the new class to be cached
* do not discard error messages generated after vars have been sent to template
and store in session for display at a later time
* implement tracking consent management
* move logic out of template into their respective endpoints