#!/usr/dim/perl/5.8/bin/perl
# $Id: nph-object.cgi,v 1.31 2004/09/14 09:08:03 joern Exp $
use strict;
BEGIN {
$| = 1;
$0 =~ m!^(.*)[/\\][^/\\]+$!; # Win32 Netscape Server Workaround
chdir $1 if $1;
require "../etc/default-user.conf";
require "../etc/newspirit.conf"
}
require $CFG::objecttypes_conf_file;
use CGI qw(-nph);
use Carp;
use NewSpirit;
use NewSpirit::Object;
# this hash maps CGI events (passed via parameter 'e')
# to methods of the NewSpirit::Object class.
my %METHOD = (
create => 'create_ctrl',
edit => 'edit_ctrl',
save_object => 'save_ctrl',
save_object_without_dep => 'save_ctrl',
install_last_saved_object => 'install_last_saved_ctrl',
properties => 'properties_ctrl',
save_properties => 'save_properties_ctrl',
save_properties_without_dep => 'save_properties_ctrl',
download => 'download_ctrl',
unlock => 'unlock_ctrl',
history => 'history_ctrl',
view => 'view_ctrl',
restore => 'restore_ctrl',
restore_without_dep => 'restore_ctrl',
function => 'function_ctrl',
delete_versions => 'delete_versions_ctrl',
dependencies => 'dependencies_ctrl',
delete_ask => 'delete_ask_ctrl',
delete => 'delete_ctrl',
refresh_db_popup => 'refresh_db_popup',
refresh_base_config_popup => 'refresh_base_config_popup',
download_prod_file => 'download_prod_file_ctrl',
download_prod_err_file => 'download_prod_err_file_ctrl',
);
main: {
# dieses globale Hash können Module nutzen, um request
# spezifische Daten abzulegen
%NEWSPIRIT::DATA_PER_REQUEST = ();
my $q = new CGI;
print $q->header( -nph => 1, -type=>'text/html' )
unless $q->param('no_http_header');
eval { main($q) };
my $exception_handled = handle_exception ($@) if $@;
NewSpirit::print_error ($@) if $@ and not $exception_handled;
NewSpirit::remove_on_the_fly_session ($q);
%NEWSPIRIT::DATA_PER_REQUEST = ();
}
sub main {
my $q = shift;
NewSpirit::check_session_and_init_request ($q);
my $e = $q->param('e');
# special handling for clone_session event
# this has no corresponding method in NewSpirit::Object,
# cloning must be done before creation of the NewSpirit::Object
# instance
if ( $e eq 'clone_session' ) {
# clone session and mark as window session
NewSpirit::clone_session ($q, 1);
$e = 'edit';
$q->param('e', $e);
$q->param('window', 1);
}
# which method for this event?
my $method = $METHOD{$e};
if ( $method ) {
my $o = new NewSpirit::Object (
q => $q,
set_lock => 1,
);
$o->$method();
} elsif ( not $e ) {
NewSpirit::blank_page();
} else {
print "event '$e' unknown";
}
}
sub handle_exception {
my ($message) = @_;
my ($exc, $msg) = split ("\t", $message, 2);
my ($handled, $title, $message);
if ( $exc eq 'object_does_not_exist' ) {
$handled = 1;
($title) = split ("\t", $msg, 2);
$message = "The object does not exist. Maybe someone deleted it and
\n";
$message .= "you did not refresh your project browser since that time.\n";
}
if ( $handled ) {
NewSpirit::std_header (
page_title => $title
);
print "
$CFG::FONT$message\n"; } return $handled; }