Prevent Wiki Pages from being pasted to anywhere but a Wiki Master.

Add provisions for other assets to behave similarly.
This commit is contained in:
Colin Kuskie 2009-01-30 23:49:19 +00:00
parent 826089f075
commit 101e95fd63
3 changed files with 54 additions and 18 deletions

View file

@ -38,6 +38,19 @@ These methods are available from this class:
#-------------------------------------------------------------------
=head2 canPaste ( )
Allows assets to have a say if they can be pasted. For example, it makes no sense to
paste a wiki page anywhere else but a wiki master.
=cut
sub canPaste {
return 1;
}
#-------------------------------------------------------------------
=head2 cut ( )
@ -47,12 +60,13 @@ Removes asset from lineage, places it in clipboard state. The "gap" in the linea
=cut
sub cut {
my $self = shift;
return undef if ($self->getId eq $self->session->setting->get("defaultPage") || $self->getId eq $self->session->setting->get("notFoundPage"));
$self->session->db->beginTransaction;
$self->session->db->write("update asset set state='clipboard-limbo' where lineage like ? and state='published'",[$self->get("lineage").'%']);
$self->session->db->write("update asset set state='clipboard', stateChangedBy=?, stateChanged=? where assetId=?", [$self->session->user->userId, $self->session->datetime->time(), $self->getId]);
$self->session->db->commit;
my $self = shift;
my $session = $self->session;
return undef if ($self->getId eq $session->setting->get("defaultPage") || $self->getId eq $session->setting->get("notFoundPage"));
$session->db->beginTransaction;
$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->commit;
$self->updateHistory("cut");
$self->{_properties}{state} = "clipboard";
$self->purgeCache;
@ -172,6 +186,7 @@ sub paste {
my $assetId = shift;
my $pastedAsset = WebGUI::Asset->newByDynamicClass($self->session,$assetId);
return 0 unless ($self->get("state") eq "published");
return 0 unless ($pastedAsset->canPaste()); ##Allow pasted assets to have a say about pasting.
# Don't allow a shortcut to create an endless loop
return 0 if ($pastedAsset->get("className") eq "WebGUI::Asset::Shortcut" && $pastedAsset->get("shortcutToAssetId") eq $self->getId);
@ -468,11 +483,12 @@ Returns "". Pastes an asset. If canEdit is False, returns an insufficient privil
=cut
sub www_paste {
my $self = shift;
return $self->session->privilege->insufficient() unless $self->canEdit;
my $pasteAssetId = $self->session->form->process('assetId');
my $pasteAsset = WebGUI::Asset->newPending($self->session, $pasteAssetId);
return $self->session->privilege->insufficient() unless $pasteAsset->canEdit;
my $self = shift;
my $session = $self->session;
return $session->privilege->insufficient() unless $self->canEdit;
my $pasteAssetId = $session->form->process('assetId');
my $pasteAsset = WebGUI::Asset->newPending($session, $pasteAssetId);
return $session->privilege->insufficient() unless $pasteAsset->canEdit;
$self->paste($pasteAssetId);
return "";
}
@ -488,10 +504,9 @@ Returns a www_manageAssets() method. Pastes a selection of assets. If canEdit is
sub www_pasteList {
my $self = shift;
return $self->session->privilege->insufficient() unless $self->canEdit;
foreach my $clipId ($self->session->form->param("assetId")) {
ASSET: foreach my $clipId ($self->session->form->param("assetId")) {
my $pasteAsset = WebGUI::Asset->newPending($self->session, $clipId);
next
unless $pasteAsset->canEdit;
next ASSET unless $pasteAsset->canEdit;
$self->paste($clipId);
}
return $self->www_manageAssets();