NAME

OpenInteract2::ContentGenerator::TemplateSource - Common routines for loading content from OI2 templates

SYNOPSIS

# Sample from Text::Template content generator

sub generate {
   my ( $self, $template_config, $template_vars, $template_source ) = @_;
   $log ||= get_logger( LOG_TEMPLATE );
   my ( $source_type, $source ) =
       OpenInteract2::ContentGenerator::TemplateSource->identify( $template_source );
   if ( $source_type eq 'NAME' ) {
       my ( $template, $filename, $modified ) =
           OpenInteract2::ContentGenerator::TemplateSource->load_source( $source );
       $source_type = 'STRING';
       $source      = $template;
       $log->is_debug &&
           $log->debug( "Loading from name $source" );
   }
   else {
       $log->is_debug &&
           $Log->Debug( "Loading from source $source_type" );
   }
   $template_config->{TYPE}   = $source_type;
   $template_config->{SOURCE} = ( ref $source eq 'SCALAR' )
                                  ? $$source : $source;
   my $template = Text::Template->new( %{ $template_config } );
   unless ( $template ) {
       my $msg = "Failed to create template parsing object: " .
                 $Text::Template::ERROR;
       $log->error( $msg );
       oi_error $msg;
   }
   my $content = $template->fill_in( HASH => $template_vars );
   unless ( $content ) {
       my $msg = "Failed to fill in template: $Text::Template::ERROR";
       $log->error( $msg );
       oi_error $msg ;
   }
   return $content;
}

CLASS METHODS

identify( \%template_source )

Checks \%template_source for template information and returns a source type and source. Here are the types of information we check for in \%template_source and what is returned:

  • Key name: Set source type to 'NAME' and source to the value of the name key. (This is the most common condition.)

  • Key message_key: If we can lookup a template name from the language handle retured by the OpenInteract2::Request}OpenInteract2::Request object set source type to 'NAME' and source to the value of the message key found from the language handle.

    Throws an exception if the language handle does not return a value for the message key lookup (that is, you do not have the key defined in any of your message files).

  • Key text: Set source type to 'STRING' and source to a scalar reference with the value of the text key. If text is already a reference it just copies the reference, otherwise it takes a reference to the text in the key.

  • Key filehandle: Set source type to 'FILE' and source to the filehandle in filehandle.

  • Key object: Set source type to 'STRING' and source to a reference to the content of the template key of the OpenInteract2::SiteTemplate object in object.

If none of these are found an exception is thrown. (We throw a different exception if you use the ancient 'db'/'package' syntax.)

Additionally, if we are able to pull a name from the template source and the current OpenInteract2::Controller object can handle it, we call add_template_used() on it, passing it the template name.

Returns: two item list of source type and source.

load_source( $template_name )

Fetches the template with the fully-qualified name $template_name and returns a three-item list with: contents, full filename, and the last modified time.

If the template is not found we throw an exception, and any exception thrown from the fetch propogates up.

Returns: a three-item list with: contents, full filename, and the last modified time (which is a DateTime object).

COPYRIGHT

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

AUTHORS

Chris Winters <chris@cwinters.com>