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)); }
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)); }
public virtual IActionResult CustomLogoAdd(LogoModel logo) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageWidgets)) { return(AccessDeniedView()); } if (!ModelState.IsValid) { return(Json(new { Result = false, Errors = GetErrorsFromModelState() })); } //Get 1st product picture we use 1st picture of product to combine with logo ProductPicture productPicture = _productPictureModifierService .GetFirstProductPicture(logo.ProductId); if (productPicture == null) { throw new Exception("Product does not have any image"); } byte[] logoBinary = _pictureService.LoadPictureBinary(_pictureService.GetPictureById(logo.PictureId)); //Get new product image which has been merged with the logo uploaded (int, string)mergedPicture = _logoService.MergeProductPictureWithLogo( logoBinary, logo.PictureId, logo.ProductId, ProductPictureModifierUploadType.Predefined, logo.Size, logo.Opacity, logo.XCoordinate, logo.YCoordinate, overrideThumb: true); if (logo.AttributeValueId > 0) { var existingAttributeValue = _productAttributeService. GetProductAttributeValueById(logo.AttributeValueId); var existingProductPicture = _productService.GetProductPicturesByProductId(logo.ProductId) .First(x => x.PictureId == existingAttributeValue.PictureId); //update product attribute value existingAttributeValue.PictureId = mergedPicture.Item1; existingAttributeValue.ImageSquaresPictureId = logo.PictureId; _productAttributeService.UpdateProductAttributeValue(existingAttributeValue); //update product picture existingProductPicture.PictureId = mergedPicture.Item1; _productService.UpdateProductPicture(existingProductPicture); return(Json(new { Result = true, AttributeId = logo.AttributeValueId })); } //Insert the image as product picture _productService.InsertProductPicture(new ProductPicture { ProductId = logo.ProductId, PictureId = mergedPicture.Item1, DisplayOrder = ProductPictureModifierDefault.MergedPictureDisplayOrder }); ProductAttribute logoAttribute = _productPictureModifierService .GetProductAttributeByName(ProductPictureModifierDefault.ProductAttributeNameForLogo) .FirstOrDefault() ?? throw new ArgumentException("Product Attribute Not Found"); //get product's attribute for predefined logo attributes ProductAttributeMapping logoProductMapping = _productAttributeService .GetProductAttributeMappingsByProductId(logo.ProductId) .FirstOrDefault(x => x.ProductAttributeId == logoAttribute.Id); //create the mapping if it does not exist if (logoProductMapping == null) { logoProductMapping = new ProductAttributeMapping { ProductAttributeId = logoAttribute.Id, ProductId = logo.ProductId, AttributeControlTypeId = (int)AttributeControlType.ImageSquares }; _productAttributeService.InsertProductAttributeMapping(logoProductMapping); ////no logo attribute ////todo find a way to use the picture for this //_productAttributeService.InsertProductAttributeValue(new ProductAttributeValue //{ // ProductAttributeMappingId = logoProductMapping.Id, // AttributeValueType = AttributeValueType.Simple, // Name = _localizationService.GetResource("Widgets.ProductPictureModifier.Attributes.NoLogo"), // ImageSquaresPictureId = 1, // PictureId = productPicture.PictureId, //}); //provision for manual upload by user Setting customUploadIconSetting = _settingService .GetSetting(ProductPictureModifierDefault.UploadIconPictureIdSetting); var customUploadForLogoAttribute = new ProductAttributeValue { ProductAttributeMappingId = logoProductMapping.Id, AttributeValueType = AttributeValueType.Simple, Name = _localizationService.GetResource("Widgets.ProductPictureModifier.Attributes.Upload"), ImageSquaresPictureId = int.Parse(customUploadIconSetting.Value), }; _productAttributeService.InsertProductAttributeValue(customUploadForLogoAttribute); ProductAttribute productAttributeForCustomUpload = _productPictureModifierService .GetProductAttributeByName(ProductPictureModifierDefault.ProductAttributeNameForLogoUpload) .FirstOrDefault() ?? throw new ArgumentException("Product Attribute Not Found for Custom Upload"); //custom upload attribute mapping with product based on condition var customUploadProductAttributeMapping = new ProductAttributeMapping { ProductAttributeId = productAttributeForCustomUpload.Id, ProductId = logo.ProductId, AttributeControlTypeId = (int)AttributeControlType.FileUpload, ValidationFileAllowedExtensions = "png", ConditionAttributeXml = _productAttributeParser.AddProductAttribute(null, logoProductMapping, customUploadForLogoAttribute.Id.ToString()) }; _productAttributeService.InsertProductAttributeMapping(customUploadProductAttributeMapping); } //save the actual logo attribute var productAttributeValue = new ProductAttributeValue { ProductAttributeMappingId = logoProductMapping.Id, AttributeValueType = AttributeValueType.Simple, Name = "Custom Logo", ImageSquaresPictureId = logo.PictureId, PictureId = mergedPicture.Item1, }; _productAttributeService.InsertProductAttributeValue(productAttributeValue); //Logo Position for custom upload LogoPosition logoPosition = _logoPositionService.GetByProductId(logo.ProductId); if (logo.MarkAsDefault || IsLogoSettingNew(logoPosition)) { logoPosition.Size = logo.Size; logoPosition.XCoordinate = logo.XCoordinate; logoPosition.YCoordinate = logo.YCoordinate; logoPosition.Opacity = logo.Opacity; _logoPositionService.Update(logoPosition); } return(Json(new { Result = true, AttributeId = productAttributeValue.Id })); }
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 })); }