The shelf now checks for viewing permissions of the products and shelves that it displays.

Template with i18n feedback for users.
This commit is contained in:
Colin Kuskie 2009-07-17 21:01:55 +00:00
parent 9a6d5d6eb0
commit f2bd5d8e48
5 changed files with 123 additions and 38 deletions

View file

@ -288,8 +288,9 @@ sub view {
# get other shelves
my @childShelves = ();
foreach my $child (@{$self->getLineage(['children'],{returnObjects=>1,includeOnlyClasses=>['WebGUI::Asset::Wobject::Shelf']})}) {
my $properties = $child->get;
SHELF: foreach my $child (@{$self->getLineage(['children'],{returnObjects=>1,includeOnlyClasses=>['WebGUI::Asset::Wobject::Shelf']})}) {
next SHELF unless $child->canView;
my $properties = $child->get;
$child->{url} = $child->getUrl;
$child->{title} = $child->getTitle;
push @childShelves, $child;
@ -305,30 +306,38 @@ sub view {
isa => 'WebGUI::Asset::Sku',
});
##Prescreen to only paginate viewable products
my @productIds = List::MoreUtils::uniq(@childSkus, @{$keywordBasedAssetIds});
my @products = ();
PRODUCT: foreach my $id (@productIds) {
my $asset = WebGUI::Asset->newByDynamicClass($session, $id);
if (defined $asset && $asset->canView) {
push @products, $asset;
}
else {
$session->errorHandler->error(q|Couldn't instanciate SKU with assetId |.$id.q| on shelf with assetId |.$self->getId);
}
}
# create paginator
my @products = List::MoreUtils::uniq(@childSkus, @{$keywordBasedAssetIds});
my $p = WebGUI::Paginator->new($session, $self->getUrl('func=view'));
$p->setDataByArrayRef(\@products);
# generate template variables
my @skus = ();
foreach my $id (@{$p->getPageData}) {
my $asset = WebGUI::Asset->newByDynamicClass($session, $id);
if (defined $asset) {
my $sku = $asset->get;
$sku->{url} = $asset->getUrl;
$sku->{thumbnailUrl} = $asset->getThumbnailUrl;
$sku->{price} = sprintf("%.2f", $asset->getPrice);
$sku->{addToCartForm} = $asset->getAddToCartForm;
push @skus, $sku;
}
else {
$session->errorHandler->error(q|Couldn't instanciate SKU with assetId |.$id.q| on shelf with assetId |.$self->getId);
}
}
my @skus = ();
foreach my $asset (@{$p->getPageData}) {
my $sku = $asset->get;
$sku->{url} = $asset->getUrl;
$sku->{thumbnailUrl} = $asset->getThumbnailUrl;
$sku->{price} = sprintf("%.2f", $asset->getPrice);
$sku->{addToCartForm} = $asset->getAddToCartForm;
push @skus, $sku;
}
my %var = (
shelves => \@childShelves,
products => \@skus,
shelves => \@childShelves,
products => \@skus,
noViewableSkus => scalar(@skus) ? 0 : 1,
emptyShelf => scalar(@productIds) ? 0 : 1,
);
$p->appendTemplateVars(\%var);