From 3d5f5b04c1f002e66a3801560940d8f2ec65ada8 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 20 Mar 2009 21:42:47 +0000 Subject: [PATCH] Rearrange form fields in default edit story template. Change photo JSON blob to be an array ref, not a hash ref. Code for saving new photo data. --- .../root_import_storymanager.wgpkg | Bin 2737 -> 2583 bytes lib/WebGUI/Asset/Story.pm | 10 +++--- lib/WebGUI/i18n/English/Asset_Story.pm | 30 ++++++++++++++++++ t/Asset/Story.t | 24 +++++++------- 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/docs/upgrades/packages-7.7.0/root_import_storymanager.wgpkg b/docs/upgrades/packages-7.7.0/root_import_storymanager.wgpkg index f0afef65e6d0f87d974e1d8939d1e2fa08eeee10..ca8add516ee98165518bf7d244ee84bc7b1eb401 100644 GIT binary patch literal 2583 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 diff --git a/lib/WebGUI/Asset/Story.pm b/lib/WebGUI/Asset/Story.pm index 7db6d342f..228f4868f 100644 --- a/lib/WebGUI/Asset/Story.pm +++ b/lib/WebGUI/Asset/Story.pm @@ -145,7 +145,7 @@ sub definition { }, photo => { fieldType => 'text', - defaultValue => '{}', + defaultValue => '[]', }, storageId => { fieldType => 'hidden', @@ -249,7 +249,6 @@ sub getAutoCommitWorkflowId { my $self = shift; my $archive = $self->getArchive; if ($archive->hasBeenCommitted) { - $self->session->log->warn($archive->get('approvalWorkflowId')); return $archive->get('approvalWorkflowId') || $self->session->setting->get('defaultVersionTagWorkflow'); } @@ -490,6 +489,7 @@ sub processPropertiesFromFormPost { if ($newStorage) { push @{ $photoData }, { caption => $form->process('newImgCaption', 'text'), + alt => $form->process('newImgAlt', 'text'), title => $form->process('newImgTitle', 'text'), byLine => $form->process('newImgByline', 'text'), url => $form->process('newImgUrl', 'url'), @@ -538,9 +538,7 @@ sub purgeRevision { =head2 setPhotoData ( $perlStructure ) -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. +Sets the photo data from the JSON stored in the object. =head3 $perlStructure @@ -577,7 +575,7 @@ want in there so there's no valid content checking. sub setPhotoData { my $self = shift; - my $photoData = shift || {}; + my $photoData = shift || []; my $photo = to_json($photoData); $self->update({photo => $photo}); delete $self->{_photoData}; diff --git a/lib/WebGUI/i18n/English/Asset_Story.pm b/lib/WebGUI/i18n/English/Asset_Story.pm index 051ce9755..f23de7694 100644 --- a/lib/WebGUI/i18n/English/Asset_Story.pm +++ b/lib/WebGUI/i18n/English/Asset_Story.pm @@ -344,6 +344,36 @@ our $I18N = { lastUpdated => 0, }, + 'photo caption' => { + message => q|Photo Caption|, + context => q|Label in the edit story form. Short for Photograph Caption.|, + lastUpdated => 0, + }, + + 'photo byline' => { + message => q|Photo By Line|, + context => q|Label in the edit story form. The person who took, or owns this photo.|, + lastUpdated => 0, + }, + + 'photo alt' => { + message => q|Photo Alternate Text|, + context => q|Label in the edit story form. Text for the ALT attribute of an IMG tag.|, + lastUpdated => 0, + }, + + 'photo title' => { + message => q|Photo Alternate Title|, + context => q|Label in the edit story form. Text for the TITLE attribute of an IMG tag.|, + lastUpdated => 0, + }, + + 'photo url' => { + message => q|Photo URL|, + context => q|Label in the edit story form. A link from the photo to more information about it, or referring to it.|, + lastUpdated => 0, + }, + }; 1; diff --git a/t/Asset/Story.t b/t/Asset/Story.t index 0325e1fb5..635828a4a 100644 --- a/t/Asset/Story.t +++ b/t/Asset/Story.t @@ -81,7 +81,7 @@ $story = $archive->addChild({ isa_ok($story, 'WebGUI::Asset::Story', 'Created a Story asset'); is($story->get('storageId'), '', 'by default, there is no storageId'); -is($story->get('photo'), '{}', 'by default, photos is an empty JSON hash'); +is($story->get('photo'), '[]', 'by default, photos is an empty JSON array'); is($story->get('isHidden'), 1, 'by default, stories are hidden'); $story->update({isHidden => 0}); is($story->get('isHidden'), 1, 'stories cannot be set to not be hidden'); @@ -111,36 +111,36 @@ is($story->getArchive->getId, $archive->getId, 'getArchive gets the parent archi my $photoData = $story->getPhotoData(); cmp_deeply( - $photoData, {}, - 'getPhotoData: returns an empty hash with no JSON data' + $photoData, [], + 'getPhotoData: returns an empty array ref with no JSON data' ); -$story->setPhotoData({ - filename1 => { +$story->setPhotoData([ + { byLine => 'Andrew Dufresne', caption => 'Shawshank Prison', }, -}); +]); -is($story->get('photo'), q|{"filename1":{"caption":"Shawshank Prison","byLine":"Andrew Dufresne"}}|, 'setPhotoData: set JSON in the photo property'); +is($story->get('photo'), q|[{"caption":"Shawshank Prison","byLine":"Andrew Dufresne"}]|, 'setPhotoData: set JSON in the photo property'); $photoData = $story->getPhotoData(); -$photoData->{filename1}->{caption}="My cell"; +$photoData->[0]->{caption}="My cell"; cmp_deeply( $story->getPhotoData, - { - filename1 => { + [ + { byLine => 'Andrew Dufresne', caption => 'Shawshank Prison', }, - }, + ], 'getPhotoData does not return an unsafe reference' ); $story->setPhotoData(); cmp_deeply( - $story->getPhotoData, {}, + $story->getPhotoData, [], 'setPhotoData: wipes the stored data if nothing is passed' );