<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
<book>
  <title>Koha 2.2 Users Guide</title>

  <subtitle>Using the Power of Free and Open Source Software for Library
  Management</subtitle>

  <bookinfo>
    <date>March 2006</date>

    <author>
      <firstname>Stephen</firstname>

      <surname>Hedges</surname>
    </author>

    <author>
      <firstname>Joshua</firstname>

      <surname>Ferraro</surname>
    </author>

    <author>
      <surname>and other contributors as noted in the text</surname>
    </author>

    <copyright>
      <year>2005-2006</year>

      <holder>LibLime</holder>
    </copyright>

    <legalnotice>
      <para>This document is related to Koha and is licensed to you under the
      GNU General Public License version 2 or later (<ulink
      url="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</ulink>).</para>

      <para>Koha-related documents may be reproduced and distributed in whole
      or in part, in any medium physical or electronic, as long as this
      copyright notice is retained on all copies.</para>

      <para>You may create a derivative work and distribute it provided that
      you:</para>

      <orderedlist>
        <listitem>
          <para>License the derivative work with this same license, or the
          Linux Documentation Project License (<ulink
          url="http://www.tldp.org/COPYRIGHT.html">http://www.tldp.org/COPYRIGHT.html</ulink>).
          Include a copyright notice and at least a pointer to the license
          used.</para>
        </listitem>

        <listitem>
          <para>Give due credit to previous authors and major
          contributors.</para>
        </listitem>
      </orderedlist>

      <para>Commercial redistribution is allowed and encouraged; however, the
      author would like to be notified of any such distributions.</para>

      <para>No liability for the contents of this document can be accepted.
      Use the concepts, examples and information at your own risk. There may
      be errors and inaccuracies, that could be damaging to your system.
      Proceed with caution, and although this is highly unlikely, the
      author(s) do not take any responsibility.</para>

      <para>All copyrights are held by their by their respective owners,
      unless specifically noted otherwise. Use of a term in this document
      should not be regarded as affecting the validity of any trademark or
      service mark. Naming of particular products or brands should not be seen
      as endorsements.</para>
    </legalnotice>

    <revhistory>
      <revision>
        <revnumber>2.2.3</revnumber>

        <date>2005-07-11</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Initial XML markup, Introduction and Chapter One.</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.3p1</revnumber>

        <date>2005-08-18</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Add Tools section, new systempreferences.</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.3p2</revnumber>

        <date>2005-10-02</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Add user comments on printers, itemcallnumber.</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.4</revnumber>

        <date>2005-11-27</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Update for version 2.2.4, add some user comments and section
          on Acquisitions</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.4p1</revnumber>

        <date>2005-12-17</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Add more user comments, section on Backups, and
          appendices</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.5</revnumber>

        <date>2006-01-16</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Conform to version 2.2.5, new material on acquiring MARC
          records and on templating.</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.5p1</revnumber>

        <date>2006-03-26</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Add Chapter 3, Circulation Tasks</para>
        </revdescription>
      </revision>

      <revision>
        <revnumber>2.2.5p2</revnumber>

        <date>2006-07-03</date>

        <authorinitials>sh</authorinitials>

        <revdescription>
          <para>Transfer copyright, change author e-mail address</para>
        </revdescription>
      </revision>
    </revhistory>
  </bookinfo>

  <preface>
    <title>Introduction</title>

    <para>What is Koha 2.2?</para>

    <para>Koha version 2.2 is a free/libre open source integrated library
    system (ILS) for automating a lending library. It has all of the basic
    features needed to run a library, handling:<itemizedlist>
        <listitem>
          <para>an online public access catalogue (OPAC) of the library's
          holdings;</para>
        </listitem>

        <listitem>
          <para>a database of library users;</para>
        </listitem>

        <listitem>
          <para>issuing books to borrowers and returning books to the
          collection;</para>
        </listitem>

        <listitem>
          <para>borrower requests for library items;</para>
        </listitem>

        <listitem>
          <para>orders from vendors;</para>
        </listitem>

        <listitem>
          <para>book budgets;</para>
        </listitem>

        <listitem>
          <para>transfers between library branches;</para>
        </listitem>

        <listitem>
          <para>management of subscriptions to periodical publications;</para>
        </listitem>
      </itemizedlist>and most other functions associated with operating a
    lending library.</para>

    <para><application>Koha</application>.2.2 supports <ulink
    url="http://www.loc.gov/marc/">MARC 21</ulink> and <ulink
    url="http://www.ifla.org/VI/3/p1996-1/sec-uni.htm">UNIMARC</ulink>
    bibliographic records. While there are still a few ILS products that use
    their own format for storing bibliographic data, most commercial products
    have adopted some version of the venerable MARC
    (<emphasis>MA</emphasis>chine <emphasis>R</emphasis>eadable
    <emphasis>C</emphasis>ataloging) record standard. MARC is an early markup
    language for handling the data and metadata that describe library
    materials. While there are some who argue that MARC is now outdated --
    four decades after it was first developed -- it is by far the most widely
    used standard for the organization of bibliographic information, and Koha
    complies with this standard.</para>

    <para>Why use Koha instead of a commercial product? The main attraction of
    <application>Koha</application> is that it is free, since it is open
    source software. It is best to think of it as "free to change," however,
    rather than "free of cost." It is possible to set up a functioning
    <application>Koha</application> system without spending any money, but you
    will still spend more time on the implementation than you would with a
    commercial ILS (where you are paying the software vendor to set it up for
    you), and you will need to have a pretty fair knowledge of web server
    software (usually <ulink url="http://www.apache.org/">Apache</ulink>) and
    the <ulink url="http://www.perl.org/">Perl</ulink> programming language in
    order to configure some parts of <application>Koha</application>. Some
    knowledge of <ulink url="http://www.mysql.com/">MySQL</ulink> is also
    handy for database maintenance chores. Most libraries should probably plan
    on investing time, training, and some money before they have
    <application>Koha</application> up and running. That being said,
    <application>Koha</application> is still much less expensive than
    commercial library software, especially when you consider that there are
    no annual license fees.</para>

    <para>The best reason to use <application>Koha</application> is the fact
    that you will have complete control over your library software and data.
    Because the entire source code is open, a library can modify
    <application>Koha</application> to do things as the library wants them
    done. Commercial systems must aim their research and development for the
    "middle of the market," where most of their business can be found. But a
    library that wants to surpass the capabilities of most other libraries
    will find that <application>Koha</application> provides the freedom to try
    boldly imaginative innovations in library service.</para>

    <para>This book is a guide for Koha users -- in other words, for
    librarians. It is not intended to satisfy the needs of the computer
    technicians who are tasked with installing Koha, nor is it intended to
    offer guidance for extracting data from any ILS currently used by a
    library and loading it into Koha. Those needs are generally addressed by
    one or more of the documents available on the <ulink
    url="http://www.kohadocs.org">Kohadocs</ulink> website
    (http://www.kohadocs.org). This book assumes that the basic installation
    of the Koha software has been completed, and procedures have been
    developed for migrating any existing data, and the computer technicians
    have handed the system over to the librarians.</para>

    <para>This book tells librarians what to do to configure Koha for use in
    their library, explains how to use Koha for day-to-day library operations,
    and provides a glimpse of some of the customization that can be done to
    make each library's Koha unique.</para>
  </preface>

  <chapter>
    <title>Setting Up Your Koha System</title>

    <para>Once the Koha software has been downloaded and installed, it is not
    ready to use. While a commercial ILS will generally be delivered to you
    ready to use, you will have spent many hours with the vendor describing
    your library, your data, your cataloging practices, etc., so that the
    vendor can configure the software and make it useful to you. (At least
    that is what should happen if all goes well.) In the case of Koha, there
    is often no vendor involved, so you should be prepared to configure Koha
    yourself. This can be a very long and involved process (so this chapter is
    by far the longest chapter in this book), but it is not technically
    difficult -- unless you want to do some sophisticated customizing!</para>

    <para>When Koha is first delivered to the librarian(s), the technicians
    that have installed it will have set it up with two web addresses: one for
    accessing the Online Public Access catalogue (OPAC), and one for accessing
    what is generally called the "Intranet." The Intranet address is the one
    that will be used by the librarians to get to the Koha programs they will
    use to manage library circulation, cataloging, etc. Often the OPAC and the
    Intranet addresses are almost the same, the only difference being an
    additional ":8080" at the end of the Intranet address. So, for example,
    the OPAC address might be something like "http://www.mykoha.org," while
    the Intranet address will be "http://www.mykoha.org:8080."</para>

    <para>Whatever the addresses may be, the first thing the librarian will do
    is open a web browser and type in the given web address for the Intranet.
    If everything is installed correctly, the librarian should see a screen
    inviting him/her to login to Koha.</para>

    <note>
      <para>The Intranet interface is tested only with Mozilla/Firefox. It
      should work (partially) with Internet Explorer. The OPAC should work
      fine with any navigator.</para>
    </note>

    <figure>
      <title>Koha Intranet Login Screen</title>

      <mediaobject>
        <imageobject>
          <imagedata fileref="images/login.gif" />
        </imageobject>
      </mediaobject>
    </figure>

    <para>As with the web addresses for connecting to Koha, the librarian
    should have received the Koha administrator login name and password from
    whomever installed the software. If no other login name was chosen,
    "kohaadmin" is installed by default (but there is no default password, so
    you must get that from the person who performed the installation).</para>

    <para>Once you have completed the login, you come to the main page of the
    Koha Intranet.<figure>
        <title>Koha Intranet Main Page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/mainpage.gif" />
          </imageobject>
        </mediaobject>
      </figure></para>

    <para>Although it is tempting to scroll down through the list of functions
    and start playing with Koha, please don't -- we have work to do! Before
    Koha is ready to use, you need to choose "Parameters" from the list of
    functions and tell Koha some important things about your library.</para>

    <para>The Parameters page is one of the busiest pages in all of Koha, with
    a long list of system parameters that must be set before you can use Koha
    (followed by a list of tools). Some of them have been set in the process
    of installing the software, but can be changed now if necessary.<figure>
        <title>Top of the Koha Parameters Page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/parameters.gif" />
          </imageobject>
        </mediaobject>
      </figure></para>

    <para>Don't let this list overwhelm you -- we will deal with each item
    individually and in some detail. The process of setting parameters will
    take some time, however, varying from a few hours to a few days, depending
    on how much time you will need to think about and organize your system
    data. Time spent in making wise decisions at this point will be amply
    rewarded in time saved later.</para>

    <para>Despite the fact that the screen says, "Fill these tables in the
    order they appear," we are going to skip to the bottom of the list of
    parameters and start with "System preferences."</para>

    <section>
      <title>System Preferences</title>

      <para>This page allows you to set the system preferences that control
      much of the basic behavior of Koha. These preferences should be set
      before any other parameters.</para>

      <note>
        <para>If the system preferences page (or any other page you have seen
        so far) is in French, that means the installer(s) have installed both
        the English and the French "SQL Directories" (or only the French SQL
        Directory). While you can change the language of much of Koha from
        this page, the language of the descriptions that appear on this page
        cannot be changed. If your descriptions are in the wrong language, ask
        the installers to re-install <emphasis>now</emphasis> (before you
        start setting parameters) and install only your preferred language SQL
        Directory.</para>
      </note>

      <figure>
        <title>System Preferences page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/preferences.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>The layout of this page is pretty simple. Three columns list the
      name of the preference, its current value, and a brief description of
      what the preference controls. The preferences grouped into tabs relating
      them to Koha functions: Administration, Acquisitions, the catalogue,
      Circulation, Members, the OPAC, and some other preferences that do not
      fit into the other categories. Some of these you won't need to change at
      all.</para>

      <para>To change a preference, click on the folder icon. Don't click on
      the trash icon, which deletes the preference, unless you're a Koha
      developer -- and even then make a backup of the
      <filename>systempreferences</filename> table first. There is also a
      button at the bottom of the page for adding more system preferences.
      Most libraries will have no reason to either add or delete system
      preferences; the only time such action would be needed would be if a
      library was making some major changes to the Koha code. But the Koha
      philosophy is to give you as many options as possible, so this screen
      makes it easy to add and delete preferences if necessary.</para>

      <tip>
        <para>The preferences (variables) and their values are stored in the
        systempreferences table in the Koha database.</para>
      </tip>

      <para>When you choose to edit a preference, there is a standardized
      screen that appears to allow you to make your modifications. This screen
      requires some explanation.<figure>
          <title>System Preference Editing Screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/modpref.gif" />
            </imageobject>
          </mediaobject>
        </figure></para>

      <para>The upper box in this window contains a very brief description of
      the system preference you are editing, the preference ("Variable") name,
      and its current value. This is the box in which you will make your
      changes and save them by clicking on the "OK" button. But what is that
      strange lower box labeled "Koha Internal" that tells you that you
      probably have no reason to change anything there? That box defines the
      type of values that you will be allowed to enter in the "Value" area of
      the upper box. In the screenshot that we are using as our example, the
      variable is the "acquisitions" system preference and the type (as
      defined in the lower box) is a "choice" variable -- meaning that you
      will be able to select a value from a pull-down list. The values that
      will appear in the pull-down list are defined in the "Variable options"
      area of the lower box. Had the variable been of a type that allowed you
      to type anything you wanted in the "Value" area (such as an e-mail
      address or an ISBD formula), then the "Variable type" in the lower box
      would be "free." If you wanted a bigger area for typing (and you might
      for defining an ISBD formula), then you could change "free" to
      "Textarea" and define the size of the text area by putting the number of
      columns and rows in the "Variable options" area. But in most cases, you
      will have no need to change anything in the lower box and will simply
      change the "Value" in the upper box and save it by clicking "OK." Again,
      Koha gives you the ability to change things you will probably never need
      to change -- but in case you might, you can.</para>

      <para>There is no recommended order for setting the preferences, so we
      will look at them group by group.</para>

      <section>
        <title>Admin</title>

        <variablelist>
          <varlistentry>
            <term>dateformat</term>

            <listitem>
              <para>Choose "metric," "us," or "iso" date format:<itemizedlist>
                  <listitem>
                    <para>"us" = mm/dd/yyyy</para>
                  </listitem>

                  <listitem>
                    <para>"metric" = dd/mm/yyyy</para>
                  </listitem>

                  <listitem>
                    <para>"iso" = yyyy/mm/dd</para>
                  </listitem>
                </itemizedlist>This controls how dates are displayed on the
              Koha screens, not how they are stored in the database (usually
              yyyy-mm-dd).</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>insecure</term>

            <listitem>
              <para>If you are planning to be the only user of your Koha
              installation and find the login annoying, you can set this
              preference to "yes" to turn security off. But in almost every
              other case, the best choice is "no." If you choose "yes," users
              do not have to login and all information is open to anyone.
              Obviously, if your Koha is going to be used for a regular
              lending library, you want to have security turned on -- just say
              "no."</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Acquisitions</title>

        <variablelist>
          <varlistentry>
            <term>acquisitions</term>

            <listitem>
              <para>The choices are either "normal" or "simple." "Normal" sets
              the system to track orders and update budgeting and vendor
              information as you add materials to your collection. "Simple"
              tells Koha that you are going to add materials to the collection
              without tracking orders. So if you plan to use Koha to monitor
              your budget and your orders with vendors, leave this preference
              as "normal." If you already have a system for monitoring your
              budget and orders (or simply don't plan to do any monitoring),
              change this to "simple."</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>gist</term>

            <listitem>
              <para>The "gist" is the "GST" (Good and Sales Tax) rate. If your
              local tax laws require you to pay taxes on purchases from your
              suppliers, enter the tax rate here, expressed as a decimal
              number and not a percent. (In other words, if the tax rate is
              6.5 percent, enter ".065".). Set to "0" if you are not required
              to pay tax.<note>
                  <para>The "gist" preference does not apply to fees and fines
                  you charge borrowers, so if you are required to charge tax
                  on such fees, you will need to include the tax in the fee
                  amounts you set in the "Item types" and "Issuing rules"
                  parameters.</para>
                </note></para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Authorities</title>

        <variablelist>
          <varlistentry>
            <term>authoritysep</term>

            <listitem>
              <para>The description reads, "The separator used in
              authority/thesaurus. Usually '--'." What does that mean?</para>

              <para>Basically, Koha is asking what symbol is used in your
              language to separate the levels of your subject headings. In
              English, for example, subject headings and their subdivisions
              are separated by "--" as in "Women--United
              States--Bibliography." If a different symbol is used for this
              purpose in your language, change the value of this variable to
              that symbol.</para>

              <para>A detailed explanation of how Koha handles authorities
              will follow in the discussion of setting up your MARC
              parameters.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Catalogue</title>

        <variablelist>
          <varlistentry>
            <term>ISBD</term>

            <listitem>
              <para>Koha 2.2 can display records in a format that roughly
              conforms to the International Standard Bibliographic Description
              standards. ISBD is a family of standards developed by the
              Section on Cataloguing of the International Federation of
              Library Associations and Institutions (IFLA) to standardize, as
              much as possible, the descriptive portion of bibliographic
              records produced in different countries. The standards specify
              the descriptive elements constituting the record, their order,
              and the punctuation between them. (See <ulink
              url="http://www.ifla.org/VII/s13/pubs/isbdg2004.pdf">http://www.ifla.org/VII/s13/pubs/isbdg2004.pdf</ulink>)</para>

              <para>In order to do this Koha requires that you fill this field
              with the proper set of instructions, or formula, for organizing
              your MARC tags into an ISBD-conformant display. The online help
              (click "Help" in the upper right corner of the System
              preferences screen) provides some instructions and an example of
              a French language display using UNIMARC tags.</para>

              <para>Libraries using MARC 21 instead of UNIMARC probably have
              records that already contain punctuation conforming to the
              Anglo-American Cataloging Rules, second edition (AACR2). A
              reasonably good "AACR2" display can be constructed for such
              libraries, too -- just put something like this in the
              <varname>value</varname> field for the ISBD
              variable:<programlisting>#050|&lt;label&gt;Call Number: &lt;/label&gt;|{082a}{050a}{ / 050b}|&lt;br/&gt;&lt;br/&gt; 
#100|&lt;label&gt;Main Entry: &lt;/label&gt;|{100a}{ 100b}{ 100c}{ 100d}{110a}{ 110b}{130a}|&lt;br/&gt; 
#245|&lt;label&gt; &lt;/label&gt;|{245a}{ 245b}{ 245c}{ 245h}{ 246i}{ 246a}| 
#260||{ 250a}{ 250b}{-- 260a}{ 260b}{ 260c}| 
#300|&lt;br/&gt;&lt;label&gt; &lt;/label&gt;|{300a}{ 300b}{ 300c}|&lt;br/&gt; 
#020|&lt;br/&gt;&lt;label&gt; ISBN&lt;/label&gt;|{ 020a}{ 024a}|&lt;br/&gt; 
#440|&lt;br/&gt;&lt;label&gt; &lt;/label&gt;|{440a}{ 440v}|&lt;br/&gt; 
#500||{\n500a}|&lt;br/&gt; 
#511||{511a, }| 
#520|&lt;label&gt; &lt;/label&gt;|{\n520a}{ 520b}| 
#600|&lt;br/&gt;&lt;label&gt;Subjects: &lt;/label&gt;|{ 600a.}| 
#650|&lt;label&gt; &lt;/label&gt;|{\n650a }{-- 650x}{-- 650z}{-- 650y}| 
#651|&lt;label&gt; &lt;/label&gt;|{\n651a }{-- 651x}{-- 651z}{-- 651y}| 
#852|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Held at: &lt;/label&gt;|{\n852a}{, 852b}{, 852c}|</programlisting></para>

              <para>See the related <link linkend="isbd">comments</link> in
              the User Comments section.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>autoBarcode</term>

            <listitem>
              <para>The barcode number to be assigned to items is
              automatically assigned (sequentially) by Koha if this is set to
              "yes" ("1" = "yes") <emphasis>and</emphasis> you set your MARC
              preference to "no.". You will not be asked for a starting number
              or for any preferred type of barcode if you choose "yes" -- you
              simply get whatever Koha gives you. For most libraries, where
              preprinted barcodes are attached to items as they are cataloged,
              this will not work. In these cases, you should choose "no" and
              plan on adding the barcode to the catalogue record while you are
              adding other item information (such as price, accession date,
              etc.).</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>hide_marc</term>

            <listitem>
              <para>This is a feature for libraries that want to use MARC
              records, but don't want to see "too much" MARC. For librarians
              unfamiliar with MARC, some of the complexities of tags and
              subfields can be daunting. This feature hides some of those
              complexities.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>itemcallnumber</term>

            <listitem>
              <para>This is one system preference that you may want to set
              <emphasis>after</emphasis> you set your other MARC parameters.
              This preference holds the MARC tag/subfield that is used to
              calculate the itemcallnumber variable that is a new Koha feature
              starting with version 2.2.2. If you set this preference now,
              please make a note of it and keep it handy when you set your
              other MARC parameters. If you decide to set it after setting
              your other MARC parameters, don't forget to come back to
              it!</para>

              <note>
                <para>Prior to version 2.2.2, Koha could use several MARC
                subfields to hold various parts of a single call number that
                was assigned to a group of items related to a single
                bibliographic record. Displaying the call number correctly
                often required the user to modify some of the display
                templates to suit their individual library's cataloging
                practice. The itemcallnumber feature greatly simplifies Koha's
                handling of call numbers in screen displays, but the previous
                option is still available to Koha users.</para>
              </note>

              <para>Putting an itemcallnumber subfield in a MARC record
              holdings tag allows you to set a call number on individual
              items, rather than on an entire group of items related to the
              same bibliographic record. While MARC holdings tags (either the
              852 MARC 21 tag, or a user-defined 9xx tag) often contain
              subfields for holding particular parts of a call number, they
              may not have a subfield that is set up to hold the
              <emphasis>entire</emphasis> call number. If you choose to use
              item call numbers -- for example, to place a copy of a book in
              one branch in the reference collection, while in another branch
              it is placed in the non-fiction collection -- then you must use
              this preference to tell Koha which subfield in your MARC
              holdings tag contains the entire call number.</para>

              <para>Please note that in the example given above, the issuing
              rules for the item in the reference collection and for the item
              in the non-fiction collection will be the same: issuing rules
              are determined by the item type, not the item call number. To
              assign different issuing rules to the two items, they would have
              to be assigned to separate bibliographic records, with differing
              item types for each record. There will be more discussion of
              item types when we come to that section of our discussion of
              parameters.</para>

              <tip>
                <para>If you are migrating MARC records that do not have the
                entire call number in a subfield of the holdings tag, and you
                want to use the itemcallnumber feature, a programmer can write
                a simple script to compile the parts of your call numbers and
                insert the newly-constructed entire call numbers into your
                holdings tags.</para>
              </tip>

              <para>See the related <link
              linkend="itemcallnumber">comment</link> in the User Comments
              section.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>marc</term>

            <listitem>
              <para>This preference allows you to turn MARC support on or off.
              Set it to "no" if you do not intend to use MARC records.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>marcflavour</term>

            <listitem>
              <para>Koha not only lets you specify whether or not you will be
              using MARC records, it also gives you a choice of MARC "flavors"
              -- MARC 21 or UNIMARC. Your choice will tell Koha how to
              interpret your MARC records.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Circulation</title>

        <variablelist>
          <varlistentry>
            <term>ReturnBeforeExpiry</term>

            <listitem>
              <para>This preference, if set to 1, will not allow a borrower to
              borrow items past the expiration date of their membership.
              Instead, Koha will recalculate the due date to be the same as
              the membership expiration date.</para>

              <para>This feature is useful for schools, which may set
              students' expiration dates to be the same as their graduation
              dates. The library would want all items to be returned before
              the students graduate and depart.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>maxoutstanding</term>

            <listitem>
              <para>This preference sets the maximum amount of outstanding
              charges a borrower may owe before he/she is barred from making
              reserve requests. The number represents units of your local
              currency -- for example, "5" means "$5.00," if the dollar is
              your local currency. Partial "units" will be rounded to the
              nearest whole unit. For example, 5.25 will not be stored as
              "5.25," but as "5" -- so keep it simple!</para>

              <para>If you want to have no limits, leave this preference set
              at 0.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>maxreserves</term>

            <listitem>
              <para>This preference sets the maximum number of active reserves
              a borrower can have at any one time.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>noissuescharge</term>

            <listitem>
              <para>This sets the maximum amount of outstanding charges a
              borrower may owe before he/she is barred from checking out
              items. As with maxoutstanding, the number represents units of
              your local currency.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>printcirculationslips</term>

            <listitem>
              <para>If your library uses receipt printers to provide borrowers
              with a list of items they have just checked out, you should turn
              this option on. If set to 1, circulation "slips" are printed on
              a receipt printer connected (or networked) to your server. If
              set to 0, no slips are printed.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Members</title>

        <variablelist>
          <varlistentry>
            <term>NotifyBorrowerDeparture</term>

            <listitem>
              <para>This system preference represents a number of days. If a
              borrower tries to check out items, and their registration is due
              to expire within this number of days, then the librarian sees a
              warning message. For example, is a borrower's registration is
              due to expire on the 15th of the month and
              NotifyBorrowerDeparture is set to 10, then beginning on the 5th
              of the month the librarian will see a warning if the borrower
              checks out items. This is a useful feature for schools, where a
              student's registration often expires on the date when they are
              scheduled to leave the school. Compare this system preference to
              the ReturnBeforeExpiry preference described in the preceding
              section.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>autoMemberNum</term>

            <listitem>
              <para>The membership number (patron card number) to be assigned
              to new library users is automatically assigned by Koha if this
              is set to "yes" ("1" = "yes"). As with the autoBarcode
              preference, if you choose "1" you will not be asked for a
              starting barcode or barcode type. For libraries that use
              preprinted barcodes on their library cards, this preference
              should be set to "0" (="no").<tip>
                  <para>Both autoBarcode and autoMemberNum refer to the
                  visible numbers that will be attached to items and borrower
                  cards. Koha will also assign internal control numbers for
                  items and borrowers, called <varname>itemnumber</varname>
                  and <varname>borrowernumber</varname>, that are both used
                  for cross-referencing data in various Koha tables. These
                  internal control numbers are always automatically assigned
                  by Koha.</para>
                </tip></para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>checkdigit</term>

            <listitem>
              <para>This preference determines the type of validity checks
              that will be done on membership numbers (patron card numbers):
              none or "Katipo" style checks. In almost all cases, you will
              choose "none." The checkdigit function was developed for the
              <ulink
              url="http://www.library.org.nz/cgi-bin/koha/opac-main.pl">Horowhenua
              Library Trust</ulink> ("HLT"), the library system that
              commissioned <ulink url="http://www.katipo.co.nz/">Katipo
              Communications, Ltd.</ulink> to write the first version of Koha
              at the end of 1999. The function checks if patron card numbers
              that are automatically generated (when the autoMemberNum
              preference is turned on) are in the correct sequence and match
              pre-printed barcodes purchased by HLT. Unless you are starting a
              new library and using the same pre-printed barcodes used by HLT,
              you will leave this preference set to "none."</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>OPAC</title>

        <variablelist>
          <varlistentry>
            <term>BiblioDefaultView</term>

            <listitem>
              <para>This preference defines how Koha will display a
              bibliographic record that has been retrieved from a catalogue
              search. The choices are "normal," "marc" or "isbd."<itemizedlist>
                  <listitem>
                    <para>"normal" displays the record in the standard Koha
                    format, showing most of the basic bibliographic
                    information.</para>
                  </listitem>

                  <listitem>
                    <para>"marc" displays the entire MARC record from Koha's
                    MARC database.</para>
                  </listitem>

                  <listitem>
                    <para>"isbd" displays an ISBD formatted record. (See the
                    "ISBD" system preference below for more information about
                    ISBD.</para>
                  </listitem>
                </itemizedlist></para>

              <para>All of these display modes can be modified by changing the
              HTML templates you are using, and you also have the ability to
              switch between views once the record has been displayed on the
              screen. This preference simply sets Koha's initial behavior when
              displaying a record. When first setting up your Koha system,
              "normal" is generally the best choice.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>LibraryName</term>

            <listitem>
              <para>The text of this variable will be the library name and/or
              message that will be shown on the main OPAC page.</para>

              <para>If you are not familiar with HTML (Hyper-Text Markup
              Language), you may want to find someone to help with this. You
              will be using simple HTML tags to format your name and message.
              Here, for example, is the default name and
              message:<programlisting>&lt;i&gt;&lt;b&gt;Koha&lt;br/&gt;Free Software ILS&lt;br/&gt;&lt;br/&gt;&lt;/b&gt;Koha : a gift, a contribution&lt;br/&gt; in Maori&lt;/i&gt;</programlisting></para>

              <para>The letters and slashes enclosed by wedges (&lt;&gt;) are
              the HTML tags. All text between &lt;i&gt; and &lt;/i&gt; will
              appear in <emphasis role="bold">i</emphasis>talics, all text
              between &lt;b&gt; and &lt;/b&gt; will be in <emphasis
              role="bold">b</emphasis>old face, and the &lt;br/&gt;
              ("<emphasis role="bold">br</emphasis>eak") tags mark the ends of
              lines of text.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>OpacPasswordChange</term>

            <listitem>
              <para>This preference controls whether or not a borrower can
              change their password through the OPAC. It is particularly
              useful for applications that use LDAP authentication for
              borrowers, since Koha would have no control over the LDAP
              password.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>SubscriptionHistory</term>

            <listitem>
              <para>This system preference sets the type of details that OPAC
              users will see when they search for information about your
              library's periodical subscriptions. The choices are "simplified"
              or "full."</para>

              <variablelist>
                <varlistentry>
                  <term>simplified</term>

                  <listitem>
                    <para>The OPAC user will see the name of the periodical,
                    the date when the library began receiving the periodical,
                    how often the periodical is issued, and the date when the
                    library last renewed the subscription (or the date of the
                    last issue received, if the library no longer subscribes).
                    This information will be followed by a list of received
                    issues and missing issues.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>full</term>

                  <listitem>
                    <para>The OPAC user will see the name of the periodical
                    followed by a list of issues, showing the date of each
                    issue, the number of each issue, and the status of each
                    issue -- arrived, awaited, late, or missing.</para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>hidelostitems</term>

            <listitem>
              <para>If you do not want items in your catalogue which have been
              tagged as "lost" to appear in the results of OPAC searches, set
              this preference to "Yes." If you always want all items
              displayed, regardless of their "lost" status, leave this value
              set to "No."</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>opaclanguages</term>

            <listitem>
              <para>This preference sets your language preference.</para>

              <para>Despite the name, this choice can control the language
              used for all Koha screens, not just the OPAC. All of Koha is
              available in either English ("en") or French ("fr"), portions
              have been translated into Italian ("it") and Taiwan-Chinese
              ("zh-TW"), and more languages are being added. The top language
              in your list will be tried first when Koha displays a screen of
              information.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>opaclargeimage</term>

            <listitem>
              <para>This system preference allows you to place your own custom
              logo on the OPAC main page. Normally, OPAC users will see the
              default Koha logo:<figure>
                  <title>Koha logo</title>

                  <mediaobject>
                    <imageobject>
                      <imagedata fileref="images/front-background-med.gif" />
                    </imageobject>
                  </mediaobject>
                </figure></para>

              <para>If you want to use your own logo, this system preference
              should contain the path to your <filename>.gif</filename> image
              file. (The size of the default logo is 310x440 pixels.)</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>opacsmallimage</term>

            <listitem>
              <para>As with the opaclargeimage, this preference allows you to
              substitute a custom logo for the default Koha logo that normally
              appears in the upper left corner of OPAC pages other than the
              main page. (The size of the default small Koha logo is 35x50
              pixels.)</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>opacstylesheet</term>

            <listitem>
              <para>In order to be compliant with the web standards
              recommended by the World Wide Web Consortium, Koha makes use of
              cascading style sheet (CSS) files to determine many of the
              aspects of how a Koha screen appears. The default CSS file for
              the OPAC is <filename>opac.css</filename>, which can be found in
              the
              <filename>/usr/local/koha/opac/htdocs/opac-tmpl/default/en/includes</filename>
              directory in most Koha installations. There is also a second
              choice of style sheet if you set this system preference to
              <filename>/opac-tmpl/css/opac2.css</filename>.</para>

              <para>If you would like to use your own cascading style sheet
              for the OPAC, enter the complete "href" path to the file as the
              value of this preference. For example, the href path (or URL) to
              the default style sheet would be
              <filename>/opac-tmpl/default/en/includes/opac.css</filename>.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>opacthemes</term>

            <listitem>
              <para>Koha makes use of HTML templates to build the web pages
              that are displayed on the screen. By modifying these templates,
              the user can change the way data appears on Koha's
              screens.</para>

              <para>There are several groups of templates that have been
              developed which are complete enough to qualify as OPAC "themes,"
              providing a consistent and distinctive look and feel across many
              of the Koha OPAC pages. Two themes in particular -- "css" and
              "npl" -- provide some interesting designs for OPAC pages:</para>

              <variablelist>
                <varlistentry>
                  <term>css</term>

                  <listitem>
                    <para>is the current OPAC theme that is installed by
                    default. (The theme that is actually named "default" is
                    similar, but not currently as web compliant as the css
                    theme.) Developed primarily by Paul Poulain, it uses
                    cascading style sheets -- hence the name "css." Unless
                    otherwise noted, the screen shots in this manual depict
                    the css theme.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>npl</term>

                  <listitem>
                    <para>is a completely different theme, though it also uses
                    cascading style sheets. This theme was developed by Owen
                    Leonard at the Nelsonville Public Library -- hence the
                    name "npl."<figure>
                        <title>OPAC home page in "npl" theme</title>

                        <mediaobject>
                          <imageobject>
                            <imagedata fileref="images/nplopac.gif" />
                          </imageobject>
                        </mediaobject>
                      </figure></para>
                  </listitem>
                </varlistentry>
              </variablelist>

              <para>As with opaclanguages, the first choice on your list will
              be tried for each page, but if there is no template for that
              page in your chosen theme, Koha will revert to the default
              theme.</para>

              <tip>
                <para>In most Koha installations, the templates for each theme
                are found under the
                <filename>/usr/local/koha/opac/</filename><filename>htdocs/opac-tmpl</filename>
                directory.</para>
              </tip>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>suggestion</term>

            <listitem>
              <para>If set to 1, the Suggestions feature is activated in the
              OPAC. This feature allows OPAC users to suggest book purchases.
              When a suggestion is made in the OPAC, it is assigned the status
              "ASKED." A librarian then manages the suggestion and can set the
              status to "REJECTED" or "ORDERED." When a book is ordered and
              has arrived in the library, the status becomes "AVAILABLE."
              Suggestions that are not yet "AVAILABLE" are visible to all
              users of the OPAC.<figure>
                  <title>Koha OPAC home page with "suggestion" parameter
                  activated.</title>

                  <mediaobject>
                    <imageobject>
                      <imagedata fileref="images/opacsuggon.gif" />
                    </imageobject>

                    <caption><para>If the "suggestion" parameter is not
                    activated or the user is not logged in, the "View and
                    manage suggestions" button will not
                    appear.</para></caption>
                  </mediaobject>
                </figure></para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>virtualshelves</term>

            <listitem>
              <para>This preference turns the virtual shelves option on or off
              ("1" or "0"). Users who login to the OPAC can set up and manage
              their own "virtual bookshelves" of favorite library items if
              this feature is turned on.</para>

              <para>There are three types of virtual shelves:</para>

              <variablelist>
                <varlistentry>
                  <term>Private</term>

                  <listitem>
                    <para>These shelves can only be viewed or modified by the
                    logged-in user who created them. For example, a borrower
                    might select titles of books in the library's catalogue
                    that he/she wants to read someday and can add these titles
                    to a private virtual shelf for later reference.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>Public</term>

                  <listitem>
                    <para>Any logged-in OPAC user can view these virtual
                    shelves, but only the shelf creator can modify the
                    contents. This type of virtual shelf might be used by a
                    teacher to keep a list of library items for students to
                    read, or a library might create "bestseller" lists for the
                    public using public virtual shelves.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>Free</term>

                  <listitem>
                    <para>Any logged-in OPAC user can view or modify these
                    virtual shelves. These shelves thus become a sort of
                    "public forum." Someone might start a free virtual shelf
                    of "best computer books," for example, and other users
                    could then add (or delete!) items from the list.</para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Others</title>

        <variablelist>
          <varlistentry>
            <term>delimiter</term>

            <listitem>
              <para>When exporting statistical data for reports, Koha can
              produce delimited files for importing into other applications.
              This preference sets the default delimiter. For instance, if you
              want Koha to produce comma-separated value (csv) files for
              importing into a spreadsheet application, you would choose the
              "," as the default delimiter.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>Disable_Dictionary</term>

            <listitem>
              <para>The Koha OPAC by default allows users to "pre-search" the
              catalogue for words in titles, authors names, or subjects. This
              feature can greatly reduce the number of inappropriate records
              returned by a catalogue search, but some libraries may want to
              disable the feature by turning this preference on.</para>

              <para>The feature is accessed through the Advanced Search and is
              triggered by clicking on the three dots [...] after the Title,
              Author, or Subject search fields.</para>

              <figure>
                <title>Dictionary Search</title>

                <mediaobject>
                  <imageobject>
                    <imagedata fileref="images/dictsearch.gif" />
                  </imageobject>
                </mediaobject>
              </figure>

              <para>By choosing from the list of terms returned by the
              dictionary search, a more accurate search of the general
              catalogue can be accomplished.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>IndependantBranches</term>

            <listitem>
              <para>If this preference is turned on, all branches are treated
              as independent libraries working with one common database. Any
              staff member (with the necessary authority) can create basic
              bibliographic records for the database, or issue and return any
              book in the database. But staff at one branch cannot add items
              to another branch, or add borrowers to another branch, nor can
              they modify items or borrowers that "belong" to another branch.
              The exception to this rule is that any librarians with
              "superlibrarian" privileges can do any of these things; they are
              not restricted by this system preference.<note>
                  <para>This preference does not affect the display of
                  catalogue records in the OPAC -- searches will always
                  display results from all branches.</para>
                </note></para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>KohaAdminEmailAddress</term>

            <listitem>
              <para>This is the e-mail address that will receive requests from
              borrowers for modification of their records.</para>

              <para>When borrowers login to the OPAC and review their
              accounts, they may see errors in their personal details. Koha
              allows them to fill out a form requesting corrections to their
              details, and this form is then e-mailed to a library
              administrator for review and action. This system preference
              tells Koha how to address those e-mails</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>MIME</term>

            <listitem>
              <para>Koha can export statistical reports to spreadsheet files
              in either Microsoft Excel or OpenOffice format. Use this
              preference to determine which format Koha will use.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>template</term>

            <listitem>
              <para>This preference should probably really be called
              "intranetthemes," because it is the counterpart of the
              "opacthemes" preference. This preference controls which group of
              templates will be used for your Intranet screens. Currently the
              only choices are "default" and "npl." The "css" and "vanilla"
              themes that are available for the OPAC are not available here,
              because they do not provide Intranet templates.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>timeout</term>

            <listitem>
              <para>This is the Inactivity timeout period (in seconds). If a
              workstation is idle for longer than this period, the user will
              have to login again.</para>
            </listitem>
          </varlistentry>
        </variablelist>

        <para>Now that you have set all of your system preferences, it's time
        to return to the Parameters page and work your way through the rest of
        the things listed there.</para>
      </section>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term><anchor id="isbd" />Posted by Joshua Allen Holm</term>

            <listitem>
              <para>There is a minor problem with the ISBD values. The 082
              entry for call number will not display when called on the #050
              line.</para>

              <para>This block should fix the problem:<programlisting>#082|&lt;label&gt;Call Number: &lt;/label&gt;|{082a}|&lt;br/&gt;&lt;br/&gt;
#050|&lt;label&gt;Call Number: &lt;/label&lt;|{050a}{ / 050b}|&lt;br/&gt;&lt;br/&gt;
#100|&lt;label&gt;Main Entry: &lt;/label&gt;|{100a}{ 100b}{ 100c}{100d}{110a}{ 
110b}{130a}|&lt;br/&gt;
#245|&lt;label&gt; &lt;/label&gt;|{245a}{ 245b}{ 245c}{ 245h}{ 246i}{ 246a}| #260||{ 
250a}{ 250b}{-- 260a}{ 260b}{ 260c}|
#300|&lt;br/&gt;&lt;label&gt; &lt;/label&gt;|{300a}{ 300b}{300c}|&lt;br/&gt;
#020|&lt;br/&gt;&lt;label&gt; ISBN&lt;/label&gt;|{ 020a}{ 024a}|&lt;br/&gt;
#440|&lt;br/&gt;&lt;label&gt; &lt;/label&gt;|{440a}{ 440v}|&lt;br/&gt;
#500||{\n500a}|&lt;br/&gt;
#511||{511a, }|
#520|&lt;label&gt; &lt;/label&gt;|{\n520a}{ 520b}|
#600|&lt;br/&gt;&lt;label&gt;Subjects: &lt;/label&gt;|{ 600a.}|
#650|&lt;label&gt; &lt;/label&gt;|{\n650a }{-- 650x}{-- 650z}{-- 650y}|
#651|&lt;label&gt; &lt;/label&gt;|{\n651a }{-- 651x}{-- 651z}{-- 651y}| 
#852|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Held at: &lt;/label&gt;|{\n852a}{, 852b}{, 852c}|</programlisting></para>

              <para>Anyone wishing to use these values, please note: When
              cutting and pasting the block above, it is very important to
              either remove all line breaks first or change the ISBD variable
              type to Textarea with the variable options 80|20 first. (Click
              OK after changing the variable type then click edit again to be
              able to paste the text into a text area).</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>Posted by Thomas Dukleth</term>

            <listitem>
              <para>I have seen that the postings on the koha and koha-devel
              lists have had very incomplete and inaccurate ISBD mappings from
              MARC 21 for use in the Koha ISBD System Preference. Here is a
              coded mapping for ISBD for MARC 21.</para>

              <para>The mapping that I have used follows the IFLA ISBD rules
              as closely as can reasonably be managed in the current Koha
              implementation with modest exception for some minor concessions
              to readability usage in Koha. Main author form is implemented
              appended before the first ISBD section which can be appropriate
              for a main author form. Subject headings have been separated by
              newlines for readability. It would be easy for the user to
              correct those issues. The initial main author may be removed.
              The newlines before 6XX $a may be replaced by a blank space.
              There are some punctuation and other issues remaining but they
              do not seem consistently resolvable without some major
              corrections to Koha functionality that would not happen before
              Koha 3.0. Some ISBD section closing punctuation might be
              improved with further experimentation. I have not thoroughly
              proofread my work but it seems to show no intrinsic problems to
              the extent that I have tested it.</para>

              <programlisting>#100||{ 100a }{ 100b }{ 100c }{ 100d }{ 110a }{ 110b }{ 110c }{ 110d }{ 110e }{ 110f }{ 110g }{ 130a }{ 130d }{ 130f }{ 130g }{ 130h }{ 130k }{ 130l }{ 130m }{ 130n }{ 130o }{ 130p }{ 130r }{ 130s }{ 130t }|&lt;br/&gt;&lt;br/&gt;
#245||{ 245a }{ 245b }{245f }{ 245g }{ 245k }{ 245n }{ 245p }{ 245s }{ 245h }|
#246||{ : 246i }{ 246a }{ 246b }{ 246f }{ 246g }{ 246n }{ 246p }{ 246h }|
#242||{ = 242a }{ 242b }{ 242n }{ 242p }{ 242h }|
#245||{ 245c }|
#242||{ = 242c }|
#250| - |{ 250a }{ 250b }|
#254|, |{ 254a }|
#255|, |{ 255a }{ 255b }{ 255c }{ 255d }{ 255e }{ 255f }{ 255g }|
#256|, |{ 256a }|
#257|, |{ 257a }|
#258|, |{ 258a }{ 258b }|
#260| - |{ 260a }{ 260b }{ 260c }|
#300| - |{ 300a }{ 300b }{ 300c }{ 300d }{ 300e }{ 300f }{ 300g }|
#306| - |{ 306a }|
#307| - |{ 307a }{ 307b }|
#310| - |{ 310a }{ 310b }|
#321| - |{ 321a }{ 321b }|
#340| - |{ 3403 }{ 340a }{ 340b }{ 340c }{ 340d }{ 340e }{ 340f }{ 340h }{ 340i }|
#342| - |{ 342a }{ 342b }{ 342c }{ 342d }{ 342e }{ 342f }{ 342g }{ 342h }{ 342i }{ 342j }{ 342k }{ 342l }{ 342m }{ 342n }{ 342o }{ 342p }{ 342q }{ 342r }{ 342s }{ 342t }{ 342u }{ 342v }{ 342w }|
#343| - |{ 343a }{ 343b }{ 343c }{ 343d }{ 343e }{ 343f }{ 343g }{ 343h }{ 343i }|
#351| - |{ 3513 }{ 351a }{ 351b }{ 351c }|
#352| - |{ 352a }{ 352b }{ 352c }{ 352d }{ 352e }{ 352f }{ 352g }{ 352i }{ 352q }|
#362| - |{ 362a }{ 351z }|
#440| - |{ 440a }{ 440n }{ 440p }{ 440v }{ 440x }|.
#490| - |{ 490a }{ 490v }{ 490x }|.
#800| - |{ 800a }{ 800b }{ 800c }{ 800d }{ 800e }{ 800f }{ 800g }{ 800h }{ 800j }{ 800k }{ 800l }{ 800m }{ 800n }{ 800o }{ 800p }{ 800q }{ 800r }{ 800s }{ 800t }{ 800u }{ 800v }|.
#810| - |{ 810a }{ 810b }{ 810c }{ 810d }{ 810e }{ 810f }{ 810g }{ 810h }{ 810k }{ 810l }{ 810m }{ 810n }{ 810o }{ 810p }{ 810r }{ 810s }{ 810t }{ 810u }{ 810v }|.
#811| - |{ 811a }{ 811c }{ 811d }{ 811e }{ 811f }{ 811g }{ 811h }{ 811k }{ 811l }{ 811n }{ 811p }{ 811q }{ 811s }{ 811t }{ 811u }{ 811v }|.
#830| - |{ 830a }{ 830d }{ 830f }{ 830g }{ 830h }{ 830k }{ 830l }{ 830m }{ 830n }{ 830o }{ 830p }{ 830r }{ 830s }{ 830t }{ 830v }|.
#500|&lt;br/&gt;&lt;br/&gt;|{ 5003 }{ 500a }|
#501|&lt;br/&gt;&lt;br/&gt;|{ 501a }|
#502|&lt;br/&gt;&lt;br/&gt;|{ 502a }|
#504|&lt;br/&gt;&lt;br/&gt;|{ 504a }|
#505|&lt;br/&gt;&lt;br/&gt;|{ 505a }{ 505t }{ 505r }{ 505g }{ 505u }|
#506|&lt;br/&gt;&lt;br/&gt;|{ 5063 }{ 506a }{ 506b }{ 506c }{ 506d }{ 506u }|
#507|&lt;br/&gt;&lt;br/&gt;|{ 507a }{ 507b }|
#508|&lt;br/&gt;&lt;br/&gt;|{ 508a }{ 508a }|
#510|&lt;br/&gt;&lt;br/&gt;|{ 5103 }{ 510a }{ 510x }{ 510c }{ 510b }|
#511|&lt;br/&gt;&lt;br/&gt;|{ 511a }|
#513|&lt;br/&gt;&lt;br/&gt;|{ 513a }{513b }|
#514|&lt;br/&gt;&lt;br/&gt;|{ 514z }{ 514a }{ 514b }{ 514c }{ 514d }{ 514e }{ 514f }{ 514g }{ 514h }{ 514i }{ 514j }{ 514k }{ 514m }{ 514u }|
#515|&lt;br/&gt;&lt;br/&gt;|{ 515a }|
#516|&lt;br/&gt;&lt;br/&gt;|{ 516a }|
#518|&lt;br/&gt;&lt;br/&gt;|{ 5183 }{ 518a }|
#520|&lt;br/&gt;&lt;br/&gt;|{ 5203 }{ 520a }{ 520b }{ 520u }|
#521|&lt;br/&gt;&lt;br/&gt;|{ 5213 }{ 521a }{ 521b }|
#522|&lt;br/&gt;&lt;br/&gt;|{ 522a }|
#524|&lt;br/&gt;&lt;br/&gt;|{ 524a }|
#525|&lt;br/&gt;&lt;br/&gt;|{ 525a }|
#526|&lt;br/&gt;&lt;br/&gt;|{\n510i }{\n510a }{ 510b }{ 510c }{ 510d }{\n510x }|
#530|&lt;br/&gt;&lt;br/&gt;|{\n5063 }{\n506a }{ 506b }{ 506c }{ 506d }{\n506u }|
#533|&lt;br/&gt;&lt;br/&gt;|{\n5333 }{\n533a }{\n533b }{\n533c }{\n533d }{\n533e }{\n533f }{\n533m }{\n533n }|
#534|&lt;br/&gt;&lt;br/&gt;|{\n533p }{\n533a }{\n533b }{\n533c }{\n533d }{\n533e }{\n533f }{\n533m }{\n533n }{\n533t }{\n533x }{\n533z }|
#535|&lt;br/&gt;&lt;br/&gt;|{\n5353 }{\n535a }{\n535b }{\n535c }{\n535d }|
#538|&lt;br/&gt;&lt;br/&gt;|{\n5383 }{\n538a }{\n538i }{\n538u }|
#540|&lt;br/&gt;&lt;br/&gt;|{\n5403 }{\n540a }{ 540b }{ 540c }{ 540d }{\n520u }|
#544|&lt;br/&gt;&lt;br/&gt;|{\n5443 }{\n544a }{\n544b }{\n544c }{\n544d }{\n544e }{\n544n }|
#545|&lt;br/&gt;&lt;br/&gt;|{\n545a }{ 545b }{\n545u }|
#546|&lt;br/&gt;&lt;br/&gt;|{\n5463 }{\n546a }{ 546b }|
#547|&lt;br/&gt;&lt;br/&gt;|{\n547a }|
#550|&lt;br/&gt;&lt;br/&gt;|{ 550a }|
#552|&lt;br/&gt;&lt;br/&gt;|{ 552z }{ 552a }{ 552b }{ 552c }{ 552d }{ 552e }{ 552f }{ 552g }{ 552h }{ 552i }{ 552j }{ 552k }{ 552l }{ 552m }{ 552n }{ 562o }{ 552p }{ 552u }|
#555|&lt;br/&gt;&lt;br/&gt;|{ 5553 }{ 555a }{ 555b }{ 555c }{ 555d }{ 555u }|
#556|&lt;br/&gt;&lt;br/&gt;|{ 556a }{ 506z }|
#563|&lt;br/&gt;&lt;br/&gt;|{ 5633 }{ 563a }{ 563u }|
#565|&lt;br/&gt;&lt;br/&gt;|{ 5653 }{ 565a }{ 565b }{ 565c }{ 565d }{ 565e }|
#567|&lt;br/&gt;&lt;br/&gt;|{ 567a }|
#580|&lt;br/&gt;&lt;br/&gt;|{ 580a }|
#581|&lt;br/&gt;&lt;br/&gt;|{ 5633 }{ 581a }{ 581z }|
#584|&lt;br/&gt;&lt;br/&gt;|{ 5843 }{ 584a }{ 584b }|
#585|&lt;br/&gt;&lt;br/&gt;|{ 5853 }{ 585a }|
#586|&lt;br/&gt;&lt;br/&gt;|{ 5863 }{ 586a }|
#020|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;ISBN: &lt;/label&gt;|{ 020a }{ 020c }|
#022|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;ISSN: &lt;/label&gt;|{ 022a }|
#222| = |{ 222a }{ 222b }|
#210| = |{ 210a }{ 210b }|
#024|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Standard No.: &lt;/label&gt;|{ 024a }{ 024c }{ 024d }{ 0242 }|
#027|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Standard Tech. Report. No.: &lt;/label&gt;|{ 027a }|
#028|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Publisher. No.: &lt;/label&gt;|{ 028a }{ 028b }|
#013|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Patent No.: &lt;/label&gt;|{ 013a }{ 013b }{ 013c }{ 013d }{ 013e }{ 013f }|
#030|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;CODEN: &lt;/label&gt;|{ 030a }|
#037|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Source: &lt;/label&gt;|{ 037a }{ 037b }{ 037c }{ 037f }{ 037g }{ 037n }|
#010|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;LCCN: &lt;/label&gt;|{ 010a }|
#015|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Nat. Bib. No.: &lt;/label&gt;|{ 015a }{ 0152 }|
#016|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Nat. Bib. Agency Control No.: &lt;/label&gt;|{ 016a }{ 0162 }|
#600|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Personal Names: &lt;/label&gt;|{\n6003 }{\n600a}{ 600b }{ 600c }{ 600d }{ 600e }{ 600f }{ 600g }{ 600h }{--600k}{ 600l }{ 600m }{ 600n }{ 600o }{--600p}{ 600r }{ 600s }{ 600t }{ 600u }{--600x}{--600z}{--600y}{--600v}|
#610|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Corporate Names: &lt;/label&gt;|{\n6103 }{\n610a}{ 610b }{ 610c }{ 610d }{ 610e }{ 610f }{ 610g }{ 610h }{--610k}{ 610l }{ 610m }{ 610n }{ 610o }{--610p}{ 610r }{ 610s }{ 610t }{ 610u }{--610x}{--610z}{--610y}{--610v}|
#611|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Meeting Names: &lt;/label&gt;|{\n6113 }{\n611a}{ 611b }{ 611c }{ 611d }{ 611e }{ 611f }{ 611g }{ 611h }{--611k}{ 611l }{ 611m }{ 611n }{ 611o }{--611p}{ 611r }{ 611s }{ 611t }{ 611u }{--611x}{--611z}{--611y}{--611v}|
#630|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Uniform Titles: &lt;/label&gt;|{\n630a}{ 630b }{ 630c }{ 630d }{ 630e }{ 630f }{ 630g }{ 630h }{--630k }{ 630l }{ 630m }{ 630n }{ 630o }{--630p}{ 630r }{ 630s }{ 630t }{--630x}{--630z}{--630y}{--630v}|
#648|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Chronological Terms: &lt;/label&gt;|{\n6483 }{\n648a }{--648x}{--648z}{--648y}{--648v}|
#650|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Topical Terms: &lt;/label&gt;|{\n6503 }{\n650a}{ 650b }{ 650c }{ 650d }{ 650e }{--650x}{--650z}{--650y}{--650v}|
#651|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Geographic Terms: &lt;/label&gt;|{\n6513 }{\n651a}{ 651b }{ 651c }{ 651d }{ 651e }{--651x}{--651z}{--651y}{--651v}|
#653|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Index Terms: &lt;/label&gt;|{ 653a }|
#654|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Subjects--Facted Index Terms: &lt;/label&gt;|{\n6543 }{\n654a}{--654b}{--654x}{--654z}{--654y}{--654v}|
#655|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Index Terms--Genre/Form: &lt;/label&gt;|{\n6553 }{\n655a}{--655b}{--655x }{--655z}{--655y}{--655v}|
#656|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Index Terms--Occupation: &lt;/label&gt;|{\n6563 }{\n656a}{--656k}{--656x}{--656z}{--656y}{--656v}|
#657|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Index Terms--Function: &lt;/label&gt;|{\n6573 }{\n657a}{--657x}{--657z}{--657y}{--657v}|
#658|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Index Terms--Curriculum Objective: &lt;/label&gt;|{\n658a}{--658b}{--658c}{--658d}{--658v}|
#050|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;LC Class. No.: &lt;/label&gt;|{ 050a }{ / 050b }|
#082|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Dewey Class. No.: &lt;/label&gt;|{ 082a }{ / 082b }|
#080|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Universal Decimal Class. No.: &lt;/label&gt;|{ 080a }{ 080x }{ / 080b }|
#070|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;National Agricultural Library Call No.: &lt;/label&gt;|{ 070a }{ / 070b }|
#060|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;National Library of Medicine Call No.: &lt;/label&gt;|{ 060a }{ / 060b }|
#074|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;GPO Item No.: &lt;/label&gt;|{ 074a }|
#086|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Gov. Doc. Class. No.: &lt;/label&gt;|{ 086a }|
#088|&lt;br/&gt;&lt;br/&gt;&lt;label&gt;Report. No.: &lt;/label&gt;|{ 088a }|</programlisting>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term><anchor id="itemcallnumber" />Posted by Paul Poulain</term>

            <listitem>
              <para>Let me explain <varname>itemcallnumber</varname>.</para>

              <para>To define a "book", you need two different things:</para>

              <orderedlist>
                <listitem>
                  <para>its classification =&gt; meaning what the book is
                  related to. Many libraries use Dewey, but not all. Many use
                  LCCN (not in France), or another classification (for example
                  : AMS for mathematical libraries).</para>
                </listitem>

                <listitem>
                  <para>its physical location in the shelves =&gt; the "call
                  number".</para>
                </listitem>
              </orderedlist>

              <para>The difficulty here is that most libraries, and they are
              right, have call numbered their "books" like they have
              classified them. So, classification = callnumber. But that's not
              the same concept:</para>

              <itemizedlist>
                <listitem>
                  <para>a single book (= 1 callnumber) can have X
                  classifications in some cases (= some subjects)</para>
                </listitem>

                <listitem>
                  <para>X books can have the same callnumber, or different
                  call numbers, even if they have a single classification
                  (=when the library has a callnumber not 100% related to
                  classification)</para>
                </listitem>
              </itemizedlist>

              <para>That's why I introduced <varname>itemcallnumber</varname>
              in Koha 2.2 branch. We need a CLASSIFICATION at the biblio level
              and a CALL NUMBER at the item level! Usually they contain the
              same information, that's why there is a systempreference where
              you can say "OK, computer, automatically report subfield XXXy
              from biblio into item when adding an item."</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Setting Operating Parameters</title>

      <para>Koha allows you to set various parameters to suit your library's
      needs. Some of these -- most notably the item types -- must be set
      before Koha can function. Others may be set later as needed for your
      particular library. We'll start with the parameters which control the
      operating environment of the library. In the next section, we'll deal
      with setting the parameters of your bibliographic data (which can be a
      very complex process).</para>

      <section>
        <title>Library Branches</title>

        <para>This parameter tells Koha about your library's public service
        outlets. Even if you have only one outlet, you need to give Koha some
        information about it. You may find that some information about your
        primary outlet already exists, since the installation script gives the
        installing technician the option of setting some basic information as
        part of the installation process. That information can now be changed
        or refined, if necessary.</para>

        <para>Begin by defining your branch categories. If, for example, you
        have one main library and several branch libraries, you might set up
        an "MAIN" (Main) category and a "BR" (Branch) category, with
        descriptions "Main library" and "Branch library."</para>

        <figure>
          <title>Adding branch categories</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/branchcat.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Now add the names and addresses, phone numbers, etc of your
        libraries in the "Branches" section. (All of your libraries should be
        described here, not just the branch libraries.) Give each library a
        unique and easily-remembered code (maximum of four characters). This
        code will be used in Koha's database to identify each library. When
        libraries are listed in Koha, they will be listed in alphabetical
        order by code.<note>
            <para>Until you set your branch the first time you use a computer
            to circulate items in Koha, the branch will default to the first
            library in the alphabetical code list -- be careful to set the
            branch the first time you use Koha or whenever you add a new
            computer! After you set the branch the first time, a cookie is
            stored on that computer so you will not need to set it
            again.</para>
          </note><figure>
            <title>Adding branch descriptions</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/addbranch.gif" />
              </imageobject>
            </mediaobject>
          </figure>Some libraries have also set up "virtual" branches with
        names like "At bindery" or "In storage" to make it easier to pinpoint
        the location of items that are temporarily not available. If you are
        going to do this, remember that these virtual branches will appear in
        the OPAC just as if they were real branches, and you will need to set
        your issuing rules for these branches accordingly.</para>

        <para>As you add branch categories and branches, the list on your
        "Branches" screen will grow. Make sure that each branch is assigned to
        a defined branch category, and you should be ready to go on to the
        next step.</para>

        <figure>
          <title>Branches</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/branches.gif" />
            </imageobject>
          </mediaobject>
        </figure>
      </section>

      <section>
        <title>Printers</title>

        <para>If you are going to be using a printer (or several printers)
        that is attached to your Koha server for producing statistical and
        operations reports, then you need to give each printer a name and tell
        Koha how to access it. You do this by telling Koha which print queue
        to use.<note>
            <para>In Linux, each printer configuration in your
            <filename>printcap</filename> file defines a print queue. The
            default print queue is "lp," but if you use more than one printer
            you will have other queues, probably with names like "text" or
            "postscript." Tell Koha which printer queue(s) you want to use for
            printing reports directly from the server.</para>
          </note></para>

        <figure>
          <title>Printers screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/printers.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <tip>
          <para>You can always print Koha screens directly to a printer
          attached to your workstation just by using your web browser's Print
          function.</para>
        </tip>

        <para>See the related <link linkend="print">comment</link> in the User
        Comments section.</para>
      </section>

      <section>
        <title>Item Types</title>

        <para>Item types are the "categories" into which your library items
        are divided. Defining item types <emphasis role="bold">must</emphasis>
        be done before Koha can function, and it should be done carefully and
        with a great deal of thought, because issuing rules, statistics, OPAC
        searches, and many other Koha functions will be based on these
        categories.</para>

        <para>You can define as many item types as you want. For instance, you
        probably want to have videocassettes in a different category from
        non-fiction books, and mysteries in a different category from
        children's picture books. If you already are using a commercial
        Integrated Library System, you almost certainly already have all of
        your materials divided up into such categories. Now you need to tell
        Koha what your categories are.</para>

        <figure>
          <title>Adding Item Types</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/additemtype.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The itemtype code is limited to four characters. This "Item
        type" code is rarely displayed by Koha; instead the "Description" of
        the type will be what users see. "Rental charge" is any amount you
        might charge to users for borrowing items of a certain type (like
        videos). "Number of renewals" specifies how many times a borrower of
        items of this type may renew the loan. "Not for loan" would be checked
        for item types such as reference materials which do not leave the
        library.</para>

        <para>Item types are useful for many things, and
        <emphasis>very</emphasis> important in controlling how Koha works. To
        cite just two examples:</para>

        <itemizedlist>
          <listitem>
            <para>borrowers can limit their searches to items of a certain
            type;</para>
          </listitem>

          <listitem>
            <para>issuing rules are set according to item types (and borrower
            categories and branches).</para>
          </listitem>
        </itemizedlist>

        <para>Setting up item types is one of the first things you should do
        after installing the Koha software.<figure>
            <title>Sample item types</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/itemtypes.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>While some of your parameter settings may be delayed until after
        you have tested Koha for a while, item types are critical to the way
        Koha behaves and should be set early and carefully.</para>
      </section>

      <section>
        <title>Borrower Categories</title>

        <para>Here is where you define the types of users of your library and
        how they will be handled.<figure>
            <title>Borrower category administration</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/borrcat.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <note>
          <para>The borrower category administration page warns that you need
          a "C" (child) and "I" (institution) category. Koha will not fail if
          you do not have these category codes, but there are some features of
          Koha that expect these codes. The borrowing record of a "C," for
          example, will automatically be linked to the record of the child's
          parent. An "I" code allows the librarian to save information about
          the institutional borrower that is slightly different from the
          information saved about regular borrowers.</para>

          <para>If you do not want to have children's records attached to
          their parents records, and/or do not have institutional borrowers,
          you may ignore the warnings about these two special borrower
          categories.</para>
        </note>

        <figure>
          <title>Adding borrower categories</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addborrcat.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Start by assigning a "Category Code" and a "Description" to each
        borrower type. The code is limited to no more than two characters and
        may be anything you choose. "Enrollment period" is a number indicating
        how many years a user's enrollment is valid. If your enrollments
        expire after four years, for example (as in a school?), then set this
        number to 4. If enrollments never expire, set this to an impossibly
        high number (99). "Upper Age Limit" and "Age Required" set the age
        parameters for this type of user. If you issue children's cards to
        users between the ages of 2 and 18, for example, then "Age Required"
        would be "2" and "Upper Age Limit" would be "18." If there is no upper
        age limit, set this value to 999 (the highest allowed). "Enrollment
        Fee" and "Reserve Fee" (if any) should be entered either as whole
        numbers or with six decimal places, with no currency notation (e.g.
        "1.250000" instead of "$1.25"). "Overdue Notice Required" lets you
        bypass generating overdue notices for this user type.</para>
      </section>

      <section>
        <title>Issuing Rules</title>

        <para>Here is yet another important parameter to set before using
        Koha, since it controls many aspects related to the circulation of
        library materials. Item Types and Borrower Categories, however, must
        be defined before you can define your Issuing Rules. (Your branches
        should be defined, too, if your issuing rules will vary from branch to
        branch.) If you try to define issuing rules before item types and
        borrower categories are set, the grid at the bottom of the screen will
        be empty and you cannot proceed.</para>

        <figure>
          <title>Issuing rules screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/issuingrules.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The on-screen help is pretty extensive for this parameter. The
        grid at the bottom of the screen contains the descriptions of all your
        item types (in the rows) and all of your borrower categories (in the
        columns), with each borrower column subdivided into boxes for issues
        and fines. In addition, the last row and the last column are both
        labeled with an asterisk. If a box in the grid is left blank, its
        value will be calculated based on the value in the "*" boxes, as
        explained in the "Default values" area of the on-screen
        instructions.<note>
            <para>Actually, the instructions regarding "Default values" should
            currently be ignored. Changes to Koha have broken the default
            values capability for the past few versions of Koha, including
            version 2.2.5. This should be corrected in the near future;
            meanwhile, you must be sure to fill in the values for every
            borrower category and every item type and every branch, or you
            will receive error messages when trying to issue items to
            borrowers.</para>
          </note></para>

        <para>The "issue" boxes are filled with two whole numbers, separated
        by a comma. The first number tells Koha how many days a borrower from
        the corresponding category can borrow an item of the corresponding
        type. The second number tells Koha how many items of the corresponding
        type can be borrowed by a borrower from the corresponding category. In
        the screenshot above, an institutional borrower can borrow most items
        for 28 days, with an upper limit of 5 items of most types. Every other
        category of borrower can borrow most items for 21 days, with varying
        limits on the number of items of each type which may be borrowed.<tip>
            <para>Koha will not accept an entry of "0,0" in these boxes, so if
            you want to block a certain category of borrower from borrowing a
            certain type of item, set one of the numbers to "1" and the other
            to "0."</para>
          </tip></para>

        <para>Each of the "fine" boxes in the grid contains three numbers
        separated by commas. Each number defines the fine, how many days
        overdue the item must be before the fine is assessed (and a first
        notice prepared), and how many days after that the fine is assessed
        again (and a second notice sent). For example, if you charge adults 1
        dollar (or Euro, or whatever currency) for overdue videos after three
        days and add another dollar charge after another five days, put
        "1,3,5" in the box in the grid that aligns with "Adult" and "Video
        recording." If you charge adults 25 cents for overdue fiction books
        after a grace period of seven days and repeat the charge seven days
        later, then the entry in the corresponding box in the grid would be
        "0.25,7,7". After the first and second notice are given, Koha prepares
        a "final notice" after the number of days set by the final number in
        the grid and sets the charge to the maximum that you set in the
        "noissuescharge" system preference.</para>

        <note>
          <para>Fines are calculated by the <filename>fines2.pl</filename>
          script, located in the <filename>misc</filename> directory. If your
          system administrator puts this script in
          <filename>crontab</filename>, set to run after midnight, fines will
          be calculated every night. You should review this script first,
          however, because you may well want to customize it to handle fines
          differently from the default Koha behavior.</para>
        </note>
      </section>

      <section>
        <title>Stop Words</title>

        <para>Here you should list all of the words you wish Koha to ignore
        when performing catalogue searches or building the keyword index.
        Normally, you will not want Koha to save keyword references to
        articles like "The" and "A" and other very common words. Saving
        keyword references to these words does not help to limit a search and
        will make the keyword index very large and "cluttered" with words that
        are not really useful. The "stopwords" list defines these unnecessary
        words for your installation.<important>
            <para>You <emphasis>must</emphasis> define at least one stop word,
            or Koha searches will crash.</para>
          </important><figure>
            <title>Simple Stop Words List for English</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/stopwords.gif" />
              </imageobject>

              <caption><para>(Note that the box beside the "OK" button is a
              search box for longer lists that span several
              screens.)</para></caption>
            </mediaobject>
          </figure></para>

        <tip>
          <para>If you are proficient at MySQL, it is often faster and easier
          to find an existing stopwords list, edit it, put it in the correct
          format, and use the MySQL "Load Data Infile" command to import the
          list into the <filename>stopwords</filename> table. Many academic
          libraries in the USA publish their stopwords list on the Internet,
          or you can ask other Koha libraries if they would share their
          stopwords list.</para>
        </tip>
      </section>

      <section>
        <title>Z39.50 Servers</title>

        <para>Koha comes with Z39.50 client software for searching other
        libraries' MARC records; this parameter defines the Z39.50 servers you
        want Koha to search.<note>
            <para>In Koha version 2.x.x, the Z39.50 client will not work if
            Koha is installed on Windows or Mac OS X. This should change with
            the release of version 3.0.0.</para>
          </note></para>

        <para><ulink url="http://www.loc.gov/z3950/agency/">Z39.50</ulink> is
        an international standard for searching and retrieving information
        from remote databases. In practice, it provides a way for libraries to
        search and retrieve records from other libraries. Z39.50 client
        software is often provided as a component of an integrated library
        system; the server software is much less common. Index Data of Denmark
        (<ulink url="http://www.indexdata.dk">http://www.indexdata.dk</ulink>)
        provides many of the software tools used for Z39.50, and also
        maintains a <ulink
        url="http://www.indexdata.dk/targettest/">list</ulink> of Z39.50
        servers around the world.</para>

        <para>In this area, you can define servers for searching. Be sure the
        servers you choose support the MARC format you have chosen in your
        system preferences. To add servers, you will need to know the domain
        name or IP address of the server, the port number to use, and the name
        of the database to access. Be sure to choose servers which deliver
        records in the proper MARC format for your Koha installation. If you
        have a login name and password for Z39.50 servers that do not accept
        anonymous connections, Koha will save your user ID and password in
        addition to the other information it needs to make a connection. (For
        anonymous servers, leave the userid and password fields blank.)<figure>
            <title>Z39.50 Servers Setup</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/z3950servers.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>The other fields on the form control whether or not the server
        is automatically searched when you request a Z39.50 search (put a "1"
        in the "Checked" field) and the order in which it is checked. It is a
        good idea to be selective in choosing servers. Defining more than five
        or six checked servers may slow down your Z39.50 search
        results.</para>
      </section>

      <section>
        <title>Book Funds</title>

        <para>If you have set your "acquisitions" system preference to
        "normal," you now need to give Koha some information about your
        materials acquisition budget. (If you chose "simple" acquisitions,
        ignore this parameter.)</para>

        <para>"Book Funds" are accounts that you establish to keep track of
        your expenditures for library materials. They may be used for any kind
        of materials (not just books) and should match the line items in your
        materials budget. For instance, if your library establishes a budget
        line for books, another for audiovisual materials, a third line for
        magazines, and a fourth budget line for electronic databases, then you
        would have four Book Funds. The process of setting up the funds
        involves two steps: naming the funds, and setting the budget.</para>

        <figure>
          <title>Defining Book Fund Names</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/bookfundnames.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Each Book Fund has a unique fund code, limited to no more than
        five characters, that identifies it. You should decide on your fund
        codes (e.g. something like BOOKS, AV, MAGS, DATA for the four book
        funds described above) and enter the code in the "Book fund" box, then
        a full name in the "Name" box. If a fund is restricted to use by one
        branch, you may also choose that branch from a pull-down menu
        containing the names of all the branches you have defined.<note>
            <para>The list of branch names available for selection is not
            affected by the IndependantBranches systempreference.</para>
          </note></para>

        <para>Once you have set up a fund, you will see a link to a page for
        setting up the fund budget. Here you will enter the beginning and
        ending dates of your budget period and the amount of money in that
        particular budget line.</para>

        <figure>
          <title>Setting Book Fund Budgets</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/bookfundbudget.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Do not use any kind of currency notation (like "$") or commas
        when entering the budget number. (Commas will be converted to decimal
        points.) You may set up several budgets for each fund, if you like,
        each budget covering a different time period.<warning>
            <para>Your dates will not be saved correctly unless you have
            already set your date format in the System Preferences section of
            the Parameters page -- DO THIS BEFORE setting budgets.</para>
          </warning></para>
      </section>

      <section>
        <title>Currencies</title>

        <para>Define the currencies you deal with here. You should at least
        define your local currency here, giving it a name (like US DOLLAR or
        EURO) and setting the "rate" at 1. If you do business with vendors who
        charge in a different currency, enter a name for that currency (e.g.
        PESO) and set the approximate exchange rate compared to your
        currency.<figure>
            <title>Currencies Setup</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/currencies.gif" />
              </imageobject>
            </mediaobject>
          </figure>Note that currency names are limited to 10 characters or
        less. The exchange rate is used to calculate the remaining balances in
        your materials budgets when you purchase materials using "normal"
        acquisitions.</para>
      </section>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term><anchor id="print" />Posted by Rachel
            Hamilton-Williams</term>

            <listitem>
              <para>There are two sorts of printing you can do within Koha and
              depending on what sort of library you are running, you may not
              need them both.</para>

              <orderedlist>
                <listitem>
                  <para>You can print anything you see on screen from your web
                  browser like any other webpage. That just requires that your
                  workstation (PC) has access to a printer either via your
                  local network, or plugged directly into your PC. SO if all
                  you want to do is print the things you see on screen then
                  that is all the printing you need. To use this sort of
                  printing you just go (In Windows anyway) <userinput>File
                  &gt; Print &gt;</userinput> choose printer, and other
                  options.</para>
                </listitem>

                <listitem>
                  <para>If you use circulations (Loaning things), you have the
                  option of Koha printing some files that you *Don't* see on
                  screen. SO Koha can print slips to give to your borrowers,
                  and it can print overdue notices. Koha prints those
                  automatically so the SERVER (rather than your PC) also needs
                  to know the path to send these files to a printer.</para>

                  <para>That means the Printer needs to be "seen" by the
                  server - so it has to either a network printer, OR it can be
                  plugged directly into the server (depending I suspect on
                  your server hardware). Either way however KOHA will need to
                  be told the path to the printer, because you won't be doing
                  that via a print dialogue box every time it prints. That
                  path is what you put into the parameters option for
                  printing.</para>
                </listitem>
              </orderedlist>

              <para>IF you DON'T circulate books/items, you won't need to
              setup network printing because I'm pretty sure that all the
              automatic printing is tied up in circulation.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Setting Bibliographic Data Parameters</title>

      <para>If you set your System Preferences to use MARC bibliographic data,
      the last set of parameters you need to define is by far the most complex
      and the most important. MARC bibliographic data is coded with markup
      tags in accordance with long and involved sets of rules, and each flavor
      of MARC has somewhat different rules. Because Koha can be used with more
      than one flavor of MARC, you need to spend some significant time telling
      Koha how to handle your particular MARC data. Koha also comes with some
      special MARC tools that can make your daily cataloging chores easier,
      but you also need to set the parameters for those tools before they can
      be used.</para>

      <para>All in all, there's a lot of work involved in setting the
      bibliographic data parameters, so be sure to allow yourself plenty of
      time, and consider setting these parameters with the assistance of the
      person(s) who will be doing your bibliographic cataloging. If you are
      not going to have the assistance of someone who has done MARC
      cataloging, then it is <emphasis>strongly </emphasis>suggested that you
      get familiar with the basics of MARC before you start. A good overview
      of MARC 21 cataloging principles can be found at <ulink
      url="http://www.loc.gov/marc/96principl.html">http://www.loc.gov/marc/96principl.html</ulink>,
      and a detailed discussion of MARC 21 bibliographic data tags can be
      found at <ulink
      url="http://www.loc.gov/marc/bibliographic/ecbdhome.html">http://www.loc.gov/marc/bibliographic/ecbdhome.html</ulink>.
      For more information about UNIMARC, see <ulink
      url="http://www.ifla.org/VI/3/p1996-1/sec-uni.htm">http://www.ifla.org/VI/3/p1996-1/sec-uni.htm</ulink>.</para>

      <note>
        <para>This manual <emphasis>does not</emphasis> explain MARC. If you
        are not familiar with MARC tags, subfields, indicators, etc., most of
        this section of the manual will be meaningless to you. Take some time
        now and learn the basic principles of MARC cataloging.</para>
      </note>

      <section>
        <title>Biblio Framework (MARC Structure) -- first look</title>

        <para>As has been mentioned, one of the most basic principles of Koha
        is flexibility: so far as it is possible, the Koha user should be able
        to control what Koha does and how it does it. This principle extends
        to Koha's handling of MARC, as seen by the fact that Koha allows you
        to select no MARC, MARC 21, or UNIMARC for your bibliographic data
        format. This means, however, that the user must give Koha very
        specific instructions on how to display MARC data, and how to link
        MARC data to Koha's database.</para>

        <para>Biblio Frameworks allow the Koha user to define several
        different ways of displaying a framework for adding MARC data to Koha.
        You do this by specifying which MARC tags you want to use and which
        you want to ignore in each framework.</para>

        <para>When Koha was installed, the installer had the option of
        downloading either a MARC 21 or a UNIMARC "database" (or no MARC
        database at all). If this was done, you now have a database table
        containing most of the MARC tags and subfields in current use for your
        preferred MARC "dialect." Now you will use the "Biblio framework"
        administration page to select MARC tags and tell Koha which tags you
        want to use in each framework.</para>

        <figure>
          <title>Biblio Framework Page (as installed)</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/framework1.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>You will always have a least one framework to define, which will
        be the default framework. Click on "MARC structure" to begin this
        process. (MARC 21 tags are used in all screenshots and examples in
        this manual.) The screen you now see lists MARC tag numbers and some
        basic information about each tag.</para>

        <figure>
          <title>MARC tags</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/framework2.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The columns on this screen: contain the tag number; the name of
        the tag ("Lib" is an abbreviation of the French word "libellé");
        whether or not the tag is repeatable (according to the rules of your
        chosen MARC dialect); whether or not you want the tag to be mandatory
        (according to your library's cataloging practice); columns for
        authorised values and editing subfields (both of which we will discuss
        elsewhere); an edit icon; and a delete icon. A pull-down menu at the
        top of the page allows you to switch between your biblio frameworks,
        and a "search" box next to it allows you to skip to a specific
        tag.</para>

        <para>If you are <emphasis>certain</emphasis> that you will never use
        a MARC tag, then you can delete it, but since this will not result in
        any appreciable improvement in performance, it is probably better to
        leave it. There will be tags you want to add, however. (The "Add Tag"
        button is at the bottom of the screen and cannot be seen in the
        screenshot above.) If you are using older MARC tags that are not in
        the list of tags supplied with Koha, then use this page to add them.
        Similarly, you will probably need to add the holdings tag you
        currently use, or at least check the subfield structure of the 852 tag
        if you use it for holdings.</para>

        <para>If you click on the edit icon, you will be able to change the
        values for each MARC tag.</para>

        <figure>
          <title>Editing MARC Tags</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/modifytag.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The values that can be changed on this screen are the name of
        the tag as it will be displayed in the librarian's interface ("Lib for
        librarians"), the name of the tag as it will be displayed in the OPAC,
        whether or not the tag can be repeated within a MARC record, whether
        or not it is mandatory, and finally, a pull-down menu (initially
        empty) of "Authorised" values. Since this is a feature that is not
        commonly found in an ILS cataloging system, now is a good time to
        interrupt the process of defining the biblio frameworks and discuss
        Authorised Values.</para>

        <tip>
          <para>You can define biblio frameworks without defining any
          authorised values, but if you wish to make full use of Koha's
          features, you will probably define authorised values as part of the
          process of defining the biblio frameworks, moving back and forth
          from the Biblio Framework screens to the Authorised Values
          screens.</para>
        </tip>
      </section>

      <section>
        <title>Authorised Values</title>

        <para>Koha allows you to restrict the values that catalogers can place
        in some MARC tag indicators and MARC subfields, allowing only certain
        pre-defined "authorised" values. These authorised values are defined
        here.</para>

        <figure>
          <title>Authorised Values Administration</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/authval.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>As an example, let us assume that your Koha installation is used
        by several libraries, and you use MARC 21. You might want to restrict
        the 850a MARC subfield to the institution codes for just those
        libraries. In that case, you could define an authorised values
        category (perhaps called "INST") and enter the institution codes as
        the authorised values for that category. (By the way, category names
        are limited to eight characters.)</para>

        <para>Once the 850a subfield is linked to the INST authorised values
        category in your MARC tag structure, catalogers must choose a value
        from the list you define here, and may not type in any other value. In
        other words, the catalogers could not type in the 850a field, but
        instead would see a pull-down menu. If the INST category was setup as
        it is in the screenshot above, then the pull-down menu would have two
        choices: "Athens County Library System" and "Nelsonville Library."
        Depending on which of these the cataloger chose, Koha would insert the
        appropriate authorised value into the MARC record -- "ONe" if the
        choice were "Nelsonville Library," for example.</para>

        <para>Koha automatically sets up authorised value categories for your
        item types and branch codes, and you can link these authorised values
        to MARC subfields when you set up your MARC tag structure.</para>

        <para>To go back to our discussion of editing MARC tags in the Biblio
        Frameworks, the authorised value allowed for a tag is the tag
        indicator pair. Many tags in MARC 21 should have both indicators set
        to the "undefined" character (#), so you could make an authorised
        values category called "indicatr" and enter an authorised value of
        "##" as the only entry. Then you could select the "indicatr"
        authorised value category when editing one of the tags that require
        undefined indicators. The real power of authorised values, however, is
        demonstrated when they are used with MARC subfields. So let's go back
        now to our MARC tag structure and look at the MARC subfields.<note>
            <para>Currently (in Koha version 2.2.3), the Authorised Values
            feature for tags is not functional -- it only work with MARC
            subfields. In some future version, this feature may be fixed, but
            if it proves to have only limited usefulness, it may also be
            dropped from Koha.</para>
          </note></para>
      </section>

      <section>
        <title>Biblio Framework (MARC Structure) -- subfields</title>

        <para>The MARC subfield structure that you define will determine how
        Koha behaves for your catalogers. Needless to say, it is probably a
        very good idea to involve them in this part of the parameterization of
        your Koha installation!</para>

        <para>To edit MARC subfields, navigate to the MARC tag structure
        administration screen and click on the "subfields" button. In our
        examples, we will start by clicking on the "subfields" button
        associated with MARC 21 tag 100, "MAIN ENTRY--PERSONAL NAME."</para>

        <figure>
          <title>Subfield structure for tag 100</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/tagstruc100.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>As you can see most of the subfields are ignored in this
        particular Koha installation. Subfield 100a, however, has quite a few
        constraints. If we move to the bottom of this screen, we find an icon
        of a folder opening. Click on this icon to open the subfield editing
        screen to see what the possible subfield constraints are and how to
        change them.</para>

        <figure>
          <title>Tag 100 subfields (editing)</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/tag100subfields.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The subfield editing screen is very busy, with a lot of features
        that are unique to Koha. We will examine each of these.</para>

        <para>The screen displays all of the subfields that can be used with a
        tag, so it can be quite long (as in this case). Looking at the section
        for "Tag 100, Subfield a," we first see a group of "MARC constraints."
        These determine how the information in the subfield is to be used by
        Koha. The "repeatable" and "mandatory" checkboxes will allow
        catalogers to repeat a subfield, or will cause Koha to issue an error
        warning if the cataloger leaves a mandatory subfield empty. "Search
        also" is an interesting feature that allows a catalogue search to
        check several MARC subfields at the same time. In this example, a
        catalogue search for a certain author will check first for the
        author's name in subfield 100a of all MARC records, but will also
        check in 700a (in case the name is an added entry), and in 110a and
        710a (in case the "author" is an organization). You could add more
        subfields here -- perhaps 511a, in case the "author" is actually a
        performer -- by typing them in the text field, enclosing each subfield
        identifier in single quotes and separating them with commas.</para>

        <note>
          <para>The parenthetical "example for 200a" refers to UNIMARC tag
          numbers.</para>
        </note>

        <para>The "Koha link" constraint requires some background explanation.
        Koha was originally written without any provision for using MARC
        records, and may still be used without MARC records. This is possible
        because the "original" Koha keeps basic bibliographic data in database
        tables and fields that were designed by the original developers of
        Koha. Since the time when MARC capability was added to Koha, the
        developers have referred to these tables and fields as the "original
        Koha database" and called the MARC records and MARC structural data
        the "Koha MARC database." Many of the simple tasks and searches that a
        library performs in the process of checking books in and out are still
        more efficiently managed by the original Koha database. So as you are
        building your MARC structure, you must tell Koha which MARC subfield
        data should be automatically loaded into the original Koha database,
        or Koha will not work.</para>

        <para>When you fill in the "Koha link" constraint, you choose from a
        pull-down list of all the tables and fields in the original Koha
        database, presented in the form "table.field." The table names are not
        that important for purposes of establishing your Koha links; the field
        names should be sufficient to help you decide which links are
        appropriate. Only one MARC subfield can be associated with an original
        Koha field. This means two things: 1) you must use the "Search also"
        constraint if you want simple searches to look in more than one MARC
        subfield, as we have with MARC tag 100a; and 2) most of your MARC
        subfields will not be linked to an original Koha field -- there are
        many more MARC subfields than original Koha fields.</para>

        <para>The "Editor constraints" section mostly controls how this
        subfield is presented to the catalogers. The "Text for librarian" and
        "Text for OPAC" will be the descriptive name of this subfield in the
        librarian's interface and the public catalogue respectively. The
        "Managed in tab" constraint allows you to choose from a pull-down list
        with the values "ignore," numbers "0" through "9," and "items (10)."
        "Tab" is not the keyboard "tab" used for indenting text; in this case,
        "tab" refers to a tab like you would find on a manila file folder, or
        in a web browser that supports tabs. It allows you to subdivide the
        MARC tags and subfields the catalogers will be using into several
        browser tabs, so the cataloging web page will not be too long. Ignored
        subfields simply do not appear at all, while subfields "managed in tab
        0" will appear in the first tab, subfields "managed in tab 1" will
        appear in the second tab, etc. (Numbering things beginning with "0"
        instead of "1" is a convention of computer programming.) For instance,
        you might choose to put all of the MARC subfields associated with the
        MARC 21 number and classification tags 010 to 088 (except for the
        subfields you want to ignore) in tab 0, all main entry tag subfields
        (tags 100-130) in tab 1, etc. This will keep the cataloging web page
        more manageable.</para>

        <note>
          <para>Koha currently does not use data from any MARC tags below 010,
          but you can define tags below 010 and use them to store data from
          imported MARC records. Koha can also calculate a Leader for your
          MARC records -- see the section on plugins for more
          information.</para>

          <para>See the related <link linkend="lowtags">comments</link> in the
          User Comments section.</para>
        </note>

        <para>The "items (10) tab" is reserved for subfields that only contain
        item information. The items information appears on a separate screen
        from the rest of the basic MARC bibliographic record in Koha, since
        items are managed separately from the rest of the bibliographic
        record; libraries routinely add or delete item information from MARC
        bibliographic records, as extra copies of library materials are added
        or removed from the collection.</para>

        <para>Koha requires that one -- and only one -- MARC tag will be
        linked to the original Koha "items" table. Some of the fields in the
        items table are meant to hold data indicating the current status of an
        item, and will not be linked to the MARC record. Other important data
        will come from your MARC "holdings" tag: items.barcode,
        items.dateaccessioned, items.homebranch, items.price, and
        items.itemcallnumber are good examples. So whatever MARC tag you use
        for your holdings information (whether it be 852 or 9xx, or whatever)
        should be "managed in tab items (10)" -- and that should be the only
        MARC tag managed in that tab -- and it should be linked to the
        appropriate fields in the original Koha items table -- and be the only
        MARC tag linked to the items table. If you manage more than one MARC
        tag in the items tab, or link more than one MARC tag to the items
        table, Koha will not work.</para>

        <para>The "hidden" and "URL" checkboxes have pretty clear on-screen
        explanations. If the "hidden" box is checked, the subfield will be
        used by Koha, but never seen by the catalogers. Instead of manually
        filling such a subfield, Koha will follow instructions from the
        "default options" to fill the subfield. The "URL" checkbox simply
        tells Koha that the content of this subfield should appear as an
        active hyperlink when the record is displayed in the catalogue.</para>

        <para>The "Default Options" section allows you to use several unique
        features of Koha to fill subfields with default values. We will look
        closely at each of these features in the next sections. None of these
        options must be used -- they are truly "optional" -- but they can make
        some of your cataloging chores simpler. Note the warning on the screen
        -- you cannot choose to use more than one type of default option for a
        given subfield.</para>

        <para>Once you have completed editing your subfields, you will have
        completed the most difficult and time-consuming part of preparing Koha
        for use. You are almost done!</para>

        <section>
          <title>Authorised Value</title>

          <para>We have already discussed authorised values in the context of
          MARC tags, but their most important use is with subfields instead of
          tags. If you choose a category of authorised value from the
          pull-down list, then the only values that the catalogers can enter
          into this subfield will be values they choose from that category.
          Even if you have not defined any authorised value categories, you
          will have two automatic pull-down choices: "branches" and
          "itemtypes." You can prevent the catalogers from manually entering
          branch codes and item types in subfields of your holdings tag by
          choosing one of these authorised value categories.</para>

          <para>For example, as you are setting the structure for your
          holdings tag, you can set up a subfield meant to contain the branch
          location of an item so that it pulls an authorised value from the
          "branches" category. Then as catalogers are adding holdings to your
          catalogue, they will find a pull-down list of all your branch names
          in this subfield; they will only be able to choose a name from this
          list, and cannot type in anything else. If you also link this
          subfield to items.homebranch or items.holdingbranch, you will always
          be able to accurately track an item's location.<note>
              <para>You must use the "itemtypes" authorised values for at
              least one of your MARC subfields and then link that subfield to
              biblioitems.itemtype.</para>

              <para>You must have two subfields in your MARC holdings tag that
              use the "branches" authorised values, and those two subfields
              must be linked to items.homebranch and items.holdingbranch. (The
              holding branch value in the items table will change as an item
              is transferred from branch to branch, but it still must have an
              initial value set when an item is cataloged.)</para>
            </note></para>
        </section>

        <section>
          <title>Thesaurus</title>

          <para>Koha's "thesaurus" feature is a way to use MARC authority
          records -- not to be confused with Koha's "authorised values" -- to
          make sure only standardized names, titles, etc. are used in your
          catalogue records. There will be much more detailed discussion of
          authority records in a later section ("Thesaurus Structure"); this
          section will provide only a basic overview of how to activate this
          feature.</para>

          <para>If you wish to provide access to authority records for a given
          subfield -- MARC 21's 700a subfield, for instance, to make sure an
          author's name is available in an added entry in its approved form --
          you will need to create a subfield "9" for that tag (e.g. tag 700,
          subfield 9) by adding it at the end of the subfield editing
          screen.<figure>
              <title>Adding subfield 9</title>

              <mediaobject>
                <imageobject>
                  <imagedata fileref="images/thesaddsub.gif" />
                </imageobject>
              </mediaobject>
            </figure>Koha uses subfield 9 to store the link between a
          bibliographic record and an authority record. Make sure this
          subfield is managed in the same tab as the other managed subfields
          for this tag, and then click the "hidden" checkbox so it will not be
          displayed with the rest of the record.</para>

          <para>Go to the subfield that will hold the value you want to
          standardize (e.g. 700a in MARC 21 for an author's name). For this
          subfield, choose an appropriate thesaurus category (that you have
          created in your Thesaurus Structure) from the pull-down menu --
          perhaps category "PN" ("Personal Name").</para>

          <para>Now when the catalogers are adding a record, they will see
          three dots (...) after the textbox of the 700a subfield. Clicking on
          these dots will open a pop-up window allowing the cataloger to
          search your authority records for a standardized version of the
          author's name. If the desired name is found in your authority
          records, it can be automatically copied into the 700a subfield. (If
          the desired name is not found, the cataloger can enter the name
          manually.)</para>
        </section>

        <section>
          <title>Plugins</title>

          <para>Plugins are small computer programs (Perl scripts, to be
          exact) which can be used to calculate the value of a subfield. To
          date, most plugins that are available as part of the Koha code deal
          with UNIMARC fields, but a programmer could create a custom plugin
          to do anything you want.</para>

          <para>For example, you might want to create a plugin that would take
          the MARC 21 Library of Congress Control Number (subfield 010a), add
          your organization code to the beginning, add a cataloger-defined
          character at the end, and save the result as your System Control
          Number (035a). A programmer could create this plugin for you, name
          it something like <filename>control_numbers.pl</filename>, and save
          it with your other Koha code. Then as you are editing your MARC 21
          subfield 035a, you could choose the
          <filename>control_numbers.pl</filename> plugin from the pull-down
          list.<tip>
              <para>The Koha plugins are stored in your Koha
              <filename>intranet/cgi-bin</filename> directory, in the
              subdirectory <filename>value_builder</filename>.</para>
            </tip></para>

          <para>Now (in our theoretical example) when the catalogers are
          adding a record, they would see three dots (...) after subfield
          035a. Clicking on these dots would open a pop-up window that asks
          the cataloger to enter the special character to be added to the end
          of the LC Control Number; the plugin would then use the value
          already entered in 010a, your organization code, and the special
          character to construct the System Control Number and insert it into
          the subfield. The cataloger would always have the option of changing
          this value, or simply entering the System Control Number manually
          instead of using the plugin.</para>
        </section>

        <section>
          <title>Leader plugins</title>

          <para>Beginning with version 2.2.4, Koha comes with special plugins
          for building Leader information for MARC records.</para>

          <para>The Leader is a fixed field at the beginning of each MARC
          record that contains coded information for the processing of the
          record. It does not have a number, as the other MARC tags do -- it
          is simply the "Leader."</para>

          <para>Koha has no need for Leader information and does not use it.
          However, Koha can store Leader data, and can help you build your own
          Leader data. Here is how:</para>

          <orderedlist>
            <listitem>
              <para>When setting up your Biblio Framework, add a tag 000 and
              call it "Leader" (or whatever you wish to call it).</para>
            </listitem>

            <listitem>
              <para>In this 000 tag, create a subfield "@" and name it
              "leader" (or something). This @ subfield will be the subfield
              that stores the Leader data. If you are importing MARC records
              directly into Koha, you can now store the Leader in this 000 tag
              and @ subfield.</para>
            </listitem>

            <listitem>
              <para>If you wish Koha to help you build Leader data for MARC
              records you create with Koha, select the plugin
              <filename>marc21_leader.pl</filename> (for MARC 21) or
              <filename>unimarc_leader.pl</filename> (for UNICODE) for the @
              subfield.</para>
            </listitem>
          </orderedlist>

          <para>When you create (or edit) bibliographic records, clicking on
          the three dots following the tag 000@ field will open a pop-up
          window to guide you through the creation of your MARC Leader.</para>

          <figure>
            <title>Leader pop-up window</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/leader.gif" />
              </imageobject>
            </mediaobject>
          </figure>

          <para>Make the appropriate choices from the pull-down menus, and
          Koha will create the encoded Leader data and insert it into your
          000@ subfield. You now have Leader data stored with your records,
          should you ever need it for some other application.</para>
        </section>

        <section>
          <title>Link</title>

          <para>A link is somewhat like a simplified plugin. If you have two
          MARC subfields that will always contain the same value -- for
          example, the two subfields in your holdings tag that will store home
          branch and holding branch for a system that has only one branch --
          then you can link the second subfield to the first and the value
          will be automatically entered into the second subfield as you enter
          it in the first.</para>
        </section>
      </section>

      <section>
        <title>Koha to MARC Database Links</title>

        <para>This page provides a simplified way to map your MARC tags and
        subfields to the "original" Koha database tables. This can also be
        done while setting the MARC tag structure, as we have seen, but it is
        easier to see the relationship between the MARC database and the Koha
        database here.</para>

        <figure>
          <title>MARC to original Koha links</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/marclinks.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The pull-down menu at the top lists all the Koha tables that can
        receive values from the MARC records. The columns from each table are
        listed in the area below the pull-down menu. Do not expect to have
        every Koha table.column mapped to a MARC subfield. Some (such as
        biblionumber, biblioitemnumber, and itemnumber) are values generated
        by Koha and will probably be automatically mapped. Others are flags
        which are set in the course of normal circulation activities and will
        contain information that is not part of your MARC record.</para>

        <para>This is a one-to-one mapping. In other words, a MARC
        tag/subfield can be mapped to one, and only one, Koha table.column.
        MARC data that is not mapped to a Koha table does not disappear -- it
        is simply not available for display on circulation screens and on some
        search results screens.</para>
      </section>

      <section>
        <title>MARC Check</title>

        <para>Once you have completed the process of setting up your default
        Biblio Framework (MARC structure) and have reviewed your Koha-MARC
        links, click on this link to activate a small program that checks for
        major errors in your MARC setup.</para>

        <figure>
          <title>Checking MARC setup</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/marccheck.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>This MARC check does not guarantee that you will like the first
        results of your efforts to set up your MARC displays, etc. -- it
        simply checks for major errors. You will probably revise your MARC
        setup several times before you are completely pleased with it.
        <emphasis>Be sure to run this program after every
        revision.</emphasis></para>
      </section>

      <section>
        <title>Thesaurus Structure</title>

        <para>Catalogers often rely on MARC authority records to keep personal
        names, place names, subjects, etc. standardized across a catalogue.
        For example, if you have several books by the late Pope in your
        collection, the bibliographic records you import from other sources
        may have the author's name in a variety of forms: "John Paul II, Pope,
        1920-2005"; or "Joannes Paulus II, Pope, 1920-2005"; or "Juan Pablo
        II, Pope, 1920-2005"; or "Jean Paul II, Pope, 1920-2005"; or "Johannes
        Paul II, Pope, 1920-2005"; or "Joann Pavel II, Pope, 1920-2005" to
        name some of the many possibilities. But you want all of the books to
        be displayed whenever a catalogue user searches for "John Paul II." To
        do this, you modify the bibliographic records so they conform to an
        authority record that specifies the "correct" form of the name as
        "John Paul II, Pope, 1920-2005."</para>

        <para>Individual catalogers almost never create their own database of
        authority records, but instead buy or download authority records from
        a trusted source. These authority records have their own MARC
        structure, which looks somewhat like a simplified MARC bibliographic
        record structure. If you have access to such a database, you can setup
        Koha's Thesaurus Structure to allow you to retrieve values from the
        authority records as you create or modify your bibliographic
        records.</para>

        <para>When you select "Thesaurus structure" from the Koha parameters
        page, you will see this screen at first:<figure>
            <title>Thesaurus administration (unchanged)</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/thesadmin.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>The Koha installation process offered the opportunity to install
        a default authority record framework for MARC 21 or UNIMARC. If this
        was done, you can click on the "MARC structure" button for the Default
        framework and see the structure that has been setup for your authority
        records:<figure>
            <title>Authority record structure (MARC 21)</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/thesframework.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>If you are using a different flavor of MARC, you will need to
        define the authority record structure manually, or modify the MARC 21
        or UNIMARC structure to conform to your MARC flavor. The SQL
        statements to create the default framework, if it was not created
        during the installation process, are stored in your Koha
        <filename>intranet</filename> directory in the sub-directory
        <filename>scripts/misc/sql-datas</filename>. Otherwise, you should
        have no need to modify any of the default framework, unless you intend
        to create your own authority records.</para>

        <para>You now need to define some authority types by clicking on the
        "Add authority type" button at the bottom of the administration
        screen. As an example, we will set up an authority type to be used for
        personal names, using MARC 21 authority and bibliographic tags.</para>

        <figure>
          <title>Personal name authority type</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/thestype.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The "Authority type box" accepts a code for this authority type.
        For personal names, you could use "PN." The "Description" is the term
        that will appear in some pull-down menus and is purely for information
        -- in this case it explains what "PN" means.</para>

        <para>The "Summary" textbox holds the list of authority record
        subfields which will be displayed when the cataloger accesses the
        authority records to look for a match for a personal name in a
        bibliographic record. (Displaying the entire authority record would
        result in a display that would be too big to be useful.) Each subfield
        should be enclosed in square brackets. In our example, a search of the
        authority records for a personal name will display the MARC 21
        personal name heading tag (100), using both the subfields that hold
        the regular form of the name (100a) and any fuller version of the name
        (100q). The search will also display the "see from" tracing tag (400)
        and the "see also" tracing tag (500). (For personal names in UNIMARC,
        you might use "[200a][200b][200c] [400a][400z] [100a]") The display of
        the summary of the authority records in the search results list would
        thus contain the heading field, the "see from" tracing fields, and the
        "see also" tracing fields.<note>
            <para>You might also consider setting up the display to give you
            more information, such as adding subfields 100b, 100c, and 100d to
            the list so you can see more information about an author. If you
            include all of these subfields on the same line with your 100a
            subfield in the "Summary" box, they will appear on the same line
            in your search display.</para>
          </note>The "Report tag" is the authority tag from which a value will
        be retrieved and "reported" back to the bibliographic record when the
        cataloger selects an authority record from a search results
        list.</para>

        <para>Our Thesaurus Structure screen now looks like this:<figure>
            <title>Thesaurus administration (modified)</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/thesadmin2.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>You can continue to add other authority types for place names,
        organization names, etc. The code for every authority type you define
        will automatically appear in the "Thesaurus" pull-down list when you
        setup your Biblio Frameworks.</para>

        <para>To follow along with our example, let us assume that you have a
        database of authority records, you have defined a "PN" authority type
        as above, and have defined a (MARC 21) Biblio Framework with a
        subfield "9" defined (for holding the link to an authority record) and
        with the "Thesaurus" value for subfields 700a, 700b, 700c, and 700d
        set to "PN." In your authority records database, you have the
        following record:<programlisting>040    $b eng
100 0# $a John Paul $b II, $c Pope, $d 1920-2005
400 0# $a Joannes Paulus $b II, $c Pope, $d 1920-2005
400 0# $a Juan Pablo $b II, $c Pope, $d 1920-2005
400 0# $a Jean Paul $b II, $c Pope, $d 1920-2005
400 0# $a Johannes Paul $b II, $c Pope, $d 1920-2005
400 0# $a Joann Pavel $b II, $c Pope, $d 1920-2005
510 2# $a Catholic Church. $b Pope (1978-2005: John Paul II)
700 04 $a Juan Pablo $b II, $c Papa, $d 1920-2005 $7 aacr//spa
700 06 $a Jean Paul $b II $c pape, $d 1920-2005 $7 aacr//fre
700 04 $a Jean Paul $b II $c (Pape), $d 1920-2005 $7 ncafnor
700 04 $a Johannes Paul $c Papst, $b II $7 rak</programlisting>The cataloger
        is working with a bibliographic record for a book written by "Joannes
        Paulus II, Pope, 1920-2005" and wants to add an entry to the
        bibliographic record with the authorized version of the name in
        English. The cataloger would go to the 700a subfield in the
        bibliographic record and click on the three dots (...) that appear
        after the subfield because this subfield has thesaurus access enabled.
        A search box pops up and the cataloger can perform a search for the
        name as it appears in the bibliographic record to find any matching
        entries in your authority records.</para>

        <figure>
          <title>Authority record search</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/authsearch.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Clicking on the curved arrow in the "Get It" column will
        retrieve the values in the authority record and insert them into your
        bibliographic record. Any of your subfields which have the thesaurus
        option enabled will be modified with the values in the "Report tag"
        you set up in your Thesaurus Structure. In our example, we asked for
        the contents of tag 100 to be "reported," and we enabled the thesaurus
        option for subfields 700a, 700b, 700c, and 700d. So clicking on the
        arrow inserts the value from 100a into 700a, 100b into 700b, etc. Not
        only that, but because the 700 tag in this particular bibliographic
        record is now linked to this particular authority record (through
        subfield 9), this bibliographic record will be automatically modified
        if this authority record is ever modified.</para>

        <para>Establishing an effective link between authority records and
        bibliographic records will require that you spend a lot of time
        working back and forth between your Thesaurus Structure and your
        Biblio Frameworks. But for libraries that have a database of authority
        records, the thesaurus is a very powerful cataloging tool!</para>
      </section>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term><anchor id="lowtags" />Posted by Thomas Dukleth</term>

            <listitem>
              <para>Fixed fields and control fields without subfields can be
              created in the Koha MARC frameworks by creating a field with
              whatever field name is needed and creating a subfield with '@'
              as the subfield identifier. Koha will treat these special
              subfields as fields without indicators even if the record editor
              shows unused blank phantom indicators. The leader is field 000
              with subfield '@'. If fields 000 to 008 are missing from Koha
              MARC frameworks, the user can add them along with any other
              omissions in the Koha framework editor in Koha System
              Administration.</para>

              <para>Fields and their subfields will appear in the MARC views
              and the record editor if their subfields or '@' pseudo subfields
              are set to managed by Koha in the MARC framework editor. To have
              them appear in the detail view requires editing the templates.
              Subfield order will be simple alphabetic order unless you hack
              Koha significantly or wait for version 3.0.</para>

              <para>Collective field indexing can be provided for any
              field/subfield by providing field and subfield linking in the
              search also text box in the MARC framework editor. This
              collective field linking is not compliant with searching several
              indexes separately in accordance with the structure of the
              bibliographic record, but it is much faster. Record indexing
              will run from a different database design in version 3.0.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Tools</title>

      <para>At the end of the Parameters page are a few items that are not
      parameters at all, but are instead utility programs that can be very
      helpful in certain situations.</para>

      <section>
        <title>MARC Biblio Export</title>

        <para>This is a tool for exporting your bibliographic records in
        standard MARC communications format (ISO2709).</para>

        <figure>
          <title>MARC Export</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/export.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Although the screen warns that it exports only the basic
        bibliographic information with no holdings information, any holdings
        information originally loaded into Koha when the record was added will
        be included in the exported record.</para>

        <para>You are asked to provide a starting biblio record number and an
        ending number for the export, or you can specify that you want to
        limit the export to a specific number of records, starting with the
        first (useful for testing a small export before doing a large export).
        Within these number parameters, you may also select records based on
        item type, home branch, or call number. If you want to export all of
        your records, leave the start and end numbers and all other criteria
        blank. Records are downloaded to the workstation that requests the
        export and are saved in a file called <filename>marc.pl</filename>
        (not to be confused with the Perl script of the same name found in
        <filename>/usr/local/koha/intranet/cgi-bin/export</filename>) which on
        Linux systems is usually saved in the <filename>/tmp</filename>
        directory.</para>
      </section>

      <section>
        <title><anchor id="MARCimport" />Upload MARC Records into
        Reservoir</title>

        <para>This tool allows you to load a file of MARC records in MARC
        communications format (ISO2709) into Koha's reservoir of incomplete
        records (i.e. without holdings information).</para>

        <figure>
          <title>MARC import</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/import.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The reservoir is an unusual feature of Koha. Libraries can keep
        a collection (reservoir) of basic MARC records which they have
        collected from other sources, either through Z39.50 searches or by
        using this tool to load files of MARC records obtained some other way.
        When cataloging, these records can be pulled from the reservoir and
        used as the basis for new records, with added holdings information,
        that will be saved to the catalogue of active records.</para>

        <para>As the screen explains, there are several options that can be
        set when using the import tool. When the import is finished, you will
        see a report of how many records were added to the reservoir and how
        many were skipped (and why).</para>

        <para>See the related <link linkend="marcimport">comments</link> in
        the User Comments section.</para>
      </section>

      <section>
        <title>Generate Barcodes</title>

        <para>This utility can be used to print barcode labels for your
        library items. To use it, you must have the 0.3r77 release of the
        <filename>PDF::API2</filename> Perl module loaded on your computer
        (and have an appropriate printer attached to your computer, of
        course). Check with the person who installed your Koha software to be
        sure you have the correct version of PDF::API2. When this is done, you
        can generate barcodes:</para>

        <figure>
          <title>Generating barcodes</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/barcodes.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>This page can be confusing the first time you see it. You can
        choose to print either a single barcode or a range of barcodes -- but
        you can only print barcodes for items which have already been added to
        your catalogue. (You cannot use this tool to print a range of barcodes
        for items you will catalogue in the future, for example.) You should
        select your country code from the pull-down list. Note that the
        barcode symbology that will be printed is EAN128, a fairly common type
        of barcode world-wide. The paper size is set by your printer
        configuration -- more about that in a moment. And there is a text box
        if you want the same text to appear under each barcode (such as the
        name of your library) -- if you leave the text box blank, the title
        and author of the matching item will be printed under the
        barcode.</para>

        <para>The grid at the bottom of the page tells your printer where to
        begin printing on the page. If you have a sheet of self-adhesive
        barcode labels, five labels across the sheet, and you have already
        used three labels, you want the printer to start printing at the
        position of the fourth label, so you would click the radio button
        beside "Label 4." Margins for the labels, the number of labels on a
        page, and some other parameters are controlled by your printer
        configuration, which can be modified by clicking on the "Go to Printer
        Configuration" link.</para>

        <figure>
          <title>Printer configuration (barcode labels)</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/barcodeconfig.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>From this page you can set the parameters for your sheets of
        labels, including label size, number of labels across each sheet,
        number of rows of labels per sheet, sheet size (A4, Letter, or Legal),
        and the margin around each label. The "System dpi" is
        <emphasis>not</emphasis> your printer DPI, but rather the DPI
        resolution of your computer -- typically 96, except on some newer
        computers which may support screens with higher resolutions (such as
        192). When these parameters have been set, click the button to save
        your settings and return to the Barcode Generator screen.</para>

        <para>When everything is ready to go, click the "Generate Barcodes"
        button. Koha will generate a PDF file of your barcodes and display
        them on your screen -- use your browser's print function to send the
        file to your printer.<note>
            <para>Currently, the barcodes generator works best with 11-digit
            barcodes. The last few digits of longer barcodes will not be
            printed under the barcode itself, and shorter barcodes will have
            the check digit printed after the barcode number. You should have
            a Perl programmer alter the Koha code for you if you wish to use
            something other than 11-digit barcodes.</para>
          </note></para>
      </section>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <anchor id="marcimport" />

          <varlistentry>
            <term>Posted by Thomas Dukleth</term>

            <listitem>
              <para>I advise against using the current Koha web browser
              interface administration tools for importing MARC records if you
              want complete and/or valid records. Any deficiency in your
              System Administration : Biblio Framework will result in fields
              and subfields missing from the biblio framework being dropped
              from records imported through the Koha administration web
              interface. You could add the missing fields and subfields to
              correct for this problem but some time should be taken to audit
              the existing default framework. This is true for System
              Administration : Import. This is also true for the Koha Z39.50
              client.</para>

              <para>Import MARC records into Koha in batches using
              <filename>bulkmarcimport.pl</filename> to import the records.
              The Unix default path is
              <filename>/usr/local/koha/intranet/scripts/misc/migration_tools/bulkmarcimport.pl</filename>
              in Koha 2.2.4. Be certain to set the proper values for the
              environment variables <varname>PERL5LIB</varname> and
              <varname>KOHA_CONF</varname> before running the script.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>General Notes on Using Templates</title>

      <para>Koha makes extensive use of the
      <filename>HTML::Template</filename> Perl module to build the web pages
      that are presented to the Koha user. There are two good reasons for
      this:<itemizedlist>
          <listitem>
            <para>the look of Koha can be changed by rewriting only the
            templates, changing nothing in the Perl code itself; and</para>
          </listitem>

          <listitem>
            <para>there is a tool to translate templates, so it is possible to
            translate Koha to new languages without too much trouble.</para>
          </listitem>
        </itemizedlist></para>

      <para>Templates are one of the reasons why Koha is so flexible and
      adaptable, because they allow anyone with a basic knowledge of HTML to
      change the look and feel of Koha, or even add and remove information
      from display pages.</para>

      <para>To find the templates that are installed with Koha, look in the
      directories in the path where you installed Koha (often
      <filename>/usr/local/koha</filename> on Linux systems) called
      <filename>intranet/htdocs</filename> or <filename>opac/htdocs</filename>
      for the librarian and OPAC templates respectively. For example, the
      template for the web page used to add books to a virtual bookshelf is
      found at
      <filename>/usr/local/koha/opac/htdocs/opac-tmpl/css/en/opac-addbookbybiblionumber.tmpl</filename>
      and looks like this:</para>

      <programlisting>&lt;!-- TMPL_INCLUDE Name="popup-top.inc" --&gt;
&lt;div id="mainbloc"&gt;
&lt;h1&gt;Add book to bookshelf&lt;/h1&gt;
&lt;p&gt;&lt;label&gt;Title&lt;/label&gt;&lt;!-- TMPL_VAR NAME="title" --&gt;&lt;/p&gt;
&lt;p&gt;&lt;label&gt;Author&lt;/label&gt;&lt;!-- TMPL_VAR NAME="author" --&gt;&lt;/p&gt;
&lt;h2&gt;Select bookshelf&lt;/h2&gt;
&lt;form&gt;
        &lt;p&gt;&lt;label&gt;Add to virtual shelf&lt;/label&gt;&lt;!-- TMPL_VAR NAME="CGIbookshelves" --&gt;&lt;/p&gt;
&lt;h2&gt;or add to a new bookshelf&lt;/h2&gt;
        &lt;p&gt;&lt;input type="text" name="newbookshelf" maxlength=40 size=40&gt;
        &lt;input type="hidden" name="biblionumber" value="&lt;!-- TMPL_VAR NAME="biblionumber" --&gt;"&gt;
                &lt;select name="category"&gt;
                        &lt;option value="1"&gt;Private&lt;/option&gt;
                        &lt;option value="2"&gt;Public&lt;/option&gt;
                        &lt;option value="3"&gt;Free&lt;/option&gt;
                &lt;/select&gt;
        &lt;/p&gt;
        &lt;input type="submit" value="Add to virtual shelf" class="button catalogue"&gt;
&lt;/form&gt;
&lt;!-- TMPL_INCLUDE Name="popup-bottom.inc" --&gt;</programlisting>

      <para>When this template is actually used to build a Koha web page, the
      resulting page source might look something like this:</para>

      <programlisting>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;

&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;popup&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;

        &lt;link rel="stylesheet" type="text/css" href="/opac-tmpl/css/en/includes/opac.css" /&gt;

&lt;/head&gt;

&lt;body&gt;
&lt;!-- NO MENUS for popup-top --&gt;

&lt;div id="mainbloc"&gt;
&lt;h1&gt;Add book to bookshelf&lt;/h1&gt; 
&lt;p&gt;&lt;label&gt;Title&lt;/label&gt;The dark tower vii :&lt;/p&gt;
&lt;p&gt;&lt;label&gt;Author&lt;/label&gt;King, Stephen.&lt;/p&gt;
&lt;h2&gt;Select bookshelf&lt;/h2&gt;
&lt;form&gt;
    &lt;p&gt;&lt;label&gt;Add to virtual shelf&lt;/label&gt;&lt;select name="shelfnumber" size="1"&gt;
&lt;/select&gt;&lt;/p&gt;
&lt;h2&gt;or add to a new bookshelf&lt;/h2&gt;

    &lt;p&gt;&lt;input type="text" name="newbookshelf" maxlength=40 size=40&gt;
    &lt;input type="hidden" name="biblionumber" value="3"&gt;
        &lt;select name="category"&gt;
            &lt;option value="1"&gt;Private&lt;/option&gt;
            &lt;option value="2"&gt;Public&lt;/option&gt;
            &lt;option value="3"&gt;Free&lt;/option&gt;
        &lt;/select&gt;

    &lt;/p&gt;
    &lt;input type="submit" value="Add to virtual shelf" class="button catalogue"&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</programlisting>

      <para>Once you have looked at some of the Koha
      <filename>*.tmpl</filename> files, you should read some documentation on
      <filename>HTML::Template</filename> to learn how to change them. Three
      good web sites explaining <filename>HTML:: Template</filename> are
      <ulink
      url="http://www.perldoc.com/perl5.6/lib/HTML/Template.html">http://www.perldoc.com/perl5.6/lib/HTML/Template.html</ulink>,
      <ulink
      url="http://www.sitepoint.com/article/introducing-html-template">http://www.sitepoint.com/article/introducing-html-template</ulink>,
      and <ulink
      url="http://html-template.sourceforge.net/article.html">http://html-template.sourceforge.net/article.html</ulink>,
      and there are many other sites as well.</para>

      <para>Note that future versions of Koha will move to using standardized
      <filename>prog</filename> templates, with the goal of having templates
      that are simple, are XHTML valid, and can be configured using cascading
      style sheets. This will require that new templates follow some basic
      rules:<itemizedlist>
          <listitem>
            <para>Templates should always begin with <programlisting>&lt;!- - TMPL_INCLUDE NAME="doc-head-open.inc" - -&gt;Koha - - TEMPLATE_TITLE
&lt;!- - TMPL_INCLUDE NAME="doc-head-close.inc" - -&gt;

&lt;!- - TMPL_INCLUDE NAME="menus.inc" - -&gt;

&lt;!- - TMPL_INCLUDE NAME="menu-<emphasis>MODULE</emphasis>.inc" - -&gt;</programlisting>
            where <emphasis>MODULE</emphasis> is one of the Koha modules
            (catalogue, acquisition, etc.)</para>
          </listitem>

          <listitem>
            <para>Templates should always end with <programlisting>&lt;!- - TMPL_INCLUDE NAME="intranet-bottom.inc" - -&gt;</programlisting></para>
          </listitem>

          <listitem>
            <para>Use <programlisting>&lt;div id="TEMPLATENAME_<emphasis>what_this_block_does</emphasis>"&gt; &lt;/div&gt;</programlisting>
            for each logical block. For example, if a page contains one block
            for borrower information, one for borrower fines, and one for
            borrower reserves, it is a good idea to have three different
            blocks. (Usually a block begins with an
            <computeroutput>&lt;h2&gt;</computeroutput> header.)</para>
          </listitem>

          <listitem>
            <para>All action buttons inside a block are enclosed in a
            <programlisting><computeroutput>&lt;div id="action"&gt; &lt;/div&gt;</computeroutput></programlisting>
            and placed at the end of the block. Avoid having more than one
            action <computeroutput>div</computeroutput>.</para>
          </listitem>

          <listitem>
            <para>Use <computeroutput>&lt;h1&gt;</computeroutput> for the page
            main title.</para>
          </listitem>

          <listitem>
            <para>Use <computeroutput>&lt;h2&gt;</computeroutput> for the
            block level title.</para>
          </listitem>

          <listitem>
            <para>Construct forms with <programlisting>&lt;p&gt;&lt;label&gt;text&lt;/label&gt;&lt;input type="..."&gt;&lt;/p&gt;</programlisting>
            NOT with <computeroutput>&lt;table&gt;</computeroutput>.</para>
          </listitem>

          <listitem>
            <para>Use <computeroutput>&lt;table&gt;</computeroutput> as seldom
            as possible (and only where tables are truly useful).</para>
          </listitem>

          <listitem>
            <para>Do not use <computeroutput>&lt;caption&gt;</computeroutput>
            at the beginning of tables, at least not for the table title.
            Since most blocks are not tables, the caption does not exist
            everywhere. Use <computeroutput>&lt;h2&gt;</computeroutput>
            instead.</para>
          </listitem>
        </itemizedlist></para>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term>Posted by Owen Leonard</term>

            <listitem>
              <para>Koha's templating system allows you to have a great amount
              of control over the interface, but it's not always easy to get
              started. The template files (<filename>*.tmpl</filename>,
              <filename>*.inc</filename>) are used by Perl's
              <filename>H<filename>TML::Template</filename></filename> to
              create the HTML files that are returned to the user.</para>

              <para>The template files are <emphasis>not</emphasis> straight
              HTML, which is why applications like
              <application>Dreamweaver</application> can't handle them.
              <application>Dreamweaver</application> wants to try to build a
              dynamic preview of the template file and it can't because the
              template file contains not only HTML markup but also
              <varname>&lt;!-- TMPL --&gt;</varname> tags which control the
              output.</para>

              <para>If you want to get your hands dirty and to some template
              editing, the best option is to use a text editor. Someone
              suggested <ulink
              url="http://www.chami.com/html-kit/">HTML-Kit</ulink>, which
              would work fine. It doesn't do syntax-highlighting for
              <filename>.tmpl</filename> files by default, but you can tell it
              to.</para>

              <para>To start working, pick one of the current templates to
              customize (<varname>default</varname> or <varname>npl</varname>
              in the intranet, <varname>css</varname> or
              <varname>npl</varname> in the OPAC), and copy all the files to a
              new folder. Then go into Koha's system preferences and change
              your template to the new one. That way you'll still have the
              originals to fall back on if something breaks.</para>

              <para>One confusing thing about a lot of the templates is that
              one template will handle several different situations depending
              on what action the user has taken. So the whole structure of the
              template might be wrapped in conditional tags:</para>

              <programlisting>&lt;!-- TMPL_IF NAME="case1" --&gt;
          [ some HTML code here ]
&lt;!-- TMPL_ELSE --&gt;
          [ some HTML code here ]
&lt;!-- /TMPL_IF --&gt;</programlisting>

              <para>Use the standard HTML markup on the page to give you clues
              as to what's going on and where you are in the template,
              comparing it to what you see on the screen running Koha.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
  </chapter>

  <chapter>
    <title>The Online Public Access catalogue -- to be completed</title>

    <para>General description -- To be completed</para>

    <section>
      <title>Searching</title>

      <para>To be completed</para>
    </section>

    <section>
      <title>Requesting Reserves</title>

      <para>To be completed</para>
    </section>

    <section>
      <title>Updating Member Information</title>

      <para>To be completed</para>
    </section>

    <section>
      <title>Biblio Baskets</title>

      <para>To be completed</para>
    </section>

    <section>
      <title>Virtual Shelves</title>

      <para>To be completed</para>
    </section>

    <section>
      <title>Purchase Suggestions</title>

      <para>To be completed</para>
    </section>
  </chapter>

  <chapter>
    <title>Circulation Tasks</title>

    <para>The basic function of a lending library is (of course) to lend
    materials to borrowers. The Koha circulation module handles the daily
    tasks of keeping track of which borrower has which materials, when the
    materials are due back, what late fees might be due, and so forth. This is
    the part of Koha which the librarian(s) will use most often.</para>

    <section>
      <title>Issues</title>

      <para>Issues ("checking out") and returns ("checking in") are the basic
      tasks involved in circulation of library materials. In fact, you can
      perform these two basic tasks from the Koha home page, without going to
      the circulation page:</para>

      <figure>
        <title>Basic circulation from the home page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circhome.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>As you can see, starting the process of issuing an item can be
      accomplished from the home page by typing or scanning the borrower's
      card number in the "Issue" box. Likewise, items can be returned by
      scanning or typing the barcode on the item in the "Return" box.</para>

      <para>Normally, however, library staff will probably work from either
      the circulation issues or returns pages instead of the Koha home page.
      The issues page is the one that opens when you click on "Circulation"
      from the home page:</para>

      <figure>
        <title>Circulation issues page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circiss1.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>This page offers the opportunity to "Change Settings" before you
      begin work. It is particularly important that the branch be set
      correctly before starting to issue materials. If the branch is set to
      "Main" and you are actually issuing from "Branch1," all circulation
      statistics will be credited incorrectly to "Main" and Koha will assume
      that the item was located at "Main" instead of "Branch1." The branch
      setting is the way Koha determines where the transaction is actually
      taking place.</para>

      <para>Note that you do not need the borrower's card number if you know
      the borrower's name. If you enter any part of the borrower's name (any
      name -- but last name works best), then Koha will retrieve a list of
      possible borrowers from which you can choose. For example, if you had
      entered "hed" you might see a display like this:</para>

      <figure>
        <title>Name list</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circnamelist.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>If you select a name from this list, or type in a name or card
      number that identifies only one person in the database, you then see a
      screen showing borrower information.</para>

      <figure>
        <title>Borrower details</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circborrdetails.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>Now you are ready to get to work! This screen allows you to do a
      number of different tasks. (This, by the way, is the screen you will see
      if you scan a borrower's card number from the Koha home page.)</para>

      <para>First of all, it allows you to check out an item. This is done by
      scanning or typing the item barcode in the "Item Barcode" box and either
      clicking on "Issue" or pressing the return (enter) key on the keyboard.
      (Many barcode readers can be programmed to automatically add a "return"
      to the end of the barcode.) This screen also allows you to change the
      due date for an item to a special due date; this is done by using the
      date pull-down menus below the barcode box <emphasis>before</emphasis>
      you enter the barcode number. If you want your special due date to apply
      to all of the items the borrower is getting, then you can check the
      "Sticky Due Date" box and all items subsequently issued to this borrower
      (during this session) will be due on that date.</para>

      <para>Before describing what happens after you enter a barcode, note
      that there are two buttons beside the borrower's name: "detail" and
      "edit." Clicking on these buttons will either show you more details
      about the borrower or allow you to edit the borrower's details. (This
      assumes that the staff person has permission to add or modify member
      records: if this permission has not been granted, clicking on "edit"
      displays a screen with the message, "Sorry, Koha doesn't think you have
      permission for this page.") The process of editing or adding member
      records will be discussed in a later section of this chapter.</para>

      <para>It is possible that you will see special messages, located at the
      bottom of the Borrower Information box, alerting you to problems with
      the borrower's account. These messages might be prompted by
      circumstances such as:</para>

      <itemizedlist>
        <listitem>
          <para>this borrower has overdue items on their account (as in the
          screenshot above)</para>
        </listitem>

        <listitem>
          <para>this borrower has a debt or a credit with the library (perhaps
          from overdue fines or lost items)</para>
        </listitem>

        <listitem>
          <para>this card has been reported as lost</para>
        </listitem>

        <listitem>
          <para>this borrower has been debarred (barred) from receiving
          library services</para>
        </listitem>

        <listitem>
          <para>this borrower has an incorrect address on file with the
          library</para>
        </listitem>

        <listitem>
          <para>this borrower has reserved items waiting for them at the
          library</para>
        </listitem>

        <listitem>
          <para>library staff have attached any other special note to the
          borrower's record</para>
        </listitem>
      </itemizedlist>

      <para>Assuming that you have set any special due date and have dealt
      with any special circumstances with the borrower's account, you are now
      ready to scan or type in the Item Barcode. Koha checks to see if there
      are any problems with issuing this item before it completes the
      transaction; if there are problems, a prominent message is
      displayed.<figure>
          <title>Item problem message</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/itemmess.gif" />
            </imageobject>
          </mediaobject>
        </figure></para>

      <para>This problem resulted from scanning in the barcode of the first
      item in the list of "Previous Issues," prompting Koha to ask if we
      really wished to renew the loan.</para>

      <para>There are a number of conditions which will result in a message
      from Koha while issuing items, some related to the borrower, some
      related to the item. One type of condition results in Koha asking for
      confirmation before proceeding, as in the example above:</para>

      <itemizedlist>
        <listitem>
          <para>the borrower owes money to the library</para>
        </listitem>

        <listitem>
          <para>the borrower would have too many items checked out</para>
        </listitem>

        <listitem>
          <para>this item is already checked out to this borrower (hence a
          renewal)</para>
        </listitem>

        <listitem>
          <para>this item is currently checked out to a different
          borrower</para>
        </listitem>

        <listitem>
          <para>this item has been reserved by another borrower</para>
        </listitem>
      </itemizedlist>

      <para>Another type of condition results in Koha simply reporting that
      the item cannot be issued:</para>

      <itemizedlist>
        <listitem>
          <para>this borrower has been debarred (barred) from receiving
          library services</para>
        </listitem>

        <listitem>
          <para>this card has been reported as lost</para>
        </listitem>

        <listitem>
          <para>this borrower has an incorrect address on file with the
          library</para>
        </listitem>

        <listitem>
          <para>this borrower's registration has expired</para>
        </listitem>

        <listitem>
          <para>the sticky due date is invalid</para>
        </listitem>

        <listitem>
          <para>the barcode is unknown</para>
        </listitem>

        <listitem>
          <para>the item is classified as "not for loan"</para>
        </listitem>

        <listitem>
          <para>the item has been previously withdrawn from the
          collection</para>
        </listitem>

        <listitem>
          <para>the renewal limit has been reached</para>
        </listitem>

        <listitem>
          <para>library staff have restricted issuing of this item for some
          other reason</para>
        </listitem>
      </itemizedlist>

      <para>Once all of the error conditions have been satisfied, the item is
      issued:</para>

      <figure>
        <title>Item issue</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circiss2.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>The most recently issued item now appears at the end of the list,
      with its (new) due date.</para>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>
      </section>
    </section>

    <section>
      <title>Returns</title>

      <para>Returning items is simply a matter of scanning or typing the item
      barcode in the "Item Barcode" box.</para>

      <figure>
        <title>Returns</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circreturn.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>As you can see from the screenshot above, returning an item
      produces a display of information about the account of the borrower. If
      certain conditions exist relating to the returned item, you may also see
      alert messages. Some of the conditions which produce a message
      are:</para>

      <itemizedlist>
        <listitem>
          <para>the item is overdue and a fine has been assessed</para>
        </listitem>

        <listitem>
          <para>the item was previously reported as lost (and a fine may have
          been paid)</para>
        </listitem>

        <listitem>
          <para>another borrower has placed a reserve on this item</para>
        </listitem>
      </itemizedlist>

      <para>It is worth noting that Koha saves information about the previous
      two borrowers of an item. This information is useful when a borrower
      returns an item because it was damaged by a previous borrower. This
      information can be accessed by searching for an item through the
      librarian interface, as explained in a later section of this
      chapter.</para>

      <section>
        <title>Branch Transfers</title>

        <para>From time to time the library may want to send a group of items
        from one branch to another. When this is done, the catalogue must be
        updated to reflect the new location of the items. While it is possible
        to do this simply by returning all the items when they arrive at the
        new location (and ignoring the warning messages that the item was not
        on issue), Koha also includes a separate "branch transfer" utility to
        change the holding location in the catalogue. This utility is quite
        simple and straightforward.</para>

        <figure>
          <title>Branch Transfers</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/transfers.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Set the name of the branch where you are sending the items, then
        scan or type in each item barcode. The utility does not display any
        list or information about the item(s), it simply changes the holding
        location. To return to issuing items, click on "Next Borrower," or
        click on "Returns" to resume returning items.</para>
      </section>

      <section>
        <title>Reserves Pending</title>

        <para>Koha will inform you of pending reserves on items as they are
        returned, but if you would like to see a complete list of all pending
        reserves, select "Reserves pending" from the "Circulation" pull-down
        menu:</para>

        <figure>
          <title>Reserves Pending</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/reservepend.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>"Priority" shows which reserve will be filled next when there
        are multiple reserves on one title; the priority "1" reserve will be
        the first one filled. "Location" is the place where the borrower would
        like to pick up the reserve, and "Notes" are optional. Clicking on
        "Sort" will sort the list by reserve date, patron (borrower), or
        title.</para>

        <note>
          <para>If your borrowers are active users of the reserve function, be
          careful with this report; it can become so long that it will crash
          your browser!</para>
        </note>
      </section>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>
      </section>
    </section>

    <section>
      <title>Add/Edit Members</title>

      <para>Adding "members" (borrowers) to the library or changing
      information about a borrower can be started from the Koha home
      page.</para>

      <figure>
        <title>Member management from home page</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/homemember.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>If you happen to be at the home page when a potential borrower
      asks to be added to the library's membership, this works well. In most
      cases, however, you will get to member management from the circulation
      page, either through the pull-down "Members" menu at the top of the
      page, or by clicking on "Add" or "Edit" after doing a search for
      borrowers.</para>

      <para>No matter how you get there, the screen you will see is the
      same.</para>

      <figure>
        <title>Member detail entry</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/memberentry.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>On this page, required information appears in bold type with an
      asterisk: the card number, the given (first) name, the surname (last
      name), the postal address, and the town. It is to your advantage, of
      course, to fill in the rest of the fields with as much information as
      possible. Many of the fields on this screen are designed to allow
      flexible data entry; the zip code, for example, may be called "postal
      code" in your country, or may not even be an important part of your
      addresses. Decide how you want to use the fields and then try to be
      consistent as you add new members or edit information about existing
      borrowers.</para>

      <para>A few of the fields on this page deserve some explanation.</para>

      <variablelist>
        <varlistentry>
          <term>Card number</term>

          <listitem>
            <para>If you set your "autoMemberNum" system preference to "1"
            (on), then card numbers will be calculated automatically and
            inserted into this field when new members are added.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>Category</term>

          <listitem>
            <para>Be sure to choose the correct category for the member, since
            this may affect how loan periods and fines are calculated for this
            borrower.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>Notes (alternate contact)</term>

          <listitem>
            <para>Use this field wisely; if you have extensive notes on how to
            contact others when you cannot contact the borrower, it will make
            your work easier when you have to hunt down a "missing"
            member.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>Expiry date</term>

          <listitem>
            <para>If you leave this field blank when adding a new member, Koha
            can calculate the expiration date of the borrower's membership
            based on the "Enrollment Period" value you set for this borrower's
            category in the Borrower Categories parameter.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>Borrower message and Circulation note</term>

          <listitem>
            <para>These two fields are most often used when adding extra
            information to an existing borrower's account. The "Borrower
            message" will appear on the OPAC screen when the borrower logs in;
            it is a handy way to communicate information to a borrower. The
            "Circulation note" is intend to communicate information to other
            staff members. Both the messages appear on the staff screen when a
            borrower presents their card at the circulation desk to check
            items out.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>FLAGS</term>

          <listitem>
            <para>These three radio buttons can be used to set the status of
            the account. "Gone no address" means that mail to the borrower has
            been returned to the library and no new mailing address has yet
            been provided. "Lost" means the card (not the borrower!) has been
            reported lost. "Debarred" means the borrower has violated library
            rules and is not entitled to library services until the situation
            has been resolved.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>Sorting fields</term>

          <listitem>
            <para>These are general-purpose fields that can be used to store
            any type of special information which might be used for retrieving
            the records of a special group of borrowers from the
            database.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <para>When you have filled in the fields, click on "Save." If any of the
      required fields have been left blank, you will receive an error message
      and be given the opportunity to add the missing information.</para>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term>Posted by Paul Poulain</term>

            <listitem>
              <para>If you have an LDAP server, Koha can use that to
              authenticate users.</para>

              <para>In the <filename>modules/C4</filename> directory, you'll
              find the <filename>Auth_with_ldap.pm</filename> package. Open it
              with your text editor, modify it to fit your needs (LDAP server
              name and parameters), then :</para>

              <itemizedlist>
                <listitem>
                  <para>rename <filename>Auth.pm</filename> to
                  <filename>Auth_ini.pm</filename></para>
                </listitem>

                <listitem>
                  <para>copy <filename>Auth_with_ldap.pm</filename> to
                  <filename>Auth.pm</filename></para>
                </listitem>
              </itemizedlist>

              <para>It should work. Note that when you upgrade your Koha
              version, you have to manually copy your modified
              <filename>Auth_with_ldap.pm</filename> and overwrite the
              official <filename>Auth.pm</filename> once again.</para>

              <para>Don't forget to save the official
              <filename>Auth.pm</filename> somewhere; it can alway be
              useful.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>Posted by Kent Nasveschuk</term>

            <listitem>
              <para>An anonymous bind to LDAP requires us to compare passwords
              by retrieving the password then comparing to what the user has
              supplied. If passwords stored in LDAP are hashed using different
              mechanisms, the burden of determining what mechanism is used is
              on the Koha application. I changed the code in
              <filename>Auth.pm</filename> a little so that
              <userinput>bind()</userinput> uses the person's DN and password.
              The burden of what password hash is used is on LDAP and not
              Koha.</para>

              <para>Between local in <filename>Auth.pm</filename>:</para>

              <programlisting>        ##################################################
        ### LOCAL
        ### Change the code below to match your own LDAP server.
        ##################################################
        # LDAP connexion parameters

        # LDAP server
        my $ldapserver = '172.16.0.24';

        # Base DN for users
        my $name  = "ou=users,dc=tow,dc=net";

        # Bind uses the users full DN, if uid doesn't work try "cn"
#        my $binddn = "cn=$userid,$name";
        my $binddn = "uid=$userid,$name";

        my $db = Net::LDAP-&gt;new( $ldapserver );
        
        # do bind
        my $res =$db-&gt;bind(
                        dn        =&gt;$binddn,
                        password =&gt;$password);
        
        # check connexion, anything other code than LDAP_SUCCESS (0)
        # is a problem
        if($res-&gt;code != 0 ) {
                # auth refused
                warn "LDAP Auth failed server not responding or wrong user password combination";
                return 0;
        # search user
        }else {
        
                my $userdnsearch = $db-&gt;search(base =&gt; "$name",
                                filter =&gt;"(cn=$userid)",
                                );
                my $userldapentry=$userdnsearch -&gt; shift_entry;
                
                # build LDAP hash
                my %memberhash;
                my $x =$userldapentry-&gt;{asn}{attributes};
                my $key;
                foreach my $k ( @$x) {
                        foreach my $k2 (keys %$k) {
                                if ($k2 eq 'type') {
                                        $key = $$k{$k2};
                                } else {
                                        my $a = @$k{$k2};
                                        foreach my $k3 (@$a) {
                                                $memberhash{$key} .= $k3." ";
                                        }
                                }
                        }
                }
                #
                # BUILD %borrower to CREATE or MODIFY BORROWER
                # change $memberhash{'xxx'} to fit your ldap structure.
                # check twice that mandatory fields are correctly filled
                #
                my %borrower;
                $borrower{cardnumber} = $userid;
                $borrower{firstname} = $memberhash{givenName}; # MANDATORY FIELD
                $borrower{surname} = $memberhash{sn}; # MANDATORY FIELD
                $borrower{initials} = substr($borrower{firstname},0,1).substr($borrower{surname},0,1)."  "; # MANDATORY FIELD
                $borrower{streetaddress} = $memberhash{homePostalAddress}." "; # MANDATORY FIELD
                $borrower{city} = $memberhash{l}." "; # MANDATORY FIELD
                $borrower{phone} = $memberhash{homePhone}." "; # MANDATORY FIELD
                $borrower{branchcode} = $memberhash{businessCategory}; # MANDATORY FIELD
                $borrower{emailaddress} = $memberhash{mail};
                $borrower{categorycode} = $memberhash{employeeType};
        ##################################################
        ### /LOCAL
        ### No change needed after this line (unless there's a bug ;-) )
        ##################################################</programlisting>

              <para>This works for passwords stored in LDAP that use MD5 or
              SMD5. I imagine it will work for other hashing mechanisms
              also.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>Posted by Bruno Marmol</term>

            <listitem>
              <para>For testing the LDAP password, I needed to patch this code
              to not do an anonymous bind. I don't use the
              <userinput>compare()</userinput> function. I just do:</para>

              <programlisting>        my $res =$db-&gt;bind( "uid=$userid,$name",password =&gt; $password);
        # check connexion
        if($res-&gt;code) {
                # auth refused
                #warn "LDAP Auth: not binded";
                return 0;
                }</programlisting>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Catalogue Searches in the Librarian Interface</title>

      <para>While working at the circulation desk, staff are likely to need to
      search the catalogue for bibliographic records. There are some
      differences between the information the librarian(s) will see and the
      information the public will see when searching the library catalogue.
      First, the librarian is presented with different search options than are
      available through the OPAC.</para>

      <figure>
        <title>Librarian's catalogue search</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/circcatsearch.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>This screen is not accessed from the Circulation menu, but from
      the Catalogue menu. There are a few things that appear to be missing
      from this screen at first glance. The Advanced OPAC Search allows all of
      these searches, plus the ability to search on series title, format, and
      publication date range. What the OPAC search does not have, however, are
      the search fields at the bottom of this screen.</para>

      <para>These fields allow the librarian to search directly against the
      MARC record. The first box allows staff to choose an "and" or "or"
      (Boolean) search type for each line. The second box contains a pull-down
      list of all the MARC subfields which are not set as "ignored" in your
      default Biblio Framework; this list is also grouped according to the
      "tab" setting of each subfield. Choose which MARC subfield you wish to
      search from this list. The third box allows you to exclude a term by
      choosing "not" from the pull-down list. The fourth box allows you to
      control the search behavior; will the search look for the term contained
      somewhere in the subfield, at the beginning of the subfield, exactly
      matching the content of the subfield, etc. Finally, the fifth box is
      where you type in the search term.</para>

      <para>This ability to search directly against the MARC record is a
      powerful tool for the librarian. Notice that there is yet another area
      at the bottom of this screen that does not appear in the OPAC search
      screen. This area allows the librarian to: set the number of titles that
      will be displayed on each page of the search results; select if the
      results will be sorted by title, author, call number, publication year,
      or publisher; and choose either an ascending or descending sort.</para>

      <para>The display of the search results is also quite different from the
      OPAC search results. By default, Koha shows the MARC record. But a more
      useful display is either the "Complete" or "Normal" display, which can
      be accessed by clicking on the appropriate tab at the top of the display
      box.</para>

      <figure>
        <title>Librarian's "Complete" search results</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/libsearchresults.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>Note that other tabs across the top of the display area allow the
      librarian to jump directly to some other tasks, such as editing or
      deleting an item record attached to this bibliographic record (if the
      logged-in user has permission to edit catalogue records), adding the
      book to a virtual shelf, or placing a request (reserve) on the
      book.</para>

      <para>Note also that there is more information on this screen than on
      the OPAC about the status of individual copies of this book. First, all
      copies are displayed, regardless of their current status, including lost
      and long overdue copies. Also the card number of the current borrower of
      a copy is given. This card number is a live link; clicking on it will
      display detailed information about the borrower.</para>

      <para>One other live link in the "Items" list is the barcode of each
      copy. Clicking on the barcode will display very detailed information
      about the copy.</para>

      <figure>
        <title>Librarian's item details display</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/libitemdetail.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>Most of this information is self-explanatory. Note that there are
      again some live links: the current borrower's card number (to see
      borrower details); the "Accession Date," which will lead to a display of
      information about the order history of the copy (from the Acquisitions
      module); and the "Total Issues." This last link produces information
      about the issuing history of this copy.</para>

      <figure>
        <title>Item Issue History</title>

        <mediaobject>
          <imageobject>
            <imagedata fileref="images/libissueshist.gif" />
          </imageobject>
        </mediaobject>
      </figure>

      <para>This screen basically keeps track of the current and the
      "permanent" locations of the item, the number of times it has been
      issued at each branch, and the date and time when it was last scanned by
      a librarian.</para>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>
      </section>
    </section>
  </chapter>

  <chapter>
    <title>Cataloging and Acquisitions</title>

    <para>The function of a library catalogue is to retain descriptions of the
    items held by the library in such a way that the descriptions can be
    accessed and used effectively whenever an item needs to be retrieved from
    the collection. The function of cataloging is to build those descriptions
    and store them in a logical database (i.e. the catalogue) in such a way
    that knowing one part of the description allows the catalogue user to
    retrieve the entire description of the item.</para>

    <para>This chapter describes the process of maintaining a Koha catalogue,
    including the process of tracking the actual acquisition of library items.
    It does not provide general cataloging rules -- for those, you should
    consult one or more of the many cataloging web pages available on the
    Internet (often maintained by the "central" or "national" library of a
    country). This chapter also does not describe the process of setting up
    "biblio frameworks" -- see Chapter One for that information. This chapter
    simply tells you how to use Koha for recording information about items as
    you order them, and then tells you how to place MARC records describing
    those items into your Koha catalogue.</para>

    <section>
      <title>Building and Receiving Orders</title>

      <para>If you use Koha's Acquisitions feature, part of the bibliographic
      record can be added to the catalogue as part of the process of ordering
      an item. The primary purpose of the Acquisitions feature, however, is
      accounting for your orders.</para>

      <section>
        <title>Suppliers</title>

        <para>The first step in using the Acquisitions module is describing
        your suppliers and adding them to your list of vendors. This is
        actually done as part of the process of placing your first order with
        the supplier.</para>

        <para>Begin by going to the "Start, receive, modify order" box on the
        Acquisitions home screen and either search for the supplier by name
        (if you think they might already be in your vendor list) or leave the
        box blank and click on "OK."<figure>
            <title>Acquisitions Home Screen</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/acqui-home.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>Notice that this screen displays any budget and currency
        information which was entered as part of setting up Koha for your
        library. The budget numbers will be modified as you place and receive
        orders to reflect any amounts you have spent or committed.</para>

        <para>When you click on "OK" without entering the name of a supplier
        in the search box, you will see a screen listing all of the suppliers
        in your vendor list -- which will be empty the first time you use
        Acquisitions.<figure>
            <title>Supplier List (First Use)</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/supplierlist1.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>Click on "Add supplier" and you get a screen allowing you to
        enter the details about this vendor:<figure>
            <title>Adding a Supplier</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/supplier.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>When you click on "save" after entering the supplier
        information, you will be returned to the supplier list, this time with
        your new supplier available for selection. This supplier, along with
        all of the other suppliers in your vendor list, will also appear from
        now on whenever you search for a supplier without entering a search
        term.<figure>
            <title>Supplier List</title>

            <mediaobject>
              <imageobject>
                <imagedata fileref="images/supplierlist2.gif" />
              </imageobject>
            </mediaobject>
          </figure></para>

        <para>Click on the "Order" icon (mailing envelope) to proceed to the
        next step in the process of placing an order.</para>
      </section>

      <section>
        <title>Shopping Baskets</title>

        <para>Once you have added the vendor to your files, the next step in
        building a new order is creating a shopping basket to hold the order.
        This process begins by adding an order line that gathers information
        about the item you wish to order, either by searching for a matching
        bibliographic record already in your catalogue, looking at patron
        suggestions, or creating a new bibliographic record.</para>

        <figure>
          <title>Creating a shopping basket</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/newshopbask.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The "search on existing books" looks for your search term in the
        titles on the items in your catalogue. If you do not find a match for
        the item you wish to order, you can create a new bibliographic record
        for it. (See the instructions for acquiring or creating MARC records
        later in this chapter.) Or you can gather information from suggestions
        that have been accepted from patrons to start the process of building
        a bibliographic record. As you can see, regardless of how you go about
        it, the goal is to describe each item in an order using information
        from a bibliographic record in your catalogue. Let's look at using an
        existing record first, then look at the process of managing
        suggestions.</para>

        <para>If you search for a word (or words) from an existing title in
        your catalogue, you will see a list of search results to choose
        from.</para>

        <figure>
          <title>Searching for matching record</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/baskitemsearch.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If you then click on the title of the matching item, a new
        shopping basket will be created, this first item will be added to it,
        and you will be returned to a screen for adding more information about
        this item order.</para>

        <figure>
          <title>Item order details</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/baskitemdetails.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>On this screen, the "catalogue details" are filled in using the
        information from the bibliographic record, and you now need to add the
        "accounting details." In particular, you need to specify the number of
        copies you wish to order, the fund from which the money is to be taken
        (using a pull-down list of funds you already defined in your Koha
        parameters) the replacement cost and the estimated (budget) cost. All
        the other calculations can be done based on information from your Koha
        parameters, so when you click on "OK," you will see something like
        this:</para>

        <figure>
          <title>New order</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/basket1.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Note that the "managed by" information is not displayed on this
        screen, but is automatically defined in the shopping basket by the
        login name when the basket was created. In the example above, "Basket
        1" will be managed by "kohaadmin."</para>
      </section>

      <section>
        <title>Suggestions</title>

        <para>The Koha OPAC allows your library users to submit suggestions
        for library purchases. These suggestions are managed during the
        acquisitions process.</para>

        <para>When suggestions are being held by Koha for management by the
        librarians, a note on the acquisitions home screen will inform
        you:</para>

        <figure>
          <title>Suggestions note</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/sugg1.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Clicking on the "manage" button brings you to the list of
        suggestions currently awaiting action.</para>

        <figure>
          <title>Suggestions list</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/sugglist.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The pull-down menu above the "Change status" button lets you
        choose to either "accept" or "reject" this suggestion. (Once the
        status is changed, the new status is reported back to the OPAC user
        who made the suggestion.) If you choose to accept the suggestion, make
        sure you record the suggestion information before you change the
        status: the information will disappear once you have changed the
        status. Use the information to find or make a bibliographic record and
        proceed as above to add the item to a shopping basket.</para>
      </section>

      <section>
        <title>Submitting an order</title>

        <para>When you have added as many items as you want to a shopping
        basket, you can submit the order. First you will need to display the
        shopping basket details (as if you were going to add more items to the
        basket) and then click on "Close" in the Basket Info window. This will
        return you to the supplier details screen, now showing that the basket
        has been closed.</para>

        <figure>
          <title>Closed shopping basket</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/closebasket.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If you now click on the "View" button, you see a different
        shopping basket detail screen (in this case, with only one item in the
        basket):</para>

        <figure>
          <title>Basket ready to order</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/donebasket.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Clicking on the "[order]" link at the top of the Fund column
        deducts the estimated cost of the order from the amount available in
        the fund(s) listed. The new available total will be displayed the next
        time you open the Acquisitions main page.</para>
      </section>

      <section>
        <title>Receiving an order</title>

        <para>As items in an order arrive from the vendor, you need to
        "receive" them into your Koha database. This process starts exactly
        the same way you start the process of building an order, only now you
        click on the "Receive" icon (an in-box) instead of the "Order"
        icon.</para>

        <figure>
          <title>Receiving an order</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/closebasket.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>This displays a screen for gathering some basic information
        about the shipment you have just received, namely the invoice number,
        any taxes, and any freight charges.</para>

        <figure>
          <title>Order details</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/recdetail.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Click on "save" to store this basic information about the
        shipment and proceed to the screen for searching your order lists for
        matching items:</para>

        <figure>
          <title>Search orders</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/recsearch.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The search should (of course) find a matching line in a saved
        order and display it, allowing you to enter details about this item
        from the invoice.</para>

        <figure>
          <title>Receiving items</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/recitems.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>In our example, we are going to assume we have received both
        copies that were ordered, but we will add them individually, so that
        we can assign one item to the MAIN library, and the other to a branch,
        each copy with it's own unique barcode. This adds the items
        immediately to the database as soon as you click on the "save" button.
        Now your order receipt summary displays the total costs, which should
        match the invoice total if you have entered everything
        correctly.</para>

        <figure>
          <title>Receipt summary</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/recsummary.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <note>
          <para>Only the actual cost of the items will be deducted from your
          book funds. Koha assumes that other charges (freight, taxes) come
          from other funds elsewhere in your budget.</para>
        </note>
      </section>
    </section>

    <section>
      <title>Acquiring MARC Bibliographic Records</title>

      <para>While some cataloger somewhere obviously must create a MARC record
      for an item that has never been cataloged before, most cataloging is
      done by modifying MARC records that already exist; very little
      cataloging is "original" cataloging. Catalogers (much like open source
      developers!) share their work, so others can build on and improve what
      they have done. If you are using MARC, adding records to your database
      usually begins, then, with acquiring pre-existing MARC records.</para>

      <important>
        <para>Importing good MARC records is very dependent on defining a good
        default Biblio Framework through the Parameters page. MARC tags that
        are "ignored" in the default Biblio Framework will
        <emphasis>not</emphasis> be imported into Koha when acquiring MARC
        records through Z39.50 or the upload of a file into the MARC
        reservoir. Spend extra time making sure that you have a well-defined
        default Biblio Framework, or consider using the
        <filename>koha/intranet/scripts/misc/migration_tools/bulkmarcimport.pl</filename>
        script to import files of MARC records directly into your
        catalogue.</para>
      </important>

      <section>
        <title>The Z39.50 Search</title>

        <para>Z39.50 is an international standard computer protocol for
        exchanging data, including bibliographic records. To be precise,
        "Z39.50" is actually the standard identified as ISO 23950 or ANSI/NISO
        Z39.50. The standard specifies a client/server-based protocol for
        searching and retrieving information (like MARC records) from remote
        databases. You can find more information from the Library of Congress'
        Z39.50 home page, <ulink
        url="http://www.loc.gov/z3950/agency/">http://www.loc.gov/z3950/agency/</ulink>.</para>

        <para>If you have chosen to use Koha with MARC support turned on, Koha
        includes a Z39.50 client for retrieving MARC records from libraries
        which maintain a Z39.50 server. The Koha code currently requires that
        the <filename>Event</filename> Perl module be installed on the Koha
        server; since the <filename>Event</filename> module will not work on
        Windows or Mac OS X, Koha's Z39.50 search feature is not available
        when Koha is installed on either of these operating systems. The next
        version of Koha should correct this deficiency, as it will incorporate
        next-generation Z39.50 technology. For now, however, the following
        instructions only apply to Koha installations on Linux/Unix
        systems.</para>

        <para>You start the Z39.50 search process by choosing :"Add biblio"
        from the "Catalogue" link. This is the first step in any cataloguing
        chore.</para>

        <figure>
          <title>Add Biblio first screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbib1.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>This screen provides you with an opportunity to search your
        existing catalogue records and any records in your MARC reservoir
        before you add a new record. The purpose of this initial search is to
        avoid instances of duplicate records. For example, if you wanted to
        catalogue a book entitled <citetitle>Spy Catcher</citetitle>, you
        would enter that title in the "Title" search field and might get a
        result like this:</para>

        <figure>
          <title>Add Biblio search result</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbib2.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If nothing in the results screen matches the item you want to
        catalogue, you can click on the "Add New Biblio" button (and choose a
        Biblio Framework from the pull-down menu) to proceed to the next step.
        Likewise, if you are sure the item you want to add to the catalogue
        does not exist in either your current catalogue or your MARC
        reservoir, you can skip the search step and click on the "Create Empty
        Biblio" button on the first Add Biblio screen. Either way, you now
        come to the cataloging screen for adding a MARC record:</para>

        <figure>
          <title>Add Biblio cataloging screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbiblio.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The appearance of this screen is controlled by the Biblio
        Frameworks that were set up when you defined your Koha parameters. The
        MARC record may be subdivided across as many as ten different screens,
        which can be accessed by clicking on the tabs (numbered beginning with
        "0") along the left side of the page. Above these tabs are two
        buttons: "Add biblio" (used to add the record to the catalogue when
        you have finished entering information) and "z3950 search." This
        second button is the one that we are now going to explain.</para>

        <para>The Z39.50 client will search for items by either ISBN, author,
        or title. An ISBN search will, of course, return the most relevant
        search results, but the other search methods are provided for items
        that do not have an ISBN. Let us assume that you now have an new book
        you want to catalogue -- Donna Tartt's <citetitle>The Little
        Friend</citetitle> -- and you have already searched your catalogue and
        come to the screen above for adding a new MARC bibliographic record.
        To use Z39.50 to search for a record from other libraries, insert the
        ISBN in the ISBN field and click on the "z3950 search" button:</para>

        <figure>
          <title>Z39.50 Searching</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/z3950search.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>Notice that the ISBN is entered without any hyphens. Clicking on
        the "z3950 search" button opens a pop-up window that reports on the
        progress of the search, beginning by reporting "Still ?? requests to
        go." As results are found, the "??" will be replaced by the number of
        Z39.50 servers remaining to be searched, and finally a list of all the
        retrieved results will be displayed.<note>
            <para>There are several factors that can make the Z39.50 search
            fail at this point. First, you must have your browser set to allow
            pop-up windows from your Koha server. The window is actually
            opened to begin the search by a JavaScript, so your browser should
            also have JavaScript enabled. Finally, if you keep getting the
            "Still ?? requests to go" message over and over, your system
            administrator probably has not started the Z39.50 daemon using the
            <filename>koha/intranet/scripts/z3950daemon/z3950-daemon-launch.sh</filename>
            script. (If you are using a RedHat operating system and have
            problems starting the daemon, see the "<link
            linkend="getrecords">User comments</link>" at the end of this
            section.)</para>
          </note></para>

        <para>Once Koha has searched through the list of Z39.50 servers that
        were setup in your Koha parameters, the pop-up window will display the
        search results.</para>

        <figure>
          <title>Z39.50 Search Results</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/z3950results.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>At this point, all of the retrieved records have been added to
        your MARC reservoir. You can now choose from the list and click on the
        "Import this biblio" link next to your choice to automatically use
        that record to fill in the MARC values on your cataloging
        screen.</para>

        <figure>
          <title>Z39.50 Imported Biblio</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/z3950fill.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>After editing the MARC bibliographic record to include your
        local information (such as the Koha Itemtype in our example) and
        making any other changes, click on the "Add biblio" button to save the
        MARC record and proceed to entering the item information.</para>
      </section>

      <section>
        <title>Importing MARC record files</title>

        <para>There are two ways to import MARC record (ISO2709) files into
        your Koha catalogue. One is to upload them into the MARC reservoir and
        draw them one-by-one from the reservoir into the regular catalogue.
        This function is accessed through the Parameters page, and is
        therefore explained in Chapter 1, <link linkend="MARCimport">Section
        4.2</link>.</para>

        <para>The second way involves running the
        <filename>bulkmarcimport.pl</filename> script from a terminal command
        line, and is therefore harder to use. This second method has the
        advantage, however, of importing the entire MARC record from the file,
        while the MARC reservoir upload will only import the MARC tags that
        are not ignored in your default Biblio Framework. Since this may be
        important at times, we will look briefly at
        <filename>bulkmarcimport.pl</filename>.</para>

        <para>First of all, <filename>bulkmarcimport.pl</filename> is an
        "extra script," and not part of the "normal" Koha code. It is really
        intended for special circumstances, but Koha users have found that it
        can be modified to enable routine uploading of batches of MARC records
        prepared outside of Koha. In any case, the user must take steps to
        pass certain information to the script so it can find the rest of the
        Koha code, particularly the Koha Perl modules. If this is not done,
        you will get a <computeroutput>Can't locate C4/Context.pm in
        @INC</computeroutput> error message, indicating that Perl cannot find
        the path to your Koha modules in its special <varname>@INC</varname>
        variable.</para>

        <para>There are two ways to tell Perl how to find the Koha modules:
        you can either modify the <varname>@INC</varname> variable in the
        <filename>bulkmarcimport.pl</filename> script, or you can set the
        <varname>PERL5LIB</varname> and KOHA_CONF environment variables before
        you run <filename>bulkmarcimport.pl</filename>.</para>

        <para>To modify the @INC variable from within the script, add this
        line to the list of "use" statements at the beginning of the
        script:<programlisting>use lib "/<emphasis>path</emphasis>/<emphasis>to</emphasis>/koha/intranet/modules";</programlisting></para>

        <para>Change <emphasis>/path/to/</emphasis> to whatever is the actual
        path to your Koha files.</para>

        <para>The method for setting the PERL5LIB and KOHA_CONF environment
        variables will depend on the shell you are using in your terminal. If
        you are using <filename>bash</filename> or a Bourne-style shell,
        do:</para>

        <programlisting>export KOHA_CONF=/<emphasis>path</emphasis>/<emphasis>to</emphasis>/koha.conf
export PERL5LIB=/<emphasis>path</emphasis>/<emphasis>to</emphasis>/koha/intranet/modules</programlisting>

        <para>For C-style shells, do:</para>

        <programlisting>setenv KOHA_CONF /<emphasis>path</emphasis>/<emphasis>to</emphasis>/koha.conf
setenv PERL5LIB /<emphasis>path</emphasis>/<emphasis>to</emphasis>/koha/intranet/modules</programlisting>

        <para>Or if you are using Windows, do:</para>

        <programlisting>set KOHA_CONF=c:\<emphasis>path</emphasis>\<emphasis>to</emphasis>\koha.conf
set PERL5LIB=c:\<emphasis>path</emphasis>\<emphasis>to</emphasis>\koha/intranet/modules</programlisting>

        <para>Once you have set the variables, you can run the script.
        Remember, though, that these special environment variable settings
        will be lost when you close the shell. If you are going to use
        <filename>bulkmarcimport.pl</filename> frequently, it is best to add
        the "use lib" line to the script itself.<note>
            <para>You might still get an error message like
            <computeroutput>Can't locate Time/HiRes.pm in
            @INC</computeroutput> when you start the script. This is a Perl
            module that is not routinely installed, but can easily be
            installed by doing <userinput>perl -MCPAN -e 'install
            "Time::HiRes"'</userinput> in a terminal command line.</para>
          </note></para>

        <para>The <filename>bulkmarcimport.pl</filename> script does not do
        any sophisticated data manipulation; it simply reads an ISO2709 file
        record by record, puts aside any item (holdings) information, imports
        the basic bibliographic information, and then adds the item
        information. If you need to do any manipulation of the ISO2709
        records, this should either be done before running the script, or the
        process of modifying the records can be inserted into the
        script.</para>

        <para>If you invoke the <filename>bulkmarcimport.pl</filename> script
        without any options, you get a help message:</para>

        <programlisting>[root@localhost migration_tools]# ./bulkmarcimport.pl
small script to import an iso2709 file into Koha.
parameters :
        h : this version/help screen
        file /path/to/file/to/dump : the file to dump
        v : verbose mode. 1 means "some infos", 2 means "MARC dumping"
        n : the number of the record to import. If missing, all the file is imported
        t : test mode : parses the file, saying what he would do, but doing nothing.
        c : the char encoding. At the moment, only MARC21 and UNIMARC supported. MARC21 by default.
        d : delete EVERYTHING related to biblio in koha-DB before import  :tables :
                biblio,                 biblioitems,            subjects,           items
                additionalauthors,      bibliosubtitles,        marc_biblio,
                marc_subfield_table,    marc_word,              marc_blob_subfield
IMPORTANT : don't use this script before you've entered and checked twice (or more) your MARC parameters tables.
If you fail this, the import won't work correctly and you will get invalid datas.

SAMPLE : ./bulkmarcimport.pl -file /home/paul/koha.dev/local/npl -n 1</programlisting>

        <para>Be very careful when using the <userinput>-d</userinput> option;
        the script will not warn you that you are about to delete your
        existing data, it will just do it.</para>

        <para>Here is another example of invoking
        <filename>bulkmarcimport.pl</filename>:</para>

        <programlisting>./bulkmarcimport.pl -d -c UNIMARC --file records.mrc</programlisting>

        <para>In this example, we are deleting all of the old data and
        importing a file of records called <filename>records.mrc</filename>,
        which uses UNIMARC character encoding.</para>
      </section>

      <section>
        <title><anchor id="getrecords" />- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term>Posted by Amzari Abu Bakar</term>

            <listitem>
              <para>With RedHat 4 Enterprise ES (update 2), you will have a
              problem when executing
              <filename>z3950-daemon-launch.sh</filename>. This message will
              appear: <computeroutput>This account is currently not
              available.</computeroutput></para>

              <para>This happens because RedHat does not allow scripts to run
              under the www-data/apache user account. A solution is to change
              the user of the <filename>z3950-daemon-option</filename> file
              from www-data to root.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Adding, Editing, and Deleting Bibliographic Records</title>

      <para>One of the most important things a librarian does is manage the
      metadata describing the library's resources. Put more simply, it is
      essential that a library maintain good catalogue records describing the
      items held by the library, so they can be found and retreived as needed.
      This involves modifying records created by other librarians to match a
      specific library's needs, or sometimes creating new records.</para>

      <para>This section assumes that the reader is familiar with cataloging
      theory and practice, and describes only the mechanics of adding,
      editing, and deleting bibliographic records in Koha. If you need help
      with the general cataloging concepts found in this section, many schools
      offer cataloging courses, and some "quick start" guides can be found on
      the Internet.</para>

      <para>This section is divided into two subsections; the subsection that
      is relevant to your library depends upon whether or not you enabled MARC
      support in your Catalogue system preferences. It is a good, idea,
      however, to scan through both sections, to get a complete overview of
      cataloging in Koha.</para>

      <section>
        <title>MARC</title>

        <para>Adding a new MARC record to the Koha database involves the "Add
        biblio" function. While there are several ways to access this
        function, the easiest is directly from the Koha home page, by
        highlighting "Catalogue" and "Add biblio":</para>

        <figure>
          <title>Accessing 'Add biblio'</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbibhome.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>The process of adding a biblio record starts with a search of
        the catalog, either by ISBN or by title, to verify that there is not
        already a catalog record for the item. If, however, you are certain
        that the item has never been cataloged before, you can bypass the
        search by clicking on the "Create empty biblio" button. (Be sure you
        choose the biblio framework within which you want to work before
        creating the empty biblio.)</para>

        <figure>
          <title>Starting the 'Add biblio' process</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbib1.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If you do a search first, you may find records that match your
        search term. If so, you must decide if one of these records is one you
        want to use, or do you need to create a new record. Note that the
        search looks not only in your active catalogue, but also in the
        reservoir of any other catalogue records you may have accumulated,
        perhaps from Z39.50 searches.</para>

        <figure>
          <title>Cataloging Search</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbib2.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If you decide to use an existing record, you can either edit the
        record to add new information, duplicate the record to create a new
        record based on the old record, or add an entirely new record to the
        catalogue. This decision will determine whether you click on "Edit,"
        "Duplicate," or "Add New Biblio." (And again, be sure you choose a
        biblio framework from the pull-down menu next to the "Add New Biblio"
        button.)</para>

        <para>Regardless of what you choose, you finally arrive at the screen
        for entering or editing bibliographic information.</para>

        <figure>
          <title>Cataloging Screen</title>

          <mediaobject>
            <imageobject>
              <imagedata fileref="images/addbiblio.gif" />
            </imageobject>
          </mediaobject>
        </figure>

        <para>If you are editing a record or working with a duplicate record,
        some of the fields on this page will already have data in them. If you
        are adding a new record, most fields will be blank, unless your Biblio
        Framework specifically has some controlled values built into it (as is
        the case with MARC tag 090 in the figure). The fields that you see,
        where you see them, and controlled values in fields are all determined
        entirely by the Biblio Framework(s) you set up in your Parameters. If
        you find this display to be inconvenient, go back to Parameters and
        either edit your existing Biblio Framework or create a new one.</para>

        <para>There are some tag names that are followed by a plus sign ("+");
        these tags may be repeated by clicking on the "+". (Currently, there
        is no mechanism for repeating subfields.) Other fields are followed by
        three dots ("..."); these fields can be filled in by referencing
        special scripts or authorities you may created. We will discuss the
        procedure for using these tools in the next section.</para>

        <para>When you have entered the values you want in all the fields you
        want (on all the tabs), click on "Add biblio" to save the general
        bibliographic record and proceed to the screen for adding item
        information. Since adding items is the same no matter whether or not
        you are using MARC records, we will look at that process after the
        section about adding bibliographic records to a non-MARC
        catalogue.</para>

        <section>
          <title>Authorities</title>

          <para></para>
        </section>

        <section>
          <title>Essential Fields</title>

          <para></para>
        </section>
      </section>

      <section>
        <title>Non-MARC</title>

        <para></para>

        <section>
          <title>Biblio Data</title>

          <para></para>
        </section>

        <section>
          <title>Group Data</title>

          <para></para>
        </section>
      </section>
    </section>

    <section>
      <title>Adding, Editing, and Deleting Copies (Items) -- to be
      completed</title>

      <para></para>

      <section>
        <title>MARC</title>

        <para></para>
      </section>

      <section>
        <title>Non-MARC</title>

        <para></para>
      </section>
    </section>

    <section>
      <title>Special Considerations for Serials (MARC) -- to be
      completed</title>

      <para></para>
    </section>
  </chapter>

  <chapter>
    <title>Serials</title>

    <para>Information materials that are published in installments over a
    period of time are commonly called "periodicals" or "serials." Management
    of serials is a challenge for any Integrated Library System. Librarians
    often expect the Serials Module of an ILS to do several tasks at the same
    time:</para>

    <orderedlist>
      <listitem>
        <para>display general (bibliographic) information about the
        publication;</para>
      </listitem>

      <listitem>
        <para>display information about which installments of the periodical
        are held by the library;</para>
      </listitem>

      <listitem>
        <para>allow the librarian to track missing and/or late issues;
        and</para>
      </listitem>

      <listitem>
        <para>allow the library to circulate issues to patrons, if the
        library's policy permits this.</para>
      </listitem>
    </orderedlist>

    <para>Koha's Serials functions can handle the first three of these tasks,
    although holdings information (the second task in the list) is not handled
    in the MARC record in Koha; instead, it is handled in a special table in
    the database. This is because the different flavors of MARC, especially
    MARC 21 and UNIMARC, handle holdings information for serials in very
    different ways. Since Koha is intended to work with any flavor of MARC,
    serials holdings data thus has to be stored outside of the MARC
    record.</para>

    <para>For the same reason, Koha cannot handle circulation of holdings as
    part of the Serials function. If your library intends to circulate issues
    of serials, you should plan to create very brief MARC records for each
    issue and attach holdings data to the record as you would for a
    book.</para>

    <section>
      <title>Setting Up the Serials Module</title>

      <para></para>

      <section>
        <title>- User comments -</title>

        <para>(Send comments and remarks to <email>st.hedges AT gmail DOT
        com</email>. They will be added to this section.)</para>

        <variablelist>
          <varlistentry>
            <term>Posted by Owen Leonard</term>

            <listitem>
              <para>The N/[X,Y] formula for managing issues of serials is a
              little confusing, but maybe an example will help:</para>

              <para>Many serials are identified by a custom numbering formula
              like "Vol. 4, No. 7, Iss. 8" (Volume four, number 7, issue 8).
              The serials numbering formula calculator in Koha allows you to
              automate the updates of those values according to each serial's
              special formula. In this case, your Koha formula would look like
              this:<programlisting>Vol. {X}, No. {Y}, Iss. {Z}</programlisting></para>

              <para>Each number in the formula is replaced by a variable. In
              the numbering calculation table you set the rules for how each
              number is incremented as each serial issue is acquired. Let's
              say in this example that your serial title releases 12 issues a
              year, that each 'number' collects 12 issues, and each 'Volume'
              collects 10 'Numbers.'</para>

              <para>It's easier if we start with the {Z} column:</para>

              <blockquote>
                <para>Add 1 &lt;-- Issue number increments by one</para>

                <para>once every 1 &lt;-- Issue number increments by one each
                time an issue is published</para>

                <para>When more than 999999 &lt;-- Issue number should not
                reset to zero, so enter a huge number here</para>

                <para>The loop is for instance 0 &lt;-- Where are we in the
                current sequence? Since {Z} increments by one and does not
                reset, this value isn't needed.</para>

                <para>Set back to 0 &lt;-- In this case we hope it doesn't
                ever get set back</para>

                <para>Last value 8 &lt;-- The next issue should have this
                value</para>
              </blockquote>

              <para>In the {Y} column:</para>

              <blockquote>
                <para>Add 1 &lt;-- Each 'Number' increments one at a
                time</para>

                <para>Every 12 &lt;-- 'Number' increments by one every twelve
                issues</para>

                <para>When more than 10 &lt;-- 'Number' resets every 120
                issues (12 issues x 10)</para>

                <para>The loop is for instance 7 &lt;-- Indicates that we're
                starting at 7 of 10</para>

                <para>Set back to 1 &lt;-- reset to 1 every 120 issues</para>

                <para>Last value 7 &lt;-- The next issue should have this
                value for "No."</para>
              </blockquote>

              <para>In the {X} column:</para>

              <blockquote>
                <para>Add 1 &lt;-- Volume is incremented by one</para>

                <para>Every 120 &lt;-- Volume increments by one every 120
                issues</para>

                <para>When more than 999999 &lt;-- Volume number should not
                reset to zero</para>

                <para>The loop is for instance 0 &lt;-- Volume doesn't reset,
                so this can be left 0</para>

                <para>Set back to 0 &lt;-- Shouldn't ever be reset, we
                think</para>

                <para>Last value 4 &lt;-- The volume numbering should begin
                with 4</para>
              </blockquote>

              <para>With those values entered, the numbering system for each
              new issue should look like this (if I got the math
              right):</para>

              <programlisting>Vol. 4, No. 7, Iss. 8
Vol. 4, No. 7, Iss. 9
Vol. 4, No. 7, Iss. 10
Vol. 4, No. 7, Iss. 11
Vol. 4, No. 8, Iss. 12
...
Vol. 4, No. 10, Iss. 36
Vol. 5, No. 1, Iss. 37</programlisting>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>Posted by Henri-Damien LAURENT</term>

            <listitem>
              <para>To see your serials in your catalogue you MUST :</para>

              <orderedlist>
                <listitem>
                  <para>create or choose BOTH the supplier AND the general
                  biblio of your serial;</para>
                </listitem>

                <listitem>
                  <para>add a subscription named with this serial and include
                  both supplier and notice information.... And add a formula,
                  subscription date, frequency and subscription
                  length...</para>
                </listitem>
              </orderedlist>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>

    <section>
      <title>Managing Serials -- to be completed</title>

      <para></para>
    </section>
  </chapter>

  <chapter>
    <title>Reports -- to be completed</title>

    <para>What are reports</para>

    <section>
      <title>Pre-Defined Reports</title>

      <para></para>
    </section>

    <section>
      <title>Custom Reports</title>

      <para></para>
    </section>
  </chapter>

  <chapter>
    <title>Routine Maintenance</title>

    <para>Once you have Koha installed and working, the system administrator's
    job is just beginning. Now come the daily tasks involved with keeping Koha
    "healthy": backing up data, restoring data if the system crashes,
    troubleshooting problems, etc.</para>

    <section>
      <title>Backups and Restoring</title>

      <remark>This section is a copy of a separate document by Joshua Ferraro,
      <email>jmf at kados dor org</email>, written 2004-12-13 and available at
      <ulink
      url="http://www.kohadocs.org/Backups_and_Restoring.html">http://www.kohadocs.org/Backups_and_Restoring.html</ulink>.</remark>

      <section>
        <title>Introduction</title>

        <para>Understanding how to properly backup and restore your
        <application>Koha</application> installation is a critical step in
        administering <application>Koha</application> successfully. Not only
        are these skills needed in an emergency, such as a hard drive failure
        on your primary production machine, but they are also useful for when
        you update, upgrade, or anytime you plan to custom modify either the
        filesystem or the database.</para>

        <para>There are three main components of
        <application>Koha</application> that must be considered when backing
        up and restoring: the database, the <application>Koha</application>
        filesystem, and the operating system customizations for the system.
        This document describes every step necessary for backing up and
        restoring both the database and the filesystem and points out some
        important considerations when backing up the operating system
        customizations -- these customizations often vary widely from system
        to system.</para>
      </section>

      <section>
        <title>Backing up and Restoring the Koha Database</title>

        <section>
          <title>Backups</title>

          <para>There are many ways to backup <application>MySQL</application>
          databases, or parts of databases. After reading this section I
          highly recommend reading the <application>MySQL</application> manual
          sections that discuss backing up and restoring data. You can find
          them online at <ulink
          url="http://dev.mysql.com/doc/mysql/en/index.html">http://dev.mysql.com/doc/mysql/en/index.html</ulink>.</para>

          <para>Perhaps the best way to backup your <database>Koha</database>
          database manually is the <command>mysqldump</command> application.
          To backup the whole database you can invoke it thusly:
          <literallayout>[root@frodo]# mysqldump --add-drop-table -uroot -p<emphasis>your password</emphasis> Koha &gt; 2004_11_30_koha.sql</literallayout></para>

          <para>Notice that this naming convention uses the date, which makes
          it easy to organize a number of backups in a directory without being
          confused about which backup corresponds to which date. It's also
          clear that it's an SQL backup. Choose your naming conventions wisely
          and you'll thank yourself when you run into trouble.</para>

          <para>Also notice the <option>--add-drop-table</option> option. This
          specifies that when you restore the data you will not append the
          data to existing data; additionally, if tables in your backup do not
          exist in the database they will be created.</para>

          <para>If you plan to work on a specific table and you'd like to back
          up just that table you can use <command>mysqldump</command> to do
          that as well. Suppose you're working on the
          <filename>issues</filename> table. You can back it up
          thusly:<literallayout>[root@frodo]# mysqldump --add-drop-table -uroot -p<emphasis>your password</emphasis> Koha.issues &gt; 2004_11_30_koha.issues.sql</literallayout></para>

          <para>For more information on backups using the
          <command>mysqldump</command> utility please see the
          <application>MySQL</application> manual section <ulink
          url="http://dev.mysql.com/doc/mysql/en/mysqldump.html">8.8: The
          mysqldump Database Backup Program</ulink>. For more ways to backup
          your database, the <application>MySQL</application> manual is your
          best reference.</para>

          <para>Now you can use the <command>gzip</command> program to
          compress the sql file and reduce it's overall size for easier
          transport: <literallayout>[root@frodo]# gzip 2004_11_30_koha.sql</literallayout></para>
        </section>

        <section>
          <title>Restoration</title>

          <para>To unzip your file (in case you need to restore your database)
          you simply type:<literallayout>[root@frodo]# gzip -d filename.tgz</literallayout></para>

          <para>An sql file can be used to restore data using the
          <application>MySQL</application> command-line tool. Here's an
          example of how to restore the <database>Koha</database> database
          using an sql file called
          <filename>koha.sql</filename>:<literallayout>[root@frodo]# mysql -uroot -p<emphasis>your password</emphasis> Koha &lt; koha.sql</literallayout></para>

          <para>To restore a single table such as <filename>issues</filename>
          from a file called <filename>koha.issues.sql</filename> you would
          type:<literallayout>[root@frodo]# mysql -uroot -p<emphasis>your password</emphasis> Koha.issues &lt; koha.issues.sql</literallayout></para>
        </section>

        <section>
          <title>Role of Replication as Backup</title>

          <para>In addition to being useful in load balancing, replication can
          serve as a realtime backup for your <application>Koha</application>
          system. You will need to manually promote a slave to serve as
          master, and you will likely need to adjust your local configurations
          depending on how you have your systems setup, but having replication
          in place will probably ensure the fastest route to recovery from a
          complete system crash. See the replication section of the
          <application>MySQL</application> manual for more details.</para>
        </section>
      </section>

      <section>
        <title>Backing up the Koha Filesystem</title>

        <para>Even if you don't plan to use the latest CVS updates for your
        installation, it might be worth your time to centralize your
        <application>Koha</application> installation filesystem to ease the
        backup and restore process. For more info on how to achieve that see
        the <citetitle>Updating Koha</citetitle> section of the
        <application>Koha</application> documentation.</para>

        <para>To backup the <application>Koha</application> installation
        directory tree you need to ensure that all your
        <application>Koha</application> files are being considered. Most of
        them are located by default in <filename>/usr/local/koha</filename>.
        The <filename>koha-httpd.conf</filename> and the
        <filename>koha.conf</filename> files are located in the
        <filename>/etc/</filename> directory.</para>

        <section>
          <title>Automating the Filesystem Backup</title>

          <para>Here's a short Perl script that I run with
          <command>cron</command> every evening. It backs up the filesystem
          using <command>tar</command> and <command>gzip</command>. You'll
          need to change some of the Configurable Variables for the script to
          work in your environment. Other than that, it's pretty much ready to
          go -- setup <command>cron</command> to run it
          nightly.<programlisting>#!/usr/bin/perl -w
#This script assumes that you have set up a CVS repository
#that is symlinked to your installation directories.  For
#info on setting that up see the Koha manual "Updating Koha"
#Configurable Variables
my $koha_base = "/build/websites/openils.com/koha"; #location of Koha cvs repo
my $bak_loc = "/build/backups"; #where to put backups
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
                                           = localtime(time);
$year += "1900";
my $date = "$year-$mon-$mday";
#Backup the filesystem
print "Backing up the filesystem\n";
print "Please wait ...";
`rm -rf $koha_base.bak`;        #remove the previous backup
`cp $koha_base $koha_base.bak`; #make a new backup
`tar -cvzf $bak_loc/$date-kohafilesystem.tgz $koha_base.bak`; #targzip it</programlisting></para>
        </section>
      </section>

      <section>
        <title>Backing up the Local Operating System Configuration</title>

        <para>It's best to write a script to perform all the local operating
        system configurations as you would manually perform them to ensure
        that in the event of an emergency, you can simply run the script to
        set everything the way you had it before.</para>

        <para>The list of possible custom configuration files for your system
        is unlimited, so I can just list a few common examples that you might
        want to consider including as part of your regular backup
        scheme:</para>

        <itemizedlist>
          <listitem>
            <para><filename>httpd.conf</filename></para>
          </listitem>

          <listitem>
            <para><filename>my.cnf</filename></para>
          </listitem>

          <listitem>
            <para>any custom <command>cron</command> jobs related to
            <application>Koha</application></para>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Storing your Backup Offsite Using scp</title>

        <para>You may want to keep a copy of your database, filesystem and
        operating system customizations on your production server to ease the
        process of restoring should the need arise. However, what if your hard
        drive on that machine crashes? It's a very good idea to store your
        backups on a different machine (or two or three) and it's probably a
        good ideal to store them in a different building too.</para>

        <para>Perhaps the best way to avoid the problems inherent in physical
        backup medium such as a tape (that you may never really be sure is
        going to work anyway) is to use <command>ssh</command> and in
        particular <command>scp</command> as a part of your backup process.
        Why mess with tapes when you can securely copy a file from one system
        to another? You can invoke <command>scp</command>
        thusly:<literallayout>[root@frodo]# scp koha.bak jmf@sam.openils.com:/build/backups/</literallayout></para>

        <para>The <userinput>:</userinput> signifies that this is a network
        address and also allows a specific directory to be specified on the
        receiving machine -- in this case,
        <systemitem>sam.openils.com</systemitem> has a
        <filename>/build/backups</filename> directory where I store
        backups.</para>
      </section>
    </section>

    <section>
      <title>Troubleshooting -- to be completed</title>

      <para></para>
    </section>

    <section>
      <title>Getting Help</title>

      <para>Obviously the best place to look for help is the Koha
      documentation, most of which is stored on <ulink
      url="http://www.kohadocs.org">kohadocs.org</ulink>. There is also a lot
      of good information on the Koha wiki, at <ulink
      url="http://koha.org/wiki">koha.org/wiki</ulink>.</para>

      <para>If you don't find anything helpful in these locations, then you
      should turn to the Koha mailing lists: access <ulink
      url="http://www.koha.org/community/mailing-lists.html">http://www.koha.org/community/mailing-lists.html</ulink>
      to see what is available. The best of these lists for most
      problem-solving is the general Koha list, which you can join by filling
      out the form on the mailing-lists page. If you turn to the lists for
      help, always remember to include some basic information:</para>

      <itemizedlist>
        <listitem>
          <para>which version of Koha</para>
        </listitem>

        <listitem>
          <para>what operating system</para>
        </listitem>

        <listitem>
          <para>information about relevant parameters settings -- for example,
          if you are having a cataloging problem, is marc "on" or "off"</para>
        </listitem>

        <listitem>
          <para>any portion of your error logs (usually in
          <filename>/usr/local/koha/log</filename>) that seems relevant</para>
        </listitem>
      </itemizedlist>

      <para>Remember that Koha is an open community. You should always share
      your problems and solutions with everyone on the mailing list, no matter
      how trivial (or embarrassing) you may think the problem to be.</para>

      <para>If you are completely lost, or want to make some changes to Koha
      that are beyond your ability, remember that there are some companies
      that offer Koha service. A list of such companies is kept at <ulink
      url="http://www.koha.org/support/pay.html">http://www.koha.org/support/pay.html</ulink>.</para>
    </section>
  </chapter>

  <appendix>
    <title>Koha Database Structure</title>

    <para>Koha currently stores all data in a MySQL database called "Koha."
    The Koha code expects the MySQL password hashing used in versions of MySQL
    before 4.1; if you are using MySQL 4.1, you should run your mysql daemon
    with the "--old-passwords" option. (Note that you may not need to do this
    if you are using Apache 2.0 or later.) MySQL 5.0 and later will not
    currently work with Koha because of a conflict between MySQL reserved
    words and Koha column names.</para>

    <para>If the use of a table or column is not apparent from its name, and
    you have a basic knowledge of Perl, you can use
    <application>grep</application> to search for the name in the Koha code.
    For example, if you want to know how the table
    <filename>sessions</filename> is used, try:</para>

    <programlisting>[koha@localhost ~]$ grep -R 'sessions' /usr/local/koha/intranet/
/usr/local/koha/intranet/modules/C4/Auth.pm:                            "SELECT userid,ip,lasttime FROM sessions WHERE sessionid=?",
/usr/local/koha/intranet/modules/C4/Auth.pm:            $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth.pm:                            $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth.pm:                            $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth.pm:                            $dbh-&gt;do("UPDATE sessions SET lasttime=? WHERE sessionID=?",
/usr/local/koha/intranet/modules/C4/Auth.pm:                    $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=? AND userid=?",
/usr/local/koha/intranet/modules/C4/Auth.pm:                    $dbh-&gt;do("INSERT INTO sessions (sessionID, userid, ip,lasttime) VALUES (?, ?, ?, ?)",
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:                          "SELECT userid,ip,lasttime FROM sessions WHERE sessionid=?",
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:          $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:                  $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:                  $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=?", undef, $sessionID);
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:                  $dbh-&gt;do("UPDATE sessions SET lasttime=? WHERE sessionID=?",
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:          $dbh-&gt;do("DELETE FROM sessions WHERE sessionID=? AND userid=?",
/usr/local/koha/intranet/modules/C4/Auth_with_ldap.pm:          $dbh-&gt;do("INSERT INTO sessions (sessionID, userid, ip,lasttime) VALUES (?, ?, ?, ?)",
/usr/local/koha/intranet/scripts/updater/updatedatabase:    sessions =&gt; "( sessionID varchar(255) NOT NULL default '',
/usr/local/koha/intranet/cgi-bin/logout.pl:my $sessions;
/usr/local/koha/intranet/cgi-bin/logout.pl:open (S, "/tmp/sessions");
/usr/local/koha/intranet/cgi-bin/logout.pl:    $sessions-&gt;{$sid}-&gt;{'userid'}=$u;
/usr/local/koha/intranet/cgi-bin/logout.pl:    $sessions-&gt;{$sid}-&gt;{'lasttime'}=$lasttime;
/usr/local/koha/intranet/cgi-bin/logout.pl:open (S, "&gt;/tmp/sessions");
/usr/local/koha/intranet/cgi-bin/logout.pl:foreach (keys %$sessions) {
/usr/local/koha/intranet/cgi-bin/logout.pl:    my $userid=$sessions-&gt;{$_}-&gt;{'userid'};
/usr/local/koha/intranet/cgi-bin/logout.pl:    my $lasttime=$sessions-&gt;{$_}-&gt;{'lasttime'};
/usr/local/koha/intranet/cgi-bin/logout.pl:my $sth=$dbh-&gt;prepare("select userid,ip from sessions where sessionID=?");
/usr/local/koha/intranet/cgi-bin/logout.pl:$sth=$dbh-&gt;prepare("delete from sessions where sessionID=?");</programlisting>

    <para>If you want to reduce the amount of information returned, you can
    limit <application>grep</application> to looking in
    <filename>/usr/local/koha/intranet/modules/C4</filename>: the most useful
    information is likely to be found in these Koha modules. Most of the
    modules also have documentation that can be accessed using
    <application>perldoc</application>:</para>

    <programlisting>[koha@localhost ~]$ perldoc /usr/local/koha/intranet/modules/C4/Auth.pm

NAME
       C4::Auth - Authenticates Koha users

SYNOPSIS
         use CGI;
         use C4::Auth;

         my $query = new CGI;

         my ($template, $borrowernumber, $cookie)
           = get_template_and_user({template_name   =&gt; "opac-main.tmpl",
                                    query           =&gt; $query,
                                    type            =&gt; "opac",
                                    authnotrequired =&gt; 1,
                                    flagsrequired   =&gt; {borrow =&gt; 1},
                                 });

         print $query-&gt;header(
           -type =&gt; guesstype($template-&gt;output),
           -cookie =&gt; $cookie
         ), $template-&gt;output;

DESCRIPTION
           The main function of this module is to provide
           authentification.

[snip]

       checkauth
           ($userid, $cookie, $sessionID) = &amp;checkauth($query, $noauth, $flagsrequired, $type);

         Verifies that the user is authorized to run this script.  If the user is authorized, a (userid, cookie, session-id, flags) quadruple
         is returned.  If the user is not authorized but does not have the required privilege (see $flagsrequired below), it displays an
         error page and exits.  Otherwise, it displays the login page and exits.</programlisting>

    <para>You should now have a pretty good idea of how the
    <filename>sessions</filename> table is used by Koha.</para>

    <para>Here is the database structure of Koha 2.2.4:</para>

    <programlisting>SHOW TABLES;
+-------------------------+
| Tables_in_Koha          |
+-------------------------+
| accountlines            |
| accountoffsets          |
| additionalauthors       |
| aqbasket                |
| aqbookfund              |
| aqbooksellers           |
| aqbudget                |
| aqorderbreakdown        |
| aqorderdelivery         |
| aqorders                |
| auth_header             |
| auth_subfield_structure |
| auth_subfield_table     |
| auth_tag_structure      |
| auth_types              |
| auth_word               |
| authorised_values       |
| biblio                  |
| biblio_framework        |
| biblioanalysis          |
| biblioitems             |
| bibliosubject           |
| bibliosubtitle          |
| bibliothesaurus         |
| bookshelf               |
| borexp                  |
| borrowers               |
| branchcategories        |
| branches                |
| branchrelations         |
| branchtransfers         |
| catalogueentry          |
| categories              |
| currency                |
| deletedbiblio           |
| deletedbiblioitems      |
| deletedborrowers        |
| deleteditems            |
| ethnicity               |
| issues                  |
| issuingrules            |
| items                   |
| itemsprices             |
| itemtypes               |
| marc_biblio             |
| marc_blob_subfield      |
| marc_breeding           |
| marc_subfield_structure |
| marc_subfield_table     |
| marc_tag_structure      |
| marc_word               |
| marcrecorddone          |
| printers                |
| reserveconstraints      |
| reserves                |
| serial                  |
| sessionqueries          |
| sessions                |
| shelfcontents           |
| statistics              |
| stopwords               |
| subscription            |
| subscriptionhistory     |
| suggestions             |
| systempreferences       |
| uploadedmarc            |
| userflags               |
| users                   |
| websites                |
| z3950queue              |
| z3950results            |
| z3950servers            |
+-------------------------+
72 rows in set</programlisting>

    <para>These tables can be divided into four groups:</para>

    <orderedlist>
      <listitem>
        <para>tables holding descriptive data;</para>
      </listitem>

      <listitem>
        <para>tables holding borrower data;</para>
      </listitem>

      <listitem>
        <para>tables holding bibliographic data; and</para>
      </listitem>

      <listitem>
        <para>tables holding transaction data</para>
      </listitem>
    </orderedlist>

    <section>
      <title>Tables holding descriptive data</title>

      <para>These tables hold data that describe the library and set the
      library's operating parameters.</para>

      <para>Three tables contain data about the library's
      branches:<programlisting> DESCRIBE branches;
+----------------+------------+------+-----+---------+-------+
| Field          | Type       | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| branchcode     | varchar(4) |      | PRI |         |       |
| branchname     | text       |      |     |         |       |
| branchaddress1 | text       | YES  |     | NULL    |       |
| branchaddress2 | text       | YES  |     | NULL    |       |
| branchaddress3 | text       | YES  |     | NULL    |       |
| branchphone    | text       | YES  |     | NULL    |       |
| branchfax      | text       | YES  |     | NULL    |       |
| branchemail    | text       | YES  |     | NULL    |       |
| issuing        | tinyint(4) | YES  |     | NULL    |       |
+----------------+------------+------+-----+---------+-------+
9 rows in set</programlisting><programlisting>DESCRIBE branchcategories;
+-----------------+------------+------+-----+---------+-------+
| Field           | Type       | Null | Key | Default | Extra |
+-----------------+------------+------+-----+---------+-------+
| categorycode    | varchar(4) |      | PRI |         |       |
| categoryname    | text       | YES  |     | NULL    |       |
| codedescription | text       | YES  |     | NULL    |       |
+-----------------+------------+------+-----+---------+-------+
3 rows in set</programlisting><programlisting>DESCRIBE branchrelations;
+--------------+------------+------+-----+---------+-------+
| Field        | Type       | Null | Key | Default | Extra |
+--------------+------------+------+-----+---------+-------+
| branchcode   | varchar(4) | YES  |     | NULL    |       |
| categorycode | varchar(4) | YES  |     | NULL    |       |
+--------------+------------+------+-----+---------+-------+
2 rows in set</programlisting></para>

      <para>The <filename>branches</filename> table holds descriptive data
      about individual branches, while the
      <filename>branchcategories</filename> table contains basic information
      about the types of branches the library has. The
      <filename>branchrelations</filename> table relates the other two tables,
      effectively assigning each branch to a category.</para>

      <para>Seven other tables contain data used for cataloging library
      materials:<programlisting>DESCRIBE itemtypes;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| itemtype        | varchar(4)   |      | PRI |         |       |
| description     | text         | YES  |     | NULL    |       |
| renewalsallowed | smallint(6)  | YES  |     | NULL    |       |
| rentalcharge    | double(16,4) | YES  |     | NULL    |       |
| notforloan      | smallint(6)  | YES  |     | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+
5 rows in set</programlisting><programlisting>DESCRIBE marc_tag_structure;
+------------------+------------+------+-----+---------+-------+
| Field            | Type       | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| tagfield         | char(3)    |      | PRI |         |       |
| liblibrarian     | char(255)  |      |     |         |       |
| libopac          | char(255)  |      |     |         |       |
| repeatable       | tinyint(4) |      |     | 0       |       |
| mandatory        | tinyint(4) |      |     | 0       |       |
| authorised_value | char(10)   | YES  |     | NULL    |       |
| frameworkcode    | char(4)    |      | PRI |         |       |
+------------------+------------+------+-----+---------+-------+
7 rows in set</programlisting><programlisting>DESCRIBE marc_subfield_structure;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| tagfield         | char(3)      |      | PRI |         |       |
| tagsubfield      | char(1)      |      | PRI |         |       |
| liblibrarian     | varchar(255) |      |     |         |       |
| libopac          | varchar(255) |      |     |         |       |
| repeatable       | tinyint(4)   |      |     | 0       |       |
| mandatory        | tinyint(4)   |      |     | 0       |       |
| kohafield        | varchar(40)  | YES  | MUL | NULL    |       |
| tab              | tinyint(1)   | YES  |     | NULL    |       |
| authorised_value | varchar(10)  | YES  |     | NULL    |       |
| authtypecode     | varchar(10)  | YES  |     | NULL    |       |
| value_builder    | varchar(80)  | YES  |     | NULL    |       |
| isurl            | tinyint(1)   | YES  |     | NULL    |       |
| hidden           | tinyint(1)   | YES  |     | NULL    |       |
| frameworkcode    | varchar(4)   |      | PRI |         |       |
| seealso          | varchar(255) | YES  |     | NULL    |       |
| link             | varchar(80)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
16 rows in set</programlisting><programlisting>DESCRIBE biblio_framework;
+---------------+-----------+------+-----+---------+-------+
| Field         | Type      | Null | Key | Default | Extra |
+---------------+-----------+------+-----+---------+-------+
| frameworkcode | char(4)   |      | PRI |         |       |
| frameworktext | char(255) |      |     |         |       |
+---------------+-----------+------+-----+---------+-------+
2 rows in set</programlisting><programlisting>DESCRIBE authorised_values;
+------------------+----------+------+-----+---------+----------------+
| Field            | Type     | Null | Key | Default | Extra          |
+------------------+----------+------+-----+---------+----------------+
| id               | int(11)  |      | PRI | NULL    | auto_increment |
| category         | char(10) |      | MUL |         |                |
| authorised_value | char(80) |      |     |         |                |
| lib              | char(80) | YES  |     | NULL    |                |
+------------------+----------+------+-----+---------+----------------+
4 rows in set</programlisting><programlisting>DESCRIBE auth_types;
+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| authtypecode       | varchar(10)  |      | PRI |         |       |
| authtypetext       | varchar(255) |      |     |         |       |
| auth_tag_to_report | char(3)      |      |     |         |       |
| summary            | text         |      |     |         |       |
+--------------------+--------------+------+-----+---------+-------+
4 rows in set</programlisting><programlisting>DESCRIBE auth_tag_structure;
+------------------+------------+------+-----+---------+-------+
| Field            | Type       | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| authtypecode     | char(10)   |      | PRI |         |       |
| tagfield         | char(3)    |      | PRI |         |       |
| liblibrarian     | char(255)  |      |     |         |       |
| libopac          | char(255)  |      |     |         |       |
| repeatable       | tinyint(4) |      |     | 0       |       |
| mandatory        | tinyint(4) |      |     | 0       |       |
| authorised_value | char(10)   | YES  |     | NULL    |       |
+------------------+------------+------+-----+---------+-------+
7 rows in set</programlisting><programlisting>DESCRIBE auth_subfield_structure;
+------------------+------------+------+-----+---------+-------+
| Field            | Type       | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| authtypecode     | char(10)   |      | PRI |         |       |
| tagfield         | char(3)    |      | PRI |         |       |
| tagsubfield      | char(1)    |      | PRI |         |       |
| liblibrarian     | char(255)  |      |     |         |       |
| libopac          | char(255)  |      |     |         |       |
| repeatable       | tinyint(4) |      |     | 0       |       |
| mandatory        | tinyint(4) |      |     | 0       |       |
| tab              | tinyint(1) | YES  |     | NULL    |       |
| authorised_value | char(10)   | YES  |     | NULL    |       |
| value_builder    | char(80)   | YES  |     | NULL    |       |
| seealso          | char(255)  | YES  |     | NULL    |       |
+------------------+------------+------+-----+---------+-------+
11 rows in set</programlisting></para>

      <para>The <filename>itemtypes</filename> table holds information about
      the categories of library materials. As you can see, some very important
      information controlling circulation of each type of item is contained in
      this table.</para>

      <para>The <filename>marc_tag_structure</filename> and
      <filename>marc_subfield_structure</filename> tables control how Koha
      displays MARC tags and subfields to the catalogers, and also store the
      links between MARC subfields and some of the tables containing
      bibliographic data. The data in these tables is extended or modified
      whenever the Koha user edits the "Biblio Frameworks." The names of the
      Biblio Frameworks themselves are stored in the
      <filename>biblio_framework</filename> table.</para>

      <para>The remaining four tables hold data controlling the display and
      use of pull-down menus of authorized values for cataloging, and of
      authority records. Most of this data is modified whenever the Koha user
      edits the "Thesaurus Structure."</para>

      <para>Four more tables primarily hold data used in the course of
      purchasing library materials:</para>

      <programlisting>DESCRIBE currency;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| currency | varchar(10) | YES  |     | NULL    |       |
| rate     | float(7,5)  | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set</programlisting>

      <programlisting>DESCRIBE aqbookfund;
+---------------+------------+------+-----+---------+-------+
| Field         | Type       | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| bookfundid    | varchar(5) |      | PRI | ''      |       |
| bookfundname  | text       | YES  |     | NULL    |       |
| bookfundgroup | varchar(5) | YES  |     | NULL    |       |
| branchcode    | varchar(4) | YES  |     | NULL    |       |
+---------------+------------+------+-----+---------+-------+
4 rows in set</programlisting>

      <programlisting>DESCRIBE aqbudget;
+--------------+---------------+------+-----+------------+----------------+
| Field        | Type          | Null | Key | Default    | Extra          |
+--------------+---------------+------+-----+------------+----------------+
| bookfundid   | varchar(5)    |      |     |            |                |
| startdate    | date          |      |     | 0000-00-00 |                |
| enddate      | date          | YES  |     | NULL       |                |
| budgetamount | decimal(13,2) | YES  |     | NULL       |                |
| aqbudgetid   | tinyint(4)    |      | PRI | NULL       | auto_increment |
| branchcode   | varchar(4)    | YES  |     | NULL       |                |
+--------------+---------------+------+-----+------------+----------------+
6 rows in set</programlisting>

      <programlisting>DESCRIBE aqbooksellers;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| id              | int(11)      | YES  |     | NULL    |       |
| name            | text         | YES  |     | NULL    |       |
| address1        | text         | YES  |     | NULL    |       |
| address2        | text         | YES  |     | NULL    |       |
| address3        | text         | YES  |     | NULL    |       |
| address4        | text         | YES  |     | NULL    |       |
| phone           | varchar(30)  | YES  |     | NULL    |       |
| accountnumber   | text         | YES  |     | NULL    |       |
| othersupplier   | text         | YES  |     | NULL    |       |
| currency        | char(3)      |      |     |         |       |
| deliverydays    | smallint(6)  | YES  |     | NULL    |       |
| followupdays    | smallint(6)  | YES  |     | NULL    |       |
| followupscancel | smallint(6)  | YES  |     | NULL    |       |
| specialty       | text         | YES  |     | NULL    |       |
| booksellerfax   | text         | YES  |     | NULL    |       |
| notes           | text         | YES  |     | NULL    |       |
| bookselleremail | text         | YES  |     | NULL    |       |
| booksellerurl   | text         | YES  |     | NULL    |       |
| contact         | varchar(100) | YES  |     | NULL    |       |
| postal          | text         | YES  |     | NULL    |       |
| url             | varchar(255) | YES  |     | NULL    |       |
| contpos         | varchar(100) | YES  |     | NULL    |       |
| contphone       | varchar(100) | YES  |     | NULL    |       |
| contfax         | varchar(100) | YES  |     | NULL    |       |
| contaltphone    | varchar(100) | YES  |     | NULL    |       |
| contemail       | varchar(100) | YES  |     | NULL    |       |
| contnotes       | text         | YES  |     | NULL    |       |
| active          | tinyint(4)   | YES  |     | NULL    |       |
| listprice       | varchar(5)   | YES  |     | NULL    |       |
| invoiceprice    | varchar(5)   | YES  |     | NULL    |       |
| gstreg          | tinyint(4)   | YES  |     | NULL    |       |
| listincgst      | tinyint(4)   | YES  |     | NULL    |       |
| invoiceincgst   | tinyint(4)   | YES  |     | NULL    |       |
| discount        | float(6,4)   | YES  |     | NULL    |       |
| fax             | varchar(50)  | YES  |     | NULL    |       |
| nocalc          | int(11)      | YES  |     | NULL    |       |
| invoicedisc     | float(6,4)   | YES  |     | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+
37 rows in set</programlisting>

      <para>The <filename>currency </filename>table keeps track of the
      exchange rates between the various currencies which the library might
      encounter when purchasing materials. The <filename>aqbookfund</filename>
      and <filename>aqbudget</filename> tables hold Acquisitions accounting
      data, establishing various general funds for purchasing materials, as
      well as more specific budgets related to a certain time period or
      library branch. The <filename>aqbooksellers</filename> table holds
      information about the vendors the library buys from.</para>

      <para>Various other tables holding descriptive data function
      independently of other tables:</para>

      <programlisting>DESCRIBE systempreferences;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| variable    | varchar(50) |      | PRI |         |       |
| value       | text        | YES  |     | NULL    |       |
| options     | text        | YES  |     | NULL    |       |
| explanation | varchar(80) | YES  |     | NULL    |       |
| type        | varchar(20) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
5 rows in set</programlisting>

      <para>The <filename>systempreferences</filename> table holds the system
      preferences that are defined through the Koha Parameters page. Many Koha
      scripts begin by checking this table to check for preferred
      behaviors.</para>

      <programlisting>DESCRIBE issuingrules;
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| categorycode   | char(2)       |      | PRI |         |       |
| itemtype       | varchar(4)    |      | PRI |         |       |
| restrictedtype | tinyint(1)    | YES  |     | NULL    |       |
| rentaldiscount | decimal(28,6) | YES  |     | NULL    |       |
| reservecharge  | decimal(28,6) | YES  |     | NULL    |       |
| fine           | decimal(28,6) | YES  |     | NULL    |       |
| firstremind    | int(11)       | YES  |     | NULL    |       |
| chargeperiod   | int(11)       | YES  |     | NULL    |       |
| accountsent    | int(11)       | YES  |     | NULL    |       |
| chargename     | varchar(100)  | YES  |     | NULL    |       |
| maxissueqty    | int(4)        | YES  |     | NULL    |       |
| issuelength    | int(4)        | YES  |     | NULL    |       |
| branchcode     | varchar(4)    |      | PRI |         |       |
+----------------+---------------+------+-----+---------+-------+
13 rows in set</programlisting>

      <para>The <filename>issuingrules</filename> table controls loan lengths,
      fine accruals, and other aspects of circulating library materials,
      cross-referencing by item type, borrower category, and library branch.
      The data is this table is modified through the "Issuing Rules" link from
      the Parameters page.</para>

      <programlisting>DESCRIBE stopwords;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| word  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set</programlisting>

      <para>The <filename>stopwords</filename> table is very simple, yet very
      important. This table contains the words which Koha will ignore when
      searching the catalogue for terms entered by a user. At least one stop
      word must be defined (through the "Stopwords" link on the Parameters
      page) before Koha will function properly.</para>

      <programlisting>DESCRIBE users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| usercode | varchar(10) | YES  |     | NULL    |       |
| username | text        | YES  |     | NULL    |       |
| password | text        | YES  |     | NULL    |       |
| level    | smallint(6) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set</programlisting>

      <para>The <filename>users</filename> table is actually an artifact from
      earlier versions of Koha; it does not seem to be used at all in version
      2.2.4.</para>

      <programlisting>DESCRIBE printers;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| printername | char(40) |      | PRI | ''      |       |
| printqueue  | char(20) | YES  |     | NULL    |       |
| printtype   | char(20) | YES  |     | NULL    |       |
+-------------+----------+------+-----+---------+-------+
3 rows in set</programlisting>

      <para>The <filename>printers</filename> table holds descriptive
      information about your system printers. Note that Koha does nothing with
      printers attached to client machines -- they are handled by the web
      browser on the client computer.</para>

      <programlisting>DESCRIBE z3950servers;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| host     | varchar(255) | YES  |     | NULL    |                |
| port     | int(11)      | YES  |     | NULL    |                |
| db       | varchar(255) | YES  |     | NULL    |                |
| userid   | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
| name     | text         | YES  |     | NULL    |                |
| id       | int(11)      |      | PRI | NULL    | auto_increment |
| checked  | smallint(6)  | YES  |     | NULL    |                |
| rank     | int(11)      | YES  |     | NULL    |                |
| syntax   | varchar(80)  | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
10 rows in set</programlisting>

      <para>The <filename>z3950servers</filename> holds the descriptions and
      login information for the Z3950 servers you wish to access when creating
      MARC catalogue records.</para>

      <para>Three final descriptive tables will lead us into the borrower
      data:</para>

      <programlisting>DESCRIBE categories;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| categorycode          | char(2)       |      | PRI |         |       |
| description           | text          | YES  |     | NULL    |       |
| enrolmentperiod       | smallint(6)   | YES  |     | NULL    |       |
| upperagelimit         | smallint(6)   | YES  |     | NULL    |       |
| dateofbirthrequired   | tinyint(1)    | YES  |     | NULL    |       |
| finetype              | varchar(30)   | YES  |     | NULL    |       |
| bulk                  | tinyint(1)    | YES  |     | NULL    |       |
| enrolmentfee          | decimal(28,6) | YES  |     | NULL    |       |
| overduenoticerequired | tinyint(1)    | YES  |     | NULL    |       |
| issuelimit            | smallint(6)   | YES  |     | NULL    |       |
| reservefee            | decimal(28,6) | YES  |     | NULL    |       |
+-----------------------+---------------+------+-----+---------+-------+
11 rows in set</programlisting>

      <programlisting>DESCRIBE ethnicity;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| code  | varchar(10)  |      | PRI |         |       |
| name  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set</programlisting>

      <programlisting>DESCRIBE userflags;
+-----------+-----------+------+-----+---------+-------+
| Field     | Type      | Null | Key | Default | Extra |
+-----------+-----------+------+-----+---------+-------+
| bit       | int(11)   |      |     | 0       |       |
| flag      | char(30)  | YES  |     | NULL    |       |
| flagdesc  | char(255) | YES  |     | NULL    |       |
| defaulton | int(11)   | YES  |     | NULL    |       |
+-----------+-----------+------+-----+---------+-------+
4 rows in set</programlisting>

      <para>The <filename>categories</filename> table holds the data
      describing the characteristics of the library's categories of
      borrowers.</para>

      <para>The <filename>ethnicity</filename> table holds the names of the
      ethnic groups to which the library's borrowers belong (if the library is
      required to keep such data). Note that Koha 2.2.4 does not provide an
      interface for loading the <filename>ethnicity</filename> table or saving
      ethnicity data about borrowers, but the code still contains the
      capability of saving such data if the HTML templates are altered to
      allow its entry.</para>

      <para>The <filename>usersflags</filename> table hold the meanings of the
      borrowers' permission flags. In other words, if the "borrower" is
      actually a librarian using the Intranet, Koha checks the user "flags"
      set for that person and consults this table to control what tasks the
      person may perform on the system. The data in this table is generally
      controlled by the Koha developers and should not be changed by the
      user.</para>
    </section>

    <section>
      <title>Tables holding borrower data</title>

      <para>These tables hold the data that describe the library's individual
      borrowers.</para>

      <para>The primary table for holding borrower data is the
      <filename>borrowers</filename> table:</para>

      <programlisting>DESCRIBE borrowers;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| borrowernumber   | int(11)      |      | MUL | NULL    | auto_increment |
| cardnumber       | varchar(16)  |      | PRI |         |                |
| surname          | text         |      |     |         |                |
| firstname        | text         |      |     |         |                |
| title            | text         | YES  |     | NULL    |                |
| othernames       | text         | YES  |     | NULL    |                |
| initials         | text         |      |     |         |                |
| streetaddress    | text         |      |     |         |                |
| suburb           | text         | YES  |     | NULL    |                |
| city             | text         |      |     |         |                |
| phone            | text         |      |     |         |                |
| emailaddress     | text         | YES  |     | NULL    |                |
| faxnumber        | text         | YES  |     | NULL    |                |
| textmessaging    | text         | YES  |     | NULL    |                |
| altstreetaddress | text         | YES  |     | NULL    |                |
| altsuburb        | text         | YES  |     | NULL    |                |
| altcity          | text         | YES  |     | NULL    |                |
| altphone         | text         | YES  |     | NULL    |                |
| dateofbirth      | date         | YES  |     | NULL    |                |
| branchcode       | varchar(4)   |      |     |         |                |
| categorycode     | char(2)      | YES  |     | NULL    |                |
| dateenrolled     | date         | YES  |     | NULL    |                |
| gonenoaddress    | tinyint(1)   | YES  |     | NULL    |                |
| lost             | tinyint(1)   | YES  |     | NULL    |                |
| debarred         | tinyint(1)   | YES  |     | NULL    |                |
| studentnumber    | text         | YES  |     | NULL    |                |
| school           | text         | YES  |     | NULL    |                |
| contactname      | text         | YES  |     | NULL    |                |
| borrowernotes    | text         | YES  |     | NULL    |                |
| guarantor        | int(11)      | YES  |     | NULL    |                |
| area             | char(2)      | YES  |     | NULL    |                |
| ethnicity        | varchar(50)  | YES  |     | NULL    |                |
| ethnotes         | varchar(255) | YES  |     | NULL    |                |
| sex              | char(1)      | YES  |     | NULL    |                |
| expiry           | date         | YES  |     | NULL    |                |
| altnotes         | varchar(255) | YES  |     | NULL    |                |
| altrelationship  | varchar(100) | YES  |     | NULL    |                |
| streetcity       | text         | YES  |     | NULL    |                |
| phoneday         | varchar(50)  | YES  |     | NULL    |                |
| preferredcont    | char(1)      | YES  |     | NULL    |                |
| physstreet       | varchar(100) | YES  |     | NULL    |                |
| password         | varchar(30)  | YES  |     | NULL    |                |
| flags            | int(11)      | YES  |     | NULL    |                |
| userid           | varchar(30)  | YES  |     | NULL    |                |
| homezipcode      | varchar(25)  | YES  |     | NULL    |                |
| zipcode          | varchar(25)  | YES  |     | NULL    |                |
| sort1            | varchar(80)  | YES  |     | NULL    |                |
| sort2            | varchar(80)  | YES  |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+
48 rows in set</programlisting>

      <para>While this table can hold a wealth of data about a borrower, the
      most important piece of data here is the
      <varname>borrowernumber</varname>, because it is used to relate other
      borrower and transaction data to this basic data.</para>

      <para>The deletedborrowers table looks very similar:</para>

      <programlisting>DESCRIBE deletedborrowers;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| borrowernumber   | int(11)      |      | MUL | 0       |       |
| cardnumber       | varchar(9)   |      | MUL |         |       |
| surname          | text         |      |     |         |       |
| firstname        | text         |      |     |         |       |
| title            | text         | YES  |     | NULL    |       |
| othernames       | text         | YES  |     | NULL    |       |
| initials         | text         |      |     |         |       |
| streetaddress    | text         |      |     |         |       |
| suburb           | text         | YES  |     | NULL    |       |
| city             | text         |      |     |         |       |
| phone            | text         |      |     |         |       |
| emailaddress     | text         | YES  |     | NULL    |       |
| faxnumber        | text         | YES  |     | NULL    |       |
| altstreetaddress | text         | YES  |     | NULL    |       |
| altsuburb        | text         | YES  |     | NULL    |       |
| altcity          | text         | YES  |     | NULL    |       |
| altphone         | text         | YES  |     | NULL    |       |
| dateofbirth      | date         | YES  |     | NULL    |       |
| branchcode       | varchar(4)   |      |     |         |       |
| categorycode     | char(2)      | YES  |     | NULL    |       |
| dateenrolled     | date         | YES  |     | NULL    |       |
| gonenoaddress    | tinyint(1)   | YES  |     | NULL    |       |
| lost             | tinyint(1)   | YES  |     | NULL    |       |
| debarred         | tinyint(1)   | YES  |     | NULL    |       |
| studentnumber    | text         | YES  |     | NULL    |       |
| school           | text         | YES  |     | NULL    |       |
| contactname      | text         | YES  |     | NULL    |       |
| borrowernotes    | text         | YES  |     | NULL    |       |
| guarantor        | int(11)      | YES  |     | NULL    |       |
| area             | char(2)      | YES  |     | NULL    |       |
| ethnicity        | varchar(50)  | YES  |     | NULL    |       |
| ethnotes         | varchar(255) | YES  |     | NULL    |       |
| sex              | char(1)      | YES  |     | NULL    |       |
| expiry           | date         | YES  |     | NULL    |       |
| altnotes         | varchar(255) | YES  |     | NULL    |       |
| altrelationship  | varchar(100) | YES  |     | NULL    |       |
| streetcity       | text         | YES  |     | NULL    |       |
| phoneday         | varchar(50)  | YES  |     | NULL    |       |
| preferredcont    | varchar(100) | YES  |     | NULL    |       |
| physstreet       | varchar(100) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
40 rows in set</programlisting>

      <para>This table holds the data of deleted borrowers, so that their
      information does not simply vanish from the database.</para>

      <para>The contents of two other tables are controlled by the borrower
      when logged in to the OPAC:</para>

      <programlisting>DESCRIBE bookshelf;
+-------------+-----------+------+-----+---------+----------------+
| Field       | Type      | Null | Key | Default | Extra          |
+-------------+-----------+------+-----+---------+----------------+
| shelfnumber | int(11)   |      | PRI | NULL    | auto_increment |
| shelfname   | char(255) | YES  |     | NULL    |                |
| owner       | char(80)  | YES  |     | NULL    |                |
| category    | char(1)   | YES  |     | NULL    |                |
+-------------+-----------+------+-----+---------+----------------+
4 rows in set</programlisting>

      <programlisting>DESCRIBE shelfcontents;
+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| shelfnumber | int(11) |      |     | 0       |       |
| itemnumber  | int(11) |      |     | 0       |       |
| flags       | int(11) | YES  |     | NULL    |       |
+-------------+---------+------+-----+---------+-------+
3 rows in set</programlisting>

      <para>The <filename>bookshelf</filename> table holds general information
      and "virtual bookshelves" created by the borrower. The
      <filename>shelfcontents</filename> table holds detail information about
      each bookshelf.</para>

      <para>One final table, <filename>borexp</filename>, was apparently once
      used for holding information about the expiration date of a borrower's
      registration, but this table is no longer used.</para>
    </section>

    <section>
      <title>Tables holding bibliographic data</title>

      <para>These tables hold the data that describe the library's holdings.
      They divide into two groups: the original Koha bibliographic data
      tables; and the MARC data tables that were added beginning with Koha
      version 2.0.</para>

      <para>Let's look at the original Koha bibliographic data tables
      first:</para>

      <programlisting>DESCRIBE biblio;
+---------------+-------------+------+-----+-------------------+-------+
| Field         | Type        | Null | Key | Default           | Extra |
+---------------+-------------+------+-----+-------------------+-------+
| biblionumber  | int(11)     |      | PRI | 0                 |       |
| author        | text        | YES  |     | NULL              |       |
| title         | text        | YES  |     | NULL              |       |
| unititle      | text        | YES  |     | NULL              |       |
| notes         | text        | YES  |     | NULL              |       |
| serial        | tinyint(1)  | YES  |     | NULL              |       |
| seriestitle   | text        | YES  |     | NULL              |       |
| copyrightdate | smallint(6) | YES  |     | NULL              |       |
| timestamp     | timestamp   | YES  |     | CURRENT_TIMESTAMP |       |
| abstract      | text        | YES  |     | NULL              |       |
+---------------+-------------+------+-----+-------------------+-------+
10 rows in set</programlisting>

      <programlisting>DESCRIBE biblioitems;
+------------------+--------------+------+-----+-------------------+-------+
| Field            | Type         | Null | Key | Default           | Extra |
+------------------+--------------+------+-----+-------------------+-------+
| biblioitemnumber | int(11)      |      | PRI | 0                 |       |
| biblionumber     | int(11)      |      | MUL | 0                 |       |
| volume           | text         | YES  |     | NULL              |       |
| number           | text         | YES  |     | NULL              |       |
| classification   | varchar(25)  | YES  |     | NULL              |       |
| itemtype         | varchar(4)   | YES  |     | NULL              |       |
| isbn             | varchar(14)  | YES  |     | NULL              |       |
| issn             | varchar(9)   | YES  |     | NULL              |       |
| dewey            | varchar(10)  | YES  |     | NULL              |       |
| subclass         | char(3)      | YES  |     | NULL              |       |
| publicationyear  | smallint(6)  | YES  |     | NULL              |       |
| publishercode    | varchar(255) | YES  |     | NULL              |       |
| volumedate       | date         | YES  |     | NULL              |       |
| volumeddesc      | varchar(255) | YES  |     | NULL              |       |
| timestamp        | timestamp    | YES  |     | CURRENT_TIMESTAMP |       |
| illus            | varchar(255) | YES  |     | NULL              |       |
| pages            | varchar(255) | YES  |     | NULL              |       |
| notes            | text         | YES  |     | NULL              |       |
| size             | varchar(255) | YES  |     | NULL              |       |
| place            | varchar(255) | YES  |     | NULL              |       |
| lccn             | varchar(25)  | YES  |     | NULL              |       |
| marc             | text         | YES  |     | NULL              |       |
| url              | varchar(255) | YES  |     | NULL              |       |
+------------------+--------------+------+-----+-------------------+-------+
23 rows in set</programlisting>

      <programlisting>DESCRIBE items;
+----------------------+---------------+------+-----+-------------------+-------+
| Field                | Type          | Null | Key | Default           | Extra |
+----------------------+---------------+------+-----+-------------------+-------+
| itemnumber           | int(11)       |      | PRI | 0                 |   |
| biblionumber         | int(11)       |      | MUL | 0                 |   |
| multivolumepart      | varchar(30)   | YES  |     | NULL              |   |
| biblioitemnumber     | int(11)       |      | MUL | 0                 |   |
| barcode              | varchar(20)   | YES  | MUL | NULL              |   |
| dateaccessioned      | date          | YES  |     | NULL              |   |
| booksellerid         | varchar(10)   | YES  |     | NULL              |   |
| homebranch           | varchar(4)    | YES  |     | NULL              |   |
| price                | decimal(8,2)  | YES  |     | NULL              |   |
| replacementprice     | decimal(8,2)  | YES  |     | NULL              |   |
| replacementpricedate | date          | YES  |     | NULL              |   |
| datelastborrowed     | date          | YES  |     | NULL              |   |
| datelastseen         | date          | YES  |     | NULL              |   |
| multivolume          | tinyint(1)    | YES  |     | NULL              |   |
| stack                | tinyint(1)    | YES  |     | NULL              |   |
| notforloan           | tinyint(1)    | YES  |     | NULL              |   |
| itemlost             | tinyint(1)    | YES  |     | NULL              |   |
| wthdrawn             | tinyint(1)    | YES  |     | NULL              |   |
| itemcallnumber       | varchar(30)   | YES  |     | NULL              |   |
| issues               | smallint(6)   | YES  |     | NULL              |   |
| renewals             | smallint(6)   | YES  |     | NULL              |   |
| reserves             | smallint(6)   | YES  |     | NULL              |   |
| restricted           | tinyint(1)    | YES  |     | NULL              |   |
| binding              | decimal(28,6) | YES  |     | NULL              |   |
| itemnotes            | text          | YES  |     | NULL              |   |
| holdingbranch        | varchar(4)    | YES  |     | NULL              |   |
| paidfor              | text          | YES  |     | NULL              |   |
| timestamp            | timestamp     | YES  |     | CURRENT_TIMESTAMP |   |
| location             | varchar(80)   | YES  |     | NULL              |   |
+----------------------+---------------+------+-----+-------------------+-------+
29 rows in set</programlisting>

      <programlisting>DESCRIBE biblioanalysis;
+------------------+---------+------+-----+---------+-------+
| Field            | Type    | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+-------+
| analyticaltitle  | text    | YES  |     | NULL    |       |
| biblionumber     | int(11) |      |     | 0       |       |
| analyticalauthor | text    | YES  |     | NULL    |       |
+------------------+---------+------+-----+---------+-------+
3 rows in set</programlisting>

      <programlisting>DESCRIBE bibliosubtitle;
+--------------+---------+------+-----+---------+-------+
| Field        | Type    | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| subtitle     | text    |      |     |         |       |
| biblionumber | int(11) |      | MUL | 0       |       |
+--------------+---------+------+-----+---------+-------+
2 rows in set</programlisting>

      <programlisting>DESCRIBE additionalauthors;
+--------------+---------+------+-----+---------+-------+
| Field        | Type    | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| author       | text    |      |     |         |       |
| biblionumber | int(11) |      | MUL | 0       |       |
+--------------+---------+------+-----+---------+-------+
2 rows in set</programlisting>

      <programlisting>DESCRIBE bibliosubject;
+--------------+---------+------+-----+---------+-------+
| Field        | Type    | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| subject      | text    |      |     |         |       |
| biblionumber | int(11) |      |     | 0       |       |
+--------------+---------+------+-----+---------+-------+
2 rows in set</programlisting>

      <programlisting>DESCRIBE itemsprices;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| itemnumber | int(11)       | YES  |     | NULL    |       |
| price1     | decimal(28,6) | YES  |     | NULL    |       |
| price2     | decimal(28,6) | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
3 rows in set</programlisting>

      <para>The first three tables in this group are central to Koha's
      operation; even portions of the MARC data must be duplicated in these
      tables in order for Koha to function. The <filename>biblio</filename>
      table holds the basic information about the work, such as title and
      author; the <filename>biblioitems</filename> table holds information
      about the formats in which the work is expressed; and the
      <filename>items</filename> table holds information about the individual
      manifestations of these expressions. The piece of data that relates all
      of these tables is the <varname>biblionumber</varname>.<note>
          <para>The <varname>marc</varname> column in the
          <filename>biblioitems</filename> table was used at one point in the
          development of MARC capabilities for Koha, but is not currently used
          for any MARC data.</para>
        </note></para>

      <para>The other five tables hold additional information about specific
      aspects of the work and the copies, as reflected in the name of each
      table and its data columns.</para>

      <para>Three more tables hold deleted bibliographic records:</para>

      <programlisting>DESCRIBE deletedbiblio;
+---------------+-------------+------+-----+-------------------+-------+
| Field         | Type        | Null | Key | Default           | Extra |
+---------------+-------------+------+-----+-------------------+-------+
| biblionumber  | int(11)     |      | PRI | 0                 |       |
| author        | text        | YES  |     | NULL              |       |
| title         | text        | YES  |     | NULL              |       |
| unititle      | text        | YES  |     | NULL              |       |
| notes         | text        | YES  |     | NULL              |       |
| serial        | tinyint(1)  | YES  |     | NULL              |       |
| seriestitle   | text        | YES  |     | NULL              |       |
| copyrightdate | smallint(6) | YES  |     | NULL              |       |
| timestamp     | timestamp   | YES  |     | CURRENT_TIMESTAMP |       |
| marc          | blob        | YES  |     | NULL              |       |
| abstract      | text        | YES  |     | NULL              |       |
+---------------+-------------+------+-----+-------------------+-------+
11 rows in set</programlisting>

      <programlisting>DESCRIBE deletedbiblioitems;
+------------------+--------------+------+-----+-------------------+-------+
| Field            | Type         | Null | Key | Default           | Extra |
+------------------+--------------+------+-----+-------------------+-------+
| biblioitemnumber | int(11)      |      | PRI | 0                 |       |
| biblionumber     | int(11)      |      | MUL | 0                 |       |
| volume           | text         | YES  |     | NULL              |       |
| number           | text         | YES  |     | NULL              |       |
| classification   | varchar(25)  | YES  |     | NULL              |       |
| itemtype         | varchar(4)   | YES  |     | NULL              |       |
| isbn             | varchar(14)  | YES  |     | NULL              |       |
| issn             | varchar(9)   | YES  |     | NULL              |       |
| dewey            | double(8,6)  | YES  |     | NULL              |       |
| subclass         | char(3)      | YES  |     | NULL              |       |
| publicationyear  | smallint(6)  | YES  |     | NULL              |       |
| publishercode    | varchar(255) | YES  |     | NULL              |       |
| volumedate       | date         | YES  |     | NULL              |       |
| volumeddesc      | varchar(255) | YES  |     | NULL              |       |
| timestamp        | timestamp    | YES  |     | CURRENT_TIMESTAMP |       |
| illus            | varchar(255) | YES  |     | NULL              |       |
| pages            | varchar(255) | YES  |     | NULL              |       |
| notes            | text         | YES  |     | NULL              |       |
| size             | varchar(255) | YES  |     | NULL              |       |
| lccn             | varchar(25)  | YES  |     | NULL              |       |
| marc             | text         | YES  |     | NULL              |       |
| url              | varchar(255) | YES  |     | NULL              |       |
+------------------+--------------+------+-----+-------------------+-------+
22 rows in set</programlisting>

      <programlisting>DESCRIBE deleteditems;
+----------------------+---------------+------+-----+-------------------+-------+
| Field                | Type          | Null | Key | Default           | Extra |
+----------------------+---------------+------+-----+-------------------+-------+
| itemnumber           | int(11)       |      | PRI | 0                 | |
| biblionumber         | int(11)       |      | MUL | 0                 | |
| multivolumepart      | varchar(30)   | YES  |     | NULL              | |
| biblioitemnumber     | int(11)       |      | MUL | 0                 | |
| barcode              | varchar(9)    |      | UNI |                   | |
| dateaccessioned      | date          | YES  |     | NULL              | |
| booksellerid         | varchar(10)   | YES  |     | NULL              | |
| homebranch           | varchar(4)    | YES  |     | NULL              | |
| price                | decimal(28,6) | YES  |     | NULL              | |
| replacementprice     | decimal(28,6) | YES  |     | NULL              | |
| replacementpricedate | date          | YES  |     | NULL              | |
| datelastborrowed     | date          | YES  |     | NULL              | |
| datelastseen         | date          | YES  |     | NULL              | |
| multivolume          | tinyint(1)    | YES  |     | NULL              | |
| stack                | tinyint(1)    | YES  |     | NULL              | |
| notforloan           | tinyint(1)    | YES  |     | NULL              | |
| itemlost             | tinyint(1)    | YES  |     | NULL              | |
| wthdrawn             | tinyint(1)    | YES  |     | NULL              | |
| bulk                 | varchar(30)   | YES  |     | NULL              | |
| issues               | smallint(6)   | YES  |     | NULL              | |
| renewals             | smallint(6)   | YES  |     | NULL              | |
| reserves             | smallint(6)   | YES  |     | NULL              | |
| restricted           | tinyint(1)    | YES  |     | NULL              | |
| binding              | decimal(28,6) | YES  |     | NULL              | |
| itemnotes            | text          | YES  |     | NULL              | |
| holdingbranch        | varchar(4)    | YES  |     | NULL              | |
| interim              | tinyint(1)    | YES  |     | NULL              | |
| timestamp            | timestamp     | YES  |     | CURRENT_TIMESTAMP | |
| marc                 | blob          | YES  |     | NULL              | |
| paidfor              | text          | YES  |     | NULL              | |
| location             | varchar(80)   | YES  |     | NULL              | |
+----------------------+---------------+------+-----+-------------------+-------+
31 rows in set</programlisting>

      <para>One other table related to the original, pre-MARC Koha
      bibliographic database is catalogueentry, which was used to cross
      reference subject headings; this table is not used with MARC
      records:</para>

      <programlisting>DESCRIBE catalogueentry;
+----------------+---------+------+-----+---------+-------+
| Field          | Type    | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+-------+
| catalogueentry | text    |      |     |         |       |
| entrytype      | char(2) | YES  |     | NULL    |       |
| see            | text    | YES  |     | NULL    |       |
| seealso        | text    | YES  |     | NULL    |       |
| seeinstead     | text    | YES  |     | NULL    |       |
| biblionumber   | int(11) | YES  |     | NULL    |       |
+----------------+---------+------+-----+---------+-------+
6 rows in set</programlisting>

      <para>Finally, the <filename>websites</filename> table stores
      information about websites that appear in the catalogue (though this
      feature of Koha is not used in the MARC version):</para>

      <programlisting>DESCRIBE websites;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| websitenumber | int(11)      |      | PRI | NULL    | auto_increment |
| biblionumber  | int(11)      |      |     | 0       |                |
| title         | text         | YES  |     | NULL    |                |
| description   | text         | YES  |     | NULL    |                |
| url           | varchar(255) | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
5 rows in set</programlisting>

      <para>MARC bibliographic records are stored primarily in one
      table:</para>

      <programlisting>DESCRIBE marc_subfield_table;
+---------------+---------------------+------+-----+---------+----------------+
| Field         | Type                | Null | Key | Default | Extra          |
+---------------+---------------------+------+-----+---------+----------------+
| subfieldid    | bigint(20) unsigned |      | PRI | NULL    | auto_increment |
| bibid         | bigint(20) unsigned |      | MUL | 0       |                |
| tag           | char(3)             |      | MUL |         |                |
| tagorder      | tinyint(4)          |      | MUL | 1       |                |
| tag_indicator | char(2)             |      | MUL |         |                |
| subfieldcode  | char(1)             |      | MUL |         |                |
| subfieldorder | tinyint(4)          |      | MUL | 1       |                |
| subfieldvalue | varchar(255)        | YES  | MUL | NULL    |                |
| valuebloblink | bigint(20)          | YES  |     | NULL    |                |
+---------------+---------------------+------+-----+---------+----------------+
9 rows in set</programlisting>

      <para>The <filename>marc_subfield_table</filename> table holds the value
      of each MARC subfield and relates this data to other subfields of a
      record through the <varname>tag</varname>,
      <varname>subfieldcode</varname>, and <varname>tagorder</varname>. Using
      these three data pieces, Koha can reconstruct a MARC record from a group
      of subfields selected from this table.</para>

      <para>If the <varname>subfieldvalue</varname> is longer than 255
      characters (and thus too big to fit in this table), then a value is set
      in the <varname>valuebloblink</varname> column that refers to a data row
      in the <filename>marc_blob_subfield</filename> table, where the long
      subfield value is stored:</para>

      <programlisting>DESCRIBE marc_blob_subfield;
+---------------+------------+------+-----+---------+----------------+
| Field         | Type       | Null | Key | Default | Extra          |
+---------------+------------+------+-----+---------+----------------+
| blobidlink    | bigint(20) |      | PRI | NULL    | auto_increment |
| subfieldvalue | longtext   |      |     |         |                |
+---------------+------------+------+-----+---------+----------------+
2 rows in set</programlisting>

      <para>Subfields values are also broken into single words and stored in a
      separate table that is used when performing keyword searches:</para>

      <programlisting>DESCRIBE marc_word;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| bibid         | bigint(20)   |      | MUL | 0       |       |
| tagsubfield   | varchar(4)   |      | MUL |         |       |
| tagorder      | tinyint(4)   |      | MUL | 1       |       |
| subfieldorder | tinyint(4)   |      | MUL | 1       |       |
| word          | varchar(255) |      | MUL |         |       |
| sndx_word     | varchar(255) |      | MUL |         |       |
+---------------+--------------+------+-----+---------+-------+
6 rows in set</programlisting>

      <para>The <varname>sndx_word</varname> column stores syndetic values for
      the word, so that Koha can find words that sound like a search
      term.</para>

      <para>MARC records which have been retrieved through a Z3950 search or
      uploaded into the MARC reservoir, but have not yet been added to the
      catalogue, are stored in either the <filename>marc_breeding</filename>
      or the <filename>uploadedmarc</filename> tables, particularly in the
      <varname>marc</varname> column (in ISO2709 format):</para>

      <programlisting>DESCRIBE marc_breeding;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   |      | PRI | NULL    | auto_increment |
| file        | varchar(80)  |      |     |         |                |
| isbn        | varchar(10)  |      | MUL |         |                |
| title       | varchar(128) | YES  | MUL | NULL    |                |
| author      | varchar(80)  | YES  |     | NULL    |                |
| marc        | text         |      |     |         |                |
| encoding    | varchar(40)  |      |     |         |                |
| z3950random | varchar(40)  | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
8 rows in set</programlisting>

      <programlisting>DESCRIBE uploadedmarc;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      |      | PRI | NULL    | auto_increment |
| marc   | longblob     | YES  |     | NULL    |                |
| hidden | smallint(6)  | YES  |     | NULL    |                |
| name   | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
4 rows in set</programlisting>

      <para>The table which relates the MARC data to the original Koha
      bibliographic tables is <filename>marc_biblio</filename>:</para>

      <programlisting>DESCRIBE marc_biblio;
+---------------+---------------------+------+-----+------------+----------------+
| Field         | Type                | Null | Key | Default    | Extra          |
+---------------+---------------------+------+-----+------------+----------------+
| bibid         | bigint(20) unsigned |      | PRI | NULL       | auto_increment |
| biblionumber  | int(11)             |      | MUL | 0          |                |
| datecreated   | date                |      |     | 0000-00-00 |                |
| datemodified  | date                | YES  |     | NULL       |                |
| origincode    | char(20)            | YES  | MUL | NULL       |                |
| frameworkcode | char(4)             |      |     |            |                |
+---------------+---------------------+------+-----+------------+----------------+
6 rows in set</programlisting>

      <para>Finally, the <filename>marcrecorddone</filename> table does not
      seem to be used for anything.</para>

      <para>MARC authority records are stored in a group of tables which
      partly correspond to the MARC bibliographic tables:</para>

      <programlisting>DESCRIBE auth_subfield_table;
+---------------+---------------------+------+-----+---------+----------------+
| Field         | Type                | Null | Key | Default | Extra          |
+---------------+---------------------+------+-----+---------+----------------+
| subfieldid    | bigint(20) unsigned |      | PRI | NULL    | auto_increment |
| authid        | bigint(20) unsigned |      | MUL | 0       |                |
| tag           | char(3)             |      | MUL |         |                |
| tagorder      | tinyint(4)          |      |     | 1       |                |
| tag_indicator | char(2)             |      |     |         |                |
| subfieldcode  | char(1)             |      | MUL |         |                |
| subfieldorder | tinyint(4)          |      |     | 1       |                |
| subfieldvalue | varchar(255)        | YES  | MUL | NULL    |                |
+---------------+---------------------+------+-----+---------+----------------+
8 rows in set</programlisting>

      <programlisting>DESCRIBE auth_word;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| authid        | bigint(20)   |      | MUL | 0       |       |
| tagsubfield   | varchar(4)   |      | MUL |         |       |
| tagorder      | tinyint(4)   |      |     | 1       |       |
| subfieldorder | tinyint(4)   |      |     | 1       |       |
| word          | varchar(255) |      | MUL |         |       |
| sndx_word     | varchar(255) |      | MUL |         |       |
+---------------+--------------+------+-----+---------+-------+
6 rows in set</programlisting>

      <programlisting>DESCRIBE auth_header;
+--------------+---------------------+------+-----+------------+----------------+
| Field        | Type                | Null | Key | Default    | Extra          |
+--------------+---------------------+------+-----+------------+----------------+
| authid       | bigint(20) unsigned |      | PRI | NULL       | auto_increment |
| authtypecode | char(10)            |      |     |            |                |
| datecreated  | date                |      |     | 0000-00-00 |                |
| datemodified | date                | YES  |     | NULL       |                |
| origincode   | char(20)            | YES  | MUL | NULL       |                |
+--------------+---------------------+------+-----+------------+----------------+
5 rows in set</programlisting>

      <programlisting>DESCRIBE bibliothesaurus;
+-----------+------------+------+-----+---------+----------------+
| Field     | Type       | Null | Key | Default | Extra          |
+-----------+------------+------+-----+---------+----------------+
| id        | bigint(20) |      | PRI | NULL    | auto_increment |
| freelib   | char(255)  |      | MUL |         |                |
| stdlib    | char(255)  |      | MUL |         |                |
| category  | char(10)   |      | MUL |         |                |
| level     | tinyint(4) |      |     | 1       |                |
| hierarchy | char(80)   |      | MUL |         |                |
| father    | char(80)   |      |     |         |                |
+-----------+------------+------+-----+---------+----------------+
7 rows in set</programlisting>

      <para>The <filename>auth_header</filename> and
      <filename>bibliothesaurus</filename> tables hold some basic information
      about authority types that the Koha user has defined and how a subject
      authority record relates to others. The
      <filename>auth_subfield_table</filename> and
      <exceptionname>auth_word</exceptionname> tables hold the same type of
      data as their similarly-named MARC bibliographic tables.</para>

      <para>Finally, two other tables hold data used to hold data about
      periodicals:</para>

      <programlisting>DESCRIBE subscription;
+-----------------+--------------+------+-----+------------+----------------+
| Field           | Type         | Null | Key | Default    | Extra          |
+-----------------+--------------+------+-----+------------+----------------+
| biblionumber    | int(11)      |      |     | 0          |                |
| subscriptionid  | int(11)      |      | PRI | NULL       | auto_increment |
| librarian       | varchar(100) | YES  |     |            |                |
| startdate       | date         | YES  |     | 0000-00-00 |                |
| aqbooksellerid  | int(11)      | YES  |     | 0          |                |
| cost            | int(11)      | YES  |     | 0          |                |
| aqbudgetid      | int(11)      | YES  |     | 0          |                |
| weeklength      | tinyint(4)   | YES  |     | 0          |                |
| monthlength     | tinyint(4)   | YES  |     | 0          |                |
| numberlength    | tinyint(4)   | YES  |     | 0          |                |
| periodicity     | tinyint(4)   | YES  |     | 0          |                |
| dow             | varchar(100) | YES  |     |            |                |
| numberingmethod | varchar(100) | YES  |     |            |                |
| notes           | text         | YES  |     | NULL       |                |
| status          | varchar(100) |      |     |            |                |
| add1            | int(11)      | YES  |     | 0          |                |
| every1          | int(11)      | YES  |     | 0          |                |
| whenmorethan1   | int(11)      | YES  |     | 0          |                |
| setto1          | int(11)      | YES  |     | NULL       |                |
| lastvalue1      | int(11)      | YES  |     | NULL       |                |
| add2            | int(11)      | YES  |     | 0          |                |
| every2          | int(11)      | YES  |     | 0          |                |
| whenmorethan2   | int(11)      | YES  |     | 0          |                |
| setto2          | int(11)      | YES  |     | NULL       |                |
| lastvalue2      | int(11)      | YES  |     | NULL       |                |
| add3            | int(11)      | YES  |     | 0          |                |
| every3          | int(11)      | YES  |     | 0          |                |
| innerloop1      | int(11)      | YES  |     | 0          |                |
| innerloop2      | int(11)      | YES  |     | 0          |                |
| innerloop3      | int(11)      | YES  |     | 0          |                |
| whenmorethan3   | int(11)      | YES  |     | 0          |                |
| setto3          | int(11)      | YES  |     | NULL       |                |
| lastvalue3      | int(11)      | YES  |     | NULL       |                |
+-----------------+--------------+------+-----+------------+----------------+
33 rows in set</programlisting>

      <programlisting>DESCRIBE serial;
+----------------+--------------+------+-----+------------+----------------+
| Field          | Type         | Null | Key | Default    | Extra          |
+----------------+--------------+------+-----+------------+----------------+
| serialid       | int(11)      |      | PRI | NULL       | auto_increment |
| biblionumber   | varchar(100) |      |     |            |                |
| subscriptionid | varchar(100) |      |     |            |                |
| serialseq      | varchar(100) |      |     |            |                |
| status         | tinyint(4)   |      |     | 0          |                |
| planneddate    | date         |      |     | 0000-00-00 |                |
| notes          | varchar(255) | YES  |     |            |                |
+----------------+--------------+------+-----+------------+----------------+
7 rows in set</programlisting>

      <para>The <filename>subscription</filename> table holds general
      information about a periodicals subscription, while the
      <filename>serial</filename> table holds information about individual
      issues of a periodical.</para>
    </section>

    <section>
      <title>Tables holding transaction data</title>

      <para>These tables hold the data recording the library's transactions.
      They generally cross-reference to borrower and catalogue data
      tables.</para>

      <para>Perhaps the most important of these is the
      <filename>issues</filename> table, which holds information about which
      items have been loaned to which borrowers:</para>

      <programlisting>DESCRIBE issues;
+-----------------+------------+------+-----+-------------------+-------+
| Field           | Type       | Null | Key | Default           | Extra |
+-----------------+------------+------+-----+-------------------+-------+
| borrowernumber  | int(11)    |      | MUL | 0                 |       |
| itemnumber      | int(11)    |      | MUL | 0                 |       |
| date_due        | date       | YES  |     | NULL              |       |
| branchcode      | char(4)    | YES  |     | NULL              |       |
| issuingbranch   | char(18)   | YES  |     | NULL              |       |
| returndate      | date       | YES  |     | NULL              |       |
| lastreneweddate | date       | YES  |     | NULL              |       |
| return          | char(4)    | YES  |     | NULL              |       |
| renewals        | tinyint(4) | YES  |     | NULL              |       |
| timestamp       | timestamp  | YES  |     | CURRENT_TIMESTAMP |       |
+-----------------+------------+------+-----+-------------------+-------+
10 rows in set</programlisting>

      <para>Notice the <varname>timestamp</varname> data in this table; this
      type of data is fairly common in the transaction tables, allowing the
      library staff to determine the date and time when a transaction took
      place.</para>

      <para>A <filename>statistics</filename> table holds summary data about
      issues; data in this table is more dependable than data in the
      <filename>issues</filename> table, which may be affected by other
      activity:</para>

      <programlisting>DESCRIBE statistics;
+----------------+--------------+------+-----+---------------------+-------+
| Field          | Type         | Null | Key | Default             | Extra |
+----------------+--------------+------+-----+---------------------+-------+
| datetime       | datetime     |      | MUL | 0000-00-00 00:00:00 |       |
| branch         | varchar(4)   | YES  |     | NULL                |       |
| proccode       | varchar(4)   | YES  |     | NULL                |       |
| value          | double(16,4) | YES  |     | NULL                |       |
| type           | varchar(16)  | YES  |     | NULL                |       |
| other          | text         | YES  |     | NULL                |       |
| usercode       | varchar(10)  | YES  |     | NULL                |       |
| itemnumber     | int(11)      | YES  |     | NULL                |       |
| itemtype       | varchar(4)   | YES  |     | NULL                |       |
| borrowernumber | int(11)      | YES  |     | NULL                |       |
+----------------+--------------+------+-----+---------------------+-------+
10 rows in set</programlisting>

      <para>Two tables related to issues keep track of reserves on library
      materials:</para>

      <programlisting>DESCRIBE reserves;
+------------------+-------------+------+-----+-------------------+-------+
| Field            | Type        | Null | Key | Default           | Extra |
+------------------+-------------+------+-----+-------------------+-------+
| borrowernumber   | int(11)     |      |     | 0                 |       |
| reservedate      | date        |      |     | 0000-00-00        |       |
| biblionumber     | int(11)     |      |     | 0                 |       |
| constrainttype   | char(1)     | YES  |     | NULL              |       |
| branchcode       | varchar(4)  | YES  |     | NULL              |       |
| notificationdate | date        | YES  |     | NULL              |       |
| reminderdate     | date        | YES  |     | NULL              |       |
| cancellationdate | date        | YES  |     | NULL              |       |
| reservenotes     | text        | YES  |     | NULL              |       |
| priority         | smallint(6) | YES  |     | NULL              |       |
| found            | char(1)     | YES  |     | NULL              |       |
| timestamp        | timestamp   | YES  |     | CURRENT_TIMESTAMP |       |
| itemnumber       | int(11)     | YES  |     | NULL              |       |
+------------------+-------------+------+-----+-------------------+-------+
13 rows in set</programlisting>

      <programlisting>DESCRIBE reserveconstraints;
+------------------+-----------+------+-----+-------------------+-------+
| Field            | Type      | Null | Key | Default           | Extra |
+------------------+-----------+------+-----+-------------------+-------+
| borrowernumber   | int(11)   |      |     | 0                 |       |
| reservedate      | date      |      |     | 0000-00-00        |       |
| biblionumber     | int(11)   |      |     | 0                 |       |
| biblioitemnumber | int(11)   | YES  |     | NULL              |       |
| timestamp        | timestamp | YES  |     | CURRENT_TIMESTAMP |       |
+------------------+-----------+------+-----+-------------------+-------+
5 rows in set</programlisting>

      <para>The <filename>reserveconstraints</filename> table allows for
      options like delayed reserves.</para>

      <para>Another table holds data about movement of items between library
      branches:</para>

      <programlisting>DESCRIBE branchtransfers;
+-------------+------------+------+-----+---------+-------+
| Field       | Type       | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+-------+
| itemnumber  | int(11)    |      |     | 0       |       |
| datesent    | datetime   | YES  |     | NULL    |       |
| frombranch  | varchar(4) | YES  |     | NULL    |       |
| datearrived | datetime   | YES  |     | NULL    |       |
| tobranch    | varchar(4) | YES  |     | NULL    |       |
| comments    | text       | YES  |     | NULL    |       |
+-------------+------------+------+-----+---------+-------+
6 rows in set</programlisting>

      <para>Two tables hold data about fines and other charges owed by
      borrowers:</para>

      <programlisting>DESCRIBE accountlines;
+-------------------+---------------+------+-----+-------------------+-------+
| Field             | Type          | Null | Key | Default           | Extra |
+-------------------+---------------+------+-----+-------------------+-------+
| borrowernumber    | int(11)       |      | MUL | 0                 |       |
| accountno         | smallint(6)   |      |     | 0                 |       |
| itemnumber        | int(11)       | YES  |     | NULL              |       |
| date              | date          | YES  |     | NULL              |       |
| amount            | decimal(28,6) | YES  |     | NULL              |       |
| description       | text          | YES  |     | NULL              |       |
| dispute           | text          | YES  |     | NULL              |       |
| accounttype       | varchar(5)    | YES  |     | NULL              |       |
| amountoutstanding | decimal(28,6) | YES  |     | NULL              |       |
| timestamp         | timestamp     | YES  | MUL | CURRENT_TIMESTAMP |       |
+-------------------+---------------+------+-----+-------------------+-------+
10 rows in set</programlisting>

      <programlisting>DESCRIBE accountoffsets;
+----------------+---------------+------+-----+-------------------+-------+
| Field          | Type          | Null | Key | Default           | Extra |
+----------------+---------------+------+-----+-------------------+-------+
| borrowernumber | int(11)       |      |     | 0                 |       |
| accountno      | smallint(6)   |      |     | 0                 |       |
| offsetaccount  | smallint(6)   |      |     | 0                 |       |
| offsetamount   | decimal(28,6) | YES  |     | NULL              |       |
| timestamp      | timestamp     | YES  |     | CURRENT_TIMESTAMP |       |
+----------------+---------------+------+-----+-------------------+-------+
5 rows in set</programlisting>

      <para>The <filename>accountlines</filename> table holds information
      about the original charge, while <filename>accountoffsets</filename>
      holds data about payments toward the charge.</para>

      <para>Two tables hold data from Z3950 searches performed by the
      catalogers:</para>

      <programlisting>DESCRIBE z3950queue;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     |      | PRI | NULL    | auto_increment |
| term       | text        | YES  |     | NULL    |                |
| type       | varchar(10) | YES  |     | NULL    |                |
| startdate  | int(11)     | YES  |     | NULL    |                |
| enddate    | int(11)     | YES  |     | NULL    |                |
| done       | smallint(6) | YES  |     | NULL    |                |
| results    | longblob    | YES  |     | NULL    |                |
| numrecords | int(11)     | YES  |     | NULL    |                |
| servers    | text        | YES  |     | NULL    |                |
| identifier | varchar(30) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
10 rows in set</programlisting>

      <programlisting>DESCRIBE z3950results;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      |      | PRI | NULL    | auto_increment |
| queryid       | int(11)      | YES  | MUL | NULL    |                |
| server        | varchar(255) | YES  |     | NULL    |                |
| startdate     | int(11)      | YES  |     | NULL    |                |
| enddate       | int(11)      | YES  |     | NULL    |                |
| results       | longblob     | YES  |     | NULL    |                |
| numrecords    | int(11)      | YES  |     | NULL    |                |
| numdownloaded | int(11)      | YES  |     | NULL    |                |
| highestseen   | int(11)      | YES  |     | NULL    |                |
| active        | smallint(6)  | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set</programlisting>

      <para>Five tables contain the data related to orders for library
      materials:</para>

      <programlisting>DESCRIBE suggestions;
+-----------------+--------------+------+-----+-------------------+----------------+
| Field           | Type         | Null | Key | Default           | Extra          |
+-----------------+--------------+------+-----+-------------------+----------------+
| suggestionid    | int(8)       |      | PRI | NULL              | auto_increment |
| suggestedby     | int(11)      |      | MUL | 0                 |                |
| managedby       | int(11)      | YES  | MUL | NULL              |                |
| STATUS          | varchar(10)  |      |     |                   |                |
| note            | text         | YES  |     | NULL              |                |
| author          | varchar(80)  | YES  |     | NULL              |                |
| title           | varchar(80)  | YES  |     | NULL              |                |
| copyrightdate   | smallint(6)  | YES  |     | NULL              |                |
| publishercode   | varchar(255) | YES  |     | NULL              |                |
| date            | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
| volumedesc      | varchar(255) | YES  |     | NULL              |                |
| publicationyear | smallint(6)  | YES  |     | 0                 |                |
| place           | varchar(255) | YES  |     | NULL              |                |
| isbn            | varchar(10)  | YES  |     | NULL              |                |
| mailoverseeing  | smallint(1)  | YES  |     | 0                 |                |
| biblionumber    | int(11)      | YES  |     | NULL              |                |
+-----------------+--------------+------+-----+-------------------+----------------+
16 rows in set</programlisting>

      <programlisting>DESCRIBE aqbasket;
+-------------------------+-------------+------+-----+---------+----------------+
| Field                   | Type        | Null | Key | Default | Extra          |
+-------------------------+-------------+------+-----+---------+----------------+
| basketno                | int(11)     |      | PRI | NULL    | auto_increment |
| creationdate            | date        | YES  |     | NULL    |                |
| closedate               | date        | YES  |     | NULL    |                |
| booksellerid            | varchar(10) | YES  |     | NULL    |                |
| authorisedby            | varchar(10) | YES  |     | NULL    |                |
| booksellerinvoicenumber | text        | YES  |     | NULL    |                |
+-------------------------+-------------+------+-----+---------+----------------+
6 rows in set</programlisting>

      <programlisting>DESCRIBE aqorders;
+-------------------------+---------------+------+-----+-------------------+----------------+
| Field                   | Type          | Null | Key | Default           | Extra          |
+-------------------------+---------------+------+-----+-------------------+----------------+
| ordernumber             | int(11)       |      | PRI | NULL              | auto_increment |
| biblionumber            | int(11)       | YES  |     | NULL              |                |
| title                   | text          | YES  |     | NULL              |                |
| entrydate               | date          | YES  |     | NULL              |                |
| quantity                | smallint(6)   | YES  |     | NULL              |                |
| currency                | char(3)       | YES  |     | NULL              |                |
| listprice               | decimal(28,6) | YES  |     | NULL              |                |
| totalamount             | decimal(28,6) | YES  |     | NULL              |                |
| datereceived            | date          | YES  |     | NULL              |                |
| booksellerinvoicenumber | text          | YES  |     | NULL              |                |
| freight                 | decimal(28,6) | YES  |     | NULL              |                |
| unitprice               | decimal(28,6) | YES  |     | NULL              |                |
| quantityreceived        | smallint(6)   | YES  |     | NULL              |                |
| cancelledby             | varchar(10)   | YES  |     | NULL              |                |
| datecancellationprinted | date          | YES  |     | NULL              |                |
| notes                   | text          | YES  |     | NULL              |                |
| supplierreference       | text          | YES  |     | NULL              |                |
| purchaseordernumber     | text          | YES  |     | NULL              |                |
| subscription            | tinyint(1)    | YES  |     | NULL              |                |
| serialid                | varchar(30)   | YES  |     | NULL              |                |
| basketno                | int(11)       | YES  |     | NULL              |                |
| biblioitemnumber        | int(11)       | YES  |     | NULL              |                |
| timestamp               | timestamp     | YES  |     | CURRENT_TIMESTAMP |                |
| rrp                     | decimal(13,2) | YES  |     | NULL              |                |
| ecost                   | decimal(13,2) | YES  |     | NULL              |                |
| gst                     | decimal(13,2) | YES  |     | NULL              |                |
| budgetdate              | date          | YES  |     | NULL              |                |
| sort1                   | varchar(80)   | YES  |     | NULL              |                |
| sort2                   | varchar(80)   | YES  |     | NULL              |                |
+-------------------------+---------------+------+-----+-------------------+----------------+
29 rows in set</programlisting>

      <programlisting>DESCRIBE aqorderbreakdown;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| ordernumber | int(11)     | YES  |     | NULL    |       |
| linenumber  | int(11)     | YES  |     | NULL    |       |
| branchcode  | char(4)     | YES  |     | NULL    |       |
| bookfundid  | char(5)     |      |     |         |       |
| allocation  | smallint(6) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
5 rows in set</programlisting>

      <programlisting>DESCRIBE aqorderdelivery;
+------------------+-------------+------+-----+------------+-------+
| Field            | Type        | Null | Key | Default    | Extra |
+------------------+-------------+------+-----+------------+-------+
| ordernumber      | date        |      |     | 0000-00-00 |       |
| deliverynumber   | smallint(6) |      |     | 0          |       |
| deliverydate     | varchar(18) | YES  |     | NULL       |       |
| qtydelivered     | smallint(6) | YES  |     | NULL       |       |
| deliverycomments | text        | YES  |     | NULL       |       |
+------------------+-------------+------+-----+------------+-------+
5 rows in set</programlisting>

      <para>One table holds information about periodicals:</para>

      <programlisting>DESCRIBE subscriptionhistory;
+----------------+--------------+------+-----+------------+-------+
| Field          | Type         | Null | Key | Default    | Extra |
+----------------+--------------+------+-----+------------+-------+
| biblionumber   | int(11)      |      | MUL | 0          |       |
| subscriptionid | int(11)      |      | PRI | 0          |       |
| histstartdate  | date         |      |     | 0000-00-00 |       |
| enddate        | date         | YES  |     | 0000-00-00 |       |
| missinglist    | longtext     |      |     |            |       |
| recievedlist   | longtext     |      |     |            |       |
| opacnote       | varchar(150) |      |     |            |       |
| librariannote  | varchar(150) |      |     |            |       |
+----------------+--------------+------+-----+------------+-------+
8 rows in set</programlisting>

      <para>Finally, two tables hold information about logged-in users:</para>

      <programlisting>DESCRIBE sessions;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| sessionID | varchar(255) |      | PRI |         |       |
| userid    | varchar(255) | YES  |     | NULL    |       |
| ip        | varchar(16)  | YES  |     | NULL    |       |
| lasttime  | int(11)      | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
4 rows in set</programlisting>

      <programlisting>DESCRIBE sessionqueries;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| sessionID | varchar(255) |      |     |         |       |
| userid    | varchar(100) |      |     |         |       |
| ip        | varchar(18)  |      |     |         |       |
| url       | text         |      |     |         |       |
+-----------+--------------+------+-----+---------+-------+
4 rows in set</programlisting>

      <para>The <filename>sessionqueries</filename> table does not seem to be
      currently used by Koha.</para>
    </section>
  </appendix>

  <appendix>
    <title>Translating Koha</title>

    <para>Because Koha is open source, it can be translated to most languages
    without much trouble. The tools and instructions you need are found in the
    <filename>intranet/scripts/misc/translator</filename> directory of your
    Koha installation. The instructions are contained in the file
    <filename>translator_doc.txt</filename>, which is reproduced here:</para>

    <literallayout>TRANSLATION TOOL, V3.0:
======================

This translation tool should greatly help Koha translators. It's composed of
2 scripts (with a number of associated perl module files):

 1. xgettext.pl, that extracts the texts in a template, and which is called by
    the script; and
 2. tmpl_process3.tmpl, which can do 3 things:
     a. create a file with all the "translatable strings" in all files in a
        directory (&amp; its subdirectories),
     b. update an existing translation file, and
     c. rebuild translated templates from English &amp; translation file.

Call tmpl_process3.pl --help to get a more detailed explanation. Some
additional explanations are also available by calling perldoc tmpl_process3.pl.

HOW TO TRANSLATE Koha:
=====================

 1. Create your translation file (assuming your current directory is this
    directory, i.e., misc/translator):

        ./tmpl_process3.pl create -i ../../koha-tmpl/opac-tmpl/default/en/ -s po/css_opac_fr_FR.po -r

    (In the above example, ../../koha-tmpl/opac-tmpl/default/en/ contains the
    English templates in the "default" theme, and po/css_opac_fr_FR.po is where
    you want the generated PO file to appear. The use of relative paths for the
    English templates is recommended; it makes the resulting PO files slightly
    shorter and more usable in a team environment. Absolute paths are certainly
    fine, and might be better if there is only one translator for your
    language.)
 2. Translate your css_opac_fr_FR.po file using a text editor or a PO file
    translation tool.
 3. Create your translated templates:

        ./tmpl_process3.pl install -i ../../koha-tmpl/opac-tmpl/default/en/ -o /home/paul/koha.dev/koha/koha-tmpl/opac-tmpl/default/fr2/ -s po/css_opac_fr_FR.po -r

    (In the above example, /home/paul/koha.dev/koha/koha-tmpl/opac-tmpl/default
    /fr2/ is where you want your translated templates to be saved.)
 4. Copy images/css files in your new directory (as they are NOT moved by
    tmpl_process3.pl install).

If something changes in the English version:

 1. Update your translation file:

        ./tmpl_process3.pl update -i ../../koha-tmpl/opac-tmpl/default/en/ -s po/css_opac_fr_FR.po -r

 2. Translate your newly updated css_opac_fr_FR.po file. Look for strings
    marked as "fuzzy" and strings that are not translated.
 3. Create your translated templates:

        ./tmpl_process3.pl install -i ../../koha-tmpl/opac-tmpl/default/en/ -o /home/paul/koha.dev/koha/koha-tmpl/opac-tmpl/default/fr2/ -s po/css_opac_fr_FR.po -r

 4. Copy new images/css files in your new directory if needed

WEAKNESSES
==========

For a somewhat up-to-date list of weaknesses, please run perldoc xgettext.pl
and perldoc tmpl_process3.pl and read the BUGS sections.

COPYRIGHT
=========

  * Paul Poulain (paul.poulain _@_ free.fr) &amp; Jerome Vizcaino (vizcainj _@_
    esiee.fr)
  * Parts of V3.0 by Ambrose Li (acli _@_ ada.dhs.org)</literallayout>

    <para>These instructions require some additional explanation for those who
    are not familiar with "PO files."</para>

    <para>A PO file is a translation tool used by the GNU
    <filename>gettext</filename> utilities. See <ulink
    url="http://www.gnu.org/software/gettext/manual/">http://www.gnu.org/software/gettext/manual/</ulink>
    for a detailed description of <filename>gettext</filename>, but you don't
    have to be a <filename>gettext</filename> expert to translate Koha. The
    <filename>tmpl_process3.pl</filename> script takes care of the difficult
    stuff for you. When you run the script with the <option>create</option>
    option it extracts information from any set of Koha templates which you
    name (usually the default English templates) and creates a PO-format file
    with all of the terms you need to translate. The file will contain a list
    of entries that look something like this:</para>

    <programlisting>#: ../../koha-tmpl/intranet-tmpl/default/en/help/admin/categorie.tmpl:11
msgid "\"C\" (Children) is a borrower category that has a \"guarantor\""
msgstr ""

#: ../../koha-tmpl/intranet-tmpl/default/en/help/admin/categorie.tmpl:9
msgid ""
"\"I\" can be used for institutional members, like other libraries that "
"borrow from you, in which case Koha expects slightly different information "
"about the institution;"
msgstr ""</programlisting>

    <para>All you need to do now is insert the translation of each
    <varname>msgid</varname> between the quotation marks of the corresponding
    <varname>msgstr</varname>. This can be done using any text editor, or is
    even easier if you use a PO editor like <application>kbabel</application>.
    When you are done translating everything, run
    <filename>tmpl_process3.pl</filename> again with the
    <option>install</option> option and it will create all the Koha templates
    in the new language. If the default templates are changed, run
    <filename>tmpl_process3.pl</filename> with the <option>update</option>
    option and check the resulting PO file for missing translations.</para>

    <section>
      <title>Special problems</title>

      <para>Some languages are not so simple to translate, because of
      character-encoding or direction problems. If you have successfully
      overcome such a problem, please post your experiences to one of the Koha
      mailing lists or send them to <email>st.hedges AT gmail DOT com</email>.
      They will be added to this section.</para>

      <section>
        <title>Bengali</title>

        <para><emphasis role="bold">Posted by Parthasarathi
        Mukhopadhyay</emphasis></para>

        <para>Finally I have done Koha localization (in Bengali language - an
        Indian regional language) for both the version Windows and Linux. The
        procedure I adopted is as follows:</para>

        <orderedlist>
          <listitem>
            <para>I copied <filename>npl</filename> directory under
            <filename>opac-template</filename> in a new folder
            <filename>npl_bengali</filename>.</para>
          </listitem>

          <listitem>
            <para>Then changed charset=ISO-8859-1 to charset=UTF-8 everywhere
            it (charset=ISO-8859-1) appeared in <filename>.INC</filename> file
            under <filename>/include</filename> directory.</para>
          </listitem>

          <listitem>
            <para>In the system parameter setup I then changed
            <varname>opac</varname> theme to <filename>npl_bengali</filename>
            (it appeared as an option automatically).</para>
          </listitem>

          <listitem>
            <para>Finally used an Unicode compliant virtual keyboard (Avro) to
            enter query, to enter cataloguing data and to change interface
            language. [ed. note: <ulink
            url="http://www.omicronlab.com/avrokeyboard/">www.omicronlab.com/avrokeyboard/</ulink>]</para>
          </listitem>

          <listitem>
            <para>It works nicely. I have also tested import and export of
            Koha data (bibliographic, members etc.) in MySQL directly and
            found it works correctly.</para>
          </listitem>

          <listitem>
            <para>I'm entering data in Linux server through Windows XP client
            because virtual keyboard is available in Windows version only.
            Possibly in future we'll overcome this limitation also.</para>

            <para>For more information, see <ulink
            url="https://drtc.isibang.ac.in/bitstream/1849/409/1/open+road_main_theme_psm_LDL.pdf">Five
            Laws and Ten Comandments: The Open Road of Library Automation in
            India</ulink>.</para>
          </listitem>
        </orderedlist>
      </section>

      <section>
        <title>Turkish</title>

        <para><emphasis role="bold">Posted by Tumer Garip</emphasis></para>

        <para>Here is what we had to do to use Koha in utf-8, hoping that it
        helps in some of your discussions:</para>

        <orderedlist>
          <listitem>
            <para>We are using Koha since 2.2.0 now at 2.2.2b</para>
          </listitem>

          <listitem>
            <para>We use English for intranet and English-Turkish for
            opac</para>
          </listitem>

          <listitem>
            <para>The platform is Windows</para>
          </listitem>

          <listitem>
            <para>We changed the character set of the database to utf-8 with
            the iso-xxxx data in it. No problem for MySQL as you are moving up
            the ladder. No need to reload the data (10 min)</para>
          </listitem>

          <listitem>
            <para>Changed all the charset=iso-xxxx in the templates to read
            utf-8 and saved the files as utf-8 (15 min.) in a simple text
            editor.</para>
          </listitem>

          <listitem>
            <para>Character decode in biblio for MARC21 is very ambiguous for
            us because it is not very clear which character encoding it is
            changing from. All the MARC records we bulkimport are MARC-8 ,
            iso2709 or ANSEL or whatever you want to call them. So we simply
            wrote a one to one character mapping of MARC-8 to utf-8 for our
            Turkish accented characters. Here it is:<programlisting>#Additional Turkish characters 

 s/(\xf0)s/þ/gm; 
 s/(\xf0)S/Þ/gm; 
 s/(\xf0)c/ç/gm; 
 s/(\xf0)C/Ç/gm;
 s/\xe7\x49/Ý/gm;
 s/(\xe6)G/Ð/gm;
 s/(\xe6)g/ð/gm;
 s/\xB8/ý/gm;
 s/\xB9/£/gm;
 s/(\xe8|\xc8)o/ö/gm ;
 s/(\xe8|\xc8)O/Ö/gm ;
 s/(\xe8|\xc8)u/ü/gm ;
 s/(\xe8|\xc8)U/Ü/gm ;
 s/\xc2\xb8/ý/gm;</programlisting></para>

            <para>All the character codes are directly from LC's website about
            MARC21. Since we provided the actual characters rather than their
            codes we saved the <filename>Biblio.pm</filename> as utf8 to save
            time. (Half a day together with research)</para>
          </listitem>

          <listitem>
            <para>We have a full working Koha as utf8 supporting all
            characters and we keep doing the same thing every time we get an
            update.</para>
          </listitem>

          <listitem>
            <para>Translation of opac files through .po files do not work for
            us. As we see it, this po translator is simply a search and
            replace text engine. So it converts the string ' English English
            &lt;somevariable&gt; English.' to ' Turkish Turkish
            &lt;somevariable&gt; Turkish'. Which is useless as it should be
            'Turkish &lt;somevariable&gt; Turkish Turkish'.</para>
          </listitem>

          <listitem>
            <para>So we sat down and translated the opac templates to proper
            Turkish. It is now easier for our people to follow the changes in
            cvs and implement the changes to templates rather than doing
            complete translations every time.</para>
          </listitem>

          <listitem>
            <para>The whole update up till now is taking less than half a day
            with one person doing it.</para>
          </listitem>

          <listitem>
            <para>We as Windows people do not have much experience with this
            po editor. But as far as I know it supports utf-8 so what's the
            hassle about these translations? As far as we understand it the
            official language of Koha is English and if someone is translating
            it to some other language it is their responsibility to find the
            resources to translate it in time to be implemented as an
            additional language. Even if this requires a complete rewrite of
            some templates.</para>
          </listitem>

          <listitem>
            <para>Finally we believe that Koha should start using utf-8 ASAP
            before the move to zebra to gain experience. If zebra is
            implemented with all this iso stuff we will have more problems
            with each translation requiring a different character set and sort
            order set and character mapping to set, etc.</para>
          </listitem>
        </orderedlist>

        <para>Koha is more powerful with more features, stability and
        performance and I believe people will be more happy to see improvement
        in these even if they have to spend a little bit more resource on
        their own translations.</para>
      </section>
    </section>
  </appendix>
</book>