CGI::CRUD::Output - Virtual base class liaison between CGI::CRUD and a web server


CGI-CRUD documentation Contained in the CGI-CRUD distribution.

Index


Code Index:

NAME

Top

CGI::CRUD::Output - Virtual base class liaison between CGI::CRUD and a web server

DESCRIPTION

Top

Virtual base class liaison between CGI::CRUD and a web server. output method must be overridden. form_attrs will be called during initialization of the $form object so set custom $form attributes in that method (see CGI::AutoForm).

SEE ALSO

Top

CGI::CRUD::TableIO

AUTHOR

Top

Reed Sandberg, <reed_sandberg Ӓ yahoo>

COPYRIGHT AND LICENSE

Top


CGI-CRUD documentation Contained in the CGI-CRUD distribution.

#
# $Id: Output.pm,v 1.5 2005/01/27 23:30:50 scottb Exp $
#

package CGI::CRUD::Output;

use strict;
use CGI::AutoForm;


# ctor
sub new
{
    my $caller = shift;

    my $class = ref($caller) || $caller;
    my $self = bless({},$class);

    return $self;
}

sub dbh
{
    my ($self) = @_;
    return $self->{dbh};
}

sub perror
{
    my ($self,$msg) = @_;
    return $self->output(qq[<H2>Error:</H2>$msg]);
}

sub param
{
    my ($self,$name) = @_;
    return $self->{q}{$name};
}

sub query
{
    my $self = shift;
    return $self->{q};
}

sub user
{
    my $self = shift;
    return $self->{user};
}

# MUST BE OVERRIDDEN
# subclass should set $self->{tpl_vars}{BODY} and any others which will get passed to the template
sub output
{
}

sub server_error
{
    my ($self) = @_;
    return $self->perror("<EM>Internal Server Error. </EM><BR>Please contact your server administrator");
}

sub graceful_db_fields
{
    my ($self,$form,$table_name,$usage) = @_;
    shift,shift;
    my $rv = $form->db_fields(@_);
    unless ($rv > 0)
    {
        return $self->_ret($rv,$table_name);
    }
    return $rv;
}

sub graceful_add_form_group
{
    my ($self,$form,$usage,$table_name) = @_;
    shift,shift;
    my $rv = $form->add_group(@_);
    unless ($rv > 0)
    {
        return $self->_ret($rv,$table_name);
    }
    return $rv;
}

sub _ret
{
    my ($self,$rv,$table_name) = @_;
    if (!defined($rv))
    {
        $self->server_error();
    }
    elsif ($rv == 0)
    {
        $self->perror("Table [$table_name] does not exist and does not have fields defined in UI_TABLE_COLUMN");
    }
    elsif ($rv == -1)
    {
        $self->perror("At least 1 field in [$table_name] requested a SELECT input control but no mask list was found");
    }
    elsif ($rv == -2)
    {
        $self->perror("Can't remember what this error was");
    }
    elsif ($rv == -3)
    {
        $self->perror("$table_name (or one of its columns) not defined in the database");
    }
    else
    {
        $self->server_error();
    }
    return undef;
}

# Class or instance method
sub form
{
    my $caller = shift;
    my $form = new CGI::AutoForm(@_);
    $caller->form_attrs($form);
    return $form;
}

sub form_attrs
{
}

1;

__END__