Moose accessors. Convert part of update code into a trigger on storageId.

This commit is contained in:
Colin Kuskie 2010-01-26 16:21:06 -08:00
parent 1736b481b6
commit 13d0289098

View file

@ -61,7 +61,14 @@ property storageId => (
default => undef, default => undef,
label => ["attachments", 'Asset_Article'], label => ["attachments", 'Asset_Article'],
hoverHelp => ["attachments help", 'Asset_Article'], hoverHelp => ["attachments help", 'Asset_Article'],
trigger => \&_set_storageId,
); );
sub _set_storageId {
my ($self, $new, $old) = @_;
if ($new ne $old) {
delete $self->{_storageLocation};
}
}
sub _storageid_deleteFileUrl { sub _storageid_deleteFileUrl {
return shift->session->url->page("func=deleteFile;filename="); return shift->session->url->page("func=deleteFile;filename=");
} }
@ -123,8 +130,8 @@ Override the default method in order to deal with attachments.
sub addRevision { sub addRevision {
my $self = shift; my $self = shift;
my $newSelf = $self->SUPER::addRevision(@_); my $newSelf = $self->SUPER::addRevision(@_);
if ($newSelf->get("storageId") && $newSelf->get("storageId") eq $self->get('storageId')) { if ($newSelf->storageId && $newSelf->storageId eq $self->storageId) {
my $newStorage = WebGUI::Storage->get($self->session,$self->get("storageId"))->copy; my $newStorage = WebGUI::Storage->get($self->session,$self->storageId)->copy;
$newSelf->update({storageId => $newStorage->getId}); $newSelf->update({storageId => $newStorage->getId});
} }
return $newSelf; return $newSelf;
@ -140,7 +147,7 @@ Extend the super class to duplicate the storage location.
sub duplicate { sub duplicate {
my $self = shift; my $self = shift;
my $newAsset = $self->SUPER::duplicate(@_); my $newAsset = $self->SUPER::duplicate(@_);
my $newStorage = $self->getStorageLocation->copy; my $newStorage = $self->getStorageLocation->copy;
$newAsset->update({storageId=>$newStorage->getId}); $newAsset->update({storageId=>$newStorage->getId});
return $newAsset; return $newAsset;
@ -157,7 +164,7 @@ See WebGUI::AssetPackage::exportAssetData() for details.
sub exportAssetData { sub exportAssetData {
my $self = shift; my $self = shift;
my $data = $self->SUPER::exportAssetData; my $data = $self->SUPER::exportAssetData;
push(@{$data->{storage}}, $self->get("storageId")) if ($self->get("storageId") ne ""); push(@{$data->{storage}}, $self->storageId) if ($self->storageId ne "");
return $data; return $data;
} }
@ -174,11 +181,11 @@ then make one. Build an internal cache of the storage object.
sub getStorageLocation { sub getStorageLocation {
my $self = shift; my $self = shift;
unless (exists $self->{_storageLocation}) { unless (exists $self->{_storageLocation}) {
if ($self->get("storageId") eq "") { if ($self->storageId eq "") {
$self->{_storageLocation} = WebGUI::Storage->create($self->session); $self->{_storageLocation} = WebGUI::Storage->create($self->session);
$self->update({storageId=>$self->{_storageLocation}->getId}); $self->update({storageId=>$self->{_storageLocation}->getId});
} else { } else {
$self->{_storageLocation} = WebGUI::Storage->get($self->session,$self->get("storageId")); $self->{_storageLocation} = WebGUI::Storage->get($self->session,$self->storageId);
} }
} }
return $self->{_storageLocation}; return $self->{_storageLocation};
@ -195,8 +202,8 @@ Indexing the content of attachments and user defined fields. See WebGUI::Asset::
sub indexContent { sub indexContent {
my $self = shift; my $self = shift;
my $indexer = $self->SUPER::indexContent; my $indexer = $self->SUPER::indexContent;
$indexer->addKeywords($self->get("linkTitle")); $indexer->addKeywords($self->linkTitle);
$indexer->addKeywords($self->get("linkUrl")); $indexer->addKeywords($self->linkUrl);
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
foreach my $file (@{$storage->getFiles}) { foreach my $file (@{$storage->getFiles}) {
$indexer->addFile($storage->getPath($file)); $indexer->addFile($storage->getPath($file));
@ -214,7 +221,7 @@ See WebGUI::Asset::prepareView() for details.
sub prepareView { sub prepareView {
my $self = shift; my $self = shift;
$self->SUPER::prepareView(); $self->SUPER::prepareView();
my $templateId = $self->get("templateId"); my $templateId = $self->templateId;
if ($self->session->form->process("overrideTemplateId") ne "") { if ($self->session->form->process("overrideTemplateId") ne "") {
$templateId = $self->session->form->process("overrideTemplateId"); $templateId = $self->session->form->process("overrideTemplateId");
} }
@ -262,12 +269,7 @@ Storage object.
sub update { sub update {
my $self = shift; my $self = shift;
my $previousStorageId = $self->get('storageId');
$self->SUPER::update(@_); $self->SUPER::update(@_);
##update may have entered a new storageId. Reset the cached one just in case.
if ($self->get("storageId") ne $previousStorageId) {
delete $self->{_storageLocation};
}
$self->getStorageLocation->setPrivileges( $self->getStorageLocation->setPrivileges(
$self->get("ownerUserId"), $self->get("ownerUserId"),
$self->get("groupIdView"), $self->get("groupIdView"),
@ -335,13 +337,13 @@ returns the output.
sub view { sub view {
my $self = shift; my $self = shift;
my $cache = $self->session->cache; my $cache = $self->session->cache;
if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10 && !$self->session->form->process("overrideTemplateId") && if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10 && !$self->session->form->process("overrideTemplateId") &&
!$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) { !$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) {
my $out = eval{$cache->get("view_".$self->getId)}; my $out = eval{$cache->get("view_".$self->getId)};
return $out if $out; return $out if $out;
} }
my %var; my %var;
if ($self->get("storageId")) { if ($self->storageId) {
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
my @loop = (); my @loop = ();
foreach my $file (@{$storage->getFiles}) { foreach my $file (@{$storage->getFiles}) {
@ -362,7 +364,7 @@ sub view {
}); });
} }
} }
$var{description} = $self->get("description"); $var{description} = $self->description;
$var{"new.template"} = $self->getUrl("func=view").";overrideTemplateId="; $var{"new.template"} = $self->getUrl("func=view").";overrideTemplateId=";
$var{"description.full"} = $var{description}; $var{"description.full"} = $var{description};
$var{"description.full"} =~ s/\^\-\;//g; $var{"description.full"} =~ s/\^\-\;//g;
@ -399,7 +401,7 @@ sub view {
} }
$p->appendTemplateVars(\%var); $p->appendTemplateVars(\%var);
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate}); my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10 && !$self->session->form->process("overrideTemplateId") && if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10 && !$self->session->form->process("overrideTemplateId") &&
!$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) { !$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) {
eval{$cache->set("view_".$self->getId, $out, $self->get("cacheTimeout"))}; eval{$cache->set("view_".$self->getId, $out, $self->get("cacheTimeout"))};
} }
@ -431,7 +433,7 @@ Deletes and attached file.
sub www_deleteFile { sub www_deleteFile {
my $self = shift; my $self = shift;
return $self->session->privilege->insufficient unless $self->canEdit; return $self->session->privilege->insufficient unless $self->canEdit;
if ($self->get("storageId") ne "") { if ($self->storageId ne "") {
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
$storage->deleteFile($self->session->form->param("filename")); $storage->deleteFile($self->session->form->param("filename"));
} }
@ -448,7 +450,7 @@ See WebGUI::Asset::Wobject::www_view() for details.
sub www_view { sub www_view {
my $self = shift; my $self = shift;
$self->session->http->setCacheControl($self->get("cacheTimeout")); $self->session->http->setCacheControl($self->cacheTimeout);
$self->SUPER::www_view(@_); $self->SUPER::www_view(@_);
} }