diff --git a/docs/migration.txt b/docs/migration.txt index a634eecfb..d14545dfa 100644 --- a/docs/migration.txt +++ b/docs/migration.txt @@ -813,6 +813,18 @@ perl -pi.bak -e 's!WebGUI\:\:ProfileField\-\>new\(!WebGUI::ProfileField->new(\$s perl -pi.bak -e 's!WebGUI\:\:ProfileField\-\>create\(!WebGUI::ProfileField->create(\$self->session,!g' fileNameGoesHere +5.23.21 WebGUI::Storage API Refactored + +The WebGUI::Storage API has been refactored to accept $session in it's +constructors. + +perl -pi.bak -e 's!WebGUI\:\:Storage\-\>get\(!WebGUI::Storage->get(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:Storage\-\>create\(!WebGUI::Storage->create(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>get\(!WebGUI::Storage::Image->get(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>create\(!WebGUI::Storage::Image->create(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:Storage\-\>createTemp\(!WebGUI::Storage->createTemp(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>createTemp\(!WebGUI::Storage::Image->createTemp(\$self->session,!g' fileNameGoesHere + 6. Automatic list of Assets in Help System. diff --git a/lib/WebGUI/Asset/File.pm b/lib/WebGUI/Asset/File.pm index 232577dd3..3f40dcc87 100644 --- a/lib/WebGUI/Asset/File.pm +++ b/lib/WebGUI/Asset/File.pm @@ -57,7 +57,7 @@ sub addRevision { my $self = shift; my $newSelf = $self->SUPER::addRevision(@_); if ($self->get("storageId")) { - my $newStorage = WebGUI::Storage->get($self->get("storageId"))->copy; + my $newStorage = WebGUI::Storage->get($self->session,$self->get("storageId"))->copy; $newSelf->update({storageId=>$newStorage->getId}); } return $newSelf; @@ -184,7 +184,7 @@ sub getStorageLocation { $self->{_storageLocation} = WebGUI::Storage->create; $self->update({storageId=>$self->{_storageLocation}->getId}); } else { - $self->{_storageLocation} = WebGUI::Storage->get($self->get("storageId")); + $self->{_storageLocation} = WebGUI::Storage->get($self->session,$self->get("storageId")); } } return $self->{_storageLocation}; @@ -216,7 +216,7 @@ sub purge { my $self = shift; my $sth = $self->session->db->read("select storageId from FileAsset where assetId=".$self->session->db->quote($self->getId)); while (my ($storageId) = $sth->array) { - WebGUI::Storage->get($storageId)->delete; + WebGUI::Storage->get($self->session,$storageId)->delete; } $sth->finish; return $self->SUPER::purge; diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index f3eebe3da..4ad431947 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -163,7 +163,7 @@ sub getStorageLocation { $self->{_storageLocation} = WebGUI::Storage::Image->create; $self->update({storageId=>$self->{_storageLocation}->getId}); } else { - $self->{_storageLocation} = WebGUI::Storage::Image->get($self->get("storageId")); + $self->{_storageLocation} = WebGUI::Storage::Image->get($self->session,$self->get("storageId")); } } return $self->{_storageLocation}; diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index 74ab0d200..f1037b503 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -51,7 +51,7 @@ sub addRevision { my $self = shift; my $newSelf = $self->SUPER::addRevision(@_); if ($self->get("storageId")) { - my $newStorage = WebGUI::Storage->get($self->get("storageId"))->copy; + my $newStorage = WebGUI::Storage->get($self->session,$self->get("storageId"))->copy; $newSelf->update({storageId=>$newStorage->getId}); } return $newSelf; @@ -249,7 +249,7 @@ sub getAvatarUrl { my $user = WebGUI::User->new($self->get('ownerUserId')); #Get avatar field, storage Id. my $storageId = $user->profileField("avatar"); - my $avatar = WebGUI::Storage::Image->get($storageId); + my $avatar = WebGUI::Storage::Image->get($self->session,$storageId); if ($avatar) { #Get url from storage object. foreach my $imageName (@{$avatar->getFiles}) { @@ -391,7 +391,7 @@ sub getStorageLocation { $self->{_storageLocation} = WebGUI::Storage::Image->create; $self->update({storageId=>$self->{_storageLocation}->getId}); } else { - $self->{_storageLocation} = WebGUI::Storage::Image->get($self->get("storageId")); + $self->{_storageLocation} = WebGUI::Storage::Image->get($self->session,$self->get("storageId")); } } return $self->{_storageLocation}; @@ -716,7 +716,7 @@ sub purge { my $self = shift; my $sth = $self->session->db->read("select storageId from Post where assetId=".$self->session->db->quote($self->getId)); while (my ($storageId) = $sth->array) { - WebGUI::Storage->get($storageId)->delete; + WebGUI::Storage->get($self->session,$storageId)->delete; } $sth->finish; $self->session->db->write("delete from Post_rating where assetId=".$self->session->db->quote($self->getId)); diff --git a/lib/WebGUI/Asset/Template.pm b/lib/WebGUI/Asset/Template.pm index 9d5c3f031..d637bb81d 100644 --- a/lib/WebGUI/Asset/Template.pm +++ b/lib/WebGUI/Asset/Template.pm @@ -381,7 +381,7 @@ sub www_styleWizard { my $storageId = $self->session->form->file("logo"); my $logo; if ($storageId) { - my $storage = WebGUI::Storage::Image->get($self->session->form->file("logo")); + my $storage = WebGUI::Storage::Image->get($self->session,$self->session->form->file("logo")); $logo = $self->addChild({ className=>"WebGUI::Asset::File::Image", title=>$self->session->form->text("heading")." Logo", diff --git a/lib/WebGUI/Asset/Wobject/HttpProxy.pm b/lib/WebGUI/Asset/Wobject/HttpProxy.pm index da4228d87..ed6586e25 100644 --- a/lib/WebGUI/Asset/Wobject/HttpProxy.pm +++ b/lib/WebGUI/Asset/Wobject/HttpProxy.pm @@ -99,7 +99,7 @@ sub getCookieJar { $storage = WebGUI::Storage->create; $self->update({cookieJarStorageId=>$storage->getId}); } else { - $storage = WebGUI::Storage->get($self->get("cookieJarStorageId")); + $storage = WebGUI::Storage->get($self->session,$self->get("cookieJarStorageId")); } return $storage; } diff --git a/lib/WebGUI/Asset/Wobject/Product.pm b/lib/WebGUI/Asset/Wobject/Product.pm index 47a4c3db8..f12a6ea7a 100644 --- a/lib/WebGUI/Asset/Wobject/Product.pm +++ b/lib/WebGUI/Asset/Wobject/Product.pm @@ -40,7 +40,7 @@ sub _addFileTab { return; } - my $file = WebGUI::Storage->get($self->get($column)); + my $file = WebGUI::Storage->get($self->session,$self->get($column)); $tabform->getTab("properties")->readOnly( -value=>''.$i18n->get("deleteImage").'', -label=>$i18n->get($internationalId), @@ -53,7 +53,7 @@ sub _duplicateFile { my $newAsset = $_[0]; my $column = $_[1]; if($self->get($column)){ - my $file = WebGUI::Storage->get($self->get($column)); + my $file = WebGUI::Storage->get($self->session,$self->get($column)); my $newstore = $file->copy; $newAsset->update({ $column=>$newstore->getId }); } @@ -85,7 +85,7 @@ sub addRevision { my $newSelf = $self->SUPER::addRevision(@_); foreach my $field (qw(image1 image2 image3 brochure manual warranty)) { if ($self->get($field)) { - my $newStorage = WebGUI::Storage->get($self->get($field))->copy; + my $newStorage = WebGUI::Storage->get($self->session,$self->get($field))->copy; $newSelf->update({$field=>$newStorage->getId}); $self->session->db->write("update Product set $field=".$self->session->db->quote($newStorage->getId)." where assetId=".$self->session->db->quote($newSelf->getId)." and revisionDate=".$self->session->db->quote($newSelf->get("revisionDate"))); } @@ -286,7 +286,7 @@ sub purge { while (my @array = $sth->array) { foreach my $id (@array){ next if ($id eq ""); - WebGUI::Storage->get($id)->delete; + WebGUI::Storage->get($self->session,$id)->delete; } } $sth->finish; @@ -302,12 +302,12 @@ sub purge { sub purgeRevision { my $self = shift; - WebGUI::Storage->get($self->get("image1"))->delete if ($self->get("image1")); - WebGUI::Storage->get($self->get("image2"))->delete if ($self->get("image2")); - WebGUI::Storage->get($self->get("image3"))->delete if ($self->get("image3")); - WebGUI::Storage->get($self->get("brochure"))->delete if ($self->get("brochure")); - WebGUI::Storage->get($self->get("manual"))->delete if ($self->get("manual")); - WebGUI::Storage->get($self->get("warranty"))->delete if ($self->get("warranty")); + WebGUI::Storage->get($self->session,$self->get("image1"))->delete if ($self->get("image1")); + WebGUI::Storage->get($self->session,$self->get("image2"))->delete if ($self->get("image2")); + WebGUI::Storage->get($self->session,$self->get("image3"))->delete if ($self->get("image3")); + WebGUI::Storage->get($self->session,$self->get("brochure"))->delete if ($self->get("brochure")); + WebGUI::Storage->get($self->session,$self->get("manual"))->delete if ($self->get("manual")); + WebGUI::Storage->get($self->session,$self->get("warranty"))->delete if ($self->get("warranty")); return $self->SUPER::purgeRevision; } @@ -424,7 +424,7 @@ sub www_deleteFileConfirm { my $column = $self->session->form->process("file"); return $self->session->privilege->insufficient() unless ($self->canEdit); my $store = $self->get($column); - my $file = WebGUI::Storage->get($store); + my $file = WebGUI::Storage->get($self->session,$store); $file->delete; $self->update({$column => ''}); return $self->www_edit; @@ -724,40 +724,40 @@ sub view { #---brochure my $i18n = WebGUI::International->new($self->session,'Asset_Product'); if ($brochure) { - $file = WebGUI::Storage->get($brochure); + $file = WebGUI::Storage->get($self->session,$brochure); $var{"brochure.icon"} = $self->getFileIconUrl($file); $var{"brochure.label"} = $i18n->get(13); $var{"brochure.URL"} = $self->getFileUrl($file); } #---manual if ($manual) { - $file = WebGUI::Storage->get($manual); + $file = WebGUI::Storage->get($self->session,$manual); $var{"manual.icon"} = $self->getFileIconUrl($file); $var{"manual.label"} = $i18n->get(14); $var{"manual.URL"} = $self->getFileUrl($file); } #---warranty if ($warranty) { - $file = WebGUI::Storage->get($warranty); + $file = WebGUI::Storage->get($self->session,$warranty); $var{"warranty.icon"} = $self->getFileIconUrl($file); $var{"warranty.label"} = $i18n->get(15); $var{"warranty.URL"} = $self->getFileUrl($file); } #---image1 if ($image1) { - $file = WebGUI::Storage->get($image1); + $file = WebGUI::Storage->get($self->session,$image1); $var{thumbnail1} = $self->getThumbnailUrl($file); $var{image1} = $self->getFileUrl($file); } #---image2 if ($image2) { - $file = WebGUI::Storage->get($image2); + $file = WebGUI::Storage->get($self->session,$image2); $var{thumbnail2} = $self->getThumbnailUrl($file); $var{image2} = $self->getFileUrl($file); } #---image3 if ($image3) { - $file = WebGUI::Storage->get($image3); + $file = WebGUI::Storage->get($self->session,$image3); $var{thumbnail3} = $self->getThumbnailUrl($file); $var{image3} = $self->getFileUrl($file); } diff --git a/lib/WebGUI/Form/File.pm b/lib/WebGUI/Form/File.pm index f453f9101..38cd4aaee 100644 --- a/lib/WebGUI/Form/File.pm +++ b/lib/WebGUI/Form/File.pm @@ -99,7 +99,7 @@ sub displayForm { return $self->toHtml unless $self->get("value"); ##There are files inside here, for each one, display the image ##and another form control for deleting it. - my $location = WebGUI::Storage->get($self->get("value")); + my $location = WebGUI::Storage->get($self->session,$self->get("value")); my $id = $location->getId; my $fileForm = ''; foreach my $file ( @{ $location->getFiles } ) { @@ -126,7 +126,7 @@ form elements will just return their value. sub displayValue { my ($self) = @_; return '' unless $self->get("value"); - my $location = WebGUI::Storage->get($self->get("value")); + my $location = WebGUI::Storage->get($self->session,$self->get("value")); local $_; my @files = map { sprintf qq! %s!, $location->getFileIconUrl($_), $_; } @{ $location->getFiles }; my $fileValue = join "
\n", @files; @@ -147,14 +147,14 @@ sub getValueFromPost { my $self = shift; my $value = $self->session->request->param($self->get("name")); if ($self->session->request->param(join '_', '_', $self->get("name"), 'delete')) { - my $storage = WebGUI::Storage->get($value); + my $storage = WebGUI::Storage->get($self->session,$value); $storage->delete; return ''; } else { my $storage; if ($value) { - $storage = WebGUI::Storage::Image->get($value); + $storage = WebGUI::Storage::Image->get($self->session,$value); } else { $storage = WebGUI::Storage::Image->create; diff --git a/lib/WebGUI/Form/Image.pm b/lib/WebGUI/Form/Image.pm index ac55a37dd..04a1f63e6 100644 --- a/lib/WebGUI/Form/Image.pm +++ b/lib/WebGUI/Form/Image.pm @@ -101,7 +101,7 @@ profile field. sub displayValue { my ($self) = @_; return '' unless $self->get("value"); - my $location = WebGUI::Storage->get($self->get("value")); + my $location = WebGUI::Storage->get($self->session,$self->get("value")); local $_; my @files = map { sprintf qq!!, $location->getUrl($_) } @{ $location->getFiles }; my $fileValue = join "
\n", @files; diff --git a/lib/WebGUI/Macro/FileUrl.pm b/lib/WebGUI/Macro/FileUrl.pm index f39afca66..4abfc23e9 100644 --- a/lib/WebGUI/Macro/FileUrl.pm +++ b/lib/WebGUI/Macro/FileUrl.pm @@ -44,7 +44,7 @@ sub process { my $url = shift; my $asset = WebGUI::Asset->newByUrl($session,$url); if (defined $asset) { - my $storage = WebGUI::Storage->get($asset->get("storageId")); + my $storage = WebGUI::Storage->get($session,$asset->get("storageId")); return $storage->getUrl($asset->get("filename")); } else { my $i18n = WebGUI::International->new($session, 'Macro_FileUrl'); diff --git a/lib/WebGUI/Storage.pm b/lib/WebGUI/Storage.pm index 47d2b3e56..c0315f035 100644 --- a/lib/WebGUI/Storage.pm +++ b/lib/WebGUI/Storage.pm @@ -22,10 +22,6 @@ use POSIX; use Storable qw(nstore retrieve); use strict; use warnings; -use WebGUI::ErrorHandler; -use WebGUI::Id; -use WebGUI::Session; -use WebGUI::URL; use WebGUI::Utility; use Apache2::Request; use Apache2::Upload; @@ -42,7 +38,7 @@ This package provides a mechanism for storing and retrieving files that are not use WebGUI::Storage; $store = WebGUI::Storage->create; - $store = WebGUI::Storage->get($id); + $store = WebGUI::Storage->get($self->session,$id); $filename = $store->addFileFromFilesystem($pathToFile); $filename = $store->addFileFromFormPost($formVarName); @@ -318,32 +314,44 @@ sub copy { #------------------------------------------------------------------- -=head2 create ( ) +=head2 create ( session ) Creates a new storage location on the file system. +=head3 session + +A reference to the current session; + =cut sub create { my $class = shift; - my $id = $self->session->id->generate(); - my $self = $class->get($id); + my $session = shift; + my $id = $session->id->generate(); + my $self = $class->get($session,$id); $self->_makePath; return $self; } + + #------------------------------------------------------------------- -=head2 createTemp ( ) +=head2 createTemp ( session ) Creates a temporary storage location on the file system. +=head3 session + +A reference to the current session. + =cut sub createTemp { my $class = shift; + my $session = shift; my $id = $self->session->id->generate(); $id =~ m/^(.{2})/; - my $self = {_id => $id, _part1 => 'temp', _part2 => $1}; + my $self = {_session=>$session, _id => $id, _part1 => 'temp', _part2 => $1}; bless $self, ref($class)||$class; $self->_makePath; return $self; @@ -385,10 +393,14 @@ sub deleteFile { #------------------------------------------------------------------- -=head2 get ( id ) +=head2 get ( session, id ) Returns a WebGUI::Storage object. +=head3 session + +A reference to the current sesion. + =head3 id The unique identifier for this file system storage location. @@ -397,10 +409,11 @@ The unique identifier for this file system storage location. sub get { my $class = shift; + my $session = shift; my $id = shift; return undef unless $id; $id =~ m/^(.{2})(.{2})/; - my $self = {_id => $id, _part1 => $1, _part2 => $2}; + my $self = {_session=>$session, _id => $id, _part1 => $1, _part2 => $2}; bless $self, ref($class)||$class; $self->_makePath unless (-e $self->getPath); # create the folder in case it got deleted somehow return $self; @@ -663,6 +676,20 @@ sub renameFile { } +#------------------------------------------------------------------- + +=head3 session ( ) + +Returns a reference to the current session. + +=cut + +sub session { + my $self = shift; + return $self->{_session}; +} + + #------------------------------------------------------------------- =head2 setPrivileges ( ownerUserId, groupIdView, groupIdEdit )