diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 703f19304..714c32197 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -45,7 +45,8 @@ sub page { } if (exists $session{form}{op}) { $cmd = "WebGUI::Operation::www_".$session{form}{op}; - $operationOutput = &$cmd(); + $operationOutput = eval($cmd); + WebGUI::ErrorHandler::warn("Non-existent operation called: $session{form}{op}.") if($@); } if (exists $session{form}{func} && exists $session{form}{wid}) { if ($session{form}{wid} eq "new") { @@ -70,9 +71,11 @@ sub page { .$session{form}{wid}."] on page '".$session{page}{title}."' [".$session{page}{pageId}."]."); } else { $cmd = "WebGUI::Wobject::".${$wobject}{namespace}; - $w = $cmd->new($wobject); + $w = eval{$cmd->new($wobject)}; + WebGUI::ErrorHandler::fatalError("Couldn't instanciate wojbect: ${$wobject}{namespace}.") if($@); $cmd = "www_".$session{form}{func}; - $wobjectOutput = $w->$cmd; + $wobjectOutput = eval{$w->$cmd}; + WebGUI::ErrorHandler::fatalError("Web method doesn't exist in wojbect: ${$wobject}{namespace} / $session{form}{func}.") if($@); } # $wobjectOutput = WebGUI::International::get(381); # bad error } @@ -114,10 +117,13 @@ sub page { %hash = (%{$wobject},%{$extra}); $wobject = \%hash; $cmd = "WebGUI::Wobject::".${$wobject}{namespace}; - $w = $cmd->new($wobject); + $w = eval{$cmd->new($wobject)}; + WebGUI::ErrorHandler::fatalError("Couldn't instanciate wojbect: ${$wobject}{namespace}.") if($@); if ($w->inDateRange) { - $contentHash{${$wobject}{templatePosition}} .= '' - .$w->www_view."
\n\n"; + $contentHash{${$wobject}{templatePosition}} .= ''; + $contentHash{${$wobject}{templatePosition}} .= eval{$w->www_view}; + WebGUI::ErrorHandler::fatalError("No view method in wojbect: ${$wobject}{namespace}.") if($@); + $contentHash{${$wobject}{templatePosition}} .= "
\n\n"; } } $sth->finish; diff --git a/lib/WebGUI/Macro.pm b/lib/WebGUI/Macro.pm index ca154060a..ac2ba6bb1 100644 --- a/lib/WebGUI/Macro.pm +++ b/lib/WebGUI/Macro.pm @@ -33,7 +33,8 @@ sub process { $output = $_[0]; foreach $macro (keys %{$session{macro}}) { $cmd = "WebGUI::Macro::".$macro."::process"; - $output = &$cmd($output); + $output = eval{&$cmd($output)}; + WebGUI::ErrorHandler::fatalError("Processing failed on macro: $macro.") if($@); } return $output; } diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index 77ec11957..0fe0b9626 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -16,6 +16,7 @@ use DBI; use Exporter; use strict; use Tie::CPHash; +use WebGUI::ErrorHandler; use WebGUI::SQL; our @ISA = qw(Exporter); @@ -118,6 +119,7 @@ sub _loadMacros { $namespace = $1; $cmd = "use WebGUI::Macro::".$1; eval($cmd); + WebGUI::ErrorHandler::fatalError("Macro failed to compile: $namespace.") if($@); $session{macro}{$namespace} = $namespace; } } @@ -139,8 +141,10 @@ sub _loadWobjects { $namespace = $1; $cmd = "use WebGUI::Wobject::".$namespace; eval($cmd); + WebGUI::ErrorHandler::fatalError("Wobject failed to compile: $namespace.") if($@); $cmd = "\$WebGUI::Wobject::".$namespace."::name"; $session{wobject}{$namespace} = eval($cmd); + WebGUI::ErrorHandler::fatalError("No name method in wobject: $namespace.") if($@); } } closedir(DIR);