- fix: Old registrants appear in new EMS asset

http://www.plainblack.com/bugs/tracker/old-registrants-appear-in-new-ems-asset
This commit is contained in:
JT Smith 2007-05-22 01:57:53 +00:00
parent 0e0e4acc81
commit 52c722dcfd
3 changed files with 173 additions and 81 deletions

View file

@ -1,4 +1,7 @@
7.3.18
- fix: Old registrants appear in new EMS asset
http://www.plainblack.com/bugs/tracker/old-registrants-appear-in-new-ems-asset
- fix: a bunch of EMS related bugs
- fix: If no sysnopsis exists, the asset inherits the parents' (perlDreamer Consulting, LLC)
http://www.plainblack.com/bugs/tracker/if-no-sysnopsis-exists-the-asset-inherits-the-parents#VVesdkBSTm3neKRaKCJxKw
- fix: diskUsage.pl (perlDreamer Consulting, LLC)

View file

@ -20,17 +20,55 @@ my $quiet; # this line required
my $session = start(); # this line required
# upgrade functions go here
fixEmsBadges($session);
finish($session); # this line required
##-------------------------------------------------
#sub exampleFunction {
# my $session = shift;
# print "\tWe're doing some stuff here that you should know about.\n" unless ($quiet);
# # and here's our code
#}
#-------------------------------------------------
sub fixEmsBadges {
my $session = shift;
print "\tAttaching EMS Badges to their EMS.\n" unless ($quiet);
my $db = $session->db;
# give tables an asset id that should have it
$db->write("alter table EventManagementSystem_badges add column assetId varchar(22) binary");
$db->write("alter table EventManagementSystem_prerequisites add column assetId varchar(22) binary");
$db->write("alter table EventManagementSystem_registrations add column assetId varchar(22) binary");
my $sth = $db->read("select badgeId,asset.assetId from EventManagementSystem_badges
left join EventManagementSystem_registrations using (badgeId) left join EventManagementSystem_products using
(productId) left join asset on (asset.assetId=EventManagementSystem_products.assetId);");
while (my ($badgeId, $assetId) = $sth->array) {
$db->write("update EventManagementSystem_badges set assetId=? where badgeId=?", [$assetId, $badgeId]);
$db->write("update EventManagementSystem_registrations set assetId=? where badgeId=?", [$assetId, $badgeId]);
}
my $sth = $db->read("select EventManagementSystem_prerequisites.prerequisiteId,
EventManagementSystem_products.assetId from EventManagementSystem_prerequisites left join
EventManagementSystem_prerequisiteEvents using (prerequisiteId) left join EventManagementSystem_products on
(EventManagementSystem_products.productId=EventManagementSystem_prerequisiteEvents.requiredProductId)");
while (my ($prereqId, $assetId) = $sth->array) {
$db->write("update EventManagementSystem_prerequisites set assetId=? where prerequisiteId=?", [$prereqId,
$assetId]);
}
# delete badge data for which there is no asset
$db->write("delete from EventManagementSystem_badges where assetId is null");
$db->write("delete from EventManagementSystem_registrations where assetId is null");
# delete field data for which there is no asset
my $sth = $db->read("select EventManagementSystem_metaField.fieldId
from EventManagementSystem_metaField left join asset on
(EventManagementSystem_metaField.assetId=asset.assetId) where asset.assetId is null");
while (my ($fieldId) = $sth->array) {
$db->write("delete from EventManagementSystem_metaData where fieldId=?",[$fieldId]);
$db->write("delete from EventManagementSystem_metaField where fieldId=?",[$fieldId]);
}
# delete prereqs for which there is no asset
my $sth = $db->read("select EventManagementSystem_prerequisites.prerequisiteId from
EventManagementSystem_prerequisites left join asset using (assetId) where asset.assetId is null");
while (my ($id) = $sth->array) {
$db->write("delete from EventManagementSystem_prerequisites where prerequisiteId=?",[$id]);
$db->write("delete from EventManagementSystem_prerequisiteEvents where prerequisiteId=?",[$id]);
}
}

View file

@ -530,28 +530,87 @@ sub definition {
#------------------------------------------------------------------
=head2 deleteOrphans ( )
=head2 deleteBadge ( id )
Utility method that checks for prerequisite groupings that no longer have any events assigned to them and deletes it
Delete a badge.
=cut
sub deleteOrphans {
my $self = shift;
sub deleteBadge {
my $self = shift;
my $id = shift;
$self->deleteCollateral('EventManagementSystem_badges', 'badgeId', $id);
}
# MSW Note - as this is on 4/27/2006, I don't think query will ever return any results.
#------------------------------------------------------------------
#Check for orphaned prerequisite definitions
my @orphans = $self->session->db->quickArray("select p.prerequisiteId from EventManagementSystem_prerequisites as p
left join EventManagementSystem_prerequisiteEvents as pe
on p.prerequisiteId = pe.prerequisiteId
where pe.prerequisiteId is null");
foreach my $orphan (@orphans) {
$self->session->db->write("delete from EventManagementSystem_prerequisites where prerequisiteId=".
$self->session->db->quote($orphan));
=head2 deleteEvent ( id )
Delete an event.
=cut
sub deleteEvent {
my $self = shift;
my $id = shift;
my $db = $self->session->db;
$self->deletePrereq($id);
$self->deleteCollateral('EventManagementSystem_registrations', 'productId', $id);
$self->deleteCollateral('EventManagementSystem_products', 'productId', $id);
$self->deleteCollateral('products','productId',$id);
$self->reorderCollateral('EventManagementSystem_products', 'productId');
}
#------------------------------------------------------------------
=head2 deleteMetaField ( id )
Delete a meta field, and thusly metadata associated with that field.
=cut
sub deleteMetaField {
my $self = shift;
my $id = shift;
$self->deleteCollateral('EventManagementSystem_metaData', 'fieldId', $id); # deleteCollateral doesn't care about assetId.
$self->deleteCollateral('EventManagementSystem_metaField', 'fieldId', $id);
$self->reorderCollateral('EventManagementSystem_metaField', 'fieldId');
}
}
#------------------------------------------------------------------
=head2 deletePrereq ( id )
Delete a prerequisite.
=head3 id
a valid event/product id
=cut
sub deletePrereq {
my $self = shift;
my $id = shift;
$self->deleteCollateral('EventManagementSystem_prerequisiteEvents', 'requiredProductId', $id);
}
#------------------------------------------------------------------
=head2 deletePrereqSet ( id )
Delete a prerequisite set.
=cut
sub deletePrereqSet {
my $self = shift;
my $id = shift;
$self->deleteCollateral('EventManagementSystem_prerequisiteEvents', 'prerequisiteId', $id);
$self->deleteCollateral('EventManagementSystem_prerequisites', 'prerequisiteId', $id);
$self->session->db->write("update EventManagementSystem_product set prerequisiteId=null where
prerequisiteId=?", [$id]);
}
#-------------------------------------------------------------------
@ -965,6 +1024,35 @@ sub prerequisiteIsMet {
}
#------------------------------------------------------------------
sub purge {
my $self = shift;
my $db = $self->session->db;
# delete meta fields
my $sth = $db->read("select fieldId from EventManagementSystem_metaField where assetId=?",[$self->getId]);
while (my ($id) = $sth->array) {
$self->deleteMetaField($id);
}
# delete events
my $sth = $db->read("select productId from EventManagementSystem_products where assetId=?",[$self->getId]);
while (my ($id) = $sth->array) {
$self->deleteEvent($id);
}
# delete prereqs
my $sth = $db->read("select prerequisiteId from EventManagementSystem_prerequisites where assetId=?",[$self->getId]);
while (my ($id) = $sth->array) {
$self->deletePrereqSet($id);
}
# delete badges
my $sth = $db->read("select fieldId from EventManagementSystem_badges where assetId=?",[$self->getId]);
while (my ($id) = $sth->array) {
$self->deleteBadge($id);
}
$self->SUPER::purge(@_);
}
#------------------------------------------------------------------
sub removeFromScratchCart {
my $self = shift;
@ -1556,42 +1644,23 @@ Method to delete an event, and to remove the deleted event from all prerequisite
sub www_deleteEvent {
my $self = shift;
my $eventId = $self->session->form->get("pid");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
#Remove this event as a prerequisite to any other event
$self->session->db->write("delete from EventManagementSystem_prerequisiteEvents where requiredProductId=?",
[$eventId]);
$self->deleteOrphans;
#Remove the event
$self->deleteCollateral('EventManagementSystem_products', 'productId', $eventId);
$self->deleteCollateral('products','productId',$eventId);
$self->reorderCollateral('EventManagementSystem_products', 'productId');
$self->deleteEvent($self->session->form->get("pid"));
return $self->www_search;
}
#-------------------------------------------------------------------
=head2 www_deletePrerequisite ( )
=head2 www_deletePrereqSet ( )
Method to delete a prerequisite assignment of one event to another
=cut
sub www_deletePrerequisite {
sub www_deletePrereqSet {
my $self = shift;
my $eventId = $self->session->form->get("id");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->session->db->write("delete from EventManagementSystem_prerequisiteEvents where prerequisiteId=?",
[$eventId]);
$self->session->db->write("delete from EventManagementSystem_prerequisites where prerequisiteId=?",
[$eventId]);
$self->deletePrereqSet($self->session->form->get("psid"));
return $self->www_editEvent;
}
@ -2531,12 +2600,8 @@ Method to move an event down one position in display order
sub www_moveEventMetaDataFieldDown {
my $self = shift;
my $eventId = $self->session->form->get("fieldId");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->moveCollateralDown('EventManagementSystem_metaField', 'fieldId', $eventId);
$self->moveCollateralDown('EventManagementSystem_metaField', 'fieldId', $self->session->form->get("fieldId"));
return $self->www_manageEventMetadata;
}
@ -2550,12 +2615,8 @@ Method to move an event metdata field up one position in display order
sub www_moveEventMetaDataFieldUp {
my $self = shift;
my $eventId = $self->session->form->get("fieldId");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->moveCollateralUp('EventManagementSystem_metaField', 'fieldId', $eventId);
$self->moveCollateralUp('EventManagementSystem_metaField', 'fieldId', $self->session->form->get("fieldId"));
return $self->www_manageEventMetadata;
}
@ -2570,14 +2631,8 @@ Method to move an event metdata field up one position in display order
sub www_deleteEventMetaDataField {
my $self = shift;
my $eventId = $self->session->form->get("fieldId");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->deleteCollateral('EventManagementSystem_metaField', 'fieldId', $eventId);
$self->reorderCollateral('EventManagementSystem_metaField', 'fieldId');
$self->deleteCollateral('EventManagementSystem_metaData', 'fieldId', $eventId); # deleteCollateral doesn't care about assetId.
$self->deleteMetaField($self->session->form->get("fieldId"));
return $self->www_manageEventMetadata;
}
@ -2591,12 +2646,8 @@ Method to move an event down one position in display order
sub www_moveEventDown {
my $self = shift;
my $eventId = $self->session->form->get("pid");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->moveCollateralDown('EventManagementSystem_products', 'productId', $eventId);
$self->moveCollateralDown('EventManagementSystem_products', 'productId', $self->session->form->get("pid"));
return $self->www_search;
}
@ -2610,12 +2661,8 @@ Method to move an event up one position in display order
sub www_moveEventUp {
my $self = shift;
my $eventId = $self->session->form->get("pid");
return $self->session->privilege->insufficient unless ($self->canAddEvents);
$self->moveCollateralUp('EventManagementSystem_products', 'productId', $eventId);
$self->moveCollateralUp('EventManagementSystem_products', 'productId', $self->session->form->get("pid"));
return $self->www_search;
}
@ -2637,11 +2684,12 @@ sub saveRegistration {
next if isIn($eventId,@addingToPurchase);
next if isIn($eventId,@badgeEvents);
my $registrationId = $self->setCollateral("EventManagementSystem_registrations", "registrationId",{
assetId => $self->getId,
registrationId => "new",
purchaseId => $purchaseId,
productId => $eventId,
badgeId => $badgeId
},0,0);
purchaseId => $purchaseId,
productId => $eventId,
badgeId => $badgeId,
},0,0);
$shoppingCart->add($eventId, 'Event');
$addedAny = 1;
}
@ -2724,6 +2772,7 @@ sub www_saveRegistrantInfo {
my $details = {
badgeId => $badgeId, # if this is "new", setCollateral will return the new one.
assetId => $self->getId,
firstName => $firstName,
lastName => $lastName,
address => $address,
@ -3373,6 +3422,7 @@ sub www_editPrereqSetSave {
my $psid = $self->session->form->process('psid');
$psid = $self->setCollateral("EventManagementSystem_prerequisites", "prerequisiteId",{
prerequisiteId=>$psid,
assetId=>$self->getId,
name => $self->session->form->process("name"),
operator => $self->session->form->process("operator",'radioList')
},0,0);
@ -3408,16 +3458,16 @@ sub www_manageRegistrants {
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
my $output;
my $sql = "select * from EventManagementSystem_badges order by lastName, firstName";
my $sql = "select * from EventManagementSystem_badges where assetId=? order by lastName, firstName";
my $p = WebGUI::Paginator->new($self->session,$self->getUrl('func=manageRegistrants'),50);
$p->setDataByArrayRef($self->session->db->buildArrayRefOfHashRefs($sql));
my $data = $p->getPageData;
#$p->setDataByArrayRef($self->session->db->buildArrayRefOfHashRefs($sql),[$self->getId]);
$p->setDataByQuery($sql,undef,undef,[$self->getId]);
$p->setAlphabeticalKey('lastName');
foreach (@$data) {
foreach my $badge (@{$p->getPageData}) {
$output .= "<div>";
# $output .= $self->session->icon->delete('func=deleteRegistrant;psid='.$_->{badgeId}, $self->get('url'));
$output .= $self->session->icon->edit('func=editRegistrant;badgeId='.$_->{badgeId}, $self->get('url')).
"&nbsp;&nbsp;".$_->{lastName}.",&nbsp;".$_->{firstName}."&nbsp;&nbsp;(&nbsp;".$_->{email}."&nbsp;)</div>";
$output .= $self->session->icon->edit('func=editRegistrant;badgeId='.$badge->{badgeId}, $self->get('url')).
"&nbsp;&nbsp;".$badge->{lastName}.",&nbsp;".$badge->{firstName}."&nbsp;&nbsp;(&nbsp;".$badge->{email}."&nbsp;)</div>";
}
$output .= '<div>'.$p->getBarAdvanced.'</div>';
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=editRegistrant;badgeId=new'), $i18n->get('add registrant'));
@ -3582,6 +3632,7 @@ sub www_editRegistrantSave {
my $addingNew = ($userId eq 'new') ? 1 : 0;
my $details = {
badgeId => $badgeId, # if this is "new", setCollateral will return the new one.
assetId => $self->getId,
firstName => $firstName,
lastName => $lastName,
'address' => $address,