Clear cache on assets in trash and clipboard limbo states. fixes bug #11027

This commit is contained in:
Colin Kuskie 2009-09-23 15:39:56 -07:00
parent 9a52044462
commit e4b99f1d6c
5 changed files with 91 additions and 34 deletions

View file

@ -2,6 +2,7 @@
- fixed: Wikis broken by 7.8.0 upgrade - fixed: Wikis broken by 7.8.0 upgrade
- fixed #11024: In/Out Board Busted - fixed #11024: In/Out Board Busted
- fixed #11025: Yo dudely in Wiki Keyword Search Template - fixed #11025: Yo dudely in Wiki Keyword Search Template
- fixed #11027: trash warning but no trash-limbo warning
7.8.0 7.8.0
- upgraded YUI to 2.8.0r4 - upgraded YUI to 2.8.0r4
@ -14,13 +15,6 @@
- fixed #10029: Account CSS rule scoping, round #2. - fixed #10029: Account CSS rule scoping, round #2.
- fixed #11012: Code editor corrupts JS - fixed #11012: Code editor corrupts JS
- fixed #11019: Ctrl-A blinks and deletes code in Code Editor - fixed #11019: Ctrl-A blinks and deletes code in Code Editor
- fixed #10954: DataForm fails silently
- fixed #10901: Calendar More Button/Display Box IE8 error.
- fixed #10950: Thingy
- fixed #11011: Inherit URL from parent can generate bad URLs
- fixed #11010: Purchasing non-recurring subscription twice does not extend group membership
- fixed #11009: Shipping address is lost after login
- fixed #10990: Survey: View Transposed Results not working
7.7.20 7.7.20
- fixed #10982: Survey menu options appearing twice - fixed #10982: Survey menu options appearing twice

View file

@ -54,6 +54,7 @@ sub canPaste {
=head2 cut ( ) =head2 cut ( )
Removes asset from lineage, places it in clipboard state. The "gap" in the lineage is changed in state to clipboard-limbo. Removes asset from lineage, places it in clipboard state. The "gap" in the lineage is changed in state to clipboard-limbo.
Return 1 if the cut was successful, otherwise it returns undef.
=cut =cut
@ -65,9 +66,12 @@ sub cut {
$session->db->write("update asset set state='clipboard-limbo' where lineage like ? and state='published'",[$self->get("lineage").'%']); $session->db->write("update asset set state='clipboard-limbo' where lineage like ? and state='published'",[$self->get("lineage").'%']);
$session->db->write("update asset set state='clipboard', stateChangedBy=?, stateChanged=? where assetId=?", [$session->user->userId, $session->datetime->time(), $self->getId]); $session->db->write("update asset set state='clipboard', stateChangedBy=?, stateChanged=? where assetId=?", [$session->user->userId, $session->datetime->time(), $self->getId]);
$session->db->commit; $session->db->commit;
$self->updateHistory("cut");
$self->{_properties}{state} = "clipboard"; $self->{_properties}{state} = "clipboard";
$self->purgeCache; foreach my $asset ($self, @{$self->getLineage(['descendants'], {returnObjects => 1})}) {
$asset->purgeCache;
$asset->updateHistory('cut');
}
return 1;
} }

View file

@ -239,7 +239,8 @@ sub restore {
=head2 trash ( $options ) =head2 trash ( $options )
Removes asset from lineage, places it in trash state. The "gap" in the Removes asset from lineage, places it in trash state. The "gap" in the
lineage is changed in state to trash-limbo. lineage is changed in state to trash-limbo. Returns 1 if the trash
was successful, otherwise it return undef.
=head3 $options =head3 $options
@ -264,9 +265,15 @@ sub trash {
return undef; return undef;
} }
$outputSub->($i18n->get('Deleting exported files'));
foreach my $asset ($self, @{$self->getLineage(['descendants'], {returnObjects => 1})}) { foreach my $asset ($self, @{$self->getLineage(['descendants'], {returnObjects => 1})}) {
$outputSub->($i18n->get('Clearing search index'));
my $index = WebGUI::Search::Index->new($asset);
$index->delete;
$outputSub->($i18n->get('Deleting exported files'));
$asset->_invokeWorkflowOnExportedFiles($session->setting->get('trashWorkflow'), 1); $asset->_invokeWorkflowOnExportedFiles($session->setting->get('trashWorkflow'), 1);
$outputSub->($i18n->get('Purging the cache'));
$asset->purgeCache;
$asset->updateHistory("trashed");
} }
# Trash any shortcuts to this asset # Trash any shortcuts to this asset
@ -280,12 +287,6 @@ sub trash {
# Raw database work is more efficient than $asset->update # Raw database work is more efficient than $asset->update
my $db = $session->db; my $db = $session->db;
$db->beginTransaction; $db->beginTransaction;
my $sth = $db->read("select assetId from asset where lineage like ?",[$self->get("lineage").'%']);
$outputSub->($i18n->get('Clearing search index'));
while (my ($id) = $sth->array) {
$db->write("delete from assetIndex where assetId=?",[$id]);
}
$outputSub->($i18n->get('Clearing asset tables')); $outputSub->($i18n->get('Clearing asset tables'));
$db->write("update asset set state='trash-limbo' where lineage like ?",[$self->get("lineage").'%']); $db->write("update asset set state='trash-limbo' where lineage like ?",[$self->get("lineage").'%']);
$db->write("update asset set state='trash', stateChangedBy=?, stateChanged=? where assetId=?",[$session->user->userId, $session->datetime->time(), $self->getId]); $db->write("update asset set state='trash', stateChangedBy=?, stateChanged=? where assetId=?",[$session->user->userId, $session->datetime->time(), $self->getId]);
@ -293,8 +294,7 @@ sub trash {
# Update ourselves since we didn't use update() # Update ourselves since we didn't use update()
$self->{_properties}{state} = "trash"; $self->{_properties}{state} = "trash";
$self->updateHistory("trashed"); return 1;
$self->purgeCache;
} }
require WebGUI::Workflow::Activity::DeleteExportedFiles; require WebGUI::Workflow::Activity::DeleteExportedFiles;

View file

@ -22,13 +22,14 @@ use WebGUI::Asset;
use WebGUI::VersionTag; use WebGUI::VersionTag;
use Test::More; # increment this value for each test you create use Test::More; # increment this value for each test you create
plan tests => 6; plan tests => 12;
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
$session->user({userId => 3}); $session->user({userId => 3});
my $root = WebGUI::Asset->getRoot($session); my $root = WebGUI::Asset->getRoot($session);
my $versionTag = WebGUI::VersionTag->getWorking($session); my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"Asset Clipboard test"}); $versionTag->set({name=>"Asset Clipboard test"});
WebGUI::Test->tagsToRollback($versionTag);
my $snippet = $root->addChild({ my $snippet = $root->addChild({
url => 'testSnippet', url => 'testSnippet',
@ -40,6 +41,32 @@ my $snippet = $root->addChild({
my $snippetAssetId = $snippet->getId; my $snippetAssetId = $snippet->getId;
my $snippetRevisionDate = $snippet->get("revisionDate"); my $snippetRevisionDate = $snippet->get("revisionDate");
my $topFolder = $root->addChild({
url => 'TopFolder',
title => 'TopFolder',
menuTitle => 'topFolderMenuTitle',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
my $folder1a = $topFolder->addChild({
url => 'folder_1a',
title => 'folder1a',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
my $folder1b = $topFolder->addChild({
url => 'folder_1b',
title => 'folder1b',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
my $folder1a2 = $folder1a->addChild({
url => 'folder_1a2',
title => 'folder1a2',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
$versionTag->commit; $versionTag->commit;
@ -61,11 +88,17 @@ is($duplicatedSnippet->getParent->getId, $root->getId, 'duplicated snippet is al
my $newVersionTag = WebGUI::VersionTag->getWorking($session); my $newVersionTag = WebGUI::VersionTag->getWorking($session);
$newVersionTag->commit; $newVersionTag->commit;
WebGUI::Test->tagsToRollback($newVersionTag);
END { ####################################################
foreach my $tag($versionTag, $newVersionTag) { #
if (defined $tag and ref $tag eq 'WebGUI::VersionTag') { # cut
$tag->rollback; #
} ####################################################
}
} is( $topFolder->cut, 1, 'cut: returns 1 if successful' );
is($topFolder->get('state'), 'clipboard', '... state set to trash on the trashed asset object');
is($topFolder->cloneFromDb->get('state'), 'clipboard', '... state set to trash in db on object');
is($folder1a->cloneFromDb->get('state'), 'clipboard-limbo', '... state set to clipboard-limbo on child #1');
is($folder1b->cloneFromDb->get('state'), 'clipboard-limbo', '... state set to clipboard-limbo on child #2');
is($folder1a2->cloneFromDb->get('state'), 'clipboard-limbo', '... state set to clipboard-limbo on grandchild #1-1');

View file

@ -17,7 +17,7 @@ use WebGUI::Session;
use WebGUI::User; use WebGUI::User;
use WebGUI::Asset; use WebGUI::Asset;
use Test::More tests => 1; # increment this value for each test you create use Test::More tests => 7; # increment this value for each test you create
use Test::Deep; use Test::Deep;
# Test the methods in WebGUI::AssetLineage # Test the methods in WebGUI::AssetLineage
@ -26,6 +26,7 @@ my $session = WebGUI::Test->session;
my $versionTag = WebGUI::VersionTag->getWorking($session); my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"AssetLineage Test"}); $versionTag->set({name=>"AssetLineage Test"});
WebGUI::Test->tagsToRollback($versionTag);
my $root = WebGUI::Asset->getRoot($session); my $root = WebGUI::Asset->getRoot($session);
my $topFolder = $root->addChild({ my $topFolder = $root->addChild({
@ -35,9 +36,40 @@ my $topFolder = $root->addChild({
groupIdEdit => 3, groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder', className => 'WebGUI::Asset::Wobject::Folder',
}); });
my $folder1a = $topFolder->addChild({
url => 'folder_1a',
title => 'folder1a',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
my $folder1b = $topFolder->addChild({
url => 'folder_1b',
title => 'folder1b',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
my $folder1a2 = $folder1a->addChild({
url => 'folder_1a2',
title => 'folder1a2',
groupIdEdit => 3,
className => 'WebGUI::Asset::Wobject::Folder',
});
$versionTag->commit; $versionTag->commit;
####################################################
#
# trash
#
####################################################
is( $topFolder->trash, 1, 'trash: returns 1 if successful' );
is($topFolder->get('state'), 'trash', '... state set to trash on the trashed asset object');
is($topFolder->cloneFromDb->get('state'), 'trash', '... state set to trash in db on object');
is($folder1a->cloneFromDb->get('state'), 'trash-limbo', '... state set to trash-limbo on child #1');
is($folder1b->cloneFromDb->get('state'), 'trash-limbo', '... state set to trash-limbo on child #2');
is($folder1a2->cloneFromDb->get('state'), 'trash-limbo', '... state set to trash-limbo on grandchild #1-1');
#################################################### ####################################################
# #
# purge # purge
@ -45,9 +77,3 @@ $versionTag->commit;
#################################################### ####################################################
is($topFolder->purge, 1, 'purge returns 1 if asset can be purged'); is($topFolder->purge, 1, 'purge returns 1 if asset can be purged');
END {
foreach my $tag ($versionTag) {
$tag->rollback;
}
}