Revision history for Perl extension OpenInteract.

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.

   - 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!