From 34dd59bc70b8cf7372c57337c2ca9d8cdf06c2ab Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Mon, 3 Feb 2025 05:44:56 -0700 Subject: [PATCH 1/9] Create 25.01.02 branch --- code/web/release_notes/25.01.02.MD | 4 ++ .../version_updates/25.01.02.php | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 code/web/release_notes/25.01.02.MD create mode 100644 code/web/sys/DBMaintenance/version_updates/25.01.02.php diff --git a/code/web/release_notes/25.01.02.MD b/code/web/release_notes/25.01.02.MD new file mode 100644 index 0000000000..ab69cbc7d2 --- /dev/null +++ b/code/web/release_notes/25.01.02.MD @@ -0,0 +1,4 @@ +## Aspen Discovery Updates + +## This release includes code contributions from + diff --git a/code/web/sys/DBMaintenance/version_updates/25.01.02.php b/code/web/sys/DBMaintenance/version_updates/25.01.02.php new file mode 100644 index 0000000000..13f94c088b --- /dev/null +++ b/code/web/sys/DBMaintenance/version_updates/25.01.02.php @@ -0,0 +1,39 @@ + [ + 'title' => '', + 'description' => '', + 'continueOnError' => false, + 'sql' => [ + '' + ] + ], //name*/ + + //mark - Grove + + //katherine + + //kirstien - Grove + + //sublocation_ptype_uniqueness + + //kodi + + //alexander - PTFS-Europe + + //chloe - PTFS-Europe + + //James Staub - Nashville Public Library + + //Lucas Montoya - Theke Solutions + + //other + + //yanjun - ByWater + + + ]; +} From a9a65570e355e74052953945b3afaf115101441c Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Tue, 4 Feb 2025 15:13:54 -0700 Subject: [PATCH 2/9] DIS-296 Correct remember this pickup location functionality when sublocations are not defined for a location --- code/web/release_notes/25.01.02.MD | 6 +++++ code/web/services/Record/AJAX.php | 39 +++++++++++++++++++----------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/code/web/release_notes/25.01.02.MD b/code/web/release_notes/25.01.02.MD index ab69cbc7d2..cc22e6ae54 100644 --- a/code/web/release_notes/25.01.02.MD +++ b/code/web/release_notes/25.01.02.MD @@ -1,4 +1,10 @@ ## Aspen Discovery Updates +### Account Updates +- Correct remember this pickup location functionality when sublocations are not defined for a location. (DIS-296) (*MDN*) ## This release includes code contributions from +### Grove For Libraries +- Mark Noble (MDN) +## Special Testing thanks to +- Joe Salamon (Cuyahoga Public Library) \ No newline at end of file diff --git a/code/web/services/Record/AJAX.php b/code/web/services/Record/AJAX.php index c33b0bcd85..01e647d32e 100644 --- a/code/web/services/Record/AJAX.php +++ b/code/web/services/Record/AJAX.php @@ -1820,27 +1820,37 @@ function setupHoldForm(string $recordSource, ?bool &$rememberHoldPickupLocation, if (!$multipleAccountPickupLocations && !$promptForHoldNotifications && $library->allowRememberPickupLocation) { //If the patron's preferred pickup location is not valid, then force them to pick a new location $preferredPickupLocationIsValid = false; + $preferredPickupLocation = null; $preferredPickupSublocationIsValid = false; foreach ($locations as $location) { if (is_object($location) && ($location->locationId == $user->pickupLocationId)) { $preferredPickupLocationIsValid = true; + $preferredPickupLocation = $location; break; } } - require_once ROOT_DIR . '/sys/LibraryLocation/Sublocation.php'; - require_once ROOT_DIR . '/sys/LibraryLocation/SublocationPatronType.php'; - $patronType = $user->getPTypeObj(); - $sublocationLookup = new Sublocation(); - $sublocationLookup->id = $user->pickupSublocationId; - $sublocationLookup->isValidHoldPickupAreaILS = 1; - $sublocationLookup->isValidHoldPickupAreaAspen = 1; - if ($sublocationLookup->find(true)) { - $sublocationPType = new SublocationPatronType(); - $sublocationPType->patronTypeId = $patronType->id; - $sublocationPType->sublocationId = $sublocationLookup->id; - if ($sublocationPType->find(true)) { - $preferredPickupSublocationIsValid = true; + $preferredPickupSublocationIsValid = true; + if ($preferredPickupLocationIsValid) { + //The preferred location is valid, check to see if sublocations are in use and if so if the preferred pickup area is valid + $preferredSublocationsAtPreferredLocation = $preferredPickupLocation->getPickupSublocations($user); + if (count($preferredSublocationsAtPreferredLocation) > 1) { + $preferredPickupSublocationIsValid = false; + require_once ROOT_DIR . '/sys/LibraryLocation/Sublocation.php'; + require_once ROOT_DIR . '/sys/LibraryLocation/SublocationPatronType.php'; + $patronType = $user->getPTypeObj(); + $sublocationLookup = new Sublocation(); + $sublocationLookup->id = $user->pickupSublocationId; + $sublocationLookup->isValidHoldPickupAreaILS = 1; + $sublocationLookup->isValidHoldPickupAreaAspen = 1; + if ($sublocationLookup->find(true)) { + $sublocationPType = new SublocationPatronType(); + $sublocationPType->patronTypeId = $patronType->id; + $sublocationPType->sublocationId = $sublocationLookup->id; + if ($sublocationPType->find(true)) { + $preferredPickupSublocationIsValid = true; + } + } } } @@ -1848,7 +1858,8 @@ function setupHoldForm(string $recordSource, ?bool &$rememberHoldPickupLocation, $rememberHoldPickupLocation = $user->rememberHoldPickupLocation; } else { $rememberHoldPickupLocation = false; - } } else { + } + } else { $rememberHoldPickupLocation = false; } $interface->assign('rememberHoldPickupLocation', $rememberHoldPickupLocation); From b13fadd90b6d29cb1aca09b1bb31cc2c6cc134f9 Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 06:02:06 -0700 Subject: [PATCH 3/9] DIS-192 Increase field lengths for a few columns --- .../web/sys/DBMaintenance/version_updates/25.02.00.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/web/sys/DBMaintenance/version_updates/25.02.00.php b/code/web/sys/DBMaintenance/version_updates/25.02.00.php index fa72826eac..6b7d83b1e5 100644 --- a/code/web/sys/DBMaintenance/version_updates/25.02.00.php +++ b/code/web/sys/DBMaintenance/version_updates/25.02.00.php @@ -266,6 +266,16 @@ function getUpdates25_02_00(): array { "ALTER TABLE system_variables ADD COLUMN enableAspenEvents TINYINT(1) DEFAULT 0" ] ], //native_events_indexing_tables + 'increase_event_field_lengths' => [ + 'title' => 'Increase field lengths for some Aspen Events tables', + 'description' => 'Increase field lengths for some Aspen Events tables', + 'sql' => [ + 'ALTER TABLE event_field CHANGE COLUMN allowableValues allowableValues TEXT', + 'ALTER TABLE event CHANGE COLUMN description description TEXT', + 'ALTER TABLE event_type CHANGE COLUMN description description TEXT', + 'ALTER TABLE event_instance CHANGE COLUMN note note TEXT', + ] + ], //increase_event_field_lengths //kirstien - Grove 'lida_general_settings_add_more_info' => [ From aadf3ccc746ca2950937cfdeb69fa84fa804acc2 Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 06:04:59 -0700 Subject: [PATCH 4/9] DIS-98 correct loading libraries for non-Koha ILSs --- code/web/release_notes/25.02.00.MD | 22 +++++++++++----------- code/web/services/Admin/Libraries.php | 12 +++++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/code/web/release_notes/25.02.00.MD b/code/web/release_notes/25.02.00.MD index 21a822fb59..51402a9430 100644 --- a/code/web/release_notes/25.02.00.MD +++ b/code/web/release_notes/25.02.00.MD @@ -149,18 +149,18 @@ ### Koha Updates - When existing volumes during indexing, only load volumes for the current indexing profile. (*MDN*) -- For libraries that use Koha as their ILS, and use the koha-plugin-newsletter-consent plugin - - Administrator with the permission to edit library settings will be able to toggle on/off the 'Enable ILS-issued consents' setting under the 'Data Protection Regulations' section. (*CZ*) - - if the Koha plugin has not been installed and enabled in Koha, then the 'Enable ILS-issued consents' setting will not appear as it requires the plugin to be installed and enabled. (*CZ*) - - if the Koha plugin is uninstalled or disabled in Koha while 'Enable ILS-issued consents' is toggled on, 'Enable ILS-issued consents' will still display. (*CZ*) +- For libraries that use Koha as their ILS, and use the koha-plugin-newsletter-consent plugin (DIS-98) + - Administrator with the permission to edit library settings will be able to toggle on/off the 'Enable ILS-issued consents' setting under the 'Data Protection Regulations' section. (DIS-98) (*CZ*) + - if the Koha plugin has not been installed and enabled in Koha, then the 'Enable ILS-issued consents' setting will not appear as it requires the plugin to be installed and enabled. (DIS-98) (*CZ*) + - if the Koha plugin is uninstalled or disabled in Koha while 'Enable ILS-issued consents' is toggled on, 'Enable ILS-issued consents' will still display. (DIS-98) (*CZ*) - If 'Enable ILS-issued consents' is enabled: - - the 'Privacy Settings' options will appear in patron side menus. (*CZ*) - - In the self-registration form, under a ‘Privacy’ section, patrons need to see information about the consent types set by their library in Koha. For example, they may be given the opportunity to receive the library’s newsletter. (*CZ*) - - Patrons will be able to choose to opt in, which implies that consent is not assumed by default. (*CZ*) - - Patrons will be able to submit their consent along with their registration form. (*CZ*) - - Patrons will be sent to Koha, where it is stored. (*CZ*) - - Patrons will be able to view and change their consent information (as retrieved from Koha) at any point through the ‘Your Account > Privacy Settings ’ section. (*CZ*) - - If ILS consent is enabled in the Aspen settings, but the Koha plugin is disabled or uninstalled, patron will see an informative message in 'Privacy Settings'. (*CZ*) + - the 'Privacy Settings' options will appear in patron's side menus. (DIS-98) (*CZ*) + - In the self-registration form, under a ‘Privacy’ section, patrons need to see information about the consent types set by their library in Koha. For example, they may be given the opportunity to receive the library’s newsletter. (DIS-98) (*CZ*) + - Patrons will be able to choose to opt in, which implies that consent is not assumed by default. (DIS-98) (*CZ*) + - Patrons will be able to submit their consent along with their registration form. (DIS-98) (*CZ*) + - Patrons will be sent to Koha, where it is stored. (DIS-98) (*CZ*) + - Patrons will be able to view and change their consent information (as retrieved from Koha) at any point through the ‘Your Account > Privacy Settings ’ section. (DIS-98) (*CZ*) + - If ILS consent is enabled in the Aspen settings, but the Koha plugin is disabled or uninstalled, patron will see an informative message in 'Privacy Settings'. (DIS-98) (*CZ*) ### Material Request Updates - Allow some patron types to submit unlimited material requests. (DIS-256) (*MDN*) diff --git a/code/web/services/Admin/Libraries.php b/code/web/services/Admin/Libraries.php index 14521b11a7..9046059ab3 100644 --- a/code/web/services/Admin/Libraries.php +++ b/code/web/services/Admin/Libraries.php @@ -80,11 +80,13 @@ function getObjectStructure($context = ''): array { $catalogDriver = CatalogFactory::getCatalogConnectionInstance(trim($accountProfile->driver), $accountProfile); $consentPluginNames = $catalogDriver->getPluginNamesByMethodName('patron_consent_type'); $anyConsentPluginsEnabled = false; - foreach($consentPluginNames as $pluginName) { - $pluginStatus = $catalogDriver->getPluginStatus($pluginName); - if ($pluginStatus['enabled']) { - $anyConsentPluginsEnabled = true; - break; + if ($consentPluginNames != false) { + foreach ($consentPluginNames as $pluginName) { + $pluginStatus = $catalogDriver->getPluginStatus($pluginName); + if ($pluginStatus['enabled']) { + $anyConsentPluginsEnabled = true; + break; + } } } From 4d84626af282ced0d45b74b6ec054d06524d900e Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 06:19:44 -0700 Subject: [PATCH 5/9] DIS-192 temporarily run full update always until processing just changes can be done --- code/events_indexer/events_indexer.jar | Bin 619521 -> 629400 bytes .../events/NativeEventsIndexer.java | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/events_indexer/events_indexer.jar b/code/events_indexer/events_indexer.jar index 966ede73f31c03e2dd7ed9fc788edc6e8d1bfb5b..6fd85f79606eca7778917c89c59cee08d5cae5cd 100644 GIT binary patch delta 16823 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 diff --git a/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEventsIndexer.java b/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEventsIndexer.java index e9a4aa717b..4ecb179b39 100644 --- a/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEventsIndexer.java +++ b/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEventsIndexer.java @@ -102,8 +102,8 @@ private void loadEvents() { void indexEvents() { - - if (runFullUpdate) { + //MDN 2/6/2025 temporarily run full update always until processing just changes can be done + if (true || runFullUpdate) { try { solrUpdateServer.deleteByQuery("type:event AND source:" + this.settingsId); } catch (BaseHttpSolrClient.RemoteSolrException rse) { From f11224485f14739371eb23d9820f552462004b4d Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 07:50:26 -0700 Subject: [PATCH 6/9] DIS-192 Catch out of bounds exception --- code/events_indexer/events_indexer.jar | Bin 629400 -> 629483 bytes .../events/NativeEvent.java | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/events_indexer/events_indexer.jar b/code/events_indexer/events_indexer.jar index 6fd85f79606eca7778917c89c59cee08d5cae5cd..0c2310f113dc1ba1b0bb0ab3895123dd1b3762db 100644 GIT binary patch delta 4282 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 QyBfTTkUrl^PlPAte_XgJ-v9sr delta 4183 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 hAs(5zOro%s<44Jc; diff --git a/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEvent.java b/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEvent.java index 1867d82176..c902355000 100644 --- a/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEvent.java +++ b/code/events_indexer/src/com/turning_leaf_technologies/events/NativeEvent.java @@ -190,7 +190,12 @@ public String getRawValue() { public String getValue() { if (allowableValues.length > 0 && StringUtils.isNumeric(value)) { - return allowableValues[Integer.parseInt(value)]; + try { + return allowableValues[Integer.parseInt(value)]; + }catch (ArrayIndexOutOfBoundsException e) { + //MDN 2/6/25 do additional handling and logging if we don't get a good value. + return "Unknown"; + } } else { return value; } From c58057a5fac21c6bbb3a6c7decb2c03123182b77 Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 08:09:35 -0700 Subject: [PATCH 7/9] DIS-192 correct case of PHP file --- code/web/services/NativeEvents/{event.php => Event.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename code/web/services/NativeEvents/{event.php => Event.php} (100%) diff --git a/code/web/services/NativeEvents/event.php b/code/web/services/NativeEvents/Event.php similarity index 100% rename from code/web/services/NativeEvents/event.php rename to code/web/services/NativeEvents/Event.php From 63769c229e051f1346b6f60259fc24cb21c524bd Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 15:02:49 -0700 Subject: [PATCH 8/9] Update 25.02.00.MD --- code/web/release_notes/25.02.00.MD | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/web/release_notes/25.02.00.MD b/code/web/release_notes/25.02.00.MD index 51402a9430..79e9a66eac 100644 --- a/code/web/release_notes/25.02.00.MD +++ b/code/web/release_notes/25.02.00.MD @@ -165,8 +165,8 @@ ### Material Request Updates - Allow some patron types to submit unlimited material requests. (DIS-256) (*MDN*) - Allow requests per calendar year to be based on a start date selected by the library rather than using January 1st always. (DIS-291) (*MDN*) -- When placing a request, check to see if the title already exists within the catalog and if so, let the patron know. This check can be disabled within library settings. (DIS-320) -- When managing requests, if "Check Requests for Existing Titles in the Catalog" is on for a library, show a new column that indicates if the request exists in the catalog, exists in another format, or does not exist. The value is checked once per day. (DIS-320) +- When placing a request, check to see if the title already exists within the catalog and if so, let the patron know. This check can be disabled within library settings. (DIS-320) (*MDN*) +- When managing requests, if "Check Requests for Existing Titles in the Catalog" is on for a library, show a new column that indicates if the request exists in the catalog, exists in another format, or does not exist. The value is checked once per day. (DIS-320) (*MDN*)
@@ -257,6 +257,8 @@ - Jordan Fields (Grove) ## This release includes sponsored developments from +- Colorado Department of Corrections +- Colorado Library Consortium (CLiC) - Greater Manchester Inter Library Consortial System (GMILCS) - Metropolitan Library System - Minuteman Library Network From 86aa789cd7006a6a4f89e6c2c964b6da223ce441 Mon Sep 17 00:00:00 2001 From: Mark Noble Date: Thu, 6 Feb 2025 16:08:44 -0700 Subject: [PATCH 9/9] DIS-270- Allow any user with the permission to modify system variables the permission to enable branded apps, not just aspen_admin. --- code/web/release_notes/25.02.00.MD | 1 + code/web/sys/SystemVariables.php | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/web/release_notes/25.02.00.MD b/code/web/release_notes/25.02.00.MD index 79e9a66eac..8bb22e23a3 100644 --- a/code/web/release_notes/25.02.00.MD +++ b/code/web/release_notes/25.02.00.MD @@ -57,6 +57,7 @@ ### Aspen LiDA Updates - When validating authentication tokens for LiDA, use the API keys within Branded App Settings if available, rather than validating against the Greenhouse. (DIS-270) (*MDN*) +- Allow any user with the permission to modify system variables the permission to enable branded apps, not just aspen_admin. (DIS-270) (*MDN*) - Added new setting to show/hide More Info button on the Grouped Work screen in Aspen LiDA. (DIS-207) (*KK*)
diff --git a/code/web/sys/SystemVariables.php b/code/web/sys/SystemVariables.php index efdb8efe19..7446c4046b 100644 --- a/code/web/sys/SystemVariables.php +++ b/code/web/sys/SystemVariables.php @@ -380,7 +380,6 @@ static function getObjectStructure($context = ''): array { $objectStructure['indexingSection']['properties']['storeRecordDetailsInDatabase']['type'] = 'hidden'; $objectStructure['indexingSection']['properties']['indexVersion']['type'] = 'hidden'; $objectStructure['indexingSection']['properties']['searchVersion']['type'] = 'hidden'; - $objectStructure['enableBrandedApp']['type'] = 'hidden'; $objectStructure['enableAspenEvents']['type'] = 'hidden'; }