changelog [VuFind Documentation]
About
Features
Downloads
Getting Started
Documentation
Events
Support
GitHub
Love VuFind®? Consider becoming a
financial supporter
. Your support helps build a better VuFind®!
Warning:
This page has not been updated in over
over a year
and may be outdated or deprecated.
changelog
Table of Contents
VuFind® Change Log
Release 12.0.0 - Currently in Development
Release 11.1.0 - Currently in Development
Release 11.0.3 - currently in development
Release 11.0.2 - 23 Mar 2026
Release 11.0.1 - 19 Jan 2026
Release 11.0.0 - 24 Nov 2025
Release 10.2.1 - 13 Oct 2025
Release 10.2.0 - 23 Jun 2025
Release 10.1.4 - 7 Apr 2025
Release 10.1.3 - 18 Mar 2025
Release 10.1.2 - 17 Mar 2025
Release 10.1.1 - 13 Jan 2025
Release 10.1 - 4 Nov 2024
Release 10.0.1 - 14 Oct 2024
Release 10.0 - 24 Jun 2024
Release 9.1.2 - 17 Jun 2024
Release 9.1.1 - 12 Feb 2024
Release 9.1 - 30 Oct 2023
Release 9.0.3 - 24 Jul 2023
Release 9.0.2 - 26 Jun 2023
Release 9.0.1 - 24 Apr 2023
Release 9.0 - 24 Apr 2023
Release 8.1.2 - 6 Feb 2023
Release 8.1.1 - 3 Oct 2022
Release 8.1 - 18 Jul 2022
Release 8.0.4 - 28 Feb 2022
Release 8.0.3 - 20 Dec 2021
Release 8.0.2 - 29 Nov 2021
Release 8.0.1 - 27 Sep 2021
Release 8.0 - 20 Sep 2021
Release 7.1.1 - 5 Jul 2021
Release 7.1 - 22 Feb 2021
Release 7.0.2 - 7 Dec 2020
Release 7.0.1 - 31 Aug 2020
Release 7.0 - 20 Jul 2020
Release 6.1.2 - 13 Jul 2020
Release 6.1.1 - 16 Mar 2020
Release 6.1 - 3 Feb 2020
Release 6.0.1 - 16 Sep 2019
Release 6.0 - 15 Jul 2019
Release 5.1.1 - 6 May 2019
Release 5.1 - 4 Feb 2019
Release 5.0.1 - 10 Oct 2018
Release 5.0 - 16 Jul 2018
Release 4.1.3 - 11 Jun 2018
Release 4.1.2 - 29 Jan 2018
Release 4.1.1 - 20 Nov 2017
Release 4.1 - 2 Oct 2017
Release 4.0.1 - 28 Aug 2017
Release 4.0 - 10 Jul 2017
Release 3.1.4 - 5 Jul 2017
Release 3.1.3 - 13 Mar 2017
Release 3.1.2 - 16 Jan 2017
Release 3.1.1 - 31 Oct 2016
Release 3.1 - 26 Sep 2016
Release 3.0.3 - 1 Aug 2016
Release 3.0.2 - 5 Jul 2016
Release 3.0.1 - 27 May 2016
Release 3.0 - 25 Apr 2016
Release 2.5.4 - 25 Apr 2016
Release 2.5.3 - 18 Apr 2016
Release 2.5.2 - 3 Feb 2016
Release 2.5.1 - 11 Jan 2016
Release 2.5 - 28 Sep 2015
Release 2.4.1 - 25 May 2015
Release 2.4 - 23 Mar 2015
Release 2.3.1 - 17 Nov 2014
Release 2.3 - 11 Aug 2014
Release 2.2.1 - 26 Feb 2014
Release 2.2 - 27 Jan 2014
Release 2.1.1 - 9 Sep 2013
Release 2.1 - 26 Aug 2013
Release 2.0.1 - 25 Jun 2013
Release 2.0 - 24 Jun 2013
Release 2.0RC1 - 29 Apr 2013
Release 2.0beta - 1 Oct 2012
Release 2.0alpha - 2 Jul 2012
Release 1.4 - 28 Jan 2013
Release 1.3 - 30 Jan 2012
Release 1.2 - 1 Aug 2011
Release 1.1 - 21 Mar 2011
Release 1.0.1 - 13 Aug 2010
Release 1.0 - 15 Jul 2010
Release 1.0RC2 - 14 Dec 2009
Release 1.0RC1 - 15 Oct 2008
Release 0.8.2 (Revision 549) - 21 Apr 2008
Release 0.8.1 (Revision 530) - 15 Apr 2008
Release 0.8 (Revision 402) - 18 Mar 2008
Release 0.7 (Revision 264) - 12 Dec 2007
Release 0.6.1 (Revision 133) - 22 Aug 2007
Release 0.6 (Revision 118) - 16 Aug 2007
Release 0.5 - 18 Jul 2007
Alpha
VuFind® Change Log
When adding a new release, see the
release checklist
See the
Software Lifecycle
page for information on the project's release cadence and community expectations regarding support and upgrades.
Release 12.0.0 - Currently in Development
New features:
The
API
now supports recordPageRelativeLink and recordPageAbsoluteLink data fields.
Possible backward compatibility breaks:
Several controller plugins have been refactored to stand-alone top-level services or removed:
The Favorites plugin, which was deprecated in release 10.0, has been completely removed (see
pull request #4928
).
The FlashMessenger plugin (from the abandoned laminas/laminas-mvc-plugin-flashmessenger package) has been replaced with \VuFind\View\FlashMessenger\FlashMessenger and FlashMessengerInterface, with some impact on the FlashMessages view helper (see
pull request #5065
).
The Followup plugin is now \VuFind\Session\Helper\FollowupHelper (see
pull request #5004
).
The IlsRecords plugin is now \VuFind\ILS\Logic\RecordsHelper (see
pull request #4919
).
The NewItems plugin is now \VuFind\Search\NewItemsHelper, which also impacts the constructor signature of \VuFind\ChannelProvider\NewSearchItems (see
pull request #4922
).
The OperatorToFieldPrefix, Overdrive, SafeMoneyFormat, SchemaOrg, ShortenUrl and SortFacetList helpers were modernized in in
pull request #5212
The Ratings, RecordTabs and RenderArray helpers were modernized in
pull request #5133
The Renewals plugin is now \VuFind\ILS\Logic\RenewalsHelper (see
pull request #4884
).
The Reserves plugin is now \VuFind\Search\ReservesHelper (see
pull request #4923
).
The ResultScroller plugin is now \VuFind\Search\ResultScroller (see
pull request #5059
).
The Url plugin (a native Laminas feature) has been replaced with \VuFind\Http\RouteHelper (see
pull request #5066
for refactoring to eliminate internal dependencies on the helper class, impacting some AjaxHandler, ChannelProvider and TreeRenderer classes plus the factory for \VuFind\Cover\Router).
View helpers have been revised to no longer extend the deprecated AbstractHelper base class, and to leverage autowiring where possible. Local custom view helpers and subclasses should be adjusted to match to ensure compatibility with future releases of laminas-view.
AbstractJsStrings, its subclasses (JsIcons / JsTranslations) and the TransEsc helper were modernized by
pull request #5075
AbstractSearch, its subclass (Search) and UserTags were modernized by
pull request #5132
The AccountCapabilities and Alphabrowse view helpers were modernized by
pull request #5125
AddEllipsis, AvailabilityStatus, Breadcrumbs, BulkAction, ContentLoader and Csp were modernized by
pull request #5164
The AssetManager, GeoCoords, GoogleAnalytics, and GoogleTagManager helpers were modernized by
#5187
The Cart, CleanHtml and Component view helpers were modernized by
pull request #5124
The Citation view helper was modernized by
pull request #5123
and
pull request #5144
ClassBasedTemplateRendererTrait and all helpers relying on it (Auth, Captcha, ContentBlock, Recommend, Record, Related and Section) were modernized by
pull request #5147
Configuration-related view helpers (Config / JsConfigs) were modernized by
pull request #5081
The Content view helper was modernized by
pull request #5080
The Context view helper was modernized by
pull request #5096
DateTime, MethodTimedBlocks and DeveloperSettings were modernized by
pull request #5179
DisplayLanguageOption, Export, HelpText, HistoryLabel and Holdings were modernized by
pull request #5198
The EscapeOrCleanHtml and Highlight helpers were modernized in
pull request #5095
The ExplainElement helper was modernized by
pull request #5182
Feedback, Ils, KeepAlive, LibraryCards and Linkify were modernized by
pull request #5199
The FlashMessages helper was modernized by
pull rquest #5186
The Icon and LayoutClass helpers were modernized by
pull request #5100
LocalizedNumber, Markdown and Matomo were modernized by
pull request #5201
MakeLink, MakeTag and PrintArrayHtml were modernized by
pull request #5200
The OpenUrl helper was modernized by
pull request #5142
The Permission view helper was modernized by
pull request #5092
The RecordDataFormatter view helper was modernized by
pull request #5126
The RecordLinker view helper was modernized by
pull request #5128
The SearchMemory view helper was modernized by
pull request #5084
The SearchParams and SearchTabs helpers were modernized by
pull request #5085
The Session, ThemeConfig and UserList helpers were modernized by
pull request #5146
VuFindTheme module helpers were modernized in
pull request #5193
The website index schema has been adjusted (see the
Solr website schema changelog
); if you have a web index, you should rebuild it after upgrading to take advantage of improvements. If you have a custom indexing tool, adjustments may be needed.
Types have been added to properties and method signatures in several places to improve the precision of code. This will require adjustments to local classes extending any of the impacted methods.
Search-related factories were typed in
pull request #5025
(which also removed empty constructors from AbstractBackendFactory and AbstractSolrBackendFactory, so custom factories should not call parent::__construct()).
Search Options objects were typed in
pull request #4971
(which also changed some false return values to null for clarity and changed the rarely-used second parameter to the ExplodeSettingTrait::explodeSetting() to increase flexibility).
Search Params objects were typed in
pull request #5008
Search Results objects were typed in
pull request #4944
(which also required a minor adjustment to the VisualFacets recommendation module template).
Search-related listeners were typed in
pull request #5036
Remaining search-related classes (explanation code, facet cache code, helpers, etc.) were typed in
pull request #4607
Types were added to \VuFind\Tags\TagsService::parse() in
pull request #5222
Record tab functionality has been rewritten to improve accessibility. This introduced significant changes to the AbstractRecord controller, the record and collection view templates, and tab-related Javascript. See
pull request #4901
for details.
The record.js file in the bootstrap5 theme has been modernized and refactored into multiple files for efficiency and clarity; if you have customizations to this file or use any of its functions in custom code, minor adjustments may be needed. See
pull request #4943
for details.
The umask setting has been removed from the [Cache] section of config.ini; it never worked as intended, and custom umask behavior should be configured at the operating system level rather than through VuFind®.
The GoogleAnalytics view helper has had types added to its constructor and internal properties. It now expects a null $key to indicate that it is disabled, rather than Boolean false. See
pull request #4917
for details.
The signature of \VuFind\Role\Assertion\HasVerifiedEmailAssertion::assert() has been changed to match upstream changes in the lm-commons/lmc-rbac library.
The signature of the build() method in \VuFindSearch\Backend\Solr\SimilarBuilder and \VuFindSearch\Backend\Solr\SimilarBuilderInterface has been changed to address a problem with duplicate parameters. See
pull request #5069
for details.
The constructor signature of \VuFindApi\Formatter\RecordFormatter has been changed to allow support for absolute record URLs (see
pull request #4954
).
Deprecated functionality and code from earlier releases has been removed.
The
host
and
port
settings in the
[LDAP]
section of config.ini are no longer supported; use
uri
instead. (The automatic configuration upgrade tool will take care of this for you if you use it).
Obsolete factories have been deleted:
\VuFind\OAuth2\Repository\RepositoryWithOAuth2ConfigFactory
\VuFind\OAuth2\Repository\TokenRepositoryFactory
Obsolete view helpers (AccountMenu and AdminMenu, plus their common base class) were removed in
pull request #5074
ILS-driven new item functionality, including related
[NewItem]
settings in searches.ini, the
newilsitems
channel provider, the
getNewItems
and
getFunds
ILS driver methods, and associated controller behavior, were removed in
pull request #5108
The Wikipedia integration in the Author module is now disabled by default to prevent unexpected behavior; it can be turned on using the
authors
setting in the
[Content]
section of config.ini.
Resources:
Release 12.0.0 Pull Requests
Release 12.0.0 JIRA Tickets
Release 11.1.0 - Currently in Development
New features:
Notices (for example, to alert users to important news) can now displayed on every page of the user interface using the new
Notices.yaml
configuration file.
Autocomplete suggestions will now be filtered (where possible/appropriate) based on current applied filters when the
retain_filters_by_default
setting is turned on in searches.ini (or equivalent). A new
apply_active_filters
setting has been added to allow the behavior to be independently configured if needed. See
pull request #4246
for details.
Controls and menus in the page header and footer can now be configured via new HeaderBar.yaml and FooterMenu.yaml configuration files, enabling customization without the need to build custom templates. The entire header.phtml and footer.phtml templates can still be overridden as before if desired, however. See
pull request #5002
for details.
The new [LocalSortDefinitions] section of searches.ini can be used to define custom sort functions and override default sort aliases. See
pull request #5091
for details.
A site map page (as specified in
WCAG 2.2 Technique G63
) can now be enabled using the
siteMapPageEnabled
setting in config.ini and configured via the new
SiteMap.yaml
configuration file.
A new
collapseInactiveBackendOptions
setting has been added to searchbox.ini, adding an “intermediate verbosity” option for combined search drop-downs; see
pull request #4957
for details.
The new LinkIQ
link resolver driver
adds integration support for EBSCO's LinkIQ (the
API
behind Full Text Finder). See
pull request #5009
for details.
The new Blender2 backend allows two different
Blended Search
configurations to be available through a single instance. See
pull request #4845
for details.
The new
display_no_ils_holdings_warning
setting in config.ini can be turned on to display a message when an item has no ILS holdings.
The new
@parent_config_name
directive in YAML configuration files allows inheritance using the standard configuration search algorithm as an alternative to the existing
@parent_yaml
directive that relies on a relative or absolute file path.
The PasswordAccess authentication method now optionally supports hashed passwords; see the
access_user_hashed
setting in config.ini.
Logging configuration has been made more granular. Legacy all-lowercase level names will still work as they always have, but now all-uppercase level names that correspond with PSR-3 standards are also available. See
pull request #4921
for details.
The new \VuFind\ServiceManager\Factory\AutowiringFactory offers a mechanism for using the \VuFind\ServiceManager\Factory\Autowire attribute to annotate classes and reduce the need for building custom factories in local code. See
pull request #4929
for details.
EBSCO Discovery Service cover image loading is now more compatible with the built-in cover loader, so you can fall back to non-EDS services when EDS images are not available by configuring the [Cover] section of EDS.ini. See
pull request #4309
for details.
Email authentication now uses one-time passwords instead of magic links to improve compatibility with mail clients.
Specific types of “best integrator links” can be hidden from the BrowZine identifier linker's output by setting them to false in the [BestIntegratorLinks] section of BrowZine.ini (see
pull request #4774
for details).
FOLIO driver: improved compatibility with the Sunflower release (see
pull request #5001
).
Koha driver: a custom translation prefix can be used for Koha-related strings; see the translationPrefix setting in KohaRest.ini and
pull request #4787
New interface translation: Tamil.
Improved compatibility with PHP 8.5.
Possible backward compatibility breaks:
The
feature has been significantly rewritten to eliminate a dependency on an abandoned third-party library and to improve accessibility and customization options. Existing configurations should continue to work, existing user consents will remain valid, event hooks remain the same, and existing consent checks in template and Javascript code will continue to work. However, some language strings and styles have changed; if you have customized language strings or low-level cookie consent code (e.g. the CookieConsent view helper or consent-specific templates), changes will be necessary. See
pull request #5163
for more details.
Due to technical problems caused by some email clients, email login and verification mechanisms have been significantly revised to send a code instead of a single-use link. This has required some significant code changes impacting authentication and verification workflows; if you have customized impacted logic, changes may be needed. See
pull request #5217
for full details; changes include:
Any pending verifications prior to the upgrade will fail following the upgrade and will need to be retried.
A new preAuthenticate step has been added to the login workflow, impacting \VuFind\Controller\AbstractBase::catalogLogin, \VuFind\Controller\MyResearchController, several authentication plugins, and \VuFind\Auth\Manager (new getPreAuthenticationData method, plus a change to the login method's return type to allow null, indicating “user has only been pre-authenticated”).
The \VuFind\Auth\EmailAuthenticator's sendAuthenticationLink, authenticate, and isValidLoginRequest methods have been deprecated and will be removed in release 12.0; use sendAuthenticationCode and verifyAuthenticationCode instead.
The \VuFind\Auth\ILSAuthenticator's sendEmailLoginLink and processEmailLoginHash methods have been deprecated and will be removed in release 12.0.
Several new methods have been added to VuFind\Auth\UserSessionPersistenceInterface and its implementation in \VuFind\Db\Service\UserService to get and set verification data in various contexts.
Library card verification workflows have been rewritten in \VuFind\Controller\LibraryCardsController (new verifyOtpAction, removal of processEmailLink method and related logic).
The Auth view helper has deprecated the getPasswordRecoveryEmailTemplate method; use getPasswordRecoveryCodeEmailTemplate instead.
The \VuFind\Controller\MyResearchController::DEFAULT_RECOVERY_HASH_LIFE_TIME constant has been deprecated; use \VuFind\Auth\Manager::DEFAULT_RECOVERY_HASH_LIFE_TIME (or, when more appropriate, the \VuFind\Auth\Manager::getRecoveryHashLifeTime method) instead.
The
Navigation helper plugins
introduced in release 11.0 for building menus have been made a subclass of the new Section plugins introduced in this release. As a result, \VuFind\Navigation\PluginManager has been deprecated in favor of \VuFind\Section\Plugin\PluginManager and the AccountMenu and AdminMenu view helpers (plus their base class, AbstractMenuHelper) have been deprecated in favor of the new Section helper. If you have built a custom navigation helper, your code and configuration may need adjustment. If you rely on the menu helpers in custom templates, they should be revised before those helpers are removed in the next major release. See
pull request #4796
for details.
ILS-driven
new items search
functionality has been deprecated and will be removed in release 12.0. The Solr-driven option should be used instead. The
newilsitems
channel provider has also been deprecated. See
pull request #5051
for details.
The \VuFind\Navigation\AccountMenu::checkUserContent() method has been changed from protected to public (see
pull request #5012
) and the constructor has had a $config argument added (see
pull request #5076
); in the unlikely event that you have locally overridden these methods, local code will require adjustment.
The host and port settings in the [LDAP] section of config.ini have been deprecated; use uri instead. The configuration upgrade tool will adjust this for you automatically.
The \VuFind\Mailer\Factory class has been deprecated, replaced by \VuFind\Mailer\MailerFactory. The old class still exists but will be removed in 12.0; please update your configurations if you are using it.
The RecordLinker view helper will no longer reset its internally-stored results object to null through its __invoke method; if you intend to reset the stored object, use the new
resetStoredResults
method. See
pull request #4980
for details.
Support for the new
@parent_config_name
directive required minor signature changes to protected methods of the \VuFind\Config\YamlReader. In the unlikely situation that you have overridden these, adjustments may be needed. See
pull request #4930
for details.
The Alma driver's makeRequest method has been adjusted to no longer accept full URLs in the $path parameter for consistency with documentation; in the very unlikely event that you used the undocumented full
URL
support in local code, adjustments may be needed.
The
status_transit
language string has been moved to
HoldingStatus::transit
and replaced with an alias; this is currently only used by the Alma driver, but if you have overridden it in a local language file, moving the string is recommended (though it should continue to work as-is).
The js-cookie library has been upgraded to the latest version, and the code is now being loaded from a minified file; if you have custom code loading js.cookie.js, please use js.cookie.min.js instead. See
pull request #5154
for details.
\VuFind\Cover\Loader::getCachePath() no longer creates directories as a side effect; see
pull request #4830
for details.
Some factories have been deprecated in favor of using the new AutowiringFactory; they will be removed in the next release:
\VuFind\OAuth2\Repository\RepositoryWithOAuth2ConfigFactory
\VuFind\OAuth2\Repository\TokenRepositoryFactory
Resources:
Release 11.1.0 Pull Requests
Release 11.1.0 JIRA Tickets
Release 11.0.3 - currently in development
Minor bug fix release.
The signature of the protected \VuFindSearch\Backend\Solr\QueryBuilder::getNormalizedQueryString() method is changed in this release to address a bug. In the very unlikely situation that you rely on this method in custom code, changes will be needed. See
pull request #5181
Release 11.0.2 - 23 Mar 2026
Minor bug fix release.
This release reintroduces the
@include
directive in .ini files (which was lost in 11.0.0 as a result of the removal of laminas-config). The new version of the feature does not support the “section.value” key syntax but should restore the basic functionality used in common use cases. See
pull request #5139
for details.
Release 11.0.1 - 19 Jan 2026
Minor bug fix release.
Possible backward compatibility breaks:
As part of a bug fix, some minor changes were made to the audit logging feature added in 11.0.0: the type of the data property (and related signatures in getData/setData) of AuditEventEntityInterface was changed from string to array, and a new $intermediateMethods parameter was added to the addPaymentEvent and getCallerOfParentMethod methods of AuditEventService. See
pull request #4912
for details. It is also important to run the
database upgrade process
after upgrading if you have already begun logging data.
New item search logic has been slightly refactored to address a significant bug; see
pull request #4956
for details.
Logic that normalized “fancy quotes” to “straight quotes” in user input has been removed from the project, as it was causing problems with retrieval of records using French quotes in titles and its benefits were unclear. See
pull request #4908
for details.
Resources:
Release 11.0.1 Pull Requests
Release 11.0.1 JIRA Tickets
Release 11.0.0 - 24 Nov 2025
New features:
Users can now pay their fines through the
online payment
system (when using a compatible ILS driver and a supported payment service).
New search backend: support for integration with the
ProQuest Federated Search Gateway
. See the
third-party content page
and
pull request #3991
for details.
A new section of the user account area allows users to review and bulk-delete their comments, ratings and tags. See
pull request #4323
for details.
The new log_audit_events setting in config.ini can be used to log important events (such as ILS requests or login attempts) to the database. This can be helpful for security monitoring or debugging/troubleshooting. While the feature is activated, the new expire_audit_events
command line utility
should be run periodically to prevent excessive database growth.
Configurations can now be cached to improve performance; see the [ConfigCache] and related sections in config.ini for details. See
pull request #4581
for more information on the implementation details.
It is now possible to create VuFind®'s database from the command line using the install/database
command line utility
(as an optional alternative to the web-based installer, which also still works).
The introduction of
Record Data Formatter specifications plugins
makes it possible to apply different
Record Data Formatter
configurations to different
Record Drivers
The
Rate Limiter
can now optionally integrate with
CloudFlare Turnstile
to help block unwanted bot traffic; see
pull request #4079
for details.
The checkboxFacetCounts setting in facets.ini can be used to display result counts next to checkbox facets (currently only supported for Solr; currently incompatible with [CustomFilters] settings). See
pull request #4060
for details.
The system can now be configured to avoid ever displaying a public contact email address; see
pull request #3979
for details.
Subject headings in alphabetic browse now display separators between subfields; the string used as a separator can be configured using the topic_browse_separator setting in config.ini. See
pull request #4011
for details.
Permanent links on the record page can now be disabled through the permanent_link setting in the [Record] section of config.ini.
The new Channels
record tab
can be used to embed
channel content
on record pages.
Where supported by the ILS driver, ILS functionality can be temporarily disabled on a timed basis; see
pull request #4550
for details.
The EDS integration can now be connected to ILS drivers to include real-time availability status and user empowerment features within the EDS record pages. See the [Catalog] section of EDS.ini and
pull request #4385
for more details.
As an alternative to showing a “no cover image available” image, it is now possible to completely hide covers for items with no available images by setting the noCoverAvailableImage setting to false in config.ini. See
pull request #4061
for more details.
The new
Identifier Linker Plugins
(which replace the earlier
DOI Linker Plugins
) allow more flexible dynamic link loading; the BrowZine plugin now supports data retrieval by ISSN as well as DOI.
The BrowZine identifier linker plugin now supports display of “expression of concern” notices, and it optionally supports the “best available link” feature.
The
VuFind® APIs
can now be configured to use keys, which may be optional or mandatory (see
pull request #4478
).
New rate limiter options have been added (see
pull request #4063
).
Record Export to Zotero Web Library is now supported (off by default; requires additional configuration; see
pull request #4584
).
Password recovery/resetting is now possible for ILS-based authentication (when supported by the ILS driver; currently available for KohaRest and SierraRest drivers).
When using Solr-based course reserves, empty values are now represented with a message instead of a blank string for greater clarity. See
pull request #4023
for details.
Format determination in MARC record indexing now accounts for electronic serials more accurately; see
pull request #3981
for details.
The new recover_be_honest setting in config.ini controls whether the password recovery system should indicate when usernames are unrecognized, or always behave as if they are found. By default, it is “dishonest” for increased security.
The default Solr “similar record” configuration now makes better use of call numbers (including Dewey call numbers).
RSS feed links are now more configurable than before (data in record drivers can be optionally prioritized over links to record pages). See
pull request #4154
for details.
The new upgrade/config, upgrade/database and util/update_resource_metadata
command line utilities
make it possible to
perform an upgrade
without using the web-based upgrade interface (though the web-based upgrade experience is also still available, in a somewhat streamlined form).
Improved compatibility with PHP 8.4.
Possible backward compatibility breaks:
VuFind® 11.0 drops upgrade support for VuFind® 9.x and earlier. You must upgrade to the latest 10.x release before attempting to upgrade to 11.0. The 10.x series of releases contains tools that will help you adjust your local code and templates to prepare for the changes introduced in 11.0, so upgrading there first will make the overall upgrade project easier to manage and will allow some necessary changes to be accomplished in stages.
The minimum PHP version requirement has been raised to 8.2; please be sure your environment is running a compatible version before upgrading.
The Laminas\Db database abstraction layer has been removed and replaced with
Doctrine
. Any code referencing the \VuFind\Db\Row or \VuFind\Db\Table classes will need to be updated to use the new \VuFind\Db\Entity and \VuFind\Db\Service namespaces instead. If your code has already been updated to reflect the refactoring in release 10.0, then the most significant change is that low-level database calls should need to be updated to use the new Doctrine-based mechanisms. See
pull request #2233
for many examples of migrating from Laminas\Db to Doctrine; necessary local changes will likely be structured similarly to these core updates.
The bootstrap3, bootprint3 and sandal themes have been removed. If your local theme inherits from one of the removed themes, please upgrade to 10.1.x and use the included migration tools to port your templates to a bootstrap5 or sandal5 base before upgrading to release 11.0. See the
Bootstrap 5 page
for more details.
The Bootstrap 3 compatibility layer has been removed from all themes. If your local theme depends on Bootstrap 3-specific markup, please upgrade to 10.1.x first and apply the required changes to eliminate the need for the compatibility layer first before upgrading to release 11.0. See the
compatibility layer section on the Bootstrap 5 page
for more information.
A full reindex of the Solr index (including course reserves, when applicable) and alphabetic browse index is required to take advantage of changes to the schema and indexing rules. See the
index schema changelog
for details.
Due to the docValues changes in
pull request #4825
, it may be helpful to reduce Java heap size and leave more memory free for the operating system cache, since the memory and performance characteristics of some Solr operations will be different following the upgrade. Local edits to schema files may also need minor adjustments due to the version change.
FOLIO users who harvest MARC via OAI-PMH may wish to add
callnumber-label = custom, getCallNumberLabels(050a:082a:083a:090a:952e)
to their marc_local.properties import rules to take full advantage of improved call number analysis. See
pull request #4119
for details.
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
Support for MySQL 5 has been dropped, as the 5.x line is no longer supported by the community; please ensure you are using MySQL 8 or higher.
Due to divergence between MariaDB and MySQL, the config.ini database configuration now supports separate settings for each database. If you are using MariaDB, please change
mysql
to
mariadb
in your config.ini database connection string or database_driver setting. This is especially important if you use SolrMarc to import records with
change tracking
enabled. See
pull request #4108
for details.
Due to changes in the laminas-view library, the project's custom asset-related view helpers have been replaced by the AssetManager helper. Any local custom subclasses of the
inlineScript
headLink
headScript
, and
footScript
helpers will need to be refactored. Most uses of these helpers in templates must be revised to use the AssetManager instead, as described in the changelog notes for release 10.2 below. See
pull request #4213
for more details.
The laminas-config library has been abandoned, so logic related to it has been revised.
A new local class called \VuFind\Config\Config has been added to replace \Laminas\Config\Config. This provides mostly-equivalent functionality, but Config objects are now always immutable. It is strongly recommended to use arrays for configuration in new code instead of Config objects, and object-based configuration logic will be gradually phased out. In the meantime, though, for backward-compatibility, simply replacing \Laminas\Config\Config with \VuFind\Config\Config should work in most situations.
\VuFind\Controller\AbstractBase::getConfig() has been deprecated in favor of getConfigArray(). All calls to the old method have been revised to use the new one. Several controller methods with Config objects in their signatures have been revised to use arrays instead; see
pull request #4722
for details.
The \VuFind\Config\Reader\CacheDecorator class has been deleted. This class never appears to have been used in the core code, and was introduced early in project development. If you use it for some reason, you will need to find a local replacement.
The \VuFind\Config\Feature\IniReaderTrait has been removed. If you need to read an ini file, just call parse_ini_file directly; see
pull request #4139
for details.
The
@include
directive was a native feature of laminas-config and is no longer supported. It is reintroduced as a VuFind® feature in release 11.0.2; see
VUFIND-1815
The laminas-crypt library has been abandoned, so encryption logic has been rewritten (see
pull request #4089
for details. This has a few consequences:
Custom code relying on classes in the Laminas\Crypt namespace must be revised.
Several classes have had constructor signature changes: VuFind\Auth\ILSAuthenticator, VuFind\Session\SecureDelegator, and VuFindConsole\Command\SwitchDbHashCommand.
Validation hash generation in laminas-crypt was implemented differently than the standard PHP method. There is now a legacyPbkdf2 setting in config.ini that controls whether the legacy Laminas algorithm is used (for backward compatibility) or the current PHP algorithm is used (for forward compatibility). It currently defaults to the legacy setting, but it is strongly recommend, once migration is complete, that you switch it to “false” and use the util/switch_db_hash
command line utility
to convert your existing data. Legacy support will be dropped in release 12.0.
The laminas-log library has been abandoned, so logging logic has been rewritten to use monolog (see
pull request #4429
).
All references to \Laminas\Log\LoggerAwareInterface have been replaced with \Psr\Log\LoggerAwareInterface.
\Laminas\Log\Logger level constants have been replaced with \Psr\Log\LogLevel constants.
All \VuFind\Log\Writer classes have been replaced with equivalent \VuFind\Log\Handler classes.
\VuFind\Log\Logger and \VuFind\Log\LoggerFactory have been completely rewritten.
Short-named logging methods (e.g. err() instead of error()) have been deprecated – use the full-length method names when logging at specific levels.
Because the laminas-http library is not fully compliant with modern PHP standards, work has begun to replace it with the Guzzle library. For now, both HTTP libraries are available in VuFind®, but using Guzzle is recommended for new code, and old code will be gradually transitioned. Here are some changes that are already included in this release:
\VuFind\Http\CachingDownloader now uses \Psr\Http\Message\ResponseInterface instead of \Laminas\Http\Response as the type of its first parameter on decoding callback functions (impacting \VuFind\Content\Covers\Google). The class also uses Guzzle internally instead of laminas-http.
\VuFind\Exception\HttpDownloadException now uses a simple array to represent headers instead of a \Laminas\Http\Headers object.
A new VuFind\Config\ConfigManager class has been introduced to handle configuration loading; it replaces and expands upon the functionality previously found in VuFind\Config\PluginFactory and fully replaces VuFind\Config\PluginManager. For this release, the PluginManager is still included for backward-compatibility, but it is deprecated and will be removed in 12.0. See
pull request #4371
for details.
A ConfigManagerInterface has been introduced (in
pull request #4589
) to facilitate the move from the PluginManager to the ConfigManager. Both classes currently implement this interface and can be used interchangeably.
Several classes which previously included the PluginManager in their constructor/method signatures have been updated to use ConfigManagerInterface instead:
\VuFind\Autocomplete\Suggester
\VuFind\ContentBlock\BlockLoader and \VuFind\ContentBlock\FacetList
\VuFind\Controller\CartController and \VuFind\Controller\MyResearchController
\VuFind\GeoFeatures\AbstractConfig and its subclasses
\VuFind\Http\CachingDownloader
\VuFind\ILS\Connection
\VuFind\ILS\Driver\AbstractMultiDriver and \VuFind\ILS\Driver\MultiBackend
\VuFind\Recommend\AbstractSearchObject, \VuFind\Recommend\AbstractFacets, \VuFind\Recommend\Databases, \VuFind\Recommend\ExpandFacets, \VuFind\Recommend\FavoriteFacets, \VuFind\Recommend\RecommendLinks and \VuFind\Recommend\SideFacets
\VuFind\RecordTab\TabManager
\VuFind\Related\Bookplate
\VuFind\Role\DynamicRoleProviderFactory
\VuFind\Search\Base\FacetCache
\VuFind\Search\Base\Options and relevant subclasses (Blender, BrowZine, Combined, EDS, EIT, EPF, Favorites, LibGuides, Pazpar2, Primo, ProQuestFSG, Search2, Solr, SolrAuth, SolrAuthor, SolrAuthorFacets, SolrCollection, SolrReserves, SolrWeb, Summon, Tags, WorldCat2)
\VuFind\Search\Base\Params and relevant subclasses (Blender, EDS, Solr, SolrCollection, Summon)
\VuFind\View\Helper\Root\BulkAction, \VuFind\View\Helper\Root\Config, \VuFind\View\Helper\Root\Related
The \VuFind\Controller\Feature\BulkActionControllerTrait and \VuFind\Feature\BulkActionTrait traits used in bulk action processing now expect a $this->configManager property instead of $this->configLoader for consistency; see
pull request #4612
for details.
The laminas-loader library has been abandoned, so logic relying on it has been revised.
Local code modules should no longer include a
getAutoloaderConfig()
method. Instead, module autoloading should be configured through the
autoload
section of composer.json or composer.local.json. New modules created with the
install.php
command line tool will automatically update composer.local.json. For existing modules, manual updates are recommended. See
pull request #4146
for examples of how to convert Module.php code into composer.json configuration.
The Laminas module manager has been reconfigured to disable laminas-loader behavior; see
pull request #4710
for details.
The LmcRbacMvc module has been upgraded to version 4, which includes some breaking changes (new namespaces, etc.). Local code leveraging this component may need adjustment. See
pull request #4506
for details.
Channels functionality has been significantly revised to eliminate its dependency on the obsolete Slick carousel library and to add more flexibility. Signatures have changed for the constructor of \VuFind\ChannelProvider\ChannelLoader and the \VuFind\ChannelProvider\ChannelProviderInterface::configureSearchParams() method. The channelSize setting in channels.ini has been replaced by itemsPerRow, rowsPerPage and maxBatchSize. Customizations to the configuration and front-end code will likely need adjustments. See
pull request #4557
for details.
The SimilarItemsCarousel record tab has been removed and replaced by the new Channels record tab. The Channels tab is set up by default to display only similar items, but it can be reconfigured to more flexibly display other content. This eliminates carousels from the interface, improving accessibility. If you have customized the SimilarItemsCarousel tab, you will need to reimplement your changes against the Channels tab.
Breadcrumb trail generation is now handled through a Breadcrumbs view helper instead of through direct manipulation of the Layout object. The helper is backward-compatible with direct manipulation, but local templates should be revised to use the helper in case of future refactoring, and to ensure consistent breadcrumb formatting. Breadcrumbs can also be globally styled using new templates in the Helpers/breadcrumbs directory. See
pull request #4236
for details.
The code for date sliders in the user interface has been completely revised for improved accessibility and forward-compatibility. The old bootstrap-slider library has been replaced with
noUiSlider
, and Javascript/template code has been rewritten. If you have customized this code or utilize custom sliders in your local theme, adjustments will be needed. See
pull request #4238
for details.
The legacy error listener designed for compatibility with Solr 3 has been dropped, and the remaining error listener has been renamed from \VuFind\Search\Solr\V4\ErrorListener to \VuFind\Search\Solr\ErrorListener. If you have custom Solr error listener code, minor adjustments may be needed; see
pull request #4286
for details.
The \Laminas\I18n\Translator\TranslatorInterface has been deprecated in favor of \Laminas\Translator\TranslatorInterface. All references to the old interface have been replaced with either the new interface or the \Laminas\Mvc\I18n\Translator class, depending on whether the code refers only to interface methods or also depends on methods that only exist in the concrete class. If any of your local code references the old interface, it should be updated accordingly; see
pull request #4168
for details.
The PubDateVisAjax recommendation module has been completely rewritten to use more modern technology and the outdated jquery.flot Javascript library has been removed. If you have locally customized the style or code of this component, you will likely need to make adjustments. Configuration settings remain backward-compatible. See
pull request #4275
for details.
ViewOptionsTrait::initViewOptions() and several protected methods in Search Options objects have been revised to accept arrays instead of Config objects. If you have customized Options initialization in a local subclass, minor adjustments may be needed; see
pull request #4353
for details.
The Helpers/star-rating.phtml template has been moved to _ui/components/star-rating.phtml, and displays of star ratings in the code have been adjusted to use the Component view helper. If you have customized star ratings, minor adjustments will be needed; see
pull request #4317
Types on implicitly nullable arguments have been adjusted for forward-compatibility with PHP 8.4; this is particularly common in factory code (
array $options = null
becomes
?array $options = null
). Local code should be adjusted to match. The php-cs-fixer tool can help with automatic fixes. See
pull request #4140
for more details.
Extended
HTML
escaping of attributes has been made configurable via the
extendedHtmlAttributeEscaping
setting in config.ini. This setting now defaults to false, which improves performance,
HTML
readability and file size. However, if you have any unquoted
HTML
attributes in local templates, you should either quote them or change the setting to true to ensure security. See
pull request #4009
Item status display code has been significantly refactored to use templating instead of
HTML
generation in Javascript and to allow prioritization of statuses; the “true” and “false” status values previously returned by \VuFind\ILS\Logic\AvailabilityStatus::availabilityAsString() have been replaced with the more descriptive 'available' and 'unavailable'. See
pull request #3758
User account status alerts have been refactored to use more server-side rendering to simplify theme customization. This required constructor signature changes to several AJAX handlers in the \VuFind\AjaxHandler namespace (GetUserFines, GetUserHolds, GetUserILLRequests, GetUserStorageRetrievalRequests, GetUserTransactions). If you have customized any of these classes or the account_ajax.js script in your theme, you should review
pull request #4175
and make adjustments.
The SRU retrieval logic has been significantly revised in
pull request #3991
; this code was originally used by the WorldCat v1 backend that was removed in release 10.1.1, and it has now been repurposed to better support the new ProQuest Federated Search Gateway backend. If you have a custom SRU-based backend derived from \VuFindSearch\Backend\SRU\Connector, adjustments may be needed.
Some minor breaking changes have been made to the VuFindTheme module (see
pull request #4158
for full details).
The VuFindTheme\Mobile::enable() and enabled() methods have been removed, as they were only used in one place (VuFindTheme\Initializer) and they reduced the clarity of the code.
VuFindTheme\Initializer has had the pickTheme method replaced by getSelectedUI, and has signature changes to getThemeOptions() and sendThemeOptionsToView(), to improve the clarity of theme determination.
The AccountMenu.yaml configuration file has been revised to support multiple sections; related adjustments have been made to the associated view helper and templates. While changes are designed to be as backward-compatible as possible, if you have customized any part of the account menu, you are strongly encouraged to bring your custom configurations and/or code up to date to take advantage of new settings and ensure future compatibility. See
pull request #4006
for details.
All setters on interfaces in the \VuFind\Db\Entity namespace have been changed to use a
static
return type instead of the explicit name of the interface for more accurate typing.
The abandoned laminas-mail library has been replaced with symfony-mailer; this has led to some changes to the \VuFind\Mailer\Mailer class and related code. \VuFind\Mailer\Mailer::getNewBlankMessage() has been deprecated. Custom email-related code may need adjustment. See
pull request #3975
To better centralize cookie handling, the getCookie*() methods of \VuFind\Cart have been removed along with corresponding logic in cart.js and layout.phtml in the theme; a new CookieManager view helper has been introduced which provides direct access to cookie data independently of the cart code. See
pull request #3941
for details.
Support for the PHP memcache extension has been deprecated in favor of the better-supported/better-maintained memcached extension and will be removed in the next release. If you use the Memcache session handler, you should change your memcache_client setting in config.ini to Memcached (and be sure to flush your cache due to inconsistencies between the connectors).
Templates related to list pagination have been improved and refactored; if you have customized pagination anywhere, adjustments may be needed. See
pull request #4074
for details.
The
DOI Linker Plugins
system has been fully replaced by a more flexible
Identifier Linker Plugins
system. If you have built a custom DOI plugin, you will need to revise it as an Identifier Linker plugin. If you have customized aspects of the system, such as the DoiLookup AJAX handler, the Doi view helper, or the doi.js script, the Identifier Linker equivalents will need to be adjusted instead. See
pull request #3918
for full details on changes.
The
.checkboxFilter
CSS
class has been renamed
.checkbox-filters
for clarity. If you have custom templates or styles related to this class, they will need adjustment. See
pull request #4058
for details.
The signature of \VuFind\Db\Service\SearchServiceInterface::getSearches() has changed to allow a null $sessionId value to be passed.
Some code related to authentication handlers has been refactored.
The constructor signature of \VuFind\Auth\Database has changed to accommodate new password hashing functionality.
The \VuFind\Auth\Manager has had types added to its methods and properties; local subclasses may need minor adjustments to match.
Some authentication handler methods have been renamed and revised:
resetState
and
logout
have been replaced by
clearLoginState
and
getLogoutRedirectUrl
. Custom handler code implementing these methods will need to be adjusted (see
pull request #4325
).
The
hasSessionInitiator
method has been added, and the return type of
getSessionInitiator
has been adjusted to return
null
instead of
false
when inapplicable. See
pull request #4384
A \VuFind\Auth\AuthInterface has been introduced, so it is now possible to create authentication handlers without being required to extend \VuFind\Auth\AbstractBase.
The deprecated \VuFind\Auth\Manager::isLoggedIn method has been removed.
The signature of \VuFindSearch\Backend\Solr\Backend::terms() has been updated to include explicit types. In the unlikely situation that you have extended this method, adjustments will be needed. See
pull request #3885
The VuFind\Export class has had types added to all of its methods and more significant signature changes to its constructor and getBulkUrl method. In the unlikely event that you use a custom subclass, adjustments may be needed. See
pull request #4457
All resultScrollerActive() controller methods have been removed, replaced by calls to \VuFind\Search\Options\Base::resultScrollerActive(). It should not have been necessary to customize this behavior in local code, since it is configurable via .ini files, but in the unlikely event that you have local dependencies on it, refactoring will be needed. See
pull request #4196
The array format returned by \VuFind\Search\Base\Options::getHiddenSortOptions() has changed from an array of strings to an array of associative pattern/label arrays. In the unlikely event that you call this method from local code, adjustments will be needed. See
pull request #4252
for details.
Constructor and method signatures in the linkify view helper have changed to support a new feature (excluding email linking); in the unlikely event that you have a custom subclass, adjustments will be needed. See
pull request #4259
The \VuFind\Controller\Plugin\DbUpgrade class has been removed; database updates are now handled using a simpler migration-based system. See
pull request #4313
The PHP-based util/scssBuilder command line tool has been disabled; use
npm run build:css
instead.
The AddThis view helper and associated code has been removed, as the service was discontinued in 2023 and can no longer be used. If you have local templates referring to $this->addThis(), the references will need to be removed. See
pull request #4290
for details.
The unused getView() methods have been removed from \VuFind\Search\EDS\Options and \VuFind\Search\EPF\Options. See
pull request #4329
Use of legacy record tab configuration (in module.config.php instead of RecordTabs.ini) has been deprecated and will trigger a warning; please update your configuration if necessary.
Types have been added to all method signatures in \VuFind\RecordTab\TabManager; subclasses will need to be updated to match.
Some changes have been made to support password recovery more flexibly (see
pull request #4332
), which may require adjustments to local customizations:
Method signatures have changed for \VuFind\Auth\AbstractBase::getPasswordPolicy(), \VuFind\Auth\AbstractBase::supportsPasswordRecovery() and \VuFind\Auth\AbstractBase::validatePasswordAgainstPolicy().
The Email/recover-password.phtml template has been moved to Auth/Database/recovery-email.phtml.
The default value of the recover_hash_lifetime setting in config.ini has been reduced from two weeks to one hour for greater security; if you have not already locally customized it, you should consider adjusting it now.
The FOLIO ILS driver's getAllowedServicePoints() method has been changed from public to protected and has an expanded signature. Custom code using or overriding this method will need to be adjusted. See
pull request #4379
The FOLIO ILS driver's status/holdings retrieval logic has been significantly rewritten to improve performance. Local custom subclasses may need adjustment. See
pull request #4539
(the initial implementation) and
#4740
(a bug fix addressing bound-with problems) for details.
There have been some signature changes to \VuFind\OAuth2\Entity\ScopeEntity and \VuFind\View\Helper\Root\RecordDataFormatter\SpecBuilder in order to add types and introduce fluent interfaces; see
pull request #4312
and
pull request #4449
for details.
\VuFind\RecordDriver\EDS has had its (apparently unused) getItemsAbstract method removed and has had some of its internals adjusted to better support
record data formatter
integration. Custom subclasses may need adjustment; see
pull request #4240
for details.
The \VuFind\Search\EDS\Options::getEdsView() and \VuFind\Search\EPF\Options::getEpfView() methods have been removed in favor of a shared \VuFind\Search\EDS\AbstractEDSOptions::getEbscoView() method. In the unlikely event that you have custom code relying on these methods, it will need to be adjusted. See
pull request #4328
The \VuFind\Config\Upgrade class has been modernized and simplified, removing support for 1.x-style upgrades, adding types to all method signatures, and changing the constructor signature. In the unlikely situation that you have customized the class or are using it in a non-standard way, adjustments will be needed. See
pull request #4470
and
pull request #4589
for details.
The \VuFind\Cache\Manager class has had its constructor signature and factory changed to support new configuration caching features; see
pull request #4581
for details.
The \VuFind\Auth\ILSAuthenticator class has had types and optional arguments added to its newCatalogLogin() and sendEmailLoginLink() methods; in the unlikely event that you have created a local subclass to override these methods, adjustments will be needed.
To eliminate time zone inconsistencies in OAI-PMH resumption token expiration dates, the OaiResumptionServiceInterface::createAndPersistToken() signature has been changed. After this upgrade, token expirations for legacy tokens may be shortened or lengthened by a few hours depending on your time zone's distance from UTC; however, this is unlikely to cause significant disruptions, and expirations will be consistent going forward. See
pull request #4620
for details.
Management of metadata in the resource database table has been improved, with a few significant changes:
The constructor signature of \VuFind\Record\ResourcePopulator has changed
The metadata update step of the web-based upgrade process has been removed and replaced with a new util/update_resource_metadata
command line tool
The public methods of \VuFind\View\Helper\Root\Related have had types added to their signatures.
The Booksite cover and review plugins have been removed, as the service no longer exists; existing configurations will be ignored and should be removed. See
pull request #4736
for more details.
CAS authentication support has been deprecated due to the end of support for the
apereo/phpCAS library
. CAS servers should also support OpenIDConnect, so it is recommended to switch to that method. Due to compatibility issues with PHP 8.4, apereo/phpCAS is no longer installed by default, but it can be added to your composer.local.json to continue using CAS in release 11.x. Support will be fully removed in release 12.0, unless the necessary library receives updates before that time. See
pull request #4813
Support for SyndeticsPlus has been removed, as the vendor no longer supports the service; SyndeticsPlus configurations will be automatically adjusted to plain Syndetics. Additionally, several obsolete configuration settings have been removed from config.ini, the constructor signatures and factories for Syndetics-related content handlers have been adjusted, and the SyndeticsPlus view helper has been removed. See
pull request #4791
for details.
Deprecated code from earlier versions has been removed.
The isLoggedIn() method has been removed from the Auth view helper and \VuFind\Auth\Manager. (see
pull request #4490
).
Record drivers no longer support the addTags() and removeTags() methods (see
pull request #4491
).
The static \VuFind\Config\Locator class has been removed; the \VuFind\Config\PathResolver should be used instead. This change necessitated changes to constructor signatures so that they now require PathResolver, sometimes with reordered arguments, for \VuFind\Config\SearchSpecsReader, \VuFind\Config\YamlReader, \VuFind\ILS\Driver\XCNCIP2, \VuFind\RecordTab\Map, \VuFindConsole\Command\Harvest\HarvestOaiCommand, \VuFindConsole\Command\Util\SwitchDbHashCommand and \VuFindTheme\ThemeGenerator.
The obsolete Figlets CAPTCHA option has been removed (see
pull request #4487
).
The obsolete CspNonce view helper has been removed (see
pull request #4488
).
\VuFind\Security\CspHeaderGenerator::getHeader() has been removed (see
pull request #4492
).
The phoneNumberFormHandler Javascript function has been removed as part of the work to upgrade to a modern version of libphonenumber-js (see
pull request #4486
).
The legacy Primo connector has been removed; the REST
API
is now the only connection option. See
pull request #4493
for details.
The alphabetic browse jar files have been rebuilt with some deprecated functionality removed.
\VuFind\Search\Base\Options::supportsFirstLastNavigation() has been removed in favor of the more granular recordFirstLastNavigationEnabled() method.
\VuFindSearch\Backend\EDS\Base::retrieve() has been removed (and some remaining code that was still using it in the EDS backend has been refactored to use the appropriate retrieveEdsItem/retrieveEpfItem methods instead). See
pull request #4714
The default [TopRecommendations] settings for Solr Author searches in searches.ini have been changed to prevent user confusion; Author searches will no longer display different top recommendations than other types of searches. If you want to retain the Author-specific behavior, you can uncomment the example lines in the file. See
pull request #4229
for details.
SolrMarc configuration loading logic has been simplified to eliminate loading of VuFind® 1.x-style configurations. It is very unlikely that this will affect any current users of modern releases. See
pull request #4234
ILS drivers have been updated to use the new createPatronArray() and createProfileArray() helper methods in \VuFind\ILS\Driver\AbstractBase to standardize the return formats of patronLogin() and getMyProfile(). This is not mandatory, but updating custom drivers is recommended to ensure consistency. See
pull request #4466
for details.
The toggle_dropdown translation string is no longer used and has been removed from the language files. If you use this string in local templates, you should copy it into your local language files prior to upgrading.
The default thresholdTokenFrequency setting for the direct Solr spell checker has been changed to match Solr's upstream defaults, which should improve spelling suggestions when using this option. See
pull request #4873
for details.
Resources:
Release 11.0 Pull Requests
Release 11.0 JIRA Tickets
Release 11.0 Press Release
Release 11.0 Video Summary
Release 10.2.1 - 13 Oct 2025
Minor bug fix and translation improvement release.
Possible backward compatibility breaks:
The getJwk() and getJwks() methods in \VuFind\Auth\OpenIDConnect have been replaced with getSignatureJwk() and getSignatureJwks() to fix a bug involving inappropriate key usage. This backward compatibility break is intentional since the previous methods were not always behaving appropriately; in the very unlikely event that you have custom code that relies on the old methods, revisions will be necessary. See
pull request #4683
for details.
The language key “An error occurred during execution; please try again later.” has been changed to “An error occurred during execution_3B please try again later.” in order to address a parsing issue. If you have locally overridden this string, you will need to adjust your custom language file.
Release 10.2.0 - 23 Jun 2025
New features:
Open ID Connect is now supported as an
authentication option
An
interactive menu for command line utilities
has been added to make tools more accessible to less-experienced users.
Record permanent links can now be disabled via config.ini (see
pull request #4106
).
Minor bug fixes, dependency updates, translation improvements and added strings.
Possible backward compatibility breaks:
Solr has been upgraded to release 9.8.1. A full reindex will be necessary.
This release introduces the
AssetManager view helper
, which will replace all use of
inlineScript
headScript
, and
footScript
as well as
CSS
-related uses of
headLink
in release 11.0. The legacy Laminas asset helpers will continue to work in this release for backward-compatibility with custom templates developed for earlier 10.x releases, but users are STRONGLY ENCOURAGED to convert their templates to use the AssetManager now, in order to simplify future upgrades to release 11.0. The list below shows some examples of common conversions you are likely to need; see
pull request #4306
for further details and examples.
Asset Type
Before
After
Header
CSS
code
$this->headStyle()->appendStyle($css)
$this->assetManager()->appendStyleString($css)
Header
CSS
URL
$this->headLink()->appendStylesheet($url)
$this->assetManager()->appendStyleLink($url)
Header Javascript code
$this->headScript()->appendScript($js)
$this->assetManager()->appendScriptString($js)
Header Javascript
URL
$this->headScript()->appendFile($url)
$this->assetManager()->appendScriptLink($url)
Inline Javascript code
$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $js, 'SET')
$this->assetManager()->outputInlineScriptString($js)
Inline Javascript
URL
$this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, $url, 'SET')
$this->assetManager()->outputInlineScriptLink($url)
The EDS search no longer supports blank search queries due to changes in the
API
. You may wish to consider locally customizing the
empty_search_disallowed
translation string to clarify the behavior for your users.
As part of database service modernization efforts, the signature of \VuFind\Controller\MyResearchController::setSavedFlagSecurely() has been changed and the \VuFind\Db\SearchServiceInterface::deleteSearch() method has been introduced. This is unlikely to significantly impact local custom code. See
pull request #4365
for details.
Several email-to-SMS gateways have been removed from the code and configuration defaults, as they are no longer available due to services being discontinued by carriers. If you have texting enabled, you should check your local configuration to be sure you are not offering options that are no longer available to your users. See
pull request #4327
for details.
The trigger_print.js script has been significantly revised to fix some printing-related bugs; if you have customized it, adjustments will be needed. See
pull request #4430
for details.
Press Release
Video Summary
Release 10.1.4 - 7 Apr 2025
Minor bug fix release.
Release 10.1.3 - 18 Mar 2025
Minor bug fix release (primarily issued to fix the configuration upgrade problem found in release 10.1.2).
Release 10.1.2 - 17 Mar 2025
Minor bug fix release.
FOLIO users with RTR authentication enabled are strongly encouraged to upgrade to this version for performance reasons.
Custom client-side Javascript form validation (used for matching field and phone number validation) has been significantly rewritten in
pull request #4227
to address the fact that the existing code did not work correctly. The obsolete and broken vendor/validator.min.js library has been removed, the phoneNumberFormHandler function in common.js has been deprecated, and a new validation.js tool has been created.
If using the web-based upgrade tool, do not enter “10.1.1” as the old version number; use “10” or “10.1” instead. Due to a bug, this can cause problems with configuration upgrade. The issue will be corrected in the next release.
Release 10.1.1 - 13 Jan 2025
Minor bug fix / translation improvement release.
This release removes WorldCat search
API
v1 logic and adds code to redirect old v1 links and content to the new v2 backend. It will be released after OCLC fully shuts down the v1
API
. Users are strongly encouraged to upgrade to release 10.1 in the meantime so they can set up the v2
API
and be ready to fully transition away from the legacy system.
The multi-select facets feature was significantly rewritten to address some bugs; see pull requests
#4081
#4087
#4091
#4099
and
#4107
for details.
To fix a bug, the constructor signature of \VuFind\Search\Base\FacetCache was adjusted; its behavior is backward-compatible, but in the very unlikely event that you have overridden this class, adjustments will be needed. See
pull request #4098
for details.
Due to discontinued support in the Laminas community, the “figlet” CAPTCHA option has been deprecated and will be removed in release 11.0. Please switch to a different option if you are currently using this.
Release 10.1 - 4 Nov 2024
New features:
A new backend has been added to support integration with OCLC's WorldCat Search v2
API
The legacy Search v1
API
will shut down at the end of 2024, so users on the old system will need to upgrade in order to continue incorporating WorldCat data into VuFind®. See WorldCat2.ini for details on configuration.
A new setting has been added to enable a control that allows multiple facets to be selected before the page reloads. This is off by default but can be switched on using the multiFacetsSelection setting in facets.ini and other backend-specific configuration files. The setting is controlled on a per-backend basis since some systems may benefit from the option while others may not. See
pull request #3761
for additional details.
New optional settings in theme.config.php can be used to make specific page elements “sticky” so that they do not scroll off the screen. See
pull request #3226
for details.
The “Recommend” ContentBlock can be used to embed recommendation modules into search home screens (as long as they can generate output without requiring search results). See
pull request #3675
The “MoreByAuthorSolr”
related record module
can load additional works created by the author of a record using the Solr index.
The “InsecureCookie” permission provider can be used to control access to functionality using cookies. Due to its simplicity, it is unsuitable for protecting sensitive content, but it can be helpful for setting custom preferences.
The “SessionKey” permission provider is a more secure alternative to “InsecureCookie” which uses values stored in the session to track permissions instead of a cookie in the user's browser.
The “newsearchitems” Channel Provider can be used to build a channel from recently-indexed Solr records when
change tracking
is enabled. See
pull request #3821
CSS
configuration in themes is now more flexible; see
pull request #3833
for details.
Some frequently-called ILS driver methods now have their values cached to improve performance; this behavior can be configured or disabled via the cacheLifeTime setting in the [Catalog] section of config.ini. See
pull request #3983
for details.
The new admin_theme setting in config.ini can be used to activate a different theme for the admin module (when it is enabled).
A new
development tool
has been added for testing permissions.
The AvailabilityStatusInterface can now carry additional status details to supplement its messages (e.g. hold transit information). See
pull request #3740
for details.
User-facing email functionality can now be disabled, if desired, using the email_action setting in config.ini.
Item status loading behavior is now configurable; status requests can be batched or made individually, and status loading can occur on visibility or on page load. Default behavior (batched requests, issued on visibility) is unchanged, but it can be adjusted through the load_batch_wise and load_observable_only settings in config.ini). See
pull request #3748
for details.
Favorites list can now be sorted by “save date” (the date when items were added to the list), and favorite sorting options can now be customized through the [List_Sorting] section of config.ini.
The web crawling tool now supports limited caching to improve performance in some circumstances and to allow fast reindexing (e.g. after upgrading Solr).
It is now possible to store many secret values (passwords, etc.) in external files instead of directly in configurations; this can be useful for containerization, among other things. See
pull request #3860
for details.
OR facet handling in EBSCO Discovery Service has been improved, and the orFacets setting in EDS.ini is now more effective; however, there are still some significant limitations due to the capabilities of the
API
. See
pull request #3822
for more details.
A new Javascript event (record-tab-init) has been added to simplify customization of logic related to record tab initialization. This is not yet used by core code (that will be added in release 11.0), but it is available early for use in custom logic. See
pull request #3837
for details.
The FOLIO ILS driver driver has some new configurable options, including the ability to display holdings records with no items, the ability to restrict pickup location based on item location, the ability to block requests based on the current loan, and improved course reserves filtering.
The KohaRest ILS driver has some new configurable options, including limiting item displays by type, including suspended holds in queue length calculations, and displaying recalls along with holds.
Possible backward compatibility breaks:
The sandal5 theme is now the default theme. The bootstrap3, bootprint3 and sandal themes have been deprecated and will be removed in release 11.0. Please update your local custom themes to extend bootstrap5 or sandal5 before the next upgrade. See
Themes Based on Bootstrap5
for details.
The minimum Node.js version for building
CSS
has been raised to 16 (though even this version is old enough to no longer be officially supported – using supported versions of components is strongly recommended!).
Some internals of check_item_statuses.js have been changed to support new settings; if you have customized this file, adjustments may be needed. See
pull request #3748
for details.
Internal storage of facets and limiters has been revised in \VuFindSearch\Backend\EDS\SearchRequestModel to better support Boolean facet operators. In the unlikely situation that you have customized this code, changes may be needed; see
pull request #3822
The RecordDataFormatter view helper has had its constructor signature changed and has had types added to all of its method signatures. If you have a custom subclass, adjustments may be needed.
The RecordDataFormatterFactory has been significantly refactored, with customization of specifications moved into
Record Data Formatter specifications plugins
. If you have a custom RecordDataFormatterFactory, you should refactor your changes to a custom plugin. Existing custom factories should continue to work in release 11.0, but backward compatibility will be removed in release 12.0.
The format of the array returned by \VuFind\View\Helper\Root\ResourceContainer::getCss() has changed. See
pull request #3833
for details.
Assignment of schema.org record types has been improved; if you have customized a record driver's core.phtml file, you should update it to use the new mechanism for forward-compatibility with the next major release, and to avoid redundant data. See
pull request #3849
for details.
FOLIO users who rely on course reserves indexing will need to add the
course-reserves-storage.terms.collection.get
permission to their FOLIO service account for compatibility with the latest code. See
pull request #3859
for details.
FOLIO users should add
circulation.requests.allowed-service-points.get
permission to their FOLIO service account to improve the efficiency and accuracy of request-placing logic. It is also strongly recommended that users review the
fallback_request_type
setting in Folio.ini and uncomment all request types that users should be allowed to place. See
pull request #4003
for details.
FOLIO users should add
circulation-storage.request-preferences.collection.get
and
addresstypes.collection.get
permissions to their service accounts to enable support for delivery fulfillment requests. See
pull request #3930
for details.
Types in the public interface of \VuFindSearch\Command\TermsCommand have been adjusted to fix a bug (lack of null support); in the very unlikely event that you extend this class, your subclass may need to be adjusted as well. See
pull request #3891
for details.
The \VuFind\ILS\Logic\AvailabilityStatusInterface has had several new methods added (setVisibilityInHoldings(), plus those found in
pull request #3740
); in the unlikely situation that you have built a custom implementation of this interface, the new methods will need to be implemented.
For improved PHP 8 compatibility, a few return types have been adjusted to eliminate ReturnTypeWillChange annotations. You may be impacted if you have a custom implementation of \VuFindSearch\Response\AbstractRecordCollection, \VuFind\Session\AbstractBase, or \VuFind\Db\Service\SessionServiceInterface. This is most likely to impact you if you have customized code related to session garbage collection. See
pull request #3835
for full details.
KohaRest users with local custom driver subclasses should be aware that the signature and return format of the internal VuFind\ILS\Driver\KohaRest::getItemStatusesForBiblio() method have changed. If they use or override this method, adjustments may be needed. See
pull request #3839
for details.
The “sort_year asc” translation string has been renamed to “sort_year_asc” for consistency; if you have customized this string, you will need to adjust the key in your custom language file. The legacy string is still supported as an alias, so existing references to it will continue working.
The constructor signature for \VuFind\Auth\EmailAuthenticator has changed to use \VuFind\Net\UserIpReader instead of \Laminas\Http\PhpEnvironment\RemoteAddress for more accurate user IP detection. In the unlikely event that you have extended this service locally, minor adjustments may be needed. See
pull request #4049
for details.
The local_theme_example theme has been rebuilt on bootstrap5 instead of bootstrap3, so the
theme generator
will now create modern themes. If you have a theme based on an older version of local_theme_example (e.g. created with the theme generator in an earlier release), you should modernize it before the bootstrap3 theme is removed. See
pull request #3912
for details of the changes.
Some non-standard EDS record driver methods/behaviors have been normalized; the getItemsSubjects() method has been replaced with getAllSubjectHeadingsFlattened(), and the getCleanDOI() method has been fixed to ensure that it returns a DOI and not an
HTML
snippet. If you relied on this non-standard code in local customizations, adjustments may be needed. See
pull request #3954
for details.
A minor order of operations adjustment in the Solr query builder allows DismaxMunge transformations to be applied before standard query normalization for greater flexibility; see
pull request #3932
for details.
The \VuFind\Role\PermissionProvider\PluginManager now has its own factory and can be accessed as a standard top-level service; the \VuFind\Role\DynamicRoleProviderFactory has been adjusted accordingly. See
pull request #3882
for details.
The default display of authors in EBSCO Discovery Service search results has been adjusted, but the legacy behavior can be restored through the [AuthorDisplay] section of EDS.ini. See
pull request #3841
for details.
The \VuFind\View\Helper\Root\ResourceContainer::dynamicallyParsed() method has been removed; it should have been deprecated in an earlier release and was no longer used.
The orFacets setting under [Advanced_Facet_Settings] has been removed from EDS.ini, as it had no effect there.
Press Release
Video Summary
Release 10.0.1 - 14 Oct 2024
Minor bug fix / translation improvement release.
\VuFind\ILS\Logic\AvailabilityStatusInterface has had a getPriority() method added to address an oversight; if you have a custom class implementing this interface, adjustments may be needed. See
pull request #3869
\VuFind\Search\Memory::getSearchById() has been changed from protected to public in support of a bug fix. In the unlikely situation that you have a subclass customizing this method, adjustments will be needed. See
pull request #3557
Release 10.0 - 24 Jun 2024
New features:
New bootstrap5 and sandal5 themes have been added, upgrading from Bootstrap3 to Bootstrap5; these themes are currently considered BETA until release 10.1. See
Themes Based on Bootstrap5
for details.
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
pull request #2929
Persistent logins
(“remember me” functionality) can now be optionally enabled.
Flexible rate limiting support is now available to prevent abuse/overuse of the system; see
pull request #3637
for details.
An optional “explain” feature can now be enabled in Solr-based search backends to visually explain relevance ranking of individual search results; see
pull request #3069
for details.
On-screen virtual keyboards can now be enabled through searchbox.ini if needed; see
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
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
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
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
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
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
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
pull request #3034
for details.
There is now an option to use Solr's “direct” spellchecker instead of the index-based spellchecker; see the dictionaries setting in the [Spelling] section of config.ini (and
pull request #3547
) for more details.
Table of contents loading now supports the Obalkyknih.cz service.
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
pull request #3237
for details.
The new
Composed ILS driver
can be used to pull together functionality from multiple drivers to represent a single system. See
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
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
ezproxy-url-checker
; see
pull request #3199
for details.
The
RecordDataFormatter
now supports a dataMethodParams configuration option which can be used to pass arguments to the dataMethod. See
pull request #3189
The
RecordDataFormatter
can now be configured via RecordDataFormatter.ini, allowing customization of record views without code changes. See
pull request #3193
The Primo module now supports display of citation/cited-by lists for eligible records.
There is now a contentsecuritypolicy.ini section for enabling NEL (Network Error Logging) headers. See
pull request #3593
for details.
Deep searching within nested collections can now be enabled with some extra indexing and the new search_container_id_field setting. See the
Hierarchies and Collections
page and
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
pull request #3249
for details.
Language names are now internationalized by default (in facets and record displays); see
pull request #3200
for details.
Embedded schema.org metadata can now be disabled if not wanted (see the includeSchemaOrgMetadata setting in config.ini, and
pull request #3634
).
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
index schema changelog
for details.
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
Themes are currently evolving due to the need to upgrade outdated technologies; please begin to plan accordingly. Here is the timeline:
In this release, the default theme has been changed from bootprint3 to sandal; new bootstrap5 and sandal5 beta themes have been added, so users can begin to migrate their local themes from bootstrap3 to bootstrap5.
In release 10.1, the bootstrap5 and sandal5 themes will be promoted out of “beta” status, and sandal5 will become the new default. The bootstrap3, bootprint3 and sandal themes will be deprecated.
In release 11.0, the bootstrap3 family of themes will be removed.
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
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.
ILS availability status handling has been refactored to the \VuFind\ILS\Logic\AvailabilityStatus and \VuFind\ILS\Logic\AvailabilityStatusManager classes. This has led to significant changes to \VuFind\AjaxHandler\GetItemStatuses (new constructor signature, several revised protected methods) and to availability-related templates (in particular, the 'availability' key returned in holdings arrays is now an AvailabilityStatus object instead of a boolean value). See
pull request #3585
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
pull request #3537
for details.
Adjustments have been made to both code and configuration to support changing standards around Content Security Policy violation reporting. If you use the report-to[] setting in contentsecuritypolicy.ini, adjustments will be needed. Additionally, the \VuFind\Security\CspHeaderGenerator::getHeader() method has been deprecated. See
pull request #3591
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
pull request #3358
for details.
The \VuFind\Tags class has been deprecated and replaced by \VuFind\Tags\TagsService for better consistency with other similarly-named services. See
pull request #3791
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
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
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
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
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
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
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
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
pull request #2941
and adjust it accordingly.
Checking for library card support has been refactored to the \VuFind\Config\AccountCapabilities class, requiring changes to the constructor and internals of that class as well as the constructor of the \VuFind\Db\Row\User class. See
pull request #3629
for details.
\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
persistent logins
The protected updateUser() method now has a required second argument; see
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
pull request #3239
for details.
All code touching the database has been refactored and reorganized for greater clarity and to simplify future database library upgrades.
All \VuFind\RecordDriver\AbstractBase methods that access database tables have been deprecated in favor of database service or Record view helper access.
The \VuFind\Db\Entity namespace has been introduced, containing interfaces representing all data retrieved from the database. Typehints referring to \VuFind\Db\Row classes have been updated to use the entity interfaces instead, to make code more platform-agnostic. For example, many constructors and methods with \VuFind\Db\Row\User typehints have been updated to use the new \VuFind\Db\Entity\UserEntityInterface instead. See
pull request #3478
pull request #3500
and
pull request #3605
for details.
The constructor signature of \VuFind\Auth\Manager has been revised to use generic interfaces instead of Laminas-specific dependencies; see
pull request #3636
for details.
All authentication plugins have been updated to use entity interfaces (see
pull request #3625
).
The constructor signatures of \VuFind\ChannelProvider\ListItems and \VuFind\Search\Favorites\Results have changed. See
pull request #3701
for details.
More list and favorite-related logic has been moved into \VuFind\Favorites\FavoritesService (leading to constructor changes and added/renamed methods), and \VuFind\Controller\Plugin\Favorites has been deprecated. This work also led to the removal of the \VuFind\Db\Row\UserList::save() and updateFromRequest() methods, as they could not be maintained in a forward-compatible way. The \VuFind\Db\Row\User and \VuFind\View\Helper\Root\UserList constructors were also updated. See
pull request #3769
for details.
To centralize handling of tag case-sensitivity, most tag database calls should be routed through \VuFind\Tags\TagsService for simplicity and consistency. This required significant refactoring, including constructor changes to \VuFind\AjaxHandler\GetRecordTags, \VuFind\Autocomplete\Tag, \VuFind\ChannelProvider\ListItems, \VuFind\Search\Favorites\Results and \VuFind\Search\Tags\Results. See
pull request #3797
for details.
Refactoring related to the search table led to changes to the constructors of \VuFind\Search\SearchNormalizer and \VuFindConsole\Command\ScheduledSearch\NotifyCommand; see
pull request #3775
Many classes with dependencies on \VuFind\Db\Row and \VuFind\Db\Table classes have been revised to use \VuFind\Db\Entity and \VuFind\Db\Service interfaces instead.
Many classes using \VuFind\Db\Table\DbTableAwareInterface/Trait now use \VuFind\Db\Service\DbServiceAwareInterface/Trait instead.
The
record versions
functionality has been simplified for consistency and maintainability. If you have customized any functionality related to versions, adjustments may be needed. See
pull request #3295
and
#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
pull request #3343
and
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
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
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
pull request #3182
for more details.
\VuFind\Controller\AbstractBase::getUser() now returns null instead of false when no user is logged in. See
pull request #3768
The constructor signature of \VuFind\Exception\AuthEmailNotVerified has changed to include the UserEntityInterface object representing the current user; this guarantees the inclusion of user data when this exception is thrown, enabling catch blocks to make appropriate assumptions. See
pull request #3700
for 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
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
pull request #3046
. Updates include constructor signature changes to \VuFind\AjaxHandler\GetSideFacets and \VuFind\Recommend\FavoriteFacets.
The signature of \VuFindSearch\Backend\Solr\QueryBuilderInterface::build() has been expanded; custom query builder classes may require adjustment. See
pull request #3590
The signature of \VuFindSearch\Backend\Solr\QueryBuilder::checkParamConditions() has changed. In the unlikely event that you use or extend this method, changes will be required. See
pull request #3590
The constructor signature for \VuFind\View\Helper\Root\ProxyUrl has changed; local custom subclasses may require adjustments. See
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
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
pull request #3404
for details.
The signature and input of \VuFind\ILS\Driver\Folio::formatHoldingItem have changed slightly; see
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 locale initialization is no longer necessary. See
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
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
pull request #3392
The
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
pull request vufind-browse-handler#48
for details.
The index-alphabetic-browse scripts have been updated to use renamed options and classes (see
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
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
pull request #3452
for necessary adjustments.
Javascript code no longer uses DOM CustomEvents, and event names have been revised. See
pull request #3361
if you have custom code that interacts with internal events; it will need to be revised based on these changes.
The initResultScripts() function in common.js has been replaced by a new results-init event; see
pull request #3584
for details.
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
pull request #3484
for details.
The constructor signature of \VuFind\Controller\OAuth2Controller has been adjusted to remove the \LmcRbacMvc\Service\AuthorizationService object, which was not used or needed.
The keyboardShortcuts() Javascript function in common.js has been removed; it no longer worked correctly and could have interfered with accessibility. Similar functionality may be reimplemented in future if there is demand. See
pull request #3664
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.
\VuFind\Search\Solr\InjectHighlightingListener::onSearchPost() - see
pull request #3610
\VuFindSearch\Backend\EDS\Backend::debugPrint() and \VuFindSearch\Backend\EDS\Base::debugPrint() - use debug() instead.
Submit inputs named “submit” have been renamed to “submitButton” to avoid side effects caused by using a reserved word as a name; the CAPTCHA processing code now looks for this new name by default (but maintains backward compatibility with the old name). It is strongly recommended that you update any forms you have built or customized to use submitButton instead of submit.
The SolrMarc UpdateDateTracker.java code has been updated to use try-with-resources instead of finalize for more consistent resource cleanup. This may cause different performance characteristics when indexing records with change tracking enabled. See
pull request #3647
for related discussion.
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
pull request #3417
for details.
Subject headings from MARC records will now be displayed in the order they are included in the records, rather than numerical order based on tag number. If you wish to restore the previous behavior, you can set marcSubjectHeadingsSort to numerical in config.ini.
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
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
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
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
pull request #3174
Press Release
Video Summary
Release 9.1.2 - 17 Jun 2024
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
pull request #3513
for details.
The \VuFind\Search\Solr\InjectHighlightingListener::onSearchPost() method has been deprecated, and its functionality has been refactored to \VuFind\RecordDriver\PluginManager and \VuFindSearch\Backend\Solr\Response\Json\RecordCollectionFactory in order to address a bug in highlighting blended searches. See
#3614
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
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
pull request #3476
for details.
Due to changes in the phpCAS library, users of CAS authentication are encouraged to populate the service_base_url[] setting in the [CAS] section of config.ini. The log setting in the same configuration section is no longer supported and has been removed; CAS messages will now be sent to the standard configured logger.
Channels-related Javascript has been significantly revised to address bugs; if you have customized this, adjustments will be needed. See
pull request #3662
for details.
Release 9.1.1 - 12 Feb 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
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
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
pull request #3385
for details.
Release 9.1 - 30 Oct 2023
New features:
The EBSCO Publication Finder is now supported as a search backend (requires a valid EBSCO subscription).
Blended Search
now supports advanced search.
Added support for the
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
pull request #3006
Added support for the
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
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
pull request #3099
), to better retain the order of sections on small screens (see
pull request #3077
), to display side recommendations (see
pull request #3135
) and to display a “jump menu” at the top of the page (see
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
pull request #2860
for details.
It is now possible to configure custom Solr highlighting parameters. See
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
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
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
pull request #2659
for details).
It is now possible to add a DirLocations.ini file to the root of a
local settings directory
in order to customize some of its behavior (adjusting path to configuration files, inheriting from parent directories). See
pull request #2947
for details.
When
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
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
Troubleshooting Language Strings
and
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
pull request #3156
).
Sierra users can now configure mappings for patron block codes in SierraRest.ini (see
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
pull request #3101
for details. A similar fix for Alma has been applied in
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
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
pull request #2891
for details.
Theme configuration now optionally supports multiple favicons (to allow for more than one size); see
pull request #2862
The installation process now supports selection of a custom Solr port (see
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
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
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
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
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
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
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
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
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
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
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
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
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
pull request #2659
and
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
pull request #2838
Custom styles associated with the optional cookie consent feature have been significantly refactored; see
pull request #2909
The GetItemStatuses AjaxHandler has been significantly revised to support a broader range of statuses. See
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
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
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
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
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
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
Stamen x Stadia
page.
Press Release
Video Summary
Release 9.0.3 - 24 Jul 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
pull request #2989
Adds a new “OperatorToFieldPrefix” view helper as part of a bug fix (see
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
pull request #2996
).
Release 9.0.2 - 26 Jun 2023
Minor bug fix release.
Adds a new “Session” view helper as part of a bug fix (see
pull request #2926
for details).
Eliminates log4j 1.x from SolrMarc to prevent false-positive vulnerability detection.
Release 9.0.1 - 24 Apr 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 - 24 Apr 2023
New features:
Support for
Blended Search
, which can combine results from multiple search backends into a single list.
Support for a
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”
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
pull request #2581
for details.
Feedback forms can now be forwarded/persisted using
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
pull request #2399
for details.
Support for using Koha local cover images as a cover image source.
Support for activating
Google Tag Manager
via configuration; see
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 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.
The staff view for MARC records can be configured to also display indexed Solr fields (see
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
pull request #2538
for details.
The
BrowZine
DOI linker plugin now supports the display of retraction notices.
An
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 File Inheritance
for details.
Support has been added for using VuFind® as an
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
SubjectsPlus
Possible backward compatibility breaks:
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
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
pull request #2577
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
Some indexing and dependency changes require a full reindex:
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
pull request #2695
for details).
Deprecated Solr fields have been removed. See the
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
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
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
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
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
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:
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.
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
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
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
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
pull request #2445
The Ezb
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
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
pull request #2372
).
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
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
pull request #2400
The constructor signature of \VuFind\View\Helper\Root\Icon has been changed to remove the dependency on the HeadLink helper. See
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
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
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 deprecated getMarcRecord() method in several record drivers has been removed (you should use getMarcReader() instead).
Some components of the WorldCat search backend have changed.
The command line tools for deleting records and linting MARC files have been revised.
The internals of the VuFind\MarcReader class have been changed; see
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
pull request #2429
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
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
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
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
pull request #2206
for details.
Feedback form processing has been significantly refactored; see
pull request #2230
and
pull request #2237
The signature of \VuFind\Db\Table\Search::saveSearch() has changed to accommodate a fix to prevent duplicate searches in history; see
pull request #2460
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
pull request #2229
and
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
#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
pull request #2450
Some function signatures have been more strictly typed based on
PHPStan
analysis (see
pull request #2255
, for example). If you have local code that extends core code, it is strongly recommended that you run
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).
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
pull request #2616
for details.
If you use
BrowZine
, be sure to update your local BrowZine.ini to reflect the new [DOIServices] section added in
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
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
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
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
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
pull request #2658
for details.
The book bag feature now requires browser Javascript support for add/remove functionality in result lists (see
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
pull request #2481
The key generation rule for caching parsed YAML files has been changed to reduce the possibilities of collisions across instances; see
pull request #2351
The
API
specification has been updated to use the OpenAPI 3.0.3 standard, and the Swagger UI tool included for
API
testing has been upgraded. The actual
API
interface and functionality has not changed (apart from additions noted above) and remains backward-compatible.
Search backend factories have been refactored to improve extensibility; if you have custom factories, you should review the pull requests linked from
VUFIND-1446
; there may be opportunities to simplify your code.
Some aspects of the VuFindApi module were refactored for greater flexibility when admin tools were added; see
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
pull request #2172
The include_facets setting in EDS.ini had no effect in the existing code and has been removed.
Press Release
Video Summary
Release 8.1.2 - 6 Feb 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 - 3 Oct 2022
Minor bug fix/translation improvement release.
FOLIO users are strongly encouraged to upgrade due to a significant bug fix.
Release 8.1 - 18 Jul 2022
New features:
A new “custom Solr filters” feature makes it possible to define “inverted facets” which apply filters UNLESS the user applies a specific filter (e.g. if you want to exclude things by default but have an opt-in checkbox). This feature also makes it possible to define more complex checkbox filters without creating unwieldy URLs for the end user. See
pull request #2340
and the [CustomFilters] section of facets.ini for more details.
New
fallback record loader
to allow VuFind to look up Solr records based on previous IDs when current ID lookups fail (useful for compatibility with legacy URLs after a system migration); must be configured using the new fallback_id_field setting in
searches.ini
Translated facet values can now be optionally configured to include both the raw and translated values together (see
pull request #2352
for details). This can be useful for displaying results based on classification systems.
Example configuration settings for importing CSV files exported from Scopus; see
pull request #2345
New ILS driver: support for Lucidea's
GeniePlus
New cover image service supported:
Bokinfo
New interface translations: Armenian and Ukrainian.
Minor accessibility improvements.
Minor
Solr schema
additions.
Improved compatibility with PHP 8.1.
Possible backward compatibility breaks:
The default httpd-vufind.conf configuration for Apache has been changed to include a new public assets directory, which is required to apply styles to RSS feeds. It is strongly recommended that you update your local Apache configuration to match. See
pull request #2385
for details.
The “Loading…” message displayed in lightboxes has been visually improved to prevent formatting problems. If you have customized the lightbox Javascript code or your layout template, you should review the changes in
pull request #2197
and make sure no incompatibilities have been introduced.
For compatibility with PHP 8.1, some method signatures have had return types added in some classes implementing PHP standard interfaces. If you have extended any of the impacted classes, you will need to modify your custom code to match. See
pull request #2423
for details. Impacted code:
Custom session handlers (\VuFind\Session namespace)
Solr response wrapper classes (\VuFindSearch\Backend\Solr\Response\Json namespace)
\VuFindSearch\Response\AbstractRecordCollection
\VuFind\Search\ParamBag (very unlikely to be locally customized)
The Evergreen ILS driver had become outdated; it has been brought up to speed, but this required some backward-incompatible changes (including drop of support for Evergreen versions before 2.10). Evergreen users should review
pull request #2203
The KohaRest ILS driver has had changes to its constructor signature to fix a problem related to the SafeMoneyFormatter view helper; it now relies on a new CurrencyFormatter service instead. See
commit 8d70097
for details.
The \VuFind\Record\FallbackLoader\SummonFactory has been replaced by \VuFind\Record\FallbackLoader\AbstractFallbackLoaderFactory. In the very unlikely situation that you rely on this in local code, you will need to use the new factory instead of the old one.
The ConfigManager used by SolrMarc custom indexing Java has been revised to solve a thread-related bug (see
VUFIND-1546
). The getSanitizedConfigSection method has been deprecated, and the default behavior of getConfigSection has been changed to always sanitize values. If you have written custom indexing Java which utilizes the ConfigManager, you should review
pull request #2376
and adjust your code if necessary.
Language files and templates were adjusted slightly to improve internationalization of periods of ellipsis. In particular, the translation strings for “More EDS Results”, “More Summon Results”, and “Submitting” were updated to include periods of ellipsis in the language files instead of the templates. If you have customized these strings locally, you may need to review your customizations. See
pull request #2381
for details.
Some minor improvements to the accuracy of the FormatCalculator used during MARC indexing may result in slight changes to format assignment when you next reindex your records, particularly for component parts and electronic resources; see
pull request #2403
and
pull request #2408
for details.
The signature of \VuFind\Search\Options\ViewOptionsTrait::initViewOptions() has changed slightly (to make the parameter nullable). In the unlikely event that you have overridden this method, your subclass may need to be adjusted to match. See
pull request #2261
Default content security policy settings have been changed to improve compatibility with Safari; if you have enabled CSP enforcement, you should review
pull request #2153
and consider adjusting your settings to match.
The
HTML
title tag now includes the site title for improved accessibility. You should be sure that the title setting in the [Site] section of config.ini is appropriate. See comments above that setting for notes on how to customize this behavior.
The MultiBackend ILS driver has been refactored significantly to simplify the code. In the unlikely situation that you have built a local subclass of this code, you should review
pull request #2154
and make sure your code remains compatible. The biggest internal interface change is the replacement of methodSupported() with driverSupportsMethod().
Print-related Javascript has been split from common.js into a new separate file, to make targeted customization easier (see
pull request #2143
). If you have a locally customized common.js, you should be sure to adjust it to match the upstream refactoring.
Press Release
Release 8.0.4 - 28 Feb 2022
Minor bug fix release, addressing problems with session management (see
VUFIND-1532
) and long binary MARC records (see
VUFIND-1534
).
Release 8.0.3 - 20 Dec 2021
Upgrades to Solr 8.11.1, which addresses multiple security vulnerabilities in Solr's bundled log4j library (see
CVE-2021-44228
). You should reindex your records after upgrading due to the Solr version change.
Also includes some other minor bug fixes.
Release 8.0.2 - 29 Nov 2021
Minor bug fix release.
Note that this release adds a new dependency (the composer/semver library, used to fix a bug in version number comparison during the upgrade process); if you are manually upgrading via Git, don't forget to run “composer install.” If you are installing from a package, no extra action is necessary.
Note that fixes to a problem with hierarchy tree displays in right-to-left languages required significant changes to some styles; if you have customized tree displays, you should review
pull request #2151
Release 8.0.1 - 27 Sep 2021
Bug fix / improved translation release.
Addresses “out of memory” errors caused by Laminas Cache under certain circumstances.
Release 8.0 - 20 Sep 2021
New features:
It is now possible to import data directly to VuFind's Solr index from
CSV files
(to complement existing support for MARC and XML indexing).
New “Bookplates”
Related module
for displaying bookplate images on the record view. See
pull request #1834
for details.
Significant performance improvements for internal handling of MARC records and search result rendering.
Citation generation has been significantly updated and improved.
Support for
Matomo
analytics (for use with Matomo 4 and up; the pre-existing Piwik support remains for legacy versions). See
pull request #1943
for details.
New (optional) SolrPrefix autocomplete handler for making suggestions through the edge n-gram tokenizer (see
pull request #1850
).
Optional support for caching Solr query results (see
pull request #1854
).
Sitemap generation has been improved to (optionally) include alternate-language versions of pages, as well as static content. See
pull request #1904
Expanded holds functionality (for supporting ILS drivers): the ability to freeze holds until a start date, and the ability to edit fields in existing holds.
Support for call number prefixes (which are displayed, but do not affect sorting/searching), for supporting ILS drivers.
Improved support for rendering alternate-script versions of titles (and retrieving other data from MARC 880 fields).
Improved handling of punctuation in author names in MARC records (with some new associated configuration settings); see
pull request #2028
for details.
More flexible Javascript configuration in theme.config.php, including better control over loading order, plus the ability to load Javascript in the page footer as well as the
HTML
header (see
pull request #1863
and
pull request #1799
).
There is now a [ShowFacets] setting in facets.ini which complements the [HideFacets] setting by making it possible to create a fixed list of legal facet values, for fields where only certain specific values are meant to be displayed. See
pull request #2013
for details.
Restored support for XHProf
profiling
(in addition to existing Tideways support).
It is now possible to link multiple user library accounts from multiple Shibboleth IdP's; see
Shibboleth and Library Cards
and
pull request #1823
The new GlobalExtraParams section in searchspecs.yaml makes it easier to configure custom boosts and other Solr parameters. See
pull request #2104
The new “Content” view helper makes it easier to utilize VuFind's system for displaying internationalized content inside other templates; see
Embedding Static Content
for more details.
Cover images can now be loaded from the
Orb
service (with an appropriate subscription); see
pull request #1949
Cover images can now have associated attribution messages, when required by a provider (currently used for ObalkyKnih).
The optional Memcache session handler now supports both of PHP's Memcache client libraries: \Memcache and \Memcached. Users can configure which one they prefer to use. See
pull request #1945
All of the XML import example XSLT files have been updated to support both single-record and multi-record import. This means that if you are harvesting via OAI-PMH to index XML, you can turn on the combineRecords setting in oai.ini to save records in batches rather than as separate files, and your subsequent indexing should be significantly faster.
The XSLT import examples have also been updated to make it significantly more convenient to enable
change tracking support
; see
pull request #2100
Feedback forms have some minor improvements: overrideable email senders, date fields, and improved validation.
Dewey indexing rules have been updated to use DDC 23 instead of DDC 22 by default (but DDC 22 mappings are retained for backward compatibility).
VuFind now supports loading templates from modules as well as loading templates from themes; this will make it easier to build and distribute third-party VuFind plugins that can be loaded via Composer. See
pull request #1424
for details.
The new Icon view helper makes it easier to configure and customize icons used in the user interface; for this release, it is only being used for loading spinners, but future releases will leverage it more widely.
Further improvements to accessibility.
Further improvements to PHP 8 compatibility.
Upgraded to Solr 8.9.0.
Upgraded to
SolrMarc
3.4.
Possible backward compatibility breaks:
VuFind now requires PHP 7.3 or newer; please make sure you have an appropriate version installed before upgrading.
VuFind has dropped support for MySQL versions earlier than 5.7.7 (or MariaDB 10.2.2); these versions have reached end of life and should no longer be used under any circumstances.
MySQL/MariaDB databases will now be encoded using utf8mb4 instead of utfmb3, to allow compatibility with more characters; the database portion of the
web-based upgrade process
will correct this for you. Some key lengths have been reduced to accommodate the larger size of utf8mb4 characters; in the unlikely event that this introduces a problem to your database, the upgrade process will inform you with an error message.
Legacy support for latin1-encoded MySQL databases (which was provided for compatibility with VuFind 1.x installations) has been removed. You must use utf8 encoding. In the very unlikely situation that you still have a VuFind 1.x database that you need to connect to, please upgrade to VuFind 7.x or earlier first, then migrate to VuFind 8.
The Solr schema has changed, the Solr version has been upgraded, DDC call number mappings have been updated, and author indexing has been adjusted, so records MUST be reindexed after an upgrade. See the
index schema changelog
for more details.
The Solr “split-on-whitespace” setting has been changed to true by default, to improve the accuracy of search results; however, this will cause problems if you use multi-word synonyms. See
pull request #1937
for details on new configuration options if you need to restore the old behavior.
VuFind now expects browsers to support ES6; see the
browser support statement
for details.
Several changes have been made in relation to VuFind's caching layer (see
pull request #2054
):
The \VuFind\Cache\Storage\Adapter\NoCacheAdapter has been removed, because the core Laminas BlackHole adapter serves the same purpose.
Support for caching in APC has been removed, because APC is obsolete as of PHP 7.
Several deprecated storage adapters are no longer being installed through Composer (and were never needed to begin with).
The constructor signature of \VuFind\Cache\Manager has changed for compatibility with the latest release of the laminas-cache component.
MARC record handling in record drivers has been refactored to use the faster VuFind\Marc\MarcReader instead of the File_MARC library; this has resulted in some changes to MARC-related support methods like getSubfieldArray(). If you have custom MARC handling in a local record driver, you may need to replace getMarcRecord() calls with getMarcReader() and adjust some other details. See
pull request #1776
for details.
Pre-existing record driver traits (HierarchyAwareTrait, IlsAwareTrait, MarcAdvancedTrait and MarcBasicTrait) have been moved into the VuFind\RecordDriver\Feature namespace (from VuFind\RecordDriver) to improve code organization; if you have a custom driver which incorporates these traits, you'll just need to adjust your use statements. See
pull request #2008
Functions deprecated in earlier versions of VuFind have been removed; these include CallNumberTools::getFullCallNumber and CreatorTools::getParsedTagList in the SolrMarc custom indexing Java code, and \Db\Row\UserList::getTags and \Db\Table\ResourceTags::destroyLinks in the PHP code. See
pull request #2014
for details.
VuFind\View\Helper\Root\AbstractClassBasedTemplateRenderer has been replaced by VuFind\View\Helper\Root\ClassBasedTemplateRendererTrait, and the signature of the protected resolveClassTemplate() method has changed. If you have a custom view helper that extends this base class, you should revise it to use the trait instead. See
pull request #1747
for details.
Text normalization logic has been factored out of the VuFindSearch\Query objects and into a separate class for greater flexibility/extensibility/separation of concerns, and the VuFindSearch\Query\QueryInterface has been changed to reflect this. If you have custom query objects or custom code that deals with query text normalization, some adjustments may be required. See
pull request #1714
for details.
The VuFindSearch\Service has been refactored to use the Command Pattern; you can now send command objects to the service's invoke method instead of calling more specific search/retrieve/etc. methods. These command objects are also shared with search listeners. The command system makes it easier to customize search behavior without having to rewrite the search service itself. This has been implemented in a mostly-backward-compatible way, but the old way of doing things is deprecated in this release and will be removed in VuFind 9.0. If you make calls to the search service in your code, and/or if you have written any custom search listeners, you should update your code to use command objects instead of the old techniques. When using command objects, some event details will be different (some arguments may not be present, and the event target will also be different). See
pull request #1967
for details and examples, and
pull request #2108
for some subsequent revisions to event targets.
The HTTP behavior of the VuFindSearch\Backend\Solr\Connector class has been simplified. It now accepts a client object as a constructor parameter, and the setAdapter and setProxy methods have been removed. If you use Solr connectors in custom code, you may need to adjust your logic. See
pull request #2011
The classes used for sending messages to Solr have been rewritten for greater flexibility; see
pull request #1952
. If you have custom code using any classes from the \VuFindSearch\Backend\Solr\Document namespace, or if your code interacts with the \VuFind\Solr\Writer or calls \VuFindSearch\Backend\Solr\Connector::write(), some adjustments may be required.
Direct access to search backends through the BackendManager (which bypasses the normal event-driven search service) is STRONGLY DISCOURAGED because it can lead to inconsistent event-related behavior. All existing VuFind code following this anti-pattern has been refactored, which has resulted in constructor signature changes in these classes:
\VuFind\Autocomplete\EDS
\VuFind\ChannelProvider\Channels
\VuFind\Content\Covers\BrowZine
\VuFind\DoiLinker\BrowZine
\VuFind\Hierarchy\TreeDataSource\Solr
\VuFind\Recommend\MapSelection
\VuFind\Record\FallbackLoader\Summon
\VuFind\RecordTab\HoldingsWorldCat
\VuFind\Solr\Writer
The RecordLink view helper has been replaced by the RecordLinker view helper (see
pull request #2072
). RecordLink will be maintained for backward template compatibility until release 9.0, when it will be removed. However, any local subclasses of RecordLink should be rewritten as subclasses of RecordLinker. The changes in RecordLinker include:
The deprecated getHoldUrl() method has been removed
All methods returning URLs return raw URLs, not
HTML
-escaped versions; you are responsible for escaping this output when using it in
HTML
. This makes the methods more flexible and eliminates some inconsistencies from the previous helper
getBreadcrumb() has been renamed to getBreadcrumbHtml() to indicate that it returns
HTML
rather than a plain link
The \VuFind\OAI\Server::setRecordLinkHelper() method has been renamed to setRecordLinkerHelper().
The \VuFind\RecordDriver\DefaultRecord::getXML() method has been adjusted to accept the new helper class instead of the old one.
\VuFind\Record\SourceAndIdList::getRecordPosition() has been replaced with \VuFind\Record\SourceAndIdList::getRecordPositions(). If you are using the old method (which is extremely unlikely, unless you have customized \VuFind\Record\Loader), you will need to adjust your code.
\VuFindTheme\View\Helper\HeadThemeResources::parseSetting() has been moved to \VuFindTheme\ResourceContainer::parseSetting() and will eventually be deprecated; in the unlikely situation that you rely on this method, you should revise your code.
The “cssBuilder” command line utility has been deprecated; use the “grunt less” command to compile LESS instead. See
pull request #1925
for related discussion.
The VuFind\Db\Table\Tags::getForUser method has been renamed to getListTagsForUser to improve clarity. In the unlikely case that you use this method in custom code, you will need to change your call to use the new name. See
pull request #2017
The MyResearchController is being split up to improve code organization and clarity. If you extend/customize this controller, you may need to revise your code. Specific changes:
Holds-related functionality (the holdsAction method) has been moved to a separate HoldsController, and the myresearch-holds route now redirects to holds-list.
The getDriversForILSRecords and collectRequestAccountStats support methods have been moved to a new ilsRecords() controller plugin.
The getRefreshResponse method has been refactored to the AbstractBase controller for reuse elsewhere.
The Laminas dependency plugin has been removed; if you have not fully migrated local legacy Zend Framework code to Laminas, you may have problems with this release.
The code to delete expired rows from database tables (old searches, sessions, etc.) has been refactored to reduce complexity and improve performance (see
pull request #1815
). In the unlikely event that you have built any custom expiration tools, you will need to adjust them to match.
If you have customized the extensions setting in markdown.ini, you should make sure that the Autolink, DisallowedRawHtml, Strikethrough, Table and TaskList extensions are enabled in your extensions setting; these are now active by default and are required by default behavior. See
pull request #2006
for details. If you have not customized this setting or do not use Markdown for content rendering, no action is needed.
The endroid/qr-code library has changed significantly; if you have custom QR code logic, you will need to adjust it. See
pull request #1954
for details.
VuFind\Log\Logger, VuFind\Resolver\Driver\Ezb, VuFind\Role\PermissionProvider\IpRange, and VuFind\Role\PermissionProvider\IpRegEx now explicitly depend upon VuFind\Net\UserIpReader; this dependency was previously optional. If you have customized any of these classes, minor adjustments may be needed. See
pull request #2009
Some typehints have been changed on the VuFind\Search\Solr\DeduplicationListener constructor; if you have a custom subclass, you should adjust it to match. See
pull request #1844
Typehints referring to \Laminas\ServiceManager\ServiceManager have been replaced with more generic ContainerInterface references to improve flexibility in the future; consider making similar adjustments to ServiceManager typehints in local custom code. See
#1848
for more details.
Locale/language detection is now achieved using the
slm/locale
module, reducing VuFind-specific custom code. If you have custom locale detection logic, you may need to adjust your code. See
pull request #1885
Initialization of the Laminas i18n system has been streamlined and standardized; if you have a custom translator factory or have customized the DisplayLanguageOption view helper (both unlikely situations), you may need to make some adjustments. See
pull request #1928
for details.
A new mechanism has been added for showing/hiding long elements of the display (see
pull request #2121
). This is used for SideFacets, TopFacets and WorldCatIdentities recommendation modules, replacing the old registerMoreLessFacetsEventHandlers() function in facets.js. If you have any custom code relying on this function, you should refactor to use the new mechanism.
The constructor signature of the JsTranslations view helper has changed; in the unlikely situation that you have overridden it, you will need to adjust your subclass to match. See
pull request #1981
The \VuFind\Sitemap\Generator class has been drastically refactored to improve code organization, extensibility and testability. This includes changes to the class' constructor signature; you will have to adjust custom subclasses to match, if you have any, and some logic may need to be moved to plugins. See
pull request #1904
and
pull request #2037
for details.
The getCancelHoldDetails, getCancelHoldLink, getCancelILLRequestDetails and getCancelStorageRetrievalRequestDetails methods have been updated across ILS drivers to consistently accept a second ($patron) parameter. If you have customized any of these methods in a subclass, you will need to make sure the signatures match.
To support
embedding static content
, some potentially backward-incompatible internal changes have been made to the VuFind\ContentBlock\TemplateBased class, its associated template, and the HelpText view helper. In the unlikely case that you have locally customized any of these things, you should review your changes with reference to
pull request #1874
The LBS4 ILS driver has been removed due to incompatibility with PHP 7 and a lack of demand for an updated version of the code. Please reach out to us if you still need it for any reason!
The Aleph ILS driver's [duedates] configuration section (and associated functionality) has been removed; this was using the duedate field inappropriately, and seems likely to be unused by the vast majority of users. See
pull request #1989
The “Expires” translation string has been split into several different strings to reduce ambiguity; if you have customized this string, you will need to make adjustments. See
pull request #1976
The [Advanced_Facets] section of EDS.ini has been replaced with a new advanced_limiters setting in the [General] section. The original version was not implemented correctly and had no effect; the new version provides the ability to filter and reorder limiters on the Advanced EDS search screen. See
pull request #2044
for details.
Due to changes in an upstream library, the name and location of the configuration key for ignoring specific exceptions in the Whoops error handler have changed; see
pull request #1993
if you need to use this setting. (This only applies to development mode, and it is unlikely that it is being locally customized).
The $forceOverride parameter of UrlQueryHelper::setDefaultParameter now defaults to false instead of true; this is unlikely to impact most users. See
pull request #2015
Templates for search results and other lists of records have been refactored to use
HTML
list tags for better accessibility; if you have customized these templates (or some record driver templates that interact with them), your custom code may need to be adjusted; see
pull request #1931
A bug in VuFind 7.1.x was preventing advanced Shibboleth configuration from loading correctly; it has been corrected by
pull request #2064
. If you previously worked around this problem by renaming Shibboleth.ini to shibboleth.ini (changing the case of the first letter), you should now change it back, as the correct filename will now load as intended.
\VuFind\Ils\Driver\CacheTrait has been renamed to \VuFind\Cache\CacheTrait. The old name will continue to work in VuFind 8.x but will be removed in VuFind 9.0.
If you use ojs-multirecord.xsl in your ojs.properties file for ingesting harvested XML from OJS, you should change the setting back to the default ojs.xsl. The base ojs.xsl file correctly handles both single-record and multi-record ingests now, so the ojs-multirecord.xsl file has been removed as redundant.
The \VuFind\Form\Form constructor signature has changed to load configuration differently; see
commit 50642b
. Additionally, the getElements() method has been renamed to getFormElementConfig() to resolve a conflict with the base class (see
pull request #2120
).
The Linkify view helper now uses the UrlHighlight library instead of the Linkify library for converting URLs into links inside text; see
pull request #1709
The Aleph driver no longer supports sorting of historical transactions, because it is incompatible with pagination (see
pull request #2126
).
The KohaILSDI driver has been updated to correctly retrieve fine data from Koha version 19.11 and up; earlier versions (which are no longer supported by the Koha community) are no longer compatible.
Code specifically designed for decoding binary MARC records in Solr XML responses has been removed, as VuFind no longer uses Solr XML responses (JSON is now favored). If you use XML in Solr for some reason (very unlikely), you may need to compensate for this change. See
pull request #1900
Support for passing an array of breadcrumb data (instead of an
HTML
string) to the layout has been removed; it is very unlikely that this feature was ever used, so it should not impact anyone. See
pull request #2098
for details.
The English language files have been adjusted to replace the term “favorites” with “saved items” for a more consistent user experience. See
pull request #2020
The TopFacets recommendation module's output has been restructured, so the top_cols configuration setting (found in facets.ini and equivalent .ini files for other backends) is no longer meaningful and has been removed.
Javascript translations have been refactored to a separate layout/js-translations.phtml to simplify layout/layout.phtml; you may wish to adjust your local theme to match if you have customized your layout. See
pull request #1691
Press Release
Release 7.1.1 - 5 Jul 2021
Minor bug fix / improved translation release.
Release 7.1 - 22 Feb 2021
New features:
The new
Record Versions
feature provides links between different editions or versions of the same work; this is on by default but can be disabled through the display_versions setting in searches.ini if it is not needed.
PHP 8 compatibility has been improved.
Tags can now be applied to user lists as well as resources; this feature is disabled by default (see the listTags setting in config.ini). The ListItems
channel provider
now has new options to take advantage of list tags for channel selection. See
pull request #1645
for details.
Facet values can be filtered natively in Solr (by prefix or regular expression) using the new facet_prefix_by_field and facet_matches_by_field settings in
facets.ini
; see
pull request #1694
Solr has been upgraded to version 7.7.3.
The Shibboleth authentication handler has been significantly revised and improved, with some new features and settings added; see
pull request #1617
for details.
The XCNCIP2 ILS driver has been significantly revised and improved.
If you wish to render a custom template instead of displaying a specific “no cover” image when a cover graphic cannot be found, you can use the useCoverFallbacksOnFail setting in combination with the ajaxcovers setting in config.ini; see
pull request #1679
Permissions (and associated permission denied behavior) can now be applied to columns within combined search results. See
pull request #1707
for details.
Specific values can be moved to the tops of the advanced search facet lists for Solr (for example, to highlight commonly-used values) using the new limitOrderOverride setting in facets.ini. See
pull request #1807
for details.
A new log writer has been added for Office365 webhooks (for notifications into Microsoft Teams); see
pull request #1757
The Solr field used for storing full MARC records in the index is now configurable (see
pull request #1813
).
Some settings controlling the VuFind
API
are now more easily configurable (see
pull request #1838
).
Possible backward compatibility breaks:
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
Be sure to reindex your records due to the Solr upgrade and to ensure that Record Version functionality is set up correctly.
If you use VuFind's optional sharding support, note that some additional Solr configuration may now be needed due to the upgrade; see “Configuring the ShardHandlerFactory” in
the Solr documentation
for details.
VuFind\Db\Row\UserList now has the VuFind\Tags service as a constructor parameter; in the unlikely case that you have a custom subclass/factory, be sure to adjust it accordingly. See
commit 2b05cef
for details.
VuFind\ChannelProvider\ListItems now has the VuFind\Db\Table\ResourceTags table object as a constructor parameter; in the unlikely case that you have a custom subclass/factory, be sure to adjust it accordingly. See
pull request #1645
for details.
The Symfony YAML library has been updated from version 3 to version 4, which has more strict validation rules; if you have custom YAML configurations, you should make sure that they still load correctly, and fix them if they contain errors.
If you use a custom version of the Shibboleth authentication handler, local customizations may need to be adjusted to match the refactoring in
pull request #1617
If you use the XCNCIP2 ILS driver, you should review
pull request #1672
and make sure that the changes and fixes there do not conflict with any local customizations.
The EDS integration now stores search options in the cache; this improves performance and stability by reducing reliance on the
API
, but it also means that you may need to clear your local cache if you change settings in EBSCO's admin panel.
The constructor signature of the KohaRest ILS driver has been changed to make the money format helper optional; in the very unlikely case that you have customized this, your subclass will need to be adjusted to match. See
commit b4edee8
for details.
The constructor signature of the GetRecordCover AJAX handler class has been changed to fix a bug; in the very unlikely situation that you have extended this class, you will need to adjust your custom code to match. See
pull request #1842
for details.
A new transEscAttr() view helper has been added (see
pull request #1820
) to escape translated text for use in
HTML
attributes. This should not introduce any backward compatibility problems, but if you are inserting translated text into
HTML
attributes in local custom templates, you should use this helper to ensure proper escaping with concise code.
VuFind's Markdown processor (
league/commonmark
) has been upgraded to version 1.5; this deprecates the “inner_contents” setting for the HeadingPermalink plugin, replacing it with “symbol.” In the unlikely event that you have customized this setting in markdown.ini, you should update its name accordingly.
VuFind\Db\Row\UserList::getTags() has been deprecated in favor of VuFind\Db\Row\UserList::getResourceTags(). VuFind\Db\Table\ResourceTags::destroyLinks() has been deprecated in favor of VuFind\Db\Table\ResourceTags::destroyResourceLinks(). The deprecated methods will be removed in VuFind 8.0. See
commit 2b05cef
for details.
Press Release
Release 7.0.2 - 7 Dec 2020
Minor bug fix release.
Solr has been upgraded to version 7.4.0 in order to fix
VUFIND-1459
. A reindex should not be necessary, but may be a good idea as a precaution.
Some style and template details have changed to fix a bug in the Channels interface; see
pull request #1787
for details. This is unlikely to impact you unless you have customized this optional feature.
An incompatibility between
content security policy
support and the
asset pipeline
has been resolved. If you are using both features, be sure to set the new asset_pipeline_max_css_import_size setting appropriately and/or adjust your CSP rules. See
pull request #1719
for details.
A fix for the KohaRest ILS driver added a parameter to the constructor, which introduced a change to the corresponding factory; if you have a custom subclass of this driver, minor adjustments may be needed.
Release 7.0.1 - 31 Aug 2020
Minor bug fix release.
Includes updates to several dependencies (Laminas components, etc.).
To fix problems related to IP detection behind a proxy, the allow_forwarded_ips and forwarded_ip_filter settings have been added to config.ini. If you run VuFind behind a proxy and rely on IP detection, you should review these settings (and the related
security wiki page
) carefully. Some constructor signatures have changed to support this functionality, but backward compatibility breaks are unlikely; see
pull request #1681
#1682
and
#1687
for details.
Release 7.0 - 20 Jul 2020
New features:
Static pages
can now be built using Markdown as well as PHP templates.
New
Content Block plugin
: TemplateBased, which allows you to embed a template that will behave similarly to a
static pages
in terms of supporting internationalization, Markdown, etc.
VuFind now supports configurable
Content Security Policy
headers, for improved security. These default to “report only” mode to avoid breaking existing installations, but administrators are strongly encouraged to turn these to enforcing mode in production.
VuFind now supports
CAPTCHA plug-ins
, maintaining the pre-existing ReCaptcha support while making it possible to use alternative mechanisms for blocking automated agents. See
pull request #1574
for additional details.
ArchivesSpace integration (support for ingesting Dublin Core records harvested from ArchivesSpace over OAI-PMH; see
pull request #1623
).
Improved ILS drivers: the FOLIO driver is now production-ready, and the new KohaRest driver provides richer support for Koha (compatible with Koha 20.05+ using the
koha-plugin-rest-di
plugin).
When using the optional link shortener feature, you can now configure how shortlinks redirect to full URLs (
HTML
-based, header-based, or conditional
URL
-length-based redirection). See
pull request #1533
VuFind's integration with EBSCO Discovery Service has been significantly improved, with a large number of bug fixes and added support for citation and export functionality.
New
view helpers
(“slot” and “parentTemplate” / “templatePath”) make it easier to extend and customize core templates. See
pull request #1454
and
pull request #1458
for details.
Custom
Feedback Forms
now support help text both before and after form elements through new pre/post help configuration settings.
Unpaywall DOI links now include both PDF and non-PDF resources (previously, only PDFs were linked).
It is now possible to obtain links from multiple DOI handlers (either in sequence or merged together); see
pull request #1560
You can now choose between extra-short and more private short links via the url_shortener_key_type setting in config.ini; see
pull request #1549
for details.
VuFind's
plugin generator
can now build controllers, controller plugins, and Symfony console commands.
The NoILS driver can now extract data from more than one MARC field at a time (for displaying status/call number information). See
pull request #1622
VuFind's
API
now offers access to the secondary Solr index configurable through Search2.ini as well as the website index.
Support routines have been developed for indexing geographic data from dc:coverage fields in XML records; it may be optionally turned on in the DSpace indexing example. See
pull request #1465
for details.
The ObalkyKnih cover image provider is now supported as an
external content
source.
In VuFind's browse module, the display order of browse options is now controlled by the order of configuration settings in the [Browse] section of
config.ini
VuFind's Mailer class now supports multi-part messages (though this capability is not being used in the core code yet). See
pull request #1610
for details.
The util/scssBuilder command line utility has been added for users who wish to use SCSS instead of the default LESS for building VuFind's
CSS
VuFind now sets the SameSite attribute on cookies for improved browser compatibility; see
pull request #1664
Possible backward compatibility breaks:
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
); if you are using the shortlinks feature, be sure to run the web-based upgrade even if you are using PostgreSQL to back-fill hashes properly.
The Solr schema has changed to remove the deprecated recordtype field, so records should be reindexed after an upgrade. See the
index schema changelog
for more details.
VuFind now requires PHP 7.2 or newer; please ensure you have a compatible version installed before upgrading.
Zend Framework has become Laminas; this upgrade has caused significant changes throughout the code because of class and package name changes. You should update your local code to match. See
pull request #1537
for details.
The Laminas\Console component has been deprecated, so all command line tools have been migrated to use Symfony\Console instead; see
pull request #1571
and the
console migration blog post
for more details.
The ZfcRbac module has been replaced with LmcRbacMvc to reflect the Laminas migration; custom authentication code may need minor adjustments to reflect the namespace change and the switch of the configuration key from zfc_rbac to lmc_rbac. See
pull request #1657
for details.
VuFind's default Solr port has changed from 8080 to 8983, to better reflect Solr best practices and to reduce port conflicts with other applications; it can easily be
changed back
as needed.
As noted above, you are strongly encouraged to configure a
content security policy
for improved security. Note that adjustments to local custom themes may be needed to conform to security requirements; for example, Javascript event attributes (onclick, etc.) should not be used, and all scripts should be loaded through the Laminas headScript or inlineScript helpers instead of with hand-written script tags.
If you are using ReCaptcha, several configuration settings have been renamed; the automated configuration updates through the web-based upgrade tool will take care of this, but if you are using a different mechanism to upgrade, you may need to make some adjustments to config.ini; see
pull request #1574
for details.
The recaptcha view helper has been replaced by a more generic helper. If you have custom templates referencing this view helper, you will need to update them; see
pull request #1574
for details.
VuFind's session handler code has been significantly refactored to improve extensibility and testability; see
pull request #1506
for details. If you have built a custom session handler, it will likely need to be adjusted; otherwise, this should not impact you.
VuFind's jQuery version has been upgraded from 2.1.1 to 3.5.1; if you have custom jQuery code, you should double-check its compatibility.
Several templates have been rewritten to use the slot view helper instead of view variables, improving readability and extensibility; if you have extended these templates yourself, the code may need to be adjusted. See
pull request #1454
details.
The record/cover.phtml template has been moved to RecordDriver/DefaultRecord/cover.phtml, so that cover thumbnail rendering is now record-driver-specific. See
pull request #1566
for details.
Support for Amazon cover images and reviews has been removed; the ZendService\Amazon library has been deprecated, and there was insufficient demand to take the time to port the code to a new library. If you need Amazon support, please open a new
JIRA
ticket.
The \VuFind\Search\Base\Params::getFilters() method, which was deprecated in release 6.1 (see
pull request #1489
), has now been completely removed; use \VuFind\Search\Base\Params::getRawFilters() instead.
The constructor signature of the \VuFindTheme\Initializer has been changed so that it can now optionally accept a service container instead of an MVC event object; if you have subclassed the Initializer, you will have to adjust your method signature to match. See
pull request #1600
for details.
The \VuFindSearch\Backend\Eds\Zend2 class has been renamed to \VuFindSearch\Backend\Eds\Connector to prevent Laminas-related confusion; this should only impact you if you have made low-level changes to the EDS integration. See
pull request #1546
The sitemap generator now uses the search service instead of direct access to the Solr connector; to support this, the constructor signature of \VuFind\Sitemap\Generator has changed, and the service is now constructed using a factory instead of hard-coded controller logic. If you have customized any of this, adjustments may be needed; see
pull request #1486
The way feedback forms do text translation has been refactored; if you have customized this code, you may need to adjust to match. See
pull request #1565
AJAX item status loading has been improved and refactored; in the unlikely event that you have customized or extended this Javascript code, you may need to make adjustments. See
pull request #1663
The Javascript cookie management library used by the book bag feature has been replaced with something more up-to-date; see
pull request #1673
Because score values are never used in core code (except when dumped out in non-MARC staff view tabs), the default field list retrieved from Solr has been changed from “*,score” to simply “*”. There is now a default_record_fields setting in searches.ini (and other equivalent Solr backend configurations) which can be used to customize the field list. See
pull request #1568
for details.
The SierraRest ILS driver now defaults to
API
version 5 instead of
API
version 3 to reflect deprecations in the Sierra platform. See
pull request #1659
for details.
Some internals of the Primo Central integration have changed slightly; see
pull request #1653
Some configuration settings have been renamed to use more inclusive terminology: whitelist/blacklist in Voyager.ini and VoyagerRestful.ini are now include_list/exclude_list; domain_whitelist in config.ini is now legal_domains. Legacy values will still be acknowledged for backward compatibility, but new values will take precedence. See
pull request #1671
for details.
The EBSCO Discovery Service integration now uses POST instead of GET for search
API
requests; the legacy GET behavior can still be accessed through an EDS.ini setting. See
pull request #1627
for details.
The \VuFind\RecordTab\TabManager::zendConfig property has been renamed to legacyConfig to prevent Laminas-related confusion; because this property is only used for accessing obsolete configuration settings, the impact of this change is expected to be minimal… but if you have customized the TabManager, you should check for issues. See
this commit
for details.
Press Release
Release 6.1.2 - 13 Jul 2020
Minor bug fix / improved accessibility release.
Note: when using this release, you may see a warning about MySQL SSL configuration while indexing MARC records; this is a side effect of improved MySQL 8 compatibility, but it is harmless. MySQL SSL configuration will be addressed in more detail in a future release; see
VUFIND-1395
Because of accessibility improvements/fixes, there are some LESS/
CSS
and template changes in this release; you should review custom themes in case they are impacted.
Release 6.1.1 - 16 Mar 2020
Minor bug fix / improved accessibility release.
Release 6.1 - 3 Feb 2020
New features:
An optional
Email Alerts
feature can be enabled to allow users to subscribe to saved searches in order to be notified about new search results.
Combined Multi-Column Search
now optionally supports search types (author, title, subject, etc.).
Users can now change their email addresses in their accounts (though this feature is disabled by default – see the config.ini change_email setting and
pull request #1401
for details).
The filter interface changes introduced in release 6.0 have been further improved, making the user experience more consistent.
Added “Email” authentication method to allow login by receiving a link in an email (see
pull request #1409
and
pull request #1520
).
Added “PasswordAccess” authentication method to allow login using a single credential rather than a username/password combination (see
pull request #1394
).
Added “RecommendLinks” recommendation module, offering a simple mechanism for displaying a static link list.
You can now embed meta tags for Google Scholar and other services by configuring metadata.ini (see
pull request #1529
for details).
It is now possible to limit site permissions on a global or controller-specific basis through configuration files, making it easier to manage protected content. See
pull request #1395
for details.
Improved support for running VuFind behind a reverse proxy (such as Apache's mod_proxy); see
pull request #1429
for details.
Added a
DOI Linker
plugin for
Unpaywall
Added support for storing VuFind sessions in
Redis
Hierarchical
facets
sort options can now be configured independently for search results, home page listings and advanced search options; see
pull request #1389
Various Alma ILS driver improvements (including the ability to use Alma as an
OpenURL
resolver).
ILS drivers can now differentiate between electronic and physical holdings (see the
getHolding
driver method documentation for details). This is currently supported by the Alma driver.
The Solr search configuration in
searchspecs.yaml
now supports munge rules for Dismax queries (see
pull request #1419
).
Upgraded to
SolrMarc
3.3, fixing some bugs and adding some new syntax features.
The OAI-PMH Server now supports a new “delete_lifetime” setting to expire old deleted records, preventing them from slowing down harvests (see
pull request #1496
).
Added Croatian and Hindi language support to the user interface.
Added support for ISMNs (International Standard Music Numbers) and National Bibliography Numbers to the cover image loader (see
pull request #1451
).
Introduced the
Wikimedia Composer Merge Plugin
to help developers add dependencies to local VuFind instances more easily. This has no impact on end users; see
pull request #1425
for more details.
VuFind's controllers and controller plugins now respect the same “-aware” interfaces as other VuFind plugins, making it possible to auto-inject loggers, etc. (see
pull request #1441
).
The “Search2” secondary Solr backend (see
Combining Search Types
) is now fully compatible with
Hierarchies and Collections
; see
pull request #1478
Support for profiling (a tool for developers) has been updated; see
pull request #1487
Improved PHP 7.3 and 7.4 compatibility.
Possible backward compatibility breaks:
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
The new email login capability adds some new features to the authentication logic along with some minor refactoring; if you have custom authentication code, you should review
pull request #1409
to be sure you are not impacted by it.
Templates related to search filters have been changed significantly to fix a bug introduced in release 6.0 and to improve the revised functionality; if you have customized the filters.phtml template, or a template that includes filters.phtml, you should adjust to match the changes in
pull request #1482
pull request #1499
and
pull request #1500
(plus this subsequent
bug fix commit
).
Low-level filtering/validation of parameters was introduced by
pull request #1518
. This should have no impact on normal activity within the system, but if you encounter unexpected parameter processing behavior, you should investigate these changes.
The itemLimit setting used for paginating holdings in some ILS drivers (Alma/Demo) has been moved from the “Holds” configuration to the more appropriate “Holdings” configuration. If you have taken advantage of this feature in a custom driver or if you have changed it in your driver's .ini file, you should move the setting – see
PR #1463
To fix a minor bug, the $messages property of VuFind\Form\Form has been redefined – it now contains raw, untranslated messages instead of fully translated messages (see
pull request #1534
). If you have extended the class and added values to this property, you may need to make adjustments to avoid double translation.
Some minor improvements have been made to item status display logic; if you notice an unexpected change in behavior, see
pull request #1466
for details.
Some changes to record collection creation have been made for performance reasons, but they should not change behavior; see
#1488
for details.
The title_sort field MARC indexing rule has been made more explicit, instead of using a custom method. In the unlikely event that you have customized the getSortableTitle method in SolrMarc, you may need to adjust your settings. See
pull request #1393
The default controller permission is now “null” rather than “false” – this is functionally identical, but it is a change needed to support the new configuration options in
pull request #1395
. In the unlikely situation that you have customized a controller with an accessPermission property of false, you will be unable to override it with the new configuration settings unless you change the value to null first.
Also related to
pull request #1395
: if you have extended a controller simply to change its accessPermission value, you should now be able to use the new permissionBehavior.ini controllerAccess setting instead to reduce the amount of custom code in your instance.
The mechanism for detecting when VuFind is in lightbox mode has been unified; this should not impact downstream code, but if you encounter lightbox problems, see
pull request #1405
The HierarchicalFacetHelper::sortFacetList method's signature has changed slightly, but in a backward-compatible way. In the very unlikely event that you have extended this service, you may need to make adjustments. See
pull request #1389
The way the VuFind theme system overrides Zend Framework functionality has been simplified significantly (see
pull request #1436
), but there should be no functional differences.
Press Release
Release 6.0.1 - 16 Sep 2019
Minor bug fix release.
Includes some minor security improvements.
Release 6.0 - 15 Jul 2019
New features:
Significant improvements to the display of active filters in search results, moving the list out of the facet sidebar and into the space beneath the search bar for clarity, and replacing the confusing “Retain Current Filters” checkbox with a more intuitive “Reset Filters” button.
Optional integration with the third-party
Overdrive
eBook service.
Introduction of an optional (off by default) mechanism to shorten links shared in text messages and emails (see
pull request #1372
).
Minor improvements to the custom feedback form feature (support for new input elements, better translation, etc.).
Minor improvements to the OAI-PMH server (including better performance and the new default_query, page_size and record_format_filters settings).
Improved format determination for MARC records (see
pull request #1209
).
Improved compatibility with MySQL 8 (though legacy authentication mode / default_authentication_plugin=mysql_native_password is required).
Users can now be optionally required to verify their email addresses when registering for accounts in VuFind's internal user database. (This is disabled by default – see
pull request #1354
).
New settings have been added to searchbox.ini to support optgroup grouping in the
combined search handler
drop down menu.
Added a new “ComponentParts” tab to the record view (disabled by default), which can be enabled in combination with
simple container linking
to display whole/part relationships in more detail. See
pull request #1339
Added a new recommendation module for linking to third-party searches (for example, to direct to an external site when an internal search yields no results). See
pull request #1385
for details.
An example of batch-loading XML records from OJS is now included (see
pull request #1352
).
Significant improvements (and new configuration settings) for the Alma and SierraRest ILS drivers.
Addition of simple “lint_marc”
command line utility
for detecting errors in MARC files.
The ability for the user to set a preferred home library can now be disabled through the set_home_library setting in config.ini (see
pull request #1347
).
Possible backward compatibility breaks:
VuFind now requires PHP 7.1 or newer; make sure your server can support this before upgrading!
The Solr schema has changed, so records must be reindexed after an upgrade. See the
index schema changelog
for more details.
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
As noted above, the display of active filters has been significantly redesigned; if you have customized this, you may need to revise your local templates. See
pull request #1265
and
pull request #1377
for more details.
Facet labels are now displayed based on a labelSections configuration setting instead of through hard-coded activateAllFacets() methods in the Search Params classes. This makes it easier to ensure that facet fields are labeled correctly in all contexts. Be careful that you remove any references to activateAllFacets from custom code/templates, as the method no longer exists. See
pull request #1291
for details.
Record tabs are now configured through a RecordTabs.ini file, instead of through the Zend Framework module.config.php files. This makes configuration significantly less complicated – see
pull request #1370
. If you have any custom tab configurations, you should move them out of your local module's configuration and into a local copy of RecordTabs.ini.
The signature of the getHolding ILS driver method has been changed to include an options array, and the return format has been adjusted to support optional pagination. Custom drivers may need to be adjusted for compatibility with these changes. See
pull request #1358
for details.
Several methods deprecated in earlier releases have been removed; see
pull request #1314
for details.
OAI-PMH server classes are now defined as top-level services so they can be more easily extended/overridden. This has changed the constructor signature and added an init method. Additionally, responses are now constructed in a different way for improved performance, replacing the showResponse() method with a createResponse() method. If you have customized OAI-PMH server code, you will have to adjust to match; see
pull request #1237
and
pull request #1356
for details.
As noted above,
pull request #1209
changes the default format determination rules for MARC records; if you have customized this or have a custom marc.properties, you may wish to double-check that the new method is being used and meets your needs.
The constructor signature of the VuFind\Record\Router has changed, because it no longer depends upon the VuFind\Record\Loader (see
pull request #1364
).
Buttons for performing actions on records have been re-styled for consistency and easier customization; if you have changed markup or styles on these controls, you may need to revise your customizations. See
pull request #1379
for details.
The VuFindSearch\Query\QueryInterface has been expanded to account for text normalization. Custom subclasses are unlikely, but if you have built one, it will need adjustment. See
pull request #1391
for details.
The custom Java indexing code for tracking record changes has been updated to use java.time.LocalDateTime instead of java.util.Date for clarity; see
pull request #1349
for details.
All static factory methods have been replaced with standard reusable Zend Framework factory classes. This shouldn't break anything, but if you have overridden any factories, you should review whether you can eliminate that local code and simply reuse an existing class.
The 'suppressDisplay' attribute of filters (originally introduced to hide certain advanced EDS parameters) was not working correctly and was not needed (since seeing these parameters is actually useful), so it has been eliminated; see
this commit
The 'vufindrecord' route definition has been removed (see
this commit
); this was intended for legacy compatibility after standardizing the name of the default record source from 'VuFind' to 'Solr' in release 3.0 and is very unlikely to still be needed in correctly upgraded instances.
Press Release
Release 5.1.1 - 6 May 2019
Minor bug fix/translation improvement release.
The automatic LESS to SCSS conversion process has been refined to eliminate bugs in the output. Special comment-based markers are now used to differentiate LESS-specific from SCSS-specific code in the few cases where automatic conversion is not possible. See
pull request #1316
for details.
SolrMarc full text indexing has been adjusted to prevent a crash caused by newer versions of Tika; see
VUFIND-1330
Some problems with the new AJAX account information feature from 5.1 have been corrected; if you are using this new feature, please upgrade.
Release 5.1 - 4 Feb 2019
New features:
Status updates on fines, holds, overdues, etc. can now load dynamically into the user account menu to highlight important information; an alert icon can appear in the header even when the user is outside of the account area. This feature is on by default but can be disabled through the enableAjax setting under [Authentication] in config.ini. (See pull request
#966
for implementation details).
New “SideFacetsDeferred” option to load facet data asynchronously, which may improve performance in some environments (off by default; see
pull request #1246
for details).
ILS drivers
can now report “last pickup” dates for holds (currently supported by SierraRest driver).
New
DOI Linker
plugin interface for providing full text links and contextual information based on record DOIs; currently implemented using the
BrowZine
service. See
this commit
and
this commit
for more details.
New
Configurable Feedback Forms
, greatly extending the existing feedback functionality.
New
Plugin Code Generator
to automatically create and configure custom VuFind
plugins
; see also
pull request #1247
VuFind's OAI-PMH server now supports an oai_vufind_json metadata format which allows harvesting of JSON objects formatted using VuFind's
API
configuration. This is disabled by default but can be turned on using the vufind_api_format_fields setting in config.ini. See
pull request #1241
for details.
An experimental, proof-of-concept
FOLIO
ILS driver has been created; best practices for data loading still need to be determined, and some details may change as the FOLIO platform develops further.
VuFind now deals more gracefully with changes to Summon record IDs (a normal side effect of reindexing on the Summon side).
Added
cover image loader plugin
using
BrowZine
service to fill in cover images based on ISSN when enabled.
Added example configurations for importing DSpace
DIM
metadata (see
pull request #1238
).
Added Vietnamese language support to the user interface.
Upgraded to SolrMarc 3.2 (improves Java 9/10 compatibility).
Upgraded to Bootstrap 3.4.0 (fixes some minor problems).
Possible backward compatibility breaks:
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
The default retrieval mode in sitemap.ini has changed from “terms” to “search.” This is because the “search” mode is more broadly compatible (“terms” ignores hidden filters). However, the “terms” mode is much faster. If you do not need the full-featured “search” mode, you may wish to adjust this configuration if you regularly generate sitemaps but do not already have a custom sitemap.ini.
The data format returned by VuFind\ILS\Connection::getMyTransactions has changed to support pagination. The underlying ILS driver interface is backward-compatible; drivers can be upgraded to support pagination, but this is not strictly necessary. If you have custom code calling this function, you will need to adjust it.
Some facet-related templates and Javascript functions have been moved around and adjusted for greater flexibility. (See, for example,
this commit
and
pull request #1246
). If you have customized the SideFacets recommendation module, some adjustments may be needed.
The behavior that hides the facet sidebar in narrow screen widths (such as mobile size) has been adjusted to use a button instead of a wide border (see
PR #999
). This may impact custom templates and
CSS
if you have made significant layout customizations.
The internals of VuFind\Sitemap\Generator have been refactored and improved; if you have overridden this class, you may need to adjust your subclass to match.
The internals of the VuFind\Record\Loader have been refactored for clarity; however, none of the method signatures have changed. If you have overridden any methods in a custom subclass, you should review
this commit
All cookies except for those related to the book bag functionality are now flagged as HttpOnly to help prevent XSS attacks; this should not affect anyone unless they have custom functionality to edit cookies in Javascript code. The feature can be disabled through config.ini if necessary but is enabled by default. See
pull request #1243
for more details.
The MyResearch/Fines display's template has been refactored for greater flexibility; if you have customized it, you may wish to make adjustments (though the underlying data structure has not been changed). See
pull request #1251
The import-marc-auth scripts (for both Linux and Windows) now correctly account for the solr.indexer.properties setting in import_auth.properties, appending to it rather than completely overriding it. If you do authority record importing, you should double-check that it still works as expected, though behavior changes are unlikely unless you have customized something.
Press Release
Release 5.0.1 - 10 Oct 2018
Minor bug fix release.
Release 5.0 - 16 Jul 2018
New features:
Users can view their circulation history in “My Account” (when supported by the ILS and enabled in the configuration). This is disabled by default for privacy reasons. See
pull request #1031
and
getMyTransactionHistory
in the ILS driver
spec
for implementation details.
Users may now delete their own accounts through the “Profile” page (when the new account_deletion setting is turned on; this is disabled by default). See
pull request #1105
for details.
User session data may now be encrypted by turning on the secure setting in the [Session] section of config.ini (see
pull request #1200
).
Last login date and method are now stored in the database to assist with user management.
The
Channels
interface has been significantly improved, with bug fixes and a more streamlined look and feel.
New ILS-driven
channel providers
: new items, recently returned items, trending items.
The content of the search home page (facet lists, ILS status warnings, etc.) is now much more configurable and easier to customize through the introduction of a new
Content Block
plugin mechanism.
Geographic functionality now uses
Leaflet
instead of
OpenLayers
and has some richer functionality, including better representation of search results and the ability to choose custom base maps.
The
Ex Libris Alma
ILS is now supported.
The new “Search2” backend allows a second Solr index to be configured in VuFind through a new Search2.ini file. This is useful for connecting to a third-party Solr index or for managing two separate indexes in a
combined search
scenario.
Support for
Relais
interlibrary borrowing (see
pull request #1137
).
Support for loading summaries and tables of contents from Syndetics. See
pull request #456
for details.
A new
'extendclass' generator
has been added, making it easier than ever to override services and plugins in your custom module.
The
RecordDataFormatter
view helper now supports a new 'Multi' renderType which offers new options for customizing record displays of complex data.
The AuthorityRecommend module now returns more complete suggestions (see
pull request #1166
).
Hierarchical collections now support advanced facet features consistent with other modules of VuFind (see
pull request #1040
).
Upgraded to Solr 7.3.1.
Upgraded to
SolrMarc
3.1.
Possible backward compatibility breaks:
The minimum required PHP version has been raised to 7.0.8; make sure you are running an up-to-date version before upgrading.
You should rebuild your index due to the new Solr version. If using authority records, be sure to reindex those as well and confirm that any custom solr_auth.properties file includes a “record_format = marc” line (see the changes to the
authority Solr schema
).
The new Solr version may issue a warning about operating system limits; see
Starting and Stopping Solr
for some notes on how to configure around these warnings.
Be sure to run a database upgrade to reflect table changes (see also the
database changelog
).
Some changes have been made to support the upgrade to Zend Framework's Service Manager v3.
Because the new ServiceManager has case-sensitive service names, the way VuFind retrieves most services has changed significantly. See the
service name migration
page for details. If you have services overridden in a custom module, you will need to adjust your names to match.
VuFind's static initializer methods in VuFind\ServiceManager\Initializer have been replaced with Initializer classes (see
pull request #1066
).
Default plugin manager configurations have been moved out of module.config.php and into the appropriate plugin manager classes. These settings can still be overridden through module.config.php as before, but this makes the core VuFind module configuration significantly more concise.
Many static factory methods have been replaced by factory classes for cleaner design.
The factory classes for Search Params and Results objects assume that the Options/Params/Results trio exists in the same namespace. If you override a Params object without overriding the corresponding Options, or if you override Results without also overriding Options and Params, you can set up aliases in your configuration to map the custom namespace to point to the appropriate core classes.
Adding a setPluginManager method to a plugin no longer auto-injects the plugin manager; use a factory instead (see
pull request #1069
).
VuFind\Search\BackendRegistry
class has been added to replace the scoped service manager that was previously used (scoped service managers are no longer supported). See
pull request #1068
The initialization of the ResultFeed view helper (used for building RSS feeds) has been adjusted (see
pull request #1072
).
The getSuggestions() method has been moved from \VuFind\Autocomplete\PluginManager to a new \VuFind\Autocomplete\Suggester class for cleaner design.
The record driver class hierarchy has been refactored so that non-Solr drivers inherit from DefaultRecord instead of from SolrDefault. If you have custom SolrDefault templates in your theme, you should rename their folder to DefaultRecord. You should also double-check custom SolrDefault record tab settings in module.config.php, and any custom classes you have built extending SolrDefault. Note that for Solr-based records, extending SolrDefault is still the correct course of action. See
this pull request
for details on the refactoring.
The authority-related record driver has been refactored to allow support of non-MARC authority records. If you have a custom subclass of \VuFind\RecordDriver\SolrAuth, you should change it to extend \VuFind\RecordDriver\SolrAuthMarc. If you have custom templates in the RecordDriver/SolrAuth directory, you should move them to RecordDriver/SolrAuthDefault or RecordDriver/SolrAuthMarc. See
pull request #1215
for details.
Record driver / ILS connectivity is now set up with the help of VuFind\RecordDriver\IlsAwareDelegatorFactory. If you extend/override the VuFind\RecordDriver\SolrMarc class, be sure to configure this delegator for use with your subclass in your local module's module.config.php. If you set up a new subclass using the extendclass code generator, this will be done for you automatically.
It is now possible to build AJAX functionality as
AJAX Handler plugins
; the AjaxController has been refactored to use this new mechanism. See
pull request #1138
for details.
AJAX responses have been revised in two important ways: all data values are now keyed arrays to support better extensibility, and internal status codes have been eliminated in favor of using standard HTTP statuses. If you have custom AJAX Javascript and/or handlers, they may need to be adjusted. See
pull request #1189
for more details.
Templates for displaying lists of facet values have been refactored for clarity and consistency; local customizations may need to be adjusted.
When enabled, the “change password” option is now a button on the user Profile page rather than an option in the account side menu.
VuFind's templates now use full The HoldingsILS RecordTab template has been significantly refactored for greater flexibility; see
pull request #1100
for details.
The
RecordDataFormatter
view helper's getData method return value format has changed; see
pull request #1168
for details. Some custom templates may need to be adjusted to match.
The VuFind\Cover\Loader now accepts a VuFindHttp\HttpService object instead of a Zend\Http\Client object through its constructor (to facilitate better handling of HTTP proxies).
The search/home.phtml template has been refactored into a collection of
Content Block
plugins. Custom home pages should be reimplemented using this mechanism.
Caching of facet values for home page / advanced search use has been completely refactored; see
pull request #1165
for details.
Methods for activating facet configurations have been simplified by using smarter defaults, which may impact custom search Params objects; see
pull request #1198
for details.
The \VuFind\Date\Converter class has been moved to a separate
vufind-org/vufinddate
project for improved reusability. Its constructor signature has been changed, and the accompanying \VuFind\Exception\Date has been renamed to \VuFind\Date\DateException for cleaner namespacing. Minor adjustments may be needed to custom date processing code (most likely to be found in custom ILS driver subclasses).
RefWorks exports now use a POST form instead of a
URL
callback; you may wish to re-test your integration, especially if you use a custom RefWorks
URL
in config.ini.
The default RefWorks
URL
has been changed to use HTTPS instead of HTTP; if you have customized this, you may wish to adjust accordingly.
Two unused view helpers have been removed: jqueryValidation (see
this commit
) and mobileUrl (see
this commit
). If your custom theme relies on these, you should either replace them or copy them into your local module.
ILS driver internal caching behavior has been moved from VuFind\ILS\Driver\AbstractBase to VuFind\ILS\Driver\CacheTrait, since the logic is used by a minority of drivers. If you need this functionality in your custom driver, just add an appropriate “use” statement to the top of your driver class.
The markup and styling for record tabs has been adjusted slightly for greater flexibility; adjustments may be needed if you have custom
CSS
or code in this area. See
PR #1158
for details.
If you are using geographic capabilities, it is recommended that you move configuration settings from the [Content] section of config.ini and the [MapSelection] section of searches.ini into the new geofeatures.ini. Also note that custom Javascript and templates will need to be adjusted due to the transition from OpenLayers to Leaflet.
The ChannelsController has been significantly refactored to improve the quality of the channel loading code (see
PR #1174
). The front-end channels code has also been completely rewritten to leverage third-party code, improve look and feel, and fix several bugs (see
PR #1190
).
Cover loading and generation has been significantly rewritten for better extensibility (see
pull request #1181
).
QR code generation has been significantly rewritten to use the endroid/qr-code library (see
pull request #1183
).
The getRelated method has been removed from the record drivers; the logic is now part of the related view helper. See
this commit
for details.
The AuthorityRecommend module now returns data in a different format (headings only, instead of associative arrays), so custom templates may need to be adjusted; see
this commit
The Horizon and HorizonXMLAPI ILS drivers have been updated to use PDO instead of the deprecated mssql_* functions. This may require installation of different PHP modules on your system.
The AJAX methods getSalt and login have been removed, along with the VuFind\Crypt\RC4 class that supported them; all of this code has been unused for quite some time.
The ClaviusSQL ILS driver is no longer being maintained or used and has been removed; it is available in a
legacy/clavius
branch on GitHub if anyone wishes to revive it.
The Solr query builder is now smarter about which fields it highlights. In support of this, the setCreateHighlightingQuery() method has been deprecated in favor of a new setFieldsToHighlight() method. See
pull request #1078
for details.
Search history management has been refactored to a service, instead of being built into the SearchController; see
pull request #1018
The $marcRecord property of the SolrMarc record driver (deprecated since release 2.5) has been completely removed; use getMarcRecord() instead.
To improve performance, hierarchy support for non-Javascript browsers has been turned off by default; it can be enabled with the nonJavascriptSupportEnabled setting in config.ini. See
pull request #1145
for details.
The ZF2_PATH environment variable is no longer supported (though it is unlikely anyone ever used it). Loading an external copy of Zend Framework components does not make sense now that VuFind relies on Composer.
Press Release
Release 4.1.3 - 11 Jun 2018
Minor bug fix/translation update release.
Fixes PHP 7.2 compatibility issues.
Release 4.1.2 - 29 Jan 2018
Minor bug fix/security release.
Release 4.1.1 - 20 Nov 2017
Minor bug fix release.
Release 4.1 - 2 Oct 2017
New features:
Added support for searching
BrowZine
from within VuFind; useful for adding a “Journals” column to a Combined search screen.
New Alphabrowse
channel
provider to allow a simple form of virtual shelf browsing.
The
Channels
home page may now be cached to improve performance (on by default; see channels.ini).
Improvements to performance of the
asset pipeline
Integration of the
Whoops
error handler for more detailed debug information after unexpected exceptions (only active in development mode).
More flexible configuration options for permission handling; you can now configure how denied permissions are managed in templates and controllers. See
Permission Options
for documentation.
Alphabetical browse
options can now be configured to be included in the default VuFind search options drop-down on every page. See the includeAlphaBrowse setting in
searchbox.ini
"Mix-in"
feature allowing discrete packages of templates and assets (JS/
CSS
/etc.) to be easily shared and incorporated into themes.
Command line
theme compiler
tool which can flatten a hierarchy of themes into a single theme for improved performance.
Theme generator
command line tool.
New “SierraRest” ILS driver: an alternative to the existing Sierra driver that adds more functionality using the product's RESTful
API
Default
Vagrant
configuration to offer a simple option for creating a development instance.
Geographic feature improvements, including an improved drag-and-drop selection interface, an optional graticule setting, and an upgrade to
OpenLayers
4.2.0.
Minor upgrades to several Zend Framework components; should not introduce any backward compatibility breaks.
Added Galician translation (not yet 100% complete).
Possible backward compatibility breaks:
AJAX routines for item status, save status and automatic OpenURL embedding now only retrieve information for visible elements, in an effort to improve responsiveness and reduce server load. Custom AJAX code in your theme may need to be adjusted to match. See pull request
#950
Access to Primo Central is now controlled by an access.PrimoModule permission. By default, this permission is configured to be allowed for everyone; if you have a custom permissions.ini, you may need to copy the relevant block from the default version.
VuFind\Controller\AbstractBase::forceLogin() has been changed from protected to public. If you have overridden this in a subclass, you will need to adjust your code to match.
The translated_facets[] setting is now turned on by default for supported fields in facets.ini, EDS.ini and Summon.ini to provide a more consistent i18n experience. If you have customized these config files, review and make sure that the setting is appropriate for your situation.
The Koha ILS driver now uses VuFind's date converter to format date strings; if you have a custom subclass, you will need to switch your service configuration to use a factory instead of an invokable.
Press Release
Release 4.0.1 - 28 Aug 2017
Minor bug fix / translation improvement release.
Release 4.0 - 10 Jul 2017
New features:
New serendipitous browsing module: the
Channels
interface.
New (beta) theme: sandal, featuring a more modern, flat look than bootprint3.
Swagger
-based
APIs
for retrieving search results and record details programmatically.
Recommendation module to detect DOIs in search queries and redirect the user to a resolver.
Support for hosting
static, i18n-capable pages
within the VuFind framework.
New LocalFile cover loading option to retrieve thumbnails from disk using a path pattern (see
this commit
).
Support for using VuFind to authenticate
EZproxy
users.
Support for
Shibboleth
single logout.
Support for configurable placeholder text inside search boxes (see [SearchPlaceholder] section in
config.ini
).
Improved, more mobile-friendly “add to book bag” interface (see bookbagTogglesInSearch in
config.ini
; on by default but can be turned off to restore legacy interface).
Dynamic covers now support multiple sizes through extra configuration (see
this pull request
).
Upgraded to Solr 6.4.2.
Upgraded to use newer Zend Framework components.
Added support for
profiling
with
Tideways
as an alternative to the outdated
XHProf
Possible backward compatibility breaks:
This release requires at least PHP version 5.6; please make sure you have this before upgrading.
You should rebuild your index due to the new Solr version and minor schema changes (see also the
schema changelog
).
Be sure to run a database upgrade to reflect newly added tables (see also the
database changelog
).
Newer versions of Zend Framework no longer support the ServiceLocatorAwareInterface. Many services in VuFind have been refactored to receive their dependencies through their constructors, and many factories have been adjusted accordingly. You should review any custom services/plug-ins you have built and adjust them as needed. Also note that getServiceLocator() should no longer be used in controllers; instead, access the serviceLocator property directly (or better yet, refactor controllers to use dependency injection so that they do not need direct service locator access at all). For some examples, see pull requests
#900
#909
#910
#918
#919
and
#929
The jquerymobile theme has been removed due to obsolescence. If you need it, you can still access it as an
unsupported legacy branch in Git
VuFind's built in statistics-gathering functionality has been removed; it is recommended that Google Analytics or Piwik be used instead, as these are more scalable and feature-rich. The old code can be restored from a
legacy branch in Git
if actually needed.
Row gateway objects are no longer constructed by table gateway objects; instead, they have their own
plugin manager
. If you have customized any database row classes, you may need to adjust your configuration.
A new
RecordDataFormatter view helper
has been introduced to help make displays of tabular record data more configurable. This should make many common customizations easier to maintain while also allowing more granular customization on a per-record-driver basis; however, it also adds a learning curve to customizing some templates. See the
wiki page
for technical details. If you have custom record driver templates, they may need to be updated. (See also
this commit
, which changes the way authors and their roles are rendered, and
this commit
, which finalizes the return format of the helper).
The UrlQueryHelper used for generating query parameters for VuFind searches has been significantly revised for more flexibility; see pull requests
#850
and
#851
for details. Most significantly, the removeFacet() method has had its parameter order changed, requiring adjustments to the TopFacets.phtml and SideFacets.phtml Recommend templates.
Some
CSS
styling and
HTML
structure has been revised in the Bootstrap-based theme to simplify markup; you should double-check your custom templates against the core versions to be sure they are in sync (see also, the
css changelog
).
Some
HTML
markup related to the search box has been changed; previous VuFind versions had some responsive design features that required two copies of the search box to be included on the page. This caused problems, so the box has been reduced to a singleton. See
this pull request
The data-lightbox-onclose and data-lightbox-onsubmit attributes no longer support arbitrary Javascript code; instead, for better security, you must pass in a function name. See the
lightbox page
and
this pull request
for more details.
Some
HTML
markup has been revised to use the form attribute to reduce the possibility of problems related to nested forms. See
this commit
for details.
Encryption functionality has been changed to use OpenSSL instead of the obsolete Mcrypt module. For most users, this should be a seamless change. However, if you are using a custom encryption method other than aes, blowfish, des, camellia, cast5 or seed, you will need to convert to one of these methods prior to upgrading. See pull request
#895
for details.
Google Maps support has been removed; use the more robust OpenLayers functionality instead. Additionally, some
Solr schema changes
have been made related to geographic features.
The Voyager ILS driver now connects to the database more efficiently, and the $db property has been eliminated. If you subclass Voyager or VoyagerRestful, you must change all $this->db references to $this->getDb().
The Voyager/VoyagerRestful ILS drivers now block patron login if the barcode status code is not 1 or 4. If your Voyager installation uses non-standard codes, you can configure this in the relevant driver .ini file. See
this commit
for details.
The getAllSubjectHeadings record driver method has been given a new $extended parameter, and some implementations have been refactored to improve extensibility; if you have customized this method, see
this pull request
for details.
The format for search tab data used by the SearchBox view helper has changed slightly to accommodate placeholders; if you have customized tab functionality, you may wish to consult
this commit
Due to changes in the zend-mvc component, the 'viewmanager' service is no longer used to retrieve view-related dependencies; instead, relevant components are retrieved directly using direct service names: 'ConsoleRouteNotFoundStrategy', 'ViewResolver', 'ViewRenderer' and 'ViewHelperManager'.
Some integration details for the zend-eventmanager component have changed to support the 3.x version; see
this commit
for details.
Link Resolver Drivers
have been restructured; the DriverInterface now supports some new methods, and an AbstractBase class has been introduced to provide useful default implementations. If you have a custom link resolver driver, you will likely need to update it.
VuFind no longer ships with BeanShell indexing scripts for SolrMarc; these are redundant now that the Java code for custom routines is bundled with VuFind and compiled on-the-fly. The Java code has been refactored for ease of maintenance/readability. See
SolrMarc: Custom Java Best Practices
for some advice on managing your own custom Java. Note that you can still use BeanShell scripts if you wish – but switching to Java will improve performance.
A new version of the ReCaptcha library used by VuFind has been installed; some details have changed, so custom ReCaptcha code may need to be adjusted; see
this commit
and
this commit
for details.
If you use the @parent_yaml setting in any of your YAML files, you must put the setting name in quotes – e.g. change
@parent_yaml: “file”
to
“@parent_yaml”: “file”
. This is necessary to comply with stricter syntax checking in the latest version of the Symphony/Yaml library.
VuFind's session cookie is now VUFIND_SESSION by default, instead of the generic PHP_SESS_ID. This can be configured through the session_name setting in
config.ini
. This will prevent data contamination during upgrades, since some Zend Framework objects have changed. See
this commit
A new service has been created for saving favorites, instead of allowing the record driver object to handle this functionality; see
this commit
for details.
The VuFind\Log\Logger is now built and configured by a factory; built-in self-configuration logic has been removed. If you have customized the logger, see
this commit
and rearrange your code accordingly.
The $left property of VuFind\View\Helper\AbstractLayoutClass and its subclasses has been renamed to $sidebarOnLeft for clarity. If you have created a custom subclass, you may need to make adjustments.
For clarity of naming and consistency with current Solr examples, the default Solr configuration has been changed so that the Terms component is accessible at a /terms
URL
instead of the old /term. This is only used for sitemap generation and should not cause any problems as long as your solrconfig.xml comes from the same version as the rest of your VuFind code.
Switching VuFind into “ILS offline” mode has been significantly redesigned to detect a broader range of possible problems; this should not introduce any backward compatibility breaks (unless you are overriding the VuFind\ILS\Connection class, which is unlikely), but it may cause VuFind to behave differently under some failure scenarios. See
this commit
for details.
Command line utilities now make better use of native Zend Framework routing, and the custom VuFind-specific filename-based router has been eliminated. See
this pull request
The logic for dealing with account blocks in the ILS driver has been revised. If your ILS driver uses the special 'block' value when handling requests (holds, recalls, etc.) it will need to be revised to implement the getRequestBlocks method instead. See
this pull request
The format of the data array returned by the \VuFind\ILS\Logic\Holds class (usually accessed through the getRealTimeHoldings record driver method) has been revised; it now contains 'blocks' and 'holdings' keys instead of simply consisting of holdings. Custom templates may need to be adjusted to match.
\VuFind\ILS\Driver\VoyagerRestful::getRemoteCallSlips has been renamed to getCallSlips and given a parameter to allow optional retrieval of local as well as remote slips. This should only affect you if you have subclassed the VoyagerRestful driver and customized functionality related to callslips.
\VuFind\ILS\Driver\Voyager::processHoldingData has had the default value of the $patron parameter changed from false to null; if you have subclassed the driver and overridden this method you should adjust to match. See
this commit
The “terms” method of the Solr search backend has been made more flexible, but it should be fully backward-compatible. See
this commit
for details.
Some no-longer-used custom indexing code/configuration related to an obsolete OCLC system serving LC name authority records has been removed. See
this commit
The default holdings_grouping setting in the [Catalog] section of config.ini has been changed from “holdings_id” to “holdings_id,location” for improved accuracy (most users will be unaffected).
The checkILLRequestIsValid / checkRequestIsValid / checkStorageRetrievalRequestIsValid ILS driver methods now can optionally return an array with a custom status message. This does not break backward compatibility with the old boolean return values.
Some status-related blocked*Action() controller methods have been eliminated, as they are no longer needed.
Press Release
Release 3.1.4 - 5 Jul 2017
Minor bug fix release.
Release 3.1.3 - 13 Mar 2017
Minor bug fix/translation expansion release.
Release 3.1.2 - 16 Jan 2017
Minor bug fix/translation expansion release.
Includes upgrade to SolrMarc v3.0.6.
Release 3.1.1 - 31 Oct 2016
Minor bug fix release.
Includes upgrade to SolrMarc v3.0.2.
Release 3.1 - 26 Sep 2016
New features:
New optional mechanism to explore/sort facet lists (currently supported for Solr and Summon). See
this pull request
for details.
New optional “asset pipeline” to combine and compress
CSS
and Javascript files for improved performance. Off by default; see the new asset_pipeline setting in config.ini (and
this commit
) for details.
The
SolrMarc
indexing tool has been upgraded to version 3.0.1, a major release that adds greatly improved performance and significant new features.
Indexing of MARC relator terms has been improved.
New optional feature (off by default) to dynamically embed full record information into search results and favorite lists instead of loading a separate record page. See
this commit
for details.
Improved geographic functionality: existing Google Maps functionality has been updated to reflect
API
changes, and new experimental OpenLayers-based modules have been added which include more robust features. See
pull request #722
for details/history.
New (somewhat experimental) KohaILSDI ILS driver, which uses Koha's ILS-DI
API
for augmented functionality. The plain Koha driver still remains for users with older Koha systems that do not support the
API
New PAIA ILS driver, implementing the
PAIA
specification as an extension of the DAIA driver.
New settings to enforce specific password patterns; see
this commit
Optional setting to link displayed call numbers to a specific browse index. See
this commit
Added optional first/last navigation to supplement next/prev navigation on the record page (for moving through the current set of search results); see the first_last_navigation setting in config.ini.
Tag search now supports wildcards.
Support for faceting authority records using new RDA values.
Improvements to web accessibility within Bootstrap3 theme.
Sidebar facet lists now stay collapsed/expanded across searches/pages for more consistent user experience.
Frequently used record tabs may now be auto-loaded in the background to improve the user experience (this is off by default but can be configured through module.config.php – see
this commit
for details).
Optional support for the Solr MoreLikeThis handler allows similar item results to be displayed for sharded indexes; see
this commit
for details.
The Voyager and VoyagerRestful ILS drivers are no longer dependent on the poorly-supported PDO_OCI PHP module.
User comments may now optionally be protected with ReCaptcha.
Logger integration with
Slack
Search specification YAML files now support a @parent_yaml property for manually-chained inheritance.
Possible backward compatibility breaks:
The new release of SolrMarc has been designed with backward compatibility in mind, but because it is a major revision, watch carefully in case of backward-incompatible changes. As of this writing, the only known differences are some minor changes to the handling of punctuation in the topic and title_sort fields, both of which seem to improve results slightly. Also note that the log4j configuration has been adjusted, so if you have customized your own logging settings, these may need to be re-examined.
Indexing of relator terms has become more complex to support the rich data available in some records. If you see warnings during indexing time about “Unknown relators” you may need to make some adjustments to the author* settings in
marc.properties
and/or the synonym mappings in
author-classification.ini
. See comments in both of those files for details.
Removed getController() method from the Record view helper; this has served no purpose since VuFind 2.4.x, but some meaningless references to it have lingered in templates through 3.0.x. Remove any references from your local custom templates!
Search result and list templates (result-list.phtml and list-entry.phtml in record driver template directories, plus the wrapping templates/search/list-list.phtml) have been switched to use
Bootstrap's media objects
. Visual anomalies may occur if custom templates are not adjusted to utilize new styling. See
this commit
for details.
Tags are now case-insensitive (and displayed in all-lowercase) by default. This works around some strange MySQL behavior in previous releases, but it marks a change in behavior for PostgreSQL users. All database platforms are now capable of supporting either case-sensitive or case-insensitive tags. If this is important to you, to ensure proper data and configuration, it is recommended that you first run the upgrade script to upgrade the configuration only (skip the database step). Then select your desired case sensitivity setting in the [Social] section of config.ini. Finally, re-run the upgrade script, skipping the configuration step. You may be prompted to merge duplicate tags (if you are moving from a case-sensitive PostgreSQL instance to a case-insensitive configuration). See
VUFIND-1187
for more history on this issue.
VuFind\View\Helper\Root\Record now has a dependency on VuFind\Cover\Router for thumbnail
URL
generation; if you have a custom subclass of this helper, make sure to adjust your factory to inject the additional dependency. See
this commit
for details.
VuFind's session handlers must implement a disableWrites() method. This is handled in the current abstract base handler. If you have a custom subclass of VuFind\Session\AbstractBase, you should rename your write() method to saveSession(). See
this commit
for details.
The formatCacheKey() ILS driver method introduced in release 3.0 has been renamed getCacheKey(). If you have a custom driver implementing this method, please rename it. See
pull request #698
for details.
The LBS4 ILS driver is now a subclass of the DAIA driver in order to allow more complete/reliable functionality; some additional configuration in LBS4.ini will be necessary to enable communication with the DAIA
API
The Piwik view helper has been improved to track lightbox behavior in the Bootstrap3 theme; if you have customized the helper, you may need to make adjustments.
Due to changes to the Google Maps
API
, all existing map-related functionality has been revised to require an
API
key in config.ini. See the googleMapApiKey setting in the [Content] section.
VuFind's OAI-PMH harvester has been moved to a
separate project
. It is still included with VuFind as a Composer dependency, so no functionality has changed. If you have customized the harvest code, however, you may need to adopt a different strategy.
The display of the format list in the Bootstrap-based themes has been significantly simplified. Custom templates might need minor adjustments.
Press Release
Release 3.0.3 - 1 Aug 2016
Minor bug fix release.
Release 3.0.2 - 5 Jul 2016
Minor bug fix release.
Release 3.0.1 - 27 May 2016
Added missing ReCaptcha support to Feedback module.
Expanded translation support (including new full Bengali translation).
Minor bug fixes.
Possible backward compatibility breaks:
The Feedback controller and related templates were significantly changed to fix broken functionality.
Some details of the Javascript autocomplete control were adjusted to resolve bugs.
Release 3.0 - 25 Apr 2016
Release 3.0 Release Notes
Release 3.0 Press Release
Release 2.5.4 - 25 Apr 2016
Release 2.5.4 Release Notes
Release 2.5.3 - 18 Apr 2016
Release 2.5.3 Release Notes
Release 2.5.2 - 3 Feb 2016
Release 2.5.2 Release Notes
Release 2.5.1 - 11 Jan 2016
Release 2.5.1 Release Notes
Release 2.5 - 28 Sep 2015
Release 2.5 Release Notes
Release 2.5 Press Release
Release 2.4.1 - 25 May 2015
Release 2.4.1 Release Notes
Release 2.4 - 23 Mar 2015
Release 2.4 Release Notes
Release 2.4 Press Release
Release 2.3.1 - 17 Nov 2014
Release 2.3.1 Release Notes
Release 2.3 - 11 Aug 2014
Release 2.3 Release Notes
Release 2.3 Press Release
Release 2.2.1 - 26 Feb 2014
Release 2.2.1 Release Notes
Release 2.2 - 27 Jan 2014
Release 2.2 Release Notes
Release 2.2 Press Release
Release 2.1.1 - 9 Sep 2013
Release 2.1.1 Release Notes
Release 2.1 - 26 Aug 2013
Release 2.1 Release Notes
Release 2.1 Press Release
Release 2.0.1 - 25 Jun 2013
Release 2.0.1 Release Notes
Release 2.0 - 24 Jun 2013
Release 2.0 Release Notes
Release 2.0 Press Release
Release 2.0RC1 - 29 Apr 2013
Release 2.0RC1 Release Notes
Release 2.0RC1 Press Release
Release 2.0beta - 1 Oct 2012
Release 2.0beta Release Notes
Release 2.0alpha - 2 Jul 2012
Release 2.0alpha Release Notes
Release 1.4 - 28 Jan 2013
Release 1.4 Release Notes
Release 1.4 Press Release
Release 1.3 - 30 Jan 2012
Release 1.3 Release Notes
Release 1.3 Press Release
Release 1.2 - 1 Aug 2011
Release 1.2 Release Notes
Release 1.1 - 21 Mar 2011
Release 1.1 Release Notes
Release 1.0.1 - 13 Aug 2010
Release 1.0.1 Release Notes
Release 1.0 - 15 Jul 2010
Release 1.0 Release Notes
Release 1.0RC2 - 14 Dec 2009
Release 1.0RC2 Release Notes
Release 1.0RC1 - 15 Oct 2008
Change information is unavailable for this release.
Release 0.8.2 (Revision 549) - 21 Apr 2008
Release 0.8.2 Release Notes
Release 0.8.1 (Revision 530) - 15 Apr 2008
Release 0.8.1 Release Notes
Release 0.8 (Revision 402) - 18 Mar 2008
Release 0.8 Release Notes
Release 0.7 (Revision 264) - 12 Dec 2007
Release 0.7 Release Notes
Release 0.6.1 (Revision 133) - 22 Aug 2007
Release 0.6.1 Release Notes
Release 0.6 (Revision 118) - 16 Aug 2007
Release 0.6 Release Notes
Release 0.5 - 18 Jul 2007
Release 0.5 Release Notes
Alpha
Alpha Release Notes
changelog.txt
· Last modified:
2026/04/23 19:18
by
demiankatz
US