fix: Can't add assets when not using preload.perl.

This commit is contained in:
JT Smith 2007-10-04 16:03:45 +00:00
parent 9775400b8a
commit 978be4dc47
2 changed files with 26 additions and 16 deletions

View file

@ -1326,6 +1326,24 @@ sub indexContent {
return $indexer;
}
#-------------------------------------------------------------------
=head2 loadModule ( $session, $className )
Loads an asset module if it's not already in memory. This is a class method. Returns undef on failure to load, otherwise returns the classname.
=cut
sub loadModule {
my ($session, $className) = @_;
my $cmd = "use ".$className;
eval ($cmd);
if ($@) {
$session->errorHandler->error("Couldn't compile asset package: ".$className.". Root cause: ".$@);
return undef;
}
return $className;
}
#-------------------------------------------------------------------
@ -1687,14 +1705,9 @@ sub new {
}
}
if ($className) {
my $cmd = "use ".$className;
eval ($cmd);
if ($@) {
$session->errorHandler->error("Couldn't compile asset package: ".$className.". Root cause: ".$@);
return undef;
}
$class = $className;
if ($className) {
$class = $class->loadModule($session, $className);
return undef unless (defined $class);
}
my $cache = WebGUI::Cache->new($session, ["asset",$assetId,$revisionDate]);
@ -1777,13 +1790,8 @@ sub newByPropertyHashRef {
my $properties = shift;
return undef unless defined $properties;
return undef unless exists $properties->{className};
my $className = $properties->{className};
my $cmd = "use ".$className;
eval ($cmd);
if ($@) {
$session->errorHandler->warn("Couldn't compile asset package: ".$className.". Root cause: ".$@);
return undef;
}
my $className = $class->loadModule($session, $properties->{className});
return undef unless (defined $className);
bless {_session=>$session, _properties => $properties}, $className;
}
@ -2196,7 +2204,8 @@ Adds a new Asset based upon the class of the current form. Returns the Asset cal
sub www_add {
my $self = shift;
my %prototypeProperties;
my $class = $self->session->form->process("class","className");
my $class = $self->loadModule($self->session, $self->session->form->process("class","className"));
return undef unless (defined $class);
return $self->session->privilege->insufficient() unless ($class->canAdd($self->session));
if ($self->session->form->process('prototype')) {
my $prototype = WebGUI::Asset->new($self->session, $self->session->form->process("prototype"),$class);