Manual Bicyclerent


..this manual is currently still under construction, as I am adding new features while it is already being used on live sites in real businesses successfully... 

What is this component & plugin(s) for?

If you are running a (multilingual) bicycle rental business, with a minimum rental period of one day this is for you:

You can automate online-sales with availability check and PayPal payment process including IPN payment tracking and make use of a modern Ajax-based front- and backend for a nice user experience.

You are able to assign your bikes  - for any dateranges - to other stations than their "root" and thus optimize your business in case you have to follow seasonal changes or need to accomodate for peaks at some of your bicycle pool's pick-up places. 

You can assign your bicycles to circles, from which they will be requested, in case you want your stations to cooperate in a very flexible manner. The closest bicycle will do the "trip" to serve the customer by using Google Maps services. You can enable or disable this feature completely and assign as many circles as you like.

This setup has been chosen to accomodate what in reality happens in bicycle rentals: You don't need neither want your customers to use different pick-up and drop-off stations. Usually a bicycle will be rented and returned at the same station. 
Nevertheless, it could happen that you have stations close enough to "help" in case the correct size and type (which is more important than with car rentals for example) are not available where the customer is looking for it in the first place.
Of course it is still up to you to allow for different drop-off places than the bookings' respective pick-up, (there is a comment field where your customers can ask for this), in that case you should make use of the component's option to prevent from booking a choosable amount of days before and after each booking request to allow for transportation and maintenance. 

So the system should help map the "reality" better into your database for the normal "holiday type" of bicycle rentals than a system which assigns bicycles only to one big pool rather than different base stations like this component and then allows for definable interdependent drop-offs and pick-ups. With this component, you will get rid of unnecessary transports but still be able to allow bookings flexibly and precisely defined if you need so to enhance the number of overall bookings.

The component's main features:

  • Ajax disponibility check, data display and booking process
  • 3 stage checkout without page reload.
  • Flexible opening hours per week-day, opening hours exceptions (if usually a user can't book for example Sundays as start or end day of a reservation because the station is closed on Sundays, one can open exceptionally between unlimited dateranges and thus allow bookings on Sundays for say a cycling event nearby.
  • Bookoffs - if a station goes on holiday it will not be bookable for that daterange.
  • Include terms & conditions & station description into reservation email (can be different for each station and per language). Tag Syntax to be replaced on the fly with the reservation data. PayPal Button in Reservation Email also via Tag Syntax.
  • PDF Invoices (unlimited templates) with Tag Syntax to be replaced with reservation data on the fly. Custom Invoice Number and Tax percentage per Invoice possible.
  • Frontend plugin to display ajax booking form with on-hover region, station & bicycle type description, opening hours on the start & end day of the booking, availability check and message system to guide customers through the booking process.
  • Affiliate tracking system with option to adapt pricing (in percent of original price of bicycle type) if booked via an affiliate link.
  • Option to use PayPal online payment during check-out including IPN script to track payments.
  • "Distance-option" for booking process - if chosen to use in this way, the booking plugin will also look for bikes in the next stations within a certain mileage that are befriended (managed via backend who's working together with whom, multiple circles with multiple stations and the same station in different circles possible) and not only in the very station the customer chose. This helps those rental companies who are working with kind of closely located stations and the possibility to transport bikes between their stations in terms of minimizing the necessary transports while maximizing rental count.
  • Flexible pricing options per bicycle type from fixed per day to different prices depending on duration of booking, moreover daily exception prices per type and station can be noted, so in case you have seasonal fluctuations the prices can be exactly set to your needs. Station and affiliate specific adaptation of prices (in % of original price) are also implemented.
  • Excel Export of database entries (real excel archives using phpexcel classes) as well as browser print option. 
  • Availability Calendar to easily spot your bicycles' occupation.
  • If you need a different primary key start value (id is int auto_increment) for bookings or bookers to adapt the booking numbers to your existing invoice system you can do so with an according function coming with this component.
  • discount vouchers - unlimited number of vouchers with valid daterange and max number of uses options, percent of original price or fixed amount 
  • Station Map Plugin showing your station(s) on a google Map
  • Operator Plugin showing an operator his reservations when logged into front end to book
  • Ships with 3 languages by default (Engllish, German, Spanish) for component and for the booking plugin I got 2 translations in so far (English, German)
  • List of next week's bookings automatically send to an arbitrary list of email adresses (set under options) if you can set up cronjobs on your server

The component has been created with the requirements of a real-life bicycle rental station in mind, and thus is adapted to do this job well. It is not intended to work for all kinds of other rentals alike. Instead, it should get your bicycle rentals up and working in short time, if you have one or more stations with an unlimited amount of regions, stations, bicycle types and sizes or if you simply want to rent at one station.

The component has been tested on php 5.3 with mysql 5.5. You should make sure, you are using an adequate, up-to-date system!

Installation & Updates

The installation process works as usual using the Joomla! extension installer from the backend:

  • log into your backend (you need the rights to install new extensions)
  • go to Extensions -> Install
  • Click on "search file" and choose the .zip package (component & content plugin at the moment have to be installed separately)
  • Click on "upload and install"
  • if you're uploading the plugin, go to Plugins (content) ->plg_bicyclerentbooking and enable the plugin, too
  • Choose, if you also want to upload the bicyclerent tools zip package: This contains the mpdf and phpexcel classes which you would need for the pdf invoice generation and excel export of booking data. This package is about 13MB so make sure your Joomla! upload limit under the Site Configuration is set high enough if you want to make use of this. It is up to you, if you do not need invoice generation nor excel export (there are various browser print options, too without the need to install this large file package) simply don't install. The respective buttons for invoicing and export will simply not show in this case.


New versions can be installed over the old ones, you won't loose your database entries, thus.


Do not delete the old version before installing a new one if you would like to maintain your data!


Let's describe the component's options now which can be found as known from Joomla! in the top right of the backend list screens while using the component.

The first tab (Bicyclerent) offers you these choices: 

  • How should the disponibility ordering be queried? If you want your bikes to be randomly chosen, they will more or less equally wear over time but without guarantee - if you choose reservation count ascending the same effect but with more probability will be seen. If you want some to be used more than others to be able to achieve high resell prices for the not-so-much used ones, choose Database ID ascending or Reservation count descending. The first published version will also allow for a complete custom ordring column to be used, so you can reorder if needed at any time to use certain bikes more than others.
  • If you need more than a night to get your bicycles back in shape before your next rental, be sure to activate Bookoffs for Availability Check. You can enter the necessary days with each type (described later).
  • Station Changes offer the same option to allow for a number of days to be added when a bicycle is offered for a given period at another station than it's root. Here you need to evaluate, how many days you will need upfront and after the "changed" period to allow for transportation. (You can do this flexibly with each station change). These days won't be bookable.
  • Circles allow to look up bicycles not only in the requested station, but also in defined others, organizd in "circles
  • Missing in the below picutres are the options for the list of bookings automatically send via cronjob available with the latest release. Will add a new picture soon Cool here!
  • If you need so you can use different book-off times than for station changes within circles for bicycles ("How many days - yes, I will change this label before publishing the component.. Zwinkernd) to be transported between stations in case circles are enabled. (For example if you have very small distances between your stations in the circles you might use 1 day instead of 2 or 3 for the real station changes). The days noted here will have to be not booked as well as the "normal" reservation period up-front and after the booking period for a bicycle to be bookable.
  • You can decide on a minimum booking period - less won't be accepted.
  • You can decide if you want a certain percentage only as a prepayment instead of the full amount when a reservation is being made and get the remainder later. The PayPal amount will be adapted accordingly. "To pay on booking" lets you decide between 0 and 100%. With 0% even if PayPal is "on" under options the button won't appear.
  • A deadline can be activated for the above mentioned: If you want your customers to always pay 100% when a certain number of days is left only until the start day of their rental period you can use the deadline for prepayment option. If activated, it will get the days of the select list underneath and apply the prepayment percentage only if the booking is being made not closer than the specified days, if it's within that range it will make 100% of the due amount payable directly.
  • You have the possibility to change the date format shown in the plugin and for the reservation confirmation email (not shown above but implemented in the latest version) and choose from either Y-m-d or d-m-Y.


The "own access rights" tab is important for you, if you work with a large number of different stations, regsions, partners and roles who should be enabled to work on their own data but not to see all screens of the component or data:

.. you can assign users to groups within the component, independent of Joomla!'s ACL to make your life easy. Each screen can be accessed only by the chosen groups to which you have assigned Joomla! users (under the user rights menu in the component's menu). The users will only see their range of data, except for Joomla! super administrators who will always see and be able to work on all data. This works via "stations" and "regions" in this component, plus via general rights to see a submenu (called "screen" here, also). If you have assigned for example the screen option "Stations" to "Stations Leaders" but not "Station Employees", the employees won't be able to access the Stations screen, yet the leaders wiill.  

The actual assignment of users to groups will be done under the User Rights screen described later, here you do also the assignment to any existing regions / stations, - thus you can limit the locations out of which the respective roles will see data.

Note: For the bookings, bikes, stations, stationlist screens and most others the models of the component have been modified so the data really related to stations will only be queried regarding these rights. You can choose stations / regions under the User Rights submenu and assign them to users, so they can only see the database entries according to their rights. For the User Rights themselves, and for the following listed screens it is advisable though to only allow superadmins access, which is achieved by simply not adding the groups who should not have access to these screens under own component rights in the options.

Below is a recommendable setup if you are using the component's own user rights, Operators are the most restricted role in terms of which data to see - only those with their own Operator id in the database rows.

Station employees can not change things much, but they can see more data than an operator because they're not restricted to data with specific operator id, Station leaders can see and work with more screens but only with the data related to their assigned stations, region employees / leaders see more stations than station employees and superadmins are able to use any screen and function anyway: 

(Note: You will need to assign the users stations / regions under the User Rights submenu of the component!)

Screen Operator Station Employee Station Leader Region Employee Region Leader Superadmin
extra definitions            
station changes            
stations relations          
user rights          
opening hours exceptions      
invoice templates        
custom fields  not implemented not implemented  not implemented  not implemented  not implemented  not implemented 
station list            
alter table id start            
price exceptions            
Availability Calendar


The model for bookings has been added a function to check if the current user is an operator and in that case only show bookings with his operator id. This is a special role with usually less rights than the other roles provide. An operator should normally only be able to see and work with "his" bookings as he is not a station or region leader who is a more "general" manager and needs to access all bookings and some more things related to his locations.  

By default you can't assign operators screen rights other than for the bookings. If you need to, uncomment the according options in the config.xml file in the administrator folder of the package (on your server or simply reinstall after changing it locally). You will then be also able to assign Operators these screen rights.

Sounds complicated? If you don't need to restrict anything, because you do not have other people accessing this component and need to regulate who sees what, just leave this option deactivated!

I will explain this concept a little closer under the User Rights section!

The next tab under options allows you to customize the Google Maps integrations:

These settings will be used to help you find the distances between your stations (API Key), your station location exactly under "station" and decide on how static maps will look like that can be pulled into region and station description pop-ups in the frontend plugin. (more about this later).

The PayPal screen is pretty self-explanatory, in case you want to use the PayPal automation and payment features, you will have to provide the needed data in this tab. The component is not intended to offer all kinds of options - for bicycle rentals usually a one-off payment is needed only, so you'll find the basic settings here only for a regular "buy-now" button. The price of course will be calculated on the fly out of the type of bicycle, duration of reservation, operator factor (prices can be different in case the operator id is found in the url parameters or an operator is logged into the frontend to process any bookings himself) and chosen price calculation method (under "type" of bicycle).

The offline payment option can be used in case you want to offer a bank transfer to your customers:

Furthermore, the regular Joomla! ACL settings have been integrated but are usually not necessary to be changed due the component's own access rights:

This is useful though, if you want to for example not allow general access to backend components, but for the bicyclerent component. Then you can place the respective users into a Joomla! user group that won't be granted access to any except this component.

Frontend booking process

The reservation of a bicycle is done via content plugin:

Open any existing Joomla! content article or create a new and place the following plugin tag where you want the booking form to appear:


You can add more parameters: 

{bicyclerent:booking region=(.*) station=(.*) type=(.*)} 

... where you simply replace the (.*) with the integer id of the respective item (region, station or type) which you can find in the backend in the list or single item views.

The Plugin does not allow for the region to be omitted and only the station to be placed or only a type to be provided - you must go "from the top to the bottom", in the above shown ordering so if you for example want to preselect a station with the id 2 you would have to get the according id of the region this station belongs to from the backend, say this would be 1 and write: {bicyclerentbooking:booking region=1 station=2} . You can omit or also provide a type, so the customer can only choose from Region 1, Station 2 and Type whatever you have put here.

You can also use URL Parameters instead if you are linking to your booking page from elsewhere, the url needs to look like the following, then: 


where the your-booking-url-here could then for example be something like The last parameter is an operator ID (the one freely chosen in this case, not the database primary key as for station and region). The easiest is to direct your browser to the article you are using for the booking plugin and copy the url to use in such a link. You can do this with an "external link" menu type, too which is offered by Joomla! when you are choosing the menu type to link to your article with different parameters if you would like to use the same article in different ways for say different stations preselected.

The Plugin tag will be replaced by something like the following, depending on if a region, station etc. was provided or not (here simply {bicyclerent:booking} was written, as preselected values will be changed into hidden form fields and thus not be visible yet deliver their values: 

 When the user selects a Region, an Info button will appear, 

on hover the respective description will be shown (this is true for Station, Type and Extras as well - all of the descriptions are set in the backend with an editor-type field): As you can see a google static map appears which can be placed there with a plugin-tag-like syntax. More later about this in detail.

After successfully entering all necessary data of the first booking screen (here all shown fields need to be filled out by your customers) and pressing the Lookup Availabillity Button the user will be forwarded to the next screen in case a bicycle is available with the chosen specifications: 

Extras available at the station requested will be shown with their price, respectively and can be checked. The checked ones will be added to the total price in the next step.

The Opening hours will be - depending on the respective choice in the requested station's settings - textual "only" with 24hrs of pickup and dropoff times in 30min steps possible or parsed from your comma-separated input in the respective opening hour field in the station view into the select list of possible options. You will find a more detailed explanation under "station" in this manual.

In case there are any incorrect inputs (currently all fields except phone are required - next version will feature custom fields and the possibiliy to set required to yes or no from the backend) or no bicycle is available according to the choices, error messages will be shown as a modal overlay using lightface:

A meaningful message is shown in the same manner if the second formpage can't be shown because a) the opening hours of the requested station do not allow so (first or last day of rentals lies on a non-working day of the station) or b) there is no bicycle available according to the customer's specifications or c) any error on the server side occured.

In case everything is correct in the second booking screen then (the customer data from the form is with the exception of group and phone number obligatory), terms & conditions are checked also (which appear as a link showing the station specific terms & conditions in a pop-up) the last booking screen is going to be shown after the customer cllicks the booking button. All transitions between the 3 major reservation steps are being done via Javascript / Ajax mechanism so that no page reload is necessary. (Below - some dummy prices have been used, you will briefly see where to put real ones per bicycle type and how to choose between different pricing models).

If you have offline payments enabled under options the combination mentioned under options - offline payments - of .ini language file contents and bank details from the options screen will be shown in this last reservation step as well.

You can freely change all texts shown by changing the included .ini language files (English, German, Spanish included) or creating your own for any other available Joomla! language.

The PayPal button appears or not depending on your options choice for this.

Underneath latest versions will show a PayPal explanation link in the shape of a "secure payment" picture that opens PayPals own recommended link in this respect.

You can change the Button's Locale under Options -> PayPal. If you want to add a PayPal button to the automatically send confirmation email instead or additionally, you can do so by adding a tag to the email templates, later more on this.

Payment Tracking

Payment tracking via PayPal's IPN has been added, mainly to later add the funcionality to delete bookings which have not been paid during a certain period. As not all hosting packages allow for an easy setup of cron jobs, I am thinking about creating a plugin for this task as well.

For the time being the IPN script will check if the correct amount, currency etc. has been paid and in case all is valid it and successfully paid, it will note the paid amount in the paid column of the respective reservation for your convenience.

The Backend - Booking List

The typical entry point for your daily tasks will be the booking list which allows for several ajaxed tasks to be performed. Above the list of reservations (and for some other views) some charts have been added in the latest version, you will also see similar charts for some different statistics for the stations list and the operators list. Future versions might get some more of these.

 You can look up all details of a booking by clicking the details button on the left of the list (5):

You can change booked extras (and look up which extra has been booked by comparing the number in the list with the number of the listing of extras opening) by clicking on the pencil icon in the extras column. Save the changes (multiple extras are allowed) by clicking on the disk icon.

If you need to assing a different bicycle for a reservation number, you can look up the available bicycles by clicking on the pencil in the bicycle column (8), then click on lookup bicycles in the popup and then click on your choice to replace the previously booked bicycle. In case you have chosen a (different) station in the select list (1) you will get the list of bicycles available in that station. This comes in handy if a customer has chosen the wrong station for example and you need to quickly change without deleting the reservation and doing a new one from the frontend. The dates in (7) can be altered and will be considered when looking up available bicycles and of course applied also if there are no conflicting bookings on the chosen bicycle.

You can change the start- and enddate only, too (type the desired range into the according text box(es) (7) and click on the left on the button that says "apply dates") of the respective reservation. You can change the price, paid, customer name as well as note by altering them in the textbox/-area and clicking on the disk symbol underneath.  

Any of the changes will always be securely tested automatically for availability and correct station during the requested booking period.

If you choose to use the pdf invoice generation feature, you will have to download and install the mpdf zip package as well. From then, you can create unlimited invoice templates and after choosing one in select list (2) on the upper right of the filter field area click on the create invoice button to the left of each booking data.You will then be asked to type an invoice number in a pop-up window as well as a VAT tax percentage separated by a pipe | symbol. After that, your invoice will be created. You can replace almost all booking data in your templates so you have a very flexible system to create your invoices. More about the possible tags for booking data under pdf invoices futher down.

Backend - List Views

The typical list view allows you to set orderings (important for example to set the sizes ordering - as you would like them to appear in the frontend booking select list) and to have an overview over your respective items like bikes, stations, regions, types... :



When Clicking on a name of an item or checking the according checkbox on the left and then the Edit button on the top right under the menu bar you get to the single item views.


A region dataset consist of a name and description, the other fields are automatically assigned. 

You have the option (if chosen so under options, more about this later) to replace a plugin-like syntax with Google's Static Maps in each of the component's editor fields (multiple maps possible per item). The use of this is to make your life a little easier and not have to think about url-encoding etc. to place the actual necessary link.

The currently available arguments to override the default settings in the options are all included in the following tag example, you can change the order but remember to leave the space before adress (only 1 space) and to separate the arguments by the pipe symbol "|" :

{bicyclerent:map adress=.. |size_x=.. |size_y=.. | zoom=.. |type=..|float=..|margin=..}

In case you omit some or all of the arguments the settings in your options of the component will be taken.

The replacement with google static map will also be done in case you include the station info into your reservation emails


Before you can save a new station, you will have to create at least one region to assign it to. Use the drag and drop marker feature to get long and lat values for your station. This will be used for distance lookups if a bicycle has to be received from the closest (next) station in the circle (if this is enabled under options and the bicycle is not available at the requested station).


As you can see above, you can use the longitude and latitude of the map's adress OR the adress.

The coordinates are the best choice to make use of the feature to look up the closest bicycle to be rented, if you have circles enabled and a bicycle with the desired specifications can't be found at the station the customer needs it. Simply drag & drop the marker to find the adress & coordinates of your station if you have provided the component with your Google Maps API Key.

Name, description and region are pretty self-explanatory, but let's describe the other available fields as well:

The price factor is used to adapt prices to each station if needed: In general prices are being calculated from a bike type's settings. A station though can make a change in percent of that price, which is noted in this field: 110% makes it 10% more expensive if someone books the type in this station as noted at the type level for example (the type is the next chapter of this manual).

Parse opening hours into select list entries? This is to enable you to to decide wether you only want a certain range of select list options in your frontend booking form or a textual representation with all times from 00:00hrs to 23:30hrs in the actual select list independent of the free text you put into the "opening hours" textfields of each respective weekday.


If you want to let your stations work together in circles, so bicycles can be rented from "related" stations in case the requested station does not have the exact model requested available, you need to set up at least for those stations in circles all distances between them, in both directions.

A set is 2 stations always, you can look up the distance between them with Google Directions Service to make your life easier.

After setting up all distances (both directions! to make it work properly) you will have your distances list view looking something like this:


Now, in case you have enabled the circles under the component's options, everytime a bicycle is not available with the exact requested specifications, the plugin will first collect all stations that are in the same circle as the requested one, then start to look up available bicycles with the wanted features from the closest station in the circles to the further ones. Thus the closest available bicycle will be rented.

Bicycle Type

A bicycle type defines a number of important things like the price and price caculation method.

Remenber to first create the necessary sizes (new ones can later be added to this type as well) that will be shown for this type in the frontend select list for sizes of the chosen type to be able to save the new type.

The available price calculation methods are:

  • 7 days flexible plus fixed per additional day
  • 14 days flexible plus fixed per additional day
  • fixed daily price for whole reservation period

The first two options take the prices from day1 - day.. as long as they are before the chosen end of this period (7 or 14 days) and from than count the additional price per day.

The last one calculates the total price as fixed daily price times the number of bookings days. 

Holding ctrl key pressed allows you to choose multiple sizes that will be available with this type. 

A workaround for Joomla! not offering a method to translate custom components' editor fields will be added to one of the next versions of the component, so you can actually see the description in the frontend in the language the user is currently browsing your webpage.

Note: If you need station specific prices for the same bicycle types you can map them into 2 or more types with the same name into your database and make each type only available at the station(s) accordingly.
Example: You need station A to sell for 10 Euros per day, but station B for 8 for the bicycle type "aluminum race bike shimano 105". Create 2 types with these different prices and assign the according bicycles to these different types, choosing the corresponding type and station(s) under the bicycles submenu.

Price Exceptions

You can additionally add daily prices, if you need so to adapt for example for seasonal differences. The Price Exceptions Screen serves for the purpose of adding, deleting and altering these daily prices, which will be applied if the frontend booking plugin finds a requested daterange overlapping with something entered here for the type and station the customer is searching.

Select a type and station, a daterange and type your price (digits separated with a . not a , - so for example 8.50 is a valid daily amount) and click the save button. To delete any days from the list check the checkbox at the right of the to-be-deleted entries and use the Delete Checked button. You can toggle all checkboxes as well with the related button.


A size simply defines a name and will be related to a bicycle and type. I have chosen this setup (might look a little complicated first) to allow for different types to use different size names - as often in real life the sizes of your models will be different per type.


 A bicycle needs to by assigned to a type, so be sure to create the according type first and then the bicycle(s) belonging to the type. The type will define the bicycle's prices. You also need a size to define a bicycle, so make sure you have the corresponding size set up before creating your bicycle (although you can always change this later, but in a live system it can be a bad idea making you have to change a reservation or two because they had been wrongly set up in terms of their size first and the customer has mistakenly reserved a wrong bicycle due to that).



Station Change

The station change(s) of a bicycle are freely definable dateranges which allow for a bicycle to be bookable at another station than the one it is generally assigned to. In both front- and backend availabiltiy check functions are programmed to also look up the bike's station changes before allowing for booking or any kind of daterange change etc. 

This function helps those rental businesses who have more than one station and want / need to rent their bikes at more than one station during defined dateranges.

Example: You have 3 stations and during the summer period you want a number of bikes from station a in station b, because you usually have more traffic over these months in station b, but thereafter they should automatically be available (and physically there in real life) from station a, again. Assing the related bicycles to Station B in station-changes for the desired date-range. They will be bookable (plus the optional related book-off days) in station b for the chosen date-range, not from a (exception: if you have circles enabled they might be assigned though for a during this time nevertheless)


Operators are a special role in the component. They are  partners who can - (or not) see and change their bookings to some extend but should not be able to work on other things like bicycles, stations etc for a normal use case. 

An operator database entry has the following fields:

You can use the Operator id (freely choosable but must only contain letters, number, _ . - signs) to append to any url to an article with the bicyclerent booking plugin after a question mark for example like ?op_id=t5. If you have other url parameters, separate them each by &parameter=... 

The booking plugin will store the operator id and "assign" this booking to him, so you can easily track and filter from which partners your bookings are coming in. 

The other fields are mainly used to fill the oparator's adress data into the booking plugin when he is logged into the frontend - thus making it easier and faster for him to do multiple bookings after each other. Operators will also see a book again button to call the first page without page reload, which is not available to normal customers. 

PDF Invoice - create your own templates with Editor field and replace booking data with tag syntax on the fly. The language field here is only for your own orientation, so you know when you are wanting an invoice in which language you have written it - a template will always be chosen manually in the booking list screen to be created for a booking.


Availability Calendar

To quickly overview your bookings and availabilities per bicycle the Availability Calendar View exists in the initial release.

For future versions this could be a starting point for a "per day" manual assignment of bicycles by choosing a customer or providing new customer data and then clicking on the respective disponible slots. I have programmed a quite similar view for a pool management tool, already, so one of the future updates should contain this feature.

By clicking on the first column with the bicycle description, a modal 3-month availability calender, only for this bicycle pops up:

 Alter Primary Keys

You can change the start values of the Bookings and Bookers Primary Key fields (integer, auto_increment) if you need so.

Please be warned, that this is only for users, who know what they are doing!

Station List

Station List to quickly see what's to be done. From here you can also call a view "occupation" after choosing station and start as well as end date to see how many staff would be needed on a daily basis or export your bookings to microsoft excel.

..and a glance at the brief summary table "occupation":

Conversation - Choose Language, Station and be creative.. per language and station (or for multiple stations, or simply as a default if you have stations without specific set of conversations) you are able to customize each stations' confirmation email after booking, the terms & conditions text and the text of an email being send after successfull payment (tracked via IPN). Latest addition is a tag system to replace the tags with reservation data on the fly, so your reservation confirmation email can contain a customizable amount of the booking details wherever you need it. You will be reminded of the possiblities above the respective editor fields.

Discount Vouchers

Vouchers offer the possiblity to offer any number of flexible discounts to your customers or groups:

You can Choose a type of discount - percent of total price including the extras or fixed amount in your currency unit. Furthermore you can choose a valid from and a valid to date (if left empty the start or end date will automatically be valid, so if you only need an end date of a voucher just leave the valid from date empty), the number of available uses and you can alter the number it has been used from the backend as well in case you need so besides the discount code (numbers, letters and -_. are allowed). Each time a voucher is being used of course the used count will be increased by 1 automatically until the voucher reaches it's maximum allowance. In case Max Uses is set to 0 there is no restricition enforced in how many times the voucher can be used.

If you can set up a cron job calling /index.php?option=com_bicyclerent&format=raw&task=sendStationList&cpass=xxx where xxx needs to be replaced with the password chosen under options for this function, the system will send the reservations for the next 7 days periodically with your chosen timeintervall for the cron job to the list of email adresses noted for this (field to enter the emails is just above the password field under the component's options' first tab).

More Plugins

There are some more plugins available, currently:

  • Stationmap Plugin to show a Google Map of all your stations, you will need to have noted latitude and longitude from the backend for your stations to actually show - please refrain from using the plugin when you have not entered (see how easy it is by just dragging and dropping the marker in the backend station view) the lat and lon values. Use it like so: {bicyclerent:stationmap} or so: {bicyclerent:stationmap 1,2,3} in your Joomla! articles to either get all stations or only the ones specified by comma-separated database id's into the map. Zoom level will automatically set by Google optimally. If you want a different size than the default size specified with the plugin use {bicyclerent:stationmap 1,2|300,250} where 300 would be width in px and 250 the height in px.
    The markers have the station name as tooltip. 
  • Operator Bookings Plugin to show an operator's list of bookings when he is currently logged in the frontend. You can use this for example to help them navigate easier through lists of group bookings when placed underneath the booking form in the frontend. They also have - when logged in - their adress data already filled into the booking form to make their reservation processes much more efficient. Use it like so: {bicyclerent:operatorbookings} in your Joomla! articles. At the moment it's with a very basic design, updates to follow to make it prettier!
  • Bicycle Description Plugin shows the editor field content for one bicycle of your flleet in a Joomla! article. Use like so: {bicyclerent:bicycle=3} where the 3 needs to be replaced with the respective database id from the component bikes' table. 

  • Station Description Plugin to get a station into your articles: {bicyclerent:station=3}, 3 of course again is the database id of the chosen station.

  • Region Description Plugin to get a region into your articles. {bicyclerent:region=3}, the 3 needs to be replaced with the database id of your region.



  • Module to show which days your station(s) open regularly with a sliding transition effect between the chosen stations. 


  • Module to show a calendar with the opening days of all your stations, like they "are" including the exceptions provided in the component's backend (opening hour exceptions and book-off days when the station is on "holiday"). 

Manual Triathloncoach


Note: Shortly a new and quite different version based on jQuery Fullcalendar at its heart will be released for Joomla! 3.4x. That one will be based around single workouts and calendar views with different time frames so it is going to be completely flexible for your workflow (and it won't have a bug in it's feedback per workout function when using single quotes as it is completely JSON based for all Ajax requests).

Thanks for choosing the triathloncoach component or at least looking up this brief manual to see if it could be of any use for you!

What is the component for in the first place?

It will help you ease your daily tasks if you are a triathlon coach or want to run a coaching website with fellow coaches!

You won't have to note down loads of appointments, race dates and other info and you'll be notified automatically if an athlete changes something. The athlete can be sure, you always see what's up to tailor his trainingplan established conveniently from the backend of your Joomla! website with a templating, copy, drag & drop system.

This manual is currently a draft and not yet fully established - you will see daily contributions and changes, so please be patient until I have found the time to add all information I can think of would be needed. 

I have been a professional triathlete and coach for about 20 years now and have ended up with the workflow and helps I created in this component due to the experiences I made, so I hope it will be useful for others as well!

If you feel like something is missing (after I am done here with describing each feature please..) feel free to send me a note via the contact form on this website - togehter we'll be able to make the best out of this manual and the software!

Also of course like everything around Joomla! the component is published as Open Source under GNU General Public License (see the included textfiles), so you are free to add to or alter the software to your liking.  

The component has been tested on php 5.3 with mysql 5.5. You should make sure, you are using an adequate, up-to-date system!

The Initial Setup

Please install the .zip containing the component and the .zip files with the plugins (no need to unzip first) and enable the latter via the Joomla Installer:

The component ships with english and german .ini files for front end backend by default. You can easily make a copy and store your own translation files under the administrator and site's language folders to obtain the languages you like. Make sure, you have those languages installed and enabled for Joomla as well to make your translations appear.

The plugins serve for some automatic processes like sending emails, deleting files when a related database entry (uploads) is deleted and the likes. There is none vital for the component to work but they enhance the workflow quite a bit so I recommend to use them all. For the next version I am thinking about a statistics plugin comparing planned versus diary entries. 

Currently there are 4 plugins availalbe: 

  1. triathloncoachemail => serves to send a trainingplan when saved in the backend (changed or new)
  2. triathloncoachdeleteupload => will delete the actual file when a database entry is being deleted in the backend in the uploads section which is more convenient than doing this manually. If you want to preserve the files anyway, there is an explanation later in this manual.
  3. triathloncoachappemail => serves to send an email to his coach when a user changes or adds an appointment in the frontend
  4. triathloncoachmiscemail => serves to send an email to his coach when a user changes his miscellaneous info in the frontend
  5. triathloncoachstatistics => compares planned versus actually done training from plan and dary as a content plugin

 To have the component work as expected, you will need to initially set the correct options under the options toolbar button (top right):

  • A usergroup for your athletes has to be chosen, which is mainly to provide the tickets for this group of users
  • This usergroup needs the following core access rights to be set so they can see, edit etc. their plans, appointments...

The Workout Template Visibility setting decides about if all coaches can use and see all other coaches' workout templates or only their own created.


The Trainingplans View (Backend)

Let's start right away with the trainingplans, from the backend, to get you up and working with the most important informations quickly:

The Trainingplans view offers each coach the complete list of all trainingplans he has created. 

One can order or filter the plans to find a certain trainingplan quickly. 

In the toolbar you can find amongst other icons one to copy a trainingplan. This serves to quickly make a copy in case you want to for example use one as a template and then change a few things for another athlete. 

To work on an existing plan, click the according checkbox on the left of each plan in the list and then the edit button in the Toolbar. 

To create a new one, use the new button - as the component offers you help with a basic ticket system checking if you have created all plans needed for your customers for the following week, normally you would create new plans through the ticket system though which we'll talk about soon.

The Trainingplan View (Backend)

After clicking the edit button you will see this as the top part of the training plan view:

The appointments are simply all appointments a customer (or his coach for him) has entered, so you won't forget an important race or anything your client wants you to know to tailor the workouts around. This info is updated via ajax when a different user is chosen in the Athlete field. 

In the miscellaneous area you see the customers' "normal" timebudget which should reflect a regular week and the time available for training, team workouts your customer likes to attend etc.
All miscellaneous data can be set for each customer under the miscellanous sub-menu of the component The athletes can change all parts of this data except fot the trainingzones which have to be set by the coach. 

Remember to initially store one set of miscellaneous data for each athlete from the backend, as they can't be created from the athletes in the frontend.

The Base Data of a trainingplan consists of some important fields like the athlete for whom the plan is created and the from - to dates. The component stores weekly plans only at the moment, and a plan has to start with Monday and end with Sunday 7 days later for the ticket system (later a word on this) to work correctly.
A coach is free to place any dates he likes but it only makes sense to save 1 plan for each week and athlete with the correct dates in the end.

The weekly comment finally is a free field to send and store any explanations with each plan.

Further down you find the workout area with the week totals that are automatically updated when any changes in the single workout mileage or time fields occur.
With the workout buttons you can drag and drop entire workouts within the same discipline into other days or delete the contents of one workout cell.
Each cell represents one discpline for one day - so in case you have 2 workouts on the same day with the same discipline you will have to enter them into the same cell and place the sum of the two into the mileage and time fields.

You can change from metric to english measurements in the component's options (button can be found on the top right as known from other Joomla components). 

The Plan buttons help to insert single workout templates (previously established in the workout template submenu described later) or complete trainingplan weeks.

These functions open a modal window and are self-explanatory, just choose a workout and drag & drop it into the day you want it to add on the top of the modal window (it will automatically be in the correct discipline's column and day) or click on the button on the left when you want to add a whole week.

Once you are done with a plan and want it saved and send via email to your customer (the email is only send when the plan is "published" under Base Data and you have installed and enabled the plugin "triathloncoachemail" shipping with the component) click on the save or save & close button on the top right of the screen.

With the latest version of the component and plan email plugin you can choose to send a printer-friendly PDF attachment also whenever a plan is saved from the edit view.

The Tickets (Backend)

The tickets are a simple help to never forget to create a plan for a customer. You can simply click on a link - it will vanish when a plan for the upcoming week is done. 

The underlying code relies on your database server's settings for the datetime, so in case you have an offset a ticket could be a few hours early or late instead of appearing exactly with a new week and 7 days before the next plan has to be finished at the latest.

After clicking on a ticket the trainingplan view opens with the dates and customer correctly prefilled.


 The Appointment View (Backend)

I skip the appointmets view (note the plural) here, because there is nothing fancy or non self-explanatory about it. To add a new appointment you simply click the new button in the appointments view etc.

It is important to normally let the athletes add apointents from the frontend as they should be responsible for notifying the coach about any races, changes and influences, but in case you need to add something for a lazy customer who has send you another email with a list of appointments instead of entering them himself you can do this here, simply choose the athlete for whom the appointment will be saved (each coach gets a list of his athletes only - derived from the entries in coach-athlete relations sub menu), start and end date and write the content of the appointment, and then finally save the appointment.

The Miscellaneous View (Backend)

After choosing a miscellaneous dataset (one per user is possible to save in the database table) and edit or clicking on new you see the following screen allowing to enter trainingzones, Timebudget and bascially any other info needed to be remembered. This set of data will be shown when creating or editing trainingplans of the respective athlete so place anything you need in here. The trainingzones will be - if so chosen under the options of the triathloncoachemail plugin - included into each email that will be send to your athlete with a new or edited (and published) plan.

One feature asked for by a friend was the calculation of some basic statistical data, they will be used solely in the upload feature - after uploading garmin tcx files it is possible to create a basic chart from them and get an "overview" over the workout in the shape of a linegraph and the values calculated. Thus, the functional threshold in watts (cycling) can be provided here, too for each athlete.

The Coach-User Relations (Backend)

In this screen you note who's coach and who's an athlete. This is serving at multiple places to recognize which email adress something should be send to (for example a changed or new appointment from the frontend - remember to install and publish the triathloncoachappemail plugin!) and who should see which tickets etc.

Set up a coach-user relation for each athlete - an athlete can only have one coach, but coaches of course can have multiple athletes they write plans for.

The Workout Templates (Backend)

From the workout templates view (skipped here in the manual - as usual there is nothing noticeable about it) you can create and edit templates to be used for convenient inserting into trainingplans while creating them later.

Just remember to save the correct discipline with your template text.

The Disciplines (Backend)

This view is basically just there with a flexible future in mind. In case the component gets more views / other table structure it will be serving other sports as well as it serves for triathlon coaching. For the moment it is best to leave this untouched to enable a flowless experience for triathlon coaches and their athletes.

The Coach Logos (Backend)

If you have the triathloncoachemail plugin's options set so, it will look for a coach's logo to include into the header of each traiiningplan email send out to their athletes.











The Uploads (Backend)

Below you can see a linegraph that's been drawn after click on a link in the downloads list. 

Depending on if the uploaded (tcx at the moment only) file was filled with swimming, biking or running it will show a slightly different graph and do some calculations. 

The swim / other view is not yet "perfect" in the current version of the component, yet swimming is not a very exactly measured activity by gps devices if done in pools anyway. Normally a user would do the upload from the frontend to inform his coach about a workout, but one can do it from the backend as well.

One of the next versions will include libchart, a free library that weighs in with not too much code, to produce pretty graphs with standards that should be existent on any Joomla server surrounding nowadays.

The Trainingplans (Frontend)

For each frontend view you will need to add a menu Item, so your athletes can access the respective views.

In general it is advisable to allow only show logged-in users access to the component's views, as else there is no way to  know for it which plans, appointments etc. to show. 

So, set the access rights of the related menu items to a logged-in usergroup, - nomally you would use the one that is chosen in the component's options.

The list views will be in most cases what you would like to offer your users - they have links to create and manage the respective items anyway, so you do not have to show a single trainingplan via menu item for example. 

There are many components in the Joomla Extensions directory, that would help you do paid memberships and manage the group a paid or non-paid user will be assigned to automatically. This is a great and easy way to monetize your coaching service on your Joomla! website.

The traiiningplans View shows each athelte's plans. A click on detail view opens the weekly or trainingplan view.

From there, one can print the plan but more importantly one can save corresponding entries into a trainingdiary. The diary is only available from this view in the actual component's version. Clicking on Save changes while You are watching: TARGET PLAN is shown means that all planned workouts will be copied into the trainingdiary week. If the athlete wants to change something versus the planned week he has to first click on Load corresponding diary to see what's in his diary - saving thereafter will not overwrite the diary entries.

 The athletes can use a somewhat similar drag & drop interface that the coach has in the backend - they can click on the wastebin icon underneath each workout to delete this (from the diary only - even if this is been done in the TARGET PLAN view changes of course only save to the diary) or use the AA icon to drag & drop workouts.


 The Appointments (Frontend)

The athletes can use a quite similar interface to manage appointments like we have seen for the backend, after click on Detail view or add new item they will see an appropriate form to edit or add an appointment.

The Miscellaneous View (Frontend)

It is important to keep the timebudget and other information up-to-date that is of interest for the coach to create working schedules. Thus, the athletes can (with the exception of the training zones) update their dataset in the frontend.

The Uploads (Frontend)