fix: Events can no longer be edited by anyone who can add events
This commit is contained in:
parent
6b017ad991
commit
8ec2c763b4
8 changed files with 512 additions and 17 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
7.5.11
|
7.5.11
|
||||||
- fix: template variable isUncommitted is not documented in the help
|
- fix: template variable isUncommitted is not documented in the help
|
||||||
|
- fix: Event is no longer editable by anyone who can add events
|
||||||
|
|
||||||
7.5.10
|
7.5.10
|
||||||
- fix: Syntax error in GetCsMail
|
- fix: Syntax error in GetCsMail
|
||||||
|
|
|
||||||
|
|
@ -180,16 +180,26 @@ sub canAdd {
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
=head2 canEdit
|
=head2 canEdit ( [userId] )
|
||||||
|
|
||||||
Returns true if a user can edit this asset. This uses the canEditEvent
|
Returns true if the given userId can edit this asset. If userId is not given,
|
||||||
from the parent Calendar.
|
the userId of the current session is used.
|
||||||
|
|
||||||
|
Users can edit this event if they are the owner of the event, or if they are
|
||||||
|
allowed to edit the parent Calendar.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub canEdit {
|
sub canEdit {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->getParent->canAddEvent;
|
my $userId = shift;
|
||||||
|
|
||||||
|
if ( !$userId ) {
|
||||||
|
$userId = $self->session->user->userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1 if ( $userId eq $self->get('ownerUserId') );
|
||||||
|
return $self->getParent->canEdit( $userId );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -370,7 +370,7 @@ sub appendTemplateVarsDateTime {
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 canEdit
|
=head2 canEdit ( [userId] )
|
||||||
|
|
||||||
Returns true if the user can edit this asset.
|
Returns true if the user can edit this asset.
|
||||||
|
|
||||||
|
|
@ -381,24 +381,33 @@ around the canEdit check when www_editSave is being used to add an asset).
|
||||||
|
|
||||||
sub canEdit {
|
sub canEdit {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $userId = shift || $self->session->user->userId;
|
||||||
my $form = $self->session->form;
|
my $form = $self->session->form;
|
||||||
my $user = $self->session->user;
|
|
||||||
|
|
||||||
# Account for new events
|
# Account for new events
|
||||||
return 1 if ($self->canAddEvent && $form->process("func") eq "add");
|
|
||||||
return 1 if (
|
return 1 if (
|
||||||
$self->canAddEvent
|
$self->canAddEvent( $userId )
|
||||||
|
&& $form->process("func") eq "add"
|
||||||
|
);
|
||||||
|
return 1 if (
|
||||||
|
$self->canAddEvent( $userId )
|
||||||
&& $form->process("assetId") eq "new"
|
&& $form->process("assetId") eq "new"
|
||||||
&& $form->process("func") eq "editSave"
|
&& $form->process("func") eq "editSave"
|
||||||
&& $form->process("class") eq "WebGUI::Asset::Event"
|
&& $form->process("class") eq "WebGUI::Asset::Event"
|
||||||
);
|
);
|
||||||
|
|
||||||
return $self->SUPER::canEdit()
|
# Who can edit the Calendar can do everything
|
||||||
|
if ( $self->SUPER::canEdit( $userId ) ) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fails all checks
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 canAddEvent
|
=head2 canAddEvent ( [userId] )
|
||||||
|
|
||||||
Returns true if able to add events. Checks to make sure that the
|
Returns true if able to add events. Checks to make sure that the
|
||||||
Calendar has been committed at least once. Checks to make sure that
|
Calendar has been committed at least once. Checks to make sure that
|
||||||
|
|
@ -409,6 +418,12 @@ the calendar, or the group that can edit events in the calendar).
|
||||||
|
|
||||||
sub canAddEvent {
|
sub canAddEvent {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $userId = shift;
|
||||||
|
|
||||||
|
my $user = $userId
|
||||||
|
? WebGUI::User->new( $self->session, $userId )
|
||||||
|
: $self->session->user
|
||||||
|
;
|
||||||
|
|
||||||
# Events can only be added after the Calendar has been committed once
|
# Events can only be added after the Calendar has been committed once
|
||||||
return 0 if (
|
return 0 if (
|
||||||
|
|
@ -417,8 +432,7 @@ sub canAddEvent {
|
||||||
);
|
);
|
||||||
|
|
||||||
return 1 if (
|
return 1 if (
|
||||||
$self->session->user->isInGroup($self->get("groupIdEventEdit"))
|
$user->isInGroup($self->get("groupIdEventEdit"))
|
||||||
|| $self->SUPER::canEdit
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,10 @@ This module is B<NOT> to be used by the Gallery asset itself!
|
||||||
my $thread = WebGUI::Asset::Post::Thread->new( ... );
|
my $thread = WebGUI::Asset::Post::Thread->new( ... );
|
||||||
$utility->addAlbumFromThread( $gallery, $thread );
|
$utility->addAlbumFromThread( $gallery, $thread );
|
||||||
|
|
||||||
|
# Add a single album from a Folder asset
|
||||||
|
my $folder = WebGUI::Asset::Wobject::Folder->new( ... );
|
||||||
|
$utility->addAlbumFromFolder( $gallery, $folder );
|
||||||
|
|
||||||
# Add a single album from a filesystem branch
|
# Add a single album from a filesystem branch
|
||||||
$utility->addAlbumFromFilesystem( $gallery, "/Users/Doug/Photos" );
|
$utility->addAlbumFromFilesystem( $gallery, "/Users/Doug/Photos" );
|
||||||
|
|
||||||
|
|
@ -131,6 +135,72 @@ sub addAlbumFromFilesystem {
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
=head2 addAlbumFromFolder ( gallery, folder )
|
||||||
|
|
||||||
|
Add an album from a Folder asset filled with File assets. C<gallery> is an
|
||||||
|
instance of a Gallery asset. C<folder> is an instance of a Folder asset.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub addAlbumFromFolder {
|
||||||
|
my $class = shift;
|
||||||
|
my $gallery = shift;
|
||||||
|
my $folder = shift;
|
||||||
|
|
||||||
|
croak "First argument must be Gallery asset"
|
||||||
|
unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery');
|
||||||
|
croak "Second argument must be Folder asset"
|
||||||
|
unless blessed $folder && $folder->isa('WebGUI::Asset::Wobject::Folder');
|
||||||
|
|
||||||
|
my $session = $gallery->session;
|
||||||
|
my $addOptions = { skipAutoCommitWorkflows => 1 };
|
||||||
|
|
||||||
|
# Create the new album
|
||||||
|
my $album = $gallery->addChild({
|
||||||
|
className => 'WebGUI::Asset::Wobject::GalleryAlbum',
|
||||||
|
description => $folder->get('description'),
|
||||||
|
menuTitle => $folder->get('menuTitle'),
|
||||||
|
createdBy => $folder->get('createdBy'),
|
||||||
|
creationDate => $folder->get('creationDate'),
|
||||||
|
ownerUserId => $folder->get('ownerUserId'),
|
||||||
|
synopsis => $folder->get('synopsis'),
|
||||||
|
title => $folder->get('title'),
|
||||||
|
url => $session->url->urlize( $gallery->get('url') . "/" . $folder->get('title') ),
|
||||||
|
}, undef, $folder->get('revisionDate'), $addOptions );
|
||||||
|
|
||||||
|
my $fileIds
|
||||||
|
= $folder->getLineage( ['children'], {
|
||||||
|
joinClass => 'WebGUI::Asset::File',
|
||||||
|
} );
|
||||||
|
|
||||||
|
for my $fileId ( @{ $fileIds } ) {
|
||||||
|
my $oldFile = WebGUI::Asset->newByDynamicClass( $session, $fileId );
|
||||||
|
my $oldStorage = $oldFile->getStorageLocation;
|
||||||
|
my $className = $gallery->getAssetClassForFile( $oldStorage->getPath( $oldFile->get('filename') ) );
|
||||||
|
if ( !$className ) {
|
||||||
|
warn "Skipping " . $oldFile->get('filename') . " Gallery doesn't handle this file type";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $newFile = $album->addChild({
|
||||||
|
className => $className,
|
||||||
|
createdBy => $oldFile->get('createdBy'),
|
||||||
|
creationDate => $oldFile->get('creationDate'),
|
||||||
|
menuTitle => $oldFile->get('menuTitle'),
|
||||||
|
ownerUserId => $oldFile->get('ownerUserId'),
|
||||||
|
synopsis => $oldFile->get('synopsis'),
|
||||||
|
title => $oldFile->get('title'),
|
||||||
|
url => $session->url->urlize( $album->get('url') . "/" . $oldFile->get('menuTitle') ),
|
||||||
|
}, undef, $oldFile->get('revisionDate'), $addOptions );
|
||||||
|
|
||||||
|
$newFile->setFile( $oldStorage->getPath( $oldFile->get('filename') ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 addAlbumFromThread ( gallery, thread )
|
=head2 addAlbumFromThread ( gallery, thread )
|
||||||
|
|
||||||
Add an album to the gallery from the given Collaboration System thread.
|
Add an album to the gallery from the given Collaboration System thread.
|
||||||
|
|
|
||||||
138
sbin/migrateFolderToGallery.pl
Normal file
138
sbin/migrateFolderToGallery.pl
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
|
||||||
|
use lib "../lib";
|
||||||
|
use strict;
|
||||||
|
use Getopt::Long;
|
||||||
|
use Pod::Usage;
|
||||||
|
use WebGUI::Utility::Gallery;
|
||||||
|
use WebGUI::Session;
|
||||||
|
|
||||||
|
my $session = start();
|
||||||
|
|
||||||
|
my $folder = getFolderFromArgs();
|
||||||
|
my $gallery = getGalleryFromArgs();
|
||||||
|
|
||||||
|
WebGUI::Utility::Gallery->addAlbumFromFolder( $gallery, $folder );
|
||||||
|
|
||||||
|
finish($session);
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# getFolderFromArgs
|
||||||
|
# Gets the folder from the arguments. The argument can be
|
||||||
|
# either an assetId or an absolute URL
|
||||||
|
sub getFolderFromArgs {
|
||||||
|
my $asset;
|
||||||
|
my $arg = $ARGV[0];
|
||||||
|
if ( $arg =~ m{^/} ) {
|
||||||
|
$asset = WebGUI::Asset->newByUrl( $session, $arg );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$asset = WebGUI::Asset->newByDynamicClass( $session, $arg );
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Folder') ) {
|
||||||
|
pod2usage("$0: First argument must be a Folder asset");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# getGalleryFromArgs
|
||||||
|
# Gets the Gallery from the arguments. The argument can be either an assetId
|
||||||
|
# or an absolute URL
|
||||||
|
sub getGalleryFromArgs {
|
||||||
|
my $asset;
|
||||||
|
my $arg = $ARGV[1];
|
||||||
|
if ( $arg =~ m{^/} ) {
|
||||||
|
$asset = WebGUI::Asset->newByUrl( $session, $arg );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$asset = WebGUI::Asset->newByDynamicClass( $session, $arg );
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Gallery') ) {
|
||||||
|
pod2usage("$0: Second argument must be a Gallery asset");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
sub start {
|
||||||
|
$| = 1; #disable output buffering
|
||||||
|
my ($configFile, $help);
|
||||||
|
GetOptions(
|
||||||
|
'configFile=s' => \$configFile,
|
||||||
|
'help' => \$help,
|
||||||
|
);
|
||||||
|
|
||||||
|
# Show usage
|
||||||
|
if ($help) {
|
||||||
|
pod2usage(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ($configFile) {
|
||||||
|
pod2usage("$0: Must specify a --configFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
my $session = WebGUI::Session->open("..",$configFile);
|
||||||
|
$session->user({userId=>3});
|
||||||
|
|
||||||
|
my $versionTag = WebGUI::VersionTag->getWorking($session);
|
||||||
|
$versionTag->set({name => 'Migrate Folder to Gallery'});
|
||||||
|
|
||||||
|
return $session;
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
sub finish {
|
||||||
|
my $session = shift;
|
||||||
|
|
||||||
|
my $versionTag = WebGUI::VersionTag->getWorking($session);
|
||||||
|
$versionTag->commit;
|
||||||
|
|
||||||
|
$session->var->end;
|
||||||
|
$session->close;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
migrateFolderToGallery.pl -- Migrate a Folder into a Gallery
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
migrateFolderToGallery.pl --configFile=<config> <folder> <gallery>
|
||||||
|
|
||||||
|
=head1 ARGUMENTS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item folder
|
||||||
|
|
||||||
|
A Folder URL or asset ID. The URL must be an absolute URL, and
|
||||||
|
so must begin with a "/".
|
||||||
|
|
||||||
|
=item gallery
|
||||||
|
|
||||||
|
A Gallery URL or asset ID. The URL must be an absolute URL, and so much begin
|
||||||
|
with a "/".
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 OPTIONS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item configFile
|
||||||
|
|
||||||
|
The WebGUI config file to use.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This script migrates a Folder into a gallery album. It
|
||||||
|
uses C<WebGUI::Utility::Gallery> for its major features.
|
||||||
|
|
||||||
|
|
||||||
86
t/Asset/Event/permissions.t
Normal file
86
t/Asset/Event/permissions.t
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
# vim:syntax=perl
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# WebGUI is Copyright 2001-2008 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
|
||||||
|
#------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Write a little about what this script tests.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
use FindBin;
|
||||||
|
use strict;
|
||||||
|
use lib "$FindBin::Bin/../../lib";
|
||||||
|
use Test::More;
|
||||||
|
use WebGUI::Test; # Must use this before any other WebGUI modules
|
||||||
|
use WebGUI::Test::Maker::Permission;
|
||||||
|
use WebGUI::Session;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Init
|
||||||
|
my $session = WebGUI::Test->session;
|
||||||
|
my $maker = WebGUI::Test::Maker::Permission->new;
|
||||||
|
my $node = WebGUI::Asset->getImportNode( $session );
|
||||||
|
|
||||||
|
$session->user({ userId => 3 });
|
||||||
|
my @versionTags = ();
|
||||||
|
push @versionTags, WebGUI::VersionTag->getWorking($session);
|
||||||
|
$versionTags[-1]->set({name=>"Photo Test, add Gallery, Album and 1 Photo"});
|
||||||
|
|
||||||
|
my $registeredUser = WebGUI::User->new( $session, "new" );
|
||||||
|
|
||||||
|
# Make a Calendar to add events do
|
||||||
|
my $calendar = $node->addChild({
|
||||||
|
className => 'WebGUI::Asset::Wobject::Calendar',
|
||||||
|
groupIdView => '7', # Everyone
|
||||||
|
groupIdEdit => '3', # Admins
|
||||||
|
groupIdEventEdit => '2', # Registered Users
|
||||||
|
});
|
||||||
|
|
||||||
|
$versionTags[-1]->commit;
|
||||||
|
|
||||||
|
# Arguments for when adding events
|
||||||
|
my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } );
|
||||||
|
|
||||||
|
my $event;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Tests
|
||||||
|
|
||||||
|
plan tests => 12; # Increment this number for each test you create
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Test permissions of an event added by the Admin
|
||||||
|
push @versionTags, WebGUI::VersionTag->getWorking($session);
|
||||||
|
$versionTags[-1]->set({name=>"Photo Test, add Gallery, Album and 1 Photo"});
|
||||||
|
$event = $calendar->addChild({
|
||||||
|
className => 'WebGUI::Asset::Event',
|
||||||
|
ownerUserId => 3,
|
||||||
|
}, @addArgs);
|
||||||
|
|
||||||
|
$maker->prepare( {
|
||||||
|
object => $event,
|
||||||
|
method => 'canView',
|
||||||
|
pass => [ '1', '3', $registeredUser, ],
|
||||||
|
fail => [ ],
|
||||||
|
} )->run;
|
||||||
|
$maker->prepare( {
|
||||||
|
object => $event,
|
||||||
|
method => 'canEdit',
|
||||||
|
pass => [ '3', ],
|
||||||
|
fail => [ '1', $registeredUser, ],
|
||||||
|
} )->run;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Cleanup
|
||||||
|
END {
|
||||||
|
for my $tag ( @versionTags ) {
|
||||||
|
$tag->rollback;
|
||||||
|
}
|
||||||
|
$registeredUser->delete;
|
||||||
|
}
|
||||||
|
|
@ -258,10 +258,6 @@ is(
|
||||||
"addAlbumFromCollaboration creates one album per thread",
|
"addAlbumFromCollaboration creates one album per thread",
|
||||||
);
|
);
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
# Test addAlbumFromFilesystem
|
|
||||||
# TODO!!!
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
# Cleanup
|
# Cleanup
|
||||||
END {
|
END {
|
||||||
180
t/Utility/Gallery/addAlbumFromFolder.t
Normal file
180
t/Utility/Gallery/addAlbumFromFolder.t
Normal file
|
|
@ -0,0 +1,180 @@
|
||||||
|
# $vim:syntax=perl
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# WebGUI is Copyright 2001-2008 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
|
||||||
|
#------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Test the addAlbum* methods from the Gallery::Utility class
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use FindBin;
|
||||||
|
use lib "$FindBin::Bin/../../lib";
|
||||||
|
use Test::More;
|
||||||
|
use Test::Deep;
|
||||||
|
use WebGUI::Test;
|
||||||
|
use WebGUI::Asset;
|
||||||
|
use WebGUI::Session;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Init
|
||||||
|
my $session = WebGUI::Test->session;
|
||||||
|
my $node = WebGUI::Asset->getImportNode( $session );
|
||||||
|
|
||||||
|
# Add arguments to avoid autocommit workflows
|
||||||
|
my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } );
|
||||||
|
|
||||||
|
my @versionTags;
|
||||||
|
push @versionTags, WebGUI::VersionTag->getWorking( $session );
|
||||||
|
|
||||||
|
# Generate a Gallery to import into
|
||||||
|
my $gallery;
|
||||||
|
my $album;
|
||||||
|
|
||||||
|
# Generate a folder to import
|
||||||
|
my $folder
|
||||||
|
= $node->addChild({
|
||||||
|
className => 'WebGUI::Asset::Wobject::Folder',
|
||||||
|
});
|
||||||
|
|
||||||
|
my @files;
|
||||||
|
for (0..2) {
|
||||||
|
push @files, $folder->addChild({
|
||||||
|
className => 'WebGUI::Asset::File::Image',
|
||||||
|
menuTitle => "menuTitle$_",
|
||||||
|
ownerUserId => "3$_",
|
||||||
|
synopsis => "synopsis$_",
|
||||||
|
title => "title$_", # This is important. Used to detect which GalleryFile is from which File
|
||||||
|
filename => 'lamp.jpg',
|
||||||
|
}, @addArgs);
|
||||||
|
$files[-1]->getStorageLocation->addFileFromFilesystem(
|
||||||
|
WebGUI::Test->getTestCollateralPath('lamp.jpg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# File to GalleryFile field mappings. Should be mostly the same
|
||||||
|
my %fileField = (
|
||||||
|
title => "title",
|
||||||
|
menuTitle => "menuTitle",
|
||||||
|
synopsis => "synopsis",
|
||||||
|
ownerUserId => "ownerUserId",
|
||||||
|
filename => "filename",
|
||||||
|
);
|
||||||
|
|
||||||
|
# Folder to GalleryAlbum field mappings.
|
||||||
|
my %folderField = (
|
||||||
|
title => "title",
|
||||||
|
menuTitle => "menuTitle",
|
||||||
|
description => "description",
|
||||||
|
createdBy => 'createdBy',
|
||||||
|
creationDate => 'creationDate',
|
||||||
|
ownerUserId => 'ownerUserId',
|
||||||
|
synopsis => 'synopsis',
|
||||||
|
);
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Tests
|
||||||
|
|
||||||
|
# 1 test for each file + file field tests
|
||||||
|
my $fileTests = scalar @files * ( 3 + scalar keys %fileField );
|
||||||
|
|
||||||
|
# 1 test for each item in folderField
|
||||||
|
my $folderTests = scalar keys %folderField;
|
||||||
|
|
||||||
|
plan tests => 10
|
||||||
|
+ $fileTests
|
||||||
|
+ $folderTests
|
||||||
|
;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Test use
|
||||||
|
my $utility = 'WebGUI::Utility::Gallery';
|
||||||
|
use_ok($utility);
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Test addAlbumFromFolder
|
||||||
|
$gallery = $node->addChild({ className => 'WebGUI::Asset::Wobject::Gallery' });
|
||||||
|
|
||||||
|
ok(
|
||||||
|
!eval{ $utility->addAlbumFromFolder( "", $folder ); 1},
|
||||||
|
"addAlbumFromFolder croaks if first argument is not a Gallery asset",
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(
|
||||||
|
!eval{ $utility->addAlbumFromFolder( $gallery, "" ); 1},
|
||||||
|
"addAlbumFromFolder croaks if second argument is not a Folder asset",
|
||||||
|
);
|
||||||
|
|
||||||
|
$utility->addAlbumFromFolder( $gallery, $folder );
|
||||||
|
|
||||||
|
is(
|
||||||
|
scalar @{ $gallery->getAlbumIds }, 1,
|
||||||
|
"addAlbumFromFolder creates a new album",
|
||||||
|
);
|
||||||
|
|
||||||
|
$album = WebGUI::Asset->newByDynamicClass( $session, $gallery->getAlbumIds->[0] );
|
||||||
|
|
||||||
|
is(
|
||||||
|
$album->get('revisionDate'), $folder->get('revisionDate'),
|
||||||
|
"addAlbumFromFolder creates album with same revisionDate as folder",
|
||||||
|
);
|
||||||
|
|
||||||
|
my $galleryUrl = $gallery->get('url');
|
||||||
|
like(
|
||||||
|
$album->get('url'), qr/^$galleryUrl/,
|
||||||
|
"addAlbumFromFolder creates album with url that begins with gallery's url",
|
||||||
|
);
|
||||||
|
|
||||||
|
# 1 test for each field in %folderField
|
||||||
|
for my $oldField ( sort keys %folderField ) {
|
||||||
|
is( $album->get( $folderField{ $oldField } ), $folder->get( $oldField ),
|
||||||
|
"addAlbumFromFolder migrates Folder $oldField to GalleryAlbum $folderField{$oldField}",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
is(
|
||||||
|
scalar @{ $album->getFileIds }, $folder->getChildCount,
|
||||||
|
"addAlbumFromFolder adds one file for each File in the Folder",
|
||||||
|
);
|
||||||
|
|
||||||
|
# 4 tests for each file + fileField tests
|
||||||
|
my $albumUrl = $album->get('url');
|
||||||
|
for my $fileId ( @{$album->getFileIds} ) {
|
||||||
|
my $newFile = WebGUI::Asset->newByDynamicClass( $session, $fileId );
|
||||||
|
|
||||||
|
# Find which File this was in the original Folder
|
||||||
|
( my $index ) = $newFile->get('title') =~ /title(\d+)/;
|
||||||
|
my $oldFile = $files[ $index ];
|
||||||
|
|
||||||
|
for my $oldField ( sort keys %fileField ) {
|
||||||
|
is ( $newFile->get( $fileField{ $oldField } ), $oldFile->get( $oldField ),
|
||||||
|
"addAlbumFromFolder migrates File $oldField to GalleryFile $fileField{$oldField}",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
like(
|
||||||
|
$newFile->get('url'), qr/^$albumUrl/,
|
||||||
|
"addAlbumFromFolder add files with urls that begin with GalleryAlbum url",
|
||||||
|
);
|
||||||
|
isa_ok( $newFile->getStorageLocation, 'WebGUI::Storage', 'Storage location exists' );
|
||||||
|
ok( $newFile->get('filename'), '"filename" property was set' );
|
||||||
|
cmp_deeply(
|
||||||
|
$newFile->getStorageLocation->getFiles, superbagof($newFile->get('filename')),
|
||||||
|
"Storage location contains the filename"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Cleanup
|
||||||
|
END {
|
||||||
|
for my $tag ( @versionTags ) {
|
||||||
|
$tag->rollback;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue