From a5afa49169d2fa51d8ca01cbd09000a8ce8480b4 Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Tue, 11 Aug 2009 16:31:39 +0000 Subject: [PATCH] fixed: Admin bar won't show multiple packages or prototypes with the duplicate titles --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Macro/AdminBar.pm | 79 +++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 1abe42448..fc0ed8235 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.7.17 + - fixed: Admin bar won't show multiple packages or prototypes with the duplicate titles - fixed: Only users in 'Content Managers' can create shortcuts - fixed #10748: In-store credit not reported correctly in email - fixed #10746: SQL queriy is improper for MySQL compliant query diff --git a/lib/WebGUI/Macro/AdminBar.pm b/lib/WebGUI/Macro/AdminBar.pm index fec66d35f..7408a0a14 100644 --- a/lib/WebGUI/Macro/AdminBar.pm +++ b/lib/WebGUI/Macro/AdminBar.pm @@ -127,51 +127,64 @@ sub process { foreach my $assetClass (keys %assetList) { my $dummy = WebGUI::Asset->newByPropertyHashRef($session,{dummy=>1, className=>$assetClass}); next unless defined $dummy; - next if $dummy->getUiLevel($assetList{$assetClass}{uiLevel}) > $userUiLevel; - next unless ($dummy->canAdd($session)); - next unless exists $categories{$assetList{$assetClass}{category}}; - $categories{$assetList{$assetClass}{category}}{items}{$dummy->getTitle} = { - icon => $dummy->getIcon(1), - url => $asset->getUrl("func=add;class=".$dummy->get('className').$proceed), - }; - } + my $assetConfig = $assetList{$assetClass}; + next if $dummy->getUiLevel( $assetConfig->{uiLevel} ) > $userUiLevel; + next unless ($dummy->canAdd($session)); + my $assetInfo = { + icon => $dummy->getIcon(1), + url => $asset->getUrl("func=add;class=" . $dummy->get('className')), + title => $dummy->getTitle, + }; + my @assetCategories = ref $assetConfig->{category} ? @{$assetConfig->{category}} : $assetConfig->{category}; + for my $category (@assetCategories) { + next unless exists $categories{$category}; + $categories{$category}{items} ||= []; + push @{ $categories{$category}{items} }, $assetInfo; + } + } # packages foreach my $package (@{$session->asset->getPackageList}) { next unless ($package->canView && $package->canAdd($session) && $package->getUiLevel <= $userUiLevel); - $categories{packages}{items}{$package->getTitle} = { - url => $asset->getUrl("func=deployPackage;assetId=".$package->getId.$proceed), - icon => $package->getIcon(1), - }; + $categories{packages}{items} ||= []; + push @{$categories{packages}{items}}, { + title => $package->getTitle, + url => $asset->getUrl("func=deployPackage;assetId=".$package->getId.$proceed), + icon => $package->getIcon(1), + }; + } + if ($categories{packages}{items} && @{$categories{packages}{items}}) { + $categories{packages}{title} = $i18n->get('packages'); + $categoryTitles{$i18n->get('packages')} = "packages"; } - if (scalar keys %{$categories{packages}{items}}) { - $categories{packages}{title} = $i18n->get('packages'); - $categoryTitles{$i18n->get('packages')} = "packages"; - } # prototypes foreach my $prototype (@{ $session->asset->getPrototypeList }) { - next unless ($prototype->canView && $prototype->canAdd($session) && $prototype->getUiLevel <= $userUiLevel); - $categories{prototypes}{items}{$prototype->getTitle} = { - url => $asset->getUrl("func=add;class=".$prototype->get('className').";prototype=".$prototype->getId.$proceed), - icon => $prototype->getIcon(1), - }; - } - if (scalar keys %{$categories{prototypes}{items}}) { - $categories{prototypes}{title} = $i18n->get('prototypes'); - $categoryTitles{$i18n->get('prototypes')} = "prototypes"; - } - + next unless ($prototype->canView && $prototype->canAdd($session) && $prototype->getUiLevel <= $userUiLevel); + $categories{prototypes}{items} ||= []; + push @{$categories{prototypes}{items}}, { + title => $prototype->getTitle, + url => $asset->getUrl( + "func=add;class=".$prototype->get('className').";prototype=".$prototype->getId.$proceed + ), + icon => $prototype->getIcon(1), + }; + } + if ($categories{prototypes}{items} && @{$categories{prototypes}{items}}) { + $categories{prototypes}{title} = $i18n->get('prototypes'); + $categoryTitles{$i18n->get('prototypes')} = "prototypes"; + } + # render new content menu $out .= q{
}.$i18n->get("1083").q{
}; foreach my $categoryTitle (sort keys %categoryTitles) { $out .= '
'.$categoryTitle.'
'; my $items = $categories{$categoryTitles{$categoryTitle}}{items}; - next unless (ref $items eq 'HASH'); # in case the category is empty - foreach my $title (sort keys %{$items}) { - $out .= q{} - .q{icon } - .$title.q{}; + next unless (ref $items eq 'ARRAY'); # in case the category is empty + foreach my $item (sort { $a->{title} cmp $b->{title} } @{$items}) { + $out .= q{} + .q{icon } + .$item->{title}.q{}; } $out .= '
'; } @@ -180,7 +193,7 @@ sub process { $out .= q{ }; return $out;