diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 401c7639c..907777970 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -3,6 +3,7 @@ complete - Clean up orphaned grouping - fix: purging old asset revisions on large sites never completes + - fix: Can't add assets when not using preload.perl. - fix: graphing doesn't work with GraphicsMagick 7.4.8 diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 52ae49154..98d676597 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -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);