Saturday, 27 September 2014

Enabling email notifications through custom form fields

Booki can be enabled to allow non-registered users to make bookings. By default, registration is enabled. This allows only registered users to make a booking. If the user is not registered, the default login page in WordPress is displayed.

This is all great but most times customers felt it was long winded, other times not everybody wanted to allow users to register in order to make a booking. 

Custom form fields

Using custom form fields, you can collect firstname, lastname and email during the booking process itself, eliminating the need to allow registration.

Note: While this allows you to take bookings from non-registered users, users booking this way cannot check their booking history or cancel their booking. Which is still one of the perks of registered users. If you can look beyond that, this is one of the most popular ways people are using Booki.

Setup is simple. Get on the "Form Builder" tab in the "Projects" page and make the following changes.
  1. Firstname field using the form builder. Needs to be a textbox field. Towards the bottom of the page select "The value of this field is the first name or first name and last name".
  2. Lastname field using the form builder. Needs to be a textbox field. Towards the bottom of the page select "The value of this field is the last name".
  3. Email field using the form builder. Needs to be a textbox field. Under "Validation - Basic constraints" check "Match an email".
After checking "Match an email", a set of new options will appear towards the bottom of the page. Select "Use this email field to send a one time notification to the user".

If the above is setup your customer will receive notifications. If you would like to test it, make sure you are logged out before making the booking. A user that is already logged in is considered a registered user and hence will follow a different set of rules.

Wednesday, 24 September 2014

Booki 2.4

While 2.4 does not bring any new features, it does bring a better experience. Below are some of the highlights in this release.

We've updated the backend to use the latest version of backbone. This is much better when moving forward and in general brings a much better experience.

When listing projects using a booki-list shortcode, which simply lists the projects in a grid as seen in our "Bed & Breakfast" demo, used to have some inconsistencies in the render on firefox. This has been fixed now and in addition when clicking a project item in the list, the individual project will show the project name.

This can be accomplished by adding enableitemheading="true" attribute to the booki-list shortcode. If your using a widget, just check this new option to enable it.

Time slots:
Time slots in booki adapt to the local time. For example if the time slots for today were 8:00am - 9:00am, 9:00am - 10:00am and 10:00am - 11:00am and the customer's local time when viewing the booking is past 11:00am.

They just missed the last available time slot. An error will show telling them there are no more slots left to book. They will just have to select a different date.

For the remainder of the changes, check our changelog.

So, is that it ? What about new features ? Oh, snap! Glad you asked.
This is only the beginning. Hopefully the next update will bring much larger features geared towards the transportation sector. Why settle for average when we can make it better! Stay tuned. ^^

Monday, 22 September 2014

Categories and sub-categories with cascading lists in Booki

When creating your bookings with Booki, cascading lists are quite useful when you have more than one list of items that are related i.e. categories and sub-categories.

For example, imagine you want to allow your users to rent a car based on the location. You present your user with a list of locations, then once a location is selected you show a car available in that location.

The idea is that you start from a broad list and then drill down into more specific lists, finally landing on one item, which reflects your choice.

In Booki this is possible to achieve through the Cascading Lists option that is available on every new project created in the "Projects" page. Select a Project and then head on to the "Cascading Lists" tab.

For the remainder of this article, we will be working on a typical 3 level car example:

First we start by creating the main list, which is "Year". This will be the first list the customer sees. When the year is selected, we will load sub lists automatically for "Make".

Create a new list and name it "Year". Check the "Is required" checkbox, which is optional and allows you to force the user to make a selection.

Next add each year to the "Year" list one at a time. Only the final list must include cost. Cost set on parent lists will be ignored. The "Year" list is the main top list, hence a parent or perhaps grand parent is the right term here.

We will add 2 years for this example : 1964 - 1965

If you would like to edit one of the items in the dropdown list, simply select it from the listbox and you will be able to edit it.

Note that we've not added a cost for items in the list above. Only the final list can have a cost. If a cost is provided on a parent list, it will be ignored.

At this point, the "Year" list is complete. Now it's time to create the "Make" list. We are going to list only 2 makes, "Ford" and "Mustang".

The "Ford" list will contain all Ford models for the year 1964, obviously Ford made cars in 1965 as well, but we're going to limit our example to two lists to simplify.

Note that we have set a cost. This is going to the final list hence cost is applicable and will add up to the total cost of the booking.

Now do the same for "Pontiac" which is our only other model we will be creating for this example.

Oh finally! We now have all the lists we need. We can now start setting up the relationships.As you can note from the sketch below, we've created 3 lists. Pontiac, Ford, and Year.

One important thing to keep in mind regarding the work we've done so far is that we've always maintained clear names for our cascading lists i.e. Year, Ford, Pontiac.

This is intentional as it will help greatly when we create the relationships as our relationships are easy to spot.

Now the relationships. Select "Year". And in the lists, select the Year 1965. This will enable the relationships dropdown. From the relationships, select "Pontiac". This means when year 1965 is selected, all items contained in "Pontiac" will get loaded.

Do the same for 1964. Select it and then select "Ford" from the parent list.

We have now created our lists. There is no limit to the number of levels deep a list can be related.

In the front end, your booking form will contain a "Year" dropdown list now.

Selecting a year will cascade and load a second list i.e. make where you select the model.

The selected item in the "Ford" list will add up to the total cost as we provided one for each of these sub lists.

What about just a regular list ? Oh, nice you asked.
If a list does not have a relationship, it will be listed on it's own and appear as a regular dropdown list. This means you can create as many individual dropdown lists as you want. The solution is not limited to just cascading lists.

Sunday, 14 September 2014

WPML Translations and Booki

Booki for WordPress is a booking plugin with several features to accommodate a variety of scheduling scenarios involving reservations and appointments.

It does not take much to realize that a large portion of WordPress downloads are from a non English speaking, international audience. So it is very important that a plugin follows some standard practices to allow translations.

All strings in Booki use the base translation function in WordPress. While this is the default in Booki, it wasn't enough for several reasons.

Not all users are developers and hence not well versed with *.mo/*.po files or poedit which requires a slight learning curve. This adds so much friction and is error prone as there is many a slip between the cup and the lip!

Secondly, there are several dynamic, user edited phrases in Booki that cannot be translated using this method. An alternate solution was required and many of our users were already using WPML.

Preparing Booki for translations

Once you have created a project, you will notice in the projects tab under the "Booking Control Label Settings" several strings you can modify for the particular project.

These dynamic strings along with the project name and project description, form builder field labels, optional labels, cascading list labels and items, and strings defined in the "String Resources" page will all appear as translatable strings in WPML string translations add-on.

The following mock-ups display a typical booking with minimal options a hair dresser might end up creating. Note how all labels and textual content is translatable.

Bookings can also include booking details, which contain form fields you create using the "Form Builder" in Booki. Note below a basic form created using Booki's "Form Builder". All field labels are translatable.

Booki meets WPML

To get started, you will need WPML and add-on Plugins i.e. the core WPML Multilingual CMS which is always required and the String translations add-on.

 Guide for installing & activating WPML is available on the WPML getting started guide.

A demo of Booki running under WPML
Default english :
Spanish :

After having installed WPML, if the projects in Booki were created before installing WPML, the dynamic strings aren't registered.

The first thing to do is load the page holding your booking form in the front-end. This allows any dynamic strings not registered to be registered automatically.

Next go in WPML "Theme and plugins localization" page and scroll down to the "Strings in the plugins" section. You will find all your plugins listed here.

Check "Booki" and click "Scan the selected plugins for strings". WPML will look for all static translatable strings and add them to WPML for translation.

You are now ready for translations.

Load the "String Translations" page. You will have this once you install the String Translations add-on for WPML. Select either the dynamic list of strings it found in Booki during the scan or the static ones.

The differences are denoted by "Name" field. Dynamic strings have a name field while the static ones don't.

There, that was easy,wasn't it? Happy coding!