public IViewComponentResult Invoke(string widgetZone, object additionalData)
        {
            ICollection <ShoppingCartItem> cartItems = _workContext.CurrentCustomer.ShoppingCartItems;
            var cartPictureModifierModel             = new List <ProductPictureModifierModel>();

            foreach (var cart in cartItems)
            {
                if (string.IsNullOrWhiteSpace(cart.AttributesXml))
                {
                    continue;
                }

                string formattedAttribute = _productAttributeFormatter
                                            .FormatAttributes(cart.Product, cart.AttributesXml);
                string[] attributes = formattedAttribute.Split("<br />");

                string colorAttributesString = attributes
                                               .FirstOrDefault(x => x.Contains(ProductPictureModifierDefault.ProductAttributeName));

                string customUploadAttribute = attributes.FirstOrDefault(x =>
                                                                         x.Contains($"{ProductPictureModifierDefault.ProductAttributeNameForLogoUpload}: <a href="));

                if (string.IsNullOrWhiteSpace(colorAttributesString) || colorAttributesString.Split(":").Length != 2)
                {
                    continue;
                }

                (int, string)mergedPicture = (0, "");
                if (!string.IsNullOrEmpty(customUploadAttribute))
                {
                    //Get the download
                    Download download = _productPictureModifierService.GetDownloadFromAttributeXml(customUploadAttribute);

                    //Get position setting
                    var logoPosition = _logoPositionService.GetByProductId(cart.ProductId);

                    //Get the picture with custom logo
                    mergedPicture = _customLogoService.MergeProductPictureWithLogo(
                        download.DownloadBinary,
                        download.Id,
                        cart.ProductId,
                        ProductPictureModifierUploadType.Custom,
                        logoPosition.Size,
                        logoPosition.Opacity,
                        logoPosition.XCoordinate,
                        logoPosition.YCoordinate,
                        75
                        );
                }

                cartPictureModifierModel.Add(new ProductPictureModifierModel
                {
                    ColorCode       = colorAttributesString.Split(":").Last().Trim(),
                    EntityId        = cart.Id,
                    CustomImagePath = mergedPicture.Item2
                });
            }

            return(View("~/Plugins/Widgets.ProductPictureModifier/Views/PublicCartItemsColor.cshtml", cartPictureModifierModel));
        }
Exemplo n.º 2
0
        public IViewComponentResult Invoke(string widgetZone, object additionalData)
        {
            //Validate the request is being invoked from admin order's page
            if (!(additionalData is OrderModel order))
            {
                return(View("~/Plugins/Widgets.ProductPictureModifier/Views/PublicCartColorSelector.cshtml",
                            new List <ProductPictureModifierModel>()));
            }

            var cartPictureModifierModel = new List <ProductPictureModifierModel>();

            foreach (var orderItem in order.Items)
            {
                string[] attributes = orderItem.AttributeInfo.Split("<br />");

                string colorAttributesString = attributes
                                               .FirstOrDefault(x => x.Contains(ProductPictureModifierDefault.ProductAttributeName));

                string customUploadAttribute = attributes.FirstOrDefault(x =>
                                                                         x.Contains($"{ProductPictureModifierDefault.ProductAttributeNameForLogoUpload}: <a href="));
                if (string.IsNullOrWhiteSpace(colorAttributesString) || colorAttributesString.Split(":").Length != 2)
                {
                    continue;
                }

                (int, string)mergedPicture = (0, "");
                if (!string.IsNullOrEmpty(customUploadAttribute))
                {
                    //Get the download
                    Download download = _productPictureModifierService.GetDownloadFromAttributeXml(customUploadAttribute);

                    //Get position setting
                    LogoPosition logoPosition = _logoPositionService.GetByProductId(orderItem.ProductId);

                    //Get the picture with custom logo
                    mergedPicture = _customLogoService.MergeProductPictureWithLogo(
                        download.DownloadBinary,
                        download.Id,
                        orderItem.ProductId,
                        ProductPictureModifierUploadType.Custom,
                        logoPosition.Size,
                        logoPosition.Opacity,
                        logoPosition.XCoordinate,
                        logoPosition.YCoordinate,
                        75
                        );
                }

                cartPictureModifierModel.Add(new ProductPictureModifierModel
                {
                    ColorCode       = colorAttributesString.Split(":").Last().Trim(),
                    EntityId        = orderItem.Id,
                    CustomImagePath = mergedPicture.Item2
                });
            }

            return(View("~/Plugins/Widgets.ProductPictureModifier/Views/AdminOrderItemsColor.cshtml", cartPictureModifierModel));
        }
Exemplo n.º 3
0
        public IActionResult Edit(int id)
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageWidgets))
            {
                return(AccessDeniedView());
            }

            ProductAttributeMapping productAttributeMapping = _productAttributeService.
                                                              GetProductAttributeMappingById(id);
            //_mediaSettings.ProductDetailsPictureSiz
            ProductPicture defaultProductPicture = _productPictureModifierService.GetFirstProductPicture(productAttributeMapping.ProductId);

            //Existing logoSetting
            LogoPosition existingLogoSetting = _logoPositionService.GetByProductId(productAttributeMapping.ProductId);

            var model = new ProductPictureModifierModel
            {
                CustomImagePath = defaultProductPicture == null ? "" : _pictureService.GetPictureUrl(defaultProductPicture.Picture),
                EntityId        = productAttributeMapping.Id,
                ProductId       = productAttributeMapping.ProductId,
                ProductName     = productAttributeMapping.Product.Name,
                ColorCode       = productAttributeMapping.DefaultValue,
                LogoModel       = new LogoModel()
                {
                    Opacity       = IsLogoSettingNew(existingLogoSetting) ? ProductPictureModifierDefault.LogoOpacity : existingLogoSetting.Opacity,
                    Size          = IsLogoSettingNew(existingLogoSetting) ? ProductPictureModifierDefault.LogoSizeInPercent : existingLogoSetting.Size,
                    XCoordinate   = existingLogoSetting.XCoordinate,
                    YCoordinate   = existingLogoSetting.YCoordinate,
                    MarkAsDefault = IsLogoSettingNew(existingLogoSetting)
                }
            };

            model.LogoSearchModel.SetGridPageSize();

            return(View("~/Plugins/Widgets.ProductPictureModifier/Views/Admin/Edit.cshtml", model));
        }
Exemplo n.º 4
0
        public IActionResult UploadFileProductAttribute(int attributeId)
        {
            var attribute = _productAttributeService.GetProductAttributeMappingById(attributeId);

            if (attribute == null || attribute.AttributeControlType != AttributeControlType.FileUpload)
            {
                return(Json(new
                {
                    success = false,
                    downloadGuid = Guid.Empty
                }));
            }

            var httpPostedFile = Request.Form.Files.FirstOrDefault();

            if (httpPostedFile == null)
            {
                return(Json(new
                {
                    success = false,
                    message = "No file uploaded",
                    downloadGuid = Guid.Empty
                }));
            }

            var fileBinary = _downloadService.GetDownloadBits(httpPostedFile);

            var qqFileNameParameter = "qqfilename";
            var fileName            = httpPostedFile.FileName;

            if (string.IsNullOrEmpty(fileName) && Request.Form.ContainsKey(qqFileNameParameter))
            {
                fileName = Request.Form[qqFileNameParameter].ToString();
            }
            //remove path (passed in IE)
            fileName = _fileProvider.GetFileName(fileName);

            var contentType = httpPostedFile.ContentType;

            var fileExtension = _fileProvider.GetFileExtension(fileName);

            if (!string.IsNullOrEmpty(fileExtension))
            {
                fileExtension = fileExtension.ToLowerInvariant();
            }

            if (attribute.ValidationFileMaximumSize.HasValue)
            {
                //compare in bytes
                var maxFileSizeBytes = attribute.ValidationFileMaximumSize.Value * 1024;
                if (fileBinary.Length > maxFileSizeBytes)
                {
                    //when returning JSON the mime-type must be set to text/plain
                    //otherwise some browsers will pop-up a "Save As" dialog.
                    return(Json(new
                    {
                        success = false,
                        message = string.Format(_localizationService.GetResource("ShoppingCart.MaximumUploadedFileSize"), attribute.ValidationFileMaximumSize.Value),
                        downloadGuid = Guid.Empty
                    }));
                }
            }

            var download = new Download
            {
                DownloadGuid   = Guid.NewGuid(),
                UseDownloadUrl = false,
                DownloadUrl    = "",
                DownloadBinary = fileBinary,
                ContentType    = contentType,
                //we store filename without extension for downloads
                Filename  = _fileProvider.GetFileNameWithoutExtension(fileName),
                Extension = fileExtension,
                IsNew     = true
            };

            _downloadService.InsertDownload(download);

            //generate new image merging the uploaded custom logo and product picture
            //newly added features for the override
            var logoPosition = _logoPositionService.GetByProductId(attribute.ProductId);

            (int, string)imagePath = _customLogoService.MergeProductPictureWithLogo(
                download.DownloadBinary,
                download.Id,
                attribute.ProductId,
                ProductPictureModifierUploadType.Custom,
                logoPosition.Size,
                logoPosition.Opacity,
                logoPosition.XCoordinate,
                logoPosition.YCoordinate,
                _mediaSettings.ProductDetailsPictureSize
                );
            //when returning JSON the mime-type must be set to text/plain
            //otherwise some browsers will pop-up a "Save As" dialog.
            return(Json(new
            {
                success = true,
                message = _localizationService.GetResource("ShoppingCart.FileUploaded"),
                downloadUrl = Url.Action("GetFileUpload", "Download", new { downloadId = download.DownloadGuid }),
                downloadGuid = download.DownloadGuid,
                imagePath = imagePath.Item2, //added property for the override
            }));
        }