diff --git a/docs/upgrades/packages-7.9.4/wiki-master-by-keyword-template.tmpl.wgpkg b/docs/upgrades/packages-7.9.4/wiki-master-by-keyword-template.tmpl.wgpkg new file mode 100644 index 000000000..218e26948 Binary files /dev/null and b/docs/upgrades/packages-7.9.4/wiki-master-by-keyword-template.tmpl.wgpkg differ diff --git a/lib/WebGUI/Asset/Wobject/WikiMaster.pm b/lib/WebGUI/Asset/Wobject/WikiMaster.pm index 81c4ebdf4..9a8479fb6 100644 --- a/lib/WebGUI/Asset/Wobject/WikiMaster.pm +++ b/lib/WebGUI/Asset/Wobject/WikiMaster.pm @@ -520,7 +520,9 @@ The hierarchy data structure that looks like this: { # If there are no children, this key/value pair will not be present ... } - ] + ], + descendants => 25, # The total number of wiki pages that this keyword, and any other sub-keywords + # of this keyword, refer to. } ] @@ -542,16 +544,21 @@ sub getKeywordHierarchy { my $hierarchy = []; $keywords ||= $self->getTopLevelKeywordsList; $seen ||= {}; + my $assetKeyword = WebGUI::Keyword->new($session); KEYWORD: foreach my $keyword (sort @{ $keywords }) { my $datum = { - title => $keyword, ##Note, same as keyword - url => $self->getUrl('func=byKeyword;keyword='.$keyword), + title => $keyword, ##Note, same as keyword + url => $self->getUrl('func=byKeyword;keyword='.$keyword), + descendants => scalar @{ $assetKeyword->getMatchingAssets( { startAsset => $self, keyword => $keyword, }) }, }; ##Prevent recursion if seen again if (! $seen->{$keyword}++) { ##Replace this with a call to getSubKeywords. my $children = $self->getKeywordHierarchy($self->getSubKeywords($keyword), $seen, ); if (@{ $children } ) { + foreach my $child (@{ $children }) { + $datum->{descendants} += $child->{descendants}; + } $datum->{children} = $children; } } diff --git a/t/Asset/Wobject/WikiMaster.t b/t/Asset/Wobject/WikiMaster.t index 6b6dd5e56..65f0fb1f3 100644 --- a/t/Asset/Wobject/WikiMaster.t +++ b/t/Asset/Wobject/WikiMaster.t @@ -85,8 +85,9 @@ my $variables = $wiki->getKeywordVariables($hierarchy); cmp_deeply( $hierarchy->[0], { - title => 'criminals', - url => '/testwiki?func=byKeyword;keyword=criminals', + title => 'criminals', + url => '/testwiki?func=byKeyword;keyword=criminals', + descendants => 0, }, "getKeywordVariables, does not alter the original hierarchy passed in", ); @@ -99,18 +100,21 @@ cmp_deeply( url => '/testwiki?func=byKeyword;keyword=criminals', level => 0, indent_loop => [], + descendants => 0, }, { title => 'inmates', url => '/testwiki?func=byKeyword;keyword=inmates', level => 0, indent_loop => [], + descendants => 0, }, { title => 'staff', url => '/testwiki?func=byKeyword;keyword=staff', level => 0, indent_loop => [], + descendants => 0, }, ], "... variables", @@ -157,6 +161,7 @@ cmp_bag( superhashof({ title => 'red', }), superhashof({ title => 'andy', }), ), + descendants => 0, }, { title => 'inmates', url => '/testwiki?func=byKeyword;keyword=inmates', @@ -164,6 +169,7 @@ cmp_bag( superhashof({ title => 'heywood', }), superhashof({ title => 'brooks', }), ), + descendants => 0, }, { title => 'staff', url => '/testwiki?func=byKeyword;keyword=staff', @@ -171,6 +177,7 @@ cmp_bag( superhashof({ title => 'norton', }), superhashof({ title => 'hadley', }), ), + descendants => 0, }, ], "getKeywordHierarchy: simple hierarchy",