adaptations for request form access by non-logged-in user * generate 'centre' token in login() for use in request-form url * adapt create_form_tokens() to accept 'centre' only * Local::Utils encrypt & decrypt functions capture Crypt::CBC errors & return empty not stacktrace
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()
fixed L::Mail::_sendmail() to add text/html header where necessary; added admin_messages functions; requests_and_reports.pl sets contact according to flag
added skipped_lab_tests & added_lab_tests arrays to M::Roles::ScreenUpdate::do_new_lab_tests to return outcome info to Controllers; replaced 3 object attributes with 2 LIMS::DB queries in M::Roles::ScreenUpdate::_have_required_sample_type_for_lab_test(); ErrorHandler uses L::Model::Email instead of L::Local::Mail - supplies required _app_cfg - email-admin function now works
added Base::is_lab_staff() method; access to lab test history now restricted to lab staff; C::Roles::DataMap::user_locations_map uses user_locations table instead of email_contacts table so that non-network users get a new diagnosis list
moved authen_config from lims_config.pl to main LIMS app - CUSTOM callback doesn't work when cfg loaded using Class::Singleton instance; modified idle timeout function to automatically load logged-in username in login screen, so only passwd required, and added link to logout if different user; cgiapp_prerun checks form param username matches authen; added region_code back to user_locations + admin functions