Release Notes for Exprodo and Calpendo version 7.0
Table of Contents
- New Features in Version 7.0
- Minor New Features
- New Features Added After Initial 7.0.0 Release
- Minor New Features Added After 7.0.0 Release
- Updates
- 7.0.0 (2nd June, 2014)
- 7.0.1 (2nd June 2014)
- 7.0.2 (2nd June 2014)
- 7.0.3 (2nd June 2014)
- 7.0.4 (3rd June 2014)
- 7.0.5 (5th June 2014)
- 7.0.6 (6th June 2014)
- 7.0.7 (13th June 2014)
- 7.0.8 (23rd June 2014)
- 7.0.9 (27th June 2014)
- 7.0.10 (5th July 2014)
- 7.0.11 (7th July 2014)
- 7.0.12 (7th July 2014)
- 7.0.13 (7th July 2014)
- 7.0.14 (20th July 2014)
- 7.0.15 (21st July 2014)
- 7.0.16 (23rd July 2014)
- 7.0.17 (23rd July 2014)
- 7.0.18 (6th August 2014)
- 7.0.19 (7th August 2014)
- 7.0.20 (7th August 2014)
- 7.0.21 (13th August 2014)
- 7.0.22 (26th August 2014)
- 7.0.23 (10th October 2014)
- 7.0.24 11th December 2014
- 7.0.24-PR1 (21st October 2014)
- 7.0.24-PR2 (4th November 2014)
- 7.0.24-PR3 (13th November 2014)
- 7.0.24-PR4 (20th November 2014
- 7.0.24-PR5 5th December 2014
- 7.0.25 12th January 2015
- 7.0.26 14th January 2015
- 7.0.27 16th January 2015
- 7.0.28 19th January 2015
- 7.0.29 20th January 2015
- 7.0.30 8th February 2015
- 7.0.31 9th February 2015
- 7.0.32 (16th February, limited release)
- 7.0.33 (22nd February 2015, limited release)
- 7.0.34 (27th February 2015, limited release)
- 7.0.35 (26th March, 2015) (limited release)
- 7.0.36 (31st March, 2015)(limited release)
- 7.0.37 (1st April 2015)
- 7.0.38 (2015-05-25)
- 7.0.39 (2015-05-26)
- 7.0.40 (August 9th, 2015)
- 7.0.41 (August 11th, 2015)
- 7.0.42 (August 12th 2015)
- 7.0.43 (August 14th, 2015)
- 7.0.44 (August 18th, 2015)
- 7.0.45 (September 4th, 2015)
- 7.0.46 (September 10th, 2015)
- 7.0.47 (September 12, 2015)
- 7.0.48 (September 27, 2015)
- 7.0.49 (September 28, 2015)
- 7.0.50 (October 17th, 2015)
- 7.0.51 (October 19th, 2015)
- 7.0.52 (October 21st, 2015)
- 7.0.53 (October 30th, 2015)
- 7.0.54 (November 20th, 2015)
- 7.0.55 (November 24th, 2015)
- 7.0.56 (December 3rd, 2015)
- 7.0.57 (December 18th, 2015)
- 7.0.58 (January 18th 2016)
- 7.0.59 (January 21st 2016)
- 7.0.60 (February 2nd 2016, partial release)
- 7.0.61 (March 13th, 2016)
- 7.0.62 (April 8th, 2016)
- 7.0.63 (April 28th, 2016)
- 7.0.64 (May 4th, 2016)
- 7.0.65 (May 20th, 2016)
- 7.0.66 (June 6th, 2016)
- 7.0.67 (June 13th, 2016)
- 7.0.68 (July 18th, 2016)
- 7.0.69 (July 22nd, 2016)
- 7.0.70 (July 26, 2016)
- 7.0.71 (August 17, 2016)
- 7.0.72 (September 2, 2016)
- 7.0.73 September 19, 2016
- 7.0.74 January 7, 2017
New Features in Version 7.0
Booking sub-types
If you add custom properties to bookings, you can now have different properties
appear for different resources. So you might ask for patient details when
booking an MR scanner, but not when booking a conference room.
Time Template Transitions
When creating a time template, you can specify a time template that applies
far into the future, and also in the near term. For example, you may not allow
booking more than 6 weeks into the future. It used to be the case that
a time template from 9am to 5pm would only use a rolling transition. By that,
I mean that if it is now 3pm, then 6 weeks from now you can book from 9am
to 3pm, but not yet 3pm to 5pm.
There's now an option for an instant transition as well as rolling
transition. With instant transition, at 9am, the whole of the time template
from 9am to 5pm 6 weeks into the future would become available for
booking.
Authentication
There's now support for single-sign-on and other authentication methods. This
means you don't need to have a separate password for Calpendo and other systems
you access.
This includes an updated login page and new user registration page. Is also
easier to disable user self-registration for those sites that prefer to do this.
Faster Start-Up Time
Particularly on slower network connections, you should notice a faster start
up time.
Automatic Timestamps
As well as storing all activity in the audit log, Bookings have always directly
stored the date and time when they were created and last changed. This has now
been extended to other data types including Projects and can be added to your
own custom types too.
Automatic Version Tracking
Some built-in data types and your own custom types can now keep track of their
version number. For example, every time you edit a project, its version number
is increased by one. This can now prevent somebody overwriting other people's
changes by making sure when you save something, you were editing the latest
version to begin with.
Soft Locking
When you begin editing anything, if it appears that anybody else is editing it
already, then you will be warned.
File Attachments
You can now upload files and have them stored in the database. For example, you
can attach documents to projects, such as ethics and other approvals.
Bookings Calendar Update
For a while now, we've strongly recommended particular display settings for the
bookings calendar. This update now forcibly updates the settings to the
recommended values, although you can change them again afterwards if you prefer.
The change means that Calpendo will always show a column for resources in the
calendar, even if there are no bookings present. Also, each column will show a
heading giving the name of the resource.
Native Excel Export
Reports can now be exported in native Excel formats (xls and xlsx). This is
particularly useful for countries that use a comma as a decimal separator such
as most non-English European countries.
API Changes
Starting with this release, the API (Application Programmer Interface) for
connecting other programs to Calpendo will be documented. New in this release
is support for making complex search queries on the database, and getting back
only the columns you need.
There are also some breaking changes to the API, so if you were already using
it, please contact us.
New Booking Rule: Search Results Rule
This lets you perform a search for some data, and the rule can be configured to
fail depending on the number of search results found. For example, you can
create a Training biskit that captures information about when each person goes
on training courses that are required for your facility. Then, create a
Search Results Rule that checks that the person making the booking has
received training on the relevant resource in the last 6 months or 12 months etc.
Permissions
Some changes have been made to make permissions easier to understand.
There used to be a permission property called "positive" that was a boolean
property with values true or false. This has now been renamed to
authorisation and you now choose from the options "Grant permission" and
"Deny permission". It should now be clearer whether a permission that matches
will actively allow an action (by granting permission) or stop an action
(by denying permission).
Also, support for what we called "definitive permissions" had been dropped.
They were a source of confusion. Also, they were not even necessary because
every definitive permission could always be represented as two non-definitive
permissions.
The permissions page shows the permissions differently now. This is to reflect
the fact that permissions for Booking will now also apply to subtypes of Booking.
Automatic Emails
The automatic emails page shows the automatic emails differently now. This is
to reflect the fact that automatic emails for Booking will now also apply to
subtypes of Booking.
Conditions: Referenced-by
This is an extension of conditions that is turned on when you select the
advanced checkbox. It allows you to add a condition on the number of times
something is referenced by other things.
For example, you can use it to find all the projects that have not had
a booking in the last 6 months, or that have had more than 10 bookings in
the last week.
Minor New Features
Boolean Property Values
There have always been "boolean" properties whose values have been "true" or
"false". You can now customise the value labels for each property. For example,
you may want "Yes" and "No", or "On" and "Off".
Custom User Properties
The new user registration page used to ignore some types of properties. This
has now been extended so it supports all the types you are likely to want.
Import Improvements
The import page has been substantially improved. It can now handle importing
non-ASCII character properly, such as accented characters like é, ä and ç etc
and it handles import failures due to dirty data much better. It is now a
utility that helps you to see all the problems, and to import only parts of a
file as you require.
It also supports uploading multiple files at once when you want to import
something that includes file attachments.
Rule Misconfiguration
There are some rule configurations that are possible to set up, but don't make
sense. We now detect this and prevent you from saving a rule in such a state.
For example, if a rule only applies when cancelling bookings, then any
"Does Not Apply To" that you create should also apply to cancellations.
Licence Entry
The licence tab of the Global preferences page has changed a little.
Template Project
There's one special "template" project that is used to initialise default
values for all properties when creating new projects. If you set any
restrictions on project values, for example requiring particular properties to
be set, then those restrictions are no longer applied to the special template
project.
Third Party Software
The "About" page now has a link to a page that shows what third party software
has been used in making Calpendo.
Status Change Buttons on Search Pages
When you search for users, projects or bookings, there are now extra buttons
that are displayed as a short cut to changing the status.
For example, you can now easily approve users from a regular user search page.
This means that you can replace the standard user approval page with one that
only shows a subset of the new user requests. This is useful when you want to
assign user administration for a group of users to particular people.
Permissions and Automatic Email Pages
Both of these pages have changed their layout to reflect the need to support
booking subtypes.
Cancelling Bookings
The booking pop-up now shows an additional cancel button to remove confusion
between cancelling the booking and cancelling the pop-up.
Old-style Searches
The search page was replaced a long time ago. The old version has been hidden
for a while, although it still worked. It has now been completely removed.
Indications are that nobody was still using the old searches, so this change
should affect nobody.
Time Template Recording
You can now add custom properties to TemplateGroup. This is useful if you want
to set up different people as administrators for a booking depending on which
Time Template applied to it.
New Features Added After Initial 7.0.0 Release
Custom content to describe your facility
Add support for displaying static HTML pages, for example to describe a
your core facilities.
- This is available in the menu editor as a custom page known as a
Biskit Tree Viewer page.
- This displays a navigation bar on the left, and click on any of the
items to see the associated content on the right.
- To use this as designed, you would:
- Create a custom biskit and give it a name property and a "content"
property. The content property should be String valued, of subtype
HTML.
- Configure this biskit type as a hierarchy, which means adding a
property to reference a parent and a set of children. See the manual
for details on how to do this.
- Use existing facilities for entering instances of this new type, where
you provide a name and rich text for the content associated with that
name.
- Use the menu editor to add a custom page of type Biskit Tree Viewer,
and specify the type of biskit and which property contains the HTML to
display.
Custom CSS Classes
Added extra CSS class names to help custom styling
- For a biskit type "Foo", this provides CSS class names like:
- exprodo-Foo
- exprodo-Foo-create
- exprodo-Foo-update
- exprodo-Foo-view
- The Booking popup and other calendar-based popups all have extra CSS too:
- All the above have been added, so "exprodo-Booking-create"
- Also, class names specific to each popup. For example:
- calpendo-BookingPopup-create
- calpendo-BookingPopup-update
- calpendo-BookingPopup-view
Add support for allowing the menu/navbar at the top of the page to retain
a fixed position when the page is scrolled. The appropriate entries required
in the Appearance/custom CSS tab of Global Preferences is:
.exprodo-navbar
{
z-index:1;
background-color:white;
position: fixed;
}
.exprodo-main-content
{
margin-top:26px;
}
Rich Text Editing
In places where you can edit rich text (text that can be formatted with font,
colour, size etc) now lets you add new things:
Dynamic Notes
Sometimes, you want to be able to allow people to add notes to something, in
the same way that you might stick a Post-It Note to a page in a book.
For example, if somebody orders a service, then you might want notes attached
to the service order for the service provider to communicate with the person
who ordered the service. Or, if you use an Exprodo database for a human
resources system, and so you're storing information about people, then you
might want to attach notes to the person.
To make this work, you first need to create a new biskit type to store the
note. The note biskit:
- must have a Biskit to-one property referencing the biskit the note belongs to.
That would be the service order or the person in the above usage examples.
- must have a string property to store the note itself.
- can have automated properties to store the date when the note was created and
by whom.
- can declare the string property type of the note property to be HTML so that
the note can be rich text (that is, you can format it with colour and fonts
etc).
Then, you must create a layout using the Layout Editor for the biskit that
should have notes attached, and configure notes without that layout.
Charts
There is now a charting facility associated with the search page. It's currently
usable, but incomplete and undocumented. If you want to know about charts,
please ask us. They are currently hidden from general use, but can easily be
enabled.
iCal Bookings Feed
- Add support for iCal bookings feed to send bookings to other calendar
applications (eg Google Calendar, iCal, Outlook, Android, iOS)
- There is a button on the bookings calendar to provide access to the feed.
Custom Search Pages
- Upgrade custom search pages to support form-based custom search widgets
that appear in a panel down the left rather than a single-line at the top.
- Add support for custom search page search term that checks for a range of
numeric values.
Calpendo Services
- Add support for services, with example histopathology and radiological
assessment services.
Automatic Database Upgrades and Downgrades
This means that when a new version is first booted, it will automatically
apply any changes to the database that are required to make it work with that
new version.
If you roll back from one version to another, then there is some limited support
for automatic downgrades. However, you should always have a database backup
in case the automatic database downgrade does not work. (Downgrades are not
supported across major version changes).
Automatic Recording Of Who Created Or Updated Something
- Add support for automatic recording on a biskit of who created it and was the
last to update it. Create a user biskit property on the target biskit type,
mark it as automated, and set as the creator/updator property.
Minor New Features Added After 7.0.0 Release
- Repeat bookings with a single instance are converted to non-repeating
- When a repeat booking is modified, and you ask for the change to apply to
just the one booking or that one booking and all later items, then the
repeat will be split into 1, 2 or 3 bookings.
- The first will be for those bookings before the one you asked to be
changed.
- The second will be the one you asked to be changed, and was always a
non-repeat booking.
- The third will be the remaining repeat bookings after the one you asked
to be changed.
- Now, if the repeat bookings generated from the first and third items above
have only a single repeating instance, then it is automatically converted
to a non-repeat booking.
- The date/time a user last logged in is now stored directly on each user
- This makes some reports about user activity much easier
- The IP address the user logged in from is also recorded
- Advanced rules have a new option to change behaviour with repeat bookings
- For repeat bookings, rules are normally run once for every instance of
the repeat booking. There's now an option on advanced rules to run it
only once instead.
- The difference is that when run many times, the advanced rule is given a
copy of the original repeat booking. Consequently, if the rule modifies
this copy, changes made to it will not be saved to the database nor seen
by subsequently run rules.
- When run once, the rule will be given the original repeat booking, and
and changes the rule makes to the booking will then be persisted and also
available to subsequent rules.
- Note that for repeat bookings, advanced rules marked as being run once
will always be run before all other rules regardless of requested
rule execution order.
The global preference for the initial page to display on loading the app
now has a button and drop-down letting you select from a list of all known
pages, all items on the menu and recently access pages by the current user.
The database dump page now has a new option for a simple choice of which
tables to dump.
- Add support to history page for creating a copy of old versions of biskits
- When you now click on a particular version in the history of a biskit,
there's a "Create Copy" button. That will offer you the chance to create
a new biskit using the old values.
- Note that some properties (those that are a set or list) are not recorded
in the audit log, and so will not be created for you in the new copy.
- Add support to the booking popup for displaying hierarchical resource types
- This can be enabled by adding two properties to ResourceType. One of type
Biskit/many-to-one to store a reference to a "parent" ResourceType, and
another of type Set/one-to-many to store a reference to child
resource types.
- This then lets you create a hierarchy of resource types so you can
classify instruments. For example, you may create a resource type of
"microscope", with subtypes "Electron Microscope" and "Optical Microscope",
with subtypes of Electron Microscope of "SEM" and "TEM". etc.W
- Add support for checked-editing pop-up to show properties by layout tab
- When there are many tabs and properties, this makes checked-editing
much more user friendly.
- This applies when you have a list and use the check boxes to select the
items you want to change, and then press the Edit button with an arrow
pointing to the check boxes.
- Add support for emails to be sent with no "TO" addresses
- Previously, if there was no "TO" address, it would not send the email
regardless of the presence of CC/BCC addresses.
- It will now send an email as long as there is something in any of
TO, CC or BCC
- Add support for retaining the selected tab on switching biskit or edit/save
If you view or edit some data that uses a layout with many nested tabs,
it would not display the same tab as you switched from viewing different
biskits or on pressing the Edit or Save button.
It will now keep the same tab selected.
*
Add support for changing the resource groups a resource is a member of from
the resource editor.
- Add support for adding/removing many users, projects or resources at once
to/from groups
- For example, from a list of users, you can check many users and then
click the new "Add to group" or "Remove from group" drop-down button to
add or remove the checked users from a selected user group.
- The same applies to a list of projects and project groups, and a list of
resources and resource groups.
- Add support for modules. In the future, we will also support plugins.
Modules are parts of the system that are created by us and compiled in, but
can be turned on or off. Plugin-ins will be downloadable extras that you can
add. The add-on manager controls modules, and will later control plugins.
The add-on manager menu item is currently hidden from general use.
- You need an easter egg entry of "addons" in global preferences/appearance
to enable the add-on manager menu item
- Add support for non-Booking formulaic properties in rule conditions
- Formulaic properties are calculated by the database.
- Booking rules apply before bookings are sent to the database.
- Therefore formulaic properties on bookings are not useful when running
a booking rule. The rule editor's conditions panels did refuse to
display all formulaic properties, but now will display formulaic
properties on other biskits. For example, formulaic properties on a
project.
- Add support for recording schema changes executed from bakery in db upgrade
- The easiest way to see this is to go to the add-on manager and click on
database upgrades. This is just a search for biskits of type
"DatabaseUpgrade".
- This records both updates done via the bakery in the regular way
with "update db schema", but also any SQL executed by using the custom
SQL tool that you see in the bakery when logging in as root.
- This should correctly record queries that work properly and queries that
fail, along with the mysql error.
- If you run some custom SQL in the bakery that only does queries, and
does not try to modify anything, then this does not get recorded in
the database upgrades table. It does, however, still get recorded in the
system events table.
Add support for setting automatic email reply-to address in global references
Add new UserGroup.self property
Add user setting for calendar start/finish hour and day of week
Add button to hide/show the nav/filter panel on all calendars
Add support for user names that include a hyphen, period or underscore.
Previously, only alphanumeric names were allowed.
Add support for a group report aggregation of "value at minimum" and
"value at maximum". For example, if you have a biskit that stores a bank
account balance, you can add a column to the report for the date, and give it
an aggregation of "value at minimum" of "account balance". This means it will
then produce the date on which the account balance is at its minimum.
Add support for opting out of automatic emails. Every user can now turn this
on in their user settings. This does not apply to booking reminders.
Add support to Calpendo for Resource.managerUserGroup to allow you to specify
a group of users that can make bookings for any project on that resource and
can approve/deny/cancel bookings on that resource.
Add support for is-ancester-of, is-not-ancestor-of, is-descendant-of
and is-not-descendant-of condition relations that can apply to biskits
configured as a hierarchy.
Add validation of any string property that contains an email address
to ensure the email address is legal
Add support for double time-of-day props (helps int time-of-day average
reports)
Updates
7.0.0 (2nd June, 2014)
7.0.1 (2nd June 2014)
- BUGFIX: Third party licences were not displaying properly
7.0.2 (2nd June 2014)
- BUGFIX: File downloads were not working
7.0.3 (2nd June 2014)
- BUGFIX: Searches could result in lots of email spam back to Conaptic
- BUGFIX: Searches grouping by user wasn't working properly
7.0.4 (3rd June 2014)
- BUGFIX: JSON output from the API had badly formatted JSON
7.0.5 (5th June 2014)
- BUGFIX: Single-sign-on that forces iframe escaping was redirecting incorrectly
- BUGFIX: Boot failures caused additional problems that could hide real problem
- BUGFIX: Login handled badly when licence had expired
- BUGFIX: Custom layouts that use radio buttons needed globally unique group
- BUGFIX: Exception on updating biskit definitions from the bakery
- BUGFIX: Incorrectly validating a master biskit's reference to the slave
7.0.6 (6th June 2014)
- BUGFIX: Single-sign-on redirect error for some configurations
7.0.7 (13th June 2014)
- BUGFIX: File attachments were not displayed properly
- BUGFIX: Reminder system was caching email addresses, ignoring address changes
- BUGFIX: Report Manager could create reports with spurious conditions in DB
7.0.8 (23rd June 2014)
- BUGFIX: Convert repeat booking to non-repeat gave an exception
- BUGFIX: Bug-report emails had bad data path, causing further exception
- BUGFIX: Hide display of data while rendering takes place
- BUGFIX: BiskitsDetail could show an editor for the wrong biskit type
- BUGFIX: With multiple external authentications, they confuse display settings
- BUGFIX: When prevent non-root user changing root user, improve error message
- BUGFIX: Template updates not send version/created/updated info back to client
7.0.9 (27th June 2014)
- BUGFIX: do not hide biskit type/id when EXISTS permission is allowed
- SECURITY BUGFIX: reports showing biskit names when perms indicate not readable
- BUGFIX: do not send automatic emails to users who cannot log in
- SECURITY BUGFIX: request for name/type/id wasn't checking permissions
7.0.10 (5th July 2014)
- BUGFIX: Speed up layout editor's preview of biskit props with many values
- BUGFIX: Import wasn't handling component biskits well (eg user identity)
- BUGFIX: Import wasn't accepting string values for MappingInt and BitSet props
- BUGFIX: Bakery wasn't allowing a static super type for static types
- BUGFIX: Reports attached to emails were corrupted
7.0.11 (7th July 2014)
- BUGFIX: Import exception when given no property definition for integer
7.0.12 (7th July 2014)
- BUGFIX: External authentication redirect had extraneous ../
7.0.13 (7th July 2014)
- Display a tooltip in bookings calendar over resource names in column heading
- BUGFIX: Custom search menus displayed list report, even if want group report
- BUGFIX: History not handling display of attachments well
- BUGFIX: Create template that repeats forever & it would end the day it starts
- BUGFIX: Attachments would render badly in some places
- BUGFIX: Import wasn't catching resolve exceptions
- BUGFIX: Booking Popup exception when owner was read-only while editing booking
7.0.14 (20th July 2014)
- BUGFIX: Single property with multiple file attachments wasn't working
- BUGFIX: Auto emails gave exception when accessing a shallow value
- Show search in tree editor when click on data type (eg types & groups editor)
- BUGFIX: Do not allow dynamic properties or subtypes of authentication methods
- Make fetching type/id/name of multiple biskits much faster
- Make tree editor load faster (by loading only type/id/name initially)
7.0.15 (21st July 2014)
- BUGFIX: Rules weren't counting bookings properly when booking subtypes in use
7.0.16 (23rd July 2014)
- BUGFIX: Projects not passing resource settings over network (since 7.0.14)
- BUGFIX: Search pages did not show create button when search results empty
7.0.17 (23rd July 2014)
- BUGFIX: Group search report hid main report when click on group in main report
7.0.18 (6th August 2014)
- BUGFIX: Import wasn't rejecting a file when a row had extraneous data
- Add support for import to allow null values
- BUGFIX: The API would render dates with incorrect timezone handling
- BUGFIX: Some search conditions couldn't be saved properly
- SECURITY BUGFIX: Some permissions were mishandled, giving access incorrectly
- BUGFIX: Click on booking in month view and it would show two pop-ups
- BUGFIX: BookingType colour rendered as a number in editor instead of a colour
- Booking popup now stops you saving booking while finish time later than start
- Add support for displaying a month view in the templates calendar
- Changed bookings month view to show booking finish time as well as start time
- BUGFIX: Booking calendar month view gave error for first-time users
- BUGFIX: Reduce size of some network msgs (saving UserGroup sometimes failed)
7.0.19 (7th August 2014)
- BUGFIX: Preferences page was sending more data than required, sometimes
causing difficulties
- BUGFIX: Checks for unconditional permission checked when it shouldn't be
(depending on permissions settings, some bookings were hidden that should
not have been)
7.0.20 (7th August 2014)
- BUGFIX: Resource usage recorder not always finding bookings that it should
7.0.21 (13th August 2014)
- BUGFIX: Scheduled reports were failing due to bad permissions check
- BUGFIX: Do not warn about report column/condition reset in read-only mode
- BUGFIX: Exception in permissions page on edit that moves node in the tree
- BUGFIX: Group report still showed group table when no results found
- BUGFIX: Exception checking permissions in server for automated actions
- BUGFIX: Overly pessimistic perms check on delete repeat booking this-item
7.0.22 (26th August 2014)
- Make removal of data you're not permitted to see a bit faster
- BUGFIX: Some reports accessing repeat information failed
- BUGFIX: Users sent from browser to server dropped their associated projects
7.0.23 (10th October 2014)
- BUGFIX: System usage statistics were recording hits incorrectly
- BUGFIX: Total time booked rule that matches booker user type gave exception
- BUGFIX: Conditions using "does not contain member" behaved like "contains member"
- BUGFIX: Exception when some automated updates changed data
- BUGFIX: Custom collections of data could generate an exception
- BUGFIX 1820: Search for AuthenticationMethod and add a condition gave UI exception
- BUGFIX 1820: Search for references from AuthenticationMethod gave exception
- Optimisation: search would sometimes do more work than necessary
- BUGFIX: Handle MappedInt and MappedString with leading/trailing label spaces
- BUGFIX: Make boot more resilient when custom data types are only partially added
- BUGFIX: Exprodo SDM subject events UI not acting on changes to event dates
7.0.24 11th December 2014
- BUGFIX: Custom biskit types could fail to load depending on configuration
- Import much faster when updating existing biskits
- BUGFIX: Menu editor showed duplicate custom page types after logout/login
7.0.24-PR1 (21st October 2014)
- BUGFIX: Data renderers sometimes failed (so custom rendering not always used)
- BUGFIX: Update hierarchy biskit didn't save custom biskit-valued properties
- BUGFIX: Some collections generated exception on sending to server
- Add support for importing a date/time that is a number of seconds since 1970
- Made Calpendo templates load much faster when accessed by multiple people
- Make Calpendo templates not apply to the past, but ongoing bookings are near term
- Make removal of data you're not permitted to see much faster
- BUGFIX: Layout editor choice of Sorted Vertical Tabs did show horizontal tabs
- Saving some data made much faster (especially if you have with lots of projects)
- BUGFIX: History for a particular biskit type now includes sub-types of that type
- Add protection from a flood of browser exception reports (Firefox sometimes goes mad)
- BUGFIX: Some trees modified to avoid unintended selections on right-mouse button release
- BUGFIX: Ensure CRM email addresses are stored and compared lower case
- BUGFIX: Make CRM render contacts using custom layout
7.0.24-PR2 (4th November 2014)
- SECURITY BUGFIX: Files on system could be read via API (flaw in third party
library called Milton)
- CRM: Waterfall widget now handles missing dates on emails
- Checked-editing of biskits is now much faster
- Add support for int/long/double/string filter widgets in custom search page
- BUGFIX: ProjectResourceSettings did not allow new non-static properties
- CRM BUGFIX: Prevent contact note being saved without a contact
- BUGFIX: Reverse an earlier (mis-) optimisation in 7.0.23 for server search
- CRM: Allow note entered (but not added) during a contact save, to be saved
- Generate an error on importing an unrecognised BitSet value (was quietly ignored)
- CRM: Hide "Add this note" button while creating a contact
- SECURITY BUGFIX: Hardened security measures on who can download attachments
- BUGFIX: Auto email page always displayed "isAnyRole" as "ALL", never "ANY"
- Add support for auto email attachments by referencing within email body
- BUGFIX: Custom properties on user not saved when sent to server
- BUGFIX: Import wasn't able to import "id" or "foo.id" properties
- BUGFIX: If no read permission on a slave, then saving the master would fail
- BUGFIX: If no read permission on a slave, it wasn't obvious the content was hidden
- BUGFIX: Do not tell server browser is done with editing if not editing anything
- BUGFIX 1601: BiskitDef could lose its super-def on save
7.0.24-PR3 (13th November 2014)
- SECURITY BUGFIX: Hardened security checks for spoofed requests
- Prevent user from setting parent of a BiskitDef to itself
- BUGFIX: On timed out session, "login" button worked, "logout" button did not
- Updated "Powered by Exprodo" logo
7.0.24-PR4 (20th November 2014
- Prevent users from having an email address that ends with a period
- BUGFIX 1842: shallow exception on save of biskit with attachments
- BUGFIX 1839: Search conditions should not allow attachments to be selected
- BUGFIX: Rendering issues from 7.0.23 should now be fixed
7.0.24-PR5 5th December 2014
- BUGFIX: ResourceUsage did not allow custom properties (it should do so)
- BUGFIX: Booking reminders are no longer sent to users who can't log in
- Add support for import page to be able to choose which lines are imported
- BUGFIX: Import gave an exception when you selected a non-existent file
- SECURITY BUGFIX: Make session ID include more random data so it's harder to guess
- SECURITY BUGFIX: Ensure a session can only be used from the original IP address
- BUGFIX: Template checks could give wrong answer while a template transitions
to near term
- BUGFIX: Using checked-editing could give exception (7.0.23 introduced this)
- BUGFIX: Data inserted into automatic emails could sometimes display the wrong values
- BUGFIX: CRM now applies permissions to waterfall content
7.0.25 12th January 2015
Booking import should check that the biskit type matches what the resource wants
- Displaying references to anything:
- is much faster
- displays much better when there are many references
- BUGFIX: Change a repeatable booking, and its modification time was not changed
- BUGFIX: Auto email should not offer "date" or time related pseudo props on
a Date property (only on date-time properties)
- BUGFIX: Checked-editing bypassed some server side checks, so editting a user
would set their encrypted password incorrectly and the user could not log in.
Also, the and automatic emails were not getting triggered for some data types
and audit log was not getting updated for some data types.
- Import bug fixes:
- BUGFIX: The number of errors wasn't resetting on each re-import
- BUGFIX: MappedInt import used to silently ignore unrecognised names
- BUGFIX: Java enums used to silently ignore unrecognised names
- BUGFIX: Java enums now match value names case insensitive
- BUGFIX: MappedString values imported without validating values
- BUGFIX: Email addresses are now validated for sensinle format on import
- BUGFIX: component properties were mishandled (eg importing user identity)
- BUGFIX: 7.0.24 made import faster, but some server-side checks were bypassed
- BUGFIX: With master-slave biskits, updating a master via import failed if
the slave did not exist yet
- BUGFIX: Audit log not always updated for imports
- BUGFIX: Automatic emails not always triggered for imports
- Import new features
- property names in the heading are now matched case insensitive
- Names for a MappedInt and MappedString are now matched case insensitive
- On updating data, allow key properties to be modified by adding a second
column for the same property, and defining that column to be "normal"
rather than a key.
- Allow the data type to be narrowed on each import line. Eg, if you import
a mixture of different booking subtypes or bookings with daily repeat and
weekly repeats.
- Add support for warnings on import as well as errors
- Provide link in each column to show the problems from that column
- Provide link to re-display import problems even after you dismiss it
- Improve ability for server to send errors to user during import
- Boolean properties now accept your custom text for true/false eg yes/no
7.0.26 14th January 2015
- BUGFIX: Importing some string or boolean values could give an exception
7.0.27 16th January 2015
- BUGFIX: Ticking multiple items in a list and editing all in one go gave exception
- BUGFIX: Custom layouts could sometimes hide tabs when they shouldn't
- Login page now shows the program type as well as the name (eg Free Trial,
Demo)
- Apply limits to number of custom properties when using licence of type "Lite"
- Calpendo applies limits to rules and advanced groups when licence of type Lite
7.0.28 19th January 2015
- Speed up calculation of whether something is referenced or not
- Showing all references to something is now faster and uses less memory
- When showing references, make attachments show download link
7.0.29 20th January 2015
- BUGFIX: 7.0.28 introduced an infinite loop for some editing operations
7.0.30 8th February 2015
- Make import treat empty email address as meaning null email address
- BUGFIX: Error if create group report with min/max of date column with nulls
- Avoid unnecessary second network call to server on logging out
- BUGFIX: Importing MappedInt wasn't able to parse integer values
- Make biskit formatting use mapped string/int, bit set and time of day
properties correctly
- BUGFIX: Disabled formula check for live properties (it always complained)
- Add support to ResourceType & ProjectType for custom properties
- Import: set column to not be ignored when you manually set column path
- Click in an Import error pop-up now auto-scrolls preview to that item
- Custom formulaic properties are now syntax checked for balanced () brackets
- Make external auth methods show before non-external on login page
- BUGFIX: FormulaParser was rejecting some perfectly good formulae
- BUGFIX: Reports showing scaled integers with min/max could show as if error
- Import now gives an error if you have too many columns for the same path
- Stop Calpendo Lite from creating advanced rules
- Give better error message when you try to import a binary file instead of CSV
- Calpendo Lite give better error message if RulesManager finds too many rules
- BUGFIX: Import NPE on updating a master/slave with non-existant slave
- BUGFIX: Import of master/slave biskits not working
- BUGFIX: Projects did not display biskit-valued properties with hyperlinks
- Set the name of the default id column in bakery to include the biskitType
7.0.31 9th February 2015
- BUGFIX: Import didn't handle blank values on slave biskits well
7.0.32 (16th February, limited release)
- Replace loading GIF with animation of rotating circle of Exprodo colours
- Add support for regular expression matching in conditions
- BUGFIX: Import reported incorrect percentages during filtered import
- BUGFIX: Import wasn't handling time of day properties properly
7.0.33 (22nd February 2015, limited release)
- BUGFIX: Audit log permission cleaning could fail after bakery change
- Add support for search for single biskit (new report type)
- Add option to show fewer search options (make default for BiskitTreeEditor)
- Record the SQL for schema updates done via the bakery as system events
- BUGFIX: Make BiskitHierarchyTree deal with inconsistent trees better
- BUGFIX: menu editor couldn't save with search menu items having conditions
- Moved import settings to a separate drop-down to simplify the import page
- Add support for import to hide some rows/columns from import preview table
- Make import give better error message when it can't resolve values
7.0.34 (27th February 2015, limited release)
- Imported files now accept column prefixes of "KEY:" and "IGNORE:"
- BUGFIX: The single biskit report changes its displayed heading correctly
- BUGFIX: Making a custom page the default initial page was broken
- (still broken in issues, contacts, CRM & KioskAdmin)
- BUGFIX: Stopped boot-time error reported for biskit-valued properties with
a non-null default value
- BUGFIX: The busy wheel was showing at the login page when it shouldn't
- BUGFIX: Import was not auto-recognising the biskit type being imported
- Bakery no longer allows properties differing only by case (eg foo and FOO)
- Import now shows spreadsheet-style column names as well as column numbers
- BUGFIX: Import wasn't working when you tried to import a PropertyDef
- Bakery now disables buttons while a save or delete is in progress
- BUGFIX: On returning to a tree editor page, it forgot what you were
viewing/editing
- Import disables preview & import buttons when imported biskit type not set
- Moved Import buttons so they make more sense
- BUGFIX: Bookings calendar shows wrong day on daylight savings change
- BUGFIX: Layout editor search did not show any date or datetime properties
7.0.35 (26th March, 2015) (limited release)
- Add support for automatic database upgrade at boot time
- Add support for double time-of-day props (helps int time-of-day average
reports)
- BUGFIX: Make import support + and - as prefix to integer values
- BUGFIX: Checked-tree of properties sometimes had infinite loop on opening
- search for a biskit type that had a property referencing the same
biskit type, and it hit an infinite loop.
- Make sure imported PropertyDef instances go through some validation
- this should cover the problems you found
- Make PartialBiskitDialog faster by lazily loading all editor widgets
- This is the dialog used for checked-list-editing
- pressing the edit button on NDCN would leave it talking on the network
for about 30 seconds. It's now instant.
- Make PartialBiskitDialog use a TinBox for biskit-valued properties
- Even after doing the lazy loading above, this means that when you first
open a property that selects a Person, you have to wait for all the
details on all people to be sent from the server. The delay was a couple
of seconds. It now only sends the names and primary keys from the server,
and so happens immediately.
- BUGFIX: TypesAndGroups page forgot where you were on going back to it
- Change Custom SQL "Clear" to "Clear History"
- BUGFIX: Make custom SQL clear leave the history's first row
- BUGFIX: search inside a BiskitTreeEditor not adding newly created biskits
- If you show a single biskit report inside a BiskitTreeEditor, then creating
a new biskit wasn't adding it to the tree. That's because the report page
wasn't listening to the single biskit editor.
- BUGFIX: ArrayIndexOutOfBoundsException in import on selection of row -1
- this happened once in production. I've never been able to replicate it
so I suggest you don't try to test this one
- Make TinBox handle different biskit with same name better
- eg the single biskit report suggest box now deals with two biskits having
the same name properly
- this means creating a new biskit whose name matches an existing one,
where the new biskit will be given a unique name in the suggest box
- and also refreshing the browser when there are multiple biskits with the
same name. In this case, both biskits will be given a name with their
primary key in it.
- BUGFIX: When fetching a list of biskit names, it was doubling them up
- eg when populating the content of the single biskit report suggest box
it would return each one twice. Since the box dealt with duplicates
by just overriding each other, the mistake went unnoticed until now.
- BUGFIX: Could not set MappedInt & MappedString values with space at end
- Make import's KEY: and IGNORE: column headings case insensitive
- BUGFIX: Template calendar doesn't notice bookmark change
- BUGFIX: TTBR rejected bookings outside counted time if already over limit
- Make database dump file names include date, time, version and system name
- BUGFIX: On block/deny/expire a user, allow them to receive auto email
- BUGFIX: import with columns forced to ignore, and they still stop the
biskit type from being auto recognised.
- BUGFIX: Set column heading to ignore: and import still complains about it
- Exceeding licence limits now gives message that includes our email address
- BUGFIX: Copying repeat booking/template/event had bad start date
- users who can't log in no longer can receive emails
- Add new "lurker" user status who can't log in, but can get emails.
- Change BiskitTreeEditor to support RequiresResize widgets
- Add bakery tool for executing custom SQL in the databse (visible to root only)
7.0.36 (31st March, 2015)(limited release)
- BUGFIX: Formulae referencing some static properties would give error
(eg Calpendo owner.userType.name)
- Allow formulae to reference primary keys using pseudo id, eg as [foo.id]
- BUGFIX: Extending repeat template this-item still showed it as repeat
- TemplateGroup should now stop you creating after 3
- Improved error message given when access formula "[owner.userType.name]"
- BUGFIX 1863: Drag to extend the second of a repeat template sequence failed
- BUGFIX: MutableValueDTO.get(cache) complaining about missing BiskitDef
- Search for My Bookings, and the server sends an email to dev@exprodo.com
- BUGFIX 1864: Click in some parts of calendar item title gave no pop-up menu
- Add support for reordering resources in the resource selection pop-up
- This doesn't apply for project resource settings because these are stored
in an unordered set instead of a list.
- Prevent attachment download if no access to its referring biskit/property
- BUGFIX: Calpendo Lite didn't stop you from creating a fourth template group
7.0.37 (1st April 2015)
- BUGFIX: There were some static properties marked as non-static
- BUGFIX: Lite miscounted the custom properties (limit set at 14 instead of 15)
7.0.38 (2015-05-25)
New features added:
- Add support for automatic database downgrades at boot time as well as upgrades
- Add support for dynamic notes and waterfall. This lets you easily add attach
a text note to something, and see a waterfall of such notes.
- Add support for user names that include a hyphen, period or underscore.
Previously, only alphanumeric names were allowed.
- Add support for a group report aggregation of "value at minimum" and
"value at maximum". For example, if you have a biskit that stores a bank
account balance, you can add a column to the report for the date, and give it
an aggregation of "value at minimum" of "account balance". This means it will
then produce the date on which the account balance is at its minimum.
- Add support for opting out of automatic emails. Every user can now turn this
on in their user settings. This does not apply to booking reminders.
- Add support to Calpendo for Resource.managerUserGroup to allow you to specify
a group of users that can make bookings for any project on that resource and
can approve/deny/cancel bookings on that resource.
- Add support for is-ancester-of, is-not-ancestor-of, is-descendant-of
and is-not-descendant-of condition relations that can apply to biskits
configured as a hierarchy.
- Add validation of any string property that contains an email address
to ensure the email address is legal
- Add support for automatic recording on a biskit of who created it and was the
last to update it. Create a user biskit property on the target biskit type,
mark it as automated, and set as the creator/updator property.
Changes:
- The import now reports the number of lines imported
- Most server threads now have the servlet context path in their thread name
- Display the Calpendo Lite logo when appropriate (Login & About pages)
- Changed the Calpendo logo to match the new Calpendo Lite logo
- Improved error message given when you log out and back in, and then try to
import a file you uploaded before you logged out.
- Changed default file name used for database dumps to include the server
hostname (as specified in the global preferences emailed base URL)
Bug fixes:
SECURITY BUGFIX: A malformed login request could result in an email being
sent that contained the password given in that login request. If a browser
were modified to send suitably malformed login requests, it could expose
passwords sent by that browser.
BUGFIX 1869: Calpendo resource selector - location select all did not select
unopened child items
BUGFIX 1867: colour group pop-up showed only one colour in Exprodo SDM
BUGFIX: Infinite loop on page #ba&type=X&id=n&action=view if biskit X#n does
not exist
BUGFIX: Exception on create a resource that you have no EXISTS permission for
BUGFIX: Viewing templates calendar gives exception if the resource you are
viewing has its permissions modified to deny you EXISTS permission while you
are logged in.
BUGFIX: SDM calendar displayed subject's primary key in event title instead of
the name
BUGFIX: SDM calendar not updating the displayed month on date change
BUGFIX: Display a BiskitTreeEditor, use the built-in search to download a
report for a particular biskit type, and click away to a different biskit
type and then when you click back to the original biskit type, you get
the report downloaded again.
BUGFIX: Formulae containing a reference to static property names could
complain about not being able to find the static property's column.
BUGFIX: Export to Excel stored numbers as strings instead of numeric values
BUGFIX: Export a report and null values for a MappedInt or MappedString were
written as an empty cell instead of writing the MappedInt or MappedString's
configured null value label.
BUGFIX: Automatic emails inserted a number when there was a reference to a
MappedInt property instead of the value's text label.
BUGFIX: Rule editor's ApplyTo->Project->Project Group could hide the details
of which Project Groups are included when in read mode (but not when editing
the rule)
BUGFIX: Import a file for a master biskit with multiple columns representing
a property on each of the slaves, and if any line had an empty column for
all of the slave properties, then the import would fail.
BUGFIX: A biskit with a dynamic one-to-many property could not be deleted if
it had anything in the one-to-many property.
BUGFIX: Manual emails were refused by some email systems because they forged
the "from" address to look like it came from the user that sent the email.
Some email systems refuse such emails. It now sets the "from" address the
same as automatic emails and sets a new email header of "sender" to indicate
the user, as well as the reply-to header.
BUGFIX: Custom search pages showing a choice of multiple mapped ints or
multiple mapped strings or multiple string enum values would sometimes show
unnecessarily long description of the conditions
BUGFIX: Custom search pages mishandled MappedInt values that has an
underlying integer value of 0.
7.0.39 (2015-05-26)
- Add support for string properties that contain an RGB colour
- BUGFIX: Bookings couldn't be created under some circumstances
- BUGFIX: Colour picker did not reset to previous colour on pressing cancel
7.0.40 (August 9th, 2015)
New features added:
- Add support for iCal bookings feed to send bookings to other calendar
applications (eg Google Calendar, iCal, Outlook, Android, iOS)
- This now supports caching the feed for better server performance
- It now defaults to "my bookings" for "current resource"
- Add support for modules. In the future, we will also support plugins.
Modules are parts of the system that are created by us and compiled in, but
can be turned on or off. Plugin-ins will be downloadable extras that you can
add. The add-on manager controls modules, and will later control plugins.
The add-on manager menu item is currently hidden from general use.
- You need an easter egg entry of "addons" in global preferences/appearance
to enable the add-on manager menu item
Upgrade custom search pages to support form-based custom search widgets
that appear in a panel down the left rather than a single-line at the top.
Add support for custom search page search term that checks for a range of
numeric values.
Add support for services, with example histopathology and radiological
assessment services.
- Add support for non-Booking formulaic properties in rule conditions
- Formulaic properties are calculated by the database.
- Booking rules apply before bookings are sent to the database.
- Therefore formulaic properties on bookings are not useful when running
a booking rule. The rule editor's conditions panels did refuse to
display all formulaic properties, but now will display formulaic
properties on other biskits. For example, formulaic properties on a
project.
- Add support for recording schema changes executed from bakery in db upgrade
- The easiest way to see this is to go to the add-on manager and click on
database upgrades. This is just a search for biskits of type
"DatabaseUpgrade".
- This records both updates done via the bakery in the regular way
with "update db schema", but also any SQL executed by using the custom
SQL tool that you see in the bakery when logging in as root.
- This should correctly record queries that work properly and queries that
fail, along with the mysql error.
- If you run some custom SQL in the bakery that only does queries, and
does not try to modify anything, then this does not get recorded in
the database upgrades table. It does, however, still get recorded in the
system events table.
Add support for setting automatic email reply-to address in global references
Add new UserGroup.self property
Add user setting for calendar start/finish hour and day of week
Add button to hide/show the nav/filter panel on all calendars
Add CSS classes to allow custom CSS to make menu/navbar fixed position. The
CSS required is:
.exprodo-navbar
{
z-index:1;
background-color:white;
position: fixed;
}
.exprodo-main-content
{
margin-top:26px;
}
Changes:
Add Layout Editor to all admin menus that don't already have it
Add report description to emailed reports (reduce apparent spamminess)
Add support for login names with more exotic characters, such as @!:/()
Add support for automatically removing cookies on logout for External auth
Allow TotalTimeBooked rule message to include time allowed as well as time
used.
Multiple checkbox selection of biskits now indents the +/- buttons to line up
with the top-level text. Eg selecting the location in a "Choose resources"
popup in Calpendo, and a custom search page with an item that looks for
multiple possible values for a biskit-valued property.
Two people can no longer reload the database configuration at the same time.
If this is already in progress for somebody, the second person will
immediately get an error message.
Removed the global preferences property "send old search usage home". Support
for old-style searches was removed quite some time ago, so this preferences
setting no longer serves any purpose.
Issue 1876: Added "procedure" as a reserved word so you can't use it as a
name in the bakery.
Bug fixes:
- SECURITY BUGFIX: Group reports could show some data that should be hidden
- If you have an EXISTS permission on a biskit that relies on a top-level
property on that biskit, then that property might not be fetched from the
database when building the report. It would therefore not be available
when checking who can see the data, and so the wrong decision could be
made.
- For example, deny EXISTS to all reports whose name starts with X.
- A group report showing a count of all reports would include reports whose
name started X in the count. However, clicking on the count to see a
list of reports would exclude the reports whose name started with X.
Memory leak on unloading the app. This only affects customers that host
Exprodo/Calpendo on their own server and upgrade to new versions by unloading
the old version and then loading the new one instead of restarting tomcat.
Some boolean editors now use the configured text from the bakery for
true/false where it wasn't used before.
BUGFIX: List search with a set property having empty set gave exception
- BUGFIX: Formula on subtype sharing super's table gave validation error
- FormulaParser would ask the BiskitDef for its ID column name. The problem
was that child types should sometimes return the ID column from their
super-type instead, if sharing a table. So this commit adds a method
BiskitDef.getEffectiveIdColumnName()
BUGFIX: SingleCondition.Relation.toString() could sometimes be null
BUGFIX: minuteOfDay calculation had no brackets & formulae gave odd values
BUGFIX: Fixed incompatibility with running server on Java 8
- BUGFIX: BiskitCRUController required UPDATE permission for a CREATE
- The save button was enabled/disabled according to whether you have UPDATE
permission, but this is only right when it really is an update. When
doing a create, it should check CREATE permission.
BUGFIX: Matches/starts-with/ends-with/contains conditions should not enforce
min/max length set in the bakery. Eg if a string property has a minimum
length of 10, you should still be able to ask whether it starts with "X",
and not be forced to enter a string of length 10.
- BUGFIX: Limit HeightLimitedScrollPanel's margin-right:20px to drop-downs
- most drop-downs are limited in height by wrapping them in a scroll panel
that kicks in when the height gets too large. This used to always add a
20px margin on the right to make space for the scrollbar. This is now
only shown in drop-downs because the margin looked wrong in the new
custom search pages when using a multi-biskit property selector. It
should mean everything still works okay, but it's possible things will
look wrong in some places. If it goes wrong, it will only be when there
are enough items displayed to make the scroll bars appear.
- BUGFIX: Some report pages show "Unknown value" as the report type
- Go to "Types and Groups Editor"
- Click on "User Group" (not the (+) next to it, if there is one)
- Click the > button to show the full search options
- The report type displays as "Unknown value"
- BUGFIX: Group report rolling up dateRange.start.date incorrectly
- Build a booking report showing only dateRange.start.date for a single day
with multiple bookings, and the report shows multiple groups for the same
date instead of rolling them all into one group. It was keeping the time
information with the date, and so it thought they were all different.
But then it got formatter to a date and so they looked the same.
- BUGFIX: Resource selection pop-up can give exception when move resources
- In particular, with some resources hidden by the filter, moving
resources up and down gives an exception.
- BUGFIX: search Booking with condition project.users contains member X fails
- searching for Projects with a condition users contains member X worked ok
BUGFIX Issue 1877: Random biskit set bad string value for email/URL/colour
props. Users could see this on looking at a preview in the layout editor.
BUGFIX: Add new child location while edit parent location lost the child
BUGFIX: save a bookings report with custom dates, edit and save it again and
the custom dates are reset, and the chosen date appear in the conditions...
popup instead.
BUGFIX: checked editing failed with auto creator/updator (hibernate bug)
BUGFIX: Could not edit/save User if password hidden by permissions
Dynamic Notes Changes in 7.0.40
- Disable dynamic notes date/category by default for new layout tabs
- Be more liberal in what is acceptable for a dynamic note biskit.
In particular, a note must have a Biskit to-one property referencing the
owner. When adding dynamic notes to a particular biskit type X, you should
accept a note biskit if it has a to-one property that references any
super-type of X. That's because if it accepts any super-type of X, then it
will also accept X, and dynamic notes on an X will set the owner to X.
7.0.41 (August 11th, 2015)
- BUGFIX: Clicking on a user in a list of users could generate server exception
(that user didn't see)
- BUGFIX: A list report would hide properties based on the bakery "visible"
and "visible in biskit list" attributes, and a detail would do base it on
both "visible" and "visible in biskit detail". These have been simplified so
that a list view only pays attention to "visible in biskit list" and a detail
view only pays attention to "visible in biskit detail"
- BUGFIX: Adding a file to a property that stored a set of attachments failed
(this bug was introduced in 7.0.38)
7.0.42 (August 12th 2015)
- Text search boxes in custom search pages can now use "contains" and "matches"
as well as "equals" checks
- Custom search boxes can now have user-defined labels
- BUGFIX: Some custom search pages went wrong in 7.0.40
- BUGFIX: Date properties displayed in a biskit name also displayed the time
- BUGFIX: Run report from report manager could run it twice & show wrong report
7.0.43 (August 14th, 2015)
Add support for negative quota to mean no limit in Total Time Booked Rule
Add support for negative quota to mean no limit in Number Of Bookings Rule
- Disable rule editor formulaic Booking props except projectResourceSettings
- projectResourceSettings is provided in Java, not in the database, and so
it is available for use.
- Also, some rule tabs were not stopping formulaic properties from being
used, even though they should because they are not available (because
they are generated by the database and so are not available until after
the booking has been saved, but rules run before the save).
- Make conditions faster: apply CONTAINS and MATCHES tests last
- If you have a report with conditions in the slow order (contains
or matches first, then something else), then conditions will be run
in the fast order and the conditions will display in the slow order.
On saving the report, and then refresh your browser to pick up the
new version of the report, you will see the conditions order changed
to put the slow ones last.
BUGFIX: Click away from report & back to it, report sorting/context lost
BUGFIX: Exception thrown handling last repeat of a booking if iCal is in use
BUGFIX: Custom search page can throw exception with bad search descriptor
Speed things up by aggregating GetBiskit requests where possible
Speed things up by aggregating requests for biskit names where possible
7.0.44 (August 18th, 2015)
- BUGFIX: Exception on pressing the Create button when trying to create a user
- Add support for public resources (eg store images to be accessed via CSS)
- All you have to do is to create an instance of "PublicResource", with an
attachment, and make sure user nobody has read and exists on both the
PublicResource and the Attachment
- Then, the URL slug "/downloads?type=public&name=FOO" will yield the
attachment, where you must replace FOO with the name given to the public
resource (which must be unique)
- Eg "https://thing.calpendo.com/downloads/type=public&name=FOO"
7.0.45 (September 4th, 2015)
New features added:
- Extend iCal support to allow for choice of which of your bookings to include
depending on the booking creator ("booker"), booking owner, project owner
and project users.
- Add support for checked-editing pop-up to show properties by layout tab
- When there are many tabs and properties, this makes checked-editing
much more user friendly.
- This applies when you have a list and use the check boxes to select the
items you want to change, and then press the Edit button with an arrow
pointing to the check boxes.
- Add support for emails to be sent with no "TO" addresses
- Previously, if there was no "TO" address, it would not send the email
regardless of the presence of CC/BCC addresses.
- It will now send an email as long as there is something in any of
TO, CC or BCC
- Add support for rich text dynamic notes if note StringPropertyType is HTML
- You can configure "notes" that you can append to most data types
- We now support such notes to use rich text.
- To enable this, the property storing the note string must be marked as
being of type HTML in the bakery.
- Add support for retaining the selected tab on switching biskit or edit/save
- If you view or edit some data that uses a layout with many nested tabs,
it would not display the same tab as you switched from viewing different
biskits or on pressing the Edit or Save button.
- It will now keep the same tab selected.
- Add support for changing the resource groups a resource is a member of from
the resource editor.
- Add support for adding/removing many users, projects or resources at once
to/from groups
- For example, from a list of users, you can check many users and then
click the new "Add to group" or "Remove from group" drop-down button to
add or remove the checked users from a selected user group.
- The same applies to a list of projects and project groups, and a list of
resources and resource groups.
Changes
- The menu now collapses into a "hamburger" when page width is small (eg on a
phone)
Bug fixes:
- BUGFIX: Could not download any attachment if the attachment property was
defined on one type of biskit, and then inherited by a sub-type of that
biskit.
- BUGFIX: SearchResultsRule applied maximum number of results allowed wrongly
- When you set a MAXIMUM of x, it actually applied a MINIMUM of x.
- BUGFIX: Calpendo Lite miscounted rules used when updating a rule
- It only allowed 3 rules instead of 4
- BUGFIX: Database dump sometimes produced files with over long inserts
- It was meant to split insert statements every 1000 rows or every
1,000,000 characters (whichever was first). But only the 1000 row limit
worked. So when dumping a table with rows containing large data, it
could produce a dump file that required a large setting of
MySQL's max_allowed_packet parameter.
- BUGFIX: Custom search pages unable to load saved conditions (7.0.43 bug)
- BUGFIX: Rendering an AuditLog outside the history page produced exception
- This applies when looking at an AuditLog entry for any type with custom
properties
- It also applied when looking at an AuditLog entry for a user, even
without custom properties
- The Search->History page was not affected by this bug
- BUGFIX: bakery complained when non-int prop has int type of UNCONSTRAINED
- BUGFIX: bakery complained when non-string prop has UNCONSTRAINED string type
- BUGFIX: Bakery did not complain if non-double prop had double type set
- BUGFIX: Edit a layout, and it might forget you just asked to enable notes
- If you had a new tab (never saved to database), and configured it with
dynamic notes, then clicked to another tab and back to the same tab,
then it now showed the first tab with disabled notes.
- BUGFIX: properties hidden by layout cause exception on create new biskit
- BUGFIX: Unexpected condition in saved custom BiskitTreeEditor page report
- From any such page, click on a biskit type. Create a report with a single
condition "value of foo = bar" and save it. Load the report and it then
showed with a top-level identity condition followed by "value of foo = bar"
- BUGFIX: Check a property in group report should not auto-add child props
- If you show a group report, then you can use the green tick button to
add multiple columns at once.
- Some items have a checkbox and can also be opened up to display "child"
properties.
- Previously, if you clicked the checkbox on an item you haddn't opened
yet, then all children would be selected as well. This was not the
behaviour most people would expect.
- It will now not add the children as well unless you use the button to
select all properties.
- BUGFIX: Dragging rules to reorder them sometimes failed
- BUGFIX: Group report shows null mapped int value as blank
- Mapped int has a configurable null value label which is now used instead
7.0.46 (September 10th, 2015)
Changes:
- Added a property to PublicResource to show what the public URL is.
PublicResource is useful if you want to upload a file that anybody should be
able to download, even if not logged in.
- Layout editor now explains why it thinks no suitable note types exist
Bug fixes:
- BUGFIX: Exception following reloading biskit definitions in some
configurations (depending on how biskits are assigned names)
- BUGFIX: Sometimes get exception when display a tree editor that includes
a type of biskit with attachment properties
- BUGFIX: Database dump did not work with attachments (dump can't be loaded)
- BUGFIX: Exception on render null value in group report (7.0.45 regression)
- BUGFIX: Layout multi column table NPE render empty cell (7.0.40 regression)
- BUGFIX: Multi column layout exception formulaic cells (7.0.40 regression)
- BUGFIX: Some date-entry widgets were not displaying dates in user-specified
date format
- BUGFIX: A list of bookings ignored user-specified format for the date
7.0.47 (September 12, 2015)
Changes:
- Changed DatabaseDump so it doesn't consume so much memory
- Upgrade BCrypt from 0.3m to 0.4
- This is the library used to hash passwords.
- The upgrade fixes a potential bug in the library. However, the way we
use the library means we were not susceptible to the bug.
Bug Fixes:
- BUGFIX: Dynamic note waterfall finds nothing with a MappedInt for category
- When you configure dynamic notes in the layout editor, and use a category
that is a mapped integer, the associated waterfall would not find any
of the notes.
- BUGFIX: Multi-column tables created via the layout editor mishandled empty
cells (7.0.40 regression)
7.0.48 (September 27, 2015)
New Features
- Add support for a Biskit Tree Viewer page. This provides a way to display
a number of HTML pages with a navigation panel for users to choose which
page to view. To use this as designed, you would:
- Create a custom biskit and give it a name property and a "content"
property. The content property should be String valued, of subtype HTML.
- Use existing facilities for entering instances of this new type, where
you provide a name and rich text for the content associated with that
name.
- Use the menu editor to add a custom page of type Biskit Tree Viewer,
and specify the type of biskit and which property contains the HTML to
display.
- Users then see content that appears to be a navigation pane on the left
with the associated content on the right.
- Add support to the rich text editor to add links to attachments & public
resources. This allows you to embed hyperlinks to files within any String
property that is marked in the bakery as containing HTML.
- Add support to history page for creating a copy of old versions of biskits
- When you now click on a particular version in the history of a biskit,
there's a "Create Copy" button. That will offer you the chance to create
a new biskit using the old values.
- Note that some properties (those that are a set or list) are not recorded
in the audit log, and so will not be created for you in the new copy.
- Add support to rich text editor for linking to a menu item
- This means that you can highlight some text, then click the new "Menu"
drop-down button on the rich text toolbar and select a menu item.
- The highlighted text will then become a hyperlink that will run the
same thing as the selected menu item.
- NOTE: You must choose a menu item that will be on the menu of the person
who clicks on the link.
Changes:
- Add support to the booking popup for displaying hierarchical resource types
- This can be enabled by adding two properties to ResourceType. One of type
Biskit/many-to-one to store a reference to a "parent" ResourceType, and
another of type Set/one-to-many to store a reference to child
resource types.
- This then lets you create a hierarchy of resource types so you can
classify instruments. For example, you may create a resource type of
"microscope", with subtypes "Electron Microscope" and "Optical Microscope",
with subtypes of Electron Microscope of "SEM" and "TEM". etc.W
Make emailed reports sent as an attachment by default (was given inline)
Show full audit log detail when click on entry in history page
- Update displayed breadcrumb on any page change event (ie on URL change)
- The breadcrumb is the text in the top-right corner of the page that
shows which page you are on
- Previously, it was only on selecting a new menu item that the breadcrumb
changed.
- The biggest impact of this is that when you click from one biskit to
another, the breadcrumb can now change.
- Record which pages user has used for exception reports & event log
- The last few application pages visited are now remembered by the web
browser.
- Whenever the client detects an error, the event that is logged in the
database now includes the record of which pages were visited recently.
- If your global preferences allow for error reports to be emailed back to
Exprodo Software, we will now receive this record that tells us what was
being done when the error occurred.
- This will make it easier for us to fix bugs by automatically giving us
better information about the context of an error.
- The information we receive will be:
- The contents of your browser's address bar after the "#"
- The label of the menu item for your current page (the breadcrumb)
- The name of the part of the program that generated the page
- If anybody has concerns over privacy, please let us know. But you can
prevent this information being sent to us by disabling the automtatic
exception reports in global preferences. Also, if your browser does not
suffer from an unexpected error, then this new information remains within
your browser and is not sent anywhere.
Make history page default to asking for history for the last 8 hours
- Changed support for multiple oneToMany props on a biskit of the same child type
You could already set up biskits like this. Have a biskit C ("child")
which has multiple biskit properties referencing some other biskit
P ("parent"). Then you think you might like to make it easy for somebody
looking at a P to be able to see which C reference it. So you make the
properties on C of type manyToOne, and add oneToMany properties on P.
The problem is that oneToMany properties are normally cascaded for
deletion, so editing P such that you remove a child C from one of its
oneToMany properties would mean the C would be deleted.
So, the bakery now lets you specify a ReferenceDeletionOption on
oneToMany properties. This should be CASCADE for the old behaviour,
and SET_NULL to indicate the parent does not own the child.
Also, the UI has been modified so that there is no mechanism in the UI
for adding a new C or removing an old C from a oneToMany property
on P if that property has its ReferenceDeletionOption set to SET_NULL.
The BiskitDef validation done by the bakery now checks for multiple
oneToMany properties with the same child type. It then complains if
there are many such properties and any of them don't their
ReferenceDeletionOption set to SET_NULL
- Display an error message on save while an attachment upload is in progress
- Previously, if an upload was in progress when you pressed "Save", then
the uploaded file would get lost.
- You now see an error instead.
Any custom search page that lets you select from a "bit set" property (such
as user roles) now lets you choose whether you want items that have any, all,
none or not all of the selected items.
- Lots of improvements to the charting facility.
- This is currently usable, but incomplete and undocumented.
- If you want to know about charts, please ask us. They are currently
hidden from general use, but can easily be enabled.
Change browser address when click on permission or automatic email
Security Bug Fixes:
- SECURITY BUGFIX: When you have set permissions to hide the existence of
some data, you would still be able to discover that it existed if you knew
how to look.
- You could not use this to read extra properties. For example, if you add
a custom property to a Booking and deny read knowledge to that property,
then that could not be circumvented.
- But if you decided to hide the extistence of a resource from some or
or users, they would be able to discover that such a resource existed.
- Further details on the nature of this bug are available on
request, but we will not publish it now for fear of making it worse for
those who are still on an older version of Calpendo.
- SECURITY BUGFIX: You can infer info about hidden properties
- Suppose there is a biskit type Foo with a property bar, and Foo.bar is a
property hidden from you. So you can't see the value of bar on any Foo.
- However, while you can't see the value of bar on any Foo, it is possible
to infer some information about it. With persistence and by running a
large number of reports, you could eventually discover the value of such
a property.
- Further details on the nature of this bug are available on
request, but we will not publish it now for fear of making it worse for
those who are still on an older version of Calpendo.
- SECURITY BUGFIX: Database dump did not check READ or EXISTS permission
- Dumping a copy of the database has always checked that you had
"Dump Database" permission. However, even if you have "Dump Database"
permission, it doesn't seem right to allow you to dump the database if
there are some data you cannot READ or some data you cannot know EXISTS.
- Consequently, you will no longer be able to dump the database if you
do not have "Dump Database" permission plus unfettered READ and EXISTS
on all biskit types.
Bug Fixes:
- BUGFIX: Adding parent/children properties to ResourceType gives exception
- BUGFIX: Emailed reports describe report conditions without names of things
- BUGFIX: Time not parsed properly when hour less than 10 (so widget showed
red for error)
- BUGFIX: Identity conditions rendered badly while editing them
- BUGFIX: Report manager could not handle conditions from custom search page
- BUGFIX: Permissions property path box showing in red when no allowed values
exist
- BUGFIX: Go back to a BiskitTreeEditor page can give exception
- If you have a biskit that has a sort order that is based on an integer,
and you then rerender a BiskitTreeEditor page, it will sort the
displayed items. The sorting can fail with an exception.
- BUGFIX Preview in layout editor gives ClassCastException on switching to
read-only mode when looking at a layout for Booking.
- BUGFIX: Save a report that you then have no EXISTS perm for gave exception
- BUGFIX: Exception in the history page on viewing details of a modified Report
- BUGFIX: If search in history page, leave page and return, it resets search
- BUGFIX: Report manager lets you add a "count of" column to list report
- BUGFIX: BiskitTreeEditor ignored the defined sort order
7.0.49 (September 28, 2015)
- BUGFIX: Custom search with mapped int selection did not work
- BUGFIX: Sometimes saw more scrollbars than desirable on custom search page
7.0.50 (October 17th, 2015)
New Features
Changes
The global preference for the initial page to display on loading the app
is now validated so you get a warning on entering something unrecognised.
Speed up Calpendo's rule validator by sending less data to the server
- Warn on edit a permission referencing a biskit you have no EXISTS perm for
where "bar" is a biskit, but another permission denies you the ability
to know "bar" exists, then editing this permission will not produce the
effect you might expect.
Permissions are allowed to ignore EXISTS permission so that they can
still be seen to be correct. So the above condition would actually
display as something like:
value of foo equals Foo-36
since you can't know bar exists, and permission cleaning allows things
through that you can't know exists, and treats lack of EXISTS like lack
of READ.
But if you edit the permission, the values of Foo you can select cannot
include bar, and so just pressing Edit and then Save will mean the
condition will change.
Hence, this change now gives a warning message so you know something bad
might happen.
The database dump page now has a new option for a simple choice of which
tables to dump.
Multiple optimisations have been made which reduce server memory and CPU usage
Whenever an automatic email is not sent because a user has opted out of
automatic emails, a system event is logged.
Opting out of automatic emails now means you opt out of reminder emails too
A system event is now logged whenever an automatic email or reminder is not
sent to a user due to them having opted out of automatic emails.
Require only visibleInBiskitDetail for booking popup to show repeat
Security bug fixes
- The third party library we use for the API had been patched.
- specially crafted requests could access files on the server that
would otherwise not be accessible.
- Other resources on the server's local area network that should not
be visible to the outside network could be made accessible.
- There is the potential to be able to scan for open ports so that an
attacker may be able to find other (unrelated) vulnerabilities.
Bug fixes
- BUGFIX: Custom search pages offered "null" as an option when it shouldn't
- Some types of property would generate a search item that checked
the "null allowed" attribute whereas it now checks "required".
- This affects mapped int, mapped string, and multiple biskit selection
filters.
- BUGFIX: Global preference for initial page failed when using parameters
- Eg a page like #perms would be okay, but #perms&id=22 would not be
- BUGFIX: Custom property referencing a user from another user caused an
exception sending automatic email on registering a new user when sending
the email to the user referenced from the newly registered user.
- BUGFIX: Setting the sort order property on a BiskitDef to a biskit-valued
property did not sort at all. Now it sorts by the name of the biskit stored
in the chosen property.
- BUGFIX: iCal feed failed on resources with no EXISTS permission
- BUGFIX: Clicking on item in history for many biskit types gave exception
- BUGFIX: (MySQL 5.1) lock timeout exception if define new properties on User
- This problem did not occur in MySQL 5.5 and later.
- BUGFIX: Database downgrade forgot the patch number and script number
- BUGFIX: Rules see wrong booking status on create "best possible" booking
- eg create a simple rule that stops approved bookings
- any booking that is automatically approved would not be stopped by the
rule
- BUGFIX: Exception validating a PropertyDef without a type set
- BUGFIX: Exception editing double values with units and bad unit spec
- BUGFIX: Occasional exception in telling server you're editing something
- BUGFIX: Exception in TimeIntervalBox.setValue(...) given value without units
- BUGFIX: Exception in ColumnDefsPanel resetName()
- BUGFIX: Updating user group can sometimes give exception
- BUGFIX: BiskitTree exception on update/remove a null biskit
- BUGFIX: NPE in BiskitButtonBarManager if no m_biskitDefs set
- BUGFIX: Checked-editing on biskit with layout having empty cells gives NPE
- BUGFIX I1895: Saving time slots on resource can give exception
- BUGFIX I1896: Meta-property EXISTS permission conditions confuse show refs
- Suppose you have a biskit (eg Booking) with an EXISTS permission that has
a meta-property based on the day of the week.
- Then, from another biskit (eg Project) that is referenced by the first,
ask for references. In this example, you would click on a project and
press the "References" button.
- There would then be a server exception and the client would display an
error.
- BUGFIX: Global preferences for initial page had no effect (apart from
Exprodo DB)
- BUGFIX I1897: Change resource name to same as another resource gave bad
error msg
- BUGFIX: StringEditor.setValue(null) gave exception
- BUGFIX I1885: Add first column in report manager shows extraneous red box
- BUGFIX: On logout, reset to configured intial page, not hard-coded page
7.0.51 (October 19th, 2015)
- BUGFIX: StringEditor exception when given null property (7.0.50 bug)
7.0.52 (October 21st, 2015)
Changes
- Send client breadcrumbs to server on any client-initiated server exception
- Whenever the client makes a call that fails, the client now sends info
to the server to say what it was doing.
- This is stored in system events to help with bug diagnosis.
Bug fixes
BUGFIX: BiskitFactoryManager possible ClassCastException
BUGFIX: radiological assessment module's downgrade script had a bug
- BUGFIX: Attachments & public resources unavailable immediately after boot
- The download servlet wasn't started by default in all apps when tomcat
booted. Where a public resource is used for the icon on the login page,
this meant the image would fail to load in the browser the first time
you tried to view the login page.
BUGFIX: Waterfall handler null pointer exception with bad layout config
BUGFIX: Notes not completely disabled if user asks for notes to be disabled
- BUGFIX: Condition memberOf test mishandles shallow user groups
A rule with a does-not-apply-to condition that says
"meta-property user member of user group X"
will always say TRUE, meaning the rule will never apply.
- BUGFIX: MutableValueDTO.get(...) rebuilds biskit without marking as shallow
- This means the rule validator would send its copy of a rule's conditions
in a bad state that sometimes affected the result the rule validator
would report.
BUGFIX: Network copy of ServiceProvider was not rebuilding its children
7.0.53 (October 30th, 2015)
Changes
Also display users whose password must be reset in Admin-->User Search
By default, the user search page used to show those users whose status was
normal or requested. Anybody that has to change their password when they
next log in isn't shown by default, and this was confusing. Now they are
shown by default.
You can always use the "Status" button in the user search page to change
the way the user list is filtered by user status.
Bug fixes
BUGFIX I1901: Actual usage recorder & calendar behave badly in different timezone
If the user is in a timezone ahead of the server's timezone, then the
session recorder's "Start Session" button would complain about being in
the future.
If behind the server's timezone, then the session would be recorded at
the wrong time.
Everything should be in the server's timezone, regardless of the user's
timezone.
Also, currently active sessions would show incorrectly on the calendar
because the browser would modify the finish time to be "now", but in the
wrong timezone.
BUGFIX: Password mismatch records the login attempt msg as "too many users"
BUGFIX I1898: Version property in multi-column layout table stops edit/save
When any automated property is in a multi-column table, and there are
non-automated properties in the table as well, then doing a save will not
put the rendered version of the property into the value of the biskit
you send to the server.
For version properties, this is a problem because it means the server
thinks you were editing version number zero, and so would stop you from
saving it.
BUGFIX I1887: Go back to rule editor/auto method editor and forgets status
When you edit or view a rule or authentication method, go to another page,
and then come back, it rerenders with no item shown.
BUGFIX I1903: Rule/Auth method with empty name is not selectable in editor
This is true where "empty" means length zero or having no non-space chars
7.0.54 (November 20th, 2015)
Bug Fixes
- BUGFIX: Prevent user from setting project status to null (it caused problems)
- BUGFIX: Handle the aftermath of setting project status to null (it stopped
Calpendo from loading)
7.0.55 (November 24th, 2015)
Bug Fixes
- BUGFIX: Lists of biskits can sometimes get confused about which columns to
display.
- This may only affect the Subject editor in Exprodo SDM and not Calpendo
7.0.56 (December 3rd, 2015)
Changes
- Some third party licence information has been added (follow the link from the
About page to see it) for gwt-log, gwt-dnd and Hibernate
- The current version of Java and operating system used on the server are now
displayed on the third party licence page as well.
- Crash reports emailed back to Exprodo Software now contain the version of
Java and the operating system in use. While we strongly recommend that such
crash reports remain enabled because they help enourmously in finding and
fixing bugs, they can be disabled in global preferences.
- Removed the mysql-connector-java-5.1.19.zip file from the distribution. This
hasn't been used in quite some time.
Bug Fixes
- BUGFIX: Properties for storing multiple attachments were not showing any of
the attachments
- BUGFIX: New attachments were clickable before save & downloaded wrong file
- BUGFIX: Editing a set of attachments showed an extraneous empty column
- Optimisation: File attachments accidentally loaded into memory when they
should not be, causing server to use more memory and be slower than it ought
to. Attachments now have only their metadata in their table, and a new
secondary table is used to store the underlying content, split across smaller
chunks.
- Optimisation: Reduced server memory usage by removing unnecessary creation
of some objects.
7.0.57 (December 18th, 2015)
Changes
- Show hyperlinks in system event msg when attachments are garbage collected
- When a biskit is modified so a previously linked attachment is no longer
referenced by the biskit, then that attachment becomes eligible for
garbage collection.
The attachment garbage collector says what garbage it has found, and
which biskit the attachments it deletes used to belong to.
The system event log now include a hyperlink to the original owning biskit
instead of merely displaying its ID. This means it's now easy to see an
attachment garbage collection in the system event and click straight
through to the biskit whose old attachment has been garbage collected.
Bug Fixes
- BUGFIX: Attachments could not be garbage collected
- After the change in 7.0.56 that moves the actual data for
attachments into a separate table, with the metadata remaining
in the main table, attachments could no longer be deleted.
7.0.58 (January 18th 2016)
Changes
- When defining a mapped integer or mapped string, you were not prevented from
creating two items with the same underlying value or the same label.
Bug Fixes
- BUGFIX: Calculation of week number was incorrect
- Calpendo showed the week beginning Monday 28th December 2015 as week
53 or sometimes as week 1 depending on what you clicked to get there.
The following week, beginning Monday 4th January 2016 was always shown
as week 2.
- Clearly, the week number varying depending on how you got there was
wrong.
- Moreover, according to the ISO definition of week numbers, the week
beginning Monday 4th January 2016 should be week number 1, and not
week number 2 as reported.
- According to https://en.wikipedia.org/wiki/ISO_week_date#First_week,
the ISO first week of the year is defined as the week with the year's
first Thursday in it. That was not how Calpendo calculated the week
number.
- An added complication is that the ISO week has Monday as its first
day, and you may configure your calendar to display any day of the
week as the first day. So Calpendo has been changed so that the week
number is displays is defined as the ISO week number that the Thursday
in the same displayed week belongs to.
- For example, January 1st 2015 was a Thursday. That means ISO week number
1 in 2015 was from Monday 29th December to Sunday 4th January. If you
configure your Calpendo with Monday as the first day of the week, then
the week numbers you see will be exactly according to the ISO definition.
If you configure your first day of the week to be Sunday, then Calpendo
will display a week from Sunday 4th January to Saturday 10th January.
Sunday 4th January 2015 belongs to ISO week 1, while Monday 5th to
Saturday 10th belong to ISO week 2. In this case, the displayed week
contains Thursday 8th January which is in ISO week 2, so Calpendo
displays the whole week as week number 2.
BUGFIX: Calpendo's Duration rule had rounding errors when given a number
of hours that was not a whole number.
BUGFIX: When using a custom LayoutEditor-defined layout with nested tabs,
it was possible for some tabs not to be displayed when they should be.
- BUGFIX: New user registration page did not validate email addresses properly
- The new user registration page has been brought into line with the
standard way we check email addresses are legal in other parts of the
system.
- That means that:
- we check the hostname part of the email address contains
legal characters, whereas before it only checked some characters.
- we no longer check the content of the part before the @ symbol
because some people can (and apparently do) have email addresses
with unusual characters such as the # symbol.
BUGFIX: Calpendo calendars used to show an empty square when no resources
were selected, along with a button to change the resource selection. The
empty square no longer appears, so it looks much neater.
7.0.59 (January 21st 2016)
Changes
- The user requests and booking requests pages now display a list of requests
using whichever properties are marked as being visible in a biskit list.
Previously, the choice of columns to display was fixed.
Bug Fixes
BUGFIX: Scheduled reports are run with no user instead of special user
"nobody". This meant that if you use permissions to hide some data from
some people, you had no way of making it available in a scheduled report.
BUGFIX: Pressing save in a user requests, booking requests or project
requests page without changing the status would re-render the list of
requests, but the changed item would be rendered with values in the wrong
columns.
BUGFIX: Changing a user's password from the user requests page would render
the user's password in such a way that you couldn't change it again (without
a refresh)
7.0.60 (February 2nd 2016, partial release)
Changes
- Add support for a new flavour of external authentication method that will
avoid the use of an HTML iframe. This improves compatibility with some
single sign on systems. To use it, set the "display type" on an external
authentication method to "Redirect".
Bug Fixes
- BUGFIX: Manual and automatic emails should now send successfully to all
valid email addresses when there is an invalid address
- Previously, if there was one invalid address, it would prevent an email
from being sent out. So not even those with a valid email address would
receive an email.
- When this happens, a system event is recorded so that an admin can see
what happened.
7.0.61 (March 13th, 2016)
Changes
The Biskit Tree Viewer page now supports showing pages arranged in a
hierarchical fashion. Just set up the biskits that it displays as a hierarchy,
with a many-to-one Biskit property to reference the parent, and a
one-to-many set property to reference the children. See the documentation for
an example.
- Repeat bookings with a single instance are converted to non-repeating
- When a repeat booking is modified, and you ask for the change to apply to
just the one booking or that one booking and all later items, then the
repeat will be split into 1, 2 or 3 bookings.
- The first will be for those bookings before the one you asked to be
changed.
- The second will be the one you asked to be changed, and was always a
non-repeat booking.
- The third will be the remaining repeat bookings after the one you asked
to be changed.
- Now, if the repeat bookings generated from the first and third items above
have only a single repeating instance, then it is automatically converted
to a non-repeat booking.
- Added extra CSS class names to help custom styling
- For a biskit type "Foo", this provides CSS class names like:
- exprodo-Foo
- exprodo-Foo-create
- exprodo-Foo-update
- exprodo-Foo-view
- The Booking popup and other calendar-based popups all have extra CSS too:
- All the above have been added, so "exprodo-Booking-create"
- Also, class names specific to each popup. For example:
- calpendo-BookingPopup-create
- calpendo-BookingPopup-update
- calpendo-BookingPopup-view
Bug Fixes
Upload to a set of attachments failed on a slave biskit
Calendar exception when an all-day booking's description hidden by permissions
- Setting a time interval with a negative value was very flaky
- the editor would do counter-intuitive things as you changed the value
- You could see this in Exprodo SDM setting up time relationships between
events
- Custom report menu items could stop users from being able to log in
- In Calpendo, this happened if you created a report from a
Calpendo-specific page, such as the bookings search page, and then saved
that report and added a custom menu item that displays the result of that
report.
- Reports build from the generic search->search page did not cause this
problem.
Exception on saving a BiskitDef in the Bakery if you have a set property
containing biskits, but you didn't specify what type of Biskits it stored.
Exception in a BiskitTreeEditor if you clicked on a biskit that happened to
have already been deleted from the database. For example, the Types & Groups
page showed this problem.
- Only the first instance of repeat bookings were counted once for Total Time
Booked rules, Double Booking rules and Interval rules.
- For example, if you created a daily repeat booking, then the above rules
would ignore the instances of the repeat booking apart from the first.
- This problem applies when creating or updating a repeat booking. If you
create or update a booking, then any pre-existing repeat bookings were
handled correctly.
- When updating a repeat booking, rules would not pay attention to your choice
of whether the change should apply to this item, all items or this and later
items. It always assumed "all items" were affected.
- Suppose you change the duration of a repeat booking and ask for the change
to affect only the one instance of the repeating sequence.
- When applying the rules, it worked as if the updated version applied to
all instances of the repeat rather than just the one you were changing.
- So, for example, a Total Time Booked rule would add up the time
incorrectly because it would assume your change applied to the whole
sequence even though you weren't necessarily changing the whole
sequence.
7.0.62 (April 8th, 2016)
Changes
- Allow rule validator to check rules for admin even if disabled in global
preferences.
- Previously, if rules were set as not applying to admins in global
preferences, then when running the rule validator, you had to remember
to set the "user to run the rule as" to a non-admin user.
- This change means that's no longer necessary.
- The output in the rule validator will now point out that rules are
disabled for admins and that it's running the rule as if rules were
enabled for admins.
- This change is intended to reduce a source of confusion.
- Prevent creation of dynamic properties with an illegal column name
- When creating new properties in the bakery, the "column name" field is
given a default value depending on the value of the property's name.
- It is always possible to change this to something of your own choosing.
- Previously, you could choose values that were not legal column names, but
this is now prevented.
- When editing a BiskitDef in the bakery, it would automatically change the
biskit's labels and primary key column name to something generated from the
biskit type. If you had previously customised these, then those customisations
would be lost merely by editing the BiskitDef and pressing save. These are
now only change when you manually change them or the biskit type.
7.0.63 (April 28th, 2016)
Bug Fixes
- BUGFIX: Add an Integer/TimeOfDay property to a biskit and when you try to
view or create biskits of that type, you get an exception.
- A work-around in previous versions for those biskits that are displayed
with a layout (configured by the layout manager page) is to assign the
property to a child tab.
- Assigning it to the top-level tab, leaving it unassigned, or having no
layout at all will generate the problem.
BUGFIX: New user registration was failing for some single-sign-on situations
- BUGFIX: Empty conditions were sometimes false
- Create conditions
- Set "None of the following apply"
- Remove all conditions
- The conditions then evaluated to false, when it should be true
BUGFIX: If Calpendo Project is defined to have a set of attachments, then
you couldn't create a project with more than one attachment in the set.
- BUGFIX: "Upload still in progress" erroneously reported after delete upload
- Create or edit a biskit with an attachment set, add some files to the
set, then click the red (x) to remove one or more and save the biskit.
- That would result in an error telling you that the upload is still in
progress.
- BUGFIX: Submit stays greyed out after save project with upload in progress
- If you have attachments on a project, and you try to save the project
while an attachment upload is in progress, then you (correctly) get an
error.
- However, that left the "Submit project request" button greyed out so there
was no way to submit another project without refreshing the browser.
BUGFIX: Referenced-by conditions were broken
SECURITY BUGFIX: is-ancestor-of and is-descendant-of could allow limited
leakage of information that was supposed to be hidden.
Changes
- Get Exprodo SDM calendar "Subject Status" filter text from SubjectStatus
BiskitDef
7.0.64 (May 4th, 2016)
Bug Fixes
- BUGFIX: Referencing a slave's property from formula on sibling slave fails
- BUGFIX: A Multi-column table at the top level of a layout causes a rendering
exception for a slave if you put the slave-to-master property in the table
7.0.65 (May 20th, 2016)
Bug Fixes
- BUGFIX: Exception on editing a repeat booking from a search page
- BUGFIX: If you ask for no history on dumping the database, you still got
some of the system event data
- BUGFIX: Cancelling an update of a repeat booking left the browser in bad state
- If you have a repeat booking and you try to modify it from the bookings
calendar, then it gives you a drop-down choice of whether you want to
update all repeat instances, just this one, or this and later. There's
also an option to cancel.
- If you press the cancel button, then the browser retains a copy of the
booking as it would have been if you had gone ahead with the change.
- The result is some unexpected behaviour.
7.0.66 (June 6th, 2016)
Changes
- Use the message given in DurationRuleRunner if there is one
- Display event time with seconds in the system events page
Bug Fixes
- BUGFIX: Permissions error handling user groups in some unusual circumstances
- BUGFIX: Database dump UI did not uncheck exprodo_event_properties on
choosing "Select tables"
- BUGFIX: DurationRule hid useful output in rule validator when it rejected booking
- BUGFIX: Dumping DB used excessive memory and could run out, crashing server
- BUGFIX: RepeatableHandler mixed up Create & Update in system event
- BUGFIX: Resize-drag broken if calendar set to start after than midnight
7.0.67 (June 13th, 2016)
Changes
- Upgrade automatic database upgrades system to support dry-running upgrades
- Add dry-run of those 8.0 upgrades that generate warnings
- This 7.0.67 will generate all the warnings that an 8.0 upgrade would
generate so that you can see what might need attention before or
immediately after an 8.0 upgrade.
- Warnings can be seen in the system events page
- These warnings are for information only in 7.0.x, and can be ignored
until an upgrade to 8.0 is performed.
- Removed the old column that used to store file attachments
- This will reduce database size, and database dump size.
- File attachments are now stored in a different way, and have been for
some time with no problems, so this is a safe disposal of unreferenced
data.
7.0.68 (July 18th, 2016)
Changes
- Prevent Total Time Booked Rule from having a maximum booking time bigger
than window size
- A typical total-time-booked-rule would prevent people from booking more
than 4 hours per week.
- In this case, it is clearly required that the time you specify for
"4 hours" must be less than that specified by "week".
- The rule has now been changed to enforce this.
- Add support for preventing boot in a database upgrade
- This is here primarily to provide a way to prevent the automatic downgrade
of a database when we know that the downgrade scripts are not capable of
cleanly downgrading a database.
Security Bug Fixes
- SECURITY BUGFIX: Save project and the response was not cleaned
- On saving a project, the browser gets sent a copy of the new version of
the project. However, the version sent back to the browser did not check
permissions to see what should be removed.
- This only applied specifically to saving Calpendo projects.
- SECURITY BUGFIX: Opening permissions for user nobody could cause data leak
The special user "nobody" is used to check permissions when emailing a
scheduled report. It's intended to mean:
This user has the least permissions possible, so if this
user can see data, then it's okay for it to leak out in an
email
If you protect some data and create a report that displays it, then you
can see that protected data in the web browser because the system knows
who you are and that you are allowed to see the protected data. If you
then arrange for that report to be regularly sent by email, that email
could go to anybody, so we filter the data by using user "nobody".
You then can't see your protected data in your emailed report. You may
then be tempted to allow user nobody to see this protected data. But this
is dangerous because it would allow a user who doesn't normally have
permission to see this data to be able to create a report that won't
show data in the web browser, but will show data when emailed.
As a protection against this, emailed reports now have their data
filtered twice. Once for the special user nobody, and again for the
report's owner. Now, information can only leak out in an email if both
user nobody can see it, and the report's owner can see it.
We still don't recommend opening permissions for user nobody to see
data that is otherwise hidden from some users, or trying to send an email
with such data, but this change should make it safer to do so.
Bug Fixes
- BUGFIX: Resource usage recorder not finding all bookings due to perms bug
- BUGFIX: A formula on a subtype of a subtype would fail
- BiskitDef.getEffectiveIdColumnName() delegated to the super type
incorrectly
- If it decided to delegate to the superdef, then it called
getIdColumnName() on the superdef instead of getEffectiveIdColumnName()
- BUGFIX: Shallow exception creating a dynamic biskit with manyToOne property
- BUGFIX: Resource.managerUserGroup members not able to book for all projects
on the relevant resource
- BUGFIX: Default values were not applied before rendering project when creating
a new project
- BUGFIX: MutableValue.toString misleadingly rendered null boolean as false
- BUGFIX: Layout editor drag-n-drop a tab dropped it in the wrong place
- There was an out-by-one error that applied only when dropping something
as a top-level tab because it forgot to take into account the
unassigned properties tab when converting the drop index to a tab index.
7.0.69 (July 22nd, 2016)
Changes
- Replace unfriendly error msg when view a shallow biskit in a biskit list
- This applies whenever you have a list of biskits and click on one of them,
and you have EXISTS permission on the biskit, so it is allowed to be in
a list like this, but you don't have READ permission on it, so you can't
see the value of its properties.
Bug Fixes
7.0.70 (July 26, 2016)
Changes
Bug Fixes
SECURITY BUGFIX: When checking whether something is referenced, it used to
ignore who was asking the question and check permissions as if there were no
user present. This meant it was possibly it could hint at the existence of
something you should not know about.
BUGFIX: A permission that hides a property could interfere with another
permission that relied on the value of that property to decide whether to
hide other things.
7.0.71 (August 17, 2016)
Changes
- Booking Popup now checks permissions as soon as any files are attached to
the booking
- If you add a custom property to booking to store file attachments, then
it never checked permissions until after the booking was sent to the
server.
- It now checks permissions immediately.
- This means a permission that says (for example) file attachments must
have a name ending ".pdf" will now give feedback much sooner.
- Do not display a whole day panel for ResourceUsage calendar
- All custom properties are now added to the iCal Booking feed
- Default newly saved reports to being non-publicly writeable
- This better matches with user expectations
Bug Fixes
- BUGFIX: Bookings calendar prevents you from creating bookings if permissions
allow you to create a sub-type of Booking, but not Booking itself
- BUGFIX: Monthly calendar view didn't allow to move booking with drag & drop
- BUGFIX: Template Popup did not detect when finish was before start
- BUGFIX: Remove "storage_engine=InnoDB" from standard hibernate.cfg.xml
- This database connection parameter is not supported by MySQL 5.6 and later
7.0.72 (September 2, 2016)
- BUGFIX: Contacts database boot failure on upgrade from 7.0.67
- This is the SDM sister app for storing private contact details
- This does not affect any other application, such as Calpendo, Exprodo SDM
or Exprodo DB.
7.0.73 September 19, 2016
- BUGFIX: Upgrading from anything before 7.0.50 to 8.0 or 8.1 would fail
- BUGFIX: DB Upgrades in 7.0.40 & 7.0.50 failed in MySQL 5.7.5 and later
7.0.74 January 7, 2017
Security Bug Fixes
- SECURITY BUGFIX: Report content redaction could go wrong
- This bug has the potential to allow existing users to access data that
they should not be allowed to see. It could only be exploited if
permissions were configured a certain way, and that includes adding
permissions that allow the special user "nobody" to view data that
other users cannot.
- We have always recommended not to allow user "nobody" to have read
access to data that is normally private. It may sometimes be configured
that way because anything sent by email must be readable by "nobody"
or else it will be redacted from the email, regardless of who sends
the email or to whom it is sent.
- There are two modes in which this bug could be manifested.
- Displaying data that should be redacted
- Redacting data that should be visible
- In order for this bug to allow data to be displayed that should be
redacted, it requires user "nobody" to have special read access
privileges to data that would normally be hidden. It also requires the
permissions to have been configured a certain way.
- In order to redact data that should be visible, it also requires
permissions to be configured a certain way, but does not require any
particular permissions for user "nobody". It also requires that the
report be run by somebody who is not the owner of the report.