Revision history for Perl extension OpenInteract.

1.2  Tue Aug 28 17:20:44 EDT 2001

Overall:

This release has a number of substantial changes. If you're upgrading,
please read 'UPGRADE' in the distribution directory.

 * Multiple datastore handles:

   - You can now setup and use multiple datastore (including DBI)
   handles for objects, so your data can be in as many databases as
   you require. This entails changes to your server configuration file
   even if you're not using this feature, please see the entry for
   'conf/sample-server.perl' below.

 * Tighter Template Toolkit support:

   - OpenInteract now includes a Template Toolkit provider to deliver
   templates from the filesystem or database, as well as a TT Plugin
   to provide more consistent (and extensible) template behavior
   functions. If you're upgrading you need to run a script to
   translate old templates to new.

 * LDAP support:

   - LDAP can now be used as a datastore. Thanks to MSN Marketing
   Service Nordwest GmbH for funding development! See doc/LDAP.html
   for more information about setting up and using LDAP.

 * DBI session support consolidated:

   - All DBI session management uses one class now; if you're
   upgrading, see the entry for 'conf/sample-server.perl' below for a
   configuration modification

Individual:

 * conf/sample-httpd_static.conf:

   - Allow the front-end proxy server to deal with '/robots.txt'
   requests. (Also with '/default.ida' Code Red requests...)

 * conf/sample-httpd_modperl.conf:

   - Add pointer to the standalone mod_perl configuration file

 * conf/sample-httpd_modperl_solo.conf:

   - Create new configuration file for running OpenInteract in a
   standalone mod_perl environment (no proxy frontend). Thanks to
   Stephen Adkins <stephen.adkins@officevision.com> for pointing out
   the usefulness of this.

 * conf/sample-server.perl:

   - Overall: Lots of changes were made to the sample
   configuration. If you're upgrading it might be a good idea to open
   the sample configuration and your existing configuration
   side-by-side, copying values from your existing configuration to
   the sample as appropriate.

   - See UPGRADE for specific changes.

 * eg/template_translate.pl:

   - Added standalone script to translate old templates to new
   templates. This only works on files in the filesystem, and you
   shouldn't need to run it for system packages.

 * OpenInteract.pm:

   - allow users to put OI under different location root -- note that
   we DO NOT rewrite outbound URLs yet; this just ensures that if OI
   is under <Location /oi> that a request for '/oi/User/' gets mapped
   to the '/User/' action

   - paranoid inclusion of stash/other module 'require' calls

   - removed method _connect_to_database(). Datastore (DBI and LDAP)
   connections are now made on demand (in OpenInteract::Request)
   rather than all at the beginning of a request. The first time a
   handle is needed the connection is made, thereafter it's kept in
   the stash class.

   - removed method _setup_context() since it was a relic of a
   group_context scheme attempted a while ago. We might bring it back
   but there's no reason to have it around now.

 * OpenInteract/Auth.pm:

   - Set the result of $user->id rather than $user->{user_id} into the
   session after a successful login. (Thanks to Andreas Nolte.)

 * OpenInteract/Error/System.pm:

   - Put 'package' with all templates being called.

 * OpenInteract/LDAP.pm:

   - Created central class to connect/bind to LDAP directories

 * OpenInteract/Package.pm:

   - Updated 'check()' -- called from 'oi_manage check_package' -- to
   determine if data import files are valid Perl data structures (also
   added 'read_data_file()' for this purpose)

   - Modified 'check()' to pass the right directory to read the
   package configuration

   - Updated 'check()' -- called from 'oi_manage check_package' -- to
   determine if the templates in a package are syntactically
   valid. This doesn't mean they'll do what you want, only that
   they'll parse.

 * OpenInteract/Request.pm:

   - Updated to enable both DBI and LDAP handles to be requested (and
   stored in the stash) by a connection key.

   - Moved connection logic from OpenInteract.pm to here so we can
   return DBI and LDAP connections on demand rather than creating them
   all at once.

 * OpenInteract/Session/DBI.pm:

   - Added functionality to detect when we're using MySQL as a session
   store and put the extra parameter ('LockHandle') in.

 * OpenInteract/Session/MySQL.pm:

   - Removed. Use 'OpenInteract::Session::DBI' for all DBI session
   management now.

 * OpenInteract/SPOPS.pm:

   - Removed 'global_db_handle()' and moved to OI/SPOPS/DBI.pm. Note
   that ALL objects previously using 'OpenInteract::SPOPS' should now
   use 'OpenInteract::SPOPS::DBI'.

 * OpenInteract/SPOPS/DBI.pm:

   - Created subclass of OI::SPOPS specifically for objects using
   SPOPS::DBI

 * OpenInteract/SPOPS/LDAP.pm:

   - Created subclass of OI::SPOPS specifically for objects using
   SPOPS::LDAP

 * OpenInteract/SQLInstall.pm:

   - Created new data transformation 'transform_default_to_id' that
   allows you to tag fields in your data import and specify values for
   these fields that are keys in the 'default_objects' hash in your
   server configuration. See
   pkg/base_group-x.xx/data/install_security.dat for an example.

 * OpenInteract/Template.pm:

   - Added deprecation warnings (will remove the class soon).

 * OpenInteract/Template/Toolkit.pm:

   - Added deprecation warnings (will remove the class soon).

 * OpenInteract/Template/Context.pm:

   - Added new class: Added custom context so we can avoid the TT
   template naming syntax of 'prefix::thingy'

 * OpenInteract/Template/Plugin.pm:

   - Added new class: Take all the behaviors out of OI::T::Toolkit,
   add some new ones, revisit the old ones, add lots of documentation.

 * OpenInteract/Template/Process.pm:

   - Added new class: Port the 'handler()' and 'initialize()' methods
   from OI::T::Toolkit

 * OpenInteract/Template/Provider.pm:

   - Added new class: Move all the file-or-object finding stuff from
   OI::Template here, plus take advantage of TT caching, compiling,
   etc.

 * OpenInteract/UI/Main.pm:

   - Updated to use base template name in 'package::name' format. This
   way your base template doesn't need to be in the 'base_theme'
   package.

 * script/oi_manage

   - Added (and documented!) new action 'update_object', which simply
   fetches all instances of a particular object class and saves
   them. This is useful if you've implemented a schema change that
   needs a 'save()' to activate a trigger which fills data. For
   instance, a 'last_update' field gets triggered by a save -- by
   running this action you automatically set all objects to a known
   value. Another example would be if your objects use the indexing
   feature of the full_text package -- just run this action and the
   index will be automatically updated.

   - Modified 'test_db' action to check multiple datasources

   - Added (and documented!) new action 'test_ldap' which tests all
   LDAP connections configured for a particular website.

   - Ensure that 'check_package' can check multiple packages at once
   (using the '--package_dir' parameter to specify the root of a
   series of packages)

   - You can now run separate actions with 'install_sql' using the new
   '--sql_action' parameter. This allows people who need to do so to
   run the 'structure', 'data' and 'security' steps
   individually. (Docs added for this too!)

   - Added (and documented!) new action 'list_objects' which lists all
   the objects that can be created in a website.

 * script/template_translate.pl

   - Created script to translate old templates (using
   OpenInteract::Template and OpenInteract::Template::Toolkit) to new
   templates (OpenInteract::Template::Plugin). You must run this to
   make your templates work properly.


   Many packages have changed between versions 1.1 and 1.2. Please see
   the 'Changes' file in each to find out what was modified.

   OpenInteract    1.1  -> 1.2
   ----------------------------
   base:           1.52 -> 1.60
   base_box:       0.23 -> 0.30
   base_component: 1.23 -> 1.25
   base_error:     1.22 -> 1.30
   base_group:     1.16 -> 1.25
   base_security:  1.33 -> 1.45
   base_template:  1.18 -> 1.27
   base_theme:     1.18 -> 1.26
   base_user:      1.23 -> 1.34
   results_manage: 0.02 -> 0.02
   static_page:    1.40 -> 1.49
   system_doc:     1.19 -> 1.24
   classified:     1.19 -> 1.28
   full_text:      1.25 -> 1.26
   news:           1.27 -> 1.33

1.1  Fri Jul 20 07:00:48 EDT 2001

 * Shuffled lots of modules out of the 'base' package and into the
   core distribution:

          OpenInteract.pm
          OpenInteract/Auth.pm
          OpenInteract/Cache.pm
          OpenInteract/Cache/File.pm
          OpenInteract/Cache/IPC.pm
          OpenInteract/Cookies.pm
          OpenInteract/Cookies/CGI.pm
          OpenInteract/Cookies/Apache.pm
          OpenInteract/Error/Main.pm
          OpenInteract/Error/System.pm
          OpenInteract/Handler/GenericDispatcher.pm
          OpenInteract/Session.pm
          OpenInteract/Session/DBI.pm
          OpenInteract/Session/MySQL.pm
          OpenInteract/Template.pm
          OpenInteract/Template/Toolkit.pm
          OpenInteract/UI/Main.pm
          OpenInteract/Utility.pm

   As a result, also moved OpenInteract.pod to OpenInteract/Intro.pod
   since 'perldoc OpenInteract' will bring up the Apache content
   handler class now.

 * New package: 'results_manage'

   - A new package 'results_manage' has been added to the
   distribution. This package makes it simple to persist different
   types of search results from request to request to produce paged
   output, exportable output, etc. The package is still quite young,
   so if you have feedback please email
   openinteract-dev@lists.sourceforge.net.

 * doc/*:

   - Updated all docs -- mostly small changes, but added patch from
   Christian Lemburg (lemburg@aixonix.de) to doc/developer.html
   specifying the recommended method of package development.

 * OpenInteract/ApacheStartup.pm:

  - Added a debugging line so we can know when a PerlChildInitHandler
  is getting run (and for what child).

 * OpenInteract/Package.pm:

   - Thanks to a spot by Reinier Post <rp@win.tue.nl>, you can now
   have multilevel handlers (e.g.,
   'OpenInteract::Handler::Entity1::Handler1') in a package --
   modified the _copy_handler_files() subroutine to use the new
   _create_full_path() subroutine.

   - Create a _clean_package_name() subroutine that ensures a package
   name can be used as a Perl namespace.

 * OpenInteract/SPOPS.pm:

   - Added two methods and ruleset to accommodate new way of referring
   to objects. The new method uses a table 'object_keys' (found in the
   'base' package) and associates a 32-character key with an object
   and class.

   Currently this is only used in the modified 'full_text' package,
   but we expect to change other modules that use a class and object
   ID (object tracking, object security, etc.) to use this scheme
   simply because it saves space and should speed up searches.

 * OpenInteract/Startup.pm:

   - die in setup_static_environment() if we cannot read the base
   configuration information properly. (Generally indicates that the
   directory given wasn't a valid website directory.)

   - add functionality to setup_static_environment() to create the
   superuser if given the password to check against.

   - add method 'setup_static_environment_options()' to check for log
   option '--website_dir' and environment variable OIWEBSITE to pass
   to 'setup_static_environment()', thus saving lots of copy-n-paste
   operations around the globe.

 * OpenInteract/Template.pm:

   - Fixed Sourceforge bug 406291, enabling templates to be read from
   the filesystem. (Paper bag fix -- just made the wrong call to fetch
   the package information from the repository, and it was never
   tested. Doh!)

 * script/oi_manage:

   - Check the return value from $PACKAGE->create_skeleton() to see
   whether the name of the package created differs from the name we
   wanted to create, and let the user know if they're different.

   - Add the directory 'overflow' to that created by the
   'create_website' process.

   - Add the package 'results_manage' to the list of core packages

 * Packages

   Many packages have changed. One of the common additions has been
   the use of the SPOPS::Iterator (or subclass) object to display
   results, as opposed to retrieving a (potentially long) list of
   objects to pass to the template. See the 'Changes' file of each
   package for change details.

   Here are the different versions:

   OpenInteract    1.07 -> 1.1
   ----------------------------
   base:           1.42 -> 1.52
   base_box:       0.20 -> 0.23
   base_component: 1.18 -> 1.23
   base_error:     1.21 -> 1.22
   base_group:     1.16 -> 1.16
   base_security:  1.30 -> 1.33
   base_template:  1.17 -> 1.18
   base_theme:     1.17 -> 1.18
   base_user:      1.21 -> 1.23
   results_manage:  n/a -> 0.02
   static_page:    1.36 -> 1.40
   system_doc:     1.19 -> 1.19
   classified:     1.18 -> 1.19
   full_text:      1.16 -> 1.25
   news:           1.26 -> 1.27


1.07  Sun Jun 10 14:31:36 EDT 2001

 * Overall

   - This version runs on mod_perl/Win32 with a supported database.

   - This version now runs on PostgreSQL (version dependencies
   unknown) along with Sybase ASE, Sybase ASA, and MS SQL
   Server. (This is in addition to MySQL from previously.)

   - This version requires SPOPS 0.40, since it's the first version
   which supports PostgreSQL, along with a few other items.

   - Hopefully debugging is more efficient -- at least when you want
   to turn debugging off. All files have been changed to use the
   following construction:

     $R->DEBUG && $R->scrib( 1, "..." );

   so that (the relatively expensive) scrib() method doesn't even get
   called if debugging isn't turned on for your app.

 * script/oi_manage:

   - fixed typo in method call in remove_template() (thanks to Olaf
   Stauffer <olaf.stauffer@web.de> for spotting)

   - tiny change so that you can call use the action name
   'install-template' and 'install_template' synonymously (anyplace
   you see a '_' you can also use a '-'. Note that this ONLY APPLIES
   TO COMMANDS, not to parameters.

   - added the command 'change_spops_driver' so you can modify the
   drivers (e.g., 'SPOPS::DBI::MySQL' -> 'SPOPS::DBI::Sybase') for
   many objects at once.

   - when you run the 'upgrade_package' command, a file named
   'UPGRADE' will be displayed in the status. You should put any
   package-specific upgrading notes here.

   - ensure that the 'website_name' parameter fits our naming
   conventions (thanks to Nimrod Levy <nlevy@intes.net> for the catch)

   - the 'test_db' command now tries to create a table, which tests
   whether the given user has such permissions.

   - ensure the user running 'install_package' has permission to write
   to the base installation directory and to the base package
   repository.

 * conf/sample-package.pod:

   - Added more headers to the skeleton documentation generated for a
   package.

 * conf/sample-server.perl: 

   - Changed the default cookie processing class to
   'OpenInteract::Cookies::Apache'
   (change from {system_alias}->{'OpenInteract::Cookies'} to
   {system_alias}->{'OpenInteract::Cookies::Apache'}), since right now
   everyone is required to have Apache::Request for parameters
   anyway. Unless you're running Win32, then use
   {system_alias}->{'OpenInteract::Cookies::CGI'} since
   Apache::Request had a few hiccups running there.

   - Added 'long_read_len' and 'long_trunc_ok' in the db_info key.

   - Added 'remember_field' to the 'login' key

 * OpenInteract/DBI.pm:

   - Added {LongReadLen} and {LongTruncOk} as database handle
   properties. **NOTE** If you're upgrading, please add something like
   the following to your conf/server.perl file:

     db_info => {
      ...,
      long_read_len => 65536,
      long_trunc_ok => 0,
     },

   There are defaults defined for these but it's better to make them
   explicit in your configuration. 

 * OpenInteract/Package.pm: 

   - Make various modifications to work under Win32. Primarily to
   check directory specifications and to accommodate the version of
   Archive::Tar that is distributed with ActivePerl.

   - Fix _copy_handler_files() to not replace ALL 'OpenInteract'
   instances in the file/path, just the relevant one (thanks to Olaf
   Stauffer <olaf.stauffer@web.de> for the spot)

   - Small fixes to error reporting (primarily in
   install_distribution())

   - Small fix so we don't copy over coderefs from the
   conf/action.perl and conf/spops.perl files when installing a
   package from the base installation to a website

 * OpenInteract/PackageRepository.pm:

   - Fixed docs for the 'find_file' method to match the
   implementation.

   - Pass the package name from 'find_file' to 'fetch_package_by_name'
   in a hashref rather than by itself (duh)

 * OpenInteract/Request.pm: added 'DEBUG()' method to get (if
   available) application-level debugging and if not, to use the class
   variable 'DEBUG'. This allows '$R->DEBUG && $R->scrib( ... )' so
   that scrib() won't get called if you're not using debugging in your
   app. Cool.

 * OpenInteract/SPOPS.pm: Updated the object tracking save/retrieval
   so that it's not using the 'oid' field any longer.

 * OpenInteract/SQLInstall.pm:

   - Fixed Sybase IDENTITY specification (thanks to Harry Danilevsky
   <hdanilevsky@DeerfieldCapital.com> for pointing it out)

   - Allow user to specify a different database type than the driver
   name (useful if you're using DBD::ODBC with MS SQL Server, which
   uses the SPOPS driver 'Sybase' and the DBD driver 'ODBC')

   - Document the 'field_type' parameter when you're specifying SQL
   statements (rather than SPOPS objects) to be built with the data
   files (thanks to Harry Danilevsky
   <hdanilevsky@DeerfieldCapital.com> for pointing it out)

   - New key in struct files: %%INCREMENT_TYPE%%. This allows you to
   specify linking fields to be the same type -- for instance, an
   IDENTITY field in T-SQL is NUMERIC( x, y ) while an AUTO_INCREMENT
   field in MySQL is an INTEGER, as is a SERIAL (sequence) field in
   PostgreSQL. (Example: 'pkg/base_group/struct/group_table.sql' and
   'pkg/base_user/struct/user.sql' for the increment, then
   'pkg/base_group/struct/link_table.sql' for the increment type.)

 * OpenInteract/Startup.pm: require_module() can now take either an
   arrayref of classes to include or a single class to
   include. (Previously only an arrayref.)

 * doc/database.html: Added some preliminary instructions for creating
   a new database and user to work with OpenInteract -- currently only
   with MySQL and PostgreSQL.

 * Packages

   Many packages have changed. One of the larger-scale changes
   resulted from renaming the 'level' field in the security object to
   'security_level'. See the each individual package's 'Changes' file
   for more details.

   Here are the different versions:

   OpenInteract    1.06 -> 1.07
   ----------------------------
   base:           1.30 -> 1.42
   base_box:       0.14 -> 0.20
   base_component: 1.14 -> 1.18
   base_error:     1.14 -> 1.21
   base_group:     1.11 -> 1.16
   base_security:  1.20 -> 1.30
   base_template:  1.11 -> 1.17
   base_theme:     1.11 -> 1.17
   base_user:      1.15 -> 1.21
   static_page:    1.24 -> 1.36
   system_doc:     1.15 -> 1.19
   classified:     1.12 -> 1.18
   full_text:      1.11 -> 1.16
   news:           1.15 -> 1.26


1.06  Sun Feb 25 15:16:43 EST 2001

 * OpenInteract/Package*: Split out previous OpenInteract/Package.pm
   into OpenInteract/PackageRepository.pm (SPOPS::HashFile object
   representing a package respository) and OpenInteract/Package.pm
   (class methods operating on simple hashrefs representing individual
   packages). In certain ways both are simpler and easier to
   understand, and this allows you to think of and work with a package
   repository as a single item rather than solely on individual packages.

   This has a couple of effects:

     1) GDBM is no longer used by OpenInteract. This was the primary
     motivator behind the change.

     2) You MUST modify all repositories from the old GDBM format to
     the new format. If you run the new 'upgrade' command from
     oi_manage when you download and install this distribution the base
     installation repository will be translated for you. Here's a
     list of commands for a manual upgrade:

       > tar -zxvf OpenInteract-1.06.tar.gz
       > cd OpenInteract-1.06
       > perl Makefile.PL
       > make
       > make test
       > make install
       > oi_manage upgrade --base_dir=/opt/OpenInteract 

     And if you're using CPAN:

       > perl -MCPAN -e shell
       cpan> install OpenInteract::Package
       cpan> exit
       > cd ~/.cpan/build/OpenInteract-1.06
       > oi_manage upgrade --base_dir=/opt/OpenInteract 

     However, after you do this you also need to translate the website
     repositories like this:

       oi_manage upgrade_repository --website_dir=<website-directory>

     If you want to do things the hard way, there's also a script in
     the 'eg/' directory called 'new_package_repository.pl' which will
     translate a package repository from GDBM to the new format.

     3) Any code you've written that operates on packages must be
     redone. Sorry about this, but hopefully not too many people have
     gone scouting around the package repositories in the first place,
     and the benefits outweigh the costs at this relatively early
     stage of OI development.

     Here's a simple example:

     Old: 
        my $pkg = OpenInteract::Package->fetch_by_name( 
                                          { name => 'blah',
                                            directory => '/blah/blah' });

     New:
        my $repository = OpenInteract::PackageRepository->fetch( 
                                          undef, { directory => '/blah/blah });
        my $info = $repository->fetch_package_by_name({ name => 'blah' });

     If you've actually done work with packages and need some help,
     email Chris <chris@cwinters.com> for more detailed guidelines.
    
 * script/oi_manage, OpenInteract/ApacheStartup.pm,
   OpenInteract/Startup.pm, OpenInteract/SQLInstall.pm: Modified
   all functions dealing with packages to work with new system.
 
 * OpenInteract/Package.pm: 

   -- Fixed file handling bug in revised module method
   install_distribution() which checked $_ (empty) rather than
   $p->{package_file}. Thanks to Takanori Ugai <ugai@jp.fujitsu.com>
   for the catch and patch.

   -- Fixed new behavior of remove() which removed the directory in
   addition to the entry from the repository. You can pass in 'remove'
   as the third argument to have it remove the directory, otherwise
   the directory is kept, which was the default behavior before the
   new stuff was written.

   -- Added 'script/' as set of files to be copied over when applying
   a package from the base installation to a website.

 * conf/sample-server.perl: new keys: 

     {session_info}->{expiration} = '+3M',

     (allows you to set a default expiration time for the session
     cookie)

     {system_alias}->{'OpenInteract::PackageRepository'} = 'repository',

     (alias used to reference the repository class)

     {box}->{custom_box_handler} = '',

     (allows you to define a handler to be called on every request to
     create/inspect/modify boxes)

   You'll probably want to copy the items over into your server
   configuration, although this brings up the interesting point as to
   how to insert new configuration options into existing
   websites. Perhaps we need a utility like that used in Win32
   environments with the registry -- you can distribute a simple file
   which is used by oi_manage to insert new keys into a website's
   server.perl file.

 * script/oi_manage:

   -- Modified format to be more readable; added more documentation.

   -- Mdified all calls to 'open_base_config()' to call the routine in
   OpenInteract::Startup

   -- Added checks for 'website_name' in the 'create_website' command,
   since the parameter must refer to a valid Perl package identifier.

   -- Added new action 'upgrade' (just like 'install' but we don't
   create a new directory)

   -- Added new action 'refresh_doc' (allow a website to get the
   latest version of the documentation in the base installation
   directory).

 * OpenInteract/Startup.pm: Modified name of parameter passed into
   'read_base_config()' (shouldn't affect anyone); added
   'create_base_config_filename()' so we have one place to generate
   it.

 * OpenInteract/SPOPS.pm: added the URL to view the object to the
   email sent by notify()

 * doc/admin.html: Cleaned up and added some more information

 * Several packages were also modified, but each of these has its own
   changelog for the specific changes. Many of the changes were quite
   small, including conf/spops.perl modifications to accommodate
   changes in SPOPS key generation (add an 'increment_field => 1' for
   those classes using a MySQL AUTO_INCREMENT field).

   base:           1.20 -> 1.30
   base_box:       0.13 -> 0.14
   base_component: 1.11 -> 1.14
   base_error:     1.13 -> 1.14
   base_group:     1.10 -> 1.11
   base_security:  1.18 -> 1.20
   base_template:  1.09 -> 1.11
   base_theme:     1.09 -> 1.11
   base_user:      1.14 -> 1.15
   static_page:    1.21 -> 1.24
   classified:     1.07 -> 1.12
   full_text:      1.09 -> 1.11
   news:           1.13 -> 1.15


1.05  Thu Feb  1 00:26:14 EST 2001

  Added 'setup_static_environment' to OpenInteract/Startup.pm -- this
  makes it *incredibly* easy to setup an OI environment outside of
  Apache/CGI/Web-whatever, allowing you to do data reporting, import,
  export, etc. 

  Refactored (not 100%, but still pretty well) OpenInteract/Package.pm
  to be easier to understand, including breaking up longer 'meaty'
  subroutines into easier-to-digest versions. Added lots of POD
  documentation as well.

  Added website installation message to 'oi_manage' and modified it to
  display an 'INSTALL' file whenever the package is installed to a
  website (either via 'upgrade' or 'apply'). This means that package
  authors can alert users to potential schema change or other API
  modifications and be sure that users will see this when the package
  is applied/upgraded -- minimize potential user excuses :-)

  The basic OpenInteract documentation (included with the Perl
  distributed in 'doc/') is now copied over to the OpenInteract base
  installation directory (when you do 'oi_manage install') and is
  copied from there to a website's HTML directory when you create a
  new one. This means that the HTML OI documentation is available when
  you first fire up your browser to see your website.

  Lots of modifications to many packages, including the addition of a
  new package to the core OpenInteract family: base_box. Let's give
  him a big hand!


1.04  Thu Dec 21 01:01:14 EST 2000

  Modified OpenInteract/Package.pm to accommodate earlier versions of
  Archive::Tar, which had very different interfaces. Added some more
  items to the PREREQ piece of Makefile.PL and scrapped the
  'INSTALLSCRIPT' option to let MakeMaker put the bin files in the
  "right" place. 

  **NOTE -- this means you should remove all older versions of
  'oi_manage' that might be someplace like '/usr/local/bin'**

  We now require version 2.00 of the Template Toolkit. Version 1.06+
  might still work, but it's no longer actively supported.

  Modified scripts/oi_manage to implement a 'list_actions' command,
  which reads in all your website action.perl files and then tells you
  all the actions programmed in the system and which package the
  action comes from.

  Many changes to various packages -- see the changelogs for
  'base', 'base_security', 'base_theme', 'static_page' and several
  others.


1.03  Nov 30 2000

  Added some modifications to when you install OpenInteract and when
  you create a new package (OpenInteract/Package.pm;
  script/oi_manage). Modified documentation in the Developer and Admin
  guides as well as the two INSTALL documents; got that bulky .GIF out
  of the distribution, replacing it with a slightly lame Visio
  drawing (to PNG).

  Relatively minor fixes to the packages news, base_error, base and
  system_doc. See their 'Changes' files for more info.

  Modified scripts/oi_manage to have the same semantics for
  'check_package' as for 'export_package' -- that is, you can chdir to
  the working directory for a package and run the command without any
  parameters and have a check properly performed.

  (minor) Superficial change in just about every file to modify email
  'cwinters@intes.net' to 'chris@cwinters.com'. Also changed all RCS
  '$Header' tags to '$Id'.


1.02  Nov 10 2000

  Package management and oi_manage routines are pretty much rock-solid
  as done from informal testing. We've made new installs and websites
  by the handful and everything has gone well. Added lots of overall
  documentation (in the 'doc/' directory) including targeted guides
  for managers, administrators and developers, plus a glossary, all in
  HTML format. Eliminated a pretty evil bug in the
  'OpenInteract/Template.pm' file of the 'base' package which only
  manifested itself when running more than one website. SQL
  installation has also been smoothed out and tested in numerous
  ways. Lots of other little changes (structure, format, etc.).

  Also made some changes to terminology and enforced it throughout. A
  'base installation' is where you first install OpenInteract (using
  'oi_manage') and a 'server' is the Apache/mod_perl process. A
  'website' is a particular instantiation of OpenInteract with its own
  packages, namespace, etc. The definition for 'package' hasn't really
  changed, but we've made a package kindasorta synonymous with 'tool',
  even though a package can contain more than one tool. 


1.01  Nov 3 2000

  Lots of new things -- massively overhauled package management
  (oi_manage and OpenInteract::Package) including scads of
  documentation and the functions for package removal and upgrade
  capabilities, you can check a package, get a listing of packages
  installed to an application or to the base installation, and can now
  create a 'skeleton' package, which should help out a little bit with
  development; more documentation in the packages distributed with the
  system. You can also add or dump a package's templates, test a
  database connection given the configuration parameters for an
  application, and (more below) install the SQL structures and data
  for a package.

  Added the class 'OpenInteract::DBI' which gives us a central
  location for connecting to a database. Also modified how the
  configuration file is setup wrt database info.

  All 'module.perl' files will hereafter be known as 'action.perl' --
  this is so we can better communicate the concept of the 'Action
  Table' and what it means when you're developing packages and
  applications.

  Added lots of configuration documentation -- see all the files in
  'conf/'. The 'spops.perl' and 'action.perl' files are now
  well-documented and OpenInteract::Package was modified to copy these
  sample files into a new package when a skeleton is created.

  Also modified the 'full_text' scripts for doing certain actions from
  the command-line -- these are good scripts to review if you want to
  create an OpenInteract 'environment' (all the classes created and
  linked, database handle and config object created, etc.) from a
  script rather than from mod_perl.

  Added 'OpenInteract::SQLInstall' and modified all of the packages to
  use its methods as well as translated their incoming structures and
  data to its format. (This was much more work than it sounds like :)

  Numerous other small-to-medium fixes here and there.


1.00  Sep 28 2000

  First public version. Everything is new!