The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- perl -*-

#
# $Id: OldHandler.pm,v 1.4 2004/04/16 23:27:35 eserte Exp $
# Author: Slaven Rezic
#
# Copyright (C) 2003 Slaven Rezic. All rights reserved.
# This package is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# Mail: slaven@rezic.de
# WWW:  http://www.rezic.de/eserte/
#

package WebEditor::OldHandler;

use strict;
no strict 'refs';
use vars qw($VERSION %config);
$VERSION = sprintf("%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/);

use Apache;

sub handler ($$) {
    my($self, $r) = @_;

    my $c = $self->get_wesiteinfo_config($r);
    my $oc = $self->get_controller_object($c);

    local $SIG{__DIE__} = $oc->get_die_handler;
    $oc->handle($c, $r);
}

sub get_wesiteinfo_config {
    my($self, $r) = @_;
    my $wesiteinfo_file  = $r->dir_config("wesiteinfo_file");
    my $wesiteinfo_class = $r->dir_config("wesiteinfo_class");
    my $c = $config{$wesiteinfo_class};
    if (!$c) {
	if (!defined $wesiteinfo_file) {
	    $wesiteinfo_file = $wesiteinfo_class;
	}
	require $wesiteinfo_file;
	$c = $wesiteinfo_class->get_config;
	$config{$wesiteinfo_class} = $c;
    }
    $c;
}

sub get_controller_object {
    my($self, $c) = @_;
    my $controller_class = "WE_" . $c->project->name . "::OldController";
    eval q{use } . $controller_class;
    if ($@) {
	if ($@ =~ /Can't locate/) {
	    # use generic controller instead
	    $controller_class = "WebEditor::OldController";
	    eval q{ use } . $controller_class;
	    die $@ if $@;
	} else {
	    die $@;
	}
    }
    my $oc = $controller_class->new;
    $oc;
}

1;

__END__