added url_base to cgiapp_prerun(), refactored multiple calls to ->query to ; added part_number to storage module; restored 10-digit storage vialId + validation; bugfix to update_storage_vial(), failed validation due to duplicate vialId and old update method didn't do changes_only; added online request form link to guest user hello page; moved token generation from Resources menu() to Role::Resources::create_form_tokens() for sharing between menu() & hello()
new setting 'is_test_platform' to exempt test server from portal login requirement; new outreach worklists unreported and unauthorised; added user-configurable duration option on unreported worklist, shared with outreach unreported; adapted Resources token generation function to provide encrypted username for online request forms; bugfix to _xna_extraction() - lc on query param extraction_type gave error if param undef
spell-check changes: add-new-word function now puts terms in temp file for assessment by admin before importing into site-specific personal dictionary; rebuilt en-medical.rws (extra-dict) from edited contents of old personal dict (.aspell.en.pws) - moved all acronyms/abbreviations into new personal dict (.aspell.leeds.pws); LIMS::_create_user_profile() adds users 'centre' param to session user_profile; adapted spellchecker.pl to work with new dictionary format
moved actions associated with unlock into lims_config.pl for central loading for app & templates, and coupled unlock function to associated actions in Resources / user permissions