Finish wiki sub-category API code, with upgrade sub and tests.

This commit is contained in:
Colin Kuskie 2010-05-04 15:04:27 -07:00
parent 984003123c
commit 39b44504c3
3 changed files with 23 additions and 18 deletions

View file

@ -96,9 +96,13 @@ sub addWikiSubKeywords {
# and here's our code # and here's our code
$session->db->write(<<EOSQL); $session->db->write(<<EOSQL);
CREATE TABLE IF NOT EXISTS WikiMasterKeywords ( CREATE TABLE IF NOT EXISTS WikiMasterKeywords (
assetId CHAR(22) binary not null primary key, assetId CHAR(22) binary not null,
keyword CHAR(64), keyword CHAR(64) not null,
subkeyword CHAR(64) subKeyword CHAR(64),
PRIMARY KEY (`assetId`,`keyword`, `subKeyword`),
KEY `assetId` (`assetId`),
KEY `keyword` (`keyword`),
KEY `subKeyword` (`subKeyword`)
) )
EOSQL EOSQL
print "DONE!\n" unless $quiet; print "DONE!\n" unless $quiet;

View file

@ -481,7 +481,7 @@ The main keyword to key off of.
sub deleteSubKeywords { sub deleteSubKeywords {
my ( $self, $keyword ) = @_; my ( $self, $keyword ) = @_;
return $self->session->db->buildArrayRef('delete from WikiMasterKeywords where assetId=? and keyword=?', [$self->getId, $keyword]); return $self->session->db->write('delete from WikiMasterKeywords where assetId=? and keyword=?', [$self->getId, $keyword]);
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -545,7 +545,7 @@ sub getKeywordHierarchy {
KEYWORD: foreach my $keyword (sort @{ $keywords }) { KEYWORD: foreach my $keyword (sort @{ $keywords }) {
my $datum = { my $datum = {
title => $keyword, ##Note, same as keyword title => $keyword, ##Note, same as keyword
url => $self->getUrl('?func=byKeyword;keyword='.$keyword), url => $self->getUrl('func=byKeyword;keyword='.$keyword),
}; };
##Prevent recursion if seen again ##Prevent recursion if seen again
if (! $seen->{$keyword}++) { if (! $seen->{$keyword}++) {
@ -768,11 +768,12 @@ The new set of keywords.
sub setSubKeywords { sub setSubKeywords {
my ( $self, $keyword, @subKeywords ) = @_; my ( $self, $keyword, @subKeywords ) = @_;
$self->deleteSubKeywords($keyword); $self->deleteSubKeywords($keyword);
my $stuffIt = $self->session->db->prepare('insert into WikiMasterKeyword (assetId, keyword, subKeyword) values (?,?,?))'); my $stuffIt = $self->session->db->prepare('insert into WikiMasterKeywords (assetId, keyword, subKeyword) values (?,?,?)');
KEYWORD: foreach my $subKeyword (@subKeywords) { KEYWORD: foreach my $subKeyword (@subKeywords) {
next unless $keyword; next unless $keyword;
$stuffIt->execute([$self->getId, $keyword, $subKeyword]); $stuffIt->execute([$self->getId, $keyword, $subKeyword]);
} }
$stuffIt->finish;
return 1; return 1;
} }

View file

@ -86,7 +86,7 @@ cmp_deeply(
$hierarchy->[0], $hierarchy->[0],
{ {
title => 'criminals', title => 'criminals',
url => '/testwiki/criminals', url => '/testwiki?func=byKeyword;keyword=criminals',
}, },
"getKeywordVariables, does not alter the original hierarchy passed in", "getKeywordVariables, does not alter the original hierarchy passed in",
); );
@ -96,19 +96,19 @@ cmp_deeply(
[ [
{ {
title => 'criminals', title => 'criminals',
url => '/testwiki/criminals', url => '/testwiki?func=byKeyword;keyword=criminals',
level => 0, level => 0,
indent_loop => [], indent_loop => [],
}, },
{ {
title => 'inmates', title => 'inmates',
url => '/testwiki/inmates', url => '/testwiki?func=byKeyword;keyword=inmates',
level => 0, level => 0,
indent_loop => [], indent_loop => [],
}, },
{ {
title => 'staff', title => 'staff',
url => '/testwiki/staff', url => '/testwiki?func=byKeyword;keyword=staff',
level => 0, level => 0,
indent_loop => [], indent_loop => [],
}, },
@ -133,9 +133,9 @@ cmp_deeply(
); );
$wiki->update({topLevelKeywords => 'criminals,inmates,staff'}); $wiki->update({topLevelKeywords => 'criminals,inmates,staff'});
$page_set{criminals}->update({keywords => 'red,andy'}); $wiki->setSubKeywords('criminals', 'red', 'andy');
$page_set{inmates}->update({keywords => 'brooks,heywood'}); $wiki->setSubKeywords('inmates', 'brooks', 'heywood');
$page_set{staff}->update({keywords => 'norton,hadley'}); $wiki->setSubKeywords('staff', 'norton', 'hadley');
foreach my $title (qw/red andy brooks heywood norton hadley/) { foreach my $title (qw/red andy brooks heywood norton hadley/) {
$page_set{$title} = $wiki->addChild({ $page_set{$title} = $wiki->addChild({
@ -152,21 +152,21 @@ cmp_bag(
$wiki->getKeywordHierarchy(), $wiki->getKeywordHierarchy(),
[ [
{ {
title => 'criminals', url => '/testwiki/criminals', title => 'criminals', url => '/testwiki?func=byKeyword;keyword=criminals',
children => bag( children => bag(
superhashof({ title => 'red', }), superhashof({ title => 'red', }),
superhashof({ title => 'andy', }), superhashof({ title => 'andy', }),
), ),
}, },
{ {
title => 'inmates', url => '/testwiki/inmates', title => 'inmates', url => '/testwiki?func=byKeyword;keyword=inmates',
children => bag( children => bag(
superhashof({ title => 'heywood', }), superhashof({ title => 'heywood', }),
superhashof({ title => 'brooks', }), superhashof({ title => 'brooks', }),
), ),
}, },
{ {
title => 'staff', url => '/testwiki/staff', title => 'staff', url => '/testwiki?func=byKeyword;keyword=staff',
children => bag( children => bag(
superhashof({ title => 'norton', }), superhashof({ title => 'norton', }),
superhashof({ title => 'hadley', }), superhashof({ title => 'hadley', }),
@ -177,8 +177,8 @@ cmp_bag(
); );
##Check depth-first display, and try to make a keyword loop ##Check depth-first display, and try to make a keyword loop
$page_set{andy}->update({keywords => 'criminals,inmates'}); $wiki->setSubKeywords('andy', 'criminals', 'inmates');
$page_set{brooks}->update({keywords => 'criminals'}); $wiki->setSubKeywords('brooks', 'criminals');
my $tag_set3 = WebGUI::VersionTag->getWorking($session); my $tag_set3 = WebGUI::VersionTag->getWorking($session);
$tag_set3->commit; $tag_set3->commit;