you can add tokens and ribbons now

This commit is contained in:
JT Smith 2008-03-22 21:53:19 +00:00
parent 1623356e4b
commit 5888459de3
8 changed files with 547 additions and 47 deletions

View file

@ -103,46 +103,46 @@ sub definition {
my $i18n = WebGUI::International->new($session, "Asset_Sku");
%properties = (
description => {
tab=>"properties",
fieldType=>"HTMLArea",
defaultValue=>undef,
label=>$i18n->get("description"),
hoverHelp=>$i18n->get("description help")
tab => "properties",
fieldType => "HTMLArea",
defaultValue => undef,
label => $i18n->get("description"),
hoverHelp => $i18n->get("description help")
},
sku => {
tab=>"commerce",
fieldType=>"text",
defaultValue=>$session->id->generate,
label=>$i18n->get("sku"),
hoverHelp=>$i18n->get("sku help")
tab => "shop",
fieldType => "text",
defaultValue => $session->id->generate,
label => $i18n->get("sku"),
hoverHelp => $i18n->get("sku help")
},
displayTitle => {
tab=>"display",
fieldType=>"yesNo",
defaultValue=>1,
label=>$i18n->get("display title"),
hoverHelp=>$i18n->get("display title")
tab => "display",
fieldType => "yesNo",
defaultValue => 1,
label => $i18n->get("display title"),
hoverHelp => $i18n->get("display title")
},
overrideTaxRate => {
tab=>"commerce",
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get("override tax rate"),
hoverHelp=>$i18n->get("override tax rate help")
tab => "shop",
fieldType => "yesNo",
defaultValue => 0,
label => $i18n->get("override tax rate"),
hoverHelp => $i18n->get("override tax rate help")
},
taxRateOverride => {
tab=>"commerce",
fieldType=>"float",
defaultValue=>0.00,
label=>$i18n->get("tax rate override"),
hoverHelp=>$i18n->get("tax rate override help")
tab => "shop",
fieldType => "float",
defaultValue => 0.00,
label => $i18n->get("tax rate override"),
hoverHelp => $i18n->get("tax rate override help")
},
salesAgentId => {
tab=>"commerce",
fieldType=>"hidden",
defaultValue=>undef,
label=>$i18n->get("sales agent"),
hoverHelp=>$i18n->get("sales agent help")
tab => "shop",
fieldType => "hidden",
defaultValue => undef,
label => $i18n->get("sales agent"),
hoverHelp => $i18n->get("sales agent help")
},
);
push(@{$definition}, {
@ -195,7 +195,7 @@ Not to be modified, just defines a new tab.
sub getEditTabs {
my $self = shift;
my $i18n = WebGUI::International->new($self->session,"Asset_Sku");
return (['commerce', $i18n->get('commerce'), 9]);
return (['shop', $i18n->get('shop'), 9]);
}
#-------------------------------------------------------------------

View file

@ -73,7 +73,7 @@ sub definition {
hoverHelp => $i18n->get("thank you message"),
},
defaultPrice => {
tab => "commerce",
tab => "shop",
fieldType => "float",
defaultValue => 100.00,
label => $i18n->get("default price"),

View file

@ -75,14 +75,14 @@ sub definition {
my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem");
%properties = (
price => {
tab => "commerce",
tab => "shop",
fieldType => "float",
defaultValue => 0.00,
label => $i18n->get("price"),
hoverHelp => $i18n->get("price help"),
},
seatsAvailable => {
tab => "commerce",
tab => "shop",
fieldType => "integer",
defaultValue => 100,
label => $i18n->get("seats available"),

View file

@ -57,7 +57,7 @@ sub definition {
my $date = WebGUI::DateTime->new($session, time());
%properties = (
price => {
tab => "commerce",
tab => "shop",
fieldType => "float",
defaultValue => 0.00,
label => $i18n->get("price"),
@ -192,5 +192,52 @@ sub www_addToCart {
return $self->getParent->www_viewExtras($badgeId);
}
#-------------------------------------------------------------------
=head2 www_edit ()
Displays the edit form.
=cut
sub www_edit {
my ($self) = @_;
return $self->session->privilege->insufficient() unless $self->canEdit;
return $self->session->privilege->locked() unless $self->canEditIfLocked;
$self->session->style->setRawHeadTags(q|
<style type="text/css">
.forwardButton {
background-color: green;
color: white;
font-weight: bold;
padding: 3px;
}
.backwardButton {
background-color: red;
color: white;
font-weight: bold;
padding: 3px;
}
</style>
|);
my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem");
my $form = $self->getEditForm;
$form->hidden({name=>'proceed', value=>'viewAllRibbons'});
return $self->processStyle('<h1>'.$i18n->get('ems ribbon').'</h1>'.$form->print);
}
#-------------------------------------------------------------------
=head2 www_viewAllRibbons ()
Displays the list of ribbons in the parent.
=cut
sub www_viewAllRibbons {
my $self = shift;
return $self->getParent->www_viewExtras(undef,"ribbons");
}
1;

View file

@ -71,14 +71,14 @@ sub definition {
my $date = WebGUI::DateTime->new($session, time());
%properties = (
price => {
tab => "commerce",
tab => "shop",
fieldType => "float",
defaultValue => 0.00,
label => $i18n->get("price"),
hoverHelp => $i18n->get("price help"),
},
seatsAvailable => {
tab => "commerce",
tab => "shop",
fieldType => "integer",
defaultValue => 25,
label => $i18n->get("seats available"),
@ -278,5 +278,53 @@ sub www_addToCart {
return $self->getParent->www_viewExtras($badgeId);
}
#-------------------------------------------------------------------
=head2 www_edit ()
Displays the edit form.
=cut
sub www_edit {
my ($self) = @_;
return $self->session->privilege->insufficient() unless $self->canEdit;
return $self->session->privilege->locked() unless $self->canEditIfLocked;
$self->session->style->setRawHeadTags(q|
<style type="text/css">
.forwardButton {
background-color: green;
color: white;
font-weight: bold;
padding: 3px;
}
.backwardButton {
background-color: red;
color: white;
font-weight: bold;
padding: 3px;
}
</style>
|);
my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem");
my $form = $self->getEditForm;
$form->hidden({name=>'proceed', value=>'viewAllTickets'});
return $self->processStyle('<h1>'.$i18n->get('ems ticket').'</h1>'.$form->print);
}
#-------------------------------------------------------------------
=head2 www_viewAllTickets ()
Displays the list of tickets in the parent.
=cut
sub www_viewAllTickets {
my $self = shift;
return $self->getParent->www_viewExtras(undef,"tickets");
}
1;

View file

@ -57,7 +57,7 @@ sub definition {
my $date = WebGUI::DateTime->new($session, time());
%properties = (
price => {
tab => "commerce",
tab => "shop",
fieldType => "float",
defaultValue => 0.00,
label => $i18n->get("price"),
@ -189,5 +189,52 @@ sub www_addToCart {
return $self->getParent->www_viewExtras($badgeId);
}
#-------------------------------------------------------------------
=head2 www_edit ()
Displays the edit form.
=cut
sub www_edit {
my ($self) = @_;
return $self->session->privilege->insufficient() unless $self->canEdit;
return $self->session->privilege->locked() unless $self->canEditIfLocked;
$self->session->style->setRawHeadTags(q|
<style type="text/css">
.forwardButton {
background-color: green;
color: white;
font-weight: bold;
padding: 3px;
}
.backwardButton {
background-color: red;
color: white;
font-weight: bold;
padding: 3px;
}
</style>
|);
my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem");
my $form = $self->getEditForm;
$form->hidden({name=>'proceed', value=>'viewAllTokens'});
return $self->processStyle('<h1>'.$i18n->get('ems token').'</h1>'.$form->print);
}
#-------------------------------------------------------------------
=head2 www_viewAllTokens ()
Displays the list of tokens in the parent.
=cut
sub www_viewAllTokens {
my $self = shift;
return $self->getParent->www_viewExtras(undef,"tokens");
}
1;

View file

@ -166,7 +166,6 @@ sub view {
return $session->privilege->noAccess() unless $self->canView;
# set up objects we'll need
my $badgeId = $session->form->get("badgeId");
my %var = ();
@ -177,7 +176,7 @@ sub view {
my $output = q|
<div class=" yui-skin-sam">
<a href="|.$self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSBadge').q|">Add a badge</a>
<p><a href="|.$self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSBadge').q|">Add a badge</a></p>
<p>|.$self->get('badgeInstructions').q|</p>
<div id="emsBadgeList"></div>
</div>
@ -310,6 +309,72 @@ sub www_getBadgesAsJson {
#-------------------------------------------------------------------
=head2 www_getRibbonsAsJson ()
Retrieves a list of ribbons for the www_viewExtras() method.
=cut
sub www_getRibbonsAsJson {
my ($self) = @_;
my $session = $self->session;
return $session->privilege->insufficient() unless $self->canView;
my ($db, $form) = $session->quick(qw(db form));
my %results = ();
foreach my $badge (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSRibbon']})}) {
push(@{$results{records}}, {
title => $badge->getTitle,
description => $badge->get('description'),
price => $badge->getPrice+0,
url => $badge->getUrl,
editUrl => $badge->getUrl('func=edit'),
deleteUrl => $badge->getUrl('func=delete'),
assetId => $badge->getId,
});
}
$results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}});
$results{'startIndex'} = 0;
$results{'sort'} = undef;
$results{'dir'} = "asc";
$session->http->setMimeType('text/json');
return JSON::to_json(\%results);
}
#-------------------------------------------------------------------
=head2 www_getTokensAsJson ()
Retrieves a list of tokens for the www_viewExtras() method.
=cut
sub www_getTokensAsJson {
my ($self) = @_;
my $session = $self->session;
return $session->privilege->insufficient() unless $self->canView;
my ($db, $form) = $session->quick(qw(db form));
my %results = ();
foreach my $badge (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSToken']})}) {
push(@{$results{records}}, {
title => $badge->getTitle,
description => $badge->get('description'),
price => $badge->getPrice+0,
url => $badge->getUrl,
editUrl => $badge->getUrl('func=edit'),
deleteUrl => $badge->getUrl('func=delete'),
assetId => $badge->getId,
});
}
$results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}});
$results{'startIndex'} = 0;
$results{'sort'} = undef;
$results{'dir'} = "asc";
$session->http->setMimeType('text/json');
return JSON::to_json(\%results);
}
#-------------------------------------------------------------------
=head2 www_getRegistrantAsJson ( )
Retrieves the properties of the current badge and the items attached to it.
@ -330,18 +395,311 @@ sub www_getRegistrantAsJson {
#-------------------------------------------------------------------
=head2 www_viewExtras ( [badgeId] )
=head2 www_viewExtras ( [badgeId, whichTab] )
Displays available ribbons, tokens, and tickets for the current badge.
=cut
sub www_viewExtras {
my ($self, $badgeId) = @_;
return $self->session->privilege->noAccess() unless $self->canView;
$badgeId = $self->session->form->get("badgeId") unless ($badgeId eq "");
my ($self, $badgeId, $whichTab) = @_;
my $session = $self->session;
return $session->privilege->noAccess() unless $self->canView;
$badgeId = $session->form->get("badgeId") unless ($badgeId eq "");
$whichTab ||= "tickets";
return "got here";
my ($style, $url) = $session->quick(qw(style url));
$style->setLink($url->extras('/yui/build/fonts/fonts-min.css'), {rel=>'stylesheet', type=>'text/css'});
$style->setLink($url->extras('/yui/build/tabview/assets/skins/sam/tabview.css'), {rel=>'stylesheet', type=>'text/css'});
$style->setLink($url->extras('/yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'});
$style->setLink($url->extras('/yui/build/container/assets/skins/sam/container.css'), {rel=>'stylesheet', type=>'text/css'});
$style->setScript($url->extras('/yui/build/utilities/utilities.js'), {type=>'text/javascript'});
$style->setScript($url->extras('/yui/build/json/json-min.js'), {type=>'text/javascript'});
$style->setScript($url->extras('/yui/build/datasource/datasource-beta-min.js'), {type=>'text/javascript'});
$style->setScript($url->extras('/yui/build/datatable/datatable-beta-min.js'), {type=>'text/javascript'});
$style->setScript($url->extras('/yui/build/container/container-min.js'), {type=>'text/javascript'});
$style->setScript($url->extras('/yui/build/tabview/tabview-min.js'), {type=>'text/javascript'});
$style->setRawHeadTags(q|
<style type="text/css">
.skuDescription {
background-color: white;
max-width: 400px;
border:1px solid #000;
padding:10px;
}
.forwardButton {
background-color: green;
color: white;
font-weight: bold;
padding: 3px;
}
.backwardButton {
background-color: red;
color: white;
font-weight: bold;
padding: 3px;
}
</style>
|);
my $output = q|
<div class=" yui-skin-sam"><div id="emsExtras" class="yui-navset">
<ul class="yui-nav">
<li id="emsticketstab"><a href="#emstickets"><em>Tickets</em></a></li>
<li id="emsribbonstab"><a href="#emsribbons"><em>Ribbons</em></a></li>
<li id="emstokenstab"><a href="#emstokens"><em>Tokens</em></a></li>
</ul>
<div class="yui-content">
<!-- TICKETS TAB -->
<div id="emstickets">
<div class=" yui-skin-sam">
<p>
<a href="|.$self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSTicket').q|">Add a ticket</a>
&bull;
<a href="">Import</a>
&bull;
<a href="">Export</a>
</p>
<p>|.$self->get('ticketInstructions').q|</p>
<div id="emsTicketList"></div>
</div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var DataSource = YAHOO.util.DataSource,
Dom = YAHOO.util.Dom,
DataTable = YAHOO.widget.DataTable,
Paginator = YAHOO.widget.Paginator;
// the datasource deals with the stuff returned from www_getTicketsAsJson
var mySource = new DataSource('|.$self->getUrl('func=getTicketsAsJson').q|');
mySource.responseType = DataSource.TYPE_JSON;
mySource.responseSchema = {
resultsList : 'records',
totalRecords: 'totalRecords',
fields : [ 'url', 'title', 'description', 'price', 'quantityAvailable', 'deleteUrl', 'editUrl', 'assetId']
};
// paginator in case there are a lot of tickets
var myPaginator = new Paginator({
containers : ['paging'],
pageLinks : 5,
rowsPerPage : 25,
rowsPerPageOptions : [25,50,100],
template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
});
// ticket description formatter
var formatViewTicketDescription = function(elCell, oRecord, oColumn, title) {
elCell.innerHTML = title;
elCell.id = 'cell_' + oRecord.getData('assetId');
elCell.tooltip = new YAHOO.widget.Tooltip("tt_" + oRecord.getData('assetId'),
{ context:elCell.id, autodismissdelay:250000,
text:'<div class="skuDescription">'+oRecord.getData('description')+'</div>' });
};
// add to cart formatter
var formatAddToCart = function(elCell, oRecord, oColumn, url) {
elCell.innerHTML = (oRecord.getData('quantityAvailable') < 1) ? '' : '<a href="' + url + '" class="forwardButton">Buy</a>';
};
// manage ticket formatter
var formatManageTicket = function(elCell, oRecord, oColumn, editUrl) {
elCell.innerHTML = '<a href="' + oRecord.getData('deleteUrl') + '">Delete</a> / <a href="' + editUrl + '">Edit</a>';
};
// quantity available formatter
var formatQuantityAvailable = function(elCell, oRecord, oColumn, quantityAvailable) {
elCell.innerHTML = (quantityAvailable < 1) ? '<strong>Sold Out!</strong>' : quantityAvailable;
};
// create the data table
var myTableConfig = {
initialRequest : '',
paginator : myPaginator
};
var myColumnDefs = [
|;
if ($session->var->isAdminOn) {
$output .= '{key:"editUrl", label:"Manage", formatter:formatManageTicket},';
}
$output .= q|
{key:"url", label:"Buy", formatter:formatAddToCart},
{key:"title", label:"Title",sortable:true,formatter:formatViewTicketDescription},
{key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency},
{key:"quantityAvailable",sortable:true,label:"Quantity Available", formatter:formatQuantityAvailable}
];
var myTable = new DataTable('emsTicketList', myColumnDefs, mySource, myTableConfig);
});
</script>
</div>
<!-- RIBBONS TAB -->
<div id="emsribbons">
<div class=" yui-skin-sam">
<p><a href="|.$self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSRibbon').q|">Add a ribbon</a></p>
<p>|.$self->get('ribbonInstructions').q|</p>
<div id="emsRibbonList"></div>
</div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var DataSource = YAHOO.util.DataSource,
Dom = YAHOO.util.Dom,
DataTable = YAHOO.widget.DataTable,
Paginator = YAHOO.widget.Paginator;
// the datasource deals with the stuff returned from www_getRibbonsAsJson
var mySource = new DataSource('|.$self->getUrl('func=getRibbonsAsJson').q|');
mySource.responseType = DataSource.TYPE_JSON;
mySource.responseSchema = {
resultsList : 'records',
totalRecords: 'totalRecords',
fields : [ 'url', 'title', 'description', 'price', 'deleteUrl', 'editUrl', 'assetId']
};
// paginator in case there are a lot of ribbons
var myPaginator = new Paginator({
containers : ['paging'],
pageLinks : 5,
rowsPerPage : 25,
rowsPerPageOptions : [25,50,100],
template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
});
// ribbon description formatter
var formatViewRibbonDescription = function(elCell, oRecord, oColumn, title) {
elCell.innerHTML = title;
elCell.id = 'cell_' + oRecord.getData('assetId');
elCell.tooltip = new YAHOO.widget.Tooltip("tt_" + oRecord.getData('assetId'),
{ context:elCell.id, autodismissdelay:250000,
text:'<div class="skuDescription">'+oRecord.getData('description')+'</div>' });
};
// add to cart formatter
var formatAddToCart = function(elCell, oRecord, oColumn, url) {
elCell.innerHTML = (oRecord.getData('quantityAvailable') < 1) ? '' : '<a href="' + url + '" class="forwardButton">Buy</a>';
};
// manage ribbon formatter
var formatManageRibbon = function(elCell, oRecord, oColumn, editUrl) {
elCell.innerHTML = '<a href="' + oRecord.getData('deleteUrl') + '">Delete</a> / <a href="' + editUrl + '">Edit</a>';
};
// create the data table
var myTableConfig = {
initialRequest : '',
paginator : myPaginator
};
var myColumnDefs = [
|;
if ($session->var->isAdminOn) {
$output .= '{key:"editUrl", label:"Manage", formatter:formatManageRibbon},';
}
$output .= q|
{key:"url", label:"Buy", formatter:formatAddToCart},
{key:"title", label:"Title",sortable:true,formatter:formatViewRibbonDescription},
{key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency}
];
var myTable = new DataTable('emsRibbonList', myColumnDefs, mySource, myTableConfig);
});
</script>
</div>
<!-- TOKENS TAB -->
<div id="emstokens">
<div class=" yui-skin-sam">
<p><a href="|.$self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSToken').q|">Add a token</a></p>
<p>|.$self->get('tokenInstructions').q|</p>
<div id="emsTokenList"></div>
</div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var DataSource = YAHOO.util.DataSource,
Dom = YAHOO.util.Dom,
DataTable = YAHOO.widget.DataTable,
Paginator = YAHOO.widget.Paginator;
// the datasource deals with the stuff returned from www_getTokensAsJson
var mySource = new DataSource('|.$self->getUrl('func=getTokensAsJson').q|');
mySource.responseType = DataSource.TYPE_JSON;
mySource.responseSchema = {
resultsList : 'records',
totalRecords: 'totalRecords',
fields : [ 'url', 'title', 'description', 'price', 'deleteUrl', 'editUrl', 'assetId']
};
// paginator in case there are a lot of tokens
var myPaginator = new Paginator({
containers : ['paging'],
pageLinks : 5,
rowsPerPage : 25,
rowsPerPageOptions : [25,50,100],
template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
});
// token description formatter
var formatViewTokenDescription = function(elCell, oRecord, oColumn, title) {
elCell.innerHTML = title;
elCell.id = 'cell_' + oRecord.getData('assetId');
elCell.tooltip = new YAHOO.widget.Tooltip("tt_" + oRecord.getData('assetId'),
{ context:elCell.id, autodismissdelay:250000,
text:'<div class="skuDescription">'+oRecord.getData('description')+'</div>' });
};
// add to cart formatter
var formatAddToCart = function(elCell, oRecord, oColumn, url) {
elCell.innerHTML = (oRecord.getData('quantityAvailable') < 1) ? '' : '<a href="' + url + '" class="forwardButton">Buy</a>';
};
// manage token formatter
var formatManageToken = function(elCell, oRecord, oColumn, editUrl) {
elCell.innerHTML = '<a href="' + oRecord.getData('deleteUrl') + '">Delete</a> / <a href="' + editUrl + '">Edit</a>';
};
// create the data table
var myTableConfig = {
initialRequest : '',
paginator : myPaginator
};
var myColumnDefs = [
|;
if ($session->var->isAdminOn) {
$output .= '{key:"editUrl", label:"Manage", formatter:formatManageToken},';
}
$output .= q|
{key:"url", label:"Buy", formatter:formatAddToCart},
{key:"title", label:"Title",sortable:true,formatter:formatViewTokenDescription},
{key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency}
];
var myTable = new DataTable('emsTokenList', myColumnDefs, mySource, myTableConfig);
});
</script>
</div>
</div>
</div></div>
<script type="text/javascript">
(function() {
var whichTab = '|.$whichTab.q|';
YAHOO.util.Dom.addClass(YAHOO.util.Dom.get('ems' + whichTab + 'tab'),'selected');
var tabView = new YAHOO.widget.TabView('emsExtras');
})();
</script>
|;
return $self->processStyle($output);
my %var = ();

View file

@ -3,8 +3,8 @@ package WebGUI::i18n::English::Asset_Sku;
use strict;
our $I18N = {
'commerce' => {
message => q|Commerce|,
'shop' => {
message => q|Shop|,
lastUpdated => 0,
context => q|The name of a tab that all Sku based assets have to put their commerce related settings.|
},