==================
Metavus Change Log
==================

Version 1.2.1 - Jul 1, 2025

ADDED
- Add interface Configuration option for "Browse Page Title".  [AL]
- EduLink plugin: Add more extensive metrics recording.  [CRH]
- mvus utility: New command "list loggedin" to list users currently logged in.  [EA]

CHANGED
- Minimum required PHP version is now 7.4.
- ChatPDF plugin: Revise error reporting to provide more detail to users.  [CRH]
- GoogleMaps plugin: Revise and simplify retry logic used if an address could
	not be geocoded and email after three failures rather than one.  [CRH]
- FeaturedItems plugin: Revise to use `DataCache`.  [YS]
- MetricsReporter plugin: Revise to use `DataCache`.  [YS]
- UrlChecker plugin: Suppress errors on invalid hostnames.  [CRH]

FIXED
- Fix issue that prevented running on servers where PHP garbage collection
    settings are undefined.  [EA]
- WYSIWYG editor: "Link" button only works in rich text editing mode, but would
	previously silently do nothing in source or markdown mode. Now an error
	is presented.  [AG]
- Add a `beforeunload` handler to FormUI-based upload forms to warn the user if
	they navigate away from an edit page while an upload is still in
	progress.  [CRH]
- On `LeaveFeedback`, fix an exception when providing feedback for a resource
	from a schema where no mapped Title or mapped Url fields are
	configured.  [CRH]
- Fix bug in ChangeSetEditingUI where some editing elements were non-functional
	if the first field in any schema used an incremental search.  [CRH]
- ApplicationFramework: Fix bug that could PHP's garbage collection settings to
	be undefined.  [EA]
- Revise `StdLib::getNumberOfCpuCores()` to work correctly when `shell_exec()`
	is not available.  [EA]
- Captcha plugin: Fix bug that prevented caches from being pruned.  [CRH]
- Folders plugin: Fix broken pagination link on folder items list.  [CRH]

DEVELOPER
- Add `DataCache` helper class to provide a standardized caching method.  [EA]
- Extend ApplicationFramework with AF::inlineUIFile() to provide a standard way
	to load SVGs inline.  [EA]
- Move the setting of page titles from PageTitle() to methods of
	ApplicationFramework.  [AL]
- Standardize generation of HTML forms to use FormUI helper class.  [AL]
- Standardize generation of HTML tables to use HtmlTable helper class.  [AL]
- Drop `jquery-migrate` compatibility library, which was no longer used in the
	core software.  [CRH]
- Update bundled Bootstrap to v5.3.5.  [CRH]
- Update bundled jQuery to v3.7.1.  [CRH]
- Update bundled jquery-ui to v1.14.1.  [CRH]


Version 1.2.0 - Apr 3, 2025

ADDED
- Add support for observer notification for record addition, deletion, and
	modification.  [EA]
- Add support for two way conversion between Timestamp and Date fields.  [SW]
- Add checks for exceeding post_max_size and upload_max_filesize along with
	informative error messages describing how to fix the problem.  [SW]
- Add handling of CF-Connecting-IP HTTP header for sites using Cloudflare's
	content distribution network.  [CRH]
- Add the ability to upload a logo and/or hero image in the interface
	configuration.  [EA]
- Add 'Triggers Auto Updates' Metadata Field property to control if changes to
	a field will run automatic updates (e.g., to Date Last Modified).  [CRH]
- Extend Search to support exclusions for Option and Controlled Name fields.  [RH]
- Extend Search Parameter Set fields to support searches involving Reference
	fields.  [CRH]
- Allow users to upload an Avatar image.  [CRH]
- Import Data: Extend to support a sub-delimiter within fields to denote
	multiple values for that field. Allows row-per-record format data files
	as produced by many spreadsheet programs.  [AG]
- Add "Search Load Threshold" parameter. When the system load is higher than
	this vaue, users must be logged in to perform searches.  [CRH]
- Add the ability to transfer saved searches to other users.  [AG]
- mvus utility: new command "user password" for setting user passwords  [EA]
- mvus utility: new command "list logins"  [EA]
- mvus utility: new commands "task count" and "task run"  [EA]
- mvus utility: new command option "cache clear scaled" to clear all scaled
	versions of images  [EA]
- MLPHPList plugin: Add support for v3 of the PHPList REST API.  [CRH]
- UrlChecker: add the ability to check if a transparent http to https upgrade
	works for a given URL.  [CRH]
- NEW PLUGIN: PhotoLibrary -- Provides a photo gallery, using files and
    metadata from within Metavus.  [EA]
- NEW PLUGIN: ExifTags -- Adds the ability to copy metadata from image tags
	into Metadata Fields when images are uploaded.  [RH]
- NEW PLUGIN: CalendarFeed -- Provide iCal feeds for Calendar Events.  [RH]
- NEW PLUGIN: EduLink -- Provide support for searching and displaying 
    materials from a Metavus repository within LMS systems and embedding them
    in LMS-hosted courses.  [CRH]
- NEW PLUGIN: ChatPDF -- Generate record metadata by sending uploaded PDF
    files to the ChatPDF for analysis by the ChatGPT LLM AI.  [SW]
- NEW PLUGIN: WhatCMS -- Query the WhatCMS API for information about the
	technology behind a given URL, and populate metadata fields with the
    retrieved values.  [RH]
- NEW PLUGIN: IIIFImageServer -- Serve images from a Metavus collection using
	the International Image Interoperability Framework (IIIF) API.  [CRH]
- NEW PLUGIN: IIIFImageViewer -- Provide interactive display of images  on a
    Metavus-based site using the IIIF API.  [CRH]

CHANGED
- Update to Bootstrap v5.3  [CRH]
- Image::url() now logs a warning for corrupt image files rather than throwing
	an exception.  [CRH]
- Move configuration of main navigation items from the NaveEditor plugin and
	into the Interface Configuration.  [EA]
- Move handling of EVENT_RESOURCE_MODIFY into the Record object so that callers
	need not remember to signal it after changing a record.  [CRH]
- Add logging of database cache pruning.  [CRH]
- Extend the syntax for specifying image sizes to support scaling/cropping
	images to fit a specified dimension.  [EA]
- Change the interpolation methods used when scaling images to generate higher
	quality scaled versions.  [CRH]
- Make the blog used for news entries on the front page configurable.  [EA]
- Extend ApplicationFramework::downloadFile() to support HTTP range requests to
	support using movies uploaded to File fields in <video> tags.  [CRH]
- Add caching of search facets.  [CRH]
- For User fields on Advanced Search, list values in use for the field rather
	than all users in the system.  [CRH]
- Rewrite CleanURL handling for sites served from multiple domains.  [EA]
- Add configuration option to disable collection monograms.  [EA]
- In WYSIWYG editor, add a "Remove" button for images that will delete the
	inset corresponding to an image from the HTML.  [CRH]
- Add per-users caches to AdvancedSearch so that the list of fields and values
	to display is not re-computed each time the page is loaded.  [CRH]
- Revise upload handling provided by FormUI to use the FilePond upload library,
	which provides progress meters and breaks large uploads into chunks to
	support uploading arbitrarily large files.  [CRH]
- Blog plugin: When a post has attached images but none of them were included
	in the body of the post, display the first image at the beginning of
	the body.  [CRH]
- Blog plugin: Add ability to send test notifications.  [CRH]
- AutoFetch plugin: More detailed error reporting when files cannot be
	retrieved.  [CRH]
- Folders plugin: Visually distinguish non-public records in shared folders.  [SW]
- Folders plugin: Extend to support cover images and per-folder descriptions.  [CRH]
- GoogleMaps plugin: Add option to select which API channel to use.  [CRH]
- GoogleMaps plugin: Extend to support custom map styles.  [CRH]

FIXED
- Fix bug that would always run background search and/or recommender updates
	even when such updates were disabled in the site configuration.  [CRH]
- Fixed issue with markup incorrectly being escaped in field help tooltips
	in Metadata Field Editor.  [EA]
- Fix bug in escaping double quotes in image alt text.  [CRH]
- Fix bug in phrase searching for File fields.  [EA]
- Fix several bugs in loading and overriding per-interface settings.  [EA]
- Fix bug in saving scaled PNG images with a transparent background.  [CRH]
- More detailed error messages when an Exception is thrown during plugin
	initialization.  [EA]
- Improve display and alignment of non-Latin scripts in text fields.  [MA]
- Edit Option List: Add checks to prevent users from deleting the default value
	for a field.  [YS]
- Edit Metadata Field: fix bug that prevented clearing allowed qualifiers.  [AG]
- Do not save error pages resulting from insufficient viewing permissions in
	the static page cache.  [CRH]
- Allow User schema fields to appear on Search Results pages when viewing
	permissions allow it.  [YS]
- Fix bug that prevented changes to Metadata Field Ordering from saving.  [YS]
- Fix bug that prevented 'Set All Users to Default Interface' checkbox on
	System Configuration from working.  [AG]
- Revise search descriptions to user names rather than numeric IDs.  [YS]
- Fix bug in synchronizing some data between the User schema and the APUsers
	database table.  [AG]
- Fix bug that prevented configuring Priviliges for Search Parameter Set type
	metadata fields.  [AG]
- OAIPMHServer plugin: fix incorrect default base URL.  [MA]
- Blog plugin: Do not send email to disabled users.  [MA]
- Blog plugin: Revise hovertest on "Notify" button for unpublished entries to
	clarify that entries must be published to sent notifications.  [CRH]
- CalendarEvents plugin: More consistent formatting of event dates.  [RH]
- UrlChecker plugin: Revise handling of per-domain rate limits so that a large
	number of checks against the same domain would not slow down checks of other
	domains.  [CRH]
- UrlChecker plugin: Fix bug in checking links to locally stored files from
	File fields.  [MA]
- UrlChecker plugin: Revise procedure for re-checking URLs to prevent
	repeatedly rechecking all URLs from records that had any failing URLs.  [CRH]
- Mailer plugin: Store the Interface in use when a mail is queued, use this
	interface when performing keyword replacements so that the correct keywords
	will be used.  [CRH]
- Rules plugin: Increase width of database column that stores matching records
	to accommodate rules that have thousands of matches.  [CRH]
- Photo Library plugin: Display an error message when invalid search parameters
	are provided rather than an uncaught exception.  [CRH]


Version 1.1.0 - June 8, 2023

ADDED
- Added ability to configure settings on a per-interface basis, via
	new Interface Configuration page.  [EA]
- Added interface configuration setting to customize the title of the Featured
	Items section on the home page.  [SW]
- Added Clean URLs for Browse Resources and Home pages.  [EA]
- Added interface configuration setting to control the number of items to
	show on the collection display page.  [SW]
- Added list of upcoming events to home page in default interface.  (Requires
	CalendarEvents plugin.)  [SW]
- Added option for downloading original image file to full image page.  [EA]
- Added a clarifying note to Browse Resources page, shown only to
	administrative users, indicating that the Browse page only lists records
	that are publicly-viewable.  [CRH]
- Extended filesystem caches to also cache locations of plugin files, avoiding
	the need to scan plugin directories on every page load.  [CRH]
- Added clarifying import instructions and examples of import files to
	tab-delimited data import.  [CRH]
- mvus utility: New command "export schema" that exports a specified
	schema definition to an XML file.  [EA]
- AutoScreenshot plugin: Added a "Take Now" button that can be used to
	immediately capture a screenshot rather than waiting for a background
	task to run. [CRH]
- CalendarEvents plugin: Added EventsPerPage configuration parameter.  [SW]
- Collage plugin: Added logic to ensure images are larger than the configured
	title size, to avoid images from being stretched by the browser.  [SW]
- Developer plugin: Add the ability to profile memory usage.  [CRH]
- Google Analytics plugin: Add support for GA4 properties.  [CRH]
- Google Maps plugin: Make KML cache lifetime configurable.  [CRH]
- UrlChecker plugin: Added a column to results page showing which records are
	publicly-visible.  [SW]
- NEW PLUGIN: CalendarFeed -- Provides a URL to a feed of events
	in iCalendar format that match a set of search parameters. [RH]
- NEW PLUGIN: CustomCSS -- Allows CSS customizations to be added from
	the site interface, without adding or editing files.  [EA]
- NEW PLUGIN: FeaturedItems -- Generate a list of featured items of a
	specific type using search parameters, a sorting field, and an
	optional grouping field.  [SW]

CHANGED
- Merged Advanced System Configuration into System Configuration. [EA]
- Revamped Administration page to break plugin administration menu items
	out into their own sections.  [EA]
- Revise UI to consistently use <button> tags where appropriate rather than a
	mixture of <button> and <a> tags.  [MA]
- Add mv-image-extralarge and mv-image-huge sizes.  [EA]
- Revised the way plugin configuration options are loaded in numerous plugins
	to avoid unnecessary work when the page being loaded is not the
	plugin configuration page.  [CRH]
- Revised GoTo page to return a 404 on invalid record IDs rather than going
	to a fallback redirect.  [CRH]
- When purging sample data, sample Collection records are now also
	removed. [CRH]
- Added validation to many MetadataField methods, primarily aimed at
	ensuring the parameters being set for a field are valid for that
	field's type.  [CRH]
- AutoScreenshot plugin: Increased resolution of screenshots and change them
	to use a 1:1 aspect ratio. [CRH]
- AutoScreenshot plugin: Revised the "Firefox" screenshot method to use the
	--headless --screenshot options that firefox now provides rather than
	running firefox inside an Xvfb instance. [CRH]
- Blog plugin: Revised blog summaries so that those which include an
	image will display captions if the post includes a caption but omit them
	otherwise.  [CRH]
- Pages plugin: Revised handling of tabbed content to allow content after the
	end of the tabs and also multiple sets of tabs on a page.  [EA]
- Mailer plugin: Improved error handling and logging.  [CRH]

FIXED
- Fixed misuse of DTSTAMP property in iCalendar, so that it now uses the
	the event's most recent time of modification, rather than the date and
	time of the creation of the iCalendar document.  [RH]
- Fixed bug in FormUI that resulted in insertion keywords not being
	escaped when appearing in the contents of text area fields.  [RH]
- Fixed bug where Blog titles were smaller than sub-headers, removed
	H1 from the list of CKEDITOR styles.  [SW]
- Fixed a bug in RecordEditingUI where vocabularies with exactly
	the number of terms configured as the incremental search threshold for
	their metadata field could not be edited.  [CRH]
- Improved error message when no Unique Field is set but the data file omits
	values for Title or Description on a line during data import.
- Added more-informative error message to data import when no data file was
	uploaded for import.  [CRH]
- Fixed bug on home page that caused one extra item to appear in the Featured
	Resources area.  [SW]
- Fixed numerous bugs in search parameter set editor, involving subgroup
	handling, tree field handling, and user field handling.  [CRH]
- Fixed the "Please Note" message for mapped fields when editing metadata
	fields, to direct users to Edit Metadata Schema, where the relevant
	settings now live.  [CRH]
- Fixed generation of 'remove' links in search facets for Tree fields so
	that it respects the field's search logic setting rather than reverting
	to the top-level logic setting.  [CRH]
- Fixed bug that caused the search string to be lost when paging past the
	first page of matching terms, when editing controlled names.  [RH]
- In Record::applyListOfChanges() (used primarily by the BatchEdit plugin),
	if the changes applied make the record publicly viewable, run the "On
	Record Release" actions.  [CRH]
- Fixed bug that prevented a metadata field's Label or Instructions from
	being cleared once they were set.  [RH]
- Fixed bug that rendered image insertion buttons nonfunctional in the rich
	text editor if the cursor was inside a heading or a list.  [CRH]
- Fixed date validation bug that could cause valid dates to be rejected,
	when editing records.  [CRH]
- Fixed bug in change set editor (BatchEdit plugin and Ruls plugin) that
	could prevent list of included fields from being editable.  [CRH]
- Fixed bug in metadata field editor that prevented clearing a default
	qualifier.  [CRH]
- Blog Plugin: fixed bug causing an exception when deleting a comment on
	a blog entry.  [SW]
- Blog plugin: Fixed bug that caused image captions to appear in
	notification emails for new posts.  [CRH]
- Folders plugin: Improved error handling on folder viewing page and fixed
	issue with clean URL generation that was causing exceptions when invalid
	folder IDs were supplied.  [CRH]
- OAIPMHServer plugin: Fixed bug that caused exceptions when editing a
	format that had no "Defaults" setting saved.  [CRH]
- OAIPMHServer plugin: Use CDATA to escape field descriptions so that the
	generated XML will remain valid even when the descriptions have
	embedded HTML.  [CRH]
- Mailer plugin: Fixed logic bug in approval queue page that caused the 'approve'
	button to appear only when there were no messages to approve.  [CRH]
- MailingList plugin: Fixed bug that could prevent subscribing or
	unsubscribing when the mailing list name included capital letters.  [CRH]
- UrlChecker plugin: Fixed logic error that could prevent new resources from
	being queued for URL checks.  [CRH]


Version 1.0.1 - October 19, 2022

ADDED
- Added new "insert with caption" buttons ("Insert-R-C" and "Insert-L-C"),
	available when editing items with Image fields (e.g. Blog entries).  [CRH]
- Provide an example configuration file for running Metavus with an nginx
	web server.  [CRH]
- Add the account activation link to the user editing page (for unactivated
	users), to make it easier to send to users if needed.  [CRH]
- Collage plugin:  Added "Order Persistence Period" configuration setting,
	that determines how frequently the order of images changes.  [EA]
- NEW PLUGIN: NavEditor -- Provides simple editing of the main navigation
	options in the default interface.  [EA]

CHANGED
- WYSIWYG editing (e.g. for Paragraph fields) now uses a whitelist for
	allowed CSS attributes, rather than a blacklist.  [CRH]
- When editing users, select the default user interface for users who
	do not currently have a user interface set.  [CRH]
- Default interface:  Focus is now automatically switched to search box when
	"Search" is clicked.  [EA]
- Default interface:  Footer revamped to be more responsive.  [MA]
- Default interface:  Improved responsiveness in main navigation and on most
	forms.  [CRH]
- Default interface:  Set <pre> elements to wrap within the content area to
	prevent poorly-formatted content from breaking the layout.  [CRH]
- Blog plugin: Changed teaser break marker to explicit '--' instead of
	double blank line.  [SW]
- Blog plugin: Whitespace is now explicitly disallowed in clean URLs.  [MA]
- Blog plugin: Do not display "Notify Subscribers" buttons for blogs that
	are not configured for sending notifications.  [CRH]
- Collage plugin:  Revised image selection to prevent adjacent repeated
	images.  [EA]

FIXED
- Fixed issue that caused the port number to be omitted on some internal
	links when running on a non-standard port.  [EA]
- Fixed manual rebuilding of recommender database.  [EA]
- Fixed issue with exception occurring when viewing a folder with bad
	parameter values in the URL.  [EA]
- Change file length column in database (Files:FileLength) to BIGINT UNSIGNED
	to support very large files.  [CRH]
- Revise record editing to not to use lookbehind assertions for compatibility
	with Safari.  [CRH]
- Fixed escaping of single quotes in alt text for image "Insert" buttons.  [CRH]
- Fix a bug wrapping long lines in HTML messages that produced a mix of "\r\n"
	and "\r" line endings when "\r\n" was requested.  [MA]
- Fixed error that occurred due to undefined variable when exporting
    controlled vocabularies from within the metadata field editor.  [CRH]
- Fixed account request to make sure that default values for the User schema
    are used in all cases.  [CRH]
- Mailer plugin:  Fixed background email sending to use correct object type,
	instead of always using Record.  [CRH]
- Mailer plugin: Fix bug that caused an exception when when a template
	that expected a resource is used in a context where no resource is
	available.  [MA]
- UrlChecker plugin:  Fix bug that prevented data for deleted records from
	being cleaned out.  [CRH]


Version 1.0.0 - July 19, 2022

Initial release.

