Page Versioning Omeka S module

Releases

1.1.4

Oct 26, 2026

Fixed

  • Admin > Modules now shows Configure next to PageVersioning. The settings were only reachable from the Settings button on history pages.

1.1.3

Oct 20, 2026

Fixed

  • JSON API: a revert that Omeka refused, most often because another page of the site now uses the version's slug, was answered as "not found" (404). It now returns 422 with the reasons, by field, in an errors list, as Omeka's own API does. A revert of a page the user may not change returns 403, of a page that no longer exists 404, and 500 is kept for unexpected errors, which are now written to Omeka's log.
  • JSON API: only global administrators could use it. Every other user, and requests without a login, got Omeka's HTML error page with status 500. The endpoints now follow the history screens' permissions (Author and above may read, Editor and above may revert) and refuse others with a JSON 403.
  • JSON API: on sites where no other module happened to switch on Omeka's JSON output, every successful request failed with an HTML error page (status 500), and "not found" answers came as an HTML page or with internal fields added (reason, controller, display_exceptions). Every answer is now plain JSON with the content type application/json.
  • JSON API: a revert whose JSON body was not an object went ahead without its summary, and a summary that was not text was stored as "Array". Both now return 400, and nothing is reverted.
  • History screens: a user refused one (a Researcher, or an Author or Reviewer opening a revert or delete) got Omeka's error page Omeka S encountered an error with status 500. They now get Omeka's Forbidden page with status 403. Who may do what is unchanged.
  • Researchers saw the Page Versioning sidebar entry, and those who may edit a site's pages saw the Version history button and sidebar on the page edit screen and a history icon on each row of the pages list, all leading to that error page. They are now shown only to roles that may open the history (Author and above), as the documentation said.

1.1.2

Oct 20, 2026

Fixed

  • Reverting a page removed the attachments of its blocks: the items and media of media embeds, item showcases and similar blocks, with their captions. Versions did not record attachments and the revert sent none, which Omeka reads as "remove them all". Versions now record each block's attachments (item, media, caption, position), a revert restores them, and the snapshot page and the diff list them. Reverting to a version stored before this release keeps each block's current attachments (the block at the same position, if it has the same layout) instead of removing them. Attachments lost to an earlier revert cannot be recovered from the history.
  • Reverting a page now keeps the content it overwrites. The revert form promised that the current state would be saved as a new version first, but only the revert entry was written, so edits made while the module was inactive (or whose versions had been deleted) were lost. If the page no longer matches its latest version, that content is now stored as an update version noted "Saved before reverting to version #N" before the revert is applied.
  • Saving a page without changing it (Save pressed with no edits, or the same data sent through the API) stored another copy of the latest version. A save is now skipped when its content matches the latest version, whatever the key order or whether a value was saved as 13 or "13".
  • The diff ran headings into the following text ("HoursWednesday to Sunday…", "AdmissionFree for everyone…"). Each heading, paragraph, list item, table cell and other block-level element of an HTML block now starts a new line.
  • Diff page: the line-number columns were so narrow that two-digit numbers wrapped and the Old and New headings stood one letter per line. They now fit four digits, and the two content columns share the rest.
  • History and audit log tables overflowed the page even at 1600 pixels, cutting off the delete icon; columns are now sized to their content. The delete sidebar no longer breaks "Operation" over two lines, and the dates in the page editor's Version history sidebar no longer wrap.
  • Versions saved in the same second (a revert and the state saved just before it) are listed, compared and pruned in the order they were saved.
  • A revert that fails no longer leaves a "Saved before reverting to version #N" entry behind. When Omeka refused the restored content, for example because the version's slug now belongs to another page of the site, the page stayed as it was but the history gained that entry, and its storing could prune the oldest version. The entry is now removed again and nothing is pruned until the revert succeeds, so a failed revert leaves the page and its history unchanged. (It is kept only if the page was already written when the error came, as the copy of what was overwritten.)
  • The "Revert failed" message now gives the reason, such as The slug "about" is already taken. It used to end after the colon.

1.1.1

Oct 11, 2026

Fixed

  • The Page Versioning entry in the admin menu showed its text in a serif fallback font: the link carried Font Awesome's fa class, which sets the whole link in the icon font. It now carries only the icon class, like the other menu entries.
  • VersionManager::captureFromEntity() returns 0 without saving while capturing is suppressed (during a revert), as documented. The module's own listener already checked this, so recorded versions do not change; other code calling the service can no longer bypass the suppression.
  • The unit tests run again. test/bootstrap.php registers the module's classes with the autoloader (Omeka's root bootstrap does not), the PHPUnit configuration follows PHPUnit 9.6 as used by Omeka S, and the service tests use mocks of the real entity classes that captureFromEntity() requires.

1.1.0

Sep 22, 2026

Added

  • Version history sidebar panel on the page edit screen showing the 5 most recent versions
  • "Version history" toolbar button on the page edit screen via view.edit.page_actions
  • History icon link on each row in the site pages list via view.browse.actions
  • Delete version action with CSRF-protected confirmation sidebar
  • Author metadata (author = "RefBytes") in module.ini
Log in for Support