* don't run querys if not strictly required (e.g. query for chars from ajax context)
* prepare user globals and favorites so errors can be handled and don't destroy the template
this also allows for profiling of the affected queries
* add keys to items table to speed up querying for recipes in general and user completions in particular
* use get_object_vars() instead of property_exists() to test if we can
load a variable from provided context. The former only returns
accessible vars while the latter returns true for all properties.
* move checks to __construct so they can be run on $_POST data
and don't create malformed filter urls
* if we received malformed $_GET params, build new params and reload
* do not store error state in cache
* cleanup
* 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