When getting settings from database, running across NULL loads default
setting for given option. Becuase entity unserializer always returned
NULLs instead of FALSEs due to bug in TextHelper, it ended up always
loading default settings (but only after reloading entity, setting it in
the settings page worked correctly until relog).
This fix is closely related to fde6fc2.
In order to reset seed for order:random, one had to specify at least one
order token. Most of pages didn't, effectively rendering random order
too persistent across navigation. This change makes sure that seed is
reset even if one doesn't specify any order token.
URLs of stylesheets and scripts are appended with current engine
version. This forces browsers to aggressively refresh the assets
regardless of any caching settings, whenever new version comes out.
- Jobs specify main privilege and sub privileges separately
Rationale: increase maintenance, restrict what can be done runtime
- Renamed ChangeUser* to EditUser* (consistency with EditPost*)
- Simplified enum names and configuration reading
- IJob interface members must be explicitly implemented
Rationale: reduce chances of forgetting something, or typos in
inherited method names
- Invalid privileges names in configuration yield exceptions
- False booleans were serialized as NULLs, which lead to problems with
queries like 'SELECT ... WHERE NOT x'
- Fixed anonymous uploads
- More robust integer and boolean parsing in jobs