(+ Added, * Changed, - Removed, ! Note)

14-Sep-2005, Version 1.5.2

  * The Web Bug now uses Output Buffering to prevent session problems.

  * Fixed bugs #4624, #5054.

30-Jun-2005, Version 1.5.1

  * Fixed bug #3578.

  * Changed JPGraph default font from FF_VERDANA to FF_FONT1 to solve a problem with certain GD / PHP versions.

  * Moved printf() call directly after the header() calls in image.php.

    (Patch by Ian Holsman <ian@holsman.net>)

10-Apr-2005, Version 1.5.0

  ! For over a year now I have neither worked on or worked with
    phpOpenTracker because I lacked the time. Although I could not
    test this phpOpenTracker 1.5.0 release myself I am releasing
    it as "stable" now because I got enough positive feedback during
    its long testing phase.

    phpOpenTracker 1.5 will be the last release series (with bugfixes
    in phpOpenTracker 1.5.X releases) of phpOpenTracker 1. The little
    time I can invest into the phpOpenTracker project I will spend on
    the development of phpOpenTracker 2.

31-Dec-2004, Version 1.5.0 (Release Candidate 2)

  + Added 'plugin_data' array to the phpOpenTracker Session Container.

    This array can be used by phpOpenTracker Logging Engine plugins to
    store arbitrary data between requests.

    The array elements should be namespace-protected by using a
    sub-array with the name of the corresponding plugin as its key:

      $container['plugin_data']['my_plugin_name']['my_data'] = $my_value;

  + Added 'logfile' configuration directive to configure path/filename
    of the logfile phpOpenTracker optionally logs warning and error
    messages to.

  * The 'visitors_online' API call now return additional data.

    (Contribution by Jean-Marc Fontaine <jmf@dyingculture.net>)

  * Changes to the MyISAM and MyISAM Merge table creation scripts:

      + Added the 'PACK_KEYS=1' option to the pot_accesslog table
        to enable prefix compression for the 'accesslog_id' column.

      + Re-added the 'DELAY_KEY_WRITE=1' option to all tables.

  * Changes to the PostgreSQL table creation scripts to use the
    correct INT4/INT8 column types instead of INTEGER.

    (Patch by Peter Adams <peter@oncefuture.com>)

  - Deprecated the 'delay_key_write' configuration directive.

26-Apr-2004, Version 1.5.0 (Release Candidate 1)

  + Added a new mode of operation to the MySQL Merge Tables handler
    that maintains separate accesslog/visitors tables per day.

12-Mar-2004, Version 1.4.1

  + Added separate database creation scripts for InnoDB, MyISAM and
    MyISAM Merge Tables for MySQL.

  * Renamed the $config variable in conf/phpOpenTracker.php.dist to
    $PHPOPENTRACKER_CONFIGURATION to avoid conflicts between
    phpOpenTracker's configuration container and the tracked web
    application.

  - Deprecated the 'merge_tables_threshold' configuration directive.

25-Jan-2004, Version 1.4.0

  + Added a script to benchmark a phpOpenTracker installation.

  + Added client id to client name mapping configuration.

  * The MySQL database driver now explicitly creates a new
    connection to the database server to prevent the reusal of
    a connection to another database.

  * Optimized the database driver's fetchRow() and query() methods.

  * Refactored the configuration system. It now uses a PHP file
    instead of an INI file.

  ! Changed license from the 'phpOpenTracker Software License' to
    the 'Apache License 2.0', see LICENSE for details.

11-Jan-2004, Version 1.3.3

  * In addition to 'http://' the 'https://' protocol identifier
    is now stripped, too, from refering URLs.

  * Fixed off-by-one-second bug in the phpOpenTracker API's
    Access Statistics plugin's interval calculation routine.

16-Dec-2003, Version 1.3.2

  * Fixed a bug in the phpOpenTracker API plugin for Clickpath
    Analysis that caused at least the 'all_paths' API call to
    work incorrectly.

16-Nov-2003, Version 1.3.1

  * Removed the DELAY_KEY_WRITE=1 directive from the MySQL
    table creation script.

  * Corrected a copy&paste error that prevented the
    num_visitors_online and visitors_online API calls from
    working correctly.

  * Fixed a bug in the MySQL Merge Tables handler.

  * Fixed a bug in CSV result format generation of the top
    phpOpenTracker API call.

02-Oct-2003, Version 1.3.0

  + Several contributions made by Sven Weih <sven@weih.de>

    + Added average_clickpath_length phpOpenTracker API call
      that returns the average clickpath length.

    + Added average_time_between_visits phpOpenTracker API call
      that returns the average time between the visits of
      returning visitors.

    + Added one_time_visitors phpOpenTracker API call that
      returns the number of one-time visitors.

    + Added 'week', 'current_week' and 'previous_week' support
      to the phpOpenTracker API's timerange calculation system.

  + Added average_visits phpOpenTracker API call that returns
    the average number of times returning visitors visited the
    website.

  + Added num_return_visits phpOpenTracker API call that
    returns the number of return visits.

  + Added num_returning_visitors phpOpenTracker API call that
    returns the number of returning visitors.

  + Added num_unique_visitors phpOpenTracker API call that
    returns the number of unique visitors.

  + Added new constraints 'hour' and 'weekday'.

  + Added new result format 'sql' that returns the SQL query
    executed by a phpOpenTracker API call without executing it.

    Currently only the 'top' API call implements this.

  * Added columns 'weekday' and 'hour' to tables pot_accesslog and
    pot_visitors.

  * Changed pot_accesslog.entry_document and pot_visitors.returning_visitor
    from TINYINT(3) to TINYINT(1).

  * Renamed 'visitors' API call to 'visits'.

  * Merged the phpOpenTracker_API_num_visitors_online API plugin
    into the phpOpenTracker_API_visitors_online API plugin.

  * Merged the phpOpenTracker_API_individual_clickpath API plugin
    into the phpOpenTracker_API_clickpath_analysis API plugin.

  * The MySQL database handlers now show the execution time
    of SQL queries when the configuration directive
    'debug_level' is set to '2'.

  * Added rules to recognize GNOME Epiphany and Mozilla Firebird
    browsers.

  * Renamed singleton() methods to getInstance().

15-Sep-2003, Version 1.2.2

  * The setting of the DELAY_KEY_WRITE table option can now be
    turned off when using the MySQL Merge Tables handler.

  * Changed the phpOpenTracker API plugin loader to ignore
    temporary files with leading "#" and trailing "~"
    characters.

    (Patch by Tim Wood <tim.wood@compuComFed.com>)

  * Added compatibility hack for current PHP 5 development
    versions.

30-Aug-2003, Version 1.2.1

  * The phpOpenTracker::log() method may no longer be called more
    than once per request. The previously available possibility
    to do so suggested functionality that is not intended.

  * Unified quoting of SQL values for compatibility with non-MySQL
    database systems.

  * Fixed several issues with the Web Bug.

  * Fixed PostgreSQL table creation script.

    (Patch by Jean-Christian Imbeault <jc@mega-bucks.co.jp>)

  * Fixed warnings in phpOpenTracker_Container and
    phpOpenTracker_API_returning_visitors.

  - Removed the split_tables.php and webservice.php scripts
    (that never really worked).

09-Jul-2003, Version 1.2.0

  + Added support for MySQL Merge Tables.

  * The client_id can now be changed during a visitor's session.

  * Merged phpOpenTracker API plugins 'page_impressions' and
    'visitors' into one plugin, called 'access_statistics'.

  * Several changes to the database schema:

    * Changed ENUM('0','1') columns to TINYINT(3) UNSIGNED.

    * Rearranged the indexes.

    - Dropped the 'client_id' column from the pot_accesslog table.

    ! If you're upgrading from a previous phpOpenTracker version you
      need to update the database schema.

      An update script for MySQL can be found in the
      the docs/sql/mysql/update/ directory.

  * Several changes to the configuration container:

    + Added support for built-in default values.

    + Added API to dynamically change configuration directives.

    * The parsed representation of the phpOpenTracker.ini configuration
      file is now cached in the session.

  * Several changes to the Web Bug:

    + Added additional parameter document_url.

    * Fixed situation where false data was logged due to missing data.

  * Added triggers to the PostgreSQL database schema to prevent
    duplicate key errors.

    (Patch by Jean-Christian Imbeault <jc@mega-bucks.co.jp>)

  * Plugins for the phpOpenTracker Logging Engine now have access to
    the Logging Engine's current parameters through $this->paramaters.

  * Changed the phpOpenTracker_Parser class code to accept rule files
    even more similar to the original ModLogAn ones.

  * Replaced unnecessary 'require_once' calls with 'require', thus
    avoiding the overhead incurred by 'require_once'.

19-Apr-2003, Version 1.1.5

  * Improved performance of the 'visitors' phpOpenTracker API call.

  * Fixed an off-by-one bug in the phpOpenTracker API plugin for
    Clickpath Analysis.

  * Fixed a warning in the phpOpenTracker API plugin for Clickpath
    Analysis that occured in situations where no clickpath is found.

  * Removed obsolete code from phpOpenTracker API plugin
    infrastructure.

26-Mar-2003, Version 1.1.4

  + Added missing implementation of 'document' constraint.

  * Changed generation of the accesslog_id to circumvent the behaviour
    of PHP's session extension where a Session ID that is associated
    with an existing, but expired session is used to start a new
    session.

16-Mar-2003, Version 1.1.3

  * The phpOpenTracker API 'top' API call was broken in the
    previous release due to a merge-from-head (MFH) gone bad.

  * Fixed a bug in the simple_report example.

13-Mar-2003, Version 1.1.2

  * Fixed a bug in the 'top' API call.

12-Mar-2003, Version 1.1.1

  * Fixed the passing of the client_id parameter to internal
    phpOpenTracker API calls for the 'page_impressions', 'visitors' and
    'visitors_online' API calls.

  * Fixed a bug in the Oracle database driver.

    Patch by Joerg Behrens <behrens@takenet.de>.

27-Feb-2003, Version 1.1.0

  + Added a generic system to constrain phpOpenTracker API queries to
    visitor groups.

  * Removed 'document' parameter from the 'page_impressions',
    'plot_access_statistics', 'plot_top' and 'num_visitors_online' API
    calls in favour of the new, more generic constraints system.

  * Fixed a warning in phpOpenTracker_Parser::userAgent() that occured
    when HTTP_USER_AGENT contains no braces.

    (Reported by Arpad Tamas <sts@mail.xubion.hu>)

  * Fixed a parse error in the MSSQL database driver.

  ! The removal of the 'document' parameter from the 'page_impressions',
    'plot_access_statistics', 'plot_top' and 'num_visitors_online' API
    calls breaks backwards compatibility.

    If you used the 'document' parameter with the above mentioned
    API calls replace it with

      'constraints' => array(
        'document' => 'name or url of document'
      )

08-Jan-2003, Version 1.0.6

  * Refactored the phpOpenTracker Logging Engine plugin system.

  * The client_id is now added to the name of the cookie that is used to
    track returning visitors.

    This ensures unique cookie names for multiple sites tracked by one
    installation of phpOpenTracker.

  * Fixed a bug in the phpOpenTracker API Query Cache that caused queries
    without a timerange limitation to be cached.

  * Fixed a bug in the 'returning_visitors' API call that occured when
    no returning visitors where found for the given timerange, for
    instance when track_returning_visitors is disabled.

  * Changed the GraphViz markup generation so that individual clickpaths
    like "A -> B -> A -> B" get rendered correctly.

  * Improved the performance of the match() and readRules() methods of
    the phpOpenTracker_Parser class.

20-Dec-2002, Version 1.0.5

  + Added 'returning_visitors' API call that returns information on
    returning visitors.

    (Feature Request #652693 by Jens S. Benecke <jens@jensbenecke.de>)

  * Several fixes to the 'plot_top' phpOpenTracker API plugin:

      * Synched with the underlying 'top' phpOpenTracker API plugin.

      * Synched with recent JPGraph API changes.

    The phpOpenTracker API calls provided by 'plot_top' were broken
    in previous versions.

  * Refactored the phpOpenTracker API plugin for Clickpath Analysis.

  * Renamed 'visits' API call to 'visitors', keeping 'visits' as an alias for
    backwards compatibility.

  * Removed stray comma from phpOpenTracker/conf/hosts.ini that was added
    by accident before the previous release and caused a PHP warning.

  * Improved PHPDoc tag based documentation of the source code.

    Source code documentation generated with Doxygen can be found at
    http://www.phpOpenTracker.de/apidoc/.

11-Dec-2002, Version 1.0.4

  + Added a parameter 'font_size' to the API calls wrapped by
    phpOpenTracker::plot().

    The default font settings for JPGraph are now FF_VERDANA (font),
    FS_NORMAL (font_style), 10 (font_size).

  + Added two parameters, 'exit_targets' and 'referers', to the
    'all_paths' API call.

    When set to true, exit target and referers are included in the
    analysis respectively.

  + Added three parameters, 'document_color', 'exit_target_color' and
    'referer_color' to the 'all_paths' API call.

    They respectively set the color to be used for the three types of
    nodes in GraphViz markup.

  * Improved Cache ID generation for the phpOpenTracker API Query Cache.

  * Fixed a bug in the 'plot_access_statistics' API call.

  * Fixed a bug in the 'all_paths' API call.

  * Changed the webbug.js and image.php scripts to use BASE64 encoding
    for the transport of the refering URL. This allows for the correct
    handling of HTTP GET parameters in the refering URL.

  - Dropped support for XML result formats from phpOpenTracker API calls
    'all_paths', 'longest_paths', 'shortest_paths', 'top_paths'.

    If you need to generate XML markup for the results of this API calls
    use the 'array' result format which returns an array of
    objects of the phpOpenTracker_Clickpath class that provides the
    appropriate toXML() method.

  ! Version 1.0.1 of PEAR package Image_GraphViz is now required for
    clickpath visualization using AT&T's GraphViz software.

06-Dec-2002, Version 1.0.3

  + Added two parameters to the phpOpenTracker API to ease the definition
    of arbitrary timeranges to which a query shall be limited to.

  * Fixed a bug in the phpOpenTracker API's Query Cache code.

  * Fixed some leftovers in the phpOpenTracker API plugin for Clickpath
    Analysis regarding the switch to version 0.4 of the Image_GraphViz
    PEAR package.

  * Renamed 'restrain_field' and 'restrain_value' parameters to
    'constraint_field' and 'constraint_value'.

04-Dec-2002, Version 1.0.2

  * Fixed a bug in the phpOpenTracker API plugin for Clickpath Analysis
    that prevented correct operation of clickpath queries limited to
    given start and/or end documents.

  * A phpOpenTracker installation can now be configured separately
    for each site tracked by it by setting the POT_CONFIG_PATH
    constant to the directory that contains the configuration files
    to be used.

    (Patch by Christian Stocker <chregu@bitflux.ch>)

  * Changed the phpOpenTracker API's Query Cache to use PEAR's
    Cache_Lite package instead of the Cache package.

  * Synched phpOpenTracker_Clickpath with API changes in PEAR's
    Image_GraphViz package.

  ! Version 1.0.1 of PEAR package Cache_Lite is now required in
    order to use the phpOpenTracker API's Query Cache.

  ! Version 0.4 of PEAR package Image_GraphViz is now required
    for clickpath visualization using AT&T's GraphViz software.

23-Nov-2002, Version 1.0.1

  * Fixed a bug that prevented correct operation of plugins.

  * Fixed a bug in the PostgreSQL database schema.

  * Fixed a bug in the phpOpenTracker WebService.

    (Patch by Philip Olson <philip@cornado.com>)

03-Nov-2002, Version 1.0.0

  * Fixed a bug in the logging of outgoing links.

  * Refactored Logging Engine.

  * Reorganized directory structure.

  * Changed location of error.log logfile.

  - Deprecated 'session_lifetime' configuration directive as it
    was no longer used.

  ! First "final" release.

01-Sep-2002, Version 0.9.12

  * Logging Engine "post" plugins are now called before the data is
    stored into the pot_visitors table.

  * Fixed handling of "document_url" handling, when Logging Engine
    invoked by web-bug.

  * Fixed a bug in phpOpenTracker_Parser::match().

01-Sep-2002, Version 0.9.11

  + Added configuration directive to turn off user_agent
    grouping / parsing.

  * The MySQL handler now uses mysql_real_escape_string(), if it is
    available, instead of mysql_escape_string().

  * Moved configuration file(s) to new directory conf/.

  * Fixed a bug in Clickpath::toGraph() that caused the GraphViz
    markup of a clickpath to contain only one item.

    (Patch by Felix Richter <richter@jakota.de>)

  * Removed PRIMARY KEY constraint on accesslog_id column in pot_add_data
    table to allow for multiple data sets to be stored.

  * Added rules to recognize more operating systems and user agents.

  * Added rules to block more robots and spiders.

30-Jun-2002, Version 0.9.10

  + The $_SERVER['HTTP_USER_AGENT'] string is now parsed for
    Operating System and User Agent information that is stored
    separately in order to allow for separate statistical analysis
    of the data.

    The database schema needed to be changed yet again to allow
    for this improvement.

    Much thanks is due to Jan Kneschke <jan@kneschke.de> for
    explaining the ModLogAn way of doing the parsing.

  + Added support for MS SQL Server 2000.

    (Patch by Christopher Hughes <christopher.hughes@cancom.com>)

  + Added apiPluginLoaded() method to phpOpenTracker class.

  * $container['document_url'] and $container['referer_orig'] are
    now urldecode()d.

  * Removed truncate_hostname mechanism in favour of hostname grouping,
    which can be controlled through the 'group_hostnames' configuration
    directive.

  * Removed trailing ';' from all SQL queries.

  * Fixed a copy&paste bug in the Oracle database layer.

    (Reported by Lars Pohlmann <malana@users.sourceforge.net>)

  * Fixed a bug in the visitors_online phpOpenTracker API plugin.

  * Fixed a bug in the plot_access_statistics phpOpenTracker API plugin.

  * Several changes to the simple_report example:

    + Added 'Top Search Engines' and 'Top Search Keywords' statistics.

      This only works if the phpOpenTracker Search Engines Plugin is
      installed and enabled.

    + Added 'Current Activity' page based on the 'visitors_online'
      phpOpenTracker API call.

    + Added anchors to ease the navigation between different
      statistics.

      (Requested by Jrg Behrens <joerg.behrens@php-ev.de>)

    * Fixed a bug that prevented correct operation when
      register_globals is disabled.

    ! The release cycle for phpOpenTracker 1.0.0 has been suspended
      due to the number of changes since the previous release
      candidate.

03-May-2002, Version 1.0.0-RC2

  * Fixed PostgreSQL database schema.

  * Bail out if database handler cannot be loaded.

  * phpOpenTracker now requires PHP 4.2.1 (or higher).
    This is because of a bug in the session extension that was
    not fixed in PHP 4.2.0.

20-Apr-2002, Version 1.0.0-RC1

  + phpOpenTracker releases are now packaged using the PEAR Packager and
    can be installed using the PEAR Installer.

  + Added optional parameter 'document' to the 'plot_access_statistics' API
    call.

  + Added result format 'graphviz_object' to API calls that already
    supported 'graphviz'.

  + The PHPOPENTRACKER_VERSION constant, which is now registered on
    startup, contains detailed information on the phpOpenTracker version
    installed.

  * The phpOpenTracker plot_* API calls now use the JPGraph library,
    instead of VAGRANT.

    If you want to use this functionality, you need to download
    (http://www.aditus.nu/jpgraph/) and install JPGraph 1.6.2
    (or later).

  * Rewrote the handling of entry and exit documents, as well as exit
    targets.

    It is now possible to use the log/exit.php script with exit targets
    that are opened in a new browser window. Furthermore, an arbitrary
    number of exit document / exit target combinations is now tracked
    for each visitor.

    In order to accomplish this the database schema had to be changed.

  * Changed the configuration parser to throw an error when the
    configuration file cannot be loaded.

  * Rewrote the 'simple_report' example.

  * Made the logging of error and warning messages to a logfile
    optional.

  * Fixed a bug in the exit.php script.

  * Fixed a bug in the 'all_paths' API call.

    (Reported by Joerg Linder <linder@interface.co.at>)

  * Events in the error.log are now timestamped.

  * Synched german translation of the manual with the english version.

  * phpOpenTracker now requires PHP 4.2.0 (or higher). This is mainly
    due to a bug in PHP 4.1.X.

    For details on the bug, see
    http://sourceforge.net/tracker/?func=detail&atid=101716&aid=508726&group_id=1716

  - Removed the custom session handler.

    This feature has never performed as expected.

  - Removed bundled PEAR packages.

    As of the PHP 4.2.0 release, the PEAR Installer ships in a working
    version with each release of PHP, so it makes no longer sense to
    ship these packages together with phpOpenTracker.

07-Feb-2002, Version 0.9.9-pl1

  + Added 'exit_on_fatal_errors' configuration directive.

  + Implemented XML Result Format in 'visitors_online' phpOpenTracker
    API call.

  * Changed the error handler to log error and warning messages to a
    logfile, named 'error.log', when the configuration directive
    'debug_level' is set to '0'.

  * Fixed a bug in the phpOpenTracker API that prevented API calls to
    work that did not supply a timerange by either $parameters['range']
    or $parameters['start'] and $parameters['end'].

  * Fixed the phpOpenTracker API's Query Cache.

  * Fixed log/image.php.

    (Reported by gorgo_@users.sourceforge.net)

  * Fixed simple_report example.

  * Fixed bundled PEAR XML_Tree package.

  * Changed the plugin loader to issue a warning when a plugin could
    be loaded.

  * Removed some old cruft from the codebase.

31-Jan-2002, Version 0.9.9

  + Added a means to pass arbitrary, additional user data to the
    phpOpenTracker Logging Engine that will be stored in a separate
    database table.

    You can either use the web-bug to pass this data or write a plugin
    for the phpOpenTracker Logging Engine. Examples for both methods
    are provided.

  + Both the phpOpenTracker Logging Engine and the phpOpenTracker API
    can now be extended through a plugin interface.

  + Added a plugin for the phpOpenTracker Logging Engine to interface
    with Jan Kneschke's localizer.

    Localizer enables phpOpenTracker to retrieve information on a
    visitor's city and ISP from his IP address. Information on
    localizer can be found at http://jan.kneschke.de/projects/localizer/.

  + Added a plugin for the phpOpenTracker Logging Engine to parse
    the HTTP_REFERER string for search engine information.

    The plugin stores information about what search engine was queried
    for which keywords into a separate table. The corresponding
    phpOpenTracker API plugin provides statistical analysis on the
    most commonly used search engine and / or the most commonly used
    keywords to find the site tracked by phpOpenTracker.

  + Added pie chart plotting for top 'document', 'entry_document',
    'exit_document', 'exit_target', 'host', 'referer' and 'user_agent'
    result sets.

  + phpOpenTracker API calls 'page_impressions', 'longest_paths',
    'shortest_paths', 'top_paths', 'top', 'visits' and 'visitors_online'
    can now optionally return their result in XML markup or as an XML
    tree object.

  + phpOpenTracker API calls 'page_impressions', 'top' and 'visits' can
    now optionally return their result as Comma Separated Values (CSV).

  + Resolving of data identifiers (data_id) to the actual string values
    can now be optionally turned off for 'individual_clickpath',
    'longest_paths', 'shortest_paths', 'top_paths' and 'top' API calls.

  + Added HTTP GET parameter filter as an alternative to the
    clean_query_string operation. While setting clean_query_string=On
    cleans the document's URL of any HTTP GET parameters, you can
    use the get_parameter_filter to define a list of HTTP GET
    parameters that you would like to be stripped from the URL.

  + Added 'document_url' column to pot_documents table.

  + Added 'longest_paths' API call.

  + Added german translation of the manual.

  * Renamed $parameters['mode'] to $parameters['api_call'] in calls to
    phpOpenTracker::get() and phpOpenTracker::plot().

    While this is more intuitive, it also breaks backwards
    compatibility.

  * Redesigned configuration system.

  * phpOpenTracker API call 'visitors_online' now returns clickpaths
    information for each visitor currently online.

  * Renamed 'no_returning_visitors' parameter to 'returning_visitors'
    in 'visits' API call.

  * Renamed 'no_subpaths' parameter to 'subpaths' in clickpath
    analysis API calls. Per default, the analysis of subpaths is now
    disabled.

  * Removed POT_DEBUG configuration directive in favour of
    debug_level to allow for several levels of debug output.

  * The simple_report example now uses PEAR/HTML/TINX as its
    template engine.

  * Fixed a bug that caused the wrong client_id to be used in some
    phpOpenTracker API Calls.

  * Fixed the PostgreSQL database schema.

  * Fixed the custom session handling.

  * The database user no longer requires 'CREATE TABLE' privileges.

  * phpOpenTracker no longer requires privileges to execute PHP's
    ini_set() function, which is disabled by some ISPs.

  * Optimized database indexing.

  - Removed MySQL Tuning Mode.

    The MySQL Tuning Mode used 'INSERT DELAYED' and 'UPDATE
    LOW_PRIORITY' to avoid blocking of database queries unrelated to
    phpOpenTracker and to increase overall performance of the
    phpOpenTracker Logging Engine.

    A better performance increase is achieved by using the
    'DELAY_KEY_WRITE=1' option when creating the tables. This is also
    safer than using INSERT DELAYED and UPDATE LOW_PRIORITY.

  ! phpOpenTracker now requires PHP 4.1.0 (or higher).

15-Oct-2001, Version 0.9.8

  + Added phpOpenTracker::get() and phpOpenTracker::plot() methods.

    These two can be called instead of phpOpenTracker_API->get() and
    phpOpenTracker->plot() and don't require an object instance of
    phpOpenTracker_API.

  + Added regular expression based locking locking mechanism.

    If a request is initiated by/from one of a list of hostnames,
    referers and user agents that you don't want to be tracked, the
    logging engine ignores the request. With this feature you can
    easily lock out search engine crawlers and other robots.

    This new locking mechanism uses a configuration file, which saves
    one database query per request.

  + Added custom session handler.

    With its own session handling enabled, phpOpenTracker only
    performs two database queries per session and updates its database
    when the garbage collection is run.

  + Added a means to invoke phpOpenTracker through a HTML <img> tag, a
    so called "web-bug".

    This allows for the tracking of static pages and the installation
    of phpOpenTracker on a dedicated server.

  + Added POT_RESOLVE_HOSTNAME configuration directive to turn on/off
    the resolving of hostnames.

  + Added POT_CLEAN_REFERER_STRING configuration directive to turn
    on/off the stripping of HTTP GET parameters from the referer's URL.

  + Added logging of returning visitors.

  * Large parts of the code have been rewritten and the database
    schema had to be changed to allow for the huge performance gain
    introduced with this version of phpOpenTracker and for future
    feature additions.

    The clickpath analysis now works solely on the pot_accesslog
    table, the time-expensive build-up of a separate table for the
    clickpath information is no longer needed.

  * phpOpenTracker now uses the $_COOKIE, $_GET and $_SERVER arrays,
    that were introduced with PHP 4.0.7, to access the respective
    variables. This allows for the use of phpOpenTracker in PHP
    environments where register_globals is turned off.

    In this release of phpOpenTracker, backwards compatibility to PHP
    4.0.5 is maintained through a 'hack' that results in a small
    performance hit.

    The next phpOpenTracker release will require PHP 4.0.7 (or
    higher).

  * Renamed 'hits' to 'page impressions'.

  - Removed phpOpenTracker_Clickpath_Analysis and phpOpenTracker_Graph
    classes. Their functionality has been merged into the
    phpOpenTracker_API class.

  ! This version of phpOpenTracker requires PHP 4.0.5 (or higher). If
    you want to use it with a PostgreSQL database, you'll need PHP 4.0.7
    (or higher).

  ! Changed license from the 'GNU Lesser Public License (LGPL)' to the
    'phpOpenTracker Software License', see LICENSE for details.

29-Jul-2001, Version 0.9.7-pl1

  * Automatically cache phpOpenTracker_API->get() results if it's sure
    that they're not going to change. This feature is highly
    experimental and turned off by default in config.php.

  * Fixed a misbehaviour that caused PEAR/Cache to be loaded when not
    needed or wanted.

  - Dropped support for PEAR/DB.

    phpOpenTracker is now beeing developed and tested with MySQL,
    Oracle/OCI8 and PostgreSQL.

  - Dropped support for databases that don't support
    'COUNT(DISTINCT())' queries.

  - Removed phpOpenTracker_Report class, it had no place in the
    upcoming LOGML- based reporting framework.

05-Jul-2001, Version 0.9.7 (LinuxTag Release)

  * The creational design patterns 'factory' and 'singleton' are now
    used to create instances of phpOpenTracker's classes.

  * Made phpOpenTracker->get() method cacheable using PEAR/Cache.

  * Released at LinuxTag, www.linuxtag.org.

16-Jun-2001, Version 0.9.7-dev-pl2

  * The distribution archive was put together incorrectly.

  * Prefix table names per default with 'pot_'.

15-Jun-2001, Version 0.9.7-dev-pl1

  + Added 'POT_DB_PORT' configuration directive.

  * Fixed include_path handling. You can now pass the absolute path to
    phpOpenTracker's include directories to the phpOpenTracker()
    function.

    (Reported by Mark Kronsbein)

  * Fixed a bug which caused SQL queries to be put together in a
    syntactically incorrect way in rare cases.

    (Reported by Michael Wihsboeck)

14-Jun-2001, Version 0.9.7-dev

  + Added 'Top Entry Pages' query to phpOpenTracker_API. A new table
    'entry_pages' was added due to this. The 'exits' table was renamed
    to 'exit_pages' for consistency reasons.

  + Added 'exit_document', 'exit_target' modes to 'top' API call.

    The 'exit_pages' table needed to be expanded to allow for these
    operations.

  + Added optimized database layer for MySQL and PostgreSQL.

    PEAR/DB is no longer needed in order to use phpOpenTracker with
    either MySQL or PostgreSQL.

  + Added 'Simple Report' example.

  * Several bug fixes.

26-May-2001, Version 0.9.6

  + Added phpOpenTracker_Report class.

    This class contains the functionality to perform batch queries to
    the gathered data through phpOpenTracker_API and returns the
    result as XML (either as a xml_tree object or as text) or as an
    array.

  + Added phpOpenTracker_Graph class.

    This class visualizes a report array, generated by
    phpOpenTracker_Report using the VAGRANT
    (http://vagrant.sourceforge.net/) package.

  * Several bug fixes.

19-May-2001, Version 0.9.6-dev

  * phpOpenTracker is now multi-client enabled.

  * Database Abstraction is now handled by either PEAR/DB or ext/dbx.

  * Rewrote large parts of phpOpenTracker_Core and
    phpOpenTracker_Logger. Rearranged interfacing between the various
    phpOpenTracker classes.

26-Feb-2001, Version 0.9.5

  + Added MYSQL_TUNING mode.

  * Startup code streamlined. Less SQL queries needed.

31-Jan-2001, Version 0.9.4

  * Minor fixes and improvements here and there.

14-Jan-2001, Version 0.9.3pl1

  * Fixed a bug in the database structure for MySQL.

23-Dec-2000, Version 0.9.3

  + Added access_data().

  * Transition from PHPLIB/DB_Sql to PEAR/DB.

  * setup_access_data() is now called only once, the result of this
    call is cached for later usage.

30-Nov-2000, Version 0.9.2

  * Fixed two minor bugs that slipped into 0.9.1.

27-Nov-2000, Version 0.9.1

  * phpOpenTracker_Clickpath_Analysis class rewritten

  * Reorganised the directory structure.

  * phpOpenTracker is now compatible with Oracle.

09-Oct-2000, Version 0.9.0

  * First preview release.
