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