Quick Installation Hints

Please submit a support request in case you need help in installing this application.


You need a reasonably recent PHP aware web server and mysql server. I have written it with mysql 4.1 and PHP 5 in mind. You will need sufficient access rights to run mysql scripts including GRANT statements.


First unpack the entire archive in some webserver reachable area, then open that directory with your browser and follow the on-screen instructions.


You really should have three separate users with different passwords, as advised in the configuration page. If you absolutely can't do otherwise, you may have all three set to the same user. The reasons for separating those are:

  1. In case your config.php file is leaked, the dbpass and systempass passwords being different from adminpass, that file would be essentially useless to the attacker.
  2. If there's an sql injection hole in FreeSeat, separating users will mitigate the damage an attacker could do. Don't say you haven't been warned.


This archive includes an example stylesheet (style/general.css), which is the one I use. Note the commented out bit inside div.narrow that refers to an image to be displayed on the left of most pages. You may want to uncomment it and have it point to your own sidebar image.

Credit Card Payment

This application contains bindings to Klik & Pay (tm), and to PayPal (tm). If you want to offer credit card payment through another provider you need to create a credit card plugin registering the same hooks as paypal and klikandpay, and then enabling that plugin through the configuration wizard (or in the $plugins variable of your config.php file).

Http Server Configuration

I recommend using something like SSL client certificate or some other form of identification on the web server level to only allow https access to the booking administrator.

The system will let people in administrator mode if they can

  1. access the pages over SSL
  2. provide the correct booking administrator password.

2 being checked after 1, you should not have to worry about people remotely brute-forcing the password.

Seat Configuration

The editor contains three parts. The top row lets you load, name and save seatmaps. The dropdown on the left lets you load an existing seatmap (the Load button loads the selected one). The Theatre and Zone fields let you customise the name of the theatre and, optionally, the name of a "zone" in the theatre. Each theatre can be divided in a number of zones, that each have their own independent seatmap. The save button saves the currently displayed seatmap under the given theatre+zone name. If there already was a map of the same theatre and zone name it will be erased (unless it already has seats booked, in which case FreeSeat will complain and not do anything).

The middle part of the editor is a preview of the actual seatmap. Fields on the left lets you edit row numbers (do NOT use the special row number -1, that one is reserved for recognised unnumbered seats). Clicking in a box in the grid lets you apply the currently selected tool (see below).

The bottom part lets you select tools and number seats and rows automatically. From top to bottom and then from left to right:

[More rows] and [more columns] enlarges the grid. It doesn't add seats but makes room to permit adding seats later. [Copy] copies the selection in the clipboard. The coloured boxes correspond to seat classes, from most expensive to least expensive (first class, second class, etc). Click in a coloured box and click in the grid above to put seats of some class on the map.

The white box is used to erase seats. Click on it and then on the seat(s) you want to delete.

The "selection tool" (a dashed rectangle) lets you select a subset of the seatmap. Click on it, then one corner seat of the area you want to select, then on the seat in the opposite corner. The resulting rectangle is called "the selection".

The clipboard icon lets you paste a previously copied area. In summary, copy-pasting works as follows:

  1. click the selection tool
  2. click in one corner of the area you want to copy
  3. click the opposite corner
  4. click the "Copy" button
  5. click the "Paste" tool
  6. click on the top-left corner of the area on which you want to paste.
  7. Repeat 6 as often as required

The [seat #] tool lets you specify seat numbers. When selected, all seats contain an editable text field in which you can manually enter seat numbers. You can also use the "Fill Selection" button to automatically number seats in the current selection (the three dropdowns on its right let you customise how seats are numbered. Experiment!)

The [extra] tool lets you specify extra information that gets printed on tickets, for a given seat. For instance tell to which door the buyer must use when entering the theatre, to access that seat. You can also apply the same extra information to more than one seat at a time with the "fill selection" tool: First select an area with the selection tool, then activate the "extra" tool, fill the desired information in the text field after 'with value', then click "Fill Selection".

The [Fill Selection] tool applies the currently selected tool to all selected seats (or the entire seat map if there is currently no selection). Use this to fill rectangles with seats of the same class, to erase the entire seatmap, or number seats automatically, as already explained.

Finally, the two buttons labelled "Renumber Rows Automatically" will put row numbers on each row that has at least one seat.

A final warning: there's no "Undo" option, so watch where you click! Also, navigating away from the page will destroy any unsaved work, including the clipboard. If you want to edit different seat maps simultaneously, it is safe to have two editors in two windows, but copy paste won't work between them (each window has its own clipboard).

Also, the editor doesn't understand the "staggered seating" option, unnumbered seats and won't let you upload associated images, so you'll have to do those from the SQL command line.

If you're interested, or want to do stuff the editor isn't equipped to do, database schema information follows.

The attributes of the seats table are as follows:

in which theatre that seat is
row number, seats in a row on the screen should usually have the same row number
The special row -1 is for so called "unnumbered seats" a.k.a. general seating. People don't select them individually but instead specify for each zone how many such seats they want to book.
seat number for that row
some stuff to be added on the ticket for that seat
you can split the theatre in zones that will be rendered independently, that usually have their own row numbering etc. The zone name will also be shown on the ticket for that seat.
A number saying how good the seat is. 1 is good, 4 is bad.
positive number giving the horizontal coordinate of that seat when rendering the zone of that seat
positive number giving the vertical coordinate of that seat when rendering the zone of that seat. Logo