Repository navigation
Highlights
Compound metadata
7.2.0 brings Hyrax's compound (hierarchical) metadata to Hyku. A compound field holds a list of entries, and each entry is a small set of named sub-properties. For example, a participant has a name, a role and a title, and an identifier has a value and a type. Before this, data like that had to be flattened into parallel single-value fields, which lost which role went with which name.
Compounds are declared entirely in the schema. No custom Ruby or ERB is needed. This works in both metadata modes:
- Flexible metadata on (
HYRAX_FLEXIBLE=true): declare them in the tenant's m3 profile. - Flexible metadata off: declare them in
config/metadata/compound_metadata.yaml.
Hyku ships three sample compounds on works and collections:
- participants: name, role, title
- identifiers: value, type
- relationships: a related item (an internal work or an external URL), a relationship type and a title. This one displays as its own card on the show page.
What works out of the box:
- Editing: add and remove rows on the work and collection edit forms.
- Show pages: compounds display on work, collection and file set show pages in every bundled show theme. Inline compounds appear in the metadata list; compounds with
view: { display: card }render as their own card. - Controlled values: sub-properties can use an inline values list or an existing Questioning Authority local authority, with typeahead and multi-select. Show pages display the term rather than the stored id.
- Linked records: a sub-property can point at another record (
linked_record). - Bulk import: Bulkrax CSV import and export use numbered columns per row, for example
participants_name_1andparticipants_role_1. Requires Bulkrax 9.5.x. - Solr indexing: each sub-property is indexed, for example
participants_name_tesimandparticipants_role_sim.
What is not automatic: compound sub-properties are not included in keyword search or facets. To make one searchable or facetable, register it in CatalogController.
How to use it
- Hyrax compound fields guide: declaring a compound, sub-property types, controlled values, linked records, grouping, card vs. inline display, Bulkrax columns
- Hyku configuration: Flexible Metadata: which fields the show page lists, searching and faceting compounds, display directives
Upgrade notes
- Flexible metadata off: the sample compounds appear on every work type and collection. Each work type's
field_ordercontrols whether a compound is listed on the show page. To add a new compound, declare it in the YAML and add it tofield_order. - Flexible metadata on: compounds come from the tenant's m3 profile. A tenant using its own profile must add the compound properties to that profile to get them.
Guided deposit wizard
This is an optional multi-step deposit flow: choose a work type, upload files, enter work metadata, enter per-file metadata and visibility, review, then deposit. It adds file-level metadata and file permissions at the time of deposit, and lets a depositor attach the new work to a parent. It is off by default.
- To enable: turn on the
enable_guided_depositfeature for a tenant.enable_standard_depositis on by default. If both are on, depositors get both buttons and can switch between forms. - Docs: docs/deposit-wizard.md
URL redirects
Admins can register legacy paths, for example from DSpace, CONTENTdm or bepress, as 301 redirects to a work's or collection's permanent URL. Redirects can be managed on the form or imported and exported through Bulkrax.
- To enable: both switches are required. Set
HYRAX_REDIRECTS_ENABLED=truefor the app, then turn on theredirectsfeature per tenant. - Docs: Hyrax redirects guide
New themes and display options
- Home and show page themes: Practice Research and Heritage
- Search results page themes: Masonry and Slideshow (Appearance > Search Results Page Theme)
- Work Type facet: added to the catalog and the dashboard works page
- New metadata display directives, documented in docs/configuration.md:
form: { input_type: rich_text }: rich text editor on the formview: { render_as: html }: displays the value as sanitized HTMLview: { position: featured }: shows the field at the top of the show pageview: { search_results_truncate: N }: limits snippet length in search results
Public demo tenant tooling
Accounts flagged public_demo_tenant now get:
- a nightly reset to a stored golden state
- a demo banner
noindexheaders- restricted invitations
- protection against removing the last superadmin
- a required signup spam challenge
Setup:
- Capture the golden state with
rake hyku:demo:snapshot[tenant]. The reset refuses to run without a snapshot. - Optionally set
DEMO_SEED_CSV_PATH,DEMO_KEEP_USERS,DEMO_IMPORT_USER,DEMO_HEALTH_CHECKandHYKU_DEMO_ACCEPTABLE_USE_URL.
Upgrade and configuration notes
- Database migrations: run
db:migrate. New tables and columns cover redirects,accounts.last_reset_atandaccounts.demo_tenant_snapshot. - Assets: run
assets:precompile. The rich text editor JS comes in through Hyrax. - Bulkrax: now 9.5.x. The Bulkrax Guided Import UI is hidden behind a feature until it is complete.
hyrax-iiif_avgem removed: its code is now in Hyrax core.iiif_avis on by default.- The IIIF manifest factory is pinned to V3.
- Knapsacks that reference
Hyrax::IiifAvmust update.
- IIIF for PDFs: manifests can include PDF content when the feature is on.
HYRAX_FLEXIBLE_CLASSES: a value you set yourself is now kept. List every class, including custom knapsack work types that should get flexible metadata.- Collection dropdown limits: new tenant settings control query limits for collection dropdowns. Raise them if a tenant has more than 100 collections.
- Single-tenant installs:
HYKU_SINGLE_TENANT_NAMEandHYKU_SINGLE_TENANT_CNAMEoverride the default tenant name and cname. - Postgres:
pg_stat_statementsis enabled when available. If not, it is skipped safely. - Knapsacks that override
layouts/hyrax: add the one-lineshared/_demo_bannerrender if you run public demo tenants.
Security and behavior changes
- HTTP basic auth: credentials for hidden tenants and staging now come from
HYKU_BASIC_AUTH_USERandHYKU_BASIC_AUTH_PASSWORD. The defaults are stillsamvera/hyku, so set real values. - Activated users: an activated user no longer gets the password
passwordwhenHYKU_USER_DEFAULT_PASSWORDis unset. They get a random placeholder and set their own password through the reset flow. - Invitations: sending an invitation now requires admin or user manager rights. Before, any signed-in user could invite.
- Parent works: the standard deposit form now rejects a
parent_idfor a work the depositor cannot edit. - Signup spam protection: optional and per tenant (
signup_spam_protection, orHYKU_SIGNUP_SPAM_PROTECTION).
What's Changed
Exciting New Features 🎉
- Update Hyku for bulkrax guided import by @laritakr in #2988
- Update to released version of bulkrax 9.4.0 by @laritakr in #3017
- update willow sword by @ShanaLMoore in #3026
- Adds redirects feature to Hyku by @laritakr in #3041
- Support editor-only attribute rows by @laritakr in #3064
- Put field registratations behind a gate by @laritakr in #3065
- Update hyrax and make corresponding changes by @laritakr in #3067
- Remove hyrax iiif av by @kirkkwang in #3074
- Add a Work Type facet to the catalog and dashboard works page by @ShanaLMoore in #3101
- Update to use Hyrax compound metadata by @laritakr in #3093
- Bring in Hyrax's linked_records compound metadata by @laritakr in #3106
- Consume Hyrax featured + rich-text metadata infrastructure (show wiring + docs) by @ShanaLMoore in #3103
- Render compound metadata in the community_show theme by @ShanaLMoore in #3118
- Send noindex directives on all public demo tenant pages by @SixtyGrit in #3126
- Deposit wizard by @laritakr in #3139
- Update Hyrax to pull in typeahead multi select fields by @ShanaLMoore in #3148
- Add deposit wizard extension seams for downstream by @laritakr in #3149
- Add masonry as a selectable search results page theme by @ShanaLMoore in #3152
- Add slideshow as a selectable search results page theme by @ShanaLMoore in #3153
- Deposit wizard integration modes by @laritakr in #3150
- Update hyrax for contributor enhancements by @laritakr in #3170
- Stop loading every child work to find a parent's file sets by @ShanaLMoore in #3176
- Add demo tenant reset service for public demo (sandbox) tenants by @SixtyGrit in #3122
- Add a demo environment banner for public demo tenants by @SixtyGrit in #3124
- Schedule nightly demo tenant resets by @SixtyGrit in #3123
- 🐛 Stop defaulting activated users' password to 'password' by @kirkkwang in #3190
- Guided Deposit Adjustments by @laritakr in #3183
- Show a work's existing files on the edit form by @laritakr in #3205
- Practice research theme by @kirkkwang in #3181
- Keep at least one superadmin on public demo tenants by @ShanaLMoore in #3187
- Restrict user invitations on public demo tenants by @ShanaLMoore in #3185
- Show public_demo_tenant as read-only on the proprietor account form by @ShanaLMoore in #3186
- 🐛 Make the HTTP basic auth gate configurable and fail closed by @kirkkwang in #3191
- 🎁 Add an optional in-app spam challenge to user signup by @kirkkwang in #3192
- Heritage theme by @kirkkwang in #3221
Bug Fixes 🐞
- Show compound properties when flexible is off (#3362) @laritakr
- Log a warning if someone may have an invalid Solr password by @maxkadel in #3007
- Remove per-field Solr spellcheck.dictionary from catalog search fields by @aprilrieger in #3013
- Fixes oai issues by @laritakr in #3016
- Fix: Pass alt text to gallery thumbnails (fixes #3015) by @trmccormick in #3018
- uniquely append additional locales by @cziaarm in #3020
- Add tenant configurable query limits by @laritakr in #3022
- Updates bulkrax to 9.4.3 by @laritakr in #3033
- Solr replication size bug by @maxkadel in #3011
- Memoize admin form appearance by @maxkadel in #3036
- Scope GroupAwareRoleChecker memo by user and site by @aprilrieger in #3037
- Improve search results performance - reduce N+1 queries on search results page by @maxkadel in #3034
- added test env as a copy of staging but with flexible on by @orangewolf in #3052
- Fix accessibility issue on admin stats page: add role='presentation' … by @trmccormick in #3057
- Tolerate off-authority values in render and forms by @laritakr in #3053
- Revert catalog controller gating by @laritakr in #3070
- Update uploads directory cleanups to include more directories by @maxkadel in #3073
- Aggregate child-work full text from Solr instead of re-deriving from disk by @ShanaLMoore in #3105
- Fix/batch edit descriptions 2990 by @trmccormick in #3111
- Internationalization of collection usage text by @laritakr in #3113
- Adds concurrency group and cancel-in-progress by @laritakr in #3115
- add a single tenant mode docker-compose file by @orangewolf in #3097
- Adds environment vars to override name/cname during account creation by @orangewolf in #3116
- 🎁 Support PDF content with IIIF by @kirkkwang in #3119
- Add index to increase speed of MeSH autocomplete lookups by @maxkadel in #3120
- Roll up dependency updates by @orangewolf in #3117
- ⬆️ Update Hyrax by @kirkkwang in #3136
- Update iiif_print gem version to 3.1.0 by @maxkadel in #3104
- 🐛 Fix tenants rake not reporting accurately by @maxkadel in #3066
- Respect a pre-set HYRAX_FLEXIBLE_CLASSES for custom work types by @SixtyGrit in #3138
- 🐛 Fix A/V derivative job queues by @kirkkwang in #3142
- Keep scroll position when toggling features by @laritakr in #3145
- Fix Solr wedging when switching between stacks by @laritakr in #3151
- Fix/generator tag hyku identification by @trmccormick in #3137
- Updates text for file details deposit UI by @laritakr in #3158
- Route demo/staging mail through SendGrid instead of maildev by @maxkadel in #3159
- 🧹 Update Hyrax and remove decorator by @kirkkwang in #3163
- 🐛 Fix Download PDF button by @kirkkwang in #3168
- Bump postcss from 8.5.10 to 8.5.25 by @dependabot[bot] in #3160
- Bump svgo from 2.8.2 to 2.8.3 by @dependabot[bot] in #3161
- Develop on multiple hykus by @maxkadel in #3164
- Bump brace-expansion from 1.1.13 to 1.1.18 by @dependabot[bot] in #3171
- Bump nanoid from 3.3.16 to 3.3.18 by @dependabot[bot] in #3201
- Upgrade patch version of Rails by @maxkadel in #3182
- Update practice research content blocks by @kirkkwang in #3216
- Read the attach-child parent from Solr by @laritakr in #3215
- Site instance memoization by @maxkadel in #3166
- Add extension to pg - pg_stat_statements by @maxkadel in #3188
New Contributors
- @cziaarm made their first contribution in #3020
- @SixtyGrit made their first contribution in #3138
Full Changelog: v7.1.0...v7.2.0