Revision history for Perl extension Masterkey::Admin.

4.3  Fri Apr 17 13:27:36 UTC 2015
	- Change MKAdmin's URLs to include the library
	  identifier. This allows stateless URLs to point to pages
	  maintained by a specific library. Fixes MKA-110.
	- Change session-cookie names to include library
	  identifier. This means it's now possible to be logged in as
	  multiple libraries simultaneously (for example in separate
	  browser tabs), and to switch between them. Fixes MKA-174.
	- Changed logout so that only the currently active library's
	  session is removed: others continue. This makes it possible
	  to remove no-longer-needed libraries from the new expanded
	  list of "Return to library level" links. Fixes MKA-178.
	- Internal changes to persistent session management to support
	  all this. Includes refactoring Session.pm so that a single
	  utility functions all tying/untying of persistent hash.
	- Target-testing no longer fails when encountering a
	  non-standard (unsupported) CCL map. Such indexes are now
	  merely skipped. Fixes MKA-175.
	- Document how to how to upgrade MKAdmin installations to
	  new-style URLs. Fixes MKA-179. See below:

	NOTE. In order the upgrade your MKAdmin installation to use
	new-style library-specific URLs, you will need to change the
	web-server configuration to set the MAnewurls environment
	variable to a non-zero value and to route the new URLs
	appropriately. In the common case of using an Apache2
	configuration, the changes are to add the line:
	    PerlSetEnv MAnewurls 1
	and to replace
	    AliasMatch ^/console/[^\/]+/(.*) /home/mike/git/work/mkadmin/web/htdocs/$1
	with
	    AliasMatch ^/console/[^\/]+/[^\/]+/(.*) /home/mike/git/work/mkadmin/web/htdocs/$1

4.2  Wed Mar 25 13:26:16 UTC 2015
	- Last parts of support for maintaining master override
	  records on in place. Re-fixes the umbrella bug MKA-22.
	- Further work towards consistency in internal APIs of the
	  Torus client module (MKA-160).
	- Show, edit and delete links work correctly for master
	  records. Fixes MKA-168.
	- When editing regular records, fields that are in place due
	  to a master override now include a link to that master
	  record. Fixes MKA-169.
	- Support for multiple master-override layers. Fixes MKA-170.
	- Changes to internal representation of Record objects, so
	  they can contain multiple layers with the same name. Fixes
	  MKA-171.
	- Add new test-script for the API of the Record object, along
	  with the canned XML records that it works from. MKA-172.
	- Remove the old "disableRecordLayer" configuration setting,
	  which was set true in the system configuraton. Now it's
	  always true, and we no longer ever display "the layer" of a
	  record, since that is really a meaningless concept.

4.1  Thu Mar 19 14:07:59 UTC 2015
	- Full support for maintaining master records. Fixes MKA-22.
	- Master override records can now be edited as well as created
	  and deleted. Part of MKA-22.
	- Master overrides of a field are now shown when editing a
	  record. Fixes MKA-159.
	- When editing a master-override record:
	  * Use label instead of displayName as page header.
	  * Include special editable fields for label and matchQuery.
	- input.mc now supports master-override records:
	  * Handle the special fields @label and @matchQuery.
	  * Do not insist on "override" layer.
	- Clicking on the matchQuery of a master in the list of master
	  links to a page showing all selected records that match the
	  query. Fixes MKA-158.
	- Torus->master() now passes the $using_XML_LibXML_Simple
	  boolean into Masterkey::Admin::Master->new(), resulting in
	  records whose fields are correctly set. Fixes MKA-157.
	- Record objects now track whether or not they are world
	  records, rather than guessing by inspecting their
	  layers. Fixes MKA-163.
	- Generate correct XML link into Torus when viewing world
	  records. Fixes MKA-165.
	- The Torus is no longer blindly asked for all three main
	  layers. It is left to decide for itself which layers to
	  return except when editing a record. Fixes MKA-18.
	- Many (but not yet all) of the Torus.pm methods have been
	  converted to take a hash or arguments rather than a
	  list. Works towards MKA-160.

3.30  Wed Jan  7 15:56:49 UTC 2015
	- Make "udb" field manadatory. Related to IR-351.
	- A new record can be created with an existing worldId
	  specified to inherit from (invoke new.html with a worldId
	  parameter). Towards MKA-150 (mandatory fields in MKHome).
	- New config item "addAction" specifies the action invoked to
	  create new records. Last code part of MKA-150.
	- Add contentAuthentication field to target profile. Fixes
	  MKII-1876.

3.29  Thu Dec  4 15:07:42 UTC 2014
	- Reimplement torus-sed in Perl, since Ruby's network library
	  seems to have silently changed in a way that stops the old
	  version from working. Fixes MKA-148.
	- Extend torus-sed to support HTTP Basic authentication by the
	  new -a USER/PASS command-line option. Fixes MAR-114.
	- Extend torus-set to support merging fields from original and
	  override layers with the new m%FIELD command. Fixes MKA-147.
	- Add manual page for torus-sed.
	- Make the stats page able to say what logfiles it's using.
	  Fixes MKA-135.
	- The default set of parents created for the searchable realm
	  of new libraries is retricted to only the consortium's target
	  list (no longer including IRSpy, CF Repo or MKHome). Related
	  to SUP-691.
	- Make a testing message more explicit. Related to SUP-693.

3.28  Fri Nov 21 15:47:37 UTC 2014
	- Add "indexIconUrl" field to user access record. Fixes bug
	  MKA-140.
	- Add "originDate" field to target profile. Related to SUP-672.
	- We now set default values in new records, for fields that
	  have configured with a field.NAME.defaultValue setting.
	  Fixes MKA-146.

3.27  Mon Oct 27 09:30:11 UTC 2014
	- MKA/SP Statistics does not support rotating logfile, MKA-132
	- The refresh-all-parents link in the Manage Parents area no
	  longer attempts an AJAX approach (which fails in the common
	  case where the end-user's web-browser doesn't have direct
	  access to the Torus) but causes MKAdmin itself to do the
	  recursive fetch. Fixes MKA-131 ("Issues with manual parent
	  refresh").
	- Remove the proxyPattern field from the end-user record
	  (which was never supported in the MK2 UI) and add proxyUrl
	  to the library-admin record (which is). See SUP-645.
	- Target profile and facet display honour the new tri-state
	  semantics of the openAccess field (MKA-139)

3.26  Mon Sep  8 11:11:24 UTC 2014
	- The Text::CSV module, which is used for billing, now added
	  to the prerequisites for both Debian and Red Hat packages.
	- The top-level page /console/ now states what operating
	  system the host is using.
	- Improve service proxy statistic tools, MKA-126
	- service-proxy statistics tools need to supports
	  hostName for logfiles, MKA-125
	- The Record class now supports setField(), though only for
	  master records (as that's the only time we need it). The
	  edit page uses this as part of its master-record support.

3.25  Fri Aug  1 12:49:25 CEST 2014
	- layout.mc reports errors more politely.
	- In the absence of a configured display-name, fieldname() now
	  returns a non-mangled version for completely unknown fields,
	  as these will often have been added by hand. Fixes MKA-108.
	- Remove "allowTimedRefresh" parameter from all Torus
	  requests, as Torus v2.24 onwards no longer uses this. Fixes
	  MKA-103.
	- The create_realm() function now accepts an optional boolean
	  autoInherit argument.
	- Fix MKA-113 ("AutoInherit flag not copied").
	- When generating ninja-test links, the new optional
	  "ninjaTestTorusUrl" setting is consulted. Only if this is
	  not set do we fall back to the old behaviour of using the
	  Torus that MKAdmin itself is using. Fixes bug MKA-117.
	- Add inline documentation for remove-mk2-orphans. Fixes
	  MKA-119.
	- remove-mk2-orphans honours the -s and -c options (which were
	  previously ignored).

3.24  Mon Jun  2 18:36:49 CEST 2014
	- Make Torus test more general: when deleting the cloned
	  record, expect that the remaining count is one less than
	  previously, rather than necessarily zero. Fixes a persistent
	  failure in the test-suite that was caused by a state-change
	  in the Torus.
	- _http_fatal() logs error messages as well as throwing them
	  as exceptions. This should result in their appearing in the
	  HTTP server logs, which will aid debugging.
	- When ztest fails, the accumulated output up to that point is
	  emitted.
	- The ztest script explicitly tests for whether UDB is
	  defined, and fails politely if not. Fixes part of CONN-272.
	- If the editType for the "categories" field is "text", that
	  means that there is no lookup of categories by ID in the
	  Torus of another tab; so don't try to look up categories!
	  Fixes bug DBC-144.

3.23  Mon Mar 31 18:29:41 CEST 2014
	- Rework _hash2cql() to quote wildcard characters in strings,
	  and to require exact equality rather than keyword
	  match. Fixes the MKAdmin part of MKA-94.
	- Major renaming of methods in the Masterkey::Admin object:
	    siteConfig() -> siteConfigObject()
	    siteConfigValue() -> siteConf()
	    config() -> configObject()
	    configValue() -> conf()
	  Fixes part of MKA-97.
	- Do not default to sending email alerts to mike@indexdata.com
	  every time a new record is created.
	- Fix bug MKA-70 (Editing brand new records fails with "Record
	  not added") but not in a way that I'm proud of or even
	  really understand properly.
	- When generating MKAdmin configuration-file fragment
	  (command-line option "-m"), translate-mk-config now
	  recognises the "multi" setting, and emits editType
	  multiOptions instead of options when it is defined.
	- Add definition of contentLevel field, using "multi". Fixes
	  the MKAdmin part of MKII-1863.
	- _sortedList() now consults new configuration properties,
	  facet.<NAME>.separator, to decide whether the Torus should
	  be instructed to break up the named fields into multiple
	  facets. Remove old hardwired code.

3.22  Wed Mar 12 11:39:42 CET 2014
	- Add styles for highlighting hovered-over members of long
	  lists.
	- The "superuser" field of library records is no longer
	  mandatory. Avoids a hiccup when editing newly-created
	  library records. Fixes part of MKA-79.
	- Actions bar for records includes "Act as" link when
	  configured (i.e. usually in the "admin" tab when maintaining
	  libraries). Fixes part of MKA-79.
	- Username and password are no longer mandatory by default in
	  end-user records, as other authentication methods are
	  increasingly used. Fixes part of MKA-79.
	- Completely rewrite _makeXML(), which erroneously used HTML
	  entity-escaping, so that instead of generating XML text by
	  hand, we use XML::LibXML to build a DOM tree, then serialise
	  it. Fixes bug MKA-82 ("mkadmin chokes on non-ascii
	  characters") and probably a whole bunch of old,
	  half-forgotten bugs.
	- Non-standard facets can have their default configuration
	  overridden by facet.NAME.PROPERTY configuration items.
	- Set default facet caption and op for "capabilities", even
	  though that facet is not used by default: we want it to Just
	  Work for configurations that turn it on.
	- The checklist page now has a "Select all" button, which
	  turns on the checkboxes for all records. Some may then be
	  turned off before hitting the "Submit changes" button. Fixes
	  part of MKA-79.
	- Second and subsequent lines of each facet are slightly
	  indented. Fixes part of MKA-79.
	- New config element, disableSearch, omits the search box and
	  A-Z list from the list pages. This is now turned on by
	  default for both category tabs and the user-access
	  tab. Fixes part of MKA-79.
	- The "Act as this user" table-heading is shortened to "Act
	  as". Fixes part of MKA-79.
	- Reduce the number of additional fields at the bottom of the
	  full-edit page from three to one, since no-one ever filled
	  in more than one of these at a time. Fixes part of MKA-79.
	- By default, new end-user records are pre-filled with the
	  display name equal to that of the library. (This can of
	  course be edited before the record is created.) Fixes part
	  of MKA-79.
	- Remove documentation for no-longer-used "torusAuth" setting:
	  the ninja test See the CREDO-23 entries in v3.15.
	- New config element "disableAZ", omits the A-Z index from
	  lists. Fixes part of MKA-80.
	- New config element "disableSearchDays", omits the "changed
	  in last NUM days" part of the search form from list
	  pages. Fixes part of MKA-80.
	- New config element "disableCreate", omits the "Create" link
	  at the bottom of tables.
	- New config element, "disableSections": omits sections from
	  listing of fields in Edit page.
	- New config element, "linkToEdit": when set, record titles in
	  lists link to the edit page rather than the display page,
	  and there is no separate column of edit links. Fixes part of
	  MKA-80.
	- Don't copy autoInherit records while copying a
	  library. Fixes bug MKA-75.
	- The existing configuration setting field.<NAME>.height is
	  now implemented for multi-select boxes as well as
	  textareas. Fixes part of MKA-80.
	- New configuration item "disableEdit", removes edit links
	  from checklist and selected list. Fixes part of MKA-80.
	- New configuration item "disableActionBar", removes action
	  icons from full-record pages. Fixes part of MKA-80.
	- For multi-select inputs only, when there is no override
	  value, default to configuring the initial state of the
	  control with the inherited value. Fixes bug MKA-88.
	- New configuration element, field.<NAME>.breakAfterChar. If
	  this is defined, then every occurence of the specified value
	  within the field is rendered with a zero-width space
	  immediately after it, allowing the HTML rendering engine to
	  break the string at that point. This is useful for allowing
	  long compound category IDs to be broken on vertical
	  bar. Change to config/system/include/cat-sites.config uses
	  this to fix bug MKA-89.
	- New configuration item, simpleEditForm. When this is on, the
	  edit form does not present the base values in a separate
	  column, but uses them to populate the editable
	  controls. This elides a conceptually important distinction,
	  but is appropriate for non-specialist MKAdmin users such as
	  the librarians of MK Express customers. Fixes bug MKA-87
	- Cloning a library will also copy 'master' records, MKII-1861
	- Add an initial version of a Manage Masters page, analogous
	  to Manage Parents. It can list and delete master overrides,
	  but not yet create or edit them. Towards MKA-22.
	- Fix (benign) warning when creating a new Torus record that
	  doesn't inherit from a world record.
	- The Copy Library code now distinguishes between new-style
	  real records, old-style real records, and autoinherited
	  records. It copies both of the first two, and not the
	  last. All seems well. Fixes bug MKA-93.

3.21  Fri Feb 21 00:28:07 CET 2014
	- Maximum number of terms emitted per facet is configurable
	  using the maxFacets.<NAME> configuration element. Fixes
	  MKA-76.

3.20  Mon Feb  3 15:39:14 CET 2014
	- MKAdmin configuration values can now include sequences of
	  the form ${config:PROPERTY} to include the current value of
	  the specified property. This is useful for augmenting an
	  existing value: for example, adding an element to the
	  "transform" dropdown:
		field.transform.editType: \
			${config:field.transform.editType}|NORMARC=nor.xsl
	  See bug MKA-72.
	- Add an "Open Access" facet. Fixes bug MKA-73.
	- Remove obsolete/unused generateFacets() from Torus.pm
	- Remove old defensive code related to MKT-62.

3.19  Tue Jan 21 18:18:37 CET 2014
	- World records (i.e. those that have not been selected from
	  the world) can now be tested just like selected
	  records. Fixes the last(?) part of MKT-149.

3.18  Mon Jan 20 22:48:27 CET 2014
	- Workaround to cope with not-really-there auto-inherited
	  records (related to bug MKT-149).

3.17  Thu Jan 16 15:38:01 CET 2014
	- Same as 3.14 and 3.15. More problems with build process.

3.16  Wed Jan 15 23:47:58 CET 2014
	- Same as 3.15. Version number bumped because of build-process
	  difficulties.

3.15  Wed Jan 15 14:48:35 GMT 2014
	- Emit Clone link only when copyLibrary is not defined. Fixes
	  bug MKA-6.
	- When submitting changes from a checklist, go back to the
	  same page within that checklist rather than jumping back to
	  the first page. Fixes bug MKA-39, "Make D happy".
	- MKC libraries have their own log file based on the 
          hostName value in the user toroid record, MKX-9
	- List supported extensions in the "_auth" magic field as well
	  as U, P, I when username, password or IP proxy are
	  required. Extension named are highlighted in bold red if
	  they are NOT provided by a corresponding cf_x-NAME
	  field. Fixes MKA-62.
	- Fix Ninja-test links to use "u" for the user/password
	  authentication paramater instead of "s". Fixes part of
	  CREDO-23.
	- Generate ninja-test authentication by probing for an
	  end-user record whose identityId matches that of the
	  logged-in administrator. Fixes the current part of bug
	  CREDO-23.
	- display "realm" in MKA report "All targets, selected and not", 
	  see MKA-31
	- Add facility, from list of selected targets, to create an
	  MKWS auto-search widget across those targets. The link to
	  this is provided only in tabs where the mkWidgets
	  configuration element is set. Fixes bug MKS-66.
	- Add "openAccess" field (a choice between No=0 and Yes=1) to
	  target-profile data-dictionary. Fixes part of bug CP-3659.
	- Add two administrative reports on the library level: 
	  'Targets by Category' and 'Targets by Publisher', MKA-65
	- Add "openAccess" field to target-profile
	  data-dictionary. Fixes part of bug CP-3659.
	- Parent page is extended with facility to turn a Torus's
	  autoInherit attribute on or off. Fixes MKA-68. (Can't be
	  done till we have MKT-148)
	- Do not distribute README.MacOS as part of Debian package.

3.14 "nearly pi"  Tue Oct  1 16:54:56 BST 2013
	- Proper invocation of Masterkey::Admin::Output subclass
	  constructors in ztest-innner.mc. Fixes MKA-52.
	- ignore disabled records in billing reports, EBSCOUSI-253
	- Checklist supports special column-name "_auth", filling it
	  with zero or more of U, P and I as the target requires a
	  username, password or IP proxy for authentication. Each
	  letter is highlighted in red if the necessary information is
	  not in the target profile record. Fixes bug MKA-54.
	- Correctly generate URLs in CFRepo, using the repo named in
	  the cfAuth field as well as the connector named in
	  ZURL. Fixes MKA-56.
	- Add output of authentication/credentials required to MKA
	  reports, MKA-57. The CSV generated by the link 'All selected
	  targets' has three new columns: AuthReq, Authentication and
	  IP.
	- Packaging change: the RPM specification file is now
	  masterkey-admin.spec rather than mkadmin.spec, matching the
	  expectations of id-pbuild.sh.

3.13  Thu Aug 15 13:32:57 BST 2013
	- Improvements to torus-sed (needed for AUT-94):
	  * New -s (--safe) option will not overwrite existing local
	    values.
	  * New -S (--super-safe) option will not override inherited
	    values, either.
	  * New -v (--verbose) option emits verbose commentary.
	  * Expand substitution values: they may contain any number of
	    ${field} sequences, each of which is replaced by the
	    value of the specified field. The special field "#i" is
	    the serial number within the sequence of substitutions.
	- Consortium-level administrators are now always superusers,
	  whether or not the administrator's Torus record has the
	  <superuser> field set. Fixes bug MKA-37.
	- Better error-reporting when target testing failing to
	  connect: Generated MKC ZURL is used instead of field from
	  record.
	- MKA-44: mime type for HTML statistics are wrong
	- if a library has a shibId field, use it to detect the
	  local log file, MKX-9
	- In the edit page, if an inherited value is overridden by an
	  empty local value (as opposed to not being overridden at
	  all), it is now greyed out, just as it would be if
	  overridden by anything else. Fixes bug MKA-45.
	- Add hostName field, visible by default, to end-user identity
	  profile. Add help. Fixes bug MKA-46.

3.12  Sat Jun  8 01:29:24 BST 2013
	- Under the hood: reintegrate USI-based and non-USI ztest
	  scripts into a single gnarly script that works for both
	  cases.
	- In doing this, upgrade non-USI testing in various ways,
	  e.g. honouring dateTestingTerm/z3950DateTestingTerm.
	- Under the hood: all parts of the ztest procedure that are
	  specific either to USI-based or non-USI targets are now
	  moved down into dedicated classes. Makes the code much
	  cleaner, and the flow of logic in the test-script itself
	  clear.
	- Under the hood: all output generated by the ztest scripts is
	  gathered in a Masterkey::Admin::Output structure before
	  being played out. Currently the played-out version looks
	  much the same as before, but it will be easy to generate
	  different styles now.
	- When the edit page checks whether an ID is known, and
	  therefore whether to update an existing record rather than
	  creating a new one, the test is now that the ID is defined
	  AND non-empty. Previously it was only checked for being
	  defined; at some recent point, it became possible for ID to
	  be defined but empty, which meant no new records were
	  created. Not any more. Fixes bug MKII-1834.

3.11  Thu May 30 12:47:03 BST 2013
	- Reorder target fields so Authentication/Access section comes
	  between Target Functionality and UI Functionality. Fixes bug
	  MKII-1827.
	- In brief view, hide heading rows if all their contents are
	  hidden. Fixes bug MKII-1826.
	- Fix translation of multi-line help texts from YAML master
	  into MKAdmin config, so that second and subsequent lines are
	  not discarded. Fixes bug MKII-1828.
	- Finish context-sensitive help for Access-tab edit
	  page. Fixes bug MKII-1808.
	- Complete the context-sensitive help for the Edit Target
	  page. Fixes bug MKII-1800.
	- Provide XML button (for superusers) for unselected as well
	  as selected records. Fixes bug MKII-1829.
	- When viewing a single unselected record, the toolbar now
	  includes an "Add" button. Fixes bug MKII-1792.
	- The Masterkey::Admin constructor now correctly sets the
	  isAuth true value for the authentication Torus. Allows
	  adminstrators once more to edit their own details. Fixes bug
	  MKII-1830.
	- Better help for the Administrator tab. Fixes bug MKII-1810.
	- Better tab-level help for categories. Fixes bug MKII-1801.
	- Better help for User Access tab. Fixes bug MKII-1805.

3.10  Tue May 14 13:48:02 BST 2013
	- Add a "Select all targets" button on checklist pages. Fixes
	  bug MKII-1817.
	- Add new "DBC Opensearch" option for "transform" field.
	- Do not display edit, clone, etc. links for world
	- Simpler text-based icons for Test and Clone Record
	  actions. Fixes bugs MKII-1794 and MKII-1793.
	- "Show all fields" and "Hide all fields" buttons now take
	  their captions from the new caption.button.showFields and
	  caption.button.hideFields configuration elements, defaulting
	  to the old captions when these are not specified. Part of of
	  the fix for MKII-1795.
	- Add testingTerm and dateTestingTerm fields, with their
	  documentation, to the master list. Part of the fix for
	  MKII-1799.
	- Omit the edit icon when already on an edit page. Fixes bug
	  MKII-1802.
	- Edit form limits widths of field-name and base-value
	  columns, to prevent the page getting stupidly wide. Fixes
	  bug MKII-1816.
	- Change wording of administator details page. Fixes bug
	  MKII-1809.
	- Change identity-tab heading from "Library Profiles" to "User
	  Profiles". Fixes bug MKII-1807.
	- Remove "realm" field from the edit page. Fixes bug
	  MKII-1804.
	- Remove "originalUri" from the edit page. (Developers who
	  need to see that get it from the XML record.)
	- Details for new "superuser" field. It is mandatory, visible
	  by default, a boolean that can take values 0 (No) or 1
	  (Yes), and is used to determine whether the administrator
	  has "superuser" privileges, which allow parent toruses to be
	  managed.
	- Fix mandatory-field code: "Please fill this field in!"
	  message was previously emitted for fields that were set to a
	  value that was numerically equal to zero.
	- "Manage Parents" links are emitted only for administrators
	  that have "superuser" authorisation.
	- The "Manage Parents" page rejects administrators that do not
	  have "superuser" authorisation. Fixes bug MKII-1784.
	- Valid XHTML and Valid CSS logos appear only for
	  administrators who have "superuser" authorisation. Fixes bug
	  MKII-1786.
	- Only display XML-record link for superuser administrators.
	  Fixes bug MKII-1789.
	- identityId field is no longer of editType "scan", so it no
	  longer invites administrators to change their identityId.
	  Fixes bug MKII-1812.
	- Torus profile, field configuration, online help page and
	  data manual for identity records are now generated
	  automatically from YAML master file. Fixes bug MKII-1819.
	- Add styles for data-manual help pages. Fixes bug MKII-1820.
	- Remove unused "sourceType" field from target profile. (This
	  caused additional confusion as its displayName was "Target
	  Type"!) Fixes bug MKII-1821.
	- MKAdmin field configuration generated from YAML master now
	  includes new field.FILENAME.startSection: SECTIONNAME
	  directives. This directive is documented.
	- Edit page now has subheadings at the start of each section.
	- Move "Full View" button to bottom of both the full-record
	  page and the edit page. Fixes MKII-1796.
	- Protected fields are now once more displayed in edit pages
	  (but readonly). They do not get "Remove override"
	  checkboxes.
	- Add second submit button at the top of the page. Fix float
	  right. Fixes bug MKII-1787.
	- Add help-texts for category-record fields. Fixes bug
	  MKII-1803.
	- When copying a library, the "New realm" caption is
	  configurable using the caption.newRealm directive. Fixes a
	  small part of SUP-552.
	- The "toolbar" of action icons (full/brief, edit, test, etc.)
	  now appears at both the top and bottom of full-record, edit
	  and test-output pages. Fixes bug MKII-1822.
	- When copying records across from a source library's realms
	  to those of a destination library, omit that with a bad
	  worldId. Fixes bug SUP-552.
	- When displaying a full record, include all section headings
	  -- not only those of sections that have at least one visible
	  field. Fixes bug MKA-86.

3.09  Fri Apr  5 16:16:07 BST 2013
	- User-menu bar now automatically contains "Return to
	  consortium/library view" link as a appropriate -- no
	  configuration needed. Accordingly, configured tabs whose
	  names begin with a square bracket (which has been the
	  convention for level-switching tabs) are now omitted.
	- Requesting more than 50 records no longer causes a
	  fault. Fixes bug MKII-1777.
	- Document new Torus field, authenticationMode, used by
	  Metaproxy's ZOOM filter.
	- logout.html actually removes the session cookies at all
	  levels (consortium, library, and whatever else we might add
	  in future). Fixes bug MKII-1779.

3.08  Not distributed

3.07  Mon Mar 18 12:41:47 GMT 2013
	- New ndbm-dump-sessions command-line option -s to use SDBM.
	- Deleting end-user identities no longer fails with
	  "_substitute() with no object", as previously. Fixes bug
	  SUP-533.

3.06  Wed Mar  6 15:21:53 GMT 2013
	- Includes Process Manual, doc/mkadmin-process-guide.doc
	- Much better profile for content-connector records.
	- Much better base configuration for the content-connector
	  tab.
	- Search facilities on all three list-type pages extended to
	  include a "changed in the last N days" box. Fixes bug
	  MKII-1767.

3.05  Mon Feb 11 13:02:35 GMT 2013
	- Z-test now accomodates the changed Credo DC record format
	  (as well as the old one), so that tests no longer fail due
	  to inability to find the title field. Fixes bug CREDO-7.
	- use mime type application/vnd.ms-excel for Excel files, MKII-1764
	- The use of &debug=1 to generate APDU logging for ztest.html
	  URLs now also works for non-USI tests.
	- Fix bug MKII-1762: old-style (non-USI) binocular testing now
	  works correctly for CF-based targets as well as non-CF. I
	  have a horrible feeling that this NEVER worked before.

3.04  Tue Jan 22 17:33:24 GMT 2013
	- Recognise new-style Dublin Core records in binocular-test so
	  that we can find the title field. Fixes bug CREDO-22.
	- Ninja-test invocation specifies which realm to use, based on
	  the identityId of the administrator. Towards fixing bug
	  CREDO-23, though not yet complete.
	- Copy Library accepts an all-numeric realm name as gospel if
	  one is provided, and does not try to find an unoccupied
	  related realm to use if it's already in use. Fixed bug
	  SUP-535.
	- More precise admin-user search in test suite: check identity
	  rather than keyword-match.

3.03  Wed Jan  9 15:30:35 GMT 2013
	- Do not reject extension-field names that contain hyphens.
	- Make sure all exceptions are caught and reported politely in
	  the Web UI. Some were not caught at all, and caused
	  mysterious subsequent errors; others were reported with
	  excessive technical detail. Fixes bug MKII-1747.
  	- billing-q.cgi: make numeric prefix optional, MKII-1756
	- findmy.mc's invocation of /mc/form.mc specifies action =>
	  "my.html", so that if findmy.mc was invoked by delete.html a
	  subsequent search is directed to the right page. Fixes bug
	  MKII-1543.
	- Binocular test in both USI and non-USI case now tests
	  piggybacking when the target profile claims support. Fixes
	  bug MKII-1752.

3.02  Mon Nov 26 16:12:45 GMT 2012
	- If the option &debug=1 is added to a ztest.html URL, then
	  APDU logging is turned on in the HTML output. It's not
	  pretty, but it's informative. Requires YAZ v4.2.47 or
	  better, otherwise debugging output will be empty.
	- Add new Torus.pm methods, disable() and enable(). Requires
	  Torus 2.13 or better.
	- The checklist view of record selection/deselection
	  implemented by checklist.html now disables records rather
	  than deleting them when unchecked, and enables rather than
	  creating a new overlay when rechecked. It does this only
	  when dealing with a Torus of v2.13 of higher (where
	  disabling is supported); otherwise it falls back to the old
	  behaviour of simply deleting records.

3.01  Fri Nov 16 14:49:54 GMT 2012
	- Add configuration support for content-connector tabs,
	  including a new Torus profile and skeletal help texts.

3.00  Fri Nov  9 17:01:27 GMT 2012
	- Rip out all the old Torus1-support code. Torus::OldStyle
	  removed completely, and Torus::RealmBased factored back into
	  Torus.pm. This gives us a much simpler, cleaner, more
	  streamlined codebase that will be easier to maintain and
	  extend. Fixes bug MKII-1732. NOTE THAT THIS CHANGE IS NOT
	  BACKWARDS-COMPATIBLE. APPLICATIONS THAT NEEDS TORUS1 SUPPORT
	  WILL NEED TO STAY ON v2.35.
	- Remove all torus, authTorus, authTorusRealm and
	  fetchAfterUpdate directives from system configuration and
	  accompanying documentation.
	- Merge all of the config/system2 directives into
	  config/system, so that the former is no longer used.
	- Remove bin/torus-proxy.rb from distribution, as there are no
	  longer Torus1 installations to proxy for.
	- Remove obsolete documentation config/README.torus2-port
	- Support for memcached is removed: there is never any reason
	  to use it with Torus2, which does its own intelligent
	  in-memory caching:
	  * Remove code implementing write-through cache.
	  * Remove the Admin::Cache module and corresponding
	    test-script from the distribution.
	  * Remove the private Torus method _notify_torus_change()
	    altogether since it no longer does anything: both
	    fetchAfterUpdate() and cache-flushing are gone.
	  * Mark CACHE and NOCACHE logging-levels as deprecated, since
	    they are no longer used.
	  * Remove caching options from system configuration.
	  * Remove documentation of caching configuration directives.
	  * Remove Perl-level dependency on Cache::Memcached module.
	  * Remove Debian package dependencies on
	    libcache-memcached-perl and memcached packages.
	  * Remove Red Hat package dependencies on
	    perl-Cache-Memcached and memcached packages.
	- Many refactorings within the Torus.pm module to simplify for
	  the Torus2-only world. Involves changes to some publicly
	  visible API calls. Invocations have been changed
	  accordingly.

2.36  Fri Nov  2 11:26:54 GMT 2012
	- Remove the hand-rolled IO::String module, and instead depend
	  on the relevant Debian package (libio-string-perl).

2.35 "fissile uranium"  Fri Oct 26 20:22:35 BST 2012
	- When _listOrWorldURI() narrows a search by specifying
	  identityId, the additional query component uses CQL's "=="
	  relation (exactly equal to) rather then "=" (matches). This
	  is what it should always have done.
	- Document the new "usiLoginFromTab" setting. It's
	  complicated, but the bottom line is this: if your
	  application is like MKC rather than USI, put
	  "usiLoginFromTab:identity" in your configuration.
	- Actally implement the new "usiLoginFromTab" setting in the
	  "binocular test" web/htdocs/mc/ztest-inner.mc. Fixes the
	  main part of bug CREDO-7.
	- Binocular test recognise when response records are DC rather
	  than USI-style extended-MODS, and tests for title and links
	  by means of appropriate DC XPaths.

2.34  Thu Oct 11 18:50:16 BST 2012
	- Rename Admin::Config::keys() to configKeys() to avoid a name
	  clash on some Perl platforms. I have no idea why this is now
	  necessary. Fixes the part of bug SA-330 that begins with the
	  comment at 11/Oct/12 4:52 PM.

2.33  Wed Oct 10 21:57:10 BST 2012
	- Many changes to per-field documentation, integrating
	  information from MK Admin Doc questions.docx. Fixes bug
	  MKII-1723.
	- Add README.MacOS file to distribution, describing how to get
	  MKAdmin running on a Mac using MacPorts components.
	- The "Fix it here" link to parents.html that is emitted if a
	  Torus operation fails now correctly points to the current
	  realm's parents page -- it is not, as previously, hardwired
	  to point to the global ("consortium-level") parents page,
	  and never should have been.
	- It is now possible specify the use of different icon-sets in
	  three different contexts (list items, toolbars and
	  documentations) by providing an icondir.* setting. See
	  config/README for details.
	- A set of larger icons is provided in images/24x24, suitable
	  for use in toolbars.
	- Make Record class robust against layers appearing in
	  different order from the traditional one: isWorldRecord()
	  and the field() method needed modifying. Fixes bug
	  MKII-1724.
	- Fields to be included in checklist can be specified by new
	  configuration elements fieldList: value is a comma-separated
	  list of fieldnames. Allows targetOrigin and/or TargetType to
	  be included in checklists, providing a more general fix for
	  bug MKII-1714.
	- Captions used for each field's heading in this context are
	  specified by the new caption.heading.<FIELD> elements. (The
	  old caption.providerObject is retained as a backwards
	  compatible synonym of caption.heading.serviceProvider).
	- Extended configuration parser to handle %include with HTTP
	  URLs. This allows some part of configuration to be held in
	  a Torus -- or indeed elsewhere on the web if desired, but
	  the Torus is the main use-case because it means MKAdmin can
	  be used to maintain its own configuration.
	- Provide basic configuration for a "hidden" configuration tab
	  that can be used to configure MKAdmin itself if the
	  application-specific configuration is set up appropriately.
	- The send_email() method is now configured by new properties,
	  "email.from", "email.host" and "email.hello". Each of these
	  defaults to its previous hardwired value if absent. Fixes
	  bug MKII-1073.
	- Email notifications of new records are now sent to the
	  address specified by the "email.toAdmin" property. The old
	  "adminEmail" is also recognised for backwards compatibility.
	- The "email.event.newRecord" is now used to signal sending of
	  new-record notifications. The old "sendEmail.new" is also
	  recognised for backwards compatibility.

2.32  Tue Sep 25 16:49:37 BST 2012
	- In USI-based Z39.50 testing (web/htdocs/mc/ztest-inner.mc),
	  the configuraton element cclmap_localID (not "cclmap_id" as
	  previously) is mapped to CQL's rec.identifier.
	  Fixes bug CP-3173.
	- Ninja-test link made configurable by the old "usiBaseUrl"
	  setting and the new "ninjaTestUrl" and "torusAuth"
	  settings. Torus URL is now taken from the tab's
	  configuration rather than hardwired.
	- Add documentation for the ninjaTestUrl and torusAuth settings.
	- Rework the utf8param() utility function to use the boring
	  but reliable old CGI module's $q->param() instead of the
	  mysteriously unreliable Apache2::RequestRec object. Requires
	  all invocations to be changed. Yuck. Should drive a stake
	  through the heart of bug MKII-1475.
	- Cloned records now contain copies of all defined fields from
	  the clonee, rather than merely inheriting from the same
	  parent. Fixes bug SUP-502.

2.31  Thu Aug 30 14:35:09 BST 2012
	- Change the beer-test icon back to binoculars.
	- Add new field "billingDate" to target profile.
	- For ALL pages that use standard layout, if an exception is
	  thrown that reports a Torus error related to a bad parent
	  response, a shorter error message is displayed (omitting the
	  stack-trace) within the usual chrome, and including a link
	  to the Manage Parents page that can be used to fix the
	  problem. Fixes the important part of bug #5920.
	- Enable monthly/quarterly report of targets that need new support
	  agreements for billing per library, #5227
	- Allow to filter billing reports by parameter &user=<libarary id>
	- Add ninja-test link to record pages. Fixes JIRA #MKII-1597,
	  and to some extent supersedes the beer-test.
	- Updated documentation of urlRecipe field.
	- Add ability to clone an existing record into the same
	  realm. Fixes MKII-1511.
	- Make the auto-generated manual available as the default
	  "help" page for consortium- and library-level target
	  maintenance tabs.
	- Rename bin/torus-sed.rb and bin/select-targets.rb to discard
	  ".rb" extension, which Debian packaging doesn't like.

2.30  Thu Jul 12 16:10:37 BST 2012
	- When running non-USI Z39.50 tests, compile CCL queries
	  client-side using CCL2RPN rather than sending CQL, which
	  very few servers understand. Completes the fix for bug
	  #6699.

2.29  Thu Jul 12 13:36:09 BST 2012
	- No changes at all except to the build procedure:
	  Makefile.PL's instructions to invoke bin/translate-mk-config
	  now use ruby rather than ruby1.8, as the latter is not
	  available as a command on Red Hat systems, preventing the
	  package from building on that platform. IF YOU HAVE v2.28
	  INSTALLED THERE IS NO REASON TO UPGRADE TO 2.29.

2.28  Thu Jul 12 09:40:24 BST 2012
	- When no usiBaseUrl is defined, the target-test facility
	  falls back to old native Z39.50 test that does not use the
	  USI. This remains flawed and incomplete, but better than
	  nothing. Fixes bug #6699.

2.27  Mon Jul  9 16:26:47 BST 2012
	- *sigh* looks like our git-tagging-and-release producedure
	  needs a new release of the base package for a change in
	  Makefile.PL to affect how the build commands are executed
	  (specifically, in this case, bin/translate-mk-config). No
	  functional changes at all since v2.26.

2.26  Fri Jul  6 17:13:57 BST 2012
	- Move the location of billing statistics, #5539
	  Note: old installations needs to move the billing directory
	  manually after upgrade: 
	  $cd /var/lib/masterkey/torus2; mv billing ..
	- Add new utility script, bin/remove-mk2-orphans - fixes bug
	  #5772.
	- New library Masterkey::Admin::Dummy abstracted out from
	  test-usi-targets, since the same functionality is also
	  needed by remove-mk2-orphans.
	- Add new method, Masterkey::Admin::Record->delete() (used by
	  bin/remove-mk2-orphans)
	- New configuration item, "caption.reallyDelete", to configure
	  the confirmation message before deleting an object; and
	  "caption.reallyDeleteLast" secondard warning message,
	  emitted only when about to delete the last item with a
	  particular identityId (i.e. the last adminstrator for a
	  library).
	- Deleting the last administrator for a library deletes all
	  its targets, categories and end-users. Fixes bug #3676.
	- New configuration element, "cfrepoUrl". When defined, it is
	  taken as the base-URL of CF Repo: displays of
	  connector-based records include a link to the connector
	  itself within that repo. Fixes bug #5912.
	- Add a monthly/quarterly report of targets that need new support
	  agreements for billing, #5227
	- Master configuration for all aspects of target-record
	  fields, including documentation, is in new file
	  config/system/profile/target-profile.yaml
	- New command-line utility bin/translate-mk-config reads the
	  YAML file and writes several different kinds of output.
	- New doc/Makefile controls generation of data manual from
	  YAML. The doc directory also contains the generated
	  data-manual.html and associated stylesheet style.css.
	- New config/Makefile controls generation of torus-profile and
	  new MKAdmin configuration file
	  system/include/searchable-fields.config.

2.25  Fri May  4 13:13:55 BST 2012
	- Modify beer-test (both interactive and batch) to send CQL
	  queries rather than CCL2RPN.
	- Date-search in both beers-test now combines dc.date with
	  another search, since many targets support date-searching
	  only as a filter, not as a complete search.  Fixes bug
	  #5340.
	- Simplify interactive beer-test so that it no longer attempts
	  to work without a USI.
	- Remove binocular-test icon for non-USI Z39.50 testing.  This
	  never worked properly, and now fails right up front when
	  invoked.
	- In the batch beer-test, bin/test-usi-targets, the URL of USI
	  instance to use may be specified with -u <url> option.  As
	  before it defaults to using ebsco1.
	- bin/test-usi-targets supports new "-n" option to suppress
	  introductory line of output.
	- In the batch beer-test, the "countchanged" test-failure
	  state now only fires if the change in record-count exceeds
	  10% of the original count.  So a growth from 50 records to
	  54 or 55 would be considered OK, but 56 would still be a red
	  flag.
	- Add support for editType "text" (the default).
	  Add new utility, bin/torus-sed.rb -- can add or overwrite
	  arbitrary fields to all records in a realm that match a
	  query, or remove fields.  Sample
	  invocation:
		./torus-sed.rb usi.indexdata.com/torus2/searchable.production udb=ABCCLIOAG supported=1 %oldField
	  One day it will be able to do substitutions on existing
	  values (hence the name).
	- Add commitComment field to searchable.torus-profile.
	- Add editType for default configuration of "sru" field.
	  Fixes bug #4894.
	- New test-usi-targets option, -t <testFile>.  This is the
	  opposite of -s <skipFile>, and lists the UDBs of targets
	  that SHOULD be tested.
	- Fix bug in test-usi-targets "countchanged" detection code:
	  would divide by zero is the second search had no hits.
	- test-usi-targets has support for HTTP Basic authentication
	  via the TORUS2AUTH environment variable.  If this is
	  provided, it is used to initialise authentication for Torus
	  requests.  It takes a slash-separated four-part value
		  <host:port>/<realm>/<user>/<password>
	  for example
		  usi.indexdata.com:80/USI Admin/mike/swordfish
	- test-usi-targets supports for new -f <filterRealm> option
	  (filters targets to only those also in specified
	  <filterRealm>.)
	- test-usi-targets outputs old and new counts on standard
	  error when a target fails with "countchanged".
	- test-usi-targets output distinguishes between authentication
	  errors "autherror" and other system errors "syserror".
	- test-usi-targets allows lines of skip-list and include-list
	  to have trailing whitespace and/or comments, introduced by
	  hash.  Blank lines are ignored.
	- Admin UI's beer-test properly handles peerreviewed and
	  fulltext searches.  Fixes bug #5618 (again!)
	- Admin UI's beer-test attempts to keep the back-end session
	  alive by flushing output in varioous ways.
	- Simple fix for bug #5543 -- just reject the whole edit
	  request if it contains an invalid extension fieldname.
	- Add code to set HTML favicon from siteIcon setting.  Fixes
	  bug #5683.

2.24  Wed Jan  4 17:41:31 GMT 2012
	- Fix the sruVersion field's dropdown values -- they were odd
          strings rather than version numbers.  Properly fixed bug
          #4944.
	- Add a "No selection" for select boxes.  Fixes bug #4878
	- New billing feature: count all targets, selected or not.
	  Fixes bug #4933.  Can be configured by host, needed for
	  EBSCO RTAC billing.
	- edit.html: switch from GET to POST requests, to support huge 
          forms data.  Fixes bug #4845.
	- Add support for editType:multiOptions (with the same
	  arguments as editType:options): uses a multi-select checkbox
	  and saves a string consisting of all selected elements
	  separated by spaces.  Fixes bug #5038.

2.23  Thu Dec 15 14:07:06 GMT 2011
	- For now, comment out the not-yet finished embedded-login
	  code in Masterkey::Admin, as it causes mysterious
	  intermittent errors on ohiolink-test.indexdata.com.
	- Correct counting of number of searches tried in ztest.html.
	- When running ztest.html against an SRU server (as with a
	  Z39.50 server), an unsupported index does not end the test.
	- If a target is supported *and* unsupported, count only the supported 
	  one in total list, #3908. That means, only the higher priced version 
          will be invoiced.
	- New feature: exclude libararies from billing reports by name. #3908 
          e.g. any "test" libraries
	- Correctly URL-escape IDs in full-record links from
	  checklist.html.
	- Ensure that worldIds passed in when creating child records
	  are NOT URL-escaped.
	- Correctly escape IDs in edit-record, Z39.50-test,
	  delete-record links, delete.mc and findmy.mc.  Note that
	  there may be more links in MKAdmin that don't do this right
	  -- we'll pick them all off as and when they turn up.
	- Use careful quoting of JavaScript strings to ensure that
	  checklist toggling works correctly when the ID contains a
	  single-quote character.  Fixes bug #4844.
	- Fix facet generation not to HTML-encode the CQL query in the
	  link (it was getting doubly encoded, the other one
	  presumably by the URL library) but to encode the facet text
	  (which was not getting done).  Fixes bug #4846.
	- USI tests run against the service specified by the
	  usiBaseUrl configuration element, not a hardwired service.
	  USI tests fail if not such service is specified in the
	  configuration.
	- If the optional "usi" parameter to ztest.html is an HTTP URL
	  rather than just a boolean, then it is taken as the address
	  of the USI service to use for testing, overriding the
	  usiBaseUrl setting.
	- ztest now falls back to attempting a search with no
	  attributes when none of the Attributes fields are set.  It
	  gives the test *something* to work with for retrieval.
	- test does not try to search on indexes whose attributes are
	  defined but empty.  (I'm not sure how, but a few of our
	  target records seem to have got into this state.)
	- Better beer icon for USI testing: an ale rather than a
	  lager.
	- Add a new item to the default Transform dropdown: MARCXML,
	  which uses the old marc21.xsl stylesheet (as opposed to
	  MARC21, which, confusingly, uses tmarc.xsl).
	- The list of action icons at the bottom of a record page now
	  includes a link to the raw XML record in the Torus.
	- Add bin/select-targets.rb, a general command-line tool for
	  adding targets from a world to a realm.  USE WITH CAUTION.
	- REMOVE the zproxy field from the "searchable" Torus profile:
	  inspection of the Metaproxy and Service Proxy/Pazpar2 code
	  shows that this field is never actually used, and inspection
	  of Torus and Torus2 data on pallas, caliban and ariel shows
	  that no records have it.  This removal fixes bug #4869.
	- User-visible name of cfProxy field is changed to just
	  "Proxy".
	- When creating a Torus, a warning is now emitted if the path
	  doesn't look right for the kind of Torus object being made
	  -- i.e. containing /torus/ for an old-style Torus and
	  /torus2/ for a realm-based one.  This will help with
	  diagnosing certain misconfigurations.
	- Change display-name of "type7" sort strategy to "Type-7
	  (CF)", since this is what needs to be used for CF targets
	  and that is not readily apparent.
	- Display "supported" column in Admin Reports for billing, #4876
	- Consider localhost:9003 as connector for billing
	- Add new sruVersion field to
	  config/system/profile/searchable.torus-profile
	- A new column contains a list of all "target names" per month, #3908
          In case a customer wants to know which targets they are being 
	  billed for.
        - Billing bugfixes: libraries without selected targets
	- Configure dropdown for SRU version, #4944
	- Add a new script, test-usi-targets, which runs automated
	  tests against targets described by a USI realm.  Fixes bug
	  #4873.

2.22  Wed Nov  9 01:11:39 GMT 2011
	- Some statistics should only appears for specific customers, #4780
	- Implement a billing statistics, #3908
	- Keep history of billing statistics in 
	  /var/lib/masterkey/torus2/billing for next run
	- Implement a token to fetch the billing reports without a login
          on mkadmin and a session. This allow us to link to a CSV report,
	  and to fetch reports by a cron job from customer installations
	  automatically.
	- More explicit message when no search attributes are defined
	  in ztest.html
	- Extend ztest.html with support for Z39.50 proxy.
	- ztest.html correctly handles the authentication string,
	  which may be of the form "user" (simply) or
	  "user/password".
	- ztest.html handles the "sru" setting.
	- ztest.html supports cfProxy, cfSubDB and cfAuth fields,
	  which cause rich database name components to be added to the
	  ZURL.
	- ztest.htrml takes a  new optional argument "usi"; when true,
	  then testing is done via the USI (using hardwired USI host
	  and the target record's UDB) rather than the underlying
	  server.
	- A link to the USI version of the Z39.50 test is provided at
	  the bottom of each record page.  For reasons that would be
	  otiose, for the moment, to reherse, the link takes the form
	  of a pint-of-beer icon.
	- ztest reports failure if it's not able to retrieve a
	  non-empty title from the first record -- a heuristic for
	  retrieval failure.  In this case, it displays the whole XML
	  record.

2.21  Wed Oct 26 16:47:09 BST 2011
	- Add new configuration directive, css.everywhere, which
	  provides CSS style declarations to be included in both the
	  front page and the main pages of the site.
	- Tweaks to system2 base configuration.

2.20  Mon Oct 24 12:45:27 BST 2011
	- Add cclmap_id field for searchable.torus-profile.
	- Add nice display names to default configuration for
	  cclmap_publisher, cclmap_peerreviewed, cclmap_fulltext,
	  cclmap_description, cclmap_language and cclmap_id fields.
	- Rename the config/include area to config/system.  This
	  resolves the confusing use of "include" to mean two
	  different things in the configuration area.  Fixes bug
	  #4598.
	- Change Debian packaging rules to copy the newly renamed
	  config/system directory into place rather than the old
	  config/include, and to make include a symbolic link to
	  system for backwards compatibility.  (New MKAdmin
	  configurations should use the path to system, but old ones
	  will not break.)
	- Add new config/system2 area which, when layered over
	  config/system, provides the base configuration for a
	  Torus2-based MKAdmin application.  See config/system2/README
	  for Apache2 configuration.  Fixes bug #4599.
	- New configuration item disableManageParents.  When set to 1,
	  disables the Manage Parents link.  Fixes bug #4534.

2.19  Wed Oct 19 14:33:11 UTC 2011
	- Generate and cache mapping CSV files for services proxy
	  statistics automatically in /var/tmp
	- Record::uri() method extended to allow setting as well as
	  getting.
	- The Torus.pm client module now generates canonical URI for
	  individual records and for records returned as part of a
	  whole-realm response.  (In the old days, the Torus itself
	  included these URIs in its response, but somehow that got
	  lost in the transition to Torus2.)
	- Fix the "Add to All" facility to use originalURL as the
	  basis of record identity, rather than ZURL.  Fixes the last
	  part of bug #4496.
	- Add "capabilities" field to "searchable" profile.
	- The Z39.50 testing script now tests all searchable indexes
	  for which a cclmap_* is defined.
	- Z39.50 target testing of date indexes may be configured to
	  use a query specified by the new "z3950DateTestingTerm"
	  directive; if this is not provided then the year "1998" is
	  used rather than a text-search as previously.  Fixes bug
	  #4674.
	- Z39.50 target testing of date searching may be overridden on
	  a per-target basis to use a query specified by the new
	  "dateTestingTerm" property.

2.17  Thu Oct  6 19:35:01 CEST 2011
	- Implement publisher -> target mapping as CSV file, #4600
	- Implement realm -> library mapping as CSV file

2.16  Wed Oct  5 15:49:20 CEST 2011
	- Add boolean "supported" field to "searchable" profile.
	- Add cclmap_* fields for search indexes publisher,
	  peerreviewed, fulltext, description and language to
	  "searchable" profile.
	- statistic bugfixes

2.15  Wed Sep 21 21:11:19 BST 2011
	- Implement per Library statistics (lreports).
	- For "Full record views" statistics, only "Affiliation & Date"
	  make sense.  Remove the rest from the list.
	- Filter library reports by realm.
	- New central statistic config file.
	- Enable XML output, #4615
	- Speed up statistics generation by using a log file cache.
	- All facet URLs are relative to the current page rather than
	  the current directory.  This means that facets on "Selected
	  targets" pages show only selected targets.  Fixes bug #4605.
	- Don't ever use a zero-length realm for a copied library.
	  The default is now is to use "0" if the realm is empty, and
	  count up from there.  Fixes the important part of bug
	  #4582.
	- If the realm is not specified when copying a library,
	  generate it from the name that's specified using the same
	  dumbing-down rules as used when creating a new library from
	  scratch.  Fixes the rest of #4582.

2.14  Fri Sep  9 18:18:25 BST 2011
	- Add "Refresh records from parents" button to Manage Parents
	  page (using ?recursive=1).  Fixes bug #3235.
        - Affiliation stat: zero hits are being across all target in a 
	  metasearch.
	- The "refreshAfter" parameter is now supported in the Manage
	  Parents page.
	- The Copy Library facility propagates refresh-time.  Fixes
	  bug 4464, part 1.
	- make_realms_for_record() uses new property
	  realmOnNew.REALMNUMBER.parent.PARENTNUMBER.refreshAfter to
	  determine the refresh interval of newly created realms.
	- _addParentsByURI(), addParent() and updateParent() extended
	  to accept $refreshAfter parameter.
	- Logging for updateParent() includes all parameters.
	- Add new sortStrategy field to searchable.torus-profile.
	  When edited this is a dropdown with values "z3950", "type7",
	  "cql", "sru11" and "embed".
	- Set report name. On all reports, the line that shows the report 
          name needs to correspond to the UI request label.
	- Add the allowTimedRefresh=true parameter to all operations
	  on realm-based Toruses.  Fixes bug 4464, part 2.
	- updateParent() now shares robust parent-XML construction
	  code with addParent(), protecting against injection.
	- Add support for per-library start-page (startPage field in
	  library-administrator identity records).  Fixes bug 4601.
	- Add four more UI-configuration fields to identity profile:
	  styleCssUrl, indexCssUrl, logoUrl and libraryURL. They
	  really belong in the Access profile, but historical
	  considerations mean that the UI expects them here.

2.13  Mon Sep  5 16:17:38 CEST 2011
	- Implement a Statistic Interface, which is part of the 
	  reports section.
	- Show unfinished statistic reports only in debug mode.
	- Implemented a new output format HTML for statistics reports.
	  It looks much nicer than plain ASCII and is now the default
	  output format.
	- Most values on the statistic interface are now configurable
	  in an MKAdmin config file, e.g. sort option, list of
	  formats, default output format.  It is also possible to
	  disable the statistic page entirely.
	- Enable configuration of the order of reports sections.
	- Configurable ability to sort reports by name.
	- Add CCL-map fields for ISSN and Source, both widely used by
	  MasterKey Connect.
	- New filter for hit counter. This allow us to filter for targets with 
	  a zero hit count. Valid options are: =0 | >0 | <101
 	- Implement a provider <=> target mapping for counter reports.
	- Implement counter reports.

2.12  Fri Aug 19 16:48:11 BST 2011
	- Add a new multi-line text-field, literalTransform, which may
	  contain the literal text of a custom XSLT stylesheet used to
	  transform records obtained from the back-end into Pazpar2
	  format.  (Metaproxy uses this, when specified, in preference
	  to any externally provided stylesheet named by the
	  "transform" field.)  Fixes part of bug #4536 -- the
	  remainder is to add an "upload" button.
	- On the edit page, HTML-encode the old values of fields
	  provided in hidden input fields' "value" attributes.  (We
	  should always have done this, but the necessity has only
	  become apparent now that we're storing XML in a field.)
	- Record::update() modified to use the torus's auth-realm
	  rather than the record's own realm, allowing update of
	  administrator records to work correctly.  This fixes bug
	  #4413, but in an ugly way.  See comments for details.

2.11  Tue Aug  9 18:03:36 BST 2011
	- Just don't ask.  It makes me want to weep.  To weep great
	  oceans of wet, salty tears; tears that could irrigate
	  deserts, engulf great cities and raise the level of the
	  oceans themselves.

2.10  Tue Aug  9 16:53:38 BST 2011
	- Add manual, doc/mkadmin-manual.doc
	- report-library-resources.cvs extended to recognise when it's
	  being run by a consortium-level administrator, and report
	  from the global torus in this case.
	- report-library-resources.cvs extended to accept an optional
	  "merged" parameter, indicating that the merged rather than
	  the selected record list should be used.
	- The consortium-level Reports tab includes a link to "all
	  selected targets" and "all targets, selected and not"
	  reports.
	- The library-level Reports tab is now a part of the standard
	  configuration, and links to both versions of the target-list
	  report.
	- The Categories tab is now part of the standard configuration
	  at both the consortium and library levels.
	- Add new documentation file, config/README.torus2-port:
	  "porting An MKAdmin Application from Old-Style to
	  Realm-Based Torus".
	- Added -moz-* and -webkit-*-border-radius properties for
	  rounded tabs, in the hope that they will work on old
	  browsers.  I have no easy way to test this, but it can't
	  hurt.
	- Tweak cosmetics of default configuration to provide space
	  between menu sidebar and main area.
	- Add contentConnector field to searchable profile.
	- The Manage Parents link now appears automatically on tabs
	  which maintain realms with parents, when a realm-based Torus
	  is in use.  This is mildly backwards-incompatible:
	  applications that add their own link should remove that part
	  of their configuration to avoid a duplicate.
	- Add shibId field to user identity records.  Fixes bug #4500.
	- A-Z listing now searches explicitly against displayName.
	  Fixes bug #4504.
	- Fix _addParentByURI() to correctly return the new parent's
	  ID, taking into account the Torus2 behaviour whereby all
	  URLs end with a meaningless slash.
	- Enable duplication of entire libraries.  Fixes Bug #4074.
	- In the default configuration, it is not possible to add a
	  new target profile record with the same udb as an existing
	  one in the same realm.
	- Set human-readable names for termlistTermCount,
	  termlistTermSort, preferredTarget and blockTimeout fields.
	- Document the field.*.unique property.
	- The Torus client module's _check_unique() method (as
	  configured by field.*.unique directives) no longer enforces
	  uniqueness of empty values.  This allows multiple records to
	  have no "udb" value, which will be a very common situation.
	- New "Add to All Libraries" and "Remove from All Libraries"
	  facilites, configured by the addToAll and removeFromAll
	  directives.  These may be used at the consortium level to
	  enable facilities that adds a given target or category to
	  all libraries in a consortium, or removes it from them.
	  Fixes bug #4496.
	  ### Note: since the Torus2 does not yet provide the
	  originURL field, these facilities currently uses the ZURL
	  field as a Fairly Unique Key.  Good enough for testing, but
	  not really for production.  Note that this means the new
	  Add/Remove facilities DO NOT WORK CORRECTLY WITH
	  CATEGORIES.

2.09  Thu Jul  7 20:20:42 BST 2011
	- When requesting facets from Torus2, specify to split
	  categories on commas (fixes bug #4355).
	- findmy.mc no longer tries futilely to continue when it runs
	  into an error in sortedList().  (It never should have.)
	- _addQuery makes a special case when dealing with a query
	  that ends with sort-specification to avoid generating
	  malformed queries.
	- _addQuery discards unnecessary cql.allRecords=1 clauses.
	- Whenever a new realm of type "searchable" is created, that
	  realm's matchKey is set to the Always Correct value of:
	       <field name="displayName" required="yes"/>
	       <field name="serviceProvider" required="no"/>
	  Fixes bug #4364.
	- Rounded top corners on tabs.  Seb will be happy.
	- Add new optional fields targetType and targetURL to the
	  "searchable" Torus profile.  Needed for bug #4400.
	- Add new report, report-library-resources.csv.  Fixes the
	  MKAdmin part of bug #4400.  Note that this is not made
	  available from the standard configuration -- overrides such
	  as those of mk2-config-newdemo are needed to expose it.

2.08  Wed Jun 22 12:09:56 BST 2011
	- Add new field "udb" to default searchable.torus-profile.
	- Add display name and help text for "udb" field (it's
	  labelled as "Access Name")
	- Add new report, report-resources-by-category.csv.  This
	  fixes bug # 4071 (Add a new MK Admin report: targets by
	  category) Note that this is at the consortium level --
	  i.e. it analyses which of the globally available targets
	  uses which of the globally available categories.
	- Fix false warnings about mandatory fields when editing
	  records where the parent record has the field in question
	  (second part of bug #4162).
	- Extend my.html page to use Torus paging.
	- Use Torus-generated facets, when provided (i.e. by Torus2)
	  for /world/ and /records/ as well as /merged/.
	- Refactor Torus-client code to reduce repetition between
	  handling of /records/, /world/ and /merged/.
	- Generate tag-clouds from facets rather than from records.
	- The red-cross column's caption and icon-title text in
	  my.html for Searchable tabs now uses the wording "Remove"
	  rather than "Delete".  Fixes bug #4070.
	- Correct alt-text for Edit icons.
	- Remove the long-deprecated list.html view: checklist.html is
	  always used instead.

2.07  Wed Jun  1 16:50:32 BST 2011
	- Take advantage of Torus2 facilities for sorting.
	- Take advantage of Torus2 facilities for returning only the
	  required portion of large lists.
	- Take advantage of Torus2 facilities for returning facets
	- In the default configuration, facets are no longer displayed
	  for non-target tabs such as identities and categories.
	  (They are always empty, so having this turned on was just
	  displaying a bunch of headings.)

2.06  Does not exist: it had to be skipped due to a git tagging error.

2.05  Fri May  6 21:22:43 BST 2011
	- Rewrite low-level Torus-client classes to work with Torus
	  v2.0.  We did some of this work in releade 2.00, but back in
	  the day there was no actual Torus 2.0 to code against, only
	  bin/torus-proxy.rb, and the real thing is rather different
	  in some respects.  Notably, all operations against worlds
	  (as opposed to record lists) need to be done in the context
	  of a specific user, so that we know whose world to work on.
	- Add facilities for maintaining the set of parents associated
	  with each torus (only when Torus2 is being used, of
	  course).  This is accessed initially in parents.html, and
	  allows parents to be listed, added, deleted and edited.
	- Fix bug #3859 -- after editing a record, MKAdmin does not
	  only tell the user how many fields have changed, but which
	  ones: a list of modified fields and list of those that were
	  deleted.
	- Fix bug #4069 -- categories facet displays category name
	  rather than ID, which may be opaque.
	- Fix bug #4162 -- fields marked as mandatory actually are
	  mandatory.
	- scan() function omits undefined values from its output.
	- Added new configuration directives, realmOnNew.*, which are
	  applicable only when a new-style Torus is in use.  These are
	  used to create new realms and populate them with parents
	  when a new library is created: see config/README for
	  details.
	- Config::_substitute(), which expands sequences of the form
	  ${foo}, now does not expand such sequences if they are
	  double-dollar quoted, as $${foo}, but instead simply
	  discards the leading dollar sign.  This allows a literal
	  ${foo} to be passed through for subsequent expansion,
	  e.g. by the code that interprets the realmOnNew.*
	  configuration directives.
	- Configuration directives may now be preceded by whitespace,
	  which is ignored.  (This is useful for using indentation to
	  convey the structure of a set of realmOnNew.* directives.)
	- In the default configuration, facets are no longer displayed
	  for non-target tabs such as identities and categories.
	  (They are always empty, so having this turned on was just
	  displaying a bunch of headings.)

2.04  Thu Mar 17 17:25:59 GMT 2011
	- In the base configuration, add the new field pqfPrefix (just
	  after all the cclmap_* fields).  This is already supported
	  by the SP and Pazpar2.
	- Fix bug #4058: the "add new fields" section of the edit page
	  is displayed whenever the full record display is turned on,
	  not only when it's been made visible by the Show All Fields
	  button.
	- Fix bug #4060: add targetOrigin field to the searchable
	  profile, just after serviceProvider.
	- Fix bug #4067: add cclmap_jt field to the searchable
	  profile, just after the other cclmap_* fields.

2.03  Wed Feb  9 12:48:24 GMT 2011
	- Fix the new Submit Changes button, which appears near the
	  top of checklist.html, to actually work when it's made to
	  appear (by setting submitPosition to "top" or "both") -- in
	  2.02, it was displayed but inactive.
	- Z39.50 target testing in ztest.html now uses the query
	  "water" by default instead of "a".
	- Z39.50 target testing may be configured to use a query
	  specified by the new "z3950TestingTerm" directive.
	- Z39.50 target testing may be overridden on a per-target
	  basis to use a query specified by the new "testingTerm"
	  property.
		(These last three fix bug #3990.)

2.02  Mon Feb  7 16:16:38 GMT 2011
	- layout.mc correctly renders page titles (both <title> and
	  <h1>) when some components are blank -- previously,
	  extraneous separators were still included.
	- New configuration directive submitPosition can specify that
	  the Submit Changes button on checkbox.html appears at
	  "bottom" (the default), "top", "both" or "neither".
	- Sublists in reports (e.g. the lists of libraries in
	  report-libraries-by-resource.csv) are now sorted
	  alphabetically rather then listed in Torus-native order.
		(These changes allow us to close bug #3951, regarding
		 issues in the OhioLINK Admin Console.)

2.01  Thu Jan 20 12:24:51 GMT 2011
	- Add new multi-line fieldMaps field to searchable records,
	  visible in brief record by default.  Includes help text.
	  Fixes #3875.
	- Edit pages display the "Remove override" checkbox only when
	  there is a base record.  Fixes bug #3937.
	- The old mkdist.sh placeholder script has been removed.
	- When running bin/torus-proxy.rb, the host to forward to may
	  be specified on the command-line.  (If omitted, it defaults
	  to mk2.indexdata.com, as before.)
	- Use consistent capitalisation of MKAdmin throughout.
	- Cosmetic tweaks to Help popups: background is paler yellow,
	  heading is very dark blue rather then black, heading panel
	  has round corners (just for Seb).

2.00  Thu Dec  2 16:45:23 GMT 2010
	- Add new log-level NOCACHE.  Logging about absence of cache
	  is now at the new level NOCACHE rather than CACHE, so that
	  these rather unexciting messages can be silenced while still
	  seeing messages about actual caching.
	- Logging out now goes to the Admin Console front page rather
	  than the top level of the host (which is usually the
	  Masterkey metasearcher).  Fixes bug #3590.
	- Remove unused Masterkey::Admin::siteName() method
	- Discard unused $siteName parameter from
	  Masterkey::Admin::new() and new_with_session(), and from
	  Masterkey::Admin::Report::new(), and simplify all
	  invocations.  In some cases, the simplification is
	  significant, as the old code was jumping through some hoops
	  to obtain a suitable value to pass as $siteName.
	- Nomenclature in the UI and documentation (and in the code
	  and comments) is now more consistent: the old term "subsite"
	  is dead, and "tab" is used uniformly.
	- The old css.subsite configuration property is renamed
	  css.tab.  (The old property is also still recognised for
	  backwards compatibility.)
	- Links to tabs are now generated from the tab.<N>.tab
	  properties.  tab.<N>.subsite is also still recognised;
	  although it is deprecated, it takes precendence over
	  tab.<N>.tab if both are provided.  This is so that existing
	  applications which override the default configuration by
	  means of tab.<N>.subsite directives do not have that
	  overriding ignored becasuse of the default configuration
	  using the newer form.
	- Previously, and rather mysteriously, the tab-name was
	  internally known as "config".  This is now changed
	  throughout; actas.html accepts a "tab" argument rather than
	  "config".  This and previous entries address resolve bug
	  #3413.
	- Rename the class Masterkey::Admin::Torus::Record to
	  Masterkey::Admin::Record, as it is not conceptually linked
	  to the Torus.
	- Add new abstract base class Masterkey::Admin::Torus.
	- Rename the class Masterkey::Admin::Realm to
	  Masterkey::Admin::Torus::RealmBased, to reflect its status
	  as a concrete subclass of the abstract Torus base-class.
	- Rename the class Masterkey::Admin::Torus to
	  Masterkey::Admin::Torus::OldStyle, to reflect is status as
	  a concrete subclass of the abstract Torus base-class.
	- When editing records, removal of no-longer-needed overrides
	  is now done by means of "Remove override" checkboxes rather
	  than clumsy and error-prone onblur actions when leaving a
	  cleared field.  Fixes bugs #3434, 3643, 3544 and 3645.
	- Add new TORUSOP log-level.  This logs API-level operations
	  invoked on Torus objects, whereas the existing TORUS
	  log-level logs HTTP methods and URLs invoked on Toruses.
	- _notify_torus_change() now invokes _get2() rather than
	  _get() on the fetchAfterUpdate URL, bypassing the cache.
	  That's important because the point of this call is not to
	  obtain a (possibly cached) value but to tickle to Torus at
	  the other end, typically to force it to re-fetch parents.
	- Multi-line values are now displayed on multiple lines in
	  web/htdocs/single.html.  Fixes bug #3832.
	- Cosmetics of single.html slightly improved.
	- enableMemcachedTorus is turned off by default, largely
	  because of the recent introduction of caching within the
	  Torus itself.
	- Add new test-script, t/Masterkey-Admin-Torus.t, which runs
	  through a script of Torus API operations against a
	  known-good Torus verifying that the data obtained is good.
	- Reverse order of arguments of $torus->record(): this now
	  takes $realm and $id in that order, to match other Torus
	  methods such as add() and delete().
	- Fix yet another _notify_torus_change() bug: when caching was
	  turned off, the "fetchAfterUpdate" URL was not fetched.
	  Ugh.
	- Add support for new configuration elements: realm, authRealm
	  and login.<NUMBER>.authRealm.  These supersede the more
	  cumbersome and less flexible torus, authTorus and
	  login.<NUMBER>.authTorus, facilitating new functionality
	  such as library-level sibling toruses with differing
	  parents.
	- New program, bin/torus-proxy.rb, is provided so that we can
	  test the use of realm-based toruses before the Torus itself
	  supports them natively.  This rewrites /realm/ requests into
	  corresponding /torus/ requests and forwards them to a Torus.

1.36  Mon Nov  8 16:56:19 GMT 2010
	- Remove menuHTML directive from cat-sites.config -- this
	  unwittingly introduced a dependency on a file that is not
	  included in the distribution.
	- Make categories field visible by default.  Add editType for
	  categories (slightly different at consortium and library
	  levels, as they load the available options from different
	  places).
	- In "searchable" records, the zurl, urlRecipe, transform and
	  medium fields are visible by default.  Fixes bug #3792.
	- Add each comma-separated category as a separate facet value,
	  rather than adding the whole string as a single facet value
	  with embedded commas.
	- HTML generated for facet links uses the "=" operator rather
	  than "==" for categories, since in general the field value
	  will be a comma-separated string containing multiple
	  categories.  This and the previous point together fix bug
	  #3817.

1.35  Wed Oct 27 15:05:25 BST 2010
        - New field 'Full Text Target' - can be set to YES/NO/PARTIALLY
	- MKAdmin jump page states version of Masterkey::Admin module
	  in use.
	- Support for category tabs:
	  - Add Torus profile category.torus-profile
	  - Add category-type configuration include/cat-sites.config
	  - Add specific tab configurations cat.config and lcat.config
	  (For some reason, the home-page help files were already here.)

1.34  Mon Oct 18 12:18:42 BST 2010
	- Remove the obsolete useTurboMarc field from the "searchable"
	  profile -- this now always assumed to be on, as there is no
	  reason for Pazpar2 not to use the more efficient MARC-in-XML
	  representation internally.
	- In the dropdown for the Transform field, reduce the list of
	  available transforms: get rid of the non-turbo MARC21 and
	  OPAC formats, and simplify the labelling of those that
	  remain, the turbo variants.  Dump the redundant "CF"
	  transform, which was identical to "Connector Framework".
	  Add new Solr transformation.
	- The dropdown for the Medium Type field now offers all
	  currently supported medium types as per the Pazpar2
	  stylesheets (Niels Erik).
	- New fields added to the "searchable" profile:
	  termlistTermCount, termlistTermSort, preferredTarget,
	  blockTimeout (Dennis).

1.33  Thu Sep  2 17:20:12 BST 2010
	- All /images/* URLs are made relative, which leaves them Just
	  Working but removes the need for a special alias in the
	  Apache2 configuration.
	- web/htdocs/mc/link/actas.mc factored out of list.mc,
	  findmy.mc and checklist.mc.
	- Standard torusURL is now set to point to ${thisHost} in
	  config/include/include/defs.config
	- Add default help-text for "cat" and "lcat" tabs.
	- Add useThumbnail field to "searchable" profile.

1.32  Wed Jul 28 16:06:58 BST 2010
	- Fix top-level login redirection to work correctly with
	  destinations that do or do not begin with an explicit
	  "console/", for for sites are or are not located under
	  /console.  This was in v1.31 but was BROKEN: if you're
	  using 1.31, then upgrade immediately.

1.31  Wed Jul 28 14:29:14 BST 2010
	- Tab names are in authRedirect configurations are interpreted
	  relative to the current directory rather than absolute.
	  This means a configuration doesn't have to know whether it's
	  running at the top level of the site or within /console.
	- In configuration files, the macro expansion syntax $(NAME)
	  is replaced by ${NAME} for compatibility the with
	  Java-standard syntax used in other MasterKey components (the
	  Torus and Service Proxy).  For backwards-compatibility, the
	  old syntax is still supported, but it is now deprecated.
	- When parsing a configuration file, the symbol table is
	  initialised with the special macro "thisHost", being the
	  name by which the Admin Console was accessed -- so for
	  example if you contact
		  http://x.mk2.indexdata.com/console/admin/
	  then ${thisHost} expands to x.mk2.indexdata.com, so that an
	  application can define its Torus URL in include/defs.config
	  as
		  %set torusURL=http://${thisHost}/torus
	  This makes it possible to move application configurations
	  between hosts without needing to change the hostname in the
	  configuration.

1.30  Thu Jul  1 13:05:17 BST 2010
	- Use CQL's exact-equality relation (==) rather than
	  keyword-matching relation (=) or facet links.  Fixes bug
	  #3522.
	- Prime search boxes in my.html/findmy.html and
	  all.html/find.html with the existing query, if any, as with
	  checklist.html.  Fixes bug #3528.
	- Add several additional dependencies to the Debian packaging
	  for masterkey-admin, discovered while upgrading the truly
	  ancient version of MKAdmin on the ohiolink virtual server.
	  Of these, only libhtml-tagcloud-perl is strictly a
	  dependency; but because the others so nearly always are,
	  it's pragmatically simpler to express them as such.  They
	  are:
	  - libcache-memcached-perl -- in theory this is not required
	    because we run with memcache turned off with
	    enableMemcachedTorus:1 is not specified; but in practice,
	    we never do that.
	  - memcached -- in theory this isn't required even when using
	    memcachce, because we might be talking to a cache server
	    on a different host; but in practice, we never do that.
	  - libxml-libxml-perl -- required only when
	    XML::LibXML::Simple is in use rather than XML::Simple; but
	    that is always.  It ought to be a prerequisite of the
	    libxml-libxml-simple-perl package, but it's not because
	    that's built by the trivial dh-make-perl method.
	  - libfile-slurp-perl -- needed by XML::LibXML::Simple.

1.29  Fri Jun 25 17:32:21 BST 2010
	- Add support for the new "menuHTML" configuration item.  If
	  set (and if disableMenu or noMenuItems does not render it
	  moot), then this is a fragment of HTML that is displayed in
	  place of the usual menu items.  It can be used to radically
	  rewrite the menus.  (When this is in effect, the
	  disableHomeLink, nowords, menu.* and usermenu.* items are
	  all ignored.)

1.28  Thu Jun 24 15:26:39 BST 2010
	- After deleting a record from within a search-result, the
	  list that is displayed after the deletion remains narrowed
	  to the appropriate query.
	- New noMenuItems configuration element: keeps the menu panel
	  on the page (unlike disableMenu) but does not include any
	  actual menu items.  This is appropriate for tabs that do not
	  exist to maintain sets of records, such as the "account",
	  "laccount" and "reports" tabs.  Turned on by default for
	  these three tabs in the standard library.
	- Add "medium" field to searchable profile -- a dropdown with
	  options "Auto" "Web" Resources "Books" and "e-Books"
	  (provided by Niels-Erik).
	- Add checklist to menu for searchable sites.
	- Sorting of record lists is case-independent.

1.27  Wed Jun 23 12:30:28 BST 2010
	- Use SDBM for persistent session storage rather than GDBM,
	  which as it turns out is not available as a Macport, and has
	  been removed from the Perl Macport.
	- Masterkey::Admin::Facets and Masterkey::Admin::TagCloud
	  (hence HTML::TagCloud) are only used if the showFacets and
	  showTagCloud configuration elements are turned on.  This
	  avoids making an unnecessary dependency on HTML::TagCloud
	  for applications that don't use tag-clouds.  (This and the
	  previous change mean that MKAdmin once more works under
	  MacOS using ports.)
	- _notify_torus_change() now no-ops if caching is turned off.
	  Fixes a bug that prevented editing when caching is off.
	- Configuration documentation includes a note on
	  MAconfigpath.
	- When editing records, pseudo-fields named as 'ignored-*'
	  (generated by multi-select fields) are not committed.  They
	  do no active harm, but their existence in data is
	  confusing.
	- Report "No records found" rather than "Records 1-0 (of 0)";
	  other improvements to formatting.
	- Use <div> to contain facet lists rather than <span>, so they
	  can be styled.
	- If jumping straight to a specific page when not logged in
	  (so that the just-in-time login page is displayed), use
	  $m->return rather than vanilla return, to get right out of
	  the Mason component rather than just out of the eval{}
	  block.  This make JIT login work again -- it was broken a
	  while back.
	- Truly appalling hack: due to an earlier bug (fixed in the
	  clause above), some empty field have got populated with
	  strings of the form "HASH(0x23fc33a0)".  We work around this
	  by spotting such fields and not setting a value for them.
	- Start refactoring _set_field(), whose code has become too
	  complex due to the need to work with both XML::Simple and
	  XML::LibXML::Simple.
	- Increase max. pagesize to 20_000 targets - enough for
	  everybody. bug #3433
	- Downgrade required versions of Net::Z3950::ZOOM and
	  FreezeThaw.
	- Much improved navigation between pages of large search
	  results (including all-records lists): a list of up to 20
	  page numbers surrounding the current one is provided, with
	  links to the other listed pages.  The page-list is included
	  if the "showPageList" configuration element is on; it's set
	  in the standard include files.
	- Add tooltips to all icon links.
	- Improve logging of cache use.
	- Search box is now always included at the head of record
	  lists -- whether of available records, selected records or
	  the unified checklist.
	- Add A-Z list of links to all search-forms.
	- When the configuration element "showProvider" is on (which
	  it is by default for tabs that deal with searchables), an
	  additional column is included in result lists that shows the
	  serviceProvider field (e.g. "IRSpy", "EBSCO", "Wilson".)
	- If the editAfterAdd configuration element is set, the result
	  of adding a record from the list of those available is not
	  (the default) the complete list of selected records, among
	  which the newly added one is highlighted, but instead an
	  edit page for the newly added record.

1.26  Mon Jun 14 16:18:33 BST 2010
	- Add FreezeThaw as a prerequisite in Makefile.PL.
	- Add a column of "zoom in to children" buttons on inheritable
	  target lists such as produced by find.html and all.html.
	  Shows all selected targets that have the specified record as
	  their parent -- especially useful for base records such as
	  the EBSCO or Wilson masters in MKHome.

1.25  Wed Jun  9 15:40:25 BST 2010
	- Modify persistent session store to use GDBM instead of NDBM,
	  as the latter is apparently unavailable on Red Hat Fedora
	  Core 12, having been removed from the core Perl package of
	  which it is a part.
	- Add a -g option to bin/ndbm-dump-sessions to make it use
	  GDBM instead of NDBM.

1.24  Fri Jun  4 13:13:11 BST 2010
	- Bugfix: tweak syntax for Masterkey::Admin::Cache
	  instantiation.  (The indirect-object style used to work, but
	  apparently doesn't now that the module is required rather
	  than used.)
	- More rigorous test that would have found the bug in 1.23.

1.23  Fri Jun  4 11:59:58 BST 2010
	- When testing a candidate new record for uniqueness, use the
	  CQL v1.2 relation "==" for exact equality rather than the
	  obsolete CQL v1.1 equivalent "exact".  Fixes bug #3452.
	- Back down to the old, slow XML::Simple library when
	  XML::LibXML::Simple is not available.  This allows us to run
	  on Macs, where there is no p5-xml-libxml-simple package in
	  the ports collection.
	- Do not use Masterkey::Admin::Cache when caching is disabled,
	  otherwise Cache::Memcached is needed even when it's not
	  used.  Since there is no p5-cache-memcached in Mac ports,
	  this is also useful for running on Mac servers.

1.22  Tue May 18 11:18:54 BST 2010
	- Fix bug #3428 -- fields that are empty in the torus were
	  displayed as HASH(0x341b7a8).

1.21  Fri Apr 30 13:10:15 BST 2010
	- Adding, editing or deleting a record now results in all
	  cached data being flushed: this fixes bug #3409, which meant
	  that edits to records were not visible in the Admin UI that
	  made them.
	- Generalised the old notion of application-level and
	  system-level configuration directories to a configuration
	  path.  This is specified as a colon-separated list of
	  directories, like a Unix path.
	- The environment variables MAconfigdir and MAsysdir are
	  DEPRECATED (although still supported for now); instead,
	  MAconfigpath should be used.  To move to the new scheme, set
	  MAconfigpath to the values of the old variables (MAconfigdir
	  first) separated by a colon.
	- When MAconfigpath is used, MAsessiontag is now mandatory (it
	  was already recommended) as its value can no longer be
	  guessed from the last component of the single
	  application-level configuration directory.  It should be set
	  to a short string uniquely identifiying the MKAdmin
	  application among those running on the host.
	- Rewrite the introductory sections of config/README to
	  explain file inclusion and Apache2-level configuration.

1.20  Thu Apr 22 11:55:33 BST 2010
	- The all.html and my.html pages do not override a supplied
	  query with an empty one.  This makes the facet links work
	  correctly when invoked from a browse page as well as from a
	  search-result page.
	- Test-suite fixed to skip memcache tests if the server is not
	  running.

1.19  Fri Apr  9 15:30:08 BST 2010
	- Add more tests.
	- Better Debian build process.

1.18  Thu Apr  1 16:21:21 BST 2010
	- Use gzip compression when fetching Torus data.  For large
	  data-sets this makes a significant difference, e.g. a
	  961521-character response becomes 27613 characters, reducing
	  response size by 97%.
	- Add optional caching of Torus GET requests with memcached
	  (off by default)
	- Use the XML::LibXML::Simple parser instead of XML::Simple.
	  This is about ten times faster.  (The underlying XML parsing
	  inXML::LibXML is actually ten times faster, but then the
	  tree is walked to transform it, which still takes some
	  time.)

1.17  Mon Mar 29 12:14:30 BST 2010
	- Checklist forms are now posted to a specific action rather
	  than no action specified: this means that we no longer have
	  left-over GET query parameters in the URL that we POST to,
	  which was causing confusion when those parameters duplicated
	  those in the POSTed form.  Fixes bug #3342.
	- Add a new field, Secondary Element Set, to the default
	  profile for searchables.  Fixes the second part of bug
	  #3332.
	- Number of items shown on each page of large search results
	  can now be controlled by the new pageSize configuration item
	  [default 50].
	- Menu-bar can show show facets (if enabled using the
	  showFacets configuration item), a tag-cloud based on record
	  display-names (if enabled using the showTagCloud
	  configuration item) or both.
	- Fix redirection links to work correctly when running under
	  /console/.

1.16  Wed Mar 24 21:15:20 GMT 2010
	- Fix checklist.mc to use a POST form rather than GET, which
	  means that it can work on pages of arbitrarily many targets
	  without the URL getting too big for the server to handle.
	  Fixes #bug 3338.
	- Add paging of large result sets (Wolfram).

1.15  Fri Mar 19 13:45:07 GMT 2010
	- Record display pages, like edit pages, now honour
	  defaultFullRecord: in 1.14, only the short form of the
	  record was displayed, but the Show/Hide button was not
	  included.

1.14  Fri Mar 19 12:35:12 GMT 2010
	- Add defaultFullRecord setting, which is true causes all
	  fields to be visible/editable in record view/edit pages.

1.13  Fri Mar 19 08:08:00 GMT 2010
	- Fix a bug in Masterkey::Admin::Torus::Record::update() that
	  prevented that function from working.  This affected the
	  Administrator Details pages.

1.12  Thu Mar 18 11:38:50 GMT 2010
	- Add a site icon, favicon.ico, and a documentation file
	  explaining how to wire MKAdmin into Apache2 running on a Mac
	  as a port: see web/config/apache2.0/README.mac

1.11  Thu Mar 18 11:32:53 GMT 2010
	- Tweak cosmetics of base site in config/include.
	- Add support for OPAC record-syntax and transformation to the
	  default site dropdowns.
	- Add "secondary request syntax" field to default
	  configuration of searchable records.

1.10  Thu Feb 11 17:29:47 GMT 2010
	- Rip out the old masterkey-app-mk-admin package, which was
	  not used any more and in any case made obsolete by the Admin
	  Console configuration in mk2-config-demo/admin.  This means
	  there is now only one Debian package built, that of the
	  application itself: masterkey-admin.
	- Rip out the old stuff for generating Apache2 configuration
	  fragments, since we now don't need to generate any here: all
	  configuration is held elsewhere, in the applications' own
	  git modules.
	- Add an example Apache2 configuration fragment.
	- Update documentation of Apache2 configuration.
	- Add perldoc documentation to bin/ndbm-dump-sessions (partly
	  to appease the Debian packager).

1.09  Thu Feb 11 13:06:31 GMT 2010
	- The top-level heading on the front page can be specified
	  separately from the HTML title, using the frontPageH1
	  property.  Defaults to the value of frontPageTitle if not
	  specified, which is backwards-compatible.
	- Consistently use BiCapitalised spelling of MasterKey.

1.08  Wed Feb 10 14:42:38 GMT 2010
	- Tweak wording of base-site help pages.  You may feel that
	  this doesn't merit a whole nother release, and I will not
	  disagree with you, but our current workflow requires a new
	  Debian package for each set of changes that we want to put
	  on a production server, and the Debian packaging sort of
	  expects a new underlying package release.  (You can make a
	  Debian point release, but that feels like The Wrong Thing
	  when the change is to the underlying software rather than
	  the Debian packaging itself.  Yes, we did that between 1.01
	  and 1.02, but that was Bad.)

1.07  Tue Feb  9 17:49:30 GMT 2010
	- Honour the recordName and recordNamePlural captions.

1.06  Tue Feb  9 12:06:57 GMT 2010
	- Use the word 'target' nearly uniformly in place of
	  'resource'.

1.05  Mon Feb  8 17:23:46 GMT 2010
	- User record is not fetched when loading site.css.
	- The config/include files now consistently refer to
	  Consortium Administrator rather than global administrator or
	  senior administrator.
	- Clean up titles when editing administrator details.
	- Clean up some help texts.

1.04  Tue Jan 26 15:35:10 GMT 2010
	- Fix, I think, a long-standing but mysterious and
	  intermittent bug that would cause logins to sometimes be
	  ignored.  This seems to be due to the way session-database
	  filenames were determined, which sometimes resulted in
	  multiple applications inadvertently sharing a session
	  database.  This might have happened in one of two different
	  ways, depending on how the web-server was configured.  Both
	  are now believed fixed.  This addresses Index Data internal
	  bug #3212.

	Note that release 1.03 incorrectly announced itself as 1.02.
	That is, of course, fixed in this release.

1.03  Wed Jan 20 17:41:55 GMT 2010
	- Add "test" button to check that Z39.50 targets can respond
	  to requests according to configuration.
	- Remove configuration for NELLCO's USS Admin, OhioLINK,
	  Borrow Direct, MKHome, and other application-specific
	  configurations, now in their own application-specific
	  packages.
	- Configuration now looks both in the local configuration
	  directory and (if a file is not found or if %include <file>
	  is us) in a shared system directory.
	- Add conf/include directory, a system directory containing
	  base configuration for a "vanilla" application, which can be
	  overridden on a per-file basis by individual applications.
	- Change code that handles input, to generalise across editing
	  both records and adminstrative data.  (The old code is also
	  still used in some places, though.)
	- New editType values supported: select and multiSelect (see
	  config/README for details)
	- Fields provided on administrative data pages can be
	  specified by new user.fields property.
	- Change name of Debian package from masterkey-comp-admin to
	  just masterkey-admin (in accordance with the broader change
	  that is the elimination of all the masterkey-app-*
	  packages).
	- Add debugging function utf8param_wrapper() -- not currently
	  used, but useful to have around for the next time it's
	  needed.
	- Add ndbm-dump-sessions utility: built for inspecting the
	  session caches that MKAdmin maintains in /tmp, but useful in
	  other circumstances, too.  Gets installed in a bin
	  directory.
	- All tab-names are now hot, including the that of the current
	  one.  This is handy because you often want to click on it to
	  back to the "home" area of the tab, for example after
	  editing a record.
	- MKAdmin sites can run within the /console/ area of a virtual
	  host rather than needing to be at the top level (although
	  that still works).  This is useful when you want to let the
	  top level be a user-facing search interface, as with
	  http://cmc.indexdata.com/ for example.
	- Show/Hide links for esoteric fields are now proper buttons.
	- Refactoring of some HTML::Mason components.
	- Various cosmetic tweaks.

	As the long list of changes suggests, this is a significant
	release.  We've jumped straight from 1.01 to 1.03, because
	interim versions of the Debian package, built while these
	changes were being incrementally added, used 1.02.* version
	numbers.

1.01  Fri Aug  7 14:11:21 BST 2009
	- Tweak UI appearance.
	- Changes to OhioLINK configuration.

1.00  Wed Aug  5 14:59:48 BST 2009
	- First version released in a packaged form.  Prior to this,
	  deployment of the software was by updating CVS archives on
	  the live hosts; from here on, we are making and installing
	  Debian packages.

0.01  Fri Jun 13 12:31:18 BST 2008
	- original version; created by h2xs 1.23 with options
		-X --name=Masterkey::Admin --compat-version=5.8.0 --omit-constant --skip-exporter --skip-ppport

