From 1caef590cc654c4904e37b350d55b91a646742ed Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Mon, 7 Jun 2010 11:54:28 -0500 Subject: [PATCH] fix navigation edit form --- lib/WebGUI/Asset/Wobject/Navigation.pm | 382 ++++++++++++----------- lib/WebGUI/FormBuilder/Role/HasFields.pm | 8 + t/tests/Test/WebGUI/Asset.pm | 44 ++- 3 files changed, 227 insertions(+), 207 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/Navigation.pm b/lib/WebGUI/Asset/Wobject/Navigation.pm index 6b5e2b66d..9a5372301 100644 --- a/lib/WebGUI/Asset/Wobject/Navigation.pm +++ b/lib/WebGUI/Asset/Wobject/Navigation.pm @@ -28,12 +28,15 @@ define tableName => 'Navigation'; property templateId => ( label => ['1096', 'Asset_Navigation'], hoverHelp => ['1096 description', 'Asset_Navigation'], + tab => 'display', fieldType => "template", default => 'PBtmpl0000000000000048', + namespace => 'Navigation', ); property mimeType => ( label => ['mimeType', 'Asset_Navigation'], hoverHelp => ['mimeType description', 'Asset_Navigation'], + tab => 'display', fieldType => "mimeType", default => 'text/html', ); @@ -69,21 +72,25 @@ property showSystemPages => ( label => [30, 'Asset_Navigation'], fieldType => 'yesNo', default => 0, + tab => "display", ); property showHiddenPages => ( label => [31, 'Asset_Navigation'], fieldType => 'yesNo', default => 0, + tab => "display", ); property showUnprivilegedPages => ( label => [32, 'Asset_Navigation'], fieldType => 'yesNo', default => 0, + tab => "display", ); property reversePageLoop => ( label => ['reverse page loop', 'Asset_Navigation'], fieldType => 'yesNo', default => 0, + tab => "display", ); #------------------------------------------------------------------- @@ -95,190 +102,197 @@ Manually build the edit form due to javascript elements. =cut override getEditForm => sub { - my $self = shift; - my $tabform = super(); - my $i18n = WebGUI::International->new($self->session, "Asset_Navigation"); - $tabform->getTab("display")->template( - -value=>$self->templateId, - -namespace=>"Navigation", - -label=>$i18n->get(1096), - -hoverHelp=>$i18n->get('1096 description'), - ); - $tabform->getTab("display")->mimeType( - -value=>$self->mimeType, - -name=>"mimeType", - -label=>$i18n->get('mimeType'), - -hoverHelp=>$i18n->get('mimeType description'), - ); - $tabform->hidden({ - name=>"returnUrl", - value=>$self->session->form->process("returnUrl") - }); - my ($descendantsChecked, $ancestorsChecked, $selfChecked, $pedigreeChecked, $siblingsChecked); - my @assetsToInclude = split("\n",$self->assetsToInclude); - my $afterScript; - foreach my $item (@assetsToInclude) { - if ($item eq "self") { - $selfChecked = 1; - } elsif ($item eq "descendants") { - $descendantsChecked = 1; - $afterScript = "displayNavEndPoint = false;"; - } elsif ($item eq "ancestors") { - $ancestorsChecked = 1; - } elsif ($item eq "siblings") { - $siblingsChecked = 1; - } elsif ($item eq "pedigree") { - $pedigreeChecked = 1; - } - } - $tabform->getTab("properties")->selectBox( - -name=>"startType", - -options=>{ - specificUrl=>$i18n->get('Specific URL'), - relativeToCurrentUrl=>$i18n->get('Relative To Current URL'), - relativeToRoot=>$i18n->get('Relative To Root') - }, - -value=>[$self->startType], - -label=>$i18n->get("Start Point Type"), - -hoverHelp=>$i18n->get("Start Point Type description"), - -id=>"navStartType", - -extras=>'onchange="changeStartPoint()"' - ); - $tabform->getTab("properties")->readOnly( - -label=>$i18n->get("Start Point"), - -hoverHelp=>$i18n->get("Start Point description"), - -value=>'' - ); - my %options = (); - tie %options, 'Tie::IxHash'; - %options = ( - '1'=>'../ (-1)', - '2'=>'../../ (-2)', - '3'=>'../../../ (-3)', - '4'=>'../../../../ (-4)', - '5'=>'../../../../../ (-5)', - '55'=>$i18n->get('Infinity') - ); - $tabform->getTab("properties")->raw( - ''.$i18n->get("Ancestor End Point").'' - .WebGUI::Form::selectBox($self->session,{ - name=>"ancestorEndPoint", - value=>[$self->ancestorEndPoint], - options=>\%options - }) - .'' - ); - $tabform->getTab("properties")->readOnly( - -label=>$i18n->get("Relatives To Include"), - -hoverHelp=>$i18n->get("Relatives To Include description"), - -value=>WebGUI::Form::checkbox($self->session,{ - checked=>$ancestorsChecked, - name=>"assetsToInclude", - extras=>'onchange="toggleAncestorEndPoint()"', - value=>"ancestors" - }).$i18n->get('Ancestors').'
' - .WebGUI::Form::checkbox($self->session,{ - checked=>$selfChecked, - name=>"assetsToInclude", - value=>"self" - }).$i18n->get('Self').'
' - .WebGUI::Form::checkbox($self->session,{ - checked=>$siblingsChecked, - name=>"assetsToInclude", - value=>"siblings" - }).$i18n->get('Siblings').'
' - .WebGUI::Form::checkbox($self->session,{ - checked=>$descendantsChecked, - name=>"assetsToInclude", - value=>"descendants", - extras=>'onchange="toggleDescendantEndPoint()"' - }).$i18n->get('Descendants').'
' - .WebGUI::Form::checkbox($self->session,{ - checked=>$pedigreeChecked, - name=>"assetsToInclude", - value=>"pedigree" - }).$i18n->get('Pedigree').'
' - ); - %options = (); - tie %options, 'Tie::IxHash'; - %options = ( - '1'=>'./a/ (+1)', - '2'=>'./a/b/ (+2)', - '3'=>'./a/b/c/ (+3)', - '4'=>'./a/b/c/d/ (+4)', - '5'=>'./a/b/c/d/e/ (+5)', - '55'=>$i18n->get('Infinity') - ); - $tabform->getTab("properties")->raw( - ''.$i18n->get('Descendant End Point').'' - .WebGUI::Form::selectBox($self->session,{ - name=>"descendantEndPoint", - value=>[$self->descendantEndPoint], - options=>\%options - }) - .'' - ); - $tabform->getTab("display")->yesNo( - -name=>'showSystemPages', - -label=>$i18n->get(30), - -hoverHelp=>$i18n->get('30 description'), - -value=>$self->showSystemPages - ); - $tabform->getTab("display")->yesNo( - -name=>'showHiddenPages', - -label=>$i18n->get(31), - -hoverHelp=>$i18n->get('31 description'), - -value=>$self->showHiddenPages - ); - $tabform->getTab("display")->yesNo( - -name=>'showUnprivilegedPages', - -label=>$i18n->get(32), - -hoverHelp=>$i18n->get('32 description'), - -value=>$self->showUnprivilegedPages - ); - $tabform->getTab("display")->yesNo( - -name=>'reversePageLoop', - -label=>$i18n->get('reverse page loop'), - -hoverHelp => $i18n->get('reverse page loop description'), - -value=>$self->reversePageLoop, - ); - my $start = $self->startPoint; - $tabform->getTab("properties")->raw(""); - return $tabform; + my $self = shift; + my $fb = super(); + my $i18n = WebGUI::International->new($self->session, "Navigation"); + my ( $descendantsChecked, $ancestorsChecked, $selfChecked, $pedigreeChecked, $siblingsChecked ); + my @assetsToInclude = split( "\n", $self->assetsToInclude ); + my $afterScript; + foreach my $item (@assetsToInclude) { + if ( $item eq "self" ) { + $selfChecked = 1; + } + elsif ( $item eq "descendants" ) { + $descendantsChecked = 1; + $afterScript = "displayNavEndPoint = false;"; + } + elsif ( $item eq "ancestors" ) { + $ancestorsChecked = 1; + } + elsif ( $item eq "siblings" ) { + $siblingsChecked = 1; + } + elsif ( $item eq "pedigree" ) { + $pedigreeChecked = 1; + } + } ## end foreach my $item (@assetsToInclude) + $fb->getTab("properties")->addField( "selectBox", + name => "startType", + options => { + specificUrl => $i18n->get('Specific URL'), + relativeToCurrentUrl => $i18n->get('Relative To Current URL'), + relativeToRoot => $i18n->get('Relative To Root') + }, + value => [ $self->startType ], + label => $i18n->get("Start Point Type"), + hoverHelp => $i18n->get("Start Point Type description"), + id => "navStartType", + extras => 'onchange="changeStartPoint()"' + ); + $fb->getTab("properties")->addField( "ReadOnly", + label => $i18n->get("Start Point"), + hoverHelp => $i18n->get("Start Point description"), + value => '' + ); + tie my %ancestorEndPointOptions, 'Tie::IxHash', ( + '1' => '../ (-1)', + '2' => '../../ (-2)', + '3' => '../../../ (-3)', + '4' => '../../../../ (-4)', + '5' => '../../../../../ (-5)', + '55' => $i18n->get('Infinity') + ); + $fb->getTab("properties")->addField( "SelectBox" => + name => "ancestorEndPoint", + value => [ $self->ancestorEndPoint ], + options => \%ancestorEndPointOptions, + label => $i18n->get('Ancestor End Point'), + rowClass => 'navAncestorEnd', + ); + $fb->getTab("properties")->addField( "ReadOnly" => + label => $i18n->get("Relatives To Include"), + hoverHelp => $i18n->get("Relatives To Include description"), + value => WebGUI::Form::checkbox( + $self->session, { + checked => $ancestorsChecked, + name => "assetsToInclude", + extras => 'onchange="toggleAncestorEndPoint()"', + value => "ancestors" + } + ) + . $i18n->get('Ancestors') + . '
' + . WebGUI::Form::checkbox( + $self->session, { + checked => $selfChecked, + name => "assetsToInclude", + value => "self" + } + ) + . $i18n->get('Self') + . '
' + . WebGUI::Form::checkbox( + $self->session, { + checked => $siblingsChecked, + name => "assetsToInclude", + value => "siblings" + } + ) + . $i18n->get('Siblings') + . '
' + . WebGUI::Form::checkbox( + $self->session, { + checked => $descendantsChecked, + name => "assetsToInclude", + value => "descendants", + extras => 'onchange="toggleDescendantEndPoint()"' + } + ) + . $i18n->get('Descendants') + . '
' + . WebGUI::Form::checkbox( + $self->session, { + checked => $pedigreeChecked, + name => "assetsToInclude", + value => "pedigree" + } + ) + . $i18n->get('Pedigree') + . '
' + ); + tie my %descendantEndPointOptions, 'Tie::IxHash', ( + '1' => './a/ (+1)', + '2' => './a/b/ (+2)', + '3' => './a/b/c/ (+3)', + '4' => './a/b/c/d/ (+4)', + '5' => './a/b/c/d/e/ (+5)', + '55' => $i18n->get('Infinity') + ); + $fb->getTab("properties")->addField( "selectBox", + name => "descendantEndPoint", + label => $i18n->get('Descendant End Point'), + value => [ $self->descendantEndPoint ], + options => \%descendantEndPointOptions, + rowClass => "navDescendantEnd", + ); + my $start = $self->startPoint; + $fb->addField( "ReadOnly", + value => + "" + ); + return $fb; }; diff --git a/lib/WebGUI/FormBuilder/Role/HasFields.pm b/lib/WebGUI/FormBuilder/Role/HasFields.pm index 47509487a..1503f7cd7 100644 --- a/lib/WebGUI/FormBuilder/Role/HasFields.pm +++ b/lib/WebGUI/FormBuilder/Role/HasFields.pm @@ -119,9 +119,17 @@ sub getFieldsRecursive { if ( $self->DOES('WebGUI::FormBuilder::Role::HasFieldsets') ) { # Add $self->{_fieldsets} fields + for my $fs ( @{$self->fieldsets} ) { + push @$fields, $fs->getFieldsRecursive; + } } if ( $self->DOES('WebGUI::FormBuilder::Role::HasTabs') ) { # Add $self->{_tabs} fields + for my $tabset ( @{$self->tabsets} ) { + for my $tab ( @{$tabset->tabs} ) { + push @$fields, $tab->getFieldsRecursive; + } + } } return $fields; diff --git a/t/tests/Test/WebGUI/Asset.pm b/t/tests/Test/WebGUI/Asset.pm index 25aed9271..565c0a339 100644 --- a/t/tests/Test/WebGUI/Asset.pm +++ b/t/tests/Test/WebGUI/Asset.pm @@ -308,23 +308,7 @@ sub t_05_purge : Test(3) { ok ! $exists_in_table, 'assetId removed from all asset tables'; } -sub cut_paste : Test(5) { - note "cut"; - my $test = shift; - my $session = $test->session; - my ($tag, $asset, @parents) = $test->getAnchoredAsset(); - ok $asset->cut, 'cut returns true if it was cut'; - is $asset->state, 'clipboard', 'asset state updated'; - my $session_asset = $session->asset(); - $session->asset($parents[-1]); - ok $asset->canPaste, 'canPaste: allowed to paste here'; - ok $parents[-1]->paste($asset->assetId), 'paste returns true when it pastes'; - $asset_prime = $asset->cloneFromDb; - is $asset_prime->state, 'published', 'asset state updated'; - $session->asset($session_asset); -} - -sub addRevision : Tests { +sub t_10_addRevision : Tests { note "addRevision"; my ( $test ) = @_; my $session = $test->session; @@ -340,7 +324,7 @@ sub addRevision : Tests { $newRevision->purgeRevision; } -sub getEditForm : Tests { +sub t_11_getEditForm : Tests { note "getEditForm"; my ( $test ) = @_; my $session = $test->session; @@ -351,21 +335,35 @@ sub getEditForm : Tests { isa_ok( $f, 'WebGUI::FormBuilder' ); # assetId, className, keywords - isa_ok( $f->getField('assetId'), 'WebGUI::Form::Guid' ); - isa_ok( $f->getField('className'), 'WebGUI::Form::ClassName' ); - isa_ok( $f->getField('keywords'), 'WebGUI::Form::Keywords' ); + isa_ok( $f->getTab('meta')->getField('assetId'), 'WebGUI::Form::Guid' ); + isa_ok( $f->getTab('meta')->getField('class'), 'WebGUI::Form::ClassName' ); + isa_ok( $f->getTab('meta')->getField('keywords'), 'WebGUI::Form::Keywords' ); + + # Tabs + isa_ok( $f->getTab('properties'), 'WebGUI::FormBuilder::Tab' ); + isa_ok( $f->getTab('display'), 'WebGUI::FormBuilder::Tab' ); + isa_ok( $f->getTab('security'), 'WebGUI::FormBuilder::Tab' ); + isa_ok( $f->getTab('meta'), 'WebGUI::FormBuilder::Tab' ); # Properties + my $properties = map { !$asset->meta->find_attribute_by_name( $_ )->noFormPost } $asset->getProperties; + use Data::Dumper; + note( Dumper $f->getFieldsRecursive ); + exit; + cmp_deeply( + $f->getFieldsRecursive, + bag( map { superhashof( $asset->getFormProperties( $_ ) ) } @$properties ), + ); # Metadata # Property overrides - not_ok( $f->getField('func'), 'form must not contain "func"' ); + ok( !$f->getField('func'), 'form must not contain "func"' ); } -sub www_editSave : Tests { +sub t_20_www_editSave : Tests { note "www_editSave"; my ( $test ) = @_; my $session = $test->session;