Added crud for Survey test suites

This commit is contained in:
Patrick Donelan 2009-05-14 07:14:38 +00:00
parent 43d142860d
commit f18d4e193e
5 changed files with 502 additions and 7 deletions

View file

@ -46,6 +46,7 @@ installSMSSettings($session);
upgradeSMSMailQueue($session);
addPayDrivers($session);
addCollaborationColumns($session);
installSurveyTest($session);
installFriendManagerSettings($session);
installFriendManagerConfig($session);
@ -235,6 +236,14 @@ sub addPayDrivers {
print "DONE!\n" unless $quiet;
}
sub installSurveyTest {
my $session = shift;
print "\tInstall Survey test table, via Crud... " unless $quiet;
use WebGUI::Asset::Wobject::Survey::Test;
WebGUI::Asset::Wobject::Survey::Test->crud_createTable($session);
print "DONE!\n" unless $quiet;
}
sub addCollaborationColumns {
my $session = shift;
print "\tAdding columns to store htmlArea Rich Editor and Filter Code for Replies in Collaboration Table ..." unless $quiet;

View file

@ -650,6 +650,18 @@ sub www_editSurvey {
return $self->processTemplate( {}, $self->get('surveyEditTemplateId') );
}
sub getAdminConsole {
my $self = shift;
my $ac = $self->SUPER::getAdminConsole;
my $i18n = WebGUI::International->new($self->session, "Asset_Survey");
my $edit = WebGUI::International->new($self->session, "WebGUI")->get(575);
$ac->addSubmenuItem($self->session->url->page("func=edit"), $edit);
$ac->addSubmenuItem($self->session->url->page("func=editSurvey"), "$edit Survey");
$ac->addSubmenuItem($self->session->url->page("func=graph"), $i18n->get('survey visualization'));
$ac->addSubmenuItem($self->session->url->page("func=editTestSuite"), $i18n->get("test suite"));
return $ac;
}
#-------------------------------------------------------------------
=head2 www_graph ( )
@ -668,12 +680,7 @@ sub www_graph {
my $i18n = WebGUI::International->new($session, "Asset_Survey");
use WebGUI::AdminConsole;
my $ac = WebGUI::AdminConsole->new($self->session, $i18n->get('survey visualization'));
$ac->setIcon($session->url->extras('assets/survey.gif'));
my $edit = WebGUI::International->new($session, "WebGUI")->get(575);
$ac->addSubmenuItem($self->session->url->page("func=edit"), $edit);
$ac->addSubmenuItem($self->session->url->page("func=editSurvey"), "$edit Survey");
my $ac = $self->getAdminConsole;
eval 'use GraphViz';
if ($@) {
@ -733,7 +740,7 @@ sub www_submitObjectEdit {
my $self = shift;
return $self->session->privilege->insufficient()
if !$self->session->user->isInGroup( $self->get('groupToEditSurvey') );
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $params = $self->session->form->paramsHashRef();
@ -2334,4 +2341,355 @@ sub www_downloadDefaultQuestionTypes{
return $self->export( "WebGUI-Survey-DefaultQuestionTypes.json", $content );
}
#-------------------------------------------------------------------
=head2 www_deleteTest ( )
Deletes a test
=cut
sub www_deleteTest {
my $self = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $test = WebGUI::Asset::Wobject::Survey::Test->new($session, $session->form->get("testId"));
if (defined $test) {
$test->delete;
}
return $self->www_editTestSuite;
}
#------------------------------------------------------------------
=head2 www_demoteTest ( )
Moves a Test down one position
=cut
sub www_demoteTest {
my $self = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $test = WebGUI::Asset::Wobject::Survey::Test->new($session, $session->form->get("testId"));
if (defined $test) {
$test->demote;
}
return $self->www_editTestSuite;
}
#-------------------------------------------------------------------
=head2 www_editTestSuite ( $error )
Configure a set of tests
=head3 $error
Allows another method to pass an error into this method, to display to the user.
=cut
sub www_editTestSuite {
my $self = shift;
my $error = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
if ($error) {
$error = qq|<div class="error">$error</div>\n|;
}
my $i18n = WebGUI::International->new($session, "Asset_Survey");
my $addmenu = '<div style="float: left; width: 200px; font-size: 11px;">';
$addmenu .= sprintf '<a href="%s">%s</a>', $session->url->page('func=editTest'), $i18n->get('add a test');
$addmenu .= '</div>';
my $testsFound = 0;
my $tests = '<table class="content"><tr><th></th><th>' . $i18n->get('test name') . '</th></tr><tbody class="tableData">';
my $getATest = WebGUI::Asset::Wobject::Survey::Test->getAllIterator($session);
my $icon = $session->icon;
while (my $test = $getATest->()) {
$testsFound++;
my $id = $test->getId;
my $name = $test->get('name');
$tests .= '<tr><td>'
. $icon->delete( 'func=deleteTest;testId='.$id, undef, $i18n->get('confirm delete test'))
. $icon->edit( 'func=editTest;testId='.$id)
. $icon->moveDown('func=demoteTest;testId='.$id)
. $icon->moveUp( 'func=promoteTest;testId='.$id)
. '</td><td>'.$name.'</td></tr>';
}
$tests .= '</tbody></table><div style="clear: both;"></div>';
my $out = $error . $addmenu;
$out .= $tests if $testsFound;
my $ac = $self->getAdminConsole;
return $ac->render($out, 'Survey');
}
##-------------------------------------------------------------------
#
#=head2 www_editTestSuiteSave ( )
#
#Saves the results of www_editTestSuite()
#
#=cut
#
#sub www_editTestSuiteSave {
# my $self = shift;
# my $session = $self->session;
#
# return $self->session->privilege->insufficient()
# unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
# my $session = shift;
# return $session->privilege->insufficient() unless canView($session);
# my $i18n = WebGUI::International->new($session, 'Survey');
# return www_editTestSuite($session, $i18n->get('already active'))
# if analysisActive($session);
# my $workflow = WebGUI::Workflow->new($session, 'Survey000001');
# return www_editTestSuite($session, $i18n->get('workflow deleted')) unless defined $workflow;
# my $delta = $session->form->process('pauseInterval','integer');
# my $activities = $workflow->getActivities();
# ##Note, they're in order, and the order is known.
# $activities->[0]->set('deltaInterval', $delta);
# $activities->[1]->set('userId', $session->user->userId);
# my $instance = WebGUI::Workflow::Instance->create($session, {
# workflowId => $workflow->getId,
# priority => 1,
# });
# if (!defined $instance) {
# return www_editTestSuite($session, $i18n->get('currently running')) if $session->stow->get('singletonWorkflowClash');
# return www_editTestSuite($session, $i18n->get('error creating workflow'));
# }
# $instance->start('skipRealtime');
# $session->db->write('update surveyStatus set startDate=NOW(), userId=?, endDate=?, running=1', [$session->user->userId, '']);
# return www_editTestSuite($session);
#}
#-------------------------------------------------------------------
=head2 www_editTest ( )
Displays a form to edit the properties test.
=cut
sub www_editTest {
my $self = shift;
my $error = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
if ($error) {
$error = qq|<div class="error">$error</div>\n|;
}
##Make a Survey test to use to populate the form.
my $testId = $session->form->get('testId');
my $test;
if ($testId) {
$test = WebGUI::Asset::Wobject::Survey::Test->new($session, $testId);
}
else {
##We need a temporary test so that we can call dynamicForm, below
$testId = 'new';
$test = WebGUI::Asset::Wobject::Survey::Test->create($session, { assetId => $self->getId });
}
##Build the form
my $form = WebGUI::HTMLForm->new($session);
$form->hidden( name=>"func", value=>"editTestSave");
$form->hidden( name=>"testId", value=>$testId);
$form->hidden( name=>"assetId", value=>$self->getId);
$form->dynamicForm([WebGUI::Asset::Wobject::Survey::Test->crud_definition($session)], 'properties', $test);
$form->submit;
my $i18n = WebGUI::International->new($session, 'Asset_Survey');
my $ac = $self->getAdminConsole;
if ($testId eq 'new') {
$test->delete;
}
return $ac->render($error.$form->print, $i18n->get('Edit Test'));
}
#-------------------------------------------------------------------
=head2 www_editTestSave ( )
Saves the results of www_editTest().
=cut
sub www_editTestSave {
my $self = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $form = $session->form;
# eval {
# 'fooBarBaz' =~ qr/$regexp/;
# };
# if ($@) {
# my $error = $@;
# $error =~ s/at \S+?\.pm line \d+.*$//;
# my $i18n = WebGUI::International->new($session, 'Asset_Survey');
# $error = join ' ', $i18n->get('Regular Expression Error:'), $error;
# return www_editTest($session, $error);
# }
my $testId = $form->get('testId');
my $test;
if ($testId eq 'new') {
$test = WebGUI::Asset::Wobject::Survey::Test->create($session, { assetId => $self->getId });
}
else {
$test = WebGUI::Asset::Wobject::Survey::Test->new($session, $testId);
}
$test->updateFromFormPost if $test;
return $self->www_editTestSuite;
}
#------------------------------------------------------------------
=head2 www_promoteTest ( )
Moves a test up one position
=head3 session
A reference to the current session.
=cut
sub www_promoteTest {
my $self = shift;
my $session = $self->session;
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $test = WebGUI::Asset::Wobject::Survey::Test->new($session, $session->form->get("testId"));
if (defined $test) {
$test->promote;
}
return $self->www_editTestSuite;
}
##-------------------------------------------------------------------
#
#=head2 www_settings ( )
#
#Configure Test Suite settings.
#
#=cut
#
#sub www_settings {
# my $self = shift;
# my $error = shift;
# my $session = $self->session;
#
# return $self->session->privilege->insufficient()
# unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
#
# if ($error) {
# $error = qq|<div class="error">$error</div>\n|;
# }
# my $i18n = WebGUI::International->new($session, "Asset_Survey");
# my $f = WebGUI::HTMLForm->new($session);
# $f->hidden(
# name=>'func',
# value=>'settingsSave'
# );
# $f->integer(
# name => 'pauseInterval',
# value => $session->form->get('pauseInterval') || $session->setting->get('surveyInterval') || 300,
# label => $i18n->get('default pause interval'),
# hoverHelp => $i18n->get('default pause interval help'),
# );
# $f->yesNo(
# name => 'deleteDelta',
# value => $session->form->get('deleteDelta') || $session->setting->get('surveyDeleteDelta') || 0,
# label => $i18n->get('Delete Delta Table?'),
# hoverHelp => $i18n->get('Delete Delta Table? help'),
# );
# $f->yesNo(
# name => 'enabled',
# value => $session->form->get('enabled') || $session->setting->get('surveyEnabled') || 0,
# label => $i18n->get('Enabled?'),
# hoverHelp => $i18n->get('Enabled? help'),
# );
# $f->submit();
# my $ac = WebGUI::AdminConsole->new($session,'survey');
# $ac->addSubmenuItem($session->url->page('surveyfunc=editTestSuite'), $i18n->get('Test Suite'));
# return $ac->render($error.$f->print, 'Test Suite Settings');
#}
#
##-------------------------------------------------------------------
#
#=head2 www_settingsSave ( session )
#
#Save Test Suite settings.
#
#=cut
#
#sub www_settingsSave {
# my $self = shift;
# my $session = $self->session;
#
# return $self->session->privilege->insufficient()
# my $session = shift;
# return $session->privilege->insufficient() unless canView($session);
# my $form = $session->form;
# $session->setting->set('surveyInterval', $form->process('pauseInterval', 'integer'));
# $session->setting->set('surveyDeleteDelta', $form->process('deleteDelta', 'yesNo' ));
# $session->setting->set('surveyEnabled', $form->process('enabled', 'yesNo' ));
# return www_settings($session);
#}
1;

View file

@ -0,0 +1,88 @@
package WebGUI::Asset::Wobject::Survey::Test;
use base qw/WebGUI::Crud/;
use WebGUI::International;
=head1 NAME
Package WebGUI::Asset::Wobject::Survey::Test;
=head1 DESCRIPTION
Base class for Survey tests
=head1 METHODS
These methods are available from this class:
=cut
#-------------------------------------------------------------------
=head2 crud_definition ( )
WebGUI::Crud definition for this class.
=head3 tableName
Survey_test
=head3 tableKey
testId
=head3 assetId
testId
=head3 sequenceKey
assetId, e.g. each Survey instance has its own sequence of tests.
=head3 properties
=head4 assetId
Identifies the Survey instance.
=head4 name
A name for the test
=head4 test
The test code
=cut
sub crud_definition {
my ( $class, $session ) = @_;
my $definition = $class->SUPER::crud_definition($session);
$definition->{tableName} = 'Survey_test';
$definition->{tableKey} = 'testId';
$definition->{sequenceKey} = 'assetId';
my $properties = $definition->{properties};
my $i18n = WebGUI::International->new($session);
$properties->{assetId} = {
fieldType => 'hidden',
defaultValue => undef,
};
$properties->{name} = {
fieldType => 'text',
label => $i18n->get( 'test name', 'Asset_Survey' ),
hoverHelp => $i18n->get( 'test name help', 'Asset_Survey' ),
defaultValue => '',
};
$properties->{test} = {
fieldType => 'codearea',
label => $i18n->get( 'test code', 'Asset_Survey' ),
hoverHelp => $i18n->get( 'test code help', 'Asset_Survey' ),
syntax => 'perl',
defaultValue => 'test()',
};
return $definition;
}
1;
#vim:ft=perl

View file

@ -1528,6 +1528,46 @@ section/answer.|,
context => q|Finish button label on Take Survey page|,
lastUpdated => 0,
},
'add a test' => {
message => q{Add a test},
lastUpdated => 0,
},
'confirm delete test' => {
message => q{Are you sure you want to delete this test?},
lastUpdated => 0,
},
'test suite' => {
message => q{Test Suite},
lastUpdated => 0,
},
'edit test' => {
message => q{Edit Test},
lastUpdated => 0,
},
'test name' => {
message => q{Test Name},
lastUpdated => 0,
},
'test name help' => {
message => q{A descriptive name for this test},
lastUpdated => 0,
},
'test code' => {
message => q{Test Code},
lastUpdated => 0,
},
'test code help' => {
message => q{The test code},
lastUpdated => 0,
},
};