About Features Downloads Getting Started Documentation Events Support GitHub

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

Site Tools


Warning: This page has not been updated in over over a year and may be outdated or deprecated.
videos:vufind_10.0_-_what_s_new_what_s_changed

Video Changelog: VuFind® 10.0: What's New / What's Changed

This recording highlights new features and significant changes in the VuFind® 10.0 release.

Video is available as an mp4 download or through YouTube.

Slides.

Transcript

This is a machine-generated transcript; it will be improved upon as time permits.

hello this is Damen CS chair of the fine project management committee and director of Library technology at Villanova University's fvy Library uh today sees the release of a new major version of youfind youfind 10.0 and this video is going to talk about what's new and what's changed we'll start by highlighting some new features and improvements and then talk about some things that you may need to be aware of if you've deeply customized the code as always we try to make upgrades as painless as possible but due to some pretty significant changes required to keep up with technological changes there are definitely some things you'll want to be aware of uh if your view find is heavily customized so let's start with new features uh first of all the new release has two new themes in it uh which were're currently considering beta status but as you'll learn soon uh they'll be elevating pretty quickly uh these are the bootstrap 5 and sandal 5 Themes which are relatively equivalent to the historical bootstrap three and sandal themes the main difference being that they use the latest release of the bootstrap framework instead of the older version three uh this brings some improved security and accessibility features uh to the interface and this is a road we will be going further down in future releases also a significant change to the user interface is a more Dynamic method of rendering search results so that as users interact uh with the results the full page doesn't have to reload making things a little bit more responsive and Speedy though this new search rendering method can be disabled if you don't want it we've also added support for persistent logins so there's uh a configuration setting that can be used to turn on a remember me checkbox that will allow users to stay logged in across browser sessions if they so desire we've added rate limiting functionality to help combat abusive behavior and outof control Bots uh so if you're having traffic problems in viewfs to combat those problems we've added a feature called explain which can be turned on to enable popups that explain solar relevance ranking calculations within search results uh this can be use if you have power users like uh Advanced Librarians who want to fully understand why the search results are in the order they're in uh it can be quite helpful for troubleshooting and it can make things a bit more readable than looking at solar's debug output directly we've added support for onscreen virtual keyboards which can be useful if you need users to search your collection using uh character sets that aren't easily available on their native keyboards we've added the ability to uh use user input to filter facet lists in the facet popups so if you have a facet field with hundreds or thousands of values uh this makes it possible to narrow things down pretty quickly we've added support for multi-page selection in favorites lists meaning that if users are checking off records to perform both actions like removing them from favorites or emailing them uh the checkbox selections persist across pages of results uh making it a little bit easier to do larger bulk activities uh and no longer restricting those bulk actions to a single page of results uh We've also added a couple of new recommendation modules consortial viewfinder Consortium uh this is useful for example uh if you are at a library which interacts with a Consortium that uses reshare of youfind based uh index for uh inter Library borrowing and lending uh there's also the databases module which can provide a list of databases that seem relevant to the search results uh this can be driven either with the lib guides API or through local configuration depending on what you have available to you uh we also have added a new specialized ILS driver called composed which allows you to expose a single ILS driver interface by composing together methods from multiple classes uh this isn't heavily used anywhere yet but it may be useful for some special cases such as if you want to provide most of your functionality through your ILS but I want to provide some additional functionality from other systems the release ads support for network error logging headers uh which can be turned on in content security policy. inii uh this allows you to instruct your users web browsers to send error information to a server of your choice which can be helpful for identifying problems out in the wild uh we added support for displaying links to content that is bound together the bound with system it's currently only supported by the folio ILS driver but any ILS that supports the presentation of this can be updated to take advantage of this new mechanism uh We've also added the ability to display lists of citations and citing Works uh in the Primo module if you use that uh We've added support for integrating with the easy proxy URL Checker Tool uh which can help determine which of your links need a proxy prefix and which do not so that prefixes can be applied dynamically uh We've added support for deeply searching within nested collections if you're using the hierarchical collections feature though this does require some additional indexing which I'll talk about later and finally we have added a new content provider for tables of contents uh in addition to all of those new features we've also made a few improvements many of which are new configuration settings offering previously unavailable customer ation uh one big one is that the user account menu that appears when the user is logged in and interacting with their account can now be customized through a new file called account menu. yaml this can be used to add remove or reorganize the options in the menu uh the record data formatter tool which is used to format many of the uh online displays of record data is now configurable through an inie file called record data format. in the past if you wanted to change record data formatter Behavior you had to edit code but now many changes can be made simply through this configuration file and in addition to making record data formatter more easily configurable we added uh some new options uh most notably the data method prams option uh which can be used to send arguments to the method used to fetch data from your record Drive uh We've also added some new configurations related to pagination controls it's now possible to display the pagination control and search results at the top as well as at the bottom of the results through the top paginator setting we've also added some new spell checking functionality the solar system offers multiple spellchecking methods and in the past we only supported index-based spell checking uh but now we've added the ability to turn on solar's Direct spell checker as an alternative if you want to try that uh both spell Checkers have different advantages and disadvantages uh the main advantage of the direct spell checker is that it does not require the construction of a separate spell checking index in order to operate we've added a new hidden sorting section to some of our configuration files which can be used to make uh certain sort options legal without actually showing them in the user interface sort dropdown uh this is useful for example if you want to provide direct links to uh results sorted in a particular way but that sort isn't more generally useful to your users uh We've also added some new functionality to our new item search uh it can now be configured to sort its results differently than other uh search result lists for example it might make sense for your new items to be sorted by date of addition to the collection which might not be a sort you want to expose in other places and additionally we've added the ability to prefilter new items with facet values which can be configured and finally the functionality that embeds schema.org metadata in the markup of record Pages can now be turned off if you don't want it uh some situations have been identified where this metadata is actually unhelpful for uh search engine optimization purposes so if you want to get rid of it you can just turn it off with the include schema org metadata seter we've also made some significant improvements to internationalization and translation one big thing is that the system now supports the ICU message format or Syntax for tokens which means that you can uh support Advanced pluralization uh so for languages that need to use different phrasing based on different numbers uh there's ways to conditionally spell this all out within the language file and have uh the display appropriately applied this is not currently being used very widely but with the functionality in place we can uh begin to take advantage of it in future releases it's also now possible to Alias language strings for other language strings uh which can be useful when we want to have the ability to to customize things individually but by default uh we want them to have the same translation this way we can set up aliases through a file called aliases that lets the translation system know which values to use without requiring us to ask our translation team to translate the same text multiple times unnecessarily uh We've also added support for translating the names of languages so for example uh in the record view where we display the language of a work or in the facets where we list the facet by language values all of those language names are now internationalized whereas previously only the English versions of the names were displayed finally we have a couple of new interface languages Maui which is a work in progress but uh significantly fleshed out in 10.0 and Mongolian which was actually introduced in release 9.1.1 but since it wasn't announced in the what's new in 9.1 video I thought I'd mention it here uh several ILS drivers have had minor improvements and updates so if you use folio coha rest Sierra rest or xnp 2 uh you may have some new options available to check out in your any files or at very least things might work a little bit better and that covers all of the new functionality so now it's time to start talking about things that have changed so first of all as is often the case we've made some dependency changes we've raised the minimum PHP version requirement from 8.0 to 8.1 since the 8.0 version is no longer supported and should no longer be used uh and 8.1 offers some nice new language features that have made some of our code less for both so it's been a pleasant update uh additionally we've upgraded solar to version 9.5 just to keep up with developments over there uh we strongly recommend that you do a full reindex when you upgrade just to be sure that all of your data is formatted appropriately for the new version of solar but also because we've made some small changes to our solar index first of all as I mentioned earlier we have this new deep searching within collections functionality that can be turned on if things are indexed correctly uh if you want to take advantage of this uh it will require some indexing setup uh we recommend using a field called hierarchy all parents string multivalued but it's configurable so you could use a different name if you preferred and more significant to the majority of users is the fact that we've made the URL field indexed uh in solar whereas previously it was only stored and what this means is just that you can now search for URLs in a way that you couldn't before or for example do a filter of URL CL star to bring back only records that have URLs associated with uh finally we've uh updated the language translation map for Mark records so that the labels match the latest Mark standards uh what we've had in the past was a little bit out of date and some things had changed and even though I said finally on that last bullet there's actually one which is that the alphabetical browse Handler and the related indexing scripts have been modernized and updated um some parameters have changed and so if you have a custom alpab browse index script you might need to make some minor adjustments just to bring it up to date uh We've also made some changes to our database schema uh biggest addition is a new table called login token which is used for the persistent login functionality that was added in the release uh but we've also changed the search table so that the user ID field faults to null instead of zero uh it was noticed that the user ID field was not set up in such a way that would allow it to be a forign key to uh user uh and while we haven't added a forign key yet we probably will in a future release we're doing this in steps to make the upgrade process as painless as possible uh but after this release you'll find that uh search rows that aren't associated with the user will have a null user ID instead of a user ID of zero which honestly makes a lot more sense anyway uh now let's talk about some changes impacting the user interface uh biggest thing of course is the evolution of themes I already mentioned we're adding some new beta themes that bring bootstrap five into the system uh and just to talk a little more about the long-term strategy here uh in release 10.1 we are going to deprecate all of the bootstrap 3 based themes and we will make the bootstrap 5 based themes uh non beta they will be official we just want to offer this beta period uh in the 10.0 series of releases so that people have time to give us feedback and try things out um but we don't want to take too long to get migrated fully to bootstrap 5 uh because bootstrap 3 is quite out of date and maintaining all of these themes in parallel takes a lot of extra development effort so by the time we get to release 11 sandal 5 will become the default theme and all of the bootstrap 3 themes will be completely removed uh so that means there's about a year now uh where all of us can work on getting our local themes in sync with bootstrap 5 instead of bootstrap 3 but we'll be too alarm uh because we've tried to make this as easy as we can there are some tools for automatically converting templates there are some backward compatibility layers to reduce the amount of change necessary uh and we have a page in the wiki called themes based on bootstrap 5 that has all the details of what needs to be changed so I hope that uh this race period will allow everyone to be ready and by the time we get to vif find 11 we can be happy to be on a modern version of bootstrap uh and we won't have spent too much time getting there some other uh important user interface changes include the fact that our autocomplete functionality has been moved from the commonjs file to the searchbox controls. JS file since that's a more appropriate place for it and it's been fairly significantly refactored along the way so if you've customized autocomplete stuff you may need to make some adjustments there uh We've also renamed replaced and Consolidated some translation strings uh so so for example the past days string now uses the ICU message format or syntax that I mentioned this was our test case uh when we introduced that functionality uh there were some redundant strings that have been replaced with entries in aliases to reduce duplication in the language files uh there were some strings that had a underscore selected suffix that have been renamed to instead have a bulk prefix to get all of the bulk related text grouped together and we did some work to normalize and clarify the language around favorites so there used to be strings called favorites my favorites and your favorites that have all been replaced with default list title and saved items uh because essentially the two uses for these various strings were either to establish the name of the user's default list and to display menu items linking to saved items uh so now if you want to customize the default list title you can do that independently of the labeling in the user interface uh some other changes include uh simplification and refactoring of the search tabs view helper so in the relatively unlikely case you've customized that a little work may be needed we've also changed the Constructor signature of the proxy URL view helper to add that uh easy proxy prefix check functionality uh We've added a new view helper called search settings which helps to simplify template logic related to displaying uh C and bulk action checkboxes so again if you've customized templates related to that you might be able to simplify uh and code related to the display of both collection hierarchies and hierarchical facets has been significantly revised and simplified to get rid of the JS tree Library which is showing its age uh and instead use just native HTML and CSS so if you've customized hierarchies you'll likely need to do a little work to get up to date with this but it makes everything a lot cleaner and more efficient so I think you'll find it's worth the efforts uh We've also changed some of the methods in the content controller to make them more flexible uh this is another thing that you're unlikely to have customized but if you did take a look at uh we've changed the way that view find handles JavaScript events it now uses stored functions instead of B custom events and the event names have been revised for clarity so if you've got any JavaScript code using custom events that interface with the viewfinder the uh init result script function in commonjs has been replaced by a new result init event uh so now where we used to have one function that did a whole lot of things we instead have event handlers in a variety of places which uh makes the separation of code considerably clearer but if you need to hook custom JavaScript when search results are initialized you'll need to do that in a new way we've also made uh a minor CSS change for for forward compatibility with bootstrap 5 uh we used to have a class called off canvas it's been renamed to view find off canvas so it doesn't conflict with bootstrap and finally on the user interface front we used to have a lot of submit inputs named submit but this caused some problems by overriding the JavaScript submit function in an unexpected way and so all of these inputs have been renamed to submit button so if you have either JavaScript or server code that relies on the name submit adjustments may be needed uh but the core code has been built in a fairly Backward Compatible way so it shouldn't break if you happen to still have any inputs Nam submit floating around so uh in addition to the big changes on the front end the other most dramatic change in view find 10 relates to database architecture so as we've actually been discussing for a couple of years now uh the lamino BB library that we use for our database abstraction layer has been deprecated and we really need to move to something that's going to be better supported going forward however it's such a big job to change this that we decided that rather than doing the full job of switching to a different Library uh we would focus in release 10 on refactoring the code to just make that job easier uh and to prepare people for the shape that the code is going to take once the migration is done uh and this this is happening in part because F find's database code is quite old it maybe wasn't as welld designed as it could have been and so this need was really also an opportunity to clean up some things that needed cleaning up so as we prepare for the future change we're trying to separate out low-level database access code from higher level business logic uh make some confusing things less confusing and improve a lot of names just so that all of the code that touches the database is in more logical places has more logical names and is generally easier to understand but this of course is a little bit disruptive so let's talk about the strategy that we are taking uh first of all right now uh every Row in the database or every row in a uh result set is represented by a class in the viewfinder Nam space and these are linos row gateways um but what we've done in release 10 is introduced entity interfaces in the youfind DB entity namespace these basically just Define Getters and Setters for all of the values that these rows can contain and all of the existing row classes have been updated to implement these entity interfaces so they've have a lot of added Getters and Setters one of the confusing things about linos row gateways is that they could be accessed using either object or array syntax and this led to a lot of inconsistent code because different uh areas of youf find just use different syntax without a lot of Rhyme or Reason so the code has now all been refreshed to use the Getters and Setters in the entity interfaces making things a lot more predictable uh and allowing us to take advantage of things like you know IDE suggesting methods when you're writing code uh so this should make things a lot more consistent and with these interfaces in place when we change things in the future as long as our new abstraction layer can be made to implement the entity interfaces most of the highlevel code never needs to change again on a similar note uh a lot of our business logic related to the database is found in the BB table name space uh which contains linos table Gateway classes but instead we've now introduced a new family of view find DB service classes to encapsulate uh logic that does direct reads and writes to the database but we've done more than just move all of the table code into service code because as I mentioned we've also tried to separate lowlevel code from higher level business logic IC so the database service classes are really just about reading things writing things from the database and higher level logic has been moved into higher level service classes like the favorite service the rating service and the tag service so again this makes future migrations a lot easier because the highlevel logic all just uses the service classes to do with database interaction and then the service classes encapsulate the ACT ual database interactions so if in the future we need to change abstraction layers again it is only the service classes that need to be Rewritten everything higher level uh can just stay as it is uh some changes we made along with this just to improve separation of concerns and cleanliness of code uh include removing database access from record drivers um our record drivers in Past release did too many things they not only provided an abstraction to records but they also had a lot of business logic involving reads and writes to the database and now all of those uh methods have been deprecated and that functionality has been moved outside either to the record view helper for things that require us to retrieve data and display it in views or to the service classes if it has to do with writing data to the database this just means record drivers do only one job instead of many jobs makes things more clear uh obviously with all of this code getting moved around we've had to change a lot of Constructors and factories and Method signatures to use these new entity interfaces and services instead of the old rows and tables um in 10.0 we tried to make this as non-disruptive as possible so um a lot of things are going to still work because of course the row classes implement the entity interfaces we didn't go too crazy adding type hints everywhere uh a lot of the changes are just in comments um it's not that you won't have to make any changes if you have custom database related code but we tried not to do more change than was strictly necessary um and we may take this a little further in release 11 but that's for the future and of course as I already hinted a lot of Meth me have been deprecated uh particularly not just the record driver methods I already talked about but also a lot of the laminas road Gateway methods we added that had complex business logic all of that has been moved into Services because we want the uh entity interfaces to just be about representing data models the business logic needs to live somewhere else this all improves our uh conformance to the the model view controller architecture all right those are the biggest things but now there are lots of small things that might uh impact some of you so please bear with me as I go through the rest of them uh the number of changes impact authentication uh one big thing is that historically we've had a method called is logged in in a variety of places um that would return either an object representing the logged in user or false if no one was logged in uh and this this is really good use of a method named is logged in which implies a Boolean value so we decided to deprecate that and replace it with multiple methods that can be used in the most appropriate contexts so if you just want a quick check to see if somebody is logged in you should now use get identity which will uh return an object from the role-based access control system if the user is logged in or null if they are not or you can use get user object if you want access to the full viewfinder entity interface object uh and again this will also return null if no one is logged in as this bullet says uh some other things of note uh code related to encryption of passwords has been moved to the ILS authenticator class just to better centralize that work uh the post login redirect system which remembers where you were trying to go before you logged in and then sends you there after you've logged in has been made a little bit more reliable there were some edge cases where it didn't always work correctly uh but changing this required us to change some controller logic so previously there was a method in the abstract base controller called get follow-up URL uh but that has been replaced by a new get and clear follow-up URL method so if you're using that follow-up URL in any of your custom code which is unlikely uh changes will be necessary uh finally on the authentication front uh the view find off manager class and all of its plugins have had Constructor method signature changes uh both to support persistent logins and also to accommodate the database refactoring since all of these classes interact heavily with user objects and now they are all using the uh user entity interface instead of direct access to lavinos the gateways uh We've made a couple of changes to our Integrations with third-party services uh if you're a Primo Central user uh you are strongly encouraged to go to primo. and change your API setting from Legacy to rest in order to take advantage of the newer and more reliable API but we couldn't change the default value here because the authentication settings are different so you'll have to set things up a little a little bit different but it shouldn't be too hard to do uh and it will give you better results uh also in the folio ILS driver the format holding item method has had uh some small changes to accommodate uh some of the improvements to the driver so if you've customized that method in a local subass take a look at the Upstream code and make sure that you're still correctly aligned with it and now into the various miscellaneous other changes uh content security support has been updated to reflect changes to that standard uh the report two setting now actually has a different meaning than it used to because of the way csps have evolved so if you were using that setting in content security policy. you're going to have to make changes to Ure that policy violations are correctly reported the uh you find search query adapter and related minification and Dem minification Logic for searches has been significantly refactor to make it easier to customize since it was previously hard to customize you probably don't have custom code that needs to be adjusted uh but if you did something crazy to customize things maybe you could redo it in a simpler way uh the search results objects may now return a negative one from the get result total method which indicates that the total number of results cannot be determined uh so if you have custom templates or logic that is using get result total you may need to add a special case to accommodate this uh which was added so that search backends that are unable to report totals can still be supported uh we now use the account capabilities class to check whether library cards are supported uh this change was made as part of the work to remove business logic from the user wrote class for the database refactoring uh the cart controller and my research controller Constructors have been changed to reduce uh their direct dependency on the service locator uh code related to record versions has been simplified for consistency and maintainability so if you've customized that uh you may find that you need to make some changes a lot of this had to do with removing some uh functionality that was intended to make outdated links continue to work even after records have been deleted from the index uh but we made the determination that the complexity of that outweighed the value so uh this may also mean that if you've deleted records and people have linked to versions lists related to those records that those links are going to stop working but the likelihood that anyone has saved such a link is pretty slim so I think it's a worthwhile sacrifice for clarity of code uh we also discovered that the proxy manager Library which we relied on for some of our factories to help reduce circular dependencies is no longer being maintained uh and so we rewrote our code to no longer depend upon it but that did impact a few Constructor signatures for some of our more complex Services the uh view find search combined options class uh which is used for Combined search uh now contains some logic that was PR previously part of the combined controller uh this puts code in a more logical location that helps with customization uh but refactoring the stuff uh did require us to change the Constructor signature for that class uh similarly the init from record driver method of the solar collection per Rams class has changed uh to support some refactoring The Constructor of the off email not verified class now requires a user entity interface object this is the exception that's thrown to report that a user has not yet verified their email and it now carries information about the user along with it to make uh related code easier to manage uh the signature of the solar query Builder interfaces build um method has been expanded so that the query can take more factors into consideration so if you have a custom query Builder uh you might need to adjust your build method to match and you might have some new things you could take account of as you build your query uh We've also revised the way the Ajax controller handles errors uh previously it swallowed a lot of things which made it possible for minor bugs to get missed but now when you're in development mode uh warnings and notices are actually going to cause failures which will hopefully allow us to problems more more quickly rather than letting them slip through for longer periods of time the uh bootstrapper init local and time zone method has been renamed to Simply init time zone because we no longer need to initialize Lookouts uh some Constructor type hints have been broadened to use the laminas cach Storage storage interface instead of the abstract adapter uh which means that um you can use different implementations of the interface that come from places other than the abstract storage adapter uh the Constructor signature of the ooth 2 controller has been adjusted to remove the authorization service object which was being passed in previously but never actually used all right we're nearly done all that's left is to talk about things that have been deprecated or removed so the view find tags class has been renamed view find tags tag service for consistency with other service classes um the youf find search backend EDS search request model ends with method has been removed in favor of the Native string nwith function that PHP now provides this this method was created before that function existed but we don't need it now uh view find search base options supports first last navigation has been deprecated in favor of the easier to understand record first class navigation enabled uh the CSP non view helper has been deprecated in favor of the getn method in the CSP view helper uh there doesn't seem like a good reason to have two different view helpers related to content security policies so we've Consolidated them uh the keyboard shortcuts JavaScript function in commonjs has been removed uh this was originally intended to add some keyboard shortcuts for search results uh but it had grown nonfunctional due to changes and markup so it didn't work correctly and it seemed to have some accessibility problems so we simply removed it uh we could certainly reintroduce something like this in the future if there is a demand for it and finally all the code that was deprecated in the 9x series of releases has now been fully removed I know that's a lot and uh in some cases it may be some work to get things upgraded so I just wanted to remind everyone uh that there is a video available on the vind wiki called upgrading with Git which shows the process that I use for upgrading vind which helps to automate at least some parts of the process uh there's also a blog post that you can read uh which talks about the process as well uh I will post these slides in the same place where this video is posted so you can click these links if you need them beyond that uh you can of course reach out to me anytime my email is damian. cats villanova.edu or you can find me at Damian cats on the viewfrom be a pain but we try to make it as painless as we can uh and the community is here to help if you need it I hope you enjoy F find P thanks for taking the time to listen to me ramble about it and I'll see you at the next release

videos/vufind_10.0_-_what_s_new_what_s_changed.txt · Last modified: 2024/06/24 16:19 by demiankatz