Пример #1
0
        public ActionResult ProductDetails(int productId, string attributes)
        {
            var product = _productService.GetProductById(productId);

            if (product == null || product.Deleted)
            {
                return(HttpNotFound());
            }

            //Is published?
            //Check whether the current user has a "Manage catalog" permission
            //It allows him to preview a product before publishing
            if (!product.Published && !_services.Permissions.Authorize(StandardPermissionProvider.ManageCatalog))
            {
                return(HttpNotFound());
            }

            //ACL (access control list)
            if (!_aclService.Authorize(product))
            {
                return(HttpNotFound());
            }

            //Store mapping
            if (!_storeMappingService.Authorize(product))
            {
                return(HttpNotFound());
            }

            //visible individually?
            if (!product.VisibleIndividually)
            {
                //is this one an associated products?
                var parentGroupedProduct = _productService.GetProductById(product.ParentGroupedProductId);
                if (parentGroupedProduct != null)
                {
                    return(RedirectToRoute("Product", new { SeName = parentGroupedProduct.GetSeName() }));
                }
                else
                {
                    return(HttpNotFound());
                }
            }

            //prepare the model
            var selectedAttributes = new FormCollection();

            selectedAttributes.ConvertAttributeQueryData(_productAttributeParser.DeserializeQueryData(attributes), product.Id);

            var model = _helper.PrepareProductDetailsPageModel(product, selectedAttributes: selectedAttributes);

            //save as recently viewed
            _recentlyViewedProductsService.AddProductToRecentlyViewedList(product.Id);

            //activity log
            _services.CustomerActivity.InsertActivity("PublicStore.ViewProduct", T("ActivityLog.PublicStore.ViewProduct"), product.Name);

            return(View(model.ProductTemplateViewPath, model));
        }