diff --git a/lib/WebGUI/Asset/EMSSubmission.pm b/lib/WebGUI/Asset/EMSSubmission.pm
index 350623f0c..14ac4d85a 100644
--- a/lib/WebGUI/Asset/EMSSubmission.pm
+++ b/lib/WebGUI/Asset/EMSSubmission.pm
@@ -1,6 +1,5 @@
package WebGUI::Asset::EMSSubmission;
-use lib '/root/pb/lib'; use dav;
=head1 LEGAL
-------------------------------------------------------------------
@@ -20,6 +19,7 @@ use strict;
use Tie::IxHash;
use base qw(WebGUI::AssetAspect::Comments WebGUI::Asset);
use WebGUI::Utility;
+use WebGUI::Inbox;
=head1 NAME
@@ -292,7 +292,7 @@ sub drawRelatedRibbonsField {
sub drawStatusField {
my ($self, $params) = @_;
return WebGUI::Form::SelectBox($self->session, {
- name => 'location',
+ name => 'submissionStatus',
value => $self->get('submissionStatus'),
options => $self->ems->getSubmissionStatus,
});
@@ -341,12 +341,12 @@ sub sendEmailUpdate {
my $session = $self->session;
my $i18n = WebGUI::International->new( $session, "Asset_EMSSubmission" );
if( $self->get('sendEmailOnChange') ) {
- WebGUI::Inbox->addMessage( $session,{
+ WebGUI::Inbox->new($session)->addMessage( $session,{
status => 'unread',
message => $i18n->get('your submission has been updated') . "\n\n" .
$self->get('title'),
- userId => $self->createdBy,
- sentBy => $session->userId,
+ userId => $self->get('createdBy'),
+ sentBy => $session->user->userId,
});
}
}
@@ -374,19 +374,17 @@ sub www_editSubmission {
my $parent;
if( $this eq __PACKAGE__ ) { # called as a constructor
$parent = shift;
-dav::log 'EMSSubmission::www_editSubmission: got class/parent params';
} else {
$self = $this;
$parent = $self->getParent;
-dav::log 'EMSSubmission::www_editSubmission: got self param';
}
my $params = shift || { };
my $session = $parent->session;
my $i18n = WebGUI::International->new($parent->session,'Asset_EventManagementSystem');
+ my $i18n_WG = WebGUI::International->new($parent->session,'WebGUI');
my $assetId = $self ? $self->getId : $params->{assetId} || $session->form->get('assetId') || 'new';
if( $assetId ne 'new' ) {
-dav::log 'EMSSubmission::www_editSubmission: asseId ne new';
$self ||= WebGUI::Asset->newByDynamicClass($session,$assetId);
if (!defined $self) {
$session->errorHandler->error(__PACKAGE__ . " - failed to instanciate asset with assetId $assetId");
@@ -398,27 +396,39 @@ dav::log 'EMSSubmission::www_editSubmission: asseId ne new';
$newform->hidden(name => 'assetId', value => $assetId);
my $formDescription = $parent->getFormDescription;
my @defs = reverse @{__PACKAGE__->definition($session)};
+ my @fieldNames = qw/title submissionStatus startDate duration seatsAvailable location description/;
my $fields;
for my $def ( @defs ) {
my $properties = $def->{properties};
for my $fieldName ( %$properties ) {
if( defined $formDescription->{$fieldName} ) {
$fields->{$fieldName} = { %{$properties->{$fieldName}} }; # a simple first level copy
+ if( $fieldName eq 'description' ) {
+ $fields->{description}{height} = 200;
+ $fields->{description}{width} = 350;
+ }
$fields->{$fieldName}{fieldId} = $fieldName;
+ $fields->{$fieldName}{name} = $fieldName;
+ $fields->{$fieldName}{value} = $self->get($fieldName) if $self;
}
}
}
# add the meta field
for my $metaField ( @{$parent->getParent->getEventMetaFields} ) {
- if( defined $formDescription->{$metaField->{fieldId}} ) {
- $fields->{$metaField->{fieldId}} = { %$metaField }; # a simple first level copy
+ my $fieldId = $metaField->{fieldId};
+ if( defined $formDescription->{$fieldId} ) {
+ push @fieldNames, $fieldId;
+ $fields->{$fieldId} = { %$metaField }; # a simple first level copy
# meta fields call it data type, we copy it to simplify later on
- $fields->{$metaField->{fieldId}}{fieldType} = $metaField->{dataType};
+ $fields->{$fieldId}{fieldType} = $metaField->{dataType};
+ $fields->{$fieldId}{name} = $fieldId;
+ $fields->{$fieldId}{value} = $self->get($fieldId) if $self;
}
}
# for each field
- for my $field ( values %$fields ) {
+ for my $fieldId ( @fieldNames ) {
+ my $field = $fields->{$fieldId};
if( $formDescription->{$field->{fieldId}} || $asset->ems->isRegistrationStaff ) {
my $drawMethod = __PACKAGE__ . '::' . $field->{customDrawMethod};
if ($asset->can( $drawMethod )) {
@@ -437,18 +447,21 @@ dav::log 'EMSSubmission::www_editSubmission: asseId ne new';
);
}
}
- # TODO add the comment form
$newform->submit;
- my $title = $assetId eq 'new' ? $i18n->get('new submission') || 'new' : $asset->get('submissionId');
+ my $title = $assetId eq 'new' ? $i18n_WG->get(99) : $asset->get('title');
my $content = $asset->processStyle(
$asset->processTemplate({
errors => $params->{errors} || [],
backUrl => $parent->getUrl,
+ pageTitle => $title,
pageForm => $newform->print,
+ commentForm => $self ? $self->getFormattedComments : '',
+ commentFlag => $self ? 1 : 0 ,
},$parent->getParent->get('eventSubmissionTemplateId')));
+ WebGUI::Macro::process( $session, \$content );
if( $session->form->get('asJson') ) {
$session->http->setMimeType( 'application/json' );
- return JSON->new->encode( { text => $content, title => $title } );
+ return JSON->new->encode( { text => $content, title => $title, id => $assetId ne 'new' ? $assetId : 'new' . rand } );
} else {
$session->http->setMimeType( 'text/html' );
return $content;
@@ -465,14 +478,14 @@ sub www_editSubmissionSave {
my $self = shift;
my $session = $self->session;
return $session->privilege->insufficient() unless $self->canEdit;
- my $formParams = WebGUI::Asset::EMSSubmission->processForm($self);
+ my $formParams = $self->processForm;
if( $formParams->{_isValid} ) {
delete $formParams->{_isValid};
$self->addRevision($formParams);
WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { override => 1, allowComments => 0 });
$self = $self->cloneFromDb;
$self->sendEmailUpdate;
- return $self->www_view;
+ return $self->ems->www_viewSubmissionQueue;
} else {
return $self->www_editSubmission($formParams);
}
@@ -486,7 +499,7 @@ calles ems->view
=cut
-sub www_view { $_[0]->ems->www_view }
+sub www_view { $_[0]->ems->www_viewSubmissionQueue }
#-------------------------------------------------------------------
@@ -505,9 +518,10 @@ sub getEditForm {
my $comments = $tabform->getTab( 'comments' );
#add the comments...
- $comments->div({name => 'comments',
- contentCallback => sub { $self->getFormattedComments },
- });
+ # TODO once comments can be submitted using AJAX this will work...
+# $comments->div({name => 'comments',
+# contentCallback => sub { $self->getFormattedComments },
+# });
return $tabform;
}
@@ -585,24 +599,36 @@ reference to the EMS asset that is parent to the new submission form asset
=cut
-use lib '/root/pb/lib'; use dav;
sub processForm {
my $this = shift;
my $form;
+ my $asset;
+ my $parent;
+ my $self;
if( $this eq __PACKAGE__ ) {
- my $parent = shift;
+ $parent = shift;
$form = $parent->session->form;
- } elsif( ref $this eq __PACKAGE__ ) {
- $form = $this->session->form;
+ $asset = $parent;
} else {
- return {_isValid => 0, errors => [ { text => 'invalid function call' } ] };
+ $self = $this;
+ $parent = $self->getParent;
+ $form = $self->session->form;
+ $asset = $self;
}
my $params = {_isValid=>1};
- # TODO
- # get description from parent
- # for each active field
- # get data from session->form
+ my $formDescription = $parent->getFormDescription;
+ my @idList;
+ if( $asset->ems->isRegistrationStaff ) {
+ @idList = ( 'submissionStatus', keys %$formDescription );
+ } else {
+ @idList = @{$formDescription->{_fieldList}} ;
+ }
+ for my $fieldId ( @idList ) {
+ next if $fieldId =~ /^_/;
+ $params->{$fieldId} = $form->get($fieldId);
+ }
+ return $params;
}
#-------------------------------------------------------------------
@@ -655,6 +681,7 @@ This method is called when data is purged by the system.
=head2 view ( )
method called by the container www_view method.
+NOTE: this should net get called, all views are redirected elsewhere.
=cut
diff --git a/lib/WebGUI/Asset/EMSSubmissionForm.pm b/lib/WebGUI/Asset/EMSSubmissionForm.pm
index b2bbefe88..752730e20 100644
--- a/lib/WebGUI/Asset/EMSSubmissionForm.pm
+++ b/lib/WebGUI/Asset/EMSSubmissionForm.pm
@@ -1,6 +1,5 @@
package WebGUI::Asset::EMSSubmissionForm;
-use lib '/root/pb/lib'; use dav;
=head1 LEGAL
@@ -22,11 +21,6 @@ use base 'WebGUI::Asset';
use JSON;
use WebGUI::Utility;
-# TODO:
-# To get an installer for your wobject, add the Installable AssetAspect
-# See WebGUI::AssetAspect::Installable and sbin/installClass.pl for more
-# details
-
=head1 NAME
Package WebGUI::Asset::EMSSubmissionForm
@@ -47,7 +41,6 @@ These methods are available from this class:
=cut
-use lib '/root/pb/lib'; use dav;
#-------------------------------------------------------------------
@@ -257,15 +250,14 @@ sub www_editSubmissionForm {
)
} ( @$res ) );
my $title = $i18n->get('select form to edit') ;
- my $content = $parent->processStyle( '
' . $title .
- '
' );
- if( $session->form->get('asJson') ) {
- $session->http->setMimeType( 'application/json' );
- return JSON->new->encode( { text => $content, title => $title } );
- } else {
- $session->http->setMimeType( 'text/html' );
- return $content;
- }
+ my $content = '' . $title . '
' ;
+ if( $session->form->get('asJson') ) {
+ $session->http->setMimeType( 'application/json' );
+ return JSON->new->encode( { text => $content, title => $title, id => 'list' . rand } );
+ } else {
+ $session->http->setMimeType( 'text/html' );
+ return $parent->ems->processStyle( $content );
+ }
}
} elsif( $assetId ne 'new' ) {
$self ||= WebGUI::Asset->newByDynamicClass($session,$assetId);
@@ -280,7 +272,6 @@ sub www_editSubmissionForm {
my @fieldNames = qw/title description startDate duration seatsAvailable location/;
my $fields;
my @defs = reverse @{WebGUI::Asset::EMSSubmission->definition($session)};
-dav::dump 'editSubmissionForm::definition:', [@defs];
for my $def ( @defs ) {
foreach my $fieldName ( @fieldNames ) {
my $properties = $def->{properties};
@@ -300,7 +291,6 @@ dav::dump 'editSubmissionForm::definition:', [@defs];
}
$newform->hidden( name => 'fieldNames', value => join( ' ', @fieldNames ) );
@defs = reverse @{WebGUI::Asset::EMSSubmissionForm->definition($session)};
-dav::dump 'editSubmissionForm::dump submission form def', \@defs ;
for my $def ( @defs ) {
my $properties = $def->{properties};
for my $fieldName ( qw/title menuTitle url description canSubmitGroupId daysBeforeCleanup
@@ -309,15 +299,14 @@ dav::dump 'editSubmissionForm::dump submission form def', \@defs ;
my %fieldParams = %{$properties->{$fieldName}};
$fieldParams{name} = $fieldName;
$fieldParams{value} = $params->{$fieldName} || $self ? $self->get($fieldName) : undef ;
-dav::dump 'editSubmissionForm::properties for ', $fieldName, \%fieldParams ;
$newform->dynamicField(%fieldParams);
}
}
}
-dav::dump 'editSubmissionForm::dump before generate:',$fields;
my $formDescription = $params->{formDescription} || $self ? $self->getFormDescription : { };
for my $fieldId ( @fieldNames ) {
+ next if $fieldId eq 'submissionStatus';
my $field = $fields->{$fieldId};
$newform->yesNo(
label => $field->{label},
@@ -328,19 +317,23 @@ dav::dump 'editSubmissionForm::dump before generate:',$fields;
}
$newform->submit;
my $title = $assetId eq 'new' ? $i18n->get('new form') || 'new' : $asset->get('title');
- my $content = $asset->processStyle(
- $asset->processTemplate({
+ if( $session->form->get('asJson') ) {
+ $session->http->setMimeType( 'application/json' );
+ } else {
+ $session->http->setMimeType( 'text/html' );
+ }
+ my $content = $asset->processTemplate({
errors => $params->{errors} || [],
backUrl => $parent->getUrl,
+ pageTitle => $title,
pageForm => $newform->print,
- },$parent->get('eventSubmissionTemplateId')));
- if( $session->form->get('asJson') ) {
- $session->http->setMimeType( 'application/json' );
- return JSON->new->encode( { text => $content, title => $title } );
- } else {
- $session->http->setMimeType( 'text/html' );
- return $content;
- }
+ },$parent->get('eventSubmissionTemplateId'));
+ WebGUI::Macro::process( $session, \$content );
+ if( $session->form->get('asJson') ) {
+ return JSON->new->encode( { text => $content, title => $title, id => $assetId ne 'new' ? $assetId : 'new' . rand } );
+ } else {
+ return $asset->ems->processStyle( $content );
+ }
}
@@ -375,7 +368,7 @@ calls ems->view
=cut
-sub www_view { $_[0]->ems->www_view }
+sub www_view { $_[0]->ems->www_viewSubmissionQueue }
#-------------------------------------------------------------------
@@ -483,6 +476,7 @@ This method is called when data is purged by the system.
=head2 view ( )
method called by the container www_view method.
+Note: this really shouldn't get called, all views are redirected elsewhere
=cut
@@ -504,7 +498,6 @@ calls www_editSubmission with assetId == new
=cut
sub www_addSubmission {
-dav::log __PACKAGE__ . '::www_addSubmission';
my $self = shift;
$self->www_editSubmission( { assetId => 'new' } );
}
@@ -537,7 +530,6 @@ calls WebGUI::Asset::EMSSubmission->editSubmission
=cut
sub www_editSubmission {
-dav::log __PACKAGE__ . '::www_editSubmission';
my $self = shift;
return $self->session->privilege->insufficient() unless $self->canEdit;
return WebGUI::Asset::EMSSubmission->www_editSubmission($self,shift);
@@ -576,16 +568,18 @@ reference to the EMS asset that is parent to the new submission form asset
=cut
-use lib '/root/pb/lib'; use dav;
sub processForm {
my $this = shift;
my $form;
+ my $session;
if( $this eq __PACKAGE__ ) {
my $parent = shift;
- $form = $parent->session->form;
+ $session = $parent->session;
+ $form = $session->form;
} elsif( ref $this eq __PACKAGE__ ) {
- $form = $this->session->form;
+ $session = $this->session;
+ $form = $session->form;
} else {
return {_isValid => 0, errors => [ { text => 'invalid function call' } ] };
}
@@ -597,11 +591,12 @@ sub processForm {
my @fieldNames = split( ' ', $form->get('fieldNames') );
$params->{formDescription} = { map { $_ => $form->get($_ . '_yesNo') } ( @fieldNames ) };
$params->{formDescription}{_fieldList} = [ map { $params->{formDescription}{$_} ? $_ : () } ( @fieldNames ) ];
+ $params->{formDescription}{submissionStatus} = 0;
if( scalar( @{$params->{formDescription}{_fieldList}} ) == 0 ) {
$params->{_isValid} = 0;
- push @{$params->{errors}}, {text => 'you should turn on at least one entry field' }; # TODO internationalize this
+ my $i18n = WebGUI::International->new( $session, "Asset_EMSSubmissionForm" );
+ push @{$params->{errors}}, {text => $i18n->get('turn on one field') };
}
-dav::dump 'processForm::params:', $params;
return $params;
}
diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
index 23e8bc7f1..ecdb666f7 100644
--- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
+++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
@@ -1,6 +1,5 @@
package WebGUI::Asset::Wobject::EventManagementSystem;
-use lib '/root/pb/lib'; use dav;
=head1 LEGAL
@@ -47,7 +46,8 @@ adds the parameter to eventSubmissionGroups
sub addGroupToSubmitList {
my $self = shift;
my $groupId = shift;
- my @ids = split(' ', $self->get('eventSubmissionGroups'));
+ my ($idString) = $self->session->db->read('select eventSubmissionGroups from EventManagementSystem where assetId = ?', [ $self->getId ] )->array;
+ my @ids = split(' ', $idString);
my %h;
@ids = map { $h{$_}++ == 0 ? $_ : () } ( $groupId, @ids );
$self->update({eventSubmissionGroups => join( ' ', @ids ) });
@@ -302,6 +302,21 @@ sub deleteEventMetaField {
}
+#-------------------------------------------------------------------
+
+=head2 ems
+
+this is called by the submission sub-system
+it is for compatability and ensures that the ems
+object is used for certain calls
+
+=cut
+
+sub ems {
+ my $self = shift;
+ return $self;
+}
+
#-------------------------------------------------------------------
=head2 getBadges ()
@@ -443,7 +458,6 @@ get a sequence number for the submission id
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;
@@ -489,7 +503,6 @@ retuns an arrayref of the locations found in the submission location list
sub getSubmissionLocations {
my $self = shift;
my $text = $self->get('submittedLocationsList');
-dav::log 'getSubmissionLocations:"', $text, '"';
return undef if $text eq '';
return [ split( /\s+/, $text ) ];
}
@@ -745,7 +758,6 @@ display a form or links to forms to create a new submission
=cut
sub www_addSubmission {
-dav::log __PACKAGE__ . '::www_addSubmission';
my $self = shift;
my $params = shift || {};
my $session = $self->session;
@@ -765,20 +777,31 @@ dav::log __PACKAGE__ . '::www_addSubmission';
$formId = $form->getId;
} else {
my $makeAnchorList =sub{ my $u=shift; my $n=shift; my $d=shift;
- return qq{$n} } ;
+ return qq{$n} } ;
my $listOfLinks = join '', ( map {
$makeAnchorList->(
- $_->getUrl('func=addSubmission' ),
+ $self->getUrl('func=viewSubmissionQueue#' . $_->getId . '_new' ), # _new has to match same in sub www_viewSubmissionQueue in this module
$_->get('title'),
WebGUI::HTML::filter($_->get('description'),'all')
)
} ( @new ) );
- return $self->processStyle( '' . $i18n->get('select form to submit') .
- '
' );
+ my $title = $i18n->get('select form to submit') ;
+ my $asJson = $session->form->get('asJson');
+ if( $asJson ) {
+ $session->http->setMimeType( 'application/json' );
+ } else {
+ $session->http->setMimeType( 'text/html' );
+ }
+ my $content = '' . $title . '
' ;
+use lib '/root/pb/lib'; use dav; dav::log $content;
+ if( $asJson ) {
+ return JSON->new->encode( { text => $content, title => $title, id => 'list' . rand } );
+ } else {
+ return $self->ProcessStyle( $content );
+ }
}
- } else {
- $form = WebGUI::Asset->newByDynamicClass($session,$formId);
}
+ $form = WebGUI::Asset->newByDynamicClass($session,$formId);
if (!defined $form) {
$session->errorHandler->error(__PACKAGE__ . " - failed to instanciate asset with assetId $formId");
}
@@ -1010,7 +1033,6 @@ sub www_editSubmissionForm {
return WebGUI::Asset::EMSSubmissionForm->www_editSubmissionForm($self,shift);
}
-
#-------------------------------------------------------------------
=head2 www_editSubmissionFormSave
@@ -1254,7 +1276,6 @@ sub www_getAllSubmissions {
my $session = $self->session;
my $datetime = $session->datetime;
my $form = $session->form;
- my $rowsPerPage = 25;
my $tableInfo = {};
return $session->privilege->insufficient unless $self->canSubmit || $self->isRegistrationStaff;
@@ -1385,6 +1406,7 @@ sub www_getSubmissionById {
} else {
$result->{text} = $res->[0]->www_editSubmission;
$result->{title} = $submissionId;
+ $result->{id} = $submissionId;
}
$self->session->http->setMimeType('application/json');
return JSON->new->encode($result);
@@ -2633,11 +2655,17 @@ sub www_viewSubmissionQueue {
return $self->session->privilege->insufficient() unless $canSubmit || $isRegistrationStaff;
# this map returns an array of hash refs with an id,url pair to describe the submissionForm assets
- my @submissionFormUrls = map { {
+ my @submissionFormUrls = map { { # edit form
id => $_->getId,
+ edit => 1,
title => $_->get('title'),
linkUrl => $self->getUrl('func=viewSubmissionQueue#' . $_->getId ),
ajaxUrl => $_->getUrl('func=editSubmissionForm'),
+ },{ # new submission ( _new has to match same in sub www_addSubmission in this module
+ id => $_->getId . '_new',
+ title => $_->get('title') . ' - ' . $i18n->get('add submission'),
+ linkUrl => $self->getUrl('func=viewSubmissionQueue#' . $_->getId . '_new' ),
+ ajaxUrl => $_->getUrl('func=addSubmission'),
} } (
@{$self->getLineage( ['children'],{ returnObjects => 1,
includeOnlyClasses => ['WebGUI::Asset::EMSSubmissionForm'],
diff --git a/lib/WebGUI/Workflow/Activity/CleanupEMSSubmissions.pm b/lib/WebGUI/Workflow/Activity/CleanupEMSSubmissions.pm
index a9a29f1af..69eadb33e 100644
--- a/lib/WebGUI/Workflow/Activity/CleanupEMSSubmissions.pm
+++ b/lib/WebGUI/Workflow/Activity/CleanupEMSSubmissions.pm
@@ -79,26 +79,29 @@ dav::log __PACKAGE__ . " executing\n";
# keep track of how much time it's taking
my $start = time;
my $limit = 2_500;
- my $timeLimit = 120;
+ my $timeLimit = 60;
- my $list = $root->getLineage( ['children'], { returnObjects => 1,
+ my $list = $root->getLineage( ['descendants'], { returnObjects => 1,
includeOnlyClasses => ['WebGUI::Asset::EMSSubmissionForm'],
} );
- for my $emsf ( @$list ) {
- my $daysBeforeCleanup = $emsf->get('daysBeforeCleanup') ;
+ for my $emsForm ( @$list ) {
+dav::log __PACKAGE__ . "::executing::emsForm loop\n";
+ my $daysBeforeCleanup = $emsForm->get('daysBeforeCleanup') ;
next if ! $daysBeforeCleanup;
my $whereClause = q{ submissionStatus='denied' };
- if( $emsf->get('deleteCreatedItems') ) {
+ if( $emsForm->get('deleteCreatedItems') ) {
$whereClause = ' ( ' . $whereClause . q{ or submissionStatus='created' } . ' ) ';
}
my $checkDate = time - ( 60*60*24* $daysBeforeCleanup );
- $whereClause .= q{ and lastModifiedDate < } . $checkDate;
- my $res = $emsf->getLineage(['children'],{
+ $whereClause .= q{ and assetData.lastModified < } . $checkDate;
+ my $res = $emsForm->getLineage(['children'],{ returnObjects => 1,
+ joinClass => 'WebGUI::Asset::EMSSubmission',
includeOnlyClasses => ['WebGUI::Asset::EMSSubmission'],
whereClause => $whereClause,
} );
for my $submission ( @$res ) {
+dav::log __PACKAGE__ . "::executing::submission loop\n";
$submission->purge;
$limit--;
return $self->WAITING(1) if ! $limit or time > $start + $timeLimit;
diff --git a/lib/WebGUI/Workflow/Activity/ProcessEMSApprovals.pm b/lib/WebGUI/Workflow/Activity/ProcessEMSApprovals.pm
index a374847a8..a670a8ba7 100644
--- a/lib/WebGUI/Workflow/Activity/ProcessEMSApprovals.pm
+++ b/lib/WebGUI/Workflow/Activity/ProcessEMSApprovals.pm
@@ -19,6 +19,7 @@ use strict;
use base 'WebGUI::Workflow::Activity';
use WebGUI::Asset;
use WebGUI::International;
+use WebGUI::VersionTag;
=head1 NAME
@@ -68,48 +69,52 @@ See WebGUI::Workflow::Activity::execute() for details.
=cut
-use lib '/root/pb/lib'; use dav;
sub execute {
my $self = shift;
my $session = $self->session;
my $root = WebGUI::Asset->getRoot($session);
-dav::log __PACKAGE__ . " executing\n";
# keep track of how much time it's taking
my $start = time;
my $limit = 2_500;
- my $timeLimit = 120;
+ my $timeLimit = 60;
my $list = $root->getLineage( ['descendants'], { returnObjects => 1,
includeOnlyClasses => ['WebGUI::Asset::EMSSubmissionForm'],
} );
- for my $emsf ( @$list ) {
+ for my $emsForm ( @$list ) {
my $whereClause = q{ submissionStatus='approved' };
- my $res = $emsf->getLineage(['children'],{ returnObjects => 1,
+ my $res = $emsForm->getLineage(['children'],{ returnObjects => 1,
joinClass => 'WebGUI::Asset::EMSSubmission',
includeOnlyClasses => ['WebGUI::Asset::EMSSubmission'],
whereClause => $whereClause,
} );
for my $submission ( @$res ) {
- my %properties = $submission->get;
- delete $properties{submissionId};
- delete $properties{submissionStatus};
- delete $properties{sendEmailOnChange};
- delete $properties{ticketId};
- my $newAsset = $emsf->ems->addChild(
- className => 'WebGUI::Asset::Sku::EMSTicket',
- %properties,
- );
- if( defined $newAsset ) {
+ my $properties = { className => 'WebGUI::Asset::Sku::EMSTicket' };
+ for my $name ( qw{title description seatsAvailable price vendorId
+ synopsis location duration startDate sku relatedRibbons
+ relatedBadgeGroups eventMetaData shipsSeparately} ) {
+ $properties->{$name} = $submission->get($name);
+ }
+ $properties->{eventNumber} = $self->session->db->quickScalar(
+ "select max(eventNumber)+1
+ from EMSTicket left join asset using (assetId)
+ where parentId=?",[$emsForm->ems->getId]) || 0;
+ my $newAsset = $emsForm->ems->addChild( $properties );
+ if( $newAsset ) {
+ # TODO this should be addRevision
$submission->update({ ticketId => $newAsset->getId, submissionStatus => 'created' });
+ WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { override => 1, allowComments => 0 });
} else {
+ $submission->addComment($@) if $@;
$submission->update({ submissionStatus => 'failed' });
}
$limit--;
- return $self->WAITING(1) if ! $limit or time > $start + $timeLimit;
+ last if ! $limit or time > $start + $timeLimit;
}
}
+ return $self->WAITING(1) if ! $limit or time > $start + $timeLimit;
return $self->COMPLETE;
}
diff --git a/lib/WebGUI/i18n/English/Asset_EMSSubmissionForm.pm b/lib/WebGUI/i18n/English/Asset_EMSSubmissionForm.pm
index 58fd5517e..80bbbd3b5 100644
--- a/lib/WebGUI/i18n/English/Asset_EMSSubmissionForm.pm
+++ b/lib/WebGUI/i18n/English/Asset_EMSSubmissionForm.pm
@@ -87,6 +87,18 @@ our $I18N = { ##hashref of hashes
context => q|Help text for the submission deadline field. After this date this submission form will not accept any more entries.|
},
+ 'new form' => {
+ message => q|New Form|,
+ lastUpdated => 1131394072,
+ context => q|This is the label for the tab when creating a new submission form.|
+ },
+
+ 'turn on one field' => {
+ message => q|You should turn on at least one entry field.|,
+ lastUpdated => 1131394072,
+ context => q|Remind the registrar to allow at least one field to be editted by the event submitter.|
+ },
+
# 'TODO' => {
# message => q|TODO|,
# lastUpdated => 1131394072,
diff --git a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm
index cbf6487f1..7c0f61d79 100644
--- a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm
+++ b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm
@@ -1915,6 +1915,12 @@ normal templates.|,
context => q|Label for link to view submission queue.|,
},
+ 'add submission' => {
+ message => q|New|,
+ lastUpdated => 1147050475,
+ context => q|This is appended to the title of a submission form when user is submitting a new event.|,
+ },
+
'new submission' => {
message => q|New Submission|,
lastUpdated => 1147050475,
diff --git a/t/Asset/EMSSubmissionForm.t b/t/Asset/EMSSubmissionForm.t
index 15d677083..d6a60e7c3 100644
--- a/t/Asset/EMSSubmissionForm.t
+++ b/t/Asset/EMSSubmissionForm.t
@@ -18,6 +18,7 @@ use strict;
use lib "$FindBin::Bin/../lib";
use Test::More;
use Test::Deep;
+use Test::Warn;
use JSON;
use WebGUI::Test; # Must use this before any other WebGUI modules
use WebGUI::Test::Activity;
@@ -33,12 +34,11 @@ use WebGUI::Asset::Sku::EMSToken;
#----------------------------------------------------------------------------
# Init
my $session = WebGUI::Test->session;
-my @cleanup = ();
#----------------------------------------------------------------------------
# Tests
-plan tests => 60; # Increment this number for each test you create
+plan tests => 52; # Increment this number for each test you create
(my $submitGroupA = WebGUI::Group->new($session,'new'))->name('groupA');
(my $submitGroupB = WebGUI::Group->new($session,'new'))->name('groupB');
@@ -165,8 +165,6 @@ my $formAdesc = {
location => 0,
};
-use lib '/root/pb/lib'; use dav;
-dav::dump $session;
my $frmA = $ems->addSubmissionForm({
title => 'test A -- long',
@@ -216,7 +214,7 @@ my $submission = {
};
$session->request->setup_body($submission);
my $sub1 = $frmA->addSubmission;
-push @cleanup, sub { $sub1->puge; };
+WebGUI::Test->assetsToPurge( $sub1 );
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' );
@@ -227,14 +225,14 @@ ok( $ems->canSubmit, 'UserB can submit to this ems' );
ok( !$frmA->canSubmit, 'UserB cannot submit to formA' );
ok( $frmB->canSubmit, 'UserB can submit to formB' );
-my $submission = {
+$submission = {
title => 'why i like to be important',
description => 'the description',
mfRequiredUrl => 'http://google.com',
};
$session->request->setup_body($submission);
my $sub2 = $frmB->addSubmission;
-push @cleanup, sub { $sub2->purge; };
+WebGUI::Test->assetsToPurge( $sub2 );
my $isa2 = isa_ok( $sub2, 'WebGUI::Asset::EMSSubmission', "userB/FormB valid submission succeeded" );
loginUserC;
@@ -267,6 +265,7 @@ cmp_deeply( from_json($ems->www_getAllSubmissions), {
$session->request->setup_body({submissionId => 3});
cmp_deeply( from_json($ems->www_getSubmissionById), {
title => 3,
+ id => 3,
text => ignore(),
}, 'test getSubmissionById');
@@ -313,7 +312,6 @@ cmp_deeply( from_json($ems->www_getAllSubmissions), {
dir => 'DESC',
}, 'test getAllSubmissions for Registrar' );
-# TODO fix num tests
SKIP: { skip 'create submission failed', 8 unless $isa1 && $isa2;
loginUserA;
@@ -353,48 +351,30 @@ my $cleanupSubmissions = WebGUI::Test::Activity->create( $session,
"WebGUI::Workflow::Activity::CleanupEMSSubmissions"
);
-push @cleanup, sub { $approveSubmissions->purge; $cleanupSubmissions->purge; };
-
is($approveSubmissions->run, 'complete', 'approval complete');
is($approveSubmissions->run, 'done', 'approval done');
$sub1 = $sub1->cloneFromDb;
-is( $sub1->get('submissionStatus'),'failed','submission failed to create');
-
-# TODO fill in the rest of the data required by EMSTicket
-
-print "1\n";
-$approveSubmissions->rerun;
-print "2\n";
-is($approveSubmissions->run, 'complete', 'approval complete');
-is($approveSubmissions->run, 'done', 'approval done');
-
-print "3\n";
-$sub1 = $sub1->cloneFromDb;
-print "4\n";
is( $sub1->get('submissionStatus'),'created','approval successfull');
-print "5\n";
my $ticket = WebGUI::Asset->newByDynamicClass($session, $sub1->get('ticketId'));
-print "6\n";
isa_ok( $ticket, 'WebGUI::Asset::Sku::EMSTicket', 'approval created a ticket');
-print "7\n";
-push @cleanup, sub { $ticket->purge; };
-print "8\n";
+WebGUI::Test->assetsToPurge( $ticket ) if $ticket ;
+my $newDate = time - ( 60 * 60 * 24 * ( $sub2->getParent->get('daysBeforeCleanup') + 1 ) ),
$sub2->update({
- lastModified => time - ( 60 * 60 * 72 ), # last modified 3 days ago
+ submissionStatus => 'denied',
+ # lastModified => $newDate, -- update overrides this...
});
-my $submissionId = $sub2->get('assetId');
+my $sub2Id = $sub2->getId;
+$session->db->write('update assetData set lastModified = ' . $newDate . ' where assetId = "' . $sub2Id . '"' );
$cleanupSubmissions->rerun;
is($cleanupSubmissions->run, 'complete', 'cleanup complete');
is($cleanupSubmissions->run, 'done', 'cleanup done');
-$sub2 = WebGUI::Asset->newByDynamicClass($session, $submissionId);
-is( $sub2, undef, 'ticket deleted');
-
-# TODO add a test to cleanup created entries
+$sub2 = WebGUI::Asset->newByDynamicClass($session, $sub2Id);
+is( $sub2, undef, 'submission deleted');
} # end of workflow skip
@@ -439,6 +419,7 @@ my $expected = {
'title' => '1',
'startDate' => '1',
'description' => '1',
+ 'submissionStatus' => '0',
'_fieldList' => [
'title',
'description',
@@ -470,14 +451,15 @@ cmp_deeply( $result, $expected , 'test process form' );
$expected = {
'errors' => [
{
- 'text' => 'you should turn on at least one entry field'
+ 'text' => ignore(),
}
],
'submissionDeadline' => undef,
'menuTitle' => undef,
'pastDeadlineMessage' => undef,
'formDescription' => {
- '_fieldList' => []
+ '_fieldList' => [],
+ 'submissionStatus' => 0,
},
'description' => undef,
'_isValid' => 0,
@@ -490,12 +472,13 @@ $expected = {
};
$session->request->setup_body( { } );
$result = WebGUI::Asset::EMSSubmissionForm->processForm($ems);
-dav::dump $result;
cmp_deeply( $result, $expected , 'test process form' );
} # end of skip HTML::Form
# these run code to see that it runs, but do not check for correctness
+warnings_are {
+
$ems->www_viewSubmissionQueue;
$ems->www_addSubmission;
$ems->www_addSubmissionForm;
@@ -513,6 +496,10 @@ $sub1->drawStatusField;
$sub1->www_editSubmission;
$sub1->www_editSubmissionSave;
$sub1->processForm;
+# test comments
+$sub1->getFormattedComments;
+
+} [], 'no warnings from calling a bunch of functions';
} # end of use packages skip
}; # end of eval
@@ -523,6 +510,7 @@ print $@ if $@;
#----------------------------------------------------------------------------
# Cleanup
END {
- map { eval { $_->() } } ( @cleanup );
+
+
}
#vim:ft=perl
diff --git a/t/lib/WebGUI/Test/Activity.pm b/t/lib/WebGUI/Test/Activity.pm
index 6c42743af..615055a3e 100644
--- a/t/lib/WebGUI/Test/Activity.pm
+++ b/t/lib/WebGUI/Test/Activity.pm
@@ -2,6 +2,8 @@ package WebGUI::Test::Activity;
use WebGUI::Workflow;
+my @cleanup; # TODO fix WebGUI::Text::assetsToPurge so that it works with workflows and activities
+
=head Name
package WebGUI::Test::Activity;
@@ -70,6 +72,8 @@ sub create {
my $tag = WebGUI::VersionTag->getWorking($session);
$tag->commit;
WebGUI::Test->tagsToRollback($tag);
+ # WebGUI::Test->assetsToPurge($instance,$workflow); -- does not work...
+ push @cleanup, $instance, $workflow,
return bless { instance => $instance,
session => $session,
@@ -82,14 +86,15 @@ sub run {
sub rerun {
my $self = shift;
-my $session = $self->{session};
- $self->{instance}->delete;
+ my $session = $self->{session};
$self->{instance} = WebGUI::Workflow::Instance->create($session,
{
workflowId => $self->{workflow}->getId,
skipSpectreNotification => 1,
}
);
+ # WebGUI::Test->assetsToPurge($self->{instance}); -- does not work
+ push @cleanup, $self->{instance};
my $tag = WebGUI::VersionTag->getWorking($session, 1);
if( $tag ) {
$tag->commit;
@@ -98,10 +103,10 @@ my $session = $self->{session};
}
-sub delete {
- my $self = shift;
- $self->{instance}->delete;
- $self->{workflow}->delete;
+END {
+
+ map { $_->delete; } ( @cleanup );
+
}
1;
diff --git a/www/extras/wobject/EMS/submission.js b/www/extras/wobject/EMS/submission.js
index baa002cbb..40423324b 100644
--- a/www/extras/wobject/EMS/submission.js
+++ b/www/extras/wobject/EMS/submission.js
@@ -39,7 +39,7 @@ WebGUI.EMS = function (configs) {
WebGUI.EMS.url = configs.url;
WebGUI.EMS.tabContent = configs.tabContent;
}
- WebGUI.EMS.Items = new Object();
+ WebGUI.EMS.items = new Object();
if(!this._configs.initRequestString) {
this._configs.initRequestString = ';startIndex=0';
@@ -55,6 +55,7 @@ WebGUI.EMS = function (configs) {
''
],
'Asset_EventManagementSystem' : [
+ 'close tab',
''
]
}
@@ -69,6 +70,18 @@ WebGUI.EMS = function (configs) {
// Protected Static Methods
///////////////////////////////////////////////////////////////
+ //***********************************************************************************
+ // This Method updates the window.location.hash when the user changes tabs
+ WebGUI.EMS.changeTab = function ( e ) {
+ alert('tab changed');
+ var index = WebGUI.EMS.tabs.getTabIndex( e.newValue );
+ if( index == 0 ) {
+ window.location.hash = '';
+ } else {
+ window.location.hash = WebGUI.EMS.Tabs[index].id;
+ }
+ };
+
//***********************************************************************************
// This method closes the active tab
//
@@ -80,20 +93,20 @@ WebGUI.EMS = function (configs) {
var index;
if( typeof(e) == "string" || typeof(e) == "number" ) {
index = e;
- myTab = WebGUI.EMS.Items[index].Tab;
+ myTab = WebGUI.EMS.items[index].tab;
} else {
if( typeof(e) != "undefined" ) {
YAHOO.util.Event.preventDefault(e);
}
if( typeof(myTab) == "undefined" ) {
- myTab = WebGUI.EMS.Tabs.get('activeTab');
+ myTab = WebGUI.EMS.tabs.get('activeTab');
}
- index = parseInt( myTab.get('label') );
+ index = WebGUI.EMS.tabs.getTabIndex(myTab);
}
- delete WebGUI.EMS.Items[index];
- WebGUI.EMS.Tabs.removeTab(myTab);
+ delete WebGUI.EMS.items[index];
+ WebGUI.EMS.tabs.removeTab(myTab);
if( WebGUI.EMS.lastTab ) {
- WebGUI.EMS.Tabs.set('activeTab',WebGUI.EMS.lastTab);
+ WebGUI.EMS.tabs.set('activeTab',WebGUI.EMS.lastTab);
}
};
@@ -155,25 +168,29 @@ WebGUI.EMS = function (configs) {
alert(message);
return;
// currently only one tab exists, so instead of checking we just delete it and recreate
- } else { // if( typeof(WebGUI.EMS.Items[response.title]) == "undefined"
- // || WebGUI.EMS.Items[response.title] == null ) {
+ // this condition is going to have to search for the id in the list
+ } else { // if( typeof(WebGUI.EMS.items[response.title]) == "undefined"
+ // || WebGUI.EMS.items[response.title] == null ) { // }
// if there is a tab .. close it,
// at least until I can get the JS/HTML re-written to handle multiple tabs
// there should only be one
- for( var item in WebGUI.EMS.Items ) { WebGUI.EMS.closeTab(item) }
+ for( var item in WebGUI.EMS.items ) { WebGUI.EMS.closeTab(item) }
var myContent = document.createElement("div");
myContent.innerHTML = response.text;
myTab = new YAHOO.widget.Tab({
label: response.title + '
',
+ WebGUI.EMS.i18n.get('Asset_EventManagementSystem','close tab') + '" />',
contentEl: myContent
});
- WebGUI.EMS.Tabs.addTab( myTab );
+ WebGUI.EMS.tabs.addTab( myTab );
+ var index = WebGUI.EMS.tabs.getTabIndex(myTab);
YAHOO.util.Event.on(myTab.getElementsByClassName('close')[0], 'click', WebGUI.EMS.closeTab , myTab);
- WebGUI.EMS.Items[response.title] = new Object();
- WebGUI.EMS.Items[response.title].Tab = myTab;
+ WebGUI.EMS.items[index] = new Object();
+ WebGUI.EMS.items[index].tab = myTab;
+ WebGUI.EMS.items[index].id = response.id;
+ WebGUI.EMS.items[index].title = response.title;
//} else {
- //myTab = WebGUI.EMS.Items[response.title].Tab;
+ //myTab = WebGUI.EMS.items[response.title].tab;
//myTab.set('content', response.text);
}
// make sure the script on the ticket has run
@@ -182,8 +199,9 @@ WebGUI.EMS = function (configs) {
// }
// delete WebGUI.ticketJScriptRun;
WebGUI.EMS.loadingIndicator.hide();
- WebGUI.EMS.lastTab = WebGUI.EMS.Tabs.get('activeTab');
- WebGUI.EMS.Tabs.set('activeTab',myTab);
+ WebGUI.EMS.lastTab = WebGUI.EMS.tabs.get('activeTab');
+ //initHoverHelp(myTab);
+ WebGUI.EMS.tabs.set('activeTab',myTab);
},
failure: function(o) {
WebGUI.EMS.loadingIndicator.hide();
@@ -272,21 +290,14 @@ WebGUI.EMS = function (configs) {
// if the user pressed a modifier key we want to default
if( eventModifiers( evt ) ) { return }
var target = evt.target;
-
- //let the default action happen if the user clicks the last reply column
- var links = YAHOO.util.Dom.getElementsByClassName ("profile_link","a",target);
-
- if (links.length == 0) {
- YAHOO.util.Event.stopEvent(evt.event);
- }
-
+ YAHOO.util.Event.stopEvent(evt.event);
var elCell = this.getTdEl(target);
if(elCell) {
var oRecord = this.getRecord(elCell);
var submissionId = oRecord.getData('submissionId');
- if( typeof( WebGUI.EMS.Items[submissionId] ) != "undefined" ) {
- WebGUI.EMS.Tabs.set('activeTab',WebGUI.EMS.Items[submissionId].Tab);
+ if( typeof( WebGUI.EMS.items[submissionId] ) != "undefined" ) {
+ WebGUI.EMS.tabs.set('activeTab',WebGUI.EMS.items[submissionId].tab);
WebGUI.EMS.loadingIndicator.hide();
} else {
WebGUI.EMS.loadItem( submissionId );