Searchable prereq selection when adding/editing events. Still have some bugs to fix with it.

This commit is contained in:
Roy Johnson 2006-04-21 00:49:35 +00:00
parent 8e5d2f2e4d
commit 5bd20753c6
2 changed files with 202 additions and 115 deletions

View file

@ -11,6 +11,7 @@
</tmpl_if>
<ul>
<tmpl_if canManageEvents>
<li><a href='<tmpl_var addEvent.url>'><tmpl_var addEvent.label></a></li>
<li><a href='<tmpl_var manageEvents.url>'><tmpl_var manageEvents.label></a></li>
</tmpl_if>
<li><a href='<tmpl_var managePurchases.url>'><tmpl_var managePurchases.label></a></li>
@ -113,8 +114,12 @@
</tmpl_unless>
<br /><br />
<tmpl_if managePrereqs><p><tmpl_var managePrereqsMessage></p><tmpl_var prereqForm.header></tmpl_if>
<table width="100%" border="0" cellpadding="8" cellspacing="0" style="border-top:solid gray 2px;border-bottom:solid gray 2px;">
<tr><th><tmpl_var name.label></th>
<tr>
<tmpl_if managePrereqs><th>&nbsp;</th></tmpl_if>
<th><tmpl_var name.label></th>
<th><tmpl_var starts.label></th>
<th><tmpl_var ends.label></th>
<th><tmpl_var seats.label></th>
@ -123,7 +128,9 @@
<th><tmpl_var addToCart.label></th></tr>
<tmpl_loop events_loop>
<tr<tmpl_unless __ODD__> class="oddRow"<tmpl_else> class="evenRow"</tmpl_unless>>
<td><tmpl_if canManageEvents><tmpl_var manageToolbar>&nbsp;</tmpl_if><tmpl_var title>
<tmpl_if managePrereqs><td><tmpl_var prereqForm.checkbox></td></tmpl_if>
<td nowrap><tmpl_if canManageEvents><tmpl_var manageToolbar>&nbsp;</tmpl_if><tmpl_var title>
</td><td><tmpl_var startDate.human>
</td><td><tmpl_var endDate.human>
</td><td><tmpl_var seatsRemaining>
@ -132,9 +139,13 @@
</td><td><tmpl_unless eventIsFull><a href="<tmpl_var purchase.url>"><tmpl_var purchase.label></a><tmpl_else><tmpl_var purchase.label><br /></tmpl_unless>
</td></tr>
</tmpl_loop>
<tmpl_if managePrereqs><tr><td><tmpl_var prereqForm.operator></td></tr></tmpl_if>
</table>
<tmpl_if managePrereqs><tmpl_var prereqForm.submit><tmpl_var prereqForm.footer></tmpl_if>
<tmpl_var paginateBar>
~~~
<style type="text/css">
tr.oddRow td {

View file

@ -1696,39 +1696,40 @@ sub www_editEvent {
);
}
my $prerequisiteList = $self->getPrerequisiteEventList($pid);
if ( scalar(keys %{$prerequisiteList}) > 0) {
$f->checkList(
-name => "eventList",
-options => $prerequisiteList,
-vertical => 1,
-label => $i18n->get("add/edit event required events"),
-hoverHelp => $i18n->get("add/edit event required events description"),
-sortByValue => 1
);
$f->radioList(
-name => "requirement",
-options => { 'and' => $i18n->get("and"),
'or' => $i18n->get("or"),
},
-value => 'and',
-label => $i18n->get("add/edit event operator"),
-hoverHelp => $i18n->get("add/edit event operator description"),
);
# my $prerequisiteList = $self->getPrerequisiteEventList($pid);
# if ( scalar(keys %{$prerequisiteList}) > 0) {
# $f->checkList(
# -name => "eventList",
# -options => $prerequisiteList,
# -vertical => 1,
# -label => $i18n->get("add/edit event required events"),
# -hoverHelp => $i18n->get("add/edit event required events description"),
# -sortByValue => 1
# );
#
# $f->radioList(
# -name => "requirement",
# -options => { 'and' => $i18n->get("and"),
# 'or' => $i18n->get("or"),
# },
# -value => 'and',
# -label => $i18n->get("add/edit event operator"),
# -hoverHelp => $i18n->get("add/edit event operator description"),
# );
$f->selectBox(
-name => "whatNext",
-label => $i18n->get("add/edit event what next"),
-hoverHelp => $i18n->get("add/edit event what next"),
-options => {
"addAnotherPrereq" => $i18n->get("add/edit event add another prerequisite"),
# "addAnotherPrereq" => $i18n->get("add/edit event add another prerequisite"),
"managePrereqs" => "Manage Prerequisites for this event",
"return" => $i18n->get("add/edit event return to manage events"),
},
-defaultValue => "return"
);
}
# }
$f->submit;
@ -1813,97 +1814,98 @@ sub www_editEventSave {
}
# Save the prerequisites
my $prerequisiteList = $self->session->form->process("eventList", "checkList");
my @list = split(/\n/, $prerequisiteList);
unless ($prerequisiteList eq "") {
my $prerequisiteId = $self->setCollateral("EventManagementSystem_prerequisites", "prerequisiteId",
{
prerequisiteId => "new",
productId => $pid,
operator => $self->session->form->get("requirement")
},0,0
);
foreach my $requiredEvent (@list) {
$self->setCollateral("EventManagementSystem_prerequisiteEvents", "prerequisiteEventId",{
prerequisiteEventId => "new",
prerequisiteId => $prerequisiteId,
requiredProductId => $requiredEvent
},0,0);
}
}
#my $prerequisiteList = $self->session->form->process("eventList", "checkList");
#my @list = split(/\n/, $prerequisiteList);
#unless ($prerequisiteList eq "") {
# my $prerequisiteId = $self->setCollateral("EventManagementSystem_prerequisites", "prerequisiteId",
# {
# prerequisiteId => "new",
# productId => $pid,
# operator => $self->session->form->get("requirement")
# },0,0
# );
#
# foreach my $requiredEvent (@list) {
# $self->setCollateral("EventManagementSystem_prerequisiteEvents", "prerequisiteEventId",{
# prerequisiteEventId => "new",
# prerequisiteId => $prerequisiteId,
# requiredProductId => $requiredEvent
# },0,0);
# }
#}
return $self->www_editEvent(undef,$pid) if ($self->session->form->get("whatNext") eq "addAnotherPrereq");
# return $self->www_editEvent(undef,$pid) if ($self->session->form->get("whatNext") eq "addAnotherPrereq");
return $self->www_search("managePrereqs",$pid) if ($self->session->form->get("whatNext") eq "managePrereqs");
return $self->www_search;
}
#-------------------------------------------------------------------
=head2 www_manageEvents ( )
Method to display the event management console.
=cut
sub www_manageEvents {
my $self = shift;
return $self->session->privilege->insufficient unless ($self->canAddEvents);
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
my $output;
my $sth = $self->session->db->read("select p.productId, p.title, p.price, pe.approved from products as p,
EventManagementSystem_products as pe where p.productId = pe.productId
and pe.assetId=? order by sequenceNumber", [$self->get("assetId")]);
if ($sth->rows) {
$output = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl}).WebGUI::Form::hidden($self->session,{name=>"func",value=>"approveEvents"});
$output .= sprintf "<table width='100%'><tr><th>%s</th><th>%s</th><th>%s</th></tr>",
$i18n->get('event'),
$i18n->get('add/edit event price'),
$self->canApproveEvents
? $i18n->get('approval')
: $i18n->get('status');
while (my %row = $sth->hash) {
$output .= "<tr><td>";
$output .= $self->session->icon->delete('func=deleteEvent;pid='.$row{productId}, $self->getUrl,
$i18n->get('confirm delete event')).
$self->session->icon->edit('func=editEvent;pid='.$row{productId}, $self->getUrl).
$self->session->icon->moveUp('func=moveEventUp;pid='.$row{productId}, $self->getUrl).
$self->session->icon->moveDown('func=moveEventDown;pid='.$row{productId}, $self->getUrl).
" ".$row{title}."</td><td>".$row{price}."</td><td>";
unless ($self->canApproveEvents) {
if ($row{approved} == 0) {
$output .= $i18n->get('pending');
} else {
$output .= $i18n->get('approved');
}
} else {
$output .= WebGUI::Form::checkbox($self->session,{
-name => 'eventId',
-checked => $row{approved},
-value => $row{productId}
}).WebGUI::Form::hidden($self->session,{
-name => 'eventIdToCheck',
-value => $row{productId}
});
}
$output .= "</td></tr>";
}
$output .= '<tr><td>&nbsp;</td><td>&nbsp;</td><td>'.WebGUI::Form::submit($self->session,{-value=>$i18n->get('save approvals')}).'</td></tr>' if $self->canApproveEvents;
$output .= "</table>".WebGUI::Form::formFooter($self->session);
} else {
$output .= $i18n->get('you do not have any events to display');
}
$self->getAdminConsole->setHelp('event management system manage events','Asset_EventManagementSystem');
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=editEvent;pid=new'), $i18n->get('add event'));
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'), $i18n->get('refresh events list'));
return $self->getAdminConsole->render($output, $i18n->get("manage events"));
}
##-------------------------------------------------------------------
#
#=head2 www_manageEvents ( )
#
#Method to display the event management console.
#
#=cut
#
#sub www_manageEvents {
# my $self = shift;
#
# return $self->session->privilege->insufficient unless ($self->canAddEvents);
# my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
#
# my $output;
# my $sth = $self->session->db->read("select p.productId, p.title, p.price, pe.approved from products as p,
# EventManagementSystem_products as pe where p.productId = pe.productId
# and pe.assetId=? order by sequenceNumber", [$self->get("assetId")]);
#
# if ($sth->rows) {
# $output = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl}).WebGUI::Form::hidden($self->session,{name=>"func",value=>"approveEvents"});
# $output .= sprintf "<table width='100%'><tr><th>%s</th><th>%s</th><th>%s</th></tr>",
# $i18n->get('event'),
# $i18n->get('add/edit event price'),
# $self->canApproveEvents
# ? $i18n->get('approval')
# : $i18n->get('status');
# while (my %row = $sth->hash) {
#
# $output .= "<tr><td>";
# $output .= $self->session->icon->delete('func=deleteEvent;pid='.$row{productId}, $self->getUrl,
# $i18n->get('confirm delete event')).
# $self->session->icon->edit('func=editEvent;pid='.$row{productId}, $self->getUrl).
# $self->session->icon->moveUp('func=moveEventUp;pid='.$row{productId}, $self->getUrl).
# $self->session->icon->moveDown('func=moveEventDown;pid='.$row{productId}, $self->getUrl).
# " ".$row{title}."</td><td>".$row{price}."</td><td>";
#
# unless ($self->canApproveEvents) {
# if ($row{approved} == 0) {
# $output .= $i18n->get('pending');
# } else {
# $output .= $i18n->get('approved');
# }
# } else {
# $output .= WebGUI::Form::checkbox($self->session,{
# -name => 'eventId',
# -checked => $row{approved},
# -value => $row{productId}
# }).WebGUI::Form::hidden($self->session,{
# -name => 'eventIdToCheck',
# -value => $row{productId}
# });
# }
# $output .= "</td></tr>";
# }
# $output .= '<tr><td>&nbsp;</td><td>&nbsp;</td><td>'.WebGUI::Form::submit($self->session,{-value=>$i18n->get('save approvals')}).'</td></tr>' if $self->canApproveEvents;
# $output .= "</table>".WebGUI::Form::formFooter($self->session);
# } else {
# $output .= $i18n->get('you do not have any events to display');
# }
#
# $self->getAdminConsole->setHelp('event management system manage events','Asset_EventManagementSystem');
# $self->getAdminConsole->addSubmenuItem($self->getUrl('func=editEvent;pid=new'), $i18n->get('add event'));
# $self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
# $self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'), $i18n->get('refresh events list'));
# return $self->getAdminConsole->render($output, $i18n->get("manage events"));
#}
#-------------------------------------------------------------------
@ -2314,6 +2316,36 @@ sub www_moveEventUp {
return $self->www_search;
}
#-------------------------------------------------------------------
sub www_savePrerequisites {
my $self = shift;
my $eventToAssignPrereqTo = $self->session->form->get("eventToAssignPrereqTo");
return $self->session->privilege->insufficient unless ($self->cannAddEvents);
my $prerequisiteList = $self->session->form->process("eventList", "checkList");
my @list = split(/\n/, $prerequisiteList);
unless ($prerequisiteList eq "") {
my $prerequisiteId = $self->setCollateral("EventManagementSystem_prerequisites", "prerequisiteId",
{
prerequisiteId => "new",
productId => $eventToAssignPrereqTo,
operator => $self->session->form->get("requirement")
},0,0
);
foreach my $requiredEvent (@list) {
$self->setCollateral("EventManagementSystem_prerequisiteEvents", "prerequisiteEventId",{
prerequisiteEventId => "new",
prerequisiteId => $prerequisiteId,
requiredProductId => $requiredEvent
},0,0);
}
}
return $self->www_editEvent($eventToAssignPrereqTo);
}
#-------------------------------------------------------------------
sub www_saveRegistration {
my $self = shift;
@ -2424,6 +2456,10 @@ sub prepareView {
#-------------------------------------------------------------------
sub www_search {
my $self = shift;
my $managePrereqs = shift || $self->session->form->get("managePrereqs");
my $eventToAssignPrereqTo = shift || $self->session->form->get("eventToAssignPrereqTo");
my $prerequisiteHash = $self->getPrerequisiteEventList($eventToAssignPrereqTo) if ($eventToAssignPrereqTo);
my @prerequisiteList;
my %var;
my $keywords = $self->session->form->get("searchKeywords");
my @keys;
@ -2431,6 +2467,14 @@ sub www_search {
my $selects;
my @joined;
#Get the eventIds of valid prereqs if we're in prereq mode
#Put the productIds of valid prereqs into a list so we can return only valid prereq choices in our search
if (scalar(keys %{$prerequisiteHash})) {
foreach (keys %{$prerequisiteHash}) {
push (@prerequisiteList, $_);
}
}
# If we're at the view method there is no reason we should have anything in our scratch cart
# so let's empty it to prevent strange and awful things from happening
$self->emptyScratchCart;
@ -2556,11 +2600,15 @@ sub www_search {
WebGUI::Form::hidden($self->session,{name=>"subSearch", value => $self->session->form->get("subSearch")}).
WebGUI::Form::hidden($self->session,{name => "cfilter_s0", value => "requirement"}).
WebGUI::Form::hidden($self->session,{name => "cfilter_c0", value => "eq"}).
WebGUI::Form::hidden($self->session,{name => "cfilter_t0", value => $self->session->form->get("cfilter_t0")});
WebGUI::Form::hidden($self->session,{name => "cfilter_t0", value => $self->session->form->get("cfilter_t0")}).
WebGUI::Form::hidden($self->session,{name => "managePrereqs", value => $managePrereqs}).
WebGUI::Form::hidden($self->session,{name => "eventToAssignPrereqTo", value => $eventToAssignPrereqTo});
$var{'advSearch.formHeader'} = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl("func=search;advSearch=1")}).
WebGUI::Form::hidden($self->session,{name => "cfilter_s0", value => "requirement"}).
WebGUI::Form::hidden($self->session,{name => "cfilter_c0", value => "eq"}).
WebGUI::Form::hidden($self->session,{name => "cfilter_t0", value => $self->session->form->get("cfilter_t0")});
WebGUI::Form::hidden($self->session,{name => "cfilter_t0", value => $self->session->form->get("cfilter_t0")}).
WebGUI::Form::hidden($self->session,{name => "managePrereqs", value => $managePrereqs}).
WebGUI::Form::hidden($self->session,{name => "eventToAssignPrereqTo", value => $eventToAssignPrereqTo});
$var{isAdvSearch} = $self->session->form->get('advSearch');
$var{'search.formFooter'} = WebGUI::Form::formFooter($self->session);
$var{'search.formSubmit'} = WebGUI::Form::submit($self->session, {value=>$i18n->get('filter')});
@ -2596,6 +2644,9 @@ sub www_search {
foreach (keys %reqHash) {
$shouldPush = 0 unless isIn(@{$requiredList},$_);
}
if ($managePrereqs) { #prereq mode
$shouldPush = 0 unless (isIn(@prerequisiteList, $data->{productId})); #include only valid prereqs in results
}
push(@results,$data) if $shouldPush;
}
$sth->finish;
@ -2631,20 +2682,45 @@ sub www_search {
$eventFields{'purchase.url'} = $self->getUrl('func=addToCart;pid='.$event->{'productId'});
$eventFields{'purchase.label'} = $i18n->get('add to cart');
}
# Set template vars for managing prerequisites if we're in manage prereqs mode
if ($managePrereqs) {
$eventFields{'prereqForm.checkbox'} = WebGUI::Form::checkbox($self->session,{
-name => 'eventId',
#-checked => $row{approved},
-value => $event->{productId}
});
}
push (@events, {'event' => $self->processTemplate(\%eventFields, $event->{'templateId'}), %eventFields });
}
$var{'checkout.url'} = $self->getUrl('op=viewCart');
$var{'checkout.label'} = $i18n->get('checkout');
$var{'events_loop'} = \@events;
$var{'paginateBar'} = $p->getBarTraditional;
$var{'manageEvents.url'} = $self->getUrl('func=manageEvents');
$var{'manageEvents.url'} = $self->getUrl('func=search');
$var{'manageEvents.label'} = $i18n->get('manage events');
$var{'managePurchases.url'} = $self->getUrl('func=managePurchases');
$var{'managePurchases.label'} = $i18n->get('manage purchases');
$var{'noSearchDialog'} = ($self->session->form->get('hide') eq "1") ? 1 : 0;
$var{'addEvent.url'} = $self->getUrl('func=editEvent;pid=new');
$var{'addEvent.label'} = $i18n->get('add event');
$var{'managePrereqs'} = ($managePrereqs) ? 1 : 0;
$var{'managePrereqsMessage'} = "Use the form below to add prerequisite assignments to ".$self->getEventName($eventToAssignPrereqTo).".";
$var{'prereqForm.header'} = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl}).
WebGUI::Form::hidden($self->session,{name=>"eventToAssignPrereqTo", value=>$eventToAssignPrereqTo}).
WebGUI::Form::hidden($self->session,{name=>"func", value=>"savePrerequsites"});
$var{'prereqForm.submit'} = WebGUI::Form::submit($self->session);
$var{'prereqForm.footer'} = WebGUI::Form::formFooter($self->session);
$var{'prereqForm.operator'} = WebGUI::Form::radioList(
-name => "requirement",
-options => { 'and' => $i18n->get("and"),
'or' => $i18n->get("or"),
},
-value => 'and',
-label => $i18n->get("add/edit event operator"),
-hoverHelp => $i18n->get("add/edit event operator description")
);
if ($self->session->user->isInGroup($self->get("groupToManageEvents"))) {
$var{'canManageEvents'} = 1;
}