Release Notes 9.0

June 21, 2023

Release Notes For Version 9.0

Table Of Contents

Upgrading to 9.0

Note that Calpendo no longer supports Java 6 or Java 7. It must now use at least Java 8.

You can upgrade directly to 9.0 from any earlier version. If you are upgrading to 9.0 from 8.2.x or earlier, then please take note of the upgrade instructions for 8.3. In particular, the 8.3 upgrade can take up to two hours.

Upgrading from 8.3.x to 8.4 and from 8.4 to 9.0 is very quick and is considered a small upgrade.

Upgrading from any version to the latest (including applying bug fix updates) should be done with the following procedure:

Downgrading between major releases is not normally supported. The general procedure for downgrading is:

Do not merely load an old database on top of an upgraded or partially upgraded database and run an old Calpendo. It will break things, but possibly not until you come to do another upgrade, by which time it may be too late to fix things easily.

Having said that, 9.0 is such a small update to the database that downgrading to 8.4.24 or later is supported without you having to make any changes to the database. That is, after upgrading to 9.0.x, you can then change the program files to 8.4.24 or any later version of 8.4 and it will boot and downgrade the database for your gracefully.

New Features

Themes and Skins

The general look of all tables in Calpendo has changed with Calpendo 9.0

Everything now looks much cleaner than it did before.

We have also added support for skins and themes. A skin is a set of CSS instructions that change some aspect of how the system looks. Currently, all skins are built-in and you can’t provide your own (although you can add custom CSS in global preferences).

A theme is a specification of lots of things that generates into CSS.

An admin can choose which themes and skins are loaded by default, and users can individually choose to apply themes and/or skins as well so that each user can achieve a custom look.

There are built-in themes, but you can also create your own by creating an instance of a new biskit type called Theme.

If you do create a new theme, then once you refresh your browser, you will then be able to select it in Global Preferences/Appearance/Skins and each user can also select it in User Settings/Appearance.

Tables look very different in Calpendo 9. If you want to revert to the old look, you can do so by selecting the skin uncleanTables in global preferences.

A new Themes Manager page, linked on all admin menus, provides the easiest way to view, edit and create themes.

PDF Generation

We have added support for converting XSL-FO formatted strings to PDF. There’s a new workflow function for this called “toPDF”. Give it an XSL-FO formatted string, and it returns the PDF file.

There are some “Hello World” type examples in the workflow manager. Open Workflow Biskit/Versioned Workflow Biskit/Workflow/Example PDF generation with XSL FO

XSL-FO tutorials and information:

The standard is described here:

Barcodes

We have added support for barcodes. This comes in two parts where PDFs can include barcodes, and also string-valued properties can be displayed in the UI as a barcode.

For PDFs to include barcodes, see the XSL FO workflow example mentioned above for a “Hello World” type example. For examples of all the types of barcode available, see http://barcode4j.sourceforge.net/examples.html

The format of the XML required inside the XSL FO file is described at http://barcode4j.sourceforge.net/2.1/barcode-xml.html

You can also now configure a string-valued property to display its content as a barcode in the browser.

Note that the PDF barcodes (generated by Barcode4j) have a different set of barcode types from those available in the browser (generated by JsBarcode). In particular, the PDF barcodes can include 2D barcodes in QR format whereas those in the browser cannot.

LDAP Authentication

We have supported LDAP authentication for a while now. The method of authentication we had was known as “bind-as-user”. This is where the user provides their login name and password, and we attempt to connect (bind) to the LDAP server as that user and password. If we can connect, then the user is authenticated.

For this to work, it requires that there’s a single format of user DN. The user DN (or Distinguished Name) is a path that leads to a particular entry in the LDAP server.

Some LDAP servers are not structured such that all users have a DN of the same format. In other words, they are located in different places within the LDAP server.

To support such use cases, we now provide an additional means of authenticating over LDAP using a mode known as bind-as-admin. This is where you configure a known DN and password for a particular user (the admin), and then once connected to the LDAP server as that user, you perform a search for the user you want to authenticate. Once you find the user, you can then use the password the user provides along with the user DN to authenticate the user.

When choosing these two methods, they each have advantages and disadvantages:

Multi-Edit Children

Add support for a new multi-edit mode when editing the children of a one-to-many property.

This allows you to edit all children at the same time, with a large grid.

This is currently not the default way of editing one-to-many properties.

It is enabled for a particular property by adding a layout for the biskit being edited, and selecting the appropriate option for that property.

Auto-filter Drop-Down of One-to-many Children

This is a facility that provides automatic filtering of the biskits that can be selected in a biskit-valued drop-down under very specific and limited circumstances.

This is designed specifically for managing samples that have been submitted for alaysis, but could be used in other places too.

Suppose there is a biskit called “order” which has two one-to-many properties called “samples” and “analyses” of type Sample and Analysis respectively.

Further, suppose Analysis has a property “sample” of type “Sample” and order.samples is fully-owned by order. (This means sample must always have a non-null parent Order, so it belongs to that order), and order.analyses is also similarly fully-owned by order (so that Analysis must always have a non-null parent Order).

Then when editing the value of Analysis.sample, the options that can be chosen in the drop-down should not be any old Sample, but only those Samples that are in the set analysis.order.samples.

Auto-filtering of booking properties from resource one-to-many

If you have a one-to-many property on a resource that stores biskits of a particular type, and there’s a property on a booking that points to a biskit of the same type, then the values that will be offered by the drop-down on the booking will only include those linked from the currently selected resource.

Exposed Password Checks

We can now check whether passwords have been exposed in a security breach.

When a user sets a new or initial password, we can now check whether that password has been exposed in a security breach.

For this purpose, we use haveibeenpwned.com

For details of the method used without exposing user passwords to the people that run haveibeenpwned.com, see:

There’s a new global preferences setting on the Security tab for this. You can choose a threshold which is the number of times a password has been exposed, beyond which we should reject the password.

By default, we have turned this on for everybody and set the threshold to one. This means a password will be rejected as long as it has been exposed at least once in a security breach.

Note that this method rejects passwords that have been exposed in a security breach and does not directly check password complexity. That means it is possible we could reject a complex password and accept a simple one.

Importing Bookings From External iCal Feed

We can now automatically import bookings from an external iCal feed, and maintain bookings in sync with that feed.

Changes

Communication

Version 9.0 has completely replaced the mechanism used for communicating between the browser and the server. This has been done for several reasons:

Speed

Some systems have become much slower over time. Version 9.0 completes the major work that was begun with version 8.4 to address these speed issues. Those suffering with poor performance should find that 9.0 has a dramatic effect on the feel of the system.

While there will continue to be individual operations that can be tuned to perform better, it is already much faster than before in many places.

The menu editor has had a big makeover. It is now consistent with the look and feel of the rest of Calpendo rather than doing things in completely unexpected ways. It used to have a button bar at the top and the bottom, with the one at the bottom affecting menu items and the one at the top affecting whole menus.

It now has a list of the existing menus on the left, and you click on a menu to view or edit, like many other editors.

Internally, the Menu biskit type has been separated into a top-level Menu type with sub-types RootMenu and ChildMenu. The old property parent on Menu has been moved to ChildMenu. Every ChildMenu must have a parent, and RootMenu does not have a parent.

The privileged search feature allows limited searching to be done for things that would normally be hidden by permissions. This is used by those using an Exprodo database to store a pool of research study volunteers. Researchers setting up a new study can search through the volunteers for people to be invited to join the new study, while only allowing certain properties to be used in the search, such as age, gender, handedness or MRI compatibility etc.

This system generates emails to be sent to the volunteers when they are to be invited.

The new change is that these emails can now be in HTML format as well as plain text.

New Workflow Events

New Workflow Functions

The following workflow functions have been added:

Other Workflow Changes

Services

Holidays

Report Manager

Services and Bookings Linkage

We now have better support for linking bookings and service orders.

This provides support for a convenient way to specify bookings for instruments that will be used in fulfillment of a service order.

From a user’s perspective, what they will see is that you can have one or more properties on a service order to reference bookings, and bookings can reference service orders. This is for those services that will require an instrument to be booked in order to fulfill the service request.

When specifying the booking on the service order, you will be shown a pop-up that lets you select the booking. If the order has a project set, then it will only show bookings that use that project.

Further, if the selected bookings have a property referencing back to a service order, then that will be automatically populated with the appropriate reference.

This should make it easy for people to set up the references between service orders and bookings, and so get better reports.

To configure this, start by adding one or more properties to a service order in the bakery to store a reference to a booking.

Then, when configuring a service, after you select the type of biskit to use for its service orders, it will show a table with a row for all the Booking properties on the service order so that you can choose the resource to be used for that Booking.

When entering the service order, you will see a button labelled “Select Booking” which lets you choose a booking for the appropriate resource.

Count concurrent bookings multiple times in TotalTimeBookedRule

If you make multiple bookings at the same time, perhaps for different resources, then TotalTimeBookedRule was counting that only once.

This was done by design, but isn’t the ideal way of working.

This change now means that if you have multiple concurrent bookings, they are each counted towards the total time.

Booking Popup Display Changes

Miscellaneous Changes

Back to Top

Updates

9.0.0 February 19th, 2019

First released version.

Back to Top

9.0.1 March 11th, 2019

Bug Fixes

Back to Top

9.0.2 March 26th, 2019

Changes

Bug Fixes

Bug Fixes From 8.4.29

Bug Fixes From 8.4.30

Bug Fixes From 8.4.31

Bug Fixes From 8.4.32

Back to Top

9.0.3 April 29th, 2019

Changes

Changes From 8.4.33

Bug Fixes

Bug Fixes From 8.4.33

Bug Fixes From 8.4.34

Back to Top

9.0.4 May 8th, 2019

Changes

Bug Fixes

Bug Fixes From 8.4.36

Bug Fixes From 8.4.37

Back to Top

9.0.5 May 14th, 2019

Changes

Bug Fixes

Bug Fixes From 8.4.38

Back to Top

9.0.6 May 15th, 2019

Changes

Back to Top

9.0.7 May 16th, 2019

Security Bug Fixes From 8.4.40

Bug Fixes

Back to Top

9.0.8 May 17th, 2019

Changes

Bug Fixes

Bug Fixes from 8.4.40

Back to Top

9.0.9 May 22nd, 2019

Security Changes

Security Bug Fixes From 8.4.41

Changes

Bug Fixes

Back to Top

9.0.10 May 29th, 2019

Changes

Bug Fixes

Back to Top

9.0.11 May 30th, 2019

Bug Fixes

Back to Top

9.0.12 June 3rd, 2019

Changes

Bug Fixes

Back to Top

9.0.13 June 4th, 2019

Bug Fixes

Back to Top

9.0.14 June 13th, 2019

Changes

Bug Fixes

Back to Top

9.0.15 June 14th, 2019

Bug Fixes

Back to Top

9.0.16 June 18th, 2019

Changes

Bug Fixes

Back to Top

9.0.17 June 19th, 2019

Changes

Bug Fixes

Back to Top

9.0.18 June 21st, 2019

Changes

Security Bug Fixes from 8.4.42

Bug Fixes

Back to Top

9.0.19 June 25th, 2019

Changes

Bug Fixes

Back to Top

9.0.20 July 4th, 2019

Changes

Bug Fixes

Back to Top

9.0.21 July 17th, 2019

Bug Fixes

Back to Top

9.0.22 July 29th, 2019

Changes

Bug Fixes

Back to Top

9.0.23 August 12th, 2019

Changes

Bug Fixes

9.0.24 August 14th, 2019

Bug Fixes

9.0.25 August 15th, 2019

Bug Fixes

9.0.26 August 19th, 2019

Bug Fixes

9.0.27 August 20th, 2019

Bug Fixes

9.0.28 August 29th, 2019

Changes

Bug Fixes

9.0.29 September 13, 2019

Changes

Bug Fixes

9.0.30 September 17, 2019

Bug Fixes

Back to Top

9.0.31 September 18, 2019

Bug Fixes

Back to Top

9.0.32 September 19, 2019

Bug Fixes

Back to Top

9.0.33 September 20, 2019

Security Bug Fixes

Bug Fixes

Back to Top

9.0.34 September 24, 2019

Bug Fixes

Back to Top

9.0.35 September 25, 2019

Bug Fixes

Back to Top

9.0.36 October 9, 2019

Security Bug Fixes

Changes

Bug Fixes

Back to Top

9.0.37 October 10, 2019

Bug Fixes

Back to Top

9.0.38 November 13, 2019

Changes

Bug Fixes

Back to Top

9.0.39 November 22, 2019

Changes

Bug Fixes

Back to Top

9.0.40 December 11, 2019

Changes

Critical Bug Fixes

Bug Fixes

Back to Top

9.0.41 December 13, 2019

Changes

Bug Fixes

Back to Top

9.0.42 January 7, 2020

Changes

Critical Bug Fixes

Bug Fixes

Back to Top

9.0.43 January 10, 2020

Changes

Bug Fixes

Back to Top

9.0.44 January 13, 2020

Changes

Back to Top

9.0.45 January 14, 2020

Back to Top

9.0.46 January 16, 2020

Changes

Back to Top

9.0.47 January 30, 2020

Changes

Bug Fixes

Back to Top

9.0.48 February 6, 2020

Changes

Bug Fixes

Back to Top

9.0.49 February 7, 2020

Changes

Bug Fixes

Back to Top

9.0.50 February 12, 2020

Changes

Bug Fixes

Back to Top

9.0.51 February 19, 2020

Changes

Bug Fixes

Back to Top

9.0.52 March 3, 2020

Changes

Bug Fixes

Back to Top

9.0.53 March 16, 2020

Security Bug Fix

Changes

Bug Fixes

9.0.54 March 23, 2020

Changes

Bug Fixes

Back to Top

9.0.55 March 31, 2020

Changes

Bug Fixes

Back to Top

9.0.56 April 23, 2020

Changes

Bug Fixes

Back to Top

9.0.57 April 27, 2020

Security Bug Fixes

Back to Top

9.0.58 May 12, 2020

Changes

Bug Fixes

Back to Top

9.0.59 May 15, 2020

Bug Fixes

Back to Top

9.0.60 June 2, 2020

Changes

Bug Fixes

Back to Top

9.0.61 July 1, 2020

Changes

Security Bug Fixes

Bug Fixes

Back to Top

9.0.62 July 30, 2020

Changes

Bug Fixes

Back to Top

9.0.63 Aug 11, 2020

Changes

Bug Fixes

Back to Top

9.0.64 September 8, 2020

Changes

Bug Fixes

Back to Top

9.0.65 October 13, 2020

Bug Fixes

Back to Top

9.0.66 October 27, 2020

Changes

Bug Fixes

Back to Top

9.0.67 November 4, 2020

Bug Fixes

Back to Top

9.0.68 November 17, 2020

Changes

Bug Fixes

Back to Top

9.0.69 November 26, 2020

Bug Fixes

Back to Top

9.0.70 December 8, 2020

Bug Fixes

Back to Top

9.0.71 December 16, 2020

Bug Fixes

Back to Top

9.0.72 December 16, 2020

Bug Fixes

9.0.73 December 31, 2020

Bug Fixes

9.0.74 January 12, 2021

Changes

Bug Fixes

9.0.75 January 25, 2021

Bug Fixes

9.0.76 January 29, 2021

Bug Fixes

9.0.77 February 5, 2021

Bug Fixes

Back to Top

9.0.78 February 15, 2021

Bug Fixes

Back to Top

9.0.79 February 17, 2021

Bug Fixes

9.0.80 March 3, 2021

Bug Fixes

9.0.81 March 5, 2021

Security Changes

Security Bug Fixes

9.0.82 March 26, 2021

Bug Fixes

9.0.83 April 5, 2021

Changes

Back to Top

9.0.84 April 25, 2021

Bug Fixes

Back to Top

9.0.85 May 26, 2021

Changes

Bug Fixes

Back to Top

9.0.86 June 12, 2021

Bug Fixes

Back to Top

9.0.87 July 9, 2021

Bug Fixes

Back to Top

9.0.88 August 20, 2021

Changes

Bug Fixes

Back to Top

9.0.89 August 25, 2021

Changes

Back to Top

9.0.90 September 13, 2021

Bug Fixes

Back to Top

9.0.91 November 22, 2021

Bug Fixes

9.0.92 December 20, 2021

Security Bug Fixes

9.0.93 April 6, 2022

Security Bug Fixes

9.0.94 March 30, 2023

Bug Fixes

9.0.95 June 21, 2023

Bug Fixes