Added comments.
Decouple more controllers from config reader.
Inject configuration.
Created mechanism for reloading configuration through plugin manager.
Note: this will create some inefficiency until \VuFind\Config\Reader is factored out of code; in some cases, configurations will load twice.  Should be sorted out soon.
Inject configurations into cache manager.
Inject configuration into sitemap generator.
Avoid potentially inappropriate direct data access.
Eliminate unnecessary config loading.
Added missing comments.
Moved extractComments() from Reader to Upgrade class since it is only used in one place.
This might deserve its own class if it ever needs to be reused in the future.
Decoupled from config\reader.
More configuration decoupling.
Make findSearchTerm() regexes Unicode-friendly.
Update module/VuFind/src/VuFind/Controller/Plugin/Holds.php

For the Aleph Driver, it's possible that the item ID (id from route) and the holding ID (id from query) are different. With the += operator for merging, the id attribute from $keyValueArray was not used and an invalid REST url was sent to the ILS.
I'm not sure why the record id is loaded from the route here. With this fix, it's only used as a fallback when not defined in the query as a HMACKeys-variable of the ILS.

Aleph uses id:item_id which causes the conflict here.
Update config/application.config.php

Prevent adding a module if it's already in the list.
Because on some systems it's not possible to define environment variables, you should be able to add the module to the normal module list (defined at the top of this file). Problem occures when you work with different systems for dev/test/prod etc. and want to share the same code base.
Stop using \VuFind\Config\Reader.
Removed unnecessary use statements.
Improved ILS\Connection dependency injection and related unit tests.
Style fixes.