From 40e068e0fbf8d1240528ca92146592f300fdcccf Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 9 Mar 2009 23:23:34 +0000 Subject: [PATCH] Search interface, in addition to the default view and the keywords view. --- lib/WebGUI/Asset/Wobject/StoryArchive.pm | 27 ++++++++-- t/Asset/Wobject/StoryArchive.t | 64 ++++++++++++++++++++---- 2 files changed, 76 insertions(+), 15 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/StoryArchive.pm b/lib/WebGUI/Asset/Wobject/StoryArchive.pm index 2821d932c..58c559112 100644 --- a/lib/WebGUI/Asset/Wobject/StoryArchive.pm +++ b/lib/WebGUI/Asset/Wobject/StoryArchive.pm @@ -20,6 +20,7 @@ use WebGUI::Asset::Story; use WebGUI::Asset::Wobject::Folder; use WebGUI::Paginator; use WebGUI::Keyword; +use WebGUI::Search; use base 'WebGUI::Asset::Wobject'; use constant DATE_FORMAT => '%c_%D_%y'; @@ -259,7 +260,9 @@ sub view { my $session = $self->session; #This automatically creates template variables for all of your wobject's properties. - my $mode = $session->form->hasParam('keywords') + my $mode = $session->form->hasParam('keyword') + ? 'keyword' + : $session->form->hasParam('search') ? 'search' : 'view'; @@ -283,9 +286,12 @@ Whether to get assets in view mode, by time, or search mode, by keywords. sub viewTemplateVariables { my ($self, $mode) = @_; my $session = $self->session; - my $keywords = $session->form->get('keywords'); + my $keywords = $session->form->get('keyword'); + my $query = $session->form->get('query'); my $p; - if ($mode eq "search") { + my $var = $self->get; + if ($mode eq 'keyword') { + $var->{mode} = 'keyword'; my $wordList = WebGUI::Keyword::string2list($keywords); my $key = WebGUI::Keyword->new($session); $p = $key->getMatchingAssets({ @@ -296,7 +302,18 @@ sub viewTemplateVariables { rowsPerPage => $self->get('storiesPerPage'), }); } + elsif ($mode eq 'search') { + $var->{mode} = 'search'; + my $search = WebGUI::Search->new($session); + $search->search({ + keywords => $query, + lineage => [ $self->get('lineage'), ], + classes => [ qw/WebGUI::Asset::Story/, ], + }); + $p = $search->getPaginatorResultSet($self->getUrl, $self->get('storiesPerPage')); + } else { + $var->{mode} = 'view'; ##Only return assetIds, we'll build data for the things that are actually displayed. my $storySql = $self->getLineageSql(['descendants'],{ excludeClasses => ['WebGUI::Asset::Wobject::Folder'], @@ -306,12 +323,12 @@ sub viewTemplateVariables { $p->setDataByQuery($storySql); } my $storyIds = $p->getPageData(); - my $var = $self->get; $p->appendTemplateVars($var); $var->{date_loop} = []; my $lastStoryDate = ''; my $datePointer = undef; ##Only build objects for the assets that we need + $session->log->warn(join ' ', map {$_->{assetId} } @{$storyIds}); STORY: foreach my $storyId (@{ $storyIds }) { my $story = WebGUI::Asset->new($session, $storyId->{assetId}, $storyId->{className}, $storyId->{revisionDate}); next STORY unless $story; @@ -343,7 +360,7 @@ sub viewTemplateVariables { . WebGUI::Form::hidden($session, { name => 'func', value => 'view' }); $var->{searchFooter} = WebGUI::Form::formFooter($session); $var->{searchButton} = WebGUI::Form::submit($session, { name => 'search', value => $i18n->get('search')}); - $var->{searchForm} = WebGUI::Form::text($session, { name => 'keywords', value => $keywords}); + $var->{searchForm} = WebGUI::Form::text($session, { name => 'query', value => $query}); return $var; } diff --git a/t/Asset/Wobject/StoryArchive.t b/t/Asset/Wobject/StoryArchive.t index 5c94549f3..9a17dc801 100644 --- a/t/Asset/Wobject/StoryArchive.t +++ b/t/Asset/Wobject/StoryArchive.t @@ -59,7 +59,7 @@ $canPostMaker->prepare({ }); my $tests = 1; -plan tests => 24 +plan tests => 27 + $tests + $canPostMaker->plan ; @@ -168,7 +168,7 @@ my $newFolder = $archive->getFolder($tomorrow); my ($wgBdayMorn,undef) = $session->datetime->dayStartEnd($wgBday); my ($tomorrowMorn,undef) = $session->datetime->dayStartEnd($tomorrow); -my $story = $oldFolder->addChild({ className => 'WebGUI::Asset::Story', title => 'WebGUI is released'}); +my $story = $oldFolder->addChild({ className => 'WebGUI::Asset::Story', title => 'WebGUI is released', keywords => 'roger foxtrot echo'}); $session->db->write('update asset set creationDate=997966800 where assetId=?',[$story->getId]); { @@ -182,7 +182,7 @@ $session->db->write("update asset set creationDate=$tomorrow where assetId=?",[$ my $templateVars; $templateVars = $archive->viewTemplateVariables(); KEY: foreach my $key (keys %{ $templateVars }) { - next KEY if isIn($key, qw/canPostStories addStoryUrl date_loop/); + next KEY if isIn($key, qw/canPostStories addStoryUrl date_loop mode/); delete $templateVars->{$key}; } @@ -190,6 +190,7 @@ cmp_deeply( $templateVars, { canPostStories => 0, + mode => 'view', addStoryUrl => '/home/mystories?func=add;class=WebGUI::Asset::Story', date_loop => [ { @@ -233,8 +234,6 @@ $archive->update({storiesPerPage => 3}); $session->user({userId => 3}); ($wgBdayMorn,undef) = $session->datetime->dayStartEnd($wgBday); -$story->update({keywords => "roger foxtrot echo"}); - $templateVars = $archive->viewTemplateVariables(); KEY: foreach my $key (keys %{ $templateVars }) { next KEY if isIn($key, qw/canPostStories addStoryUrl date_loop/); @@ -281,10 +280,11 @@ cmp_deeply( # ################################################################ -$session->request->setup_body({ keywords => 'foxtrot' } ); +$session->request->setup_body({ keyword => 'foxtrot' } ); $archive->update({storiesPerPage => 25}); -$templateVars = $archive->viewTemplateVariables('search'); +$templateVars = $archive->viewTemplateVariables('keyword'); +is($templateVars->{mode}, 'keyword', 'viewTemplateVariables mode == keyword'); cmp_deeply( $templateVars->{date_loop}, [ @@ -314,12 +314,56 @@ cmp_deeply( ], }, ], + 'viewTemplateVariables: keyword mode returns the correct assets in the same form as view mode' +); + +$archive->update({storiesPerPage => 3}); + +$session->request->setup_body({ } ); + +################################################################ +# +# viewTemplateVariables, search mode +# +################################################################ + +$session->request->setup_body({ query => 'echo' } ); +$archive->update({storiesPerPage => 25}); +$templateVars = $archive->viewTemplateVariables('search'); +is($templateVars->{mode}, 'search', 'viewTemplateVariables mode == search'); + +cmp_bag( + $templateVars->{date_loop}, + [ + { + epochDate => ignore(), + story_loop => [ + { + creationDate => ignore(), + url => ignore(), + title => 'Story 3', + }, + { + creationDate => ignore(), + url => ignore(), + title => 'Story 4', + }, + ], + }, + { + epochDate => $wgBdayMorn, + story_loop => [ + { + creationDate => ignore(), + url => ignore(), + title => 'WebGUI is released', + }, + ], + }, + ], 'viewTemplateVariables: search mode returns the correct assets in the same form as view mode' ); -$archive->update({storiesPerPage => 2}); - -$session->request->setup_body({ } ); ################################################################ #