See also TODO.txt

Version 0.7.8:
  * Introduced the "favicon", resched.ico.  Individual sites can
    of course customize or replace this icon.
  * create-tables.pl no longer creates the deprecated plain-text
    password field, only the hashedpass field.  The password field is
    FOR NOW still supported, for backward compatibility, but sites
    should go ahead and fill in the hashedpass fields for all users,
    because cleartext password storage will become unsupported in a
    future release.
  * Cleaned up a bunch of backslash-intensive string quoting in
    auth.pl, for improved code legibility and maintainability.
  * Also cleaned up some of the backslash-intensive quoting in
    the code that shows a booking; it still needs more.
  * Added a variable (to config.cgi), show_booking_timestamp.
    If this is set, the code that shows a booking will now
    show the timestamp.
  * Enhanced capitalise() to correctly handle names like O'Reilly and
    O'Neal.
  * Released 2010 June 17.
Version 0.7.7:
  * Introduced sitecode.pl for holding site-specific code.  The main
    codebase will include hooks for some of this.
  * Moved site-specific aspects of name normalization into sidecode.pl
    and made some slight adjustments for Galion.
  * Added preliminary support for the Combine Rooms feature (bug 199).
    Note that if you are upgrading from an earlier version, you will
    need to add the combine field (tinytext) to the resched_resources
    table before you can use it.  The field holds a comma-separted
    list of the the record id numbers of the other rooms you want to
    be able to book together with the one in the current record.
  * Fixed the Choose Resources & Dates list to be generated from
    include::categories (previously it was hardcoded).
  * Introduced some (technically redundant) clarifications to the
    blackonwite stylesheet to compensate for bugs in IE7 (probably
    also IE6) that were causing illegibility.  I believe this makes
    the thing mostly usable with IE7, though getting the AJAX-based
    "Quick" feature to support IE is still on the TODO list.
  * Repeat the default alternate stylesheet at the end of the list
    of alternatives, so that IE6/7 will give it priority.  This is
    still far short of real alternate stylesheet support, but hey,
    it's not my fault you're using an old version of the worst
    browser available.  At least now IE7 users will have *some*
    flexibility when it comes to visual styling.  Incidentally,
    this workaround probably violates the spirit of some RFC or
    another, but it doesn't seem to bother Gecko.
  * Released 2009 April 20.
Version 0.7.6:
  * Introduced the nonusers variable, to allow the site
    admin to customize which special names resources can
    be booked for that won't count toward usage stats.
  * The "available" link (shown when a booking is done
    early but has no followup) now indicates the time
    that the resource became available.
  * The capitalise routine now correctly handles roman
    numerals up through VIII (if they appear as a word
    by themselves, not embedded in a name).  Is this
    enough, or should it go clear to Louis XVI?
  * Initial support for hashed passwords (md5_base64).
    This adds Digest::MD5 to the list of required
    modules, but it's worth it.  If a user's record
    has the hashedpass field set, this is checked
    instead of the password field.  It is recommended,
    that you clear the password fields of all user
    records to NULL after setting the hashedpass values.
  * Note that if you are upgrading from an earlier
    version, you will need to add the hashedpass field
    (tinytext) to the users table before you can use it.
  * Released 2009 February 16th, and also deployed in Galion.
Version 0.7.5:
  * Changed the default stylesheets.  In Galion this means
    children's-room computers are now more visually distinct from
    adult-department computers, which will be important with the
    categories we will be using now.  Of course, any other
    site will probably want to edit the stylesheets anyway.
  * Added the flags field (tinytext) to the resources table.
    NOTE:  if you upgrade from a previous version, you need
    to alter the table to add this field.
  * The R flag will mean "this resource is a meeting room".
  * The X flag will mean that the resource should not be
    included in automatically generated lists, e.g., in the
    sidebar.  So, for instance, if you have a phony room in
    your practice zone that you use for testing the software,
    you can get it excluded from the sidebars by giving it
    this flag.  Similarly, if you don't have categories set
    up, you can stop a certain resource from appearing under
    Today and These Same Days by giving it the X flag.
  * All other characters (as flags) are reserved for now:
    lowercase letters for site-specific use, and all
    other characters for future use in the main codebase.
  * Updated isroom to look at the R flag.  (Previously the
    list of room resources was hardcoded.)
  * Changed out the hardcoded rooms-related parts of the
    sidebar to take advantage of the above generalizations.
    So now if a site sets the R flag on their room resources,
    these parts of the sidebar are automagically generated.
    Adding the X flag as well causes exclusion.
  * Released 2009 January 21, and also deployed in Galion.
Version 0.7.4:
  * Updated the magic page titling to take account of
    the new categories system.  (Still need to do the
    isroom stuff, though.)
  * Fixed a minor bug in include::categories that the
    above work exposed.
  * Deployed in Galion.  Didn't bother with a public
    release of this version, because I just did 0.7.3,
    and there'll be more changes coming anyway.
Version 0.7.3:
  * Fixed a glitch in RELEASE.txt so that the public demo
    will be put back in working order after each release.
  * Fixed an obscure bug (198) that triggered when a booking
    was cancelled after it had been finished early and
    a followup booking placed, wherein the followup
    booking became orphaned (and thus invisible), which
    caused problems.  For now you just get an error message
    if you try to do this, because I can't think of a
    legitimate use case for wanting to cancel a booking
    that has a followup.  If someone actually needs to be
    able to do that, it can be changed to clear the 
    isfollowup field on the followup booking, instead
    of giving the error message.  The code to do that
    would go where the error message is now.  But unless
    someone asks for it, I don't see the point.
  * Galion only:  added booking guidelines link to
    the sidebar.  This was done via the existing config
    mechanism for adding things to the sidebar, so it
    has no impact for any other site.
  * Did some much-needed refactoring on the stats gathering
    to get it into a more maintainable state, so I can
    work with it better.  (This is in preparation for
    making the stats that can be gathered more flexible.)
  * Introduced the categories variable, which is now used
    for subdividing the statistics, and in the sidebar
    under Today and also This Same Day / These Same Days.
    The default is for each resource to be its own category,
    which will do fine if you have only a very small number
    of resources.  Larger installations will want to
    specify categories.  Added the variable to config.cgi.
  * Released publically 2009 January 16th.  Held off on
    Galion deployment because it was Friday.
Version 0.7.2:
  * Fixed a number of markup issues per validator.w3.org
    recommendations:
    * Added xmlns attribute to html element.
    * Fixed a couple of malformed comments.
    * Changed a span to a div in several places so that the
      block-level ul element would be allowed inside it.
    * Got rid of all instances of the nobr element, which
      is not defined in xhtml.  Replaced with a styled class.
  * In the course of those modifications, I banged into the
    "annoying \"escaped\" quotes" issue several times and
    refactored to a more maintainable style.  More of this
    still needs to be done.
  * Changed script tag from self-closing to paired open/close
    style.  This is theoretically incorrect (it's an empty
    tag pointing to an external script file via src attribute),
    but it appears to be necessary for MSIE support.
  * Speaking of which, MSIE now _partly_ works.  For full
    MSIE support a legacy stylesheet is needed and maybe
    some updates to the AJAX stuff.
  * Released publically and deployed in Galion, 2008 Aug 29.
Version 0.7.1:
  * removed FormInput.pm, which was no longer being used
    by anything.  (See the note in 0.7.0 about why.)
    I am pretty sure that's finally the last of the old
    Class::DBI stuff.
  * Created RELEASE.txt with notes on doing a public release.
  * Deployed in Galion, 2008 Aug 26.  This version was never
    released publically, because it didn't have enough
    changes over 0.7.0 to bother.
Version 0.7.0:
  * Removed DBConfig.pm, which was no longer being used by
    anything.  (Actually, I think DBConfig.pm and Auth.pm
    may have only ever been used by the 'events' stuff,
    which is no longer even used in Galion and was never
    a part of the public release in any case.)
  * Removed Class::DBI from the list in INSTALL.txt,
    since it was only needed for the aforementioned
    removed stuff.
  * Added the ils_name variable, which is used in two places
    (both having to do with aliases -- the canonical name
    should be spelled the same way as in the ILS).
  * config.cgi now displays the variables in a logical
    (rather than alphabetical) order.  Also, most of the
    included stylesheets now put a visible border between
    them, so that the user can more easily tell where the
    explanation for each one ends and the next begins.
  * Made time_zone a variable (previously it was hardcoded).
  * Corrected a statement in TODO.txt regarding what would
    be needed for Postgres support.
  * Released 2008 August 5 (yes, two releases in one day).
Version 0.6.9:
  * Added the misc_variables table, for storing variables that
    are specific to a particular site.
  * Added the getvariable and setvariable routines to db.pl
  * Added config.cgi to make it easier to set up these variables.
    The sysadmin can always chmod -x it if he's worried about
    users messing it up.
  * Added support for the following variables:  sysadmin_name,
    url_base (but, ajax.js still has it hardcoded), and
    sidebar_post_today
  * Removed Auth.pm, which, as it turns out, nothing is still
    using at this point.
  * Added the auth_by_ip table, with support in auth.pl
  * Updated INSTALL.txt to account for the above changes.
  * Released 2008 August 5.
Version 0.6.8:
  * Factored the AJAX javascript out to ajax.js, in preparation for
    working in the forum software version's improvements (e.g., to
    support MSIE).  Did not actually do that yet, this is just a
    preparatory step.
  * Added INSTALL.txt with basic install instructions.  These have
    not yet been tested but should be a real good starting point.
  * Released 2008 August 1.
Version 0.6.7:
  * Removed %fieldname from include.pl (a holdover from the
    inventory tracking tool, which somehow got carried over,
    discovered when I was sanitizing the resched code for
    public distribution).
  * Removed some things that were highly specific to the Galion Public
    Library, in preparation for public release.
  * Released 2008 July 31.
Version 0.6.6:
  * Fixed a long-standing bug in usersidebar that was causing
    the This Same Day section to appear whenever the date
    being viewed defaulted to the current date (by not being
    specified in the query args).
  * Deployed 2008 July 24.
Version 0.6.5:
  * Made houroptions put "am" on morning hours, per the request
    of the downstairs staff, see bug 187,
    http://localhost/bugzilla/show_bug.cgi?id=187
  * Changed the list of links under This Same Day / These Same Days.
    Instead of listing individual resources (which you can get
    anyway by clicking the column headers) it now lists only the
    broad categories.  This makes the list considerably shorter,
    which pulls Today above the fold in most cases.  See bug 167,
    http://localhost/bugzilla/show_bug.cgi?id=187
  * Deployed 2008 July 21.
Version 0.6.4:
  * The table is now preceded by a line that tells the current
    time on the server.
  * added washbookingrecord() to db.pl to clear up persistent 
    bug wherein fromtime_datetime and util_datetime didn't
    get cleared out of a record before updaterecord was called,
    resulting in error messages about not being able to update
    the non-existent field.
  * Deployed 2008 June 27.
Version 0.6.3:
  * When a booking is created, the bookedfor name _as typed_ is
    preserved in the notes, in parentheses, if it does not match
    what actually goes into the bookedfor field (e.g. due to an alias).
    http://10.0.0.21/bugzilla/show_bug.cgi?id=162
  * Adjusted the wording in a couple of error messages.
  * Updated handleResponse to call retrieveupdates() if it gets
    an updatecount element in the response.  Note that the retrieveupdates()
    function is NOT defined in include.pl, as it might be different depending
    on the page that is being updated.
  * If dynamic-info.cgi gets an updates-p request, it checks for
    updates.  If there are any, it sends an updatescount element.
    Otherwise it sends a success element saying there are none.
    (No action needs to be taken in the latter case.)  Note that
    the only kind of new updates checked for at this point are
    new bookings.  Changes and cancellations are not considered.
  * When index.cgi generates a view page, it includes a suitable
    retrieveupdates function and calls window.setInterval to issue
    an asynchronous updates check request every two minutes.
  * The net result of all that is that if a new booking is
    created for one of the resources that you're currently
    looking at on a view page, within two minutes you'll
    get an updated view even if you don't do anything.
    http://10.0.0.21/bugzilla/show_bug.cgi?id=165
  * Deployed 2008 Mar 18.    
Version 0.6.2:
  * Fixed a bug in frequent user lookup that was causing no records to be
    found when restricting to certain resources (as opposed to "anything").
  * Added meta-counting to frequent user lookup, which is useful when
    you're looking up people who booked at least 1 times (e.g., for
    statistical purposes).
  * Added link in the sidebar to the QuickNet control facility.
  * Deployed 2008 Mar 07.
Version 0.6.1:
  * Added funwithfont.css, which uses different fonts for different resources.
    This is intended solely for my own use, since I normally keep page colors
    disabled, so I otherwise miss the benefits of the new style system.
    Note that many of the fonts it uses are obscure and unlikely to be
    installed on other systems, but they are available on my workstation.
  * Fixed a bug in usage stats gathering.  (It was failing to take account
    of the added internet station and the accompanying renumbering.)
  * When a booking is successfully extended, a redirect header is issued
    with a thirty-second delay, so that somebody won't walk up to the
    computer minutes later, hit reload, and extend the booking _again_
    without meaning to do so.  (If they _intend_ to extend it again, the
    extend link should still be there.)
  * Fixed extendbooking to kludge %input better so that the correct day's
    table is displayed if a non-today booking is extended.  (I was noticing
    this when extending computer class bookings.  I suspect none of the
    other staff were seeing it, because it's a real corner case.  Anyway,
    it's fixed now.)
  * If a name _has_ aliases, this fact is displayed on the booking edit
    form, linked to an alias search that will display them.
    http://10.0.0.21/bugzilla/show_bug.cgi?id=159
  * Deployed 2008 February 22.    
Version 0.6.0:
  * More double-quote refactoring.
  * Improved the alias search so that it finds more results.  In particular,
    it now always does a substring search (rather than trying an exact match
    search first and stopping if successful).  Also, it looks in the canon
    field, as well as the alias field, and unifies the results.
  * Refactored search-results generation out to a subroutine, searchresults,
    to get that logic out of the big elsif($input{foo}) chain.  There are
    some other things too that need to be refactored out of there to their
    own subroutines, but that was the first one.
  * Refactored alias updating out to the updatealias subroutine.
  * Moved isalias, dealias, normalisebookedfor, and capitalise into include.pl
    As a result they are now in the include:: namespace, but also they are now
    accessible to dynamic-info.cgi
  * showbooking in dynamic-info.cgi now normalises (etc) the bookedfor field.
  * Implemented AJAXified done-early feature.
  * Followup bookings now have the name normalised and dealiased.
    This was neglected previously.
  * Added a couple of testing options to the Special Testing Zone.
  * Cleaned out some old debugging cruft that's no longer needed.
  * Cleaned out references to stylepics, which is no longer needed since
    the stylesheet overhaul.
  * Booking search results now use resource classes (res16 etc),
    so they get the styling.  I added styles for the practice zone
    resources.
  * Deployed 2007 Dec 27.
Version 0.5.9:
  * Worked some more on the quoted-string refactoring (see under the
    changes for version 0.5.6).  Still need to do more of this.
  * Added UI for creating a new alias, in the Aliases sidebar section.
  * Added "mark this name as an alias" link next to bookedfor on the
    view/edit booking screen, if the name is not already an alias.
    (If it is already an alias, then that information is displayed,
    with a link, since version 0.5.3, and I didn't change that.)
  * Moved the sanity-check logic for aliases into a subroutine,
    sanitycheckalias, which is now called from two places.
  * Deployed 2007 December 19.
Version 0.5.8:
  * Based on feedback from Darlene, made Low Contrast the default.
  * Deployed 2007 Dec 11.
Version 0.5.7:
  * Jill wanted a lower-contrast variant of darkonlight, so I created the
    Low Contrast style.
  * Deployed 2007 Dec 11.
Version 0.5.6:
  * Totally overhauled the stylesheet system.  The new system, among other things,
    uses color to create visual cues for distinguishing different resources.
    It's also simplified.  There are four choices of style:  light on dark,
    dark on light, black on white, and browser colors.  Printing uses a variant
    of black on white with certain navigational features set to display: none.
  * Fixed a minor bug on the overview so the room name and first word of the
    bookedfor don't runtogether.
  * Replaced some "\"regular\"" double-quoted strings with qq["quote-like"] ones,
    to get rid of all the backslashing.  Still need to do more of this.
  * Fixed a bug in the authentication used by events.cgi
  * Created v2 of the blue down-arrow for extending bookings.  v2 has better
    contrast against the new blue-background styles for internet resources.
  * Deployed 2007 Dec 11.
Version 0.5.5:
  * Added leobardis (large print internet).
  * Deployed 2007 Dec 10.
Version 0.5.4:
  * Bookings search now looks under all aliases, plus the canonical name.
  * Fixed Did You Mean feature to ignore 'CLOSED', which has special meaning.
  * Deployed 2007 Nov 13.
Version 0.5.3:
  * Created sub capitalise to replace the ad-hoc split/map/join name capitalization.
  * Added a line to sub capitalise to bicapitalize McNames, MacNames, and VanNames.
  * When showing a booking, if the bookedfor is an alias, this is noted, with a link
    to the alias record.
  * Added alias record display, with an Edit link.
  * Added alias edit functionality, with ability to save changes, subject to sanity checks.
  * Added alias search to Search section of sidebar
  * Created Aliases section of sidebar, which for now just also has alias search,
    but this is where stuff like creating a new alias can go.
  * Deployed 2007 Nov 13.
Version 0.5.2:
  * Created the new resched_alias table and moved the contents of %alias there.
  * Altered sub dealias to use the resched_alias table rather than the hash.
  * Created sub isalias, using the resched_alias table, to replace other
    uses of the hash where dealias is not suitable.
  * Tested: frequent user lookup still works correctly.
  * Tested: booking the jukebox for an alias results in the canonical name
    being shown, as it should.
  * Fixed a long-standing minor bug that caused an extraneous message to be
    output when deleting a non-followup booking.
  * The view table cells now normalise and dealias the bookedfor names.
  * When search returns a booking where bookedfor is an alias, it now
    also gives the canon in parentheses.
  * Deployed 2007 Nov 7.
Version 0.5.1:
  * Added [another patron] to %alias
  * Not sure I ever deployed this version.
Version 0.5.0:
  * Fixed a bug in Automatic single-choice Did You Mean corrections.
  * Deployed 2007 July 27.
Version 0.4.9:
  * Made debug comments in usage stats only occur if $debug is >1.
  * Deployed 2007 July 25.
Version 0.4.8:
  * If there's only one Did You Mean choice, don't ask, just do it.
  * Deployed 2007 July 23.
Version 0.4.7:
  * Added some more entries to %alias.
  * Added multiple choice Did You Mean for single-word names per bug 77.
  * Deployed 2007 July 13.
Version 0.4.6:
  * Added first part of the "Did You Mean" feature, per bug 77.
  * Deployed 2007 July 11.
Version 0.4.5:
  * Added [another patron] to %alias.
  * Search was returning results in forwards chronological order,
    which now that we've been using the software for a while was
    starting to feel wrong, since all the first results were
    typically ancient history.  So I reversed it.
  * Deployed 2007 May 30.
Version 0.4.4:
  * Made search and frequent user lookup ignore case.
  * Made frequent user lookup normalize names (from "last, first"
    to "first last", remove parenthesized "IN" notes, and so forth).
  * Introduced %alias.  For the moment, frequent user lookup is the
    only thing that uses it.
  * Deployed sometime in 2007Q1 IIRC.
  * Redeployed May 29 with minor fix to accommodate changes in our
    network infrastructure: Use $ENV{HTTP_HOST} instead of
    $ENV{SERVER_ADDR} when composing the base URI, since staff now
    access this service through NAT.  Did not increment the version
    number, partly because I was in a hurry.
Version 0.4.3:
  * Notes icon is now shown for followup bookings that have notes.
  * Fixed a bug wherein deleting a followup booking left the parent
    booking with an invalid followedby field, resulting in the
    inability to schedule anybody else in that timeslot.  Now
    deleting a followup booking changes the parent record to not
    list a followup, so that a new one can be added if needed.
  * Deployed 2006 Nov 06
Version 0.4.2:
  * Changed sendnewbookingform (in dynamic-info.cgi) so that if the
    full durationmins is not available the default is to book
    intervalmins rather than durationmins.  This reduces the
    likelihood that the user will have to change the end time.
  * Modified the index to apply the class dateth or todayth to the
    date cells in the table header, depending on whether it matches
    the current day or not.  Styled dateth to stand out visually
    (black on yellow, with black border and yellow outline).
  * Deployed 2006 October 9 (yeah, two updates on the same day).
Version 0.4.1:
  * Fixed a bug in sendnewbookingform (in dynamic-info.cgi) that had
    prevented the Quick button from returning a usable form when there
    was less than durationmins available.
  * Changed showbooking (in dynamic-info.cgi) so that the done-early link
    is not shown in situations wherein the booking might extend beyond the
    table cell where it is currently shown.
  * Deployed 2006 October 9.
Version 0.4.0:
  * This was the first version robust enough that we used it for
    months with no changes.
  * Consequently, it was _after_ this version that I instituted the
    CHANGES.txt file.
