One new feature that went out was a preview version of the new interactive search interface. This interface will allow the user to pick a very specific geographic area in which to search via the Google Maps API. This interface can be activated via a layout but for preview purposes it can also be activated via the showsearch=1 GET argument.
It essentially adds an extra link next to the map which will freeze out the rest of the page and allow for a user to drag the map to the location they want to search in. A ring of a pre-defined list of radii is drawn over the map to aid the area selection.
In addition a list of place names from http://www.geonames.org/ has been imported and can list the nearby locations as well as providing a search interface to allow a user to enter a place name. The geonames.org data is pretty nice. It show all sorts of interesting things (for the first time I know where some of the offshore locations mentioned in The Shipping Forecast are!!), so the hardest thing is actually filtering out the stuff that people wont use! The search matches and nearby locations are display in order of "best match" and proximity to the centre of the map respectively. Using the population information in the geonames database we can show the results in a tag cloud format with more populated areas shown larger. This allows people to find the most likely/best known locations more easily.
The UI stuff was all implemented using jQuery with some Ajax callbacks to do the geoname queries. Moving the map code over to jQuery, despite the time delays to get going, was definitely worth while. All the data is stored as MySQL geometric types to allow for fast searching.
The new interface works pretty well but is still undergoing some tweaks.
The booking system under went another major architectural change in our ongoing efforts to make the system more flexible and powerful. The rather rigid underlying system of how rules apply to rates (and thus how extras, legals and other "applied" items) has been totally overhauled. In order to maintain backwards compatibility only minor surface changes are visible, but this change is a major step forward and will pave the way for discrete discounts and other time critical extras.
Previously all discounts, extras, payment profiles, reservation profiles etc. applied to rates which had a defined rate period. If you booked half way through a rate period, the applied item could not vary. Now the applied items can vary independently of rate periods which means there is no need to define unnatural/unnecessary rate periods (i.e. when the rate doesn't actually change from one rate period to the next!) just to have fine grained application.
Further changes to the booking system are coming up, including the discrete application of extras (i.e. an extra that only applies for a portion of the time the whole booking spans). The biggest problem here will be the GUI changes in order to present this to the user in an appropriate way. A flag will enable the old behaviour.
Some additional work has gone in to allowing various regional information to be extracted from the search and injected into page titles and meta tags. Several preferences allow for titles on listing pages to be changed when region data is present (with a fallback title for when it is not).
The Booking Search system introduced a few releases back now has it's usage tracked. New reports will be written to allow this data to be extracted.
Accommodation listings can now be hidden from search results. This allows those operating the system to hide a particular item (perhaps if sold?) and reactivate it later. The sale status of "sold" used to hide such items from the listing, but we had requests from user that showing their sold properties was often a good marketing ploy. The new controls now offer full flexibility.
Bulk Upload system
We also deploy a (for now) internal tool that we can use to perform Bulk Uploads. In the past, any data load required us to write (or modify) a script to perform the necessary work. As we expand and take on more clients the need for a generic interface has increased. We really should have done this a while ago but better late than never. We will keep this as an internal tool for now but a public version for our clients will be available at some point in the future.