Home | Wiki | OI 1.x Docs | OI 2.x Docs OI logo

NAME

OpenInteract2::Manual::Changes - Significant changes to OpenInteract2

NOTE

Each package maintains its own changelog. These changes are not mentioned here except to note the package version changes with successive OI2 releases.

1.99_04

Major Changes

You can now migrate your 1.x data automatically. The base SQL installation class OpenInteract2::SQLinstall has hooks for doing it yourself or for declaring a few pieces of information which it will use to copy data from table to table or to copy data to SPOPS objects which get saved to tables as normal.

The management task 'migrate_data' (OpenInteract2::Manage::Website::MigratePackageData) is the external hook to this. Run:

 oi2_manage task_info --task=migrate_data

for description and parameter information.

Added basic localization support. See OpenInteract2::Manual::I18N for more information. Note that a number of OI2 classes have been modified to support additional data for i18n infrastructure. Also note: you don't have to use i18n if you don't want to :-)

Added new package 'comments' to core distribution. It implements a simple flat comment thread for any object, so you can have comments on news items, links, documents, users, etc.

Added new package 'whats_new' to core distribution. With this you can register an SPOPS object with the service and track new additions to a central location. So when users click "What's new?" they see new documents, news items, comments, etc.

Added new package 'object_link' to core distribution. This allows you to link arbitrary SPOPS objects based on a set of categories. When you're viewing an object you can pull up a list of related objects and display them in a box, under the main display, whatever.

Minor Changes

HTTP::Daemon::OpenInteract2

Disambiguate 'close()' call on filehandle since we have a 'close()' method.

OpenInteract2::Action::Common*

Added SYNOPSIS documentation displaying all configuration entries

OpenInteract2::Config::Initializer

Added documentation for people wishing to catch the 'localization' event, fired when we generate a new localization class.

OpenInteract2::Config::Package

Add configuration item 'message_file' so users can declare one or more message files.

OpenInteract2::ContentGenerator

Remove unused 'instance_sub' method.

OpenInteract2::ContentGenerator::TT2Context

Move to OpenInteract2::TT2::Context

OpenInteract2::ContentGenerator::TT2Plugin

Add 'require' for Text::Sentence in 'limit_sentences()'. Thanks to Mike Castle for pointing out the error.

Move to OpenInteract2::TT2::Plugin

OpenInteract2::ContentGenerator::TemplateSource

Add new template source type 'message_key' which asks the language handle to lookup the template name (the normal 'package::name' syntax) given a particular key.

OpenInteract2::ContentGenerator::TT2Process

Modify 'initialize()' to save data as state in the content generator object ($self) rather than use class variables and store it in CTX -- the TT object is now a content generator property, not a CTX property.

Configuration data has moved from 'template_process' to 'content_generator' declaration and is pushed into 'initialize()' rather than being pulled from the server config/CTX.

You can no longer specify the methods in 'custom_init_class' and 'custom_variable_class' -- you need to use predefined methods for each ('custom_template_initialize' and 'customize_template_vars', respectively).

OpenInteract2::ContentGenerator::TT2Provider

Move to OpenInteract2::TT2::Provider

OpenInteract2::Context

Add method 'lookup_mail_config' as shortcut into 'email' configuration.

Add step during setup() 'initialize messages' to read in the localized messages from all packages.

Modify docs for lookup_content_generator_config() (only returns class associated with name) and content_generator() (clarify what's returned).

Remove 'template()' method since content generators can store their own state now, and if you need a Template object you can get it from the content generator or create one yourself.

Add 'lookup_datasource_type_config()' as shortcut into 'datasource_type' configuration

Add 'lookup_id_config()' as shortcut into 'id' configuration.

Add 'lookup_cache_config()' as shortcut into 'cache' configuration.

Add 'lookup_config_watcher_config()' as shortcut into 'config_watcher' configuration

OpenInteract2::Exception::Parameter

Move to separate class so we can do customized stringification (previously just a declaration in OI2::Exception)

OpenInteract2::I18N

Add base class for use with Locale::Maketext

OpenInteract2::I18N::Initializer

Add class to read message keys and generate Locale::Maketext subclasses from them. (Called from OI2::Setup)

OpenInteract2::Manage::Website::CreateSuperuserPassword

Add check so that if 'login.disable_superuser_password_change' is set we'll throw an exception.

OpenInteract2::Manage::Website::PackageCheckExportInstall

Add new task to check a package, export it if the check succeeds, and install it to a website if the export succeeds.

OpenInteract2::Manual::I18N

Add section of manual to deal with I18N/L10N issues.

OpenInteract2::Package

Add get_message_files() to retrieve the files with localized messages.

In 'create_skeleton()' reject any blank/all-space package names.

OpenInteract2::Setup

Add read_localized_messages() to read in the localized messages.

OpenInteract2::SQLInstall

Add migrate_data() method along with implementations to copy data between tables and from a table to objects.

sample/README

Add description of what the sample files are for and how to create a public source directory.

sample/msg/*

Add global message files (only US English for now, like to help?)

sample/website/conf/server.ini

Add key 'dir.package' so we can get the base package directory easily.

Add key 'dir.msg' so we can get the global message directory

Remove 'template_process' configuration section, moving the data into the respective 'content_generator' section.

Modify content generator type 'HTMLT' to be 'HTMLTemplate', and 'TextTmpl' to be 'TextTemplate'. (Seems friendlier...)

Add section 'language' to support I18N efforts.

Add 'login.disable_superuser_password_change' to stop people from changing superuser password using oi2_manage.

Rename 'cache_info' to 'cache', and remove subsections 'data' and 'template' -- all 'data' items are in 'cache' and 'template' items moved to the TT2 content generator configuration.

1.99_03, 8 September 2003

Major Changes

Minor Changes

Makefile.PL/Build.PL

Bump up required version for File::DirSync since it has new feature.

Add Test::MockObject as requirement.

HTTP::Daemon::OpenInteract2

Use the version() from the context rather than hardcoding it ourselves. (old...)

Move most of the functionality from script/oi2_daemon here so we can access it from other places too (like tests).

OpenInteract2::Action

Rename a number of methods to give them a 'protected' veneer: check_task_validity(), find_task(), find_task_method() become _check_task_validity(), _find_task(), _find_task_method(), respectively.

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

Add overridable init_at_startup() and documentation with example.

OpenInteract2::Action::CommonRemove

Blew up because wrong method called, how embarrassing. Works now.

OpenInteract2::Action::CommonSearch

Always pass search_criteria to template to be nice, add warning about the format of the fieldnames.

OpenInteract2::Action::TemplateOnly

Reflect parent change of find_task() to _find_task().

OpenInteract2::Auth

Make an object rather than using class methods. The various information that we passed around is now in the auth object, and this object is passed to any custom handlers you may have defined as well.

Port change from 1.x allowing users to configure the website not to accept users who aren't logged in.

OpenInteract2::Auth::AdminCheck

Modify to use information from auth object rather than having it passed in.

OpenInteract2::Auth::Group

Modify to use information from auth object rather than having it passed in.

OpenInteract2::Auth::User

Modify to use information from auth object rather than having it passed in.

OpenInteract2::Config

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

In translate_dirs() ensure that 'dir.website' doesn't have a trailing slash.

OpenInteract2::Config::Base

After object initialized remove trailing '/' from all set directories.

OpenInteract2::Config::Initializer

Add class to handle SPOPS and Action configuration initialization duties. The class is observable so you can add custom behavior. (See docs for details and how this hooks into packages.)

Note that the use of 'TASK_EDIT' in the 'display' key of SPOPS objects will only result in the 'url_edit' key being populated from a call to 'object_configuration()' on an SPOPS object if you're using SPOPS >= 0.79. It doesn't do any harm otherwise, you just won't get the right URLs...

OpenInteract2::Config::Package

Add 'config_watcher' property

OpenInteract2::ContentGenerator::TT2Plugin

Add can_write shortcut so we don't have to use 'tmp_security_level' anymore...

OpenInteract2::Controller

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

OpenInteract2::Context

Create lookup_session_config() rather than having outsiders root around server config. In the same vein add 'lookup_default_action_info', 'default_action_id', 'lookup_default_datasource_name', lookup_system_datasource_name', 'lookup_default_ldap_datasource_name', 'lookup_directory', 'lookup_temp_lib_directory'.

Rename 'datasource_config' -> 'lookup_datasource_config'

Add docs for filter shortcut methods

Remove alias() and replace with lookup_class(). This means that:

  CTX->template_class

and similar calls (based on the names in the 'system_alias' server configuration key, now replaced by 'system_class') will no longer work and you must use:

 CTX->lookup_class( 'template' )

instead. This wasn't used terribly often and all uses in OI2 and packages have been replaced.

This change also entailed modifying the setup so that the alias building features weren't called, and removing the corresponding OI2::Setup call (see below).

Remove global_attribute() -- feature without a purpose.

OpenInteract2::Manage

Modify the API quite a bit. Some is just renaming (e.g., 'brief_description()' is now 'get_brief_description()') but other bits are much more substantial. Just read OpenInteract2::Manual::Management for how things work now.

No tasks are hardcoded in this class (or the OpenInteract2::Manage::Package or OpenInteract2::Manage::Website abstract subclasses). Instead we find all classes from @INC under the OpenInteract2::Manage namespace (including subnamespaces) and require them. This means all you need to do to create a new task is put it under the right package and register yourself with the main management class and you're good to go.

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

OpenInteract2::Manage::CreateSourceDirectory

Update to use new feature in File::DirSync so we can return on request information about what got synchronized.

OpenInteract2::Manage::Website::CleanExpiredSessions

Add new task to delete old and empty sessions. Replaces script from 'base' package.

OpenInteract2::Manage::Website::CreateSecurity

Add new task to batch create security for SPOPS objects. Replaces script from 'base_security' package.

OpenInteract2::Manage::Website::InstallPackage

After package is installed add notification to refresh the temp lib dir if necessary.

Do explicit check to see if this package name/version already installed, and if so don't fail but generate a message indicating that the install wasn't performed.

OpenInteract2::Manage::Website::ReindexObjects

Add new task to reindex (or initially index) SPOPS objects. Replaces script from 'full_text' package.

OpenInteract2::Manual::AdminDatabase

Add instructions for initializing iAnywhere ASA, thanks to Greg Fenton for writing them up.

OpenInteract2::Manual::Architecture

Fix errors in request process pointed out by Greg Fenton.

Add discussion of how OI implements MVC (or really, how it implements separation of concerns and the pieces of OI that map to the letters in MVC...)

OpenInteract2::Manual::Management

Add content, reflects fully the recent API changes.

OpenInteract2::Manual::QuickStart

Fix errors and inconsistencies and make clarifications throughout document, thanks to Greg Fenton for detailed report.

OpenInteract2::Manual::Templates

Add discussion of multiple content generators with the same code, declaring 'template_source' in an action to enable this, and similar matters.

OpenInteract2::Manual::Tutorial

Write the thing. It's really big, read it now!

OpenInteract2::Manual::TutorialAdvanced

Add placeholder for tutorial on advanced OI functionality.

OpenInteract2::Package

Add little 'parse_full_name()' class method to complement 'full_name' object method.

Modify check() for templates -- it was succeeding even though the template file didn't exist.

On install() be sure to translate the package filename into an absolute one, otherwise we eventually lose track.

Fix for reading package from file -- directory wasn't being set correctly.

OpenInteract2::Repository

Add internal methods to maintain a cache of packages rather than refetch them on every 'fetch_package()'. This may come back to bite us in the future because there's no synchronization going on...

OpenInteract2::Request

Add 'action_errors' and 'add_action_errors()', plus docs.

Add 'get_implementation_type'

OpenInteract2::Response

Add 'get_implementation_type'

Rename _set_url() to assign_request_url() so other modules can call; rename call in subclasses as well.

OpenInteract2::Response

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

Add factory_log() and factory_error() to capture messages from Class::Factory and redirect to our logger

OpenInteract2::ResultsManage

Use methods instead of object hash references. Another notch for Class::Accessor...

OpenInteract2::SessionManager

Renamed this and all subclasses from OI2::Session* to reflect that we're not session objects, we're managing session objects.

OpenInteract2::Setup

Move all initialization methods for action config and calls to the datasource-specific initializer to OpenInteract2::Config::Initializer so that users can add custom behaviors.

Document create_temp_lib call better, explaining our intentions.

Remove build_aliases and documentation for it. (No longer needed, see OI2::Context change docs.)

OpenInteract2::SPOPS

Fix bug resulting from evaluating $spops_obj->id in list context that was fixed in 1.x but didn't get replicated. Thanks to damien leri (again!) for pointing it out.

Move all configuration initialization modification routines into OpenInteract2::Config::Initializer.

All object key methods now use the 'system' datasource name rather than relying on the object that was being keyed.

OpenInteract2::SPOPS::DBI

Move all configuration initialization modification routines into OpenInteract2::Config::Initializer.

OpenInteract2::SPOPS::LDAP

Move all configuration initialization modification routines into OpenInteract2::Config::Initializer.

OpenInteract2::SQLInstall

Modify some server config retrievals into method calls on the context. (Data hiding, what's that?)

sample/website/conf/server.ini

Add 'config_watcher' section. Allows us to declare SPOPS/action configuration initialization observers.

Add 'datasource_config.ldap' for the default LDAP datasource

Add 'required', 'required_url' and 'required_skip' to 'login'

Add 'use_meta_redirect' and 'use_header_redirect' to 'display_info'

Rename 'system_alias' section to 'system_class', remove a number of items from it and rename some others.

script/oi2_daemon

Store the PID file in the directory from where the configuration file is read. (Thanks to Greg Fenton for suggestion.)

Move most functionality to HTTP::OpenInteract2::Daemon so we can run it outside the script.

t/*

Add lots of stub tests to be filled in shortly -- honest! Also created a TODO listing of tests to create.

1.99_02

NOTE: Skipped this release to sync up the beta number with the extra dev number.

1.99_01, 3 July 2003

Major Changes

Minor changes

Too many small fixes and improvements to note, sorry. As we stabilize to 2.0 this will get explicit.

Broken stuff

Full text searching doesn't seem to work. A number of other actions have not been fully tested by hand, much less in an automated fashion.

Also, tests for other areas of the system are lagging.

1.99_00, 10 June 2003

This is the first BETA release. DO NOT run production systems on it.

Compatibility

Since OpenInteract 2.x uses a separate namespace than OpenInteract 1.x (OpenInteract2 vs. OpenInteract), you should have no problems installing this on a machine with OpenInteract 1.x.

There is currently no automated way to upgrade the server configuration or everything about a custom package. (You can translate the conf/action.perl and conf/spops.perl into the new INI format -- see scripts in script/.) In addition, a number of core packages have upgraded schemas so you can't simply dump your table and reload it.

Before 2.0 final is released there should be tools to:

Major Changes

These are the highlights. Many others are lurking under the covers.

OI2 INTERFACES

An 'interface' refers to how OpenInteract2 interacts with the outside world. An interface consists of three parts:

Since most of the functionality is pushed down into the Request and Response subclasses, adapters are generally pretty simple. For instance, here's an example of the Adapter for Apache 1.x/mod_perl 1.x:

 package Apache::OpenInteract2;
 use strict;
 use OpenInteract2::Auth;
 use OpenInteract2::Request;
 use OpenInteract2::Response;
 sub handler($$) {
     my ( $class, $r ) = @_;
     my $response = OpenInteract2::Response->new({ apache => $r });
     my $request  = OpenInteract2::Request->new({ apache => $r });
     OpenInteract2::Auth->login( $r->pnotes( 'login_user' ) );
     my $controller = eval {
         OpenInteract2::Controller->new( $request, $response )
     };
     if ( $@ ) {
         $response->content( $@ );
     }
     else {
         $controller->execute;
     }
     $response->send;
     return $response->status;
 }

SEE ALSO

OpenInteract Wiki

http://openinteract.sourceforge.net/cgi-bin/twiki/view/OI/

COPYRIGHT

Copyright (c) 2002-2003 Chris Winters. All rights reserved.

AUTHORS

Chris Winters <chris@cwinters.com>

Generated from the OpenInteract 1.99_04 source.


Home | Wiki | OI 1.x Docs | OI 2.x Docs
SourceForge Logo