Story code. Added validParent, storage location code.
This commit is contained in:
parent
716ef998a7
commit
02dc71055b
3 changed files with 209 additions and 13 deletions
|
|
@ -60,6 +60,7 @@ CREATE TABLE Story (
|
|||
location CHAR(255),
|
||||
highlights TEXT,
|
||||
story MEDIUMTEXT,
|
||||
storageId CHAR(255),
|
||||
photo LONGTEXT,
|
||||
PRIMARY KEY ( assetId, revisionDate )
|
||||
)
|
||||
|
|
|
|||
|
|
@ -40,8 +40,6 @@ These methods are available from this class:
|
|||
|
||||
=cut
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 addChild ( )
|
||||
|
|
@ -58,16 +56,26 @@ sub addChild {
|
|||
|
||||
=head2 addRevision
|
||||
|
||||
Make sure that Stories are always hidden from navigation.
|
||||
Make sure that Stories are always hidden from navigation. Copy storage locations so that
|
||||
purging individual revisions works correctly.
|
||||
|
||||
=cut
|
||||
|
||||
sub addRevision {
|
||||
my $self = shift;
|
||||
my $newSelf = $self->next::method(@_);
|
||||
$newSelf->update({
|
||||
|
||||
my $newProperties = {
|
||||
isHidden => 1,
|
||||
});
|
||||
};
|
||||
|
||||
if ($newSelf->get("storageId") && $newSelf->get("storageId") eq $self->get('storageId')) {
|
||||
my $newStorage = $self->getStorageClass->get($self->session,$self->get("storageId"))->copy;
|
||||
$newProperties->{storageId} = $newStorage->getId;
|
||||
}
|
||||
|
||||
$newSelf->update($newProperties);
|
||||
|
||||
return $newSelf;
|
||||
}
|
||||
|
||||
|
|
@ -134,7 +142,12 @@ sub definition {
|
|||
photo => {
|
||||
fieldType => 'text',
|
||||
defaultValue => '',
|
||||
}
|
||||
},
|
||||
storageId => {
|
||||
fieldType => 'hidden',
|
||||
defaultValue => '',
|
||||
noFormPost => 1,
|
||||
},
|
||||
);
|
||||
push(@{$definition}, {
|
||||
assetName => $i18n->get('assetName'),
|
||||
|
|
@ -150,18 +163,37 @@ sub definition {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 indexContent ( )
|
||||
=head2 exportAssetData ( )
|
||||
|
||||
Making private. See WebGUI::Asset::indexContent() for additonal details.
|
||||
See WebGUI::AssetPackage::exportAssetData() for details.
|
||||
Add the storage location to the export data.
|
||||
|
||||
=cut
|
||||
|
||||
sub indexContent {
|
||||
my $self = shift;
|
||||
my $indexer = $self->SUPER::indexContent;
|
||||
$indexer->setIsPublic(0);
|
||||
sub exportAssetData {
|
||||
my $self = shift;
|
||||
my $data = $self->SUPER::exportAssetData;
|
||||
push(@{$data->{storage}}, $self->get("storageId")) if ($self->get("storageId") ne "");
|
||||
return $data;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getStorageLocation
|
||||
|
||||
Returns the storage location for this Story. If it does not exist,
|
||||
then it creates it via setStorageLocation. Subsequent lookups return
|
||||
an internally cached Storage object to save time.
|
||||
|
||||
=cut
|
||||
|
||||
sub getStorageLocation {
|
||||
my $self = shift;
|
||||
unless (exists $self->{_storageLocation}) {
|
||||
$self->setStorageLocation;
|
||||
}
|
||||
return $self->{_storageLocation};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -200,22 +232,107 @@ sub processPropertiesFromFormPost {
|
|||
|
||||
=head2 purge ( )
|
||||
|
||||
Cleaning up storage objects.
|
||||
Cleaning up storage objects in all revisions.
|
||||
|
||||
=cut
|
||||
|
||||
sub purge {
|
||||
my $self = shift;
|
||||
my $sth = $self->session->db->read("select storageId from Story where assetId=".$self->session->db->quote($self->getId));
|
||||
while (my ($storageId) = $sth->array) {
|
||||
WebGUI::Storage->get($self->session,$storageId)->delete;
|
||||
}
|
||||
$sth->finish;
|
||||
return $self->SUPER::purge;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 purgeRevision
|
||||
|
||||
Remove the storage location for this revision of the Asset.
|
||||
|
||||
=cut
|
||||
|
||||
sub purgeRevision {
|
||||
my $self = shift;
|
||||
$self->getStorageLocation->delete;
|
||||
return $self->SUPER::purgeRevision;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 setSize ( fileSize )
|
||||
|
||||
Set the size of this asset by including all the files in its storage
|
||||
location. C<fileSize> is an integer of additional bytes to include in
|
||||
the asset size.
|
||||
|
||||
=cut
|
||||
|
||||
sub setSize {
|
||||
my $self = shift;
|
||||
my $fileSize = shift || 0;
|
||||
my $storage = $self->getStorageLocation;
|
||||
if (defined $storage) {
|
||||
foreach my $file (@{$storage->getFiles}) {
|
||||
$fileSize += $storage->getFileSize($file);
|
||||
}
|
||||
}
|
||||
return $self->SUPER::setSize($fileSize);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 setStorageLocation ( [ $storage] )
|
||||
|
||||
=head3 $storage
|
||||
|
||||
A storage location to use for this Story.
|
||||
|
||||
=cut
|
||||
|
||||
sub setStorageLocation {
|
||||
my $self = shift;
|
||||
my $storage = shift;
|
||||
if (defined $storage) {
|
||||
$self->{_storageLocation} = $storage;
|
||||
}
|
||||
elsif ($self->get("storageId") eq "") {
|
||||
$self->{_storageLocation} = WebGUI::Storage->create($self->session);
|
||||
$self->update({storageId=>$self->{_storageLocation}->getId});
|
||||
}
|
||||
else {
|
||||
$self->{_storageLocation} = WebGUI::Storage->get($self->session,$self->get("storageId"));
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 validParent
|
||||
|
||||
Make sure that the current session asset is a StoryArchive for pasting and adding checks.
|
||||
|
||||
This is a class method.
|
||||
|
||||
=cut
|
||||
|
||||
sub validParent {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
return $session->asset && $session->asset->isa('WebGUI::Asset::Wobject::StoryArchive');
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 view ( )
|
||||
|
||||
method called by the container www_view method.
|
||||
|
||||
=cut
|
||||
|
||||
##Keyword cloud generated by WebGUI::Keyword
|
||||
|
||||
sub view {
|
||||
my $self = shift;
|
||||
my $var = $self->get; # $var is a hash reference.
|
||||
|
|
|
|||
78
t/Asset/Story.t
Normal file
78
t/Asset/Story.t
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
#-------------------------------------------------------------------
|
||||
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
||||
#-------------------------------------------------------------------
|
||||
# Please read the legal notices (docs/legal.txt) and the license
|
||||
# (docs/license.txt) that came with this distribution before using
|
||||
# this software.
|
||||
#-------------------------------------------------------------------
|
||||
# http://www.plainblack.com info@plainblack.com
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
use FindBin;
|
||||
use strict;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
|
||||
use WebGUI::Test;
|
||||
use WebGUI::Session;
|
||||
use WebGUI::Storage;
|
||||
|
||||
use Test::More; # increment this value for each test you create
|
||||
use Test::Deep;
|
||||
|
||||
my $tests = 1;
|
||||
plan tests => 4
|
||||
+ $tests
|
||||
;
|
||||
|
||||
#TODO: This script tests certain aspects of WebGUI::Storage and it should not
|
||||
|
||||
my $session = WebGUI::Test->session;
|
||||
|
||||
my $class = 'WebGUI::Asset::Story';
|
||||
my $loaded = use_ok($class);
|
||||
my $story;
|
||||
|
||||
my $defaultNode = WebGUI::Asset->getDefault($session);
|
||||
my $archive = WebGUI::Asset->newByPropertyHashRef($session, {
|
||||
className => 'WebGUI::Asset::Wobject::StoryArchive',
|
||||
title => 'Test Archive',
|
||||
#1234567890123456789012
|
||||
assetId => 'TestStoryArchiveAsset1',
|
||||
});
|
||||
|
||||
SKIP: {
|
||||
|
||||
skip "Unable to load module $class", $tests unless $loaded;
|
||||
|
||||
############################################################
|
||||
#
|
||||
# validParent
|
||||
#
|
||||
############################################################
|
||||
|
||||
ok(! WebGUI::Asset::Story->validParent($session), 'validParent: no session asset');
|
||||
$session->asset($defaultNode);
|
||||
ok(! WebGUI::Asset::Story->validParent($session), 'validParent: wrong type of asset');
|
||||
$session->asset($archive);
|
||||
ok( WebGUI::Asset::Story->validParent($session), 'validParent: StoryArchive is valid');
|
||||
|
||||
############################################################
|
||||
#
|
||||
# make a new one
|
||||
#
|
||||
############################################################
|
||||
|
||||
$story = $defaultNode->addChild({
|
||||
className => 'WebGUI::Asset::Story',
|
||||
title => 'Story 1',
|
||||
});
|
||||
|
||||
isa_ok($story, 'WebGUI::Asset::Story', 'Created a Story asset');
|
||||
|
||||
}
|
||||
|
||||
END {
|
||||
WebGUI::VersionTag->getWorking($session)->rollback;
|
||||
$story->purge if $story;
|
||||
$archive->purge if $archive;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue