diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index 0daf9b117..4b0b54405 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -16,6 +16,10 @@
- rfe: Admin bar doesn't resize with the browser
- fix: Left Admin Bar overlap problem
- Color coded most buttons, green for proceed and red for go back.
+ - Encrypt page now forces SSL and can check for the SSLPROXY pass through
+ variable in addition to the HTTPS variable.
+ - Encrypt page no longer shows up unless SSL mode is enabled in the config
+ file.
- fix: A bug where it was possible to delete a system page if it were made
the child of a non-system page that you had edit rights to.
- api: Added a unified contraints system for the file and image assets.
@@ -29,7 +33,6 @@
- Added keyword tagging to Wiki.
- Upgraded TinyMCE to 2.1.1.1.
- Safari 3 and above now fully supported in admin interface.
- - improved performance of EMS
- upgraded YUI to 2.2.2 and YUI-ext to 1.0.1a
- Improved error handling in Spectre when WebGUI hands it bad data.
- Fixed a problem where Spectre dropped cron jobs that were erroring
@@ -57,11 +60,14 @@
description from the RSS feed.
- Added an index on the userId column of the groupings table to speed up
queries for groupIds by userId (instead of the usual userIds by groupId)
- - fix: bad javascript string escaping in EMS
- fix: Unable to upload images or edit listings for Matrix
+ - fix: bad javascript string escaping in EMS
+ - improved performance of EMS
- Added import/export mechanism for EMS events.
- - Removed the long depricated Memcached cache module.
- fix: Show edit links on EMS search view without being in Admin group
+ - Added new registration search and management interface to the EMS.
+ - Added badge printing support to the EMS.
+ - Removed the long depricated Memcached cache module.
- fix: Fixed a typo in the Article with attachments template (perlDreamer
Consulting, LLC)
- fix: Order of content position loops in Page Layout (Yung Han Khoe, United Knowledge)
diff --git a/docs/upgrades/templates-7.4.0/emsbadgeprint.tmpl b/docs/upgrades/templates-7.4.0/emsbadgeprint.tmpl
new file mode 100644
index 000000000..be638b350
--- /dev/null
+++ b/docs/upgrades/templates-7.4.0/emsbadgeprint.tmpl
@@ -0,0 +1,15 @@
+#emsbadgeprintout000000
+#url: ems-badge-print-out-template
+#title: Badge Print
+#namespace:emsbadgeprint
+#create
+
+
+
+
diff --git a/docs/upgrades/templates-7.4.0/emsticketprint.tmpl b/docs/upgrades/templates-7.4.0/emsticketprint.tmpl
new file mode 100644
index 000000000..bee4a2553
--- /dev/null
+++ b/docs/upgrades/templates-7.4.0/emsticketprint.tmpl
@@ -0,0 +1,16 @@
+#emsticketprintout00000
+#url: ems-ticket-print-out-template
+#title: Ticket Print
+#namespace:emsticketprint
+#create
+
+
+
:
+
+
^D(,); - ^D(,);
+
,
+
+
+
+
+
diff --git a/docs/upgrades/upgrade_7.3.22-7.4.0.pl b/docs/upgrades/upgrade_7.3.22-7.4.0.pl
index 67afc026b..14d4e7685 100644
--- a/docs/upgrades/upgrade_7.3.22-7.4.0.pl
+++ b/docs/upgrades/upgrade_7.3.22-7.4.0.pl
@@ -40,9 +40,18 @@ addWikiAttachments($session);
addAdminConsoleGroupSettings($session);
updateCommerce($session);
updateProfileDateFormats($session);
+addEmsBadgePrinting($session);
finish($session); # this line required
+#-------------------------------------------------
+sub addEmsBadgePrinting {
+ my $session = shift;
+ print "\tAdding badge printing support to EMS.\n" unless $quiet;
+ $session->db->write("alter table EventManagementSystem add column badgePrinterTemplateId varchar(22) binary not null default 'emsbadgeprintout000000'");
+ $session->db->write("alter table EventManagementSystem add column ticketPrinterTemplateId varchar(22) binary not null default 'emsticketprintout00000'");
+}
+
#-------------------------------------------------
# Add the default admin console group settings
sub addAdminConsoleGroupSettings {
diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original
index 105355f78..f7f68b874 100644
--- a/etc/WebGUI.conf.original
+++ b/etc/WebGUI.conf.original
@@ -8,6 +8,10 @@
"sitename" : [ "www.example.com", "example.com"],
+# Set to 1 if you want to use WebGUI's SSL functions.
+
+"sslEnabled" : 0,
+
# Rename the WebGUI Session cookie if you like.
"cookieName" : "wgSession",
diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm
index 38450c3c9..befabfaaa 100644
--- a/lib/WebGUI/Asset.pm
+++ b/lib/WebGUI/Asset.pm
@@ -274,14 +274,20 @@ Returns error messages if a user can't view due to publishing problems, otherwis
sub checkView {
my $self = shift;
return $self->session->privilege->noAccess() unless $self->canView;
- my ($var, $http) = $self->session->quick(qw(var http));
- if ($var->isAdminOn && $self->get("state") =~ /^trash/) { # show em trash
+ my ($conf, $env, $var, $http) = $self->session->quick(qw(config env var http));
+ if ($conf->get("sslEnabled") && $self->get("encryptPage") && $env->("HTTPS") ne "on" && !$env->get("SSLPROXY")) {
+ $http->setRedirect("https://".$conf->get("sitename")->[0].$self->getUrl);
+ return "redirect";
+ }
+ elsif ($var->isAdminOn && $self->get("state") =~ /^trash/) { # show em trash
$http->setRedirect($self->getUrl("func=manageTrash"));
return "redirect";
- } elsif ($var->isAdminOn && $self->get("state") =~ /^clipboard/) { # show em clipboard
+ }
+ elsif ($var->isAdminOn && $self->get("state") =~ /^clipboard/) { # show em clipboard
$http->setRedirect($self->getUrl("func=manageClipboard"));
return "redirect";
- } elsif ($self->get("state") ne "published" && $self->get("state") ne "archived") { # tell em it doesn't exist anymore
+ }
+ elsif ($self->get("state") ne "published" && $self->get("state") ne "archived") { # tell em it doesn't exist anymore
$http->setStatus("410");
my $notFound = WebGUI::Asset->getNotFound($self->session);
$self->session->asset($notFound);
@@ -354,12 +360,12 @@ sub definition {
defaultValue=>0
},
encryptPage=>{
- fieldType=>'yesNo',
- tab=>"security",
- label=>$i18n->get('encrypt page'),
- hoverHelp=>$i18n->get('encrypt page description'),
- uiLevel=>6,
- defaultValue=>0
+ fieldType => ($session->config->get("sslEnabled") ? 'yesNo' : 'hidden'),
+ tab => "security",
+ label => $i18n->get('encrypt page'),
+ hoverHelp => $i18n->get('encrypt page description'),
+ uiLevel => 6,
+ defaultValue => 0,
},
ownerUserId=>{
tab=>"security",
diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
index 6570a0d78..8b30699b6 100644
--- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
+++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
@@ -166,7 +166,7 @@ sub _acWrapper {
$ac->addSubmenuItem($self->getUrl('func=search'),$i18n->get("manage events"));
$ac->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
$ac->addSubmenuItem($self->getUrl('func=managePrereqSets'), $i18n->get('manage prerequisite sets'));
- $ac->addSubmenuItem($self->getUrl('func=manageRegistrants'), $i18n->get('manage registrants'));
+ $ac->addSubmenuItem($self->getUrl('func=searchBadges'), "Search Badges");
$ac->addSubmenuItem($self->getUrl('func=manageDiscountPasses'), $i18n->get('manage discount passes'));
$ac->addSubmenuItem($self->getUrl('func=importEvents'), $i18n->get('import events'));
$ac->addSubmenuItem($self->getUrl('func=exportEvents'), $i18n->get('export events'));
@@ -494,6 +494,20 @@ sub definition {
hoverHelp=>$i18n->get('search template description'),
label=>$i18n->get('search template')
},
+ badgePrinterTemplateId => {
+ fieldType => "template",
+ defaultValue => "emsbadgeprintout000000",
+ tab => "display",
+ namespace => "emsbadgeprint",
+ lable => "Badge Printer Template",
+ },
+ ticketPrinterTemplateId => {
+ fieldType => "template",
+ defaultValue => "emsticketprintout00000",
+ tab => "display",
+ namespace => "emsticketprint",
+ lable => "Ticket Printer Template",
+ },
paginateAfter =>{
fieldType=>"integer",
defaultValue=>10,
@@ -3324,7 +3338,7 @@ sub www_returnItem {
foreach (@regs) {
$self->session->db->write("update EventManagementSystem_registrations set returned=1 where registrationId=?",[$_]);
}
- return $self->www_managePurchases;
+ return $self->www_editBadge;
}
#-------------------------------------------------------------------
@@ -3830,7 +3844,6 @@ sub www_search {
}
my $searchPhrases;
if (scalar(@keys)) {
- #$searchPhrases = " and ( ";
my $count = 0;
foreach my $word (@keys) {
if ($count) {
@@ -3841,12 +3854,10 @@ sub www_search {
$searchPhrases .= ' and ';
}
}
- $searchPhrases .= ' and ' if $count;
my $val = $self->session->db->quote('%'.$word.'%');
$searchPhrases .= "(p.title like $val or p.description like $val or p.sku like $val)";
$count++;
}
- #$searchPhrases .= " )";
}
my $basicSearch = $searchPhrases;
my %reqHash;
@@ -4099,7 +4110,7 @@ $self->getUrl('func=addToScratchCart;pid='.$event->{'productId'}.";mid=".$master
$var{'price.label'} = $i18n->get("price");
$var{'seats.label'} = $i18n->get("seats available");
$var{'addToBadgeMessage'} = $addToBadgeMessage;
- $var{'manageRegistrants'} = $self->getUrl("func=manageRegistrants");
+ $var{'manageRegistrants'} = $self->getUrl("func=searchBadges");
$var{'emptyCart.url'} = $self->getUrl("func=emptyCart");
$var{'checkout.url'} = $self->getUrl("func=checkout");
@@ -4181,7 +4192,7 @@ sub view {
$var{'managePurchases.url'} = $self->getUrl('func=managePurchases');
$var{'managePurchases.label'} = $i18n->get('manage purchases');
$var{'canManageEvents'} = $self->canApproveEvents;
- $var{'manageRegistrants.url'} = $self->getUrl("func=manageRegistrants");
+ $var{'manageRegistrants.url'} = $self->getUrl("func=searchBadges");
$var{'emptyCart.url'} = $self->getUrl("func=emptyCart");
@@ -4194,6 +4205,57 @@ sub view {
#-------------------------------------------------------------------
+sub www_searchBadges {
+ my $self = shift;
+ my $session = $self->session;
+ my $db = $session->db;
+ my $query = $session->form->param("query");
+ my $searchForm = WebGUI::Form::formHeader($session, {action=>$self->getUrl})
+ .WebGUI::Form::hidden($session, {name=>"func", value=>"searchBadges"})
+ .WebGUI::Form::text($session, {name=>"query", value=>$query, extras=>q|title="First Name, Last Name, Badge ID, or Email Address"|})
+ .WebGUI::Form::submit($session, {value=>"Search"})
+ .WebGUI::Form::formFooter($session);
+ my $results = "";
+ if ($query ne "") {
+ $session->style->setRawHeadTags(q|
+
+ |);
+ $results = "You searched for: $query
";
+ my $wildQuery = '%'.$query.'%';
+ my $badges = $db->read("select badgeId, lastName, firstName, city, state, email from EventManagementSystem_badges
+ where assetId=? and (lastName like ? or firstName like ? or email like ? or badgeId like ?)
+ order by lastName, firstName", [$self->getId, $wildQuery, $wildQuery, $wildQuery, $wildQuery]);
+ $results .= q||;
+ while (my ($badgeId, $last, $first, $city, $state, $email) = $badges->array) {
+ $results .= q|| Name | Location | Email | Badge ID |
|;
+ $results .= qq|| $last, $first | $city, $state | $email |
+ $badgeId |
|;
+ $results .= q|
|
|;
+ my $events = $db->read(q|select b.productId, c.sku, c.title, c.price, g.gateway,
+ from_unixtime(d.startDate,"%a %M:%i"), from_unixtime(d.endDate,"%a %H:%i")
+ from EventManagementSystem_registrations b left join products c on c.productId=b.productId
+ left join EventManagementSystem_products d ON d.productId=b.productId
+ left join EventManagementSystem_purchases f ON b.purchaseId=f.purchaseId
+ left join transaction g ON f.transactionId=g.transactionId where b.returned='0' and b.badgeId=?
+ order by d.startDate,d.endDate,c.title|,[$badgeId]);
+ while (my ($productId, $sku, $title, $price, $gateway, $start, $end) = $events->array) {
+ $results .= qq|| $sku : $title |
+ $start - $end | ($gateway) $price |
|;
+ }
+ $results .= q|
|
|;
+ $results .= q||;
+ }
+ $results .= q|
|.$searchForm;
+ }
+ return $self->processStyle("Search Badges
".$searchForm.$results);
+}
+
+#-------------------------------------------------------------------
+
=head2 www_managePrereqSets ( )
Method to display the prereq set management console.
@@ -4325,49 +4387,48 @@ sub www_editPrereqSetSave {
return $self->www_managePrereqSets();
}
-
-#-------------------------------------------------------------------
-
-=head2 www_manageRegistrants ( )
-
-Method to display the registrant management console.
-
-=cut
-
-sub www_manageRegistrants {
- my $self = shift;
-
- return $self->session->privilege->insufficient unless ($self->canAddEvents);
- my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
-
- my $output;
- 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),[$self->getId]);
- $p->setDataByQuery($sql,undef,undef,[$self->getId]);
- $p->setAlphabeticalKey('lastName');
- foreach my $badge (@{$p->getPageData}) {
- $output .= "";
- # $output .= $self->session->icon->delete('func=deleteRegistrant;psid='.$_->{badgeId}, $self->get('url'));
- $output .= $self->session->icon->edit('func=editRegistrant;badgeId='.$badge->{badgeId}, $self->get('url')).
- " ".$badge->{lastName}.", ".$badge->{firstName}." ( ".$badge->{email}." )
";
- }
- $output .= ''.$p->getBarAdvanced.'
';
- $self->getAdminConsole->addSubmenuItem($self->getUrl('func=editRegistrant;badgeId=new'), $i18n->get('add registrant'));
- return $self->_acWrapper($output, $i18n->get("manage registrants"));
+sub getPrintingVariables {
+ my $self = shift;
+ my $registrationId = shift;
+ my %event = $self->session->db->quickHash(
+ "select * from products a
+ join EventManagementSystem_products b on a.productId=b.productId
+ join EventManagementSystem_registrations c on b.productId=c.productId
+ join EventManagementSystem_badges d on c.badgeId=d.badgeId
+ join EventManagementSystem_purchases f on c.purchaseId=f.purchaseId
+ join transaction g on f.transactionId=g.transactionId
+ where c.registrationId=?",
+ [$registrationId]);
+ $event{emsTitle} = $self->getTitle;
+ my %meta = $self->session->db->buildHash(
+ "select name,fieldData from EventManagementSystem_metaData a
+ join EventManagementSystem_metaField b on a.fieldId=b.fieldId
+ where productId=?",
+ [$event{productId}]);
+ my %var = (%meta, %event);
+ return \%var;
}
+sub www_printBadge {
+ my $self = shift;
+ my $var = $self->getPrintingVariables($self->session->form->param("registrationId"));
+ return $self->processTemplate($var,$self->get("badgePrinterTemplateId"));
+}
+
+sub www_printTicket {
+ my $self = shift;
+ my $var = $self->getPrintingVariables($self->session->form->param("registrationId"));
+ return $self->processTemplate($var,$self->get("ticketPrinterTemplateId"));
+}
#-------------------------------------------------------------------
-sub www_editRegistrant {
+sub www_editBadge {
my $self = shift;
my $badgeId = shift || $self->session->form->process("badgeId") || 'new';
my $error = shift;
return $self->session->privilege->insufficient unless ($self->canAddEvents);
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
- my $f = WebGUI::HTMLForm->new($self->session, (
- action => $self->getUrl("func=editRegistrantSave;badgeId=".$badgeId)
- ));
+ my $f = WebGUI::HTMLForm->new($self->session, action => $self->getUrl("func=editBadgeSave;badgeId=".$badgeId));
my $data = {};
if ($error) {
# load submitted data.
@@ -4483,12 +4544,63 @@ function resetToInitial() {
value=>$data->{email}
);
$f->submit;
- $f->raw($self->www_viewPurchase('noStyle',$badgeId));
- return $self->_acWrapper($f->print, $i18n->get("edit registrant"));
+ my $tickets = q||;
+ my $events = $self->session->db->read(q|select b.productId, c.sku, c.title, c.price, g.gateway,
+ from_unixtime(d.startDate), from_unixtime(d.endDate), d.prerequisiteId, b.registrationId,
+ f.transactionId
+ from EventManagementSystem_registrations b left join products c on c.productId=b.productId
+ left join EventManagementSystem_products d ON d.productId=b.productId
+ left join EventManagementSystem_purchases f ON b.purchaseId=f.purchaseId
+ left join transaction g ON f.transactionId=g.transactionId where b.returned='0' and b.badgeId=?
+ order by d.startDate,d.endDate,c.title|,[$badgeId]);
+ my $ticker = 1;
+ while (my ($productId, $sku, $title, $price, $gateway, $start, $end, $prereq, $registrationId, $transactionId) = $events->array) {
+ my $isMaster = ($prereq eq "");
+ my $class = ($ticker) ? q|oddEvent| : q|evenEvent|;
+ $class = "masterEvent" if $isMaster;
+ $tickets .= qq|| $sku : $title |
+ $start - $end |
+ ($gateway) $price | |;
+ if ($isMaster) {
+ $tickets .= qq|
+ |
+ |
+ |;
+ }
+ else {
+ $tickets .= qq|
+ |
+ | |;
+ }
+ $tickets .= qq|
+ |
+
|;
+ $ticker = ($ticker == 1) ? 0 : 1;
+ }
+ $tickets .= q|
|;
+ $self->session->style->setRawHeadTags(q|
+
+ |);
+ return $self->processStyle("Edit Badge
".$f->print.$tickets);
}
#-------------------------------------------------------------------
-sub www_editRegistrantSave {
+sub www_editBadgeSave {
my $self = shift;
return $self->session->privilege->insufficient unless ($self->canAddEvents);
my $error = '';
@@ -4498,7 +4610,7 @@ sub www_editRegistrantSave {
$error .= sprintf($i18n->get('null field error'),$_)."
";
}
}
- return $self->www_editRegistrant(undef,$error) if $error;
+ return $self->www_editBadge(undef,$error) if $error;
my $badgeId = $self->session->form->process('badgeId');
my $userId = $self->session->form->get("userId", "user");
my $firstName = $self->session->form->get("firstName", "text");
@@ -4573,7 +4685,7 @@ sub www_editRegistrantSave {
$u->profileField('email',$email) if ($email ne "");
}
}
- return $self->www_manageRegistrants();
+ return $self->www_searchBadges();
}
diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm
index f184adeb0..399c2d0dc 100644
--- a/lib/WebGUI/Operation/Settings.pm
+++ b/lib/WebGUI/Operation/Settings.pm
@@ -379,12 +379,12 @@ sub definition {
defaultValue=>$session->setting->get("selfDeactivation")
});
push(@fields, {
- tab=>"user",
- fieldType=>"yesNo",
- name=>"encryptLogin",
- label=>$i18n->get(1006),
- hoverHelp=>$i18n->get('1006 description'),
- defaultValue=>$session->setting->get("encryptLogin")
+ tab => "user",
+ fieldType => ($session->config->get("sslEnabled") ? 'yesNo' : 'hidden'),
+ name => "encryptLogin",
+ label => $i18n->get(1006),
+ hoverHelp => $i18n->get('1006 description'),
+ defaultValue=> $session->setting->get("encryptLogin"),
});
push(@fields, {
tab=>"user",