From 5f8888fcc9b4abbbe296afe2e97c8780b08db59f Mon Sep 17 00:00:00 2001 From: daviddelikat Date: Wed, 28 Oct 2009 03:59:18 -0500 Subject: [PATCH] tabs successfully added --- lib/WebGUI/Asset/EMSSubmission.pm | 37 ++++-- lib/WebGUI/Asset/EMSSubmissionForm.pm | 33 +++--- .../Asset/Wobject/EventManagementSystem.pm | 80 ++++++++++--- .../English/Asset_EventManagementSystem.pm | 12 ++ t/Asset/EMSSubmissionForm.t | 105 +++++++++++++++++- 5 files changed, 212 insertions(+), 55 deletions(-) diff --git a/lib/WebGUI/Asset/EMSSubmission.pm b/lib/WebGUI/Asset/EMSSubmission.pm index 049731922..5f26b3a3d 100644 --- a/lib/WebGUI/Asset/EMSSubmission.pm +++ b/lib/WebGUI/Asset/EMSSubmission.pm @@ -286,7 +286,7 @@ sub drawStatusField { return WebGUI::Form::SelectBox($self->session, { name => 'location', value => $self->get('submissionStatus'), - options => $self->ems->getStatus, + options => $self->ems->getSubmissionStatus, }); } @@ -315,7 +315,10 @@ returns the ems ansestor of this asset =cut -sub ems { $_[0]->getParent->getParent } +sub ems { + my $self = shift; + $self->getParent->getParent +} #------------------------------------------------------------------- @@ -389,16 +392,14 @@ dav::log 'EMSSubmission::www_editSubmission: asseId ne new'; # for each field for my $field ( values %$fields ) { - if( $formDescription->{$field->{fieldId}} ) { -dav::dump 'drawing fields:', $field; - if( $field->{fieldId} eq 'submissionStatus' ) { - $field->{options} = $parent->getParent->getStatus; - dav::log 'set options for status'; - } - if( $field->{fieldId} eq 'location' ) { - $field->{options} = [ split( /\s*/, $parent->getParent->getLocations ) ]; - delete $field->{options} if scalar( @{$field->{options}} ) == 0 ; - } + if( $formDescription->{$field->{fieldId}} || $asset->ems->isRegistrationStaff ) { + my $drawMethod = __PACKAGE__ . '::' . $field->{customDrawMethod}; + if ($asset->can( $drawMethod )) { + $field->{value} = $asset->$drawMethod($field); + delete $field->{name}; # don't want readOnly to generate a hidden field + $field->{fieldType} = "readOnly"; + } + $newform->dynamicField(%$field); } else { # TODO see that the data gets formatted @@ -490,6 +491,17 @@ sub getEditTabs { return ($self->SUPER::getEditTabs(), ['shop', $sku_i18n->get('shop'), 9], ['comments', $i18n->get('comments'), 9]); } +#------------------------------------------------------------------- +=head2 getUrl + +returns the URL for the submission queue page with the submisison id in the hash part + +=cut + +sub getUrl { + my $self = shift; + return $self->ems->getUrl('func=viewSubmissionQueue#' . $self->get('submissionId') ); +} #------------------------------------------------------------------- @@ -548,6 +560,7 @@ sub processForm { return {_isValid => 0, errors => [ { text => 'invalid function call' } ] }; } my $params = {_isValid=>1}; + # TODO # get description from parent # for each active field # get data from session->form diff --git a/lib/WebGUI/Asset/EMSSubmissionForm.pm b/lib/WebGUI/Asset/EMSSubmissionForm.pm index cb95ffc21..79cbf8d27 100644 --- a/lib/WebGUI/Asset/EMSSubmissionForm.pm +++ b/lib/WebGUI/Asset/EMSSubmissionForm.pm @@ -74,8 +74,7 @@ sub addSubmission { } $newParams->{className} = 'WebGUI::Asset::EMSSubmission'; $newParams->{submissionStatus} = 'pending'; - $newParams->{submissionId} = $self->get('nextSubmissionId'); - $self->update({nextSubmissionId => $newParams->{submissionId}+1 }); + $newParams->{submissionId} = $self->ems->getNextSubmissionId; $self->addChild($newParams); } @@ -129,13 +128,6 @@ sub definition { my $definition = shift; my $i18n = WebGUI::International->new( $session, "Asset_EMSSubmissionForm" ); tie my %properties, 'Tie::IxHash', ( - nextSubmissionId => { - tab => "properties", - fieldType => "integer", - defaultValue => 0, - label => $i18n->get("next submission id label"), - hoverHelp => $i18n->get("next submission id label help") - }, canSubmitGroupId => { tab => "security", fieldType => "group", @@ -214,7 +206,10 @@ returns the ems ansestor of this asset =cut -sub ems { $_[0]->getParent } +sub ems { + my $self = shift; + $self->getParent +} #------------------------------------------------------------------- @@ -244,7 +239,7 @@ sub www_editSubmissionForm { } my $params = shift || { }; my $session = $parent->session; - my $i18n = WebGUI::International->new($parent->session,'Asset_EventManagementSystem'); + my $i18n = WebGUI::International->new($session,'Asset_EventManagementSystem'); my $assetId = $self ? $self->getId : $params->{assetId} || $session->form->get('assetId'); if( ! defined( $assetId ) ) { @@ -360,7 +355,7 @@ sub www_editSubmissionFormSave { =head2 www_view -calles ems->view +calls ems->view =cut @@ -399,13 +394,13 @@ Making private. See WebGUI::Asset::indexContent() for additonal details. =head2 prepareView ( ) See WebGUI::Asset::prepareView() for details. +we shouldn't get here, there is nothing to view... =cut sub prepareView { my $self = shift; - $self->ems->prepareView; - #$self->SUPER::prepareView(); + $self->SUPER::prepareView(); #my $template = WebGUI::Asset::Template->new( $self->session, $self->get("templateId") ); #$template->prepare($self->getMetaDataAsTemplateVariables); #$self->{_viewTemplate} = $template; @@ -421,10 +416,10 @@ when /yourAssetUrl?func=editSave is requested/posted. =cut -sub processPropertiesFromFormPost { - my $self = shift; - $self->SUPER::processPropertiesFromFormPost; -} +#sub processPropertiesFromFormPost { +# my $self = shift; +# $self->SUPER::processPropertiesFromFormPost; +#} #------------------------------------------------------------------- @@ -593,7 +588,7 @@ sub update { my $self = shift; my $properties = shift; if( ref $properties->{formDescription} eq 'HASH' ) { - $properties->{formDescription} = JSON->new->encode($properties->{formDescription}||{}); + $properties->{formDescription} = JSON->new->encode($properties->{formDescription}); } $self->SUPER::update({%$properties, isHidden => 1}); } diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index 08b9a0948..ee2e0c83a 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -74,7 +74,7 @@ defaults to 2 -- registered users =head4 daysBeforeCleanup ( optional ) number fo days to leave denied/created status items in the database before deleting -defaults t0 7 +defaults to 7 =head4 deleteCreatedItems ( optional ) @@ -186,10 +186,10 @@ sub definition { }, eventSubmissionMainTemplateId => { fieldType => 'template', - defaultValue => 'ylBSKblMdKpcDSIK2t_Ang', + defaultValue => 'DoVNijm6lMDE0cYrtvEbDQ', tab => 'display', - label => $i18n->get('event submission form template'), - hoverHelp => $i18n->get('event submission form template help'), + label => $i18n->get('event submission main template'), + hoverHelp => $i18n->get('event submission main template help'), namespace => 'EMS/SubmissionMain', }, eventSubmissionTemplateId => { @@ -246,7 +246,7 @@ sub definition { submittedLocationsList => { fieldType => 'text', tab => 'properties', - defaultValue => $i18n->get('default submitted location list'), + defaultValue => '', label => $i18n->get('submitted location list label'), hoverHelp => $i18n->get('submitted location list help'), }, @@ -255,6 +255,13 @@ sub definition { defaultValue => '', noFormPost => 1, }, + nextSubmissionId => { + tab => "properties", + fieldType => "integer", + defaultValue => 0, + label => $i18n->get("next submission id label"), + hoverHelp => $i18n->get("next submission id label help") + }, ); push(@{$definition}, { assetName=>$i18n->get('assetName'), @@ -416,6 +423,22 @@ sub getLocations { #------------------------------------------------------------------- +=head2 getNextSubmissionId + +get a sequence number for the submission id + +=cut + +sub getNextSubmissionId { + my $self = shift; + #my $submissionId = $self->get('nextSubmissionId'); + my ($submissionId) = $self->session->db->read('select nextSubmissionId from EventManagementSystem where assetId = ?', [ $self->getId ] )->array; + $self->update( { nextSubmissionId => ($submissionId + 1) } ); + return $submissionId; +} + +#------------------------------------------------------------------- + =head2 getRegistrant ( badgeId ) Returns a hash reference containing the properties of a registrant. @@ -460,7 +483,7 @@ dav::log 'getSubmissionLocations:"', $text, '"'; } #------------------------------------------------------------------- -sub getStatus { +sub getSubmissionStatus { my $self = shift; my $key = shift; @@ -668,7 +691,8 @@ sub view { addSubmissionFormUrl => $self->getUrl('func=addSubmissionForm'), manageBadgeGroupsUrl=> $self->getUrl('func=manageBadgeGroups'), getBadgesUrl => $self->getUrl('func=getBadgesAsJson'), - canEdit => $self->canEdit, + isRegistrationStaff => $self->isRegistrationStaff, + canEdit => $self->canEdit, canSubmit => $self->canSubmit, hasSubmissions => $self->hasSubmissions, hasSubmissionForms => $self->hasSubmissionForms, @@ -948,7 +972,7 @@ calls editSubmissionForm in WebGUI::Asset::EMSSubmissionForm sub www_editSubmissionForm { my $self = shift; - return $self->session->privilege->insufficient() unless $self->canEdit; + return $self->session->privilege->insufficient() unless $self->isRegistrationStaff; return WebGUI::Asset::EMSSubmissionForm->www_editSubmissionForm($self,shift); } @@ -963,7 +987,7 @@ test and save data posted from editSubmissionForm... sub www_editSubmissionFormSave { my $self = shift; - return $self->session->privilege->insufficient() unless $self->canEdit; + return $self->session->privilege->insufficient() unless $self->isRegistrationStaff; my $formParams = WebGUI::Asset::EMSSubmissionForm->processForm($self); if( $formParams->{_isValid} ) { delete $formParams->{_isValid}; @@ -1184,7 +1208,7 @@ sub www_exportEvents { #---------------------------------------------------------------------------- -=head2 www_getAllSubmissions ( session ) +=head2 www_getAllSubmissions ( ) Get a page of Asset Manager data, ajax style. Returns a JSON array to be formatted in a WebGUI submission queue data table. @@ -1199,14 +1223,14 @@ sub www_getAllSubmissions { my $rowsPerPage = 25; my $tableInfo = {}; - return $session->privilege->insufficient unless $self->canView; + return $session->privilege->insufficient unless $self->canSubmit || $self->isRegistrationStaff; my $orderByColumn = $form->get( 'orderByColumn' ) || $self->get("sortColumn"); my $dir = $form->get('orderByDirection') || $self->get('sortOrder'); my $orderByDirection = lc ($dir) eq "asc" ? "ASC" : "DESC"; my $whereClause ; - if(!$self->canEdit) { + if(!$self->isRegistrationStaff) { my $userId = $session->user->userId; $whereClause .= qq{ createdBy='$userId'}; } @@ -1255,7 +1279,7 @@ sub www_getAllSubmissions { title => $asset->get( "title" ), createdBy => WebGUI::User->new($session,$asset->get( "createdBy" ))->username, creationDate => $datetime->epochToSet($asset->get( "creationDate" )), - submissionStatus => $self->getStatus($asset->get( "submissionStatus" ) || 'pending' ), + submissionStatus => $self->getSubmissionStatus($asset->get( "submissionStatus" ) || 'pending' ), lastReplyDate => $lastReplyDate || '', lastReplyBy => $lastReplyBy || '', ); @@ -2485,19 +2509,39 @@ sub www_viewSchedule { sub www_viewSubmissionQueue { my $self = shift; - return $self->session->privilege->insufficient() unless $self->canSubmit || $self->canEdit; + my $isRegistrationStaff = $self->isRegistrationStaff; + my $canSubmit = $self->canSubmit; + my $canEdit = $self->canEdit; + my $i18n = $self->i18n; + return $self->session->privilege->insufficient() unless $canSubmit || $isRegistrationStaff; - return $self->processStyle( + my $QueueTabData = $self->processTemplate({ backUrl => $self->getUrl, - canEdit => $self->canEdit, - canSubmit => $self->canSubmit, + isRegistrationStaff => $isRegistrationStaff, + canEdit => $canEdit, + canSubmit => $canSubmit, hasSubmissionForms => $self->hasSubmissionForms, getSubmissionQueueDataUrl => $self->getUrl('func=getAllSubmissions'), addSubmissionFormUrl => $self->getUrl('func=addSubmissionForm'), editSubmissionFormUrl => $self->getUrl('func=editSubmissionForm'), addSubmissionUrl => $self->getUrl('func=addSubmission'), - },$self->get('eventSubmissionQueueTemplateId'))); + },$self->get('eventSubmissionQueueTemplateId')); + + return $self->processStyle( + $self->processTemplate({ + queueTabTitle => $isRegistrationStaff ? $i18n->get('submission queue') : $i18n->get('my submissions'), + queueTabData => $QueueTabData, + backUrl => $self->getUrl, + isRegistrationStaff => $isRegistrationStaff, + canEdit => $canEdit, + canSubmit => $canSubmit, + hasSubmissionForms => $self->hasSubmissionForms, + getSubmissionQueueDataUrl => $self->getUrl('func=getAllSubmissions'), + addSubmissionFormUrl => $self->getUrl('func=addSubmissionForm'), + editSubmissionFormUrl => $self->getUrl('func=editSubmissionForm'), + addSubmissionUrl => $self->getUrl('func=addSubmission'), + },$self->get('eventSubmissionMainTemplateId'))); } 1; diff --git a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm index 8a74ab4cc..42c227564 100644 --- a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm +++ b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm @@ -2022,6 +2022,18 @@ normal templates.|, context => q|This is help text for the submitted location list field.|, }, + 'submission queue' => { + message => q|Submission Queue|, + lastUpdated => 1147050475, + context => q|Label for the submission list tab for registration staff.|, + }, + + 'my submissions' => { + message => q|My Submissions|, + lastUpdated => 1147050475, + context => q|Label for the submission list tab for event submitters.|, + }, + # 'TODO' => { # message => q|TODO|, # lastUpdated => 1147050475, diff --git a/t/Asset/EMSSubmissionForm.t b/t/Asset/EMSSubmissionForm.t index 36d5c82ab..b8c79b4e7 100644 --- a/t/Asset/EMSSubmissionForm.t +++ b/t/Asset/EMSSubmissionForm.t @@ -94,7 +94,8 @@ my $ems = $node->addChild({ url => '/test-ems', workflowIdCommit => 'pbworkflow000000000003', # Commit Content Immediately registrationStaffGroupId => $registrars->getId, - groupIdView => $attendees->getId + groupIdView => $attendees->getId, + submittedLocationsList => join( "\n", my @submissionLocations = qw'loc1 loc2' ), }); # I scooped this out ot WG::Asset::Wobject::EventManagementSystem # its not pretty, but there is no other way to add a meta field @@ -118,8 +119,15 @@ my $ems = $node->addChild({ defaultValues => '', },1,1); +my $i18n = $ems->i18n; $versionTag->commit; +my $id1 = $ems->getNextSubmissionId; +my $id2 = $ems->getNextSubmissionId; +my $id3 = $ems->getNextSubmissionId; +my $id4 = $ems->getNextSubmissionId; +is( $id1 +3, $id4, ' test getNextSubmissionId' ); + # quick test of addGroupToSubmitList is($ems->get('eventSubmissionGroups'),'', 'event submission groups is blank'); $ems->addGroupToSubmitList('joe'); @@ -131,6 +139,10 @@ is($ems->get('eventSubmissionGroups'),'joe frank', 'event submission groups stil $ems->update({eventSubmissionGroups => ''}); is($ems->get('eventSubmissionGroups'),'', 'event submission groups is reset to blank'); +is_deeply($ems->getSubmissionLocations, \@submissionLocations, 'test getSubmissionLocations' ); +is_deeply( $ems->getSubmissionStatus, { + map { $_ => $i18n->get($_) } ( qw/pending feedback failed approved created denied/ ) +}, 'test getSubmissionStatus' ); $versionTag = WebGUI::VersionTag->getWorking($session); WebGUI::Test->tagsToRollback($versionTag); @@ -163,6 +175,7 @@ my $frmA = $ems->addSubmissionForm({ isa_ok( $frmA, 'WebGUI::Asset::EMSSubmissionForm' ); is( $ems->hasSubmissionForms, 1, 'ems now has forms' ); is_deeply( $frmA->getFormDescription, $formAdesc, 'form description matches' ); +is( $frmA->ems->getId, $ems->getId, 'test ems access function in form' ); my $formBdesc = { _fieldList => [ qw/title description duration mfRequiredUrl/ ], @@ -205,7 +218,7 @@ push @cleanup, sub { $sub1->delete; }; print join( "\n", @{$sub1->{errors}} ),"\n" if defined $sub1->{errors}; my $isa1 = isa_ok( $sub1, 'WebGUI::Asset::EMSSubmission', "userA/formA valid submission succeeded" ); ok( $ems->hasSubmissions, 'UserA has submissions on this ems' ); - +is( $sub1->ems->getId, $ems->getId, 'test ems access function in submission' ); loginUserB; ok( $ems->canSubmit, 'UserB can submit to this ems' ); @@ -228,6 +241,70 @@ ok( $ems->canSubmit, 'UserC can submit to this ems' ); ok( $frmA->canSubmit, 'UserC can submit to formA' ); ok( $frmB->canSubmit, 'UserC can submit to formB' ); +loginUserA; +cmp_deeply( from_json($ems->www_getAllSubmissions), { + sort => undef, + startIndex => 1, + records => [ + { + lastReplyDate => '', + submissionId => '4', + creationDate => ignore(), + createdBy => 'userA', + url => '/test-ems?func=viewSubmissionQueue#4', + submissionStatus => $i18n->get('pending'), + title => 'my favorite thing to talk about', + lastReplyBy => '' + } + ], + totalRecords => '1', + recordsReturned => 25, + dir => 'DESC', +}, 'test getAllSubmissions for UserA' ); + +loginUserC; +cmp_deeply( from_json($ems->www_getAllSubmissions), { + sort => undef, + startIndex => 1, + records => [ + ], + totalRecords => '0', + recordsReturned => 25, + dir => 'DESC', +}, 'test getAllSubmissions for UserC' ); + +loginRgstr; +$session->request->setup_body({ orderByColumn => 'submissionId' }); +cmp_deeply( from_json($ems->www_getAllSubmissions), { + sort => 'submissionId', + startIndex => 1, + records => [ + { + lastReplyDate => '', + submissionId => '5', + creationDate => ignore(), + createdBy => 'userB', + url => '/test-ems?func=viewSubmissionQueue#5', + submissionStatus => $i18n->get('pending'), + title => 'why i like to be important', + lastReplyBy => '' + }, + { + lastReplyDate => '', + submissionId => '4', + creationDate => ignore(), + createdBy => 'userA', + url => '/test-ems?func=viewSubmissionQueue#4', + submissionStatus => $i18n->get('pending'), + title => 'my favorite thing to talk about', + lastReplyBy => '' + }, + ], + totalRecords => '2', + recordsReturned => 25, + dir => 'DESC', +}, 'test getAllSubmissions for Registrar' ); + # TODO fix num tests SKIP: { skip 'create submission failed', 8 unless $isa1 && $isa2; @@ -305,10 +382,9 @@ is( $sub2, undef, 'approval created a ticket'); $versionTag->commit; - SKIP: { skip 'requires HTML::Form', 2 unless use_ok 'HTML::Form'; # this is not the greatest testm but it does run through the basic create submissionForm code. -loginAdmin; +loginRgstr; my %settings = ( assetId => 'new', @@ -370,7 +446,6 @@ for my $input ( $form->inputs ) { } $session->request->setup_body( { $form->form } ); my $result = WebGUI::Asset::EMSSubmissionForm->processForm($ems); -dav::dump $result; cmp_deeply( $result, $expected , 'test process form' ); $expected = { 'errors' => [ @@ -399,7 +474,25 @@ dav::dump $result; cmp_deeply( $result, $expected , 'test process form' ); } # end of skip HTML::Form -print $ems->www_getAllSubmissions; +# these run code to see that it runs, but do not check for correctness + +$ems->www_viewSubmissionQueue; +$ems->www_addSubmission; +$ems->www_addSubmissionForm; +$ems->www_editSubmissionForm; +$ems->www_editSubmissionFormSave; +$frmA->www_editSubmissionForm; +$frmA->www_addSubmission; +$frmA->www_editSubmission; +$frmA->www_editSubmissionSave; +$frmA->processForm; +$sub1->drawLocationField; +$sub1->drawRelatedBadgeGroupsField; +$sub1->drawRelatedRibbonsField; +$sub1->drawStatusField; +$sub1->www_editSubmission; +$sub1->www_editSubmissionSave; +$sub1->processForm; } # end of use packages skip }; # end of eval