About Features Downloads Getting Started Documentation Events Support GitHub

Love VuFind®? Consider becoming a financial supporter. Your support helps build a better VuFind®!

Site Tools


Warning: This page has not been updated in over over a year and may be outdated or deprecated.
changelog

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
changelog [2022/07/21 11:47] – [Release 9.0 - currently in development] demiankatzchangelog [2024/03/21 14:57] (current) – [Release 10.0 - currently in development] demiankatz
Line 3: Line 3:
 // When adding a new release, see the [[changelog:release_checklist|release checklist]]. // // When adding a new release, see the [[changelog:release_checklist|release checklist]]. //
  
-===== Release 9.0 - currently in development ======+===== Release 10.0 - currently in development =====
  
 New features: New features:
  
-  * Support has been added for [[configuration:blender|Blended Search]], which can combine results from multiple search backends into a single list.+  * Rendering of search results has been improved to take advantage of Javascript where available for a more responsive and accessible user experience. This functionality is on by default but can be disabled if unwanted; see [[https://github.com/vufind-org/vufind/pull/2929|pull request #2929]]. 
 +  * [[configuration:authentication#persistent_login|Persistent logins]] ("remember me" functionality) can now be optionally enabled. 
 +  * An optional "explain" feature can now be enabled in Solr-based search backends to visually explain relevance ranking of individual search results; see [[https://github.com/vufind-org/vufind/pull/3069|pull request #3069]] for details. 
 +  * On-screen virtual keyboards can now be enabled through searchbox.ini if needed; see [[https://github.com/vufind-org/vufind/pull/2952|pull request #2952]] for more details. 
 +  * The user interface for browsing full facet lists now includes a "filter" text input when the underlying index supports filtering functionality. In this release, only Solr facets with translation disabled are supported. See [[https://github.com/vufind-org/vufind/pull/2991|pull request #2991]] for more details. 
 +  * Favorite lists now support multi-page selection (i.e. checkbox states persist across multiple pages of results) for bulk actions; this new option is enabled by default but can be disabled. See [[https://github.com/vufind-org/vufind/pull/3142|pull request #3142]] for details. 
 +  * Translation strings can now optionally use the ICU MessageFormatter syntax to allow more sophisticated conditional translation (e.g. to handle plural forms); see [[https://github.com/vufind-org/vufind/pull/3286|pull request #3286]] for details. 
 +  * The content, order and behavior of the user account menu can now be customized using the new AccountMenu.yaml configuration file. See [[https://github.com/vufind-org/vufind/pull/3415|pull request #3415]] for details. 
 +  * The new Databases recommendation module can be used to display links to external databases based on facet values found in search results. It is primarily designed for use with EDS and LibGuides, but it is adaptable to other scenarios. See [[https://github.com/vufind-org/vufind/pull/3160|pull request #3160]] for details. 
 +  * The new ConsortialVuFind recommendation module can be enabled to search a third-party VuFind® instance using the public API in order to display additional results. See [[https://github.com/vufind-org/vufind/pull/3270|pull request #3270]] for details. 
 +  * Pagination controls can now optionally be added at the top of search result screens via the new top_paginator setting. See [[https://github.com/vufind-org/vufind/pull/3034|pull request #3034]] for details. 
 +  * Bound-with records can now be displayed in holdings using data retrieved from the ILS (where supported -- currently only in FOLIO). 
 +  * The new [HiddenSorting] section of backend-specific configuration files (searches.ini, etc.) makes it possible to enable sort options without adding them to the user-facing sort control, for use cases where sort options are valuable in direct links but not through the user interface. See [[https://github.com/vufind-org/vufind/pull/3237|pull request #3237]] for details. 
 +  * The new [[configuration:ils:composed_driver|Composed ILS driver]] can be used to pull together functionality from multiple drivers to represent a single system. See [[https://github.com/vufind-org/vufind/pull/3112|pull request #3112]] for details. 
 +  * The "new items" search can now use a different default sort than other search types, and it can be configured to display facet values for pre-filtering. See [[https://github.com/vufind-org/vufind/pull/3269|pull request #3269]] for details. 
 +  * When using EZProxy, you can now control which URLs get prefixed and which do not via a web service like [[https://github.com/lehigh-university-libraries/ezproxy-url-checker|ezproxy-url-checker]]; see [[https://github.com/vufind-org/vufind/pull/3199|pull request #3199]] for details. 
 +  * The [[development:architecture:record_data_formatter|RecordDataFormatter]] now supports a dataMethodParams configuration option which can be used to pass arguments to the dataMethod. See [[https://github.com/vufind-org/vufind/pull/3189|pull request #3189]]. 
 +  * The [[development:architecture:record_data_formatter|RecordDataFormatter]] can now be configured via RecordDataFormatter.ini, allowing customization of record views without code changes. See [[https://github.com/vufind-org/vufind/pull/3193|pull request #3193]]. 
 +  * The Primo module now supports display of citation/cited-by lists for eligible records. 
 +  * Deep searching within nested collections can now be enabled with some extra indexing and the new search_container_id_field  setting. See the [[indexing:hierarchies_and_collections|Hierarchies and Collections]] page and [[https://github.com/vufind-org/vufind/pull/3182|pull request #3182]] for more details. 
 +  * It is now possible to create an aliases.ini file within a language directory to set up translation aliases; see [[https://github.com/vufind-org/vufind/pull/3249|pull request #3249]] for details. 
 +  * Language names are now internationalized by default (in facets and record displays); see [[https://github.com/vufind-org/vufind/pull/3200|pull request #3200]] for details. 
 +  * Māori language support has been added to the user interface. 
 + 
 +Possible backward compatibility breaks:  
 + 
 +  * :!: The minimum PHP version requirement has been raised to 8.1, as earlier versions are no longer supported by the PHP community. Please make sure your server is running a supported version before upgrading. 
 +  * :!: A full reindex of the Solr index is required due to the upgrade to Solr 9.5.0; it will also allow you to take advantage of changes to the schema. See the [[development:architecture:solr_index_schema#vufind_100|index schema changelog]] for details. 
 +  * :!: Be sure to run a database upgrade to reflect table changes (see also the [[development:architecture:database_schema#release_100|database changelog]]). 
 +  * :!: The default theme has been changed from bootprint3 to sandal; the bootprint3 theme will eventually be retired, so if you are using it as the foundation for your local theme, you should consider revisions. 
 +  * :!: The new load_results_with_js setting is on by default for all search backends to improve the user search experience. This causes some changes to the user interface, most significantly changing the summary at the top of the search results to include navigation buttons and more concise text. If necessary, this behavior can be changed via settings added to searches.ini and other backend-specific configuration files in [[https://github.com/vufind-org/vufind/pull/2929|pull request #2929]]. 
 +  * :!: The isLoggedIn() method of \VuFind\Auth\Manager and \VuFind\View\Helper\Root\Auth has been deprecated, since returning an object from a method with a Boolean name was potentially confusing. You should use getIdentity() or getUserObject() instead. Use getIdentity() if you only need a basic login status from the RBAC system; use getUserObject if you need to interact with VuFind®-specific user properties. 
 +  * :!: The \VuFind\Db\Entity\UserEntityInterface has been introduced as an abstraction to reduce dependence on any specific database framework. Several constructors and methods with \VuFind\Db\Row\User typehints have been updated to use the new interface instead. See [[https://github.com/vufind-org/vufind/pull/3478|pull request #3478]] and [[https://github.com/vufind-org/vufind/pull/3500|pull request #3500]] for details. 
 +  * :!: Code related to encryption of passwords has been refactored to the \VuFind\Auth\ILSAuthenticator. The getCatPassword() and encryptOrDecrypt() methods of \VuFind\Db\Row\User have been deprecated. Several constructor signatures have changed (\VuFind\Auth\CAS, \VuFind\Auth\ILSAuthenticator, \VuFind\Auth\LDAP, \VuFind\Auth\Shibboleth, \VuFind\Auth\SimulatedSSO, \VuFind\OAuth2\Entity\UserEntity and \VuFind\OAuth2\Repository\IdentityRepository). See [[https://github.com/vufind-org/vufind/pull/3537|pull request #3537]] for details. 
 +  * :!: The \VuFind\Search\QueryAdapter and related query minification/deminification logic has been significantly refactored to eliminate static methods and improve customizeability. This impacts \VuFind\Search\Base\Params, VuFind\Search\Base\Results and their subclasses and \VuFind\Search\Minified as well as the aforementioned QueryAdapter. Since this code was previously difficult to customize, this probably has limited impact on custom code, but if you have customized logic in these areas, see [[https://github.com/vufind-org/vufind/pull/3358|pull request #3358]] for details. 
 +  * :!: Javascript code driving the autocomplete feature has been refactored and moved from common.js to searchbox_controls.js. If you have customized this code, adjustments will be needed. See [[https://github.com/vufind-org/vufind/pull/3064|pull request #3064]] for details. 
 +  * :!: The past_days translation string has been revised to use ICU MessageFormatter syntax, and the Yesterday translation has been removed as redundant; if you use or have overridden these translation strings, you will need to make local adjustments. See [[https://github.com/vufind-org/vufind/pull/3286|pull request #3286]] for details. 
 +  * :!: Some redundant bulk-action-related language strings have been simplified and replaced with aliases (mostly those starting with "bookbag_"); other such strings have been renamed (from a "_selected" suffix to a "bulk_" prefix). If you have customized these strings, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3239|pull request #3239]] for details. 
 +  * :!: Language strings related to saved items have been renamed and consolidated; the old strings "Favorites", "My Favorites" and "Your Favorites" have been removed in favor of "default_list_title" and "saved_items". If you customized any of those old strings, you should move your customizations to the new keys. See [[https://github.com/vufind-org/vufind/pull/3489|pull request #3489]] for details. 
 +  * :!: The getResultTotal() method of Results objects can now return a -1 value, indicating that a result total cannot be determined (for example, when processing combined search results). If you have custom code using this value, you may need to add handling for this special case. 
 +  * :!: The SearchTabs view helper has been significantly simplified and refactored; local customizations may need to be adjusted to match. See [[https://github.com/vufind-org/vufind/pull/3309|pull request #3309]] for details. 
 +  * :!: Primo Central users are strongly encouraged to switch the api setting in Primo.ini from "legacy" to "rest" to take advantage of newer and more reliable APIs. The legacy connectors will be removed in the next release. See [[https://github.com/vufind-org/vufind/pull/3255|pull request #3255]] for details. 
 +  * :!: The language translation map used for indexing MARC records has been updated to use labels from the latest MARC standards. You should reindex all of your MARC records to ensure index consistency (and up-to-date language names). See [[https://github.com/vufind-org/vufind/pull/2933|pull request #2933]] for details. 
 +  * :!: Refactoring of the post-login redirect system has led to the replacement of the \VuFind\Controller\AbstractBase::getFollowupUrl() method with \VuFind\Controller\AbstractBase::getAndClearFollowupUrl(). If you have code that relies on the old method, please review [[https://github.com/vufind-org/vufind/pull/2941|pull request #2941]] and adjust it accordingly. 
 +  * :!: \VuFind\Auth\Manager has had some minor backward-breaking changes that may require updates to local subclasses or custom code. 
 +    * The constructor signature has changed to accommodate the new LoginTokenManager used by [[configuration:authentication#persistent_login|persistent logins]]. 
 +    * The protected updateUser() method now has a required second argument; see [[https://github.com/vufind-org/vufind/pull/3432|pull request #3432]]. 
 +  * :!: The constructor signatures of the CartController and MyResearchController have been adjusted to reduce direct dependency on the ServiceLocator. Custom subclasses may require adjustments. See [[https://github.com/vufind-org/vufind/pull/3239|pull request #3239]] for details. 
 +  * :!: Some code has been reorganized to prepare for future database library upgrades. 
 +    * \VuFind\RecordDriver\AbstractBase::addTags() has been deprecated in favor of \VuFind\Db\Service\TagService::addTagsToRecord() 
 +    * \VuFind\RecordDriver\AbstractBase::deleteTags() has been deprecated in favor of \VuFind\Db\Service\TagService::deleteTagsFromRecord() 
 +  * :!: The [[configuration:record_versions|record versions]] functionality has been simplified for consistency and maintainability. If you have customized any functionality related to versions, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3295|pull request #3295]] and [[https://github.com/vufind-org/vufind/pull/3300|#3300]] for full details; significant highlights: 
 +    * The \VuFind\Record\VersionsHelper and \VuFindSearch\Command\WorkExpressionsCommand classes are no longer needed and have been removed. 
 +    * The \VuFindSearch\Feature\WorkExpressionsInterface and its implementation in \VuFindSearch\Backend\Solr\Backend are no longer needed and have been removed. 
 +    * Some methods/method signatures have changed in \VuFindSearch\Query\WorkKeysQuery. 
 +    * Links to versions of records that are not found in the Solr index (i.e. legacy links to deleted records) will no longer work. 
 +  * :!: The ProxyManager library is no longer being maintained, so code relying upon it has been refactored. This has resulted in changes to the constructor signatures of \VuFind\Auth\ILSAuthenticator and \VuFind\Auth\Manager and to the behavior of \VuFind\Auth\ILSAuthenticatorFactory, \VuFind\Log\LoggerFactory and \VuFind\Session\SecureDelegatorFactory. See [[https://github.com/vufind-org/vufind/pull/3343|pull request #3343]] and [[https://github.com/vufind-org/vufind/pull/3390|pull request #3390]] for details. 
 +  * :!: A new SearchSettings view helper has been introduced to simplify template logic related to the display of checkboxes for the cart and bulk actions. See [[https://github.com/vufind-org/vufind/pull/3292|pull request #3292]] for details. 
 +  * :!: Some logic has been refactored from \VuFind\Controller\CombinedController into \VuFind\Search\Combined\Options to improve encapsulation. As a result, the constructor signature of the Options class has changed. See [[https://github.com/vufind-org/vufind/pull/3292|pull request #3292]] for details. 
 +  * :!: The signature of \VuFind\Search\SolrCollection\Params::initFromRecordDriver() has changed; if you have customized this in a subclass, you will need to adjust your method to match. See [[https://github.com/vufind-org/vufind/pull/3182|pull request #3182]] for more details. 
 +  * :!: The  \VuFindSearch\Backend\EDS\SearchRequestModel::endsWith() method has been removed, as it can now be replaced by the native PHP str_ends_with() function. Please switch to str_ends_with() if you were using this method in custom code. 
 +  * :!: Code related to displaying hierarchies of collections has been significantly revised and simplified. If you have custom tree-related code, it will likely need revision. See [[https://github.com/vufind-org/vufind/pull/3277|pull request #3277]] for full details. Highlights: 
 +    * jsTree is no longer used to render hierarchies and has been removed from the codebase. 
 +    * The JSTree TreeRenderer class has been replaced by a new HTMLTree class. 
 +    * XML hierarchy file support has been removed; all tree data is now stored and processed using JSON. 
 +    * Tree-related styles have been completely rewritten. 
 +  * :!: Code related to displaying hierarchical facets has been significantly simplified to eliminate the use of jsTree; if you have customized this code, local changes may be needed. See [[https://github.com/vufind-org/vufind/pull/3046|pull request #3046]]. Updates include constructor signature changes to \VuFind\AjaxHandler\GetSideFacets and \VuFind\Recommend\FavoriteFacets. 
 +  * :!: The constructor signature for \VuFind\View\Helper\Root\ProxyUrl has changed; local custom subclasses may require adjustments. See [[https://github.com/vufind-org/vufind/pull/3199|pull request #3199]] for details. 
 +  * :!: Error handling has been simplified in \VuFind\Controller\AjaxController to reduce the likelihood of errors getting missed; AJAX calls are now more likely to fail in development mode when PHP warnings or notices occur during processing, but this should help catch problems earlier instead of concealing them. See [[https://github.com/vufind-org/vufind/pull/3267|pull request #3267]] for details. 
 +  * :!: The \VuFind\Search\Base\Options::supportsFirstLastNavigation() method has been deprecated in favor of the more clearly-named recordFirstLastNavigationEnabled() method. The supporting protected $firstlastNavigation property has been removed. Custom code leveraging this code will need to be adjusted; see [[https://github.com/vufind-org/vufind/pull/3404|pull request #3404]] for details. 
 +  * :!: The signature and input of \VuFind\ILS\Driver\Folio::formatHoldingItem have changed slightly; see [[https://github.com/vufind-org/vufind/pull/3094|pull request #3094]] and make adjustments if you locally extend or utilize this method. 
 +  * :!: The \VuFind\Bootstrapper::initLocaleAndTimeZone() method has been renamed to initTimeZone(), since local initialization is no longer necessary. See [[https://github.com/vufind-org/vufind/pull/3526|pull request #3526]] for details. 
 +  * :!: Some constructor typehints have been broadened from \Laminas\Cache\Storage\Adapter\AbstractAdapter to \Laminas\Cache\Storage\StorageInterface. This change impacts \VuFind\Recommend\LibGuidesProfile, \View\Helper\Root\ProxyUrl and \VuFindSearch\Backend\EDS. See [[https://github.com/vufind-org/vufind/pull/3369|pull request #3369]]. 
 +  * :!: The CspNonce view helper has been deprecated in favor of the getNonce method in the Csp view helper, and it will be removed in release 11. The Csp view helper's constructor signature has changed to support this merger. In the unlikely event that you use or modify this helper in custom code, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3392|pull request #3392]]. 
 +  * :!: The [[https://github.com/vufind-org/vufind-browse-handler|alphabetical browse handler]] has been significantly updated; if you use a custom build of the handler or if you have modified the index-alphabetic-browse scripts, adjustments may be needed 
 +    * The project layout, code and build process have been modernized to use more up-to-date Java conventions, and Leech classes have been renamed to use more standardized terminology. See [[https://github.com/vufind-org/vufind-browse-handler/pull/48|pull request vufind-browse-handler#48]] for details. 
 +    * The index-alphabetic-browse scripts have been updated to use renamed options and classes (see [[https://github.com/vufind-org/vufind/pull/3253|pull request #3253]] for details). 
 +    * Some deprecated methods (org.vufind.solr.handler.BibDB::matchingIDs, org.vufind.solr.handler::getIds and org.vufind.solr.handler::setIds) have been removed; see [[https://github.com/vufind-org/vufind-browse-handler/pull/49|pull request vufind-browse-handler#49]]. 
 +  * :!: The signatures of the \VuFind\Controller\ContentController::getViewFor*() methods have been changed to improve flexibility; in the unlikely event that you have changed/extended these, see [[https://github.com/vufind-org/vufind/pull/3452|pull request #3452]] for necessary adjustments. 
 +  * :!: Javascript code no longer uses DOM CustomEvents, and event names have been revised. See [[https://github.com/vufind-org/vufind/pull/3361|pull request #3361]] if you have custom code that interacts with internal events; it will need to be revised based on these changes. 
 +  * :!: The .offcanvas CSS class in the bootstrap3 theme has been renamed to .vufind-offcanvas to prevent conflicts with an .offcanvas class introduced in newer versions of Bootstrap. If you rely on or customize this class in custom code, please adjust accordingly. See [[https://github.com/vufind-org/vufind/pull/3484|pull request #3484]] for details. 
 +  * :!: Code deprecated in release 9.x has now been removed: 
 +    * \VuFind\Auth\AbstractBase::getCannedPasswordPolicyHint() - use getCannedPolicyHint() instead. 
 +    * \VuFind\Recommend\SearchObject - use AbstractSearchObject instead. 
 +    * \VuFindSearch\Backend\EDS\Backend::debugPrint() and \VuFindSearch\Backend\EDS\Base::debugPrint() - use debug() instead. 
 +  * The protected \VuFindTheme\ThemeInfo::mergeWithoutOverride() method has been renamed, refactored and moved into \VuFind\Feature\MergeRecursiveTrait::mergeRecursive() for easier reuse. In the unlikely event that you have custom code relying on this method, minor adjustments will be needed; see [[https://github.com/vufind-org/vufind/pull/3417|pull request #3417]] for details. 
 +  * The \VuFind\View\Helper\Root\RecordDataFormatter\SpecBuilder::setDefaultPrioritizeAlt() method was removed as it is superseded by RecordDataFormatter.ini functionality; this method was introduced in release 9.1 and never used in core code, so the removal is unlikely to affect anyone. 
 +  * Historically, the event system has used a mix of "VuFindSearch" and "VuFind\Search" to namespace search-related events. While these old names will still be supported for backward compatibility, it is now recommended that you use \VuFindSearch\Service::class (the class name of the search service) as the event namespace for consistency. See [[https://github.com/vufind-org/vufind/pull/3497|pull request #3497]] for details. 
 +  * Javascript initialization has been revised and refactored for reduced redundancy and greater flexibility. Significant changes that could impact backward compatibility include refactoring additional logic from search/results.phtml into search/results-scripts.phtml and moving the initResultScripts Javascript function from combined-search.js into common.js. See [[https://github.com/vufind-org/vufind/pull/2878|pull request #2878]] for details. 
 +  * The "Favorites" controller plug-in now depends on \VuFind\Favorites\FavoritesService, and \VuFind\Favorites\FavoritesService::getListObject is now public, to reduce redundancy. See [[https://github.com/vufind-org/vufind/pull/2887|pull request #2887]] for details. 
 +  * The \VuFind\View\Helper\Root\RecordDataFormatter class now accepts a configuration object through its constructor; in the unlikely event that you have a custom subclass with a constructor, it will need to be adjusted to match. 
 +  * The "tag" help screen was removed, because it was no longer linked anywhere, and the content was out of date. See [[https://github.com/vufind-org/vufind/pull/3174|pull request #3174]]. 
 + 
 +===== Release 9.1.2 - currently in development ===== 
 + 
 +  * Minor bug fix release. 
 +  * :!: A bug fix to the conditional filter listener required a change to the constructor signature of \VuFind\Search\Solr\InjectConditionalFilterListener (and associated factory code). See [[https://github.com/vufind-org/vufind/pull/3513|pull request #3513]] for details. 
 +  * :!: Fixes to date range handling required signature changes to several methods in \VuFind\Search\Base\Params: formatDateForFullDateRange(), formatValueForNumericRange() and formatYearForDateRange(). In the unlikely event that you have extended these methods, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3465|pull request #3465]] for details. 
 +  * :!: Fixes to the switch_db_hash command line utility required a change to the constructor signature of \VuFindConsole\Command\Util\SwitchDbHashCommand. In the extremely unlikely situation that you have overridden this constructor, adjustments will be needed. See [[https://github.com/vufind-org/vufind/pull/3476|pull request #3476]] for details. 
 + 
 +===== Release 9.1.1 - 2/12/2024 ===== 
 + 
 +  * Minor bug fix / translation improvement release. 
 +  * Adds support for FOLIO's new RTR authentication mechanism (disabled by default until the feature is more widely available; see the legacy_authentication setting in Folio.ini) 
 +  * Includes the addition of Mongolian as a new interface language. 
 +  * :!: All translations of the tree_search_limit_reached_html string have been adjusted to remove the outgoing link. This rarely-seen link was invalid and has not worked correctly at any point in the project's history, so removing it seemed like the most appropriate solution. See [[https://github.com/vufind-org/vufind/pull/3274|pull request #3274]] for details. 
 +  * :!: Some method signatures changed as part of a bug fix to the LocalFile cover handler. In the very unlikely situation that you have customized this code, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3337|pull request #3337]]. 
 +  * :!: If you utilize the cover image proxy (most likely only true for Summon users), make sure that the coverproxyAllowedHosts setting in config.ini is set correctly. See [[https://github.com/vufind-org/vufind/pull/3385|pull request #3385]] for details. 
 + 
 +===== Release 9.1 - 10/30/2023 ===== 
 + 
 +New features: 
 + 
 +  * The EBSCO Publication Finder is now supported as a search backend (requires a valid EBSCO subscription). 
 +  * [[configuration:blender|Blended Search]] now supports advanced search. 
 +  * Added support for the [[development:plugins:ils_drivers#geturlsforrecord|getUrlsForRecord]] ILS driver method (currently implemented for KohaRest and the Demo driver). 
 +  * Users can now view all of their proxy relationships through the Profile page (if supported by the ILS driver). See [[https://github.com/vufind-org/vufind/pull/3006|pull request #3006]]. 
 +  * Added support for the [[development:plugins:ils_drivers#purgetransactionhistory|purgeTransactionHistory]] ILS driver method (currently implemented for KohaRest, SierraRest and the Demo driver). 
 +  * ILS drivers can now report an "uncertain" status in addition to the traditional true/false availability status values. This new feature is currently supported by the Alma and Demo drivers. See the locationTypeItemStatus setting in Alma.ini for related configuration. 
 +  * The import-marc.sh ingest script can now accept multiple MARC files in a single call to reduce overhead of starting up SolrMarc. In Linux, the harvest/batch-import-marc.sh script now takes advantage of this by default, adding a -x switch to set the number of files to index per call to SolrMarc. See [[https://github.com/vufind-org/vufind/pull/2995|pull request #2995]] for details. 
 +  * The util/deletes command line script now supports an --id-prefix option to prefix the IDs of records being deleted. 
 +  * Combined search has been enhanced with some new configuration settings to allow the optional inclusion of advanced search links in combined search results (see [[https://github.com/vufind-org/vufind/pull/3099|pull request #3099]]), to better retain the order of sections on small screens (see [[https://github.com/vufind-org/vufind/pull/3077|pull request #3077]]), to display side recommendations (see [[https://github.com/vufind-org/vufind/pull/3135|pull request #3135]]) and to display a "jump menu" at the top of the page (see [[https://github.com/vufind-org/vufind/pull/3083|pull request #3083]]). 
 +  * A new LibGuidesAZ search backend has been added to search Database A-Z lists stored in LibGuides; this serves as a complement to the existing LibGuides search backend, which allows search of regular guides in LibGuides. See [[https://github.com/vufind-org/vufind/pull/2860|pull request #2860]] for details. 
 +  * It is now possible to configure custom Solr highlighting parameters. See [[https://github.com/vufind-org/vufind/pull/2927|pull request #2927]] for details. 
 +  * Custom scripts can now be set up to run via the Maintenance page of the Admin module (optional, disabled by default, and permission-controlled). See [[https://github.com/vufind-org/vufind/pull/2866|pull request #2866]] for details. 
 +  * When records are displayed based on using the record cache in "fallback" mode, a warning message is now displayed. See [[https://github.com/vufind-org/vufind/pull/2886|pull request #2886]] for details. 
 +  * Turning on debug mode in config.ini now displays ALL messages, not just debug-level messages, to assist with troubleshooting of errors. 
 +  * File-based caching can now be disabled by default if desired (see the disabled setting in the [Cache] section of config.ini). Additionally, context-specific caching override settings have been introduced for some services (see [[https://github.com/vufind-org/vufind/pull/2659|pull request #2659]] for details). 
 +  * It is now possible to add a DirLocations.ini file to the root of a [[configuration:local_settings_directory|local settings directory]] in order to customize some of its behavior (adjusting path to configuration files, inheriting from parent directories). See [[https://github.com/vufind-org/vufind/pull/2947|pull request #2947]] for details. 
 +  * When [[configuration:combining_search_types#tabbed_search_boxes|search tabs]] are enabled and hidden filters do not match any tab configurations, a "Custom Search" tab will be displayed. This behavior can be disabled by customizing the temporary_search_tab_title translation string to be empty. See [[https://github.com/vufind-org/vufind/pull/2908|pull request #2908]]. 
 +  * A special "debug" language code is now supported to reveal raw language strings in the user interface for troubleshooting and development purposes. See [[development:architecture:localization#troubleshooting_language_strings|Troubleshooting Language Strings]] and [[https://github.com/vufind-org/vufind/pull/3015|pull request #3015]] for more details. 
 +  * It is now optionally possible to include usernames in system-generated logs for diagnostic purposes (off by default -- see [[https://github.com/vufind-org/vufind/pull/3156|pull request #3156]]). 
 +  * Sierra users can now configure mappings for patron block codes in SierraRest.ini (see [[https://github.com/vufind-org/vufind/pull/2856|pull request #2856]]). 
 +  * FOLIO users should be aware that the holding_id field in ILS driver responses has been renamed to holdings_id; the original name was a typographical error. Since this data field was not used for anything internally by the driver, the change should not impact users unless they have customized something. Local Folio.ini files should be updated to correct the field name in the HMACKeys setting. See [[https://github.com/vufind-org/vufind/pull/3101|pull request #3101]] for details. A similar fix for Alma has been applied in [[https://github.com/vufind-org/vufind/pull/3102|pull request #3102]], but this is more careful to retain backward-compatibility since the holding_id value is more likely to be used in production under Alma than FOLIO. 
 +  * When indexing course reserves, the FOLIO driver will now exclude suppressed records by default (but this behavior can be changed via Folio.ini). See [[https://github.com/vufind-org/vufind/pull/2935|pull request #2935]] for details. 
 +  * The new fallback_languages setting can be used to prioritize where translations are found when they are missing from the currently selected language. See [[https://github.com/vufind-org/vufind/pull/2891|pull request #2891]] for details. 
 +  * Theme configuration now optionally supports multiple favicons (to allow for more than one size); see [[https://github.com/vufind-org/vufind/pull/2862|pull request #2862]]. 
 +  * The installation process now supports selection of a custom Solr port (see [[https://github.com/vufind-org/vufind/pull/2962|pull request #2962]]). 
 +  * Syndetics cover images can now be configured so that the Syndetics-generated placeholder images are only shown when the user "opts in" with the use_syndetics_cover_image_fallback cover setting. This way, if Syndetics has no available image, other configured cover providers will be used. 
 +  * The new "LibGuidesProfile" recommendation module can display librarian information from LibGuides; see [[https://github.com/vufind-org/vufind/pull/2977|pull request #2977]]. 
 +  * Updated SolrMarc indexer (version 3.5). 
 +  * New interface translation: Northern Sámi. 
 + 
 +Possible backward compatibility breaks: 
 + 
 +  * :!: Solr has been upgraded to release 9.3.0. A full reindex will be necessary. 
 +  * :!: The upgraded version of SolrMarc now interprets translation maps as UTF-8 instead of Latin-1/ISO-8859-1. This new behavior is more consistent with the rest of the project, but it means that if you have local translation maps containing non-ASCII characters, they will need to have their formats converted -- e.g. with ''iconv -f LATIN1 -t UTF-8 my-map.properties > my-map.properties''
 +  * :!: In order to reconcile inconsistent alphabetical title browse and title sort functionality, some changes had to be made to the way the title_sort field is populated by the XML indexer. If you use alphabetical browse or title sorting and index XML records, you may need to adjust any local custom XSLT sheets. See [[https://github.com/vufind-org/vufind/pull/3024|pull request #3024]] for details. 
 +  * :!: The URL used for establishing an EBSCO Discovery Service session is now a configurable setting in EDS.ini. If you are using a non-standard api_url setting in EDS.ini, you may need to adjust the new session_url setting to match it. 
 +  * :!: As part of the update to add advanced search, the [[configuration:blender|Blended Search]] logic has been moved to its own controller and the old Search/Blended route has been deprecated (though it still works). If you have customized anything related to the old route or SearchController::blendedAction, it will need to be updated. See [[https://github.com/vufind-org/vufind/pull/3068|pull request #3068]] for details. 
 +  * :!: Hierarchical facet displays have been significantly revised to address accessibility problems with jsTree; if you have customized styles or implementation related to hierarchical facets, adjustments will likely be needed. See [[https://github.com/vufind-org/vufind/pull/3047|pull request #3047]] for details. 
 +  * :!: Escaping of dynamic values in the icon helper was previously done inconsistently and could cause problems in some rare edge cases. This has been fixed by [[https://github.com/vufind-org/vufind/pull/3084|pull request #3084]], which makes some significant changes to all icon-helper-related templates. In the relatively unlikely situation that you have customized these templates or extended the icon helper itself, you should review these changes and make local adjustments to match. 
 +  * Some language file parsing/normalization logic and translation strings have been adjusted for compatibility with the Lokalise service. If you have custom language files, you may wish to run the [[administration:command_line_utilities#language_category|command line normalization tool]] on them and check whether you have overridden any impacted keys. More details: 
 +    * Purely numeric language file keys are now enclosed in single quotes; see [[https://github.com/vufind-org/vufind/pull/3044|pull request #3044]]. 
 +    * The "Export to" translation string has been replaced by "export_to", which includes a %%target%% token. The previous version of the translation string relied on whitespace in the translation file and concatenation in templates, which made proper translation more difficult. 
 +  * The "with_selected" translation string has been removed, as its use in checkbox/button interfaces was inconsistently applied and confusing. If you have a local template that uses this string, you should adjust your template or reintroduce it as a local custom string. See [[https://github.com/vufind-org/vufind/pull/2978|pull request #2978]]. 
 +  * The system for retrieving alternate record versions from Solr has been revised to fix a bug related to large numbers of keys and to improve performance; see [[https://github.com/vufind-org/vufind/pull/3087|pull request #3087]] for details. 
 +  * The signature of \VuFind\Auth\EmailAuthenticator::sendAuthenticationLink has been changed as part of a bug fix. In the unlikely event that you have customized this method or use it in custom code, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/3030|pull request #3030]]. 
 +  * Some functionality of the laminas-mail library has been locally overridden to compensate for an upstream bug that will not be fixed by the package maintainers. If you encounter problems sending email, please review [[https://github.com/vufind-org/vufind/pull/3060|pull request #3060]] in case it is related. 
 +  * The hash_passwords setting in config.ini is now set to "true" by default. The normal installation process has always changed this setting from "false" to "true" as part of the "security fix" step, but it originally defaulted to false for backward compatibility with release 1.x. Since direct migration from version 1.x to 9.x is extremely unlikely, the default has been changed to reduce the chances of accidental misconfiguration. If for some reason you have this set to false in your configuration, please use the web-based install tool's security fix option to correct it and hash existing passwords. The normal web-based upgrade process will automatically prompt you to take this action if necessary. 
 +  * A few minor changes have been introduced to the EBSCO Discovery Service backend, which will only impact users who have customized low-level code in that service: 
 +    * \VuFind\Search\EDS\Params::createBackendFilterParameters has been refactored to \VuFind\Search\EDS\AbstractParams and has had its second parameter ($options) removed, as it was not used for anything. 
 +    * The edsApiHost property in \VuFindSearch\Backend\EDS\Base has been renamed to apiHost. 
 +    * The facet_limit setting in EDS.ini has been removed, as it never had any effect due to limitations in the EDS API. 
 +    * debugPrint methods have been deprecated, and the debug method should be used instead for logging debug messages (debugPrint is retained for backward compatibility now but will be removed in release 10.0) 
 +  * The Google, Orb and Syndetics cover image handlers have been refactored to add caching support, with some impact to their factories and internal methods. In the unlikely situation that you have extended these services, see [[https://github.com/vufind-org/vufind/pull/2659|pull request #2659]] and [[https://github.com/vufind-org/vufind/pull/3154|pull request #3154]] for details and adjust your local code to match. 
 +  * Cart popover displays have been adjusted for validity/accessibility, with minor impact on associated Javascript and styles; see [[https://github.com/vufind-org/vufind/pull/2838|pull request #2838]]. 
 +  * Custom styles associated with the optional cookie consent feature have been significantly refactored; see [[https://github.com/vufind-org/vufind/pull/2909|pull request #2909]]. 
 +  * The GetItemStatuses AjaxHandler has been significantly revised to support a broader range of statuses. See [[https://github.com/vufind-org/vufind/pull/2857|pull request #2857]] for details. 
 +  * Historic transaction functionality has been refactored to a separate CheckoutsController, and some associated templates and routes have been renamed. Old routes and URLs will redirect to the new ones for backward compatibility, but if you have modified the MyResearchController::historicloansAction() or the myresearch/historicloans.phtml template, you will need to move your changes. See [[https://github.com/vufind-org/vufind/pull/2779|pull request #2779]]. 
 +  * OCLC has shut down the WorldCatIdentities API without providing a replacement, so the WorldCatIdentities recommendation module has been removed from the code along with the supporting \VuFind\Connection\WorldCatUtils class and the \VuFind\Autocomplete\OCLCIdentities handler. Existing configuration referring to WorldCatIdentities or OCLCIdentities should be removed for the sake of efficiency, but it should not break anything, due to aliasing to the "deprecated" recommendation module and the "none" autocomplete handler. Additionally, any custom code that refers to the WorldCatUtils class will need to be removed, as the functionality of this class is no longer supported by OCLC. 
 +  * The Alma driver's constructor signature and factory configuration have changed, and its internal availability status logic has been significantly revised. See [[https://github.com/vufind-org/vufind/pull/2857|pull request #2857]] for details. 
 +  * Improvements to the SierraRest driver have introduced some changes that could impact local custom subclasses: the HOLDINGS_LINE_NUMBER constant has been replaced with HOLDINGS_LOCATION_FIELD; the signatures of the getBibRecord and getItemStatusesForBib methods have changed; and the itemHoldAllowed method has been merged into the isHoldable method (whose signature has also changed). See [[https://github.com/vufind-org/vufind/pull/2921|pull request #2921]] for details. 
 +  * The bootstrap-custom.css file has been removed from the bootstrap3 theme; this was provided as an example, but it was never used and had grown out of date, so it has been deleted to prevent confusion. 
 +  * The \VuFind\Service\ReCaptcha class had to be rewritten for compatibility with the latest release of the laminas-recaptcha component. In the very unlikely situation that you locally extend this class, you will need to make adjustments. See [[https://github.com/vufind-org/vufind/pull/2911|pull request #2911]] for details. 
 +  * The \VuFind\Recommend\SearchObject class has been deprecated and will be removed in release 10.0; please use \VuFind\Recommend\AbstractSearchObject instead. 
 +  * Various templates have had minor accessibility improvements applied. When upgrading, it is strongly recommended that you synchronize these changes to your local templates. See the [[videos:upgrading_vufind_using_git|Upgrading VuFind® Using Git]] video (or the resources linked from that page) for a possible approach to automating this process. 
 +  * Stamen maps have been removed from the examples in geofeatures.ini, as this service has been discontinued. If you are using these maps, see the [[https://maps.stamen.com/stadia-partnership/|Stamen x Stadia]] page. 
 + 
 +[[changelog:release-9.1|Press Release]] 
 + 
 +[[videos:vufind_9.1_-_what_s_new_what_s_changed|Video Summary]] 
 +===== Release 9.0.3 - 7/24/2023 ===== 
 + 
 +  * Minor bug fix release. 
 +  * :!: A bug fix to the ChannelsController changes the constructor signature to address an omission; if you have customized this controller or its factory, local adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/2989|pull request #2989]]. 
 +  * Adds a new "OperatorToFieldPrefix" view helper as part of a bug fix (see [[https://github.com/vufind-org/vufind/pull/2992|pull request #2992]]). 
 +  * The graphical icon used for facet exclusion in the bootprint3 theme has been changed back to a font-based icon matching the bootstrap3/sandal themes for aesthetic reasons including alignment problems (see [[https://github.com/vufind-org/vufind/pull/2996|pull request #2996]]). 
 +===== Release 9.0.2 - 6/26/2023 ===== 
 + 
 +  * Minor bug fix release. 
 +  * Adds a new "Session" view helper as part of a bug fix (see [[https://github.com/vufind-org/vufind/pull/2926|pull request #2926]] for details). 
 +  * Eliminates log4j 1.x from SolrMarc to prevent false-positive vulnerability detection. 
 +===== Release 9.0.1 - 4/24/2023 ===== 
 + 
 +  * Bug fix release: corrects problems with Blowfish encryption migration discovered immediately following the release of 9.0. Please use this version instead of 9.0 if you are switching your encryption method! 
 + 
 +===== Release 9.0 - 4/24/2023 ===== 
 + 
 +New features: 
 + 
 +  * Support for [[configuration:blender|Blended Search]], which can combine results from multiple search backends into a single list
 +  * Support for a [[configuration:cookie_consent|cookie consent]] dialog box (disabled by default). 
 +  * Support for user-provided star ratings of records (off by default; see the rating setting in the [Social] section of config.ini).
   * A new "interval" [[development:plugins:captcha_handlers|CAPTCHA handler]] has been added which can be used to restrict user access to specific features based on frequency of activity rather than on a specific input. Useful, for example, to limit the number of emails or text messages that can be sent in a single session.   * A new "interval" [[development:plugins:captcha_handlers|CAPTCHA handler]] has been added which can be used to restrict user access to specific features based on frequency of activity rather than on a specific input. Useful, for example, to limit the number of emails or text messages that can be sent in a single session.
 +  * Support for proxy requests (i.e. one user places a hold for another user); currently FOLIO-only, but can be added to other compatible ILS systems in future.
 +  * Support for configurable username policies to restrict account names created within the system. See [[https://github.com/vufind-org/vufind/pull/2581|pull request #2581]] for details.
   * Feedback forms can now be forwarded/persisted using [[development:plugins:form_handlers|Form Handler plugins]]. The pre-existing email-based functionality remains the default, but it is now also possible to store form submissions in the database or to build custom integrations.   * Feedback forms can now be forwarded/persisted using [[development:plugins:form_handlers|Form Handler plugins]]. The pre-existing email-based functionality remains the default, but it is now also possible to store form submissions in the database or to build custom integrations.
 +  * Feedback forms can now be configured to allow some fields to be pre-populated using URL query parameters.
   * A new administrative module has been created for managing feedback results stored in the database. See [[https://github.com/vufind-org/vufind/pull/2399|pull request #2399]] for details.   * A new administrative module has been created for managing feedback results stored in the database. See [[https://github.com/vufind-org/vufind/pull/2399|pull request #2399]] for details.
 +  * Support for using Koha local cover images as a cover image source.
 +  * Support for activating [[https://tagmanager.google.com|Google Tag Manager]] via configuration; see [[https://github.com/vufind-org/vufind/pull/2637|pull request #2637]] for details.
   * The EDS and Primo backends now support facet value filtering, similar to the pre-existing functionality for Solr (see the [HideFacetValue] and [ShowFacetValue] sections in EDS.ini and Primo.ini for details).   * The EDS and Primo backends now support facet value filtering, similar to the pre-existing functionality for Solr (see the [HideFacetValue] and [ShowFacetValue] sections in EDS.ini and Primo.ini for details).
   * The EDS and Primo backends now support search response caching for improved performance (see the [SearchCache] section in EDS.ini and Primo.ini for details).   * The EDS and Primo backends now support search response caching for improved performance (see the [SearchCache] section in EDS.ini and Primo.ini for details).
   * Support for storing MARC records in MARC-in-JSON format in the Solr index.   * Support for storing MARC records in MARC-in-JSON format in the Solr index.
 +  * The staff view for MARC records can be configured to also display indexed Solr fields (see [[https://github.com/vufind-org/vufind/pull/2540|pull request #2540]]).
 +  * The new allowUserLogin setting in the [Catalog] section of config.ini can be turned off to disable direct end user login to the ILS; this can improve security in scenarios where user credentials are auto-loaded during authentication, and should never be input directly by the user.
 +  * The new bypass_default_filters setting in the [AlphaBrowse] section of config.ini has been added to solve problems with confusing interactions between default filters and alphabetic browse functionality. This is now on by default, but should be turned off if your default filters include "inverted facets" that expand the result set when applied. See [[https://github.com/vufind-org/vufind/pull/2538|pull request #2538]] for details.
 +  * The [[https://thirdiron.com/products/browzine/|BrowZine]] DOI linker plugin now supports the display of retraction notices.
   * An [[development:apis:admin|administrative API endpoint]] (featuring cache-clearing functionality) has been added.   * An [[development:apis:admin|administrative API endpoint]] (featuring cache-clearing functionality) has been added.
 +  * YAML configuration files can now be set up to inherit specific keys from their parents; see [[configuration:inheritance|Configuration File Inheritance]] for details.
 +  * Support has been added for using VuFind® as an [[configuration:oauth2_oidc|OAuth2 and OpenID Connect Authorization Server]] (OIDC Provider). Please see the configuration page for additional information and prerequisites.
 +  * Example import configuration has been added for ingesting XML harvested from [[https://www.subjectsplus.com/|SubjectsPlus]].
  
 Possible backward compatibility breaks: Possible backward compatibility breaks:
  
-  * :!: VuFind now requires PHP 7.4.1 or newer; please make sure you have an appropriate version installed before upgrading.+  * :!: VuFind® now requires PHP 7.4.1 or newer; please make sure you have an appropriate version installed before upgrading
 +    * Note that while PHP 7.4 is supported, PHP 8.0 or newer is STRONGLY RECOMMENDED, as PHP 7 is no longer being supported. The next release (9.1) will fully drop support for PHP 7. 
 +    * To use the new OAuth2 / OpenID Connect functionality, the PHP [[https://www.php.net/manual/en/book.sodium.php|Sodium]] extension is also now required. 
 +  * :!: The version of Solr bundled in VuFind® now requires Java 11 or newer. 
 +  * :!: VuFind® has dropped support for Apache 2.2. Your httpd-vufind.conf file can be simplified as long as you use Apache 2.4 or newer; see [[https://github.com/vufind-org/vufind/pull/2577|pull request #2577]].
   * :!: Be sure to run a database upgrade to reflect table changes (see also the [[development:architecture:database_schema#release_90|database changelog]]).   * :!: Be sure to run a database upgrade to reflect table changes (see also the [[development:architecture:database_schema#release_90|database changelog]]).
-  * :!: Some indexing changes require a reindex of MARC records: +  * :!: Some indexing and dependency changes require a full reindex
-    * :!: VuFind's SolrMarc configuration now populates Solr's fullrecord field using MARC-in-JSON format instead of binary MARC format. This solves problems caused by records exceeding binary MARC's 99,999-character limit, but it introduces an incompatibility with earlier VuFind releases. If you want a backward-compatible solution, you can customize marc_local.properties to use MARCXML instead.+    * :!: Solr has been upgraded to release 9.1.1. You MUST reindex all records to avoid encountering errors related to highlighting within the author/author_variant fields (see [[https://github.com/vufind-org/vufind/pull/2695|pull request #2695]] for details). 
 +    * :!: Deprecated Solr fields have been removed. See the [[development:architecture:solr_index_schema#vufind_90|index schema changelog]] for more details. 
 +    * :!: VuFind®'s SolrMarc configuration now populates Solr's fullrecord field using MARC-in-JSON format instead of binary MARC format. This solves problems caused by records exceeding binary MARC's 99,999-character limit, but it introduces an incompatibility with earlier VuFind® releases. If you want a backward-compatible solution, you can customize marc_local.properties to use MARCXML instead.
     * :!: The FormatCalculator SolrMarc custom indexing class has been revised to detect formats more accurately. If you have created a custom subclass of the FormatCalculator, please note that there have been method signature changes to getFormatFromBibLevel, getFormatFromRecordType and isElectronic, plus the getTypeOfComputerFile method has been removed. If you use a custom translation map, note that the FormatCalculator has several new possible output values which you may wish to customize in your map. See [[https://github.com/vufind-org/vufind/pull/2412|pull request #2412]] for details.     * :!: The FormatCalculator SolrMarc custom indexing class has been revised to detect formats more accurately. If you have created a custom subclass of the FormatCalculator, please note that there have been method signature changes to getFormatFromBibLevel, getFormatFromRecordType and isElectronic, plus the getTypeOfComputerFile method has been removed. If you use a custom translation map, note that the FormatCalculator has several new possible output values which you may wish to customize in your map. See [[https://github.com/vufind-org/vufind/pull/2412|pull request #2412]] for details.
 +  * :!: Because of the upgrade to Solr 9, Solr will now only bind to "localhost" by default. If you need to connect to Solr from another machine using a hostname, you should set the SOLR_JETTY_HOST environment variable prior to starting Solr. See [[https://solr.apache.org/guide/solr/latest/deployment-guide/taking-solr-to-production.html#security-considerations|Taking Solr to Production]] for more details.
 +  * :!: Blowfish encryption algorithms are deprecated in OpenSSL 3.0, and VuFind® has changed its default encryption method to reflect this. If you have legacy encrypted data (ILS credentials) in your database, you should convert it to a supported method. VuFind®'s web-based upgrade tool will guide you through this, so be sure to access it as part of your upgrade process.
 +  * :!: The PHP-based LESS compiler has been removed due to compatibility problems; "grunt less" is now the only way to compile LESS, and the entire "less" section (including the "active" setting) has been removed from theme.config.php. See the [[development:architecture:less|LESS / SASS page]] for more details.
 +  * :!: The Hunt library is no longer used by themes and has been replaced with the browser-native IntersectionObserver. If you rely on Hunt or have customized functionality related to dynamic data loading into search results, you will likely need to adjust local code -- see [[https://github.com/vufind-org/vufind/pull/2447|pull request #2447]].
 +  * :!: The global checkSaveStatuses / checkSaveStatusesCallback Javascript functions from check_save_statuses.js have been refactored into the new VuFind.saveStatuses module (to reduce global functions). See [[https://github.com/vufind-org/vufind/pull/2844|pull request #2844]].
   * :!: To increase flexibility, record drivers can now differentiate between a "source identifier" (the backend where the record resides) and a "search backend identifier" (the backend used to find the record). This distinction makes it possible to have "virtual" search backends which pull data from multiple sources. Supporting this required several changes which may need to be reflected in local custom code:   * :!: To increase flexibility, record drivers can now differentiate between a "source identifier" (the backend where the record resides) and a "search backend identifier" (the backend used to find the record). This distinction makes it possible to have "virtual" search backends which pull data from multiple sources. Supporting this required several changes which may need to be reflected in local custom code:
     * The setSourceIdentifier record driver and record collection methods have been deprecated in favor of setSourceIdentifiers, which allows both IDs to be set. The legacy method will set both IDs to the same value for backward compatibility. These changes affect any classes implementing VuFindSearch\Response\RecordCollectionInterface or VuFindSearch\Response\RecordInterface. The changes have been implemented in VuFindSearch\Response\AbstractRecordCollection and VuFindSearch\Response\RecordTrait for easy reuse.     * The setSourceIdentifier record driver and record collection methods have been deprecated in favor of setSourceIdentifiers, which allows both IDs to be set. The legacy method will set both IDs to the same value for backward compatibility. These changes affect any classes implementing VuFindSearch\Response\RecordCollectionInterface or VuFindSearch\Response\RecordInterface. The changes have been implemented in VuFindSearch\Response\AbstractRecordCollection and VuFindSearch\Response\RecordTrait for easy reuse.
     * Record controllers (i.e. VuFind\Controller\AbstractRecord and its children) have replaced the $searchClassId property with $sourceId.     * Record controllers (i.e. VuFind\Controller\AbstractRecord and its children) have replaced the $searchClassId property with $sourceId.
-  * :!: Facet processing has been adjusted to maintain a consistent internal format between the EDS, Primo and Solr backends, with standard processing taking place in the \VuFind\Search\Base\Results class. This simplifies the work of the Blender backend and better conforms to VuFind's internal documentation. The changes are most significant in Solr, where the \VuFindSearch\Backend\Solr\Response\Json\Facets class has been removed and replaced by additional methods on \VuFindSearch\Backend\Solr\Response\Json\RecordCollection. Note that some other backends (most notably Summon) still use non-standard facet processing and are presently incompatible with Blender. This may be corrected in a future release. (See [[https://github.com/vufind-org/vufind/pull/2372|pull request #2372]]).+  * :!: Facet processing has been adjusted to maintain a consistent internal format between the EDS, Primo and Solr backends, with standard processing taking place in the \VuFind\Search\Base\Results class. This simplifies the work of the Blender backend and better conforms to VuFind®'s internal documentation. The changes are most significant in Solr, where the \VuFindSearch\Backend\Solr\Response\Json\Facets class has been removed and replaced by additional methods on \VuFindSearch\Backend\Solr\Response\Json\RecordCollection. Note that some other backends (most notably Summon) still use non-standard facet processing and are presently incompatible with Blender. This may be corrected in a future release. (See [[https://github.com/vufind-org/vufind/pull/2372|pull request #2372]])
 +  * :!: The default configuration now includes a username policy that prevents the inclusion of exotic characters. This can be made more or less restrictive through configuration; see [[https://github.com/vufind-org/vufind/pull/2581|pull request #2581]]. Note that this will not impact existing users or usernames in your system; it will just prevent the creation of new ones that do not match the pattern. 
 +  * :!: In support of refactoring related to username policies, VuFind\Auth\AbstractBase::getCannedPasswordPolicyHint has been deprecated and \VuFind\Auth\Database::validateUsernameAndPassword has been removed; if you have custom authentication code relying upon these methods, it should be adjusted. 
 +  * :!: The \VuFind\Config\Locator class has been deprecated in favor of a new \VuFind\Config\PathResolver class. Whereas Locator was accessed statically, making some code hard to test or customize, the PathResolver is a full-fledged VuFind® service that can be overridden or extended. This change has resulted in adjustments to the internals of \VuFind\Config\PluginFactory, \VuFind\Config\YamlReader, and other classes; see [[https://github.com/vufind-org/vufind/pull/2568|pull request #2568]] for full details. 
 +  * :!: Previous VuFind® releases suppressed the display of items without barcodes on the holdings tab of the record view. This restriction has now been lifted by default but can be reintroduced by turning off the display_items_without_barcodes setting in config.ini. 
 +  * :!: Record links can now optionally include a search ID, which helps the system more reliably maintain context (e.g. when multiple open tabs are being used to search at the same time). Supporting this feature required a few backward-incompatible chnages: The constructors for \VuFind\RecordTab\CollectionList, \VuFind\Controller\Plugin\ResultScroller and \VuFind\Search\Memory have changed, as has the signature of the \VuFind\Search\Memory::rememberSearch method. Additionally, the recordLinker view helper now accepts a results object as a parameter so that it can add the necessary parameter to record links.
   * :!: Laminas no longer uses the deprecated container-interop interfaces for factories; it now uses psr-container instead. This means that all references to the Interop\Container namespace should be replaced with equivalent references to the Psr\Container interface (note that Interop\Container\Exception is replaced by Psr\Container\ContainerException). If you have local factories, or other code that references container interfaces, they should be updated to ensure forward-compatibility. See [[https://github.com/vufind-org/vufind/pull/2445|pull request #2445]].   * :!: Laminas no longer uses the deprecated container-interop interfaces for factories; it now uses psr-container instead. This means that all references to the Interop\Container namespace should be replaced with equivalent references to the Psr\Container interface (note that Interop\Container\Exception is replaced by Psr\Container\ContainerException). If you have local factories, or other code that references container interfaces, they should be updated to ensure forward-compatibility. See [[https://github.com/vufind-org/vufind/pull/2445|pull request #2445]].
 +  * :!: The Ezb [[development:plugins:link_resolver_drivers|link resolver driver]] has been renamed to Jop to better reflect the branding of the underlying API. If you use or extend this driver, you should update your configuration and/or code. See [[https://github.com/vufind-org/vufind/pull/2455|pull request #2455]].
   * :!: Methods and properties related to the HierarchicalFacetHelper have been refactored from \VuFind\Search\Solr\Results to \VuFind\Search\Base\Results, and a HierarchicalFacetHelperInterface has been defined to enable the possibility of consistent hierarchical facet processing across multiple backends. (See [[https://github.com/vufind-org/vufind/pull/2372|pull request #2372]]).   * :!: Methods and properties related to the HierarchicalFacetHelper have been refactored from \VuFind\Search\Solr\Results to \VuFind\Search\Base\Results, and a HierarchicalFacetHelperInterface has been defined to enable the possibility of consistent hierarchical facet processing across multiple backends. (See [[https://github.com/vufind-org/vufind/pull/2372|pull request #2372]]).
-  * :!: The icon system introduced in VuFind 8.0 is now fully utilized in themes. Icons have been standardized and in some cases changed. You may notice some minor changes to user interface appearance as a result, but it can all be configured through your local theme.config.php as needed.+  * :!: Because of Google's migration from Universal Analytics to Google Analytics 4, the Google Analytics plug-in has been rewritten. If you use this, be sure to update your Google Analytics account to use a GA4 key, and if you rely on the create_options_js setting in config.ini, note that some option names may have changed -- e.g. cookieFlags has become cookie_flags. See [[https://github.com/vufind-org/vufind/pull/2402|pull request #2402]] for details. 
 +  * :!: Code deprecated in release 8.0 has been fully removed: 
 +    * :!: \VuFind\Ils\Driver\CacheTrait has been removed; use \VuFind\Cache\CacheTrait instead. 
 +    * :!: The RecordLink view helper has been removed; use RecordLinker instead. 
 +    * :!: \VuFindSearch\Service::invoke() and the command pattern must be used for all search service calls; the legacy backward-compatibility helper methods have been removed (see the 8.0 changelog for more details). 
 +  * :!: The icon system introduced in VuFind® 8.0 is now fully utilized in themes. Icons have been standardized and in some cases changed. Many obsolete styles have been removed. You may notice some minor changes to user interface appearance as a result, but it can all be configured through your local theme.config.php as needed. Additionally, links containing icons have been restructured with new CSS which may require markup changes in local templates; see [[https://github.com/vufind-org/vufind/pull/2400|pull request #2400]]. 
 +  * :!: The constructor signature of \VuFind\View\Helper\Root\Icon has been changed to remove the dependency on the HeadLink helper. See [[https://github.com/vufind-org/vufind/pull/1962|pull request #1962]] for details.
   * :!: The league/commonmark library used for Markdown rendering has been upgraded to a new major version (2.x). If you have customized markdown.ini or any code related to Markdown processing (particularly the League\CommonMark\MarkdownConverterInterface service, which has been renamed to League\CommonMark\ConverterInterface), you should review [[https://github.com/vufind-org/vufind/pull/2048|pull request #2048]] to make sure appropriate adjustments are made.   * :!: The league/commonmark library used for Markdown rendering has been upgraded to a new major version (2.x). If you have customized markdown.ini or any code related to Markdown processing (particularly the League\CommonMark\MarkdownConverterInterface service, which has been renamed to League\CommonMark\ConverterInterface), you should review [[https://github.com/vufind-org/vufind/pull/2048|pull request #2048]] to make sure appropriate adjustments are made.
   * :!: The \VuFind\Validator\Csrf class has been replaced by \VuFind\Validator\CsrfInterface + \VuFind\Validator\SessionCsrf to open the possibility of alternate CSRF implementations. If you have customized this class or written code which pulls it from the service manager, you may need to make some adjustments. See [[https://github.com/vufind-org/vufind/pull/2201|pull request #2201]].   * :!: The \VuFind\Validator\Csrf class has been replaced by \VuFind\Validator\CsrfInterface + \VuFind\Validator\SessionCsrf to open the possibility of alternate CSRF implementations. If you have customized this class or written code which pulls it from the service manager, you may need to make some adjustments. See [[https://github.com/vufind-org/vufind/pull/2201|pull request #2201]].
-  * :!: The File_MARC dependency from PEAR has been replaced by a new VuFind\Marc library for improved performance and forward compatibility with newer PHP releases. This means that a significant amount of VuFind's MARC record processing logic has been revised, and you will have to update any related local subclasses. In particular:+  * :!: The File_MARC dependency from PEAR has been replaced by a new [[https://github.com/vufind-org/vufind-marc|VuFind\Marc]] library for improved performance and forward compatibility with newer PHP releases. This means that a significant amount of VuFind®'s MARC record processing logic has been revised, and you will have to update any related local subclasses. In particular:
     * The deprecated getMarcRecord() method in several record drivers has been removed (you should use getMarcReader() instead).     * The deprecated getMarcRecord() method in several record drivers has been removed (you should use getMarcReader() instead).
     * Some components of the WorldCat search backend have changed.     * Some components of the WorldCat search backend have changed.
Line 38: Line 276:
   * :!: The internals of the VuFind\MarcReader class have been changed; see [[https://github.com/vufind-org/vufind/pull/2334|pull request #2334]]. In the unlikely situation that you have locally customized this code, you will need to make updates.   * :!: The internals of the VuFind\MarcReader class have been changed; see [[https://github.com/vufind-org/vufind/pull/2334|pull request #2334]]. In the unlikely situation that you have locally customized this code, you will need to make updates.
   * :!: All ILS drivers with a getConfig method have been standardized to use a consistent method signature. If you have customized this method in a local ILS driver, you should adjust your code to match. See [[https://github.com/vufind-org/vufind/pull/2429|pull request #2429]].   * :!: All ILS drivers with a getConfig method have been standardized to use a consistent method signature. If you have customized this method in a local ILS driver, you should adjust your code to match. See [[https://github.com/vufind-org/vufind/pull/2429|pull request #2429]].
-  * :!: During application initialization, VuFind used to change the working directory to $VUFIND_HOME; code has now been refactored to avoid this, which simplifies some things. If your code relies on expecting a specific working directory, it may need to be adjusted, and if you have custom console commands that extend RelativeFileAwareCommand, they should be adjusted, since this base class is no longer needed. See [[https://github.com/vufind-org/vufind/pull/2305|pull request #2305]].+  * :!: Search backend factories extended from AbstractSolrBackendFactory may need minor adjustments due to improvements to the design of configuration loading within the factories. The $solrCore property has been renamed to $defaultIndexName, and the getSolrCore() method has been renamed to getIndexName(). The getSolrUrl() method no longer accepts any parameters. 
 +  * :!: The signature and behavior of \VuFind\ILS\Driver\AbstractAPI::makeRequest() has been changed for more consistent and reliable error handling; this impacts the FOLIO and GeniePlus ILS drivers; see [[https://github.com/vufind-org/vufind/pull/2554|pull request #2554]] for details. 
 +  * :!: During application initialization, VuFind® used to change the working directory to $VUFIND_HOME; code has now been refactored to avoid this, which simplifies some things. If your code relies on expecting a specific working directory, it may need to be adjusted, and if you have custom console commands that extend RelativeFileAwareCommand, they should be adjusted, since this base class is no longer needed. See [[https://github.com/vufind-org/vufind/pull/2305|pull request #2305]].
   * :!: Two classes have been refactored to use the CurrencyFormatter service, which separates formatting logic from the SafeMoneyFormat view helper for improved reusability. If you have local changes to \VuFind\AjaxHandler\GetUserFines or \VuFind\View\Helper\Root\SafeMoneyFormat, you should review them. See [[https://github.com/vufind-org/vufind/pull/2217|pull request #2217]] for details.   * :!: Two classes have been refactored to use the CurrencyFormatter service, which separates formatting logic from the SafeMoneyFormat view helper for improved reusability. If you have local changes to \VuFind\AjaxHandler\GetUserFines or \VuFind\View\Helper\Root\SafeMoneyFormat, you should review them. See [[https://github.com/vufind-org/vufind/pull/2217|pull request #2217]] for details.
   * :!: The \VuFind\Controller\Plugin\AbstractRequestBase::getValidIds() method has been superseded by a validateIds() method. If you rely on the old method in custom code (a fairly unlikely situation), you will need to revise your code. See [[https://github.com/vufind-org/vufind/pull/2206|pull request #2206]] for details.   * :!: The \VuFind\Controller\Plugin\AbstractRequestBase::getValidIds() method has been superseded by a validateIds() method. If you rely on the old method in custom code (a fairly unlikely situation), you will need to revise your code. See [[https://github.com/vufind-org/vufind/pull/2206|pull request #2206]] for details.
   * :!: Feedback form processing has been significantly refactored; see [[https://github.com/vufind-org/vufind/pull/2230|pull request #2230]] and [[https://github.com/vufind-org/vufind/pull/2237|pull request #2237]].   * :!: Feedback form processing has been significantly refactored; see [[https://github.com/vufind-org/vufind/pull/2230|pull request #2230]] and [[https://github.com/vufind-org/vufind/pull/2237|pull request #2237]].
   * :!: The signature of \VuFind\Db\Table\Search::saveSearch() has changed to accommodate a fix to prevent duplicate searches in history; see [[https://github.com/vufind-org/vufind/pull/2460|pull request #2460]].   * :!: The signature of \VuFind\Db\Table\Search::saveSearch() has changed to accommodate a fix to prevent duplicate searches in history; see [[https://github.com/vufind-org/vufind/pull/2460|pull request #2460]].
-  * :!: The \VuFindSearch\Backend\Solr\Connector class has been revised: the HTTP client is now a required constructor parameter (and constructor parameters have been reordered accordingly), plus the getTimeout() and setTimeout() methods have been removed in favor of the more flexible callWithHttpOptions() method. If you use the connector directly in custom code, you should review potentially affected logic. See [[https://github.com/vufind-org/vufind/pull/2229|pull request #2229]] for details.+  * :!: The \VuFind\Search\UrlQueryHelper::buildQueryString() method has been made public and static for easier reuse; in the unlikely event that you have customized this method in a subclass, you will need to adjust your local code accordingly. 
 +  * :!: The \VuFindSearch\Backend\Solr\Connector class has been revised: the HTTP client (or a factory function to create HTTP clients) is now a required constructor parameter (and constructor parameters have been reordered accordingly), plus the getTimeout() and setTimeout() methods have been removed in favor of the more flexible callWithHttpOptions() method. If you use the connector directly in custom code, you should review potentially affected logic. See [[https://github.com/vufind-org/vufind/pull/2229|pull request #2229]] and [[https://github.com/vufind-org/vufind/pull/2515|pull request #2515]] for details. 
 +  * :!: Some translation strings have been renamed or split to reduce ambiguity; if you have customized the old strings in local language files, or if you use them in any custom templates/configurations, you will need to adjust your local files to use the appropriate new values. See [[https://github.com/vufind-org/vufind/pull/2598|#2598]] for details; summary of changes: 
 +    * "Find More" => footer_header_find_more 
 +    * "Need Help?" => feedback_help_label / footer_header_need_help / link_text_need_help 
 +    * "Search Options" => footer_header_search_options 
 +    * "Send us your feedback!" => feedback_title 
 +    * "Subject(s)" => deleted [no longer used/needed] 
 +    * "Thank you for your feedback." => feedback_response
   * :!: The \VuFind\Db\Table\ExpirationTrait has been revised to prevent a potential problem with infinite looping during database row expiration; if you have a custom class utilizing this trait, revisions will be necessary. See [[https://github.com/vufind-org/vufind/pull/2450|pull request #2450]].   * :!: The \VuFind\Db\Table\ExpirationTrait has been revised to prevent a potential problem with infinite looping during database row expiration; if you have a custom class utilizing this trait, revisions will be necessary. See [[https://github.com/vufind-org/vufind/pull/2450|pull request #2450]].
   * :!: Some function signatures have been more strictly typed based on [[development:recommended_tools#static_analysis|PHPStan]] analysis (see [[https://github.com/vufind-org/vufind/pull/2255|pull request #2255]], for example). If you have local code that extends core code, it is strongly recommended that you run [[development:recommended_tools#static_analysis|PHPStan]] on it to make sure your signatures remain accurate and compatible.   * :!: Some function signatures have been more strictly typed based on [[development:recommended_tools#static_analysis|PHPStan]] analysis (see [[https://github.com/vufind-org/vufind/pull/2255|pull request #2255]], for example). If you have local code that extends core code, it is strongly recommended that you run [[development:recommended_tools#static_analysis|PHPStan]] on it to make sure your signatures remain accurate and compatible.
   * :!: \VuFind\Search\Solr\HideFacetValueListener has been renamed to \VuFind\Search\Base\HideFacetValueListener, since it is no longer Solr-specific (it is now shared with EDS and Primo).   * :!: \VuFind\Search\Solr\HideFacetValueListener has been renamed to \VuFind\Search\Base\HideFacetValueListener, since it is no longer Solr-specific (it is now shared with EDS and Primo).
   * :!: The shell/batch scripts in $VUFIND_HOME/import/bin have been removed; these were part of SolrMarc 2.x and were deprecated with the release of SolrMarc 3. If you rely on any of these for your processes/workflows, you should find alternatives. For MARC import, everyone should already be using $VUFIND_HOME/import-marc.sh instead of the obsolete $VUFIND_HOME/import/bin/import.sh.   * :!: The shell/batch scripts in $VUFIND_HOME/import/bin have been removed; these were part of SolrMarc 2.x and were deprecated with the release of SolrMarc 3. If you rely on any of these for your processes/workflows, you should find alternatives. For MARC import, everyone should already be using $VUFIND_HOME/import-marc.sh instead of the obsolete $VUFIND_HOME/import/bin/import.sh.
 +  * :!: The data provided by the GetUserFines AJAX handler has changed, using "total" instead of "value" for the element containing the sum of all fines; the associated logic in account_ajax.js has been adjusted to match. If you have customized anything related to this, please change local code to reflect the change.
 +  * :!: The DOILookup AJAX handler and the BrowZine DOI linker plugin have had their constructor signatures and factories changed; if you have customized either of them, adjustments may be needed. See [[https://github.com/vufind-org/vufind/pull/2616|pull request #2616]] for details.
 +  * :!: If you use [[https://thirdiron.com/products/browzine/|BrowZine]], be sure to update your local BrowZine.ini to reflect the new [DOIServices] section added in [[https://github.com/vufind-org/vufind/pull/2616|pull request #2616]]; this supersedes the previous DOI "filters[]" setting and allows access to new functionality.
 +  * :!: If you use Git to track your local configuration files, note that changes to the default .gitignore file will prevent local configurations from being committed. See the note at the bottom of the [[https://vufind.org/wiki/development:recommended_tools:git#getting_started|Getting Started with Git]] documentation for a solution to this problem.
 +  * :!: The factory and constructor expectations for \VuFind\Search\EDS\Options have changed in order to support "on demand" API data retrieval for improved efficiency. If you have customized this code, changes may be needed; see [[https://github.com/vufind-org/vufind/pull/2643|pull request #2643]] for details.
 +  * :!: The second parameter ($flatten) of \VuFindTheme\ThemeInfo::getMergedConfig() was not working correctly and has been removed; in the unlikely event that you wrote code which relied on this feature, you should review it. See [[https://github.com/vufind-org/vufind/pull/2543|pull request #2543]] for details.
 +  * :!: The original database-driven Sierra ILS driver has been removed as it was no longer being maintained; Sierra users should use the API-based SierraRest driver instead.
 +  * The [[development:architecture:record_data_formatter|Record Data Formatter]] view helper has been adjusted so that the record driver parameter can be passed to the helper invocation instead of as a parameter to the getData method, and this is now the preferred method of using the helper. However, support for the legacy style is retained for backward compatibility. See [[https://github.com/vufind-org/vufind/pull/2658|pull request #2658]] for details.
   * The book bag feature now requires browser Javascript support for add/remove functionality in result lists (see [[https://github.com/vufind-org/vufind/pull/2477|pull request #2477]]). Given current standards, this is part of a general move away from universal non-Javascript support.   * The book bag feature now requires browser Javascript support for add/remove functionality in result lists (see [[https://github.com/vufind-org/vufind/pull/2477|pull request #2477]]). Given current standards, this is part of a general move away from universal non-Javascript support.
   * The CSS classes used for displaying counts of checkouts and requests in the account side menu have been renamed for clarity (.ok to .account-info; .warn to .account-warning; and .overdue to .account-alert). If you have customized these styles, you will need to make adjustments. See [[https://github.com/vufind-org/vufind/pull/2481|pull request #2481]].   * The CSS classes used for displaying counts of checkouts and requests in the account side menu have been renamed for clarity (.ok to .account-info; .warn to .account-warning; and .overdue to .account-alert). If you have customized these styles, you will need to make adjustments. See [[https://github.com/vufind-org/vufind/pull/2481|pull request #2481]].
Line 55: Line 311:
   * Some aspects of the VuFindApi module were refactored for greater flexibility when admin tools were added; see [[https://github.com/vufind-org/vufind/pull/2219|pull request #2219]] for details. This only affects code internals, not the behavior of existing API endpoints.   * Some aspects of the VuFindApi module were refactored for greater flexibility when admin tools were added; see [[https://github.com/vufind-org/vufind/pull/2219|pull request #2219]] for details. This only affects code internals, not the behavior of existing API endpoints.
   * The non-tab record action handling in \VuFind\Route\RouteGenerator has been refactored to make it easier to add additional actions in local modules. If you have already customized these types of routes in your instance, adjustments may be needed or simplification may be possible; see [[https://github.com/vufind-org/vufind/pull/2172|pull request #2172]].   * The non-tab record action handling in \VuFind\Route\RouteGenerator has been refactored to make it easier to add additional actions in local modules. If you have already customized these types of routes in your instance, adjustments may be needed or simplification may be possible; see [[https://github.com/vufind-org/vufind/pull/2172|pull request #2172]].
 +  * The include_facets setting in EDS.ini had no effect in the existing code and has been removed.
 +
 +[[changelog:release-9.0|Press Release]]
 +
 +[[videos:vufind_9.0_-_what_s_new_what_s_changed|Video Summary]]
 +===== Release 8.1.2 - 2/6/2023 =====
 +  * :!: Upgrades to Solr 8.11.2, which includes further updates to Solr's bundled log4j library. You should reindex your records after upgrading due to the Solr version change.
 +  * Also includes some other minor bug fixes.
  
-===== Release 8.1.1 - currently in development =====+===== Release 8.1.1 - 10/3/2022 =====
  
   * Minor bug fix/translation improvement release.   * Minor bug fix/translation improvement release.
 +  * :!: FOLIO users are strongly encouraged to upgrade due to a significant bug fix.
  
 ===== Release 8.1 - 7/18/2022 ===== ===== Release 8.1 - 7/18/2022 =====
Line 462: Line 727:
   * New "SideFacetsDeferred" option to load facet data asynchronously, which may improve performance in some environments (off by default; see [[https://github.com/vufind-org/vufind/pull/1246|pull request #1246]] for details).   * New "SideFacetsDeferred" option to load facet data asynchronously, which may improve performance in some environments (off by default; see [[https://github.com/vufind-org/vufind/pull/1246|pull request #1246]] for details).
   * [[development:plugins:ils_drivers|ILS drivers]] can now report "last pickup" dates for holds (currently supported by SierraRest driver).   * [[development:plugins:ils_drivers|ILS drivers]] can now report "last pickup" dates for holds (currently supported by SierraRest driver).
-  * New [[development:plugins:doi_linkers|DOI Linker]] plugin interface for providing full text links and contextual information based on record DOIs; currently implemented using the [[https://thirdiron.com/academic/|BrowZine]] service. See [[https://github.com/vufind-org/vufind/commit/a595b80d64708f8b3bbb1bedf0ee58cc0a411c90|this commit]] and [[https://github.com/vufind-org/vufind/commit/b7f0864c757a3d26e96c84a119a2410ef5bd5357|this commit]] for more details.+  * New [[development:plugins:doi_linkers|DOI Linker]] plugin interface for providing full text links and contextual information based on record DOIs; currently implemented using the [[https://thirdiron.com/products/browzine/|BrowZine]] service. See [[https://github.com/vufind-org/vufind/commit/a595b80d64708f8b3bbb1bedf0ee58cc0a411c90|this commit]] and [[https://github.com/vufind-org/vufind/commit/b7f0864c757a3d26e96c84a119a2410ef5bd5357|this commit]] for more details.
   * New [[configuration:feedback|Configurable Feedback Forms]], greatly extending the existing feedback functionality.   * New [[configuration:feedback|Configurable Feedback Forms]], greatly extending the existing feedback functionality.
   * New [[development:code_generators#creating_new_plugins|Plugin Code Generator]] to automatically create and configure custom VuFind [[development:plugins|plugins]]; see also [[https://github.com/vufind-org/vufind/pull/1247|pull request #1247]].   * New [[development:code_generators#creating_new_plugins|Plugin Code Generator]] to automatically create and configure custom VuFind [[development:plugins|plugins]]; see also [[https://github.com/vufind-org/vufind/pull/1247|pull request #1247]].
changelog.1658404079.txt.gz · Last modified: 2022/07/21 11:47 by demiankatz