diff --git a/lib/WebGUI/Asset/EMSSubmission.pm b/lib/WebGUI/Asset/EMSSubmission.pm
index 5f26b3a3d..c201a902f 100644
--- a/lib/WebGUI/Asset/EMSSubmission.pm
+++ b/lib/WebGUI/Asset/EMSSubmission.pm
@@ -228,11 +228,19 @@ sub drawLocationField {
my ($self, $params) = @_;
my $ems = $self->ems;
my $options = { map { $_ => $_ } ( @{ $ems->getSubmissionLocations || [ $ems->getLocations ] } ) } ;
- return WebGUI::Form::combo($self->session, {
- name => 'location',
- value => $self->get('location'),
- options => $options,
- });
+ if( $ems->isRegistrationStaff ) {
+ return WebGUI::Form::combo($self->session, {
+ name => 'location',
+ value => $self->get('location'),
+ options => $options,
+ });
+ } else {
+ return WebGUI::Form::selectBox($self->session, {
+ name => 'location',
+ value => $self->get('location'),
+ options => $options,
+ });
+ }
}
#-------------------------------------------------------------------
@@ -492,13 +500,13 @@ sub getEditTabs {
}
#-------------------------------------------------------------------
-=head2 getUrl
+=head2 getQueueUrl
returns the URL for the submission queue page with the submisison id in the hash part
=cut
-sub getUrl {
+sub getQueueUrl {
my $self = shift;
return $self->ems->getUrl('func=viewSubmissionQueue#' . $self->get('submissionId') );
}
diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
index ee2e0c83a..c6f7662cf 100644
--- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
+++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
@@ -258,7 +258,7 @@ sub definition {
nextSubmissionId => {
tab => "properties",
fieldType => "integer",
- defaultValue => 0,
+ defaultValue => 1,
label => $i18n->get("next submission id label"),
hoverHelp => $i18n->get("next submission id label help")
},
@@ -1275,7 +1275,7 @@ sub www_getAllSubmissions {
my %fields = (
submissionId => $asset->get("submissionId"),
- url => $asset->getUrl,
+ url => $asset->getQueueUrl,
title => $asset->get( "title" ),
createdBy => WebGUI::User->new($session,$asset->get( "createdBy" ))->username,
creationDate => $datetime->epochToSet($asset->get( "creationDate" )),
@@ -1329,6 +1329,35 @@ sub www_getBadgesAsJson {
#-------------------------------------------------------------------
+=head2 www_getSubmissionById
+
+returns a JSON dataset with info about the requested submission
+
+=cut
+
+
+sub www_getSubmissionById {
+ my $self = shift;
+ my $submissionId = $self->session->form->get('submissionId');
+ my $result;
+ my $res = $self->getLineage(['descendants'],{ limit => 1, returnObjects=>1,
+ includeOnlyClasses => ['WebGUI::Asset::EMSSubmission'],
+ joinClass => "WebGUI::Asset::EMSSubmission",
+ whereClause => q{submissionId='} . $submissionId . q/'/,
+ } );
+ if( scalar(@$res) == 0 ) {
+ $result->{hasError} = 1;
+ $result->{errors} = [ 'failed to load submission' ];
+ } else {
+ $result->{itemText} = $res->[0]->www_editSubmission;
+ $result->{submissionId} = $submissionId;
+ }
+ $self->session->http->setMimeType('application/json');
+ return JSON->new->encode($result);
+}
+
+#-------------------------------------------------------------------
+
=head2 www_getRegistrantAsJson ( )
Retrieves the properties of a specific badge and the items attached to it. Expects badgeId to be one of the form params.
@@ -2519,7 +2548,8 @@ sub www_viewSubmissionQueue {
$self->processTemplate({
backUrl => $self->getUrl,
isRegistrationStaff => $isRegistrationStaff,
- canEdit => $canEdit,
+ canEdit => $canEdit,
+ mainUrl => $self->getUrl,
canSubmit => $canSubmit,
hasSubmissionForms => $self->hasSubmissionForms,
getSubmissionQueueDataUrl => $self->getUrl('func=getAllSubmissions'),
@@ -2528,8 +2558,8 @@ sub www_viewSubmissionQueue {
addSubmissionUrl => $self->getUrl('func=addSubmission'),
},$self->get('eventSubmissionQueueTemplateId'));
- return $self->processStyle(
- $self->processTemplate({
+ return $self->processStyle(
+ $self->processTemplate({
queueTabTitle => $isRegistrationStaff ? $i18n->get('submission queue') : $i18n->get('my submissions'),
queueTabData => $QueueTabData,
backUrl => $self->getUrl,
diff --git a/t/Asset/EMSSubmissionForm.t b/t/Asset/EMSSubmissionForm.t
index b8c79b4e7..bce9e1bc3 100644
--- a/t/Asset/EMSSubmissionForm.t
+++ b/t/Asset/EMSSubmissionForm.t
@@ -38,7 +38,7 @@ my @cleanup = ();
#----------------------------------------------------------------------------
# Tests
-plan tests => 50; # Increment this number for each test you create
+plan tests => 60; # 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');
@@ -248,10 +248,10 @@ cmp_deeply( from_json($ems->www_getAllSubmissions), {
records => [
{
lastReplyDate => '',
- submissionId => '4',
+ submissionId => '5',
creationDate => ignore(),
createdBy => 'userA',
- url => '/test-ems?func=viewSubmissionQueue#4',
+ url => '/test-ems?func=viewSubmissionQueue#5',
submissionStatus => $i18n->get('pending'),
title => 'my favorite thing to talk about',
lastReplyBy => ''
@@ -262,6 +262,12 @@ cmp_deeply( from_json($ems->www_getAllSubmissions), {
dir => 'DESC',
}, 'test getAllSubmissions for UserA' );
+$session->request->setup_body({submissionId => 5});
+cmp_deeply( from_json($ems->www_getSubmissionById), {
+ submissionId => 5,
+ itemText => ignore(),
+}, 'test getSubmissionById');
+
loginUserC;
cmp_deeply( from_json($ems->www_getAllSubmissions), {
sort => undef,
@@ -281,20 +287,20 @@ cmp_deeply( from_json($ems->www_getAllSubmissions), {
records => [
{
lastReplyDate => '',
- submissionId => '5',
+ submissionId => '6',
creationDate => ignore(),
createdBy => 'userB',
- url => '/test-ems?func=viewSubmissionQueue#5',
+ url => '/test-ems?func=viewSubmissionQueue#6',
submissionStatus => $i18n->get('pending'),
title => 'why i like to be important',
lastReplyBy => ''
},
{
lastReplyDate => '',
- submissionId => '4',
+ submissionId => '5',
creationDate => ignore(),
createdBy => 'userA',
- url => '/test-ems?func=viewSubmissionQueue#4',
+ url => '/test-ems?func=viewSubmissionQueue#5',
submissionStatus => $i18n->get('pending'),
title => 'my favorite thing to talk about',
lastReplyBy => ''
diff --git a/www/extras/wobject/EMS/submission.js b/www/extras/wobject/EMS/submission.js
index 24cf13cec..5ac5a0e9e 100644
--- a/www/extras/wobject/EMS/submission.js
+++ b/www/extras/wobject/EMS/submission.js
@@ -37,10 +37,12 @@ WebGUI.EMS = function (configs) {
if(configs) {
this._configs = configs;
}
+ this.url = this._configs.url;
if(!this._configs.initRequestString) {
this._configs.initRequestString = ';startIndex=0';
}
+ WebGUI.EMS.Items = new Object();
///////////////////////////////////////////////////////////////
// Internationalization
@@ -77,21 +79,22 @@ WebGUI.EMS = function (configs) {
var index;
if( typeof(e) == "string" || typeof(e) == "number" ) {
index = e;
- myTab = WebGUI.EMS.Tickets[index].Tab;
+ myTab = WebGUI.EMS.Items[index].Tab;
} else {
if( typeof(e) != "undefined" ) {
YAHOO.util.Event.preventDefault(e);
}
if( typeof(myTab) == "undefined" ) {
- myTab = tabView.get('activeTab');
+ myTab = WebGUI.EMS.Tabs.get('activeTab');
}
index = parseInt( myTab.get('label') );
}
- delete WebGUI.EMS.Tickets[index];
+ delete WebGUI.EMS.Items[index];
WebGUI.EMS.Tabs.removeTab(myTab);
if( WebGUI.EMS.lastTab ) {
WebGUI.EMS.Tabs.set('activeTab',WebGUI.EMS.lastTab);
}
+ window.location.hash = '';
};
//***********************************************************************************
@@ -171,47 +174,26 @@ WebGUI.EMS = function (configs) {
}
//***********************************************************************************
- // This method is subscribed to by the DataTable and thus becomes a member of the DataTable
- // class even though it is a member of the EMS Class. For this reason, a EMS instance
- // is actually passed to the method as it's second parameter.
+ // This method does the actual work of loading an item into a tab
//
- WebGUI.EMS.loadTicket = function ( evt, obj ) {
- // if the user pressed a modifier key we want to default
- if( eventModifiers( evt ) ) { return }
- var target = evt.target;
- if( typeof(WebGUI.EMS.Tickets) == "undefined" ) {
- WebGUI.EMS.Tickets = new Object();
- }
-
- //let the default action happen if the user clicks the last reply column
- var links = YAHOO.util.Dom.getElementsByClassName ("profile_link","a",target);
-
+ WebGUI.EMS.loadItem = function ( submissionId, pathname ) {
// the 'loading' 'indicator'
- if( typeof(WebGUI.EMS.ticketLoadingIndicator) == "undefined" ) {
- WebGUI.EMS.ticketLoadingIndicator = new YAHOO.widget.Overlay( "ticketLoadingIndicator", {
+ if( typeof(WebGUI.EMS.loadingIndicator) == "undefined" ) {
+ WebGUI.EMS.loadingIndicator = new YAHOO.widget.Overlay( "loadingIndicator", {
fixedcenter : true,
visible : false
} );
- WebGUI.EMS.ticketLoadingIndicator.setBody( "Loading Ticket ..." +
- "
"
+ WebGUI.EMS.loadingIndicator.setBody( "Loading ..." +
+ "
"
);
- WebGUI.EMS.ticketLoadingIndicator.render(document.body);
- }
- WebGUI.EMS.ticketLoadingIndicator.show();
-
- if (links.length == 0) {
- YAHOO.util.Event.stopEvent(evt.event);
+ WebGUI.EMS.loadingIndicator.render(document.body);
}
+ WebGUI.EMS.loadingIndicator.show();
- var elCell = this.getTdEl(target);
- if(elCell) {
- var oRecord = this.getRecord(elCell);
-
- if( typeof( WebGUI.EMS.Tickets[oRecord.ticketId] ) != "undefined" ) {
- WebGUI.EMS.Tabs.set('activeTab',WebGUI.EMS.Tickets[oRecord.ticketId].Tab);
- WebGUI.EMS.ticketLoadingIndicator.hide();
- } else {
- var url = oRecord.getData('url') + "?func=view;caller=ticketMgr;view=" + obj._configs.view;
+ if( typeof(pathname) == "undefined" ) {
+ pathname = WebGUI.EMS.url ;
+ }
+ var url = pathname + "?func=getSubmissionById;submissionId=" + submissionId;
// Create callback object for the request
var oCallback = {
@@ -225,42 +207,71 @@ WebGUI.EMS = function (configs) {
}
alert(message);
return;
- } else if( typeof(WebGUI.EMS.Tickets[response.ticketId]) == "undefined"
- || WebGUI.EMS.Tickets[response.ticketId] == null ) {
+ } else if( typeof(WebGUI.EMS.Items[response.submissionId]) == "undefined"
+ || WebGUI.EMS.Items[response.submissionId] == 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 ticketId in WebGUI.EMS.Tickets ) { WebGUI.EMS.closeTab(ticketId) }
var myContent = document.createElement("div");
- myContent.innerHTML = response.ticketText;
+ myContent.innerHTML = response.itemText;
myTab = new YAHOO.widget.Tab({
- label: response.ticketId + '
',
contentEl: myContent
});
WebGUI.EMS.Tabs.addTab( myTab );
YAHOO.util.Event.on(myTab.getElementsByClassName('close')[0], 'click', WebGUI.EMS.closeTab , myTab);
- WebGUI.EMS.Tickets[response.ticketId] = new Object();
- WebGUI.EMS.Tickets[response.ticketId].Tab = myTab;
+ WebGUI.EMS.Items[response.submissionId] = new Object();
+ WebGUI.EMS.Items[response.submissionId].Tab = myTab;
} else {
- myTab = WebGUI.EMS.Tickets[response.ticketId].Tab;
- myTab.set('content', response.ticketText);
+ myTab = WebGUI.EMS.Tickets[response.submissionId].Tab;
+ myTab.set('content', response.itemText);
}
// make sure the script on the ticket has run
- if( typeof( WebGUI.ticketJScriptRun ) == "undefined" ) {
- eval( document.getElementById("ticketJScript").innerHTML );
- }
- delete WebGUI.ticketJScriptRun;
- WebGUI.EMS.ticketLoadingIndicator.hide();
- WebGUI.EMS.lastTab = tabView.get('activeTab');
+ // if( typeof( WebGUI.ticketJScriptRun ) == "undefined" ) {
+ // eval( document.getElementById("ticketJScript").innerHTML );
+ // }
+ // delete WebGUI.ticketJScriptRun;
+ WebGUI.EMS.loadingIndicator.hide();
+ WebGUI.EMS.lastTab = WebGUI.EMS.Tabs.get('activeTab');
WebGUI.EMS.Tabs.set('activeTab',myTab);
},
failure: function(o) {
- WebGUI.EMS.ticketLoadingIndicator.hide();
+ WebGUI.EMS.loadingIndicator.hide();
+ alert("AJAX call failed");
}
};
var request = YAHOO.util.Connect.asyncRequest('GET', url, oCallback);
- }
+ };
+
+ //***********************************************************************************
+ // This method is subscribed to by the DataTable and thus becomes a member of the DataTable
+ // class even though it is a member of the EMS Class. For this reason, a EMS instance
+ // is actually passed to the method as it's second parameter.
+ //
+ WebGUI.EMS.loadItemFromTable = function ( evt, obj ) {
+ // 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);
+ }
+
+ var elCell = this.getTdEl(target);
+ if(elCell) {
+ var oRecord = this.getRecord(elCell);
+
+ if( typeof( WebGUI.EMS.Items[oRecord.submissionId] ) != "undefined" ) {
+ WebGUI.EMS.Tabs.set('activeTab',WebGUI.EMS.Items[oRecord.submissionId].Tab);
+ WebGUI.EMS.loadingIndicator.hide();
+ } else {
+ WebGUI.EMS.loadItem( oRecord.submissionId );
+ }
} else {
alert("Could not get table cell for " + target);
}
@@ -327,7 +338,7 @@ WebGUI.EMS = function (configs) {
);
this.EMSQ.subscribe("rowMouseoverEvent", this.EMSQ.onEventHighlightRow);
this.EMSQ.subscribe("rowMouseoutEvent", this.EMSQ.onEventUnhighlightRow);
- this.EMSQ.subscribe("cellClickEvent",WebGUI.EMS.loadTicket,this);
+ this.EMSQ.subscribe("cellClickEvent",WebGUI.EMS.loadItemFromTable,this);
// Override function for custom server-side sorting
this.EMSQ.sortColumn = WebGUI.EMS.sortColumn;
this.EMSQ.handleDataReturnPayload = function (oReq, oRes, oPayload ) {