public virtual async Task PrepareVendorReviewModel(VendorReviewModel model, VendorReview vendorReview, bool excludeProperties, bool formatReviewText) { if (model == null) throw new ArgumentNullException("model"); if (vendorReview == null) throw new ArgumentNullException("vendorReview"); var vendor = await _vendorService.GetVendorById(vendorReview.VendorId); var customer = await _customerService.GetCustomerById(vendorReview.CustomerId); model.Id = vendorReview.Id; model.VendorId = vendorReview.VendorId; model.VendorName = vendor.Name; model.CustomerId = vendorReview.CustomerId; model.CustomerInfo = customer != null ? customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest") : ""; model.Rating = vendorReview.Rating; model.CreatedOn = _dateTimeHelper.ConvertToUserTime(vendorReview.CreatedOnUtc, DateTimeKind.Utc); if (!excludeProperties) { model.Title = vendorReview.Title; if (formatReviewText) model.ReviewText = FormatText.ConvertText(vendorReview.ReviewText); else model.ReviewText = vendorReview.ReviewText; model.IsApproved = vendorReview.IsApproved; } }
/// <summary> /// Formats the order note text /// </summary> /// <param name="orderNote">Order note</param> /// <returns>Formatted text</returns> public static string FormatOrderNoteText(this OrderNote orderNote) { if (orderNote == null) throw new ArgumentNullException("orderNote"); return FormatText.ConvertText(orderNote.Note); }
public async Task <bool> Handle(SendProductAskQuestionMessageCommand request, CancellationToken cancellationToken) { await _workflowMessageService.SendProductQuestionMessage(request.Customer, request.Store, request.Language.Id, request.Product, request.Model.Email, request.Model.FullName, request.Model.Phone, FormatText.ConvertText(request.Model.Message)); return(true); }
public static string FormatReturnRequestNoteText(this ReturnRequestNote returnRequestNote) { if (returnRequestNote == null) { throw new ArgumentNullException("returnRequestNote"); } return(FormatText.ConvertText(returnRequestNote.Note)); }
/// <summary> /// Formats the vendor note text /// </summary> /// <param name="vendorNote">Vendor note</param> /// <returns>Formatted text</returns> public static string FormatVendorNoteText(this VendorNote vendorNote) { if (vendorNote == null) { throw new ArgumentNullException("vendorNote"); } return(FormatText.ConvertText(vendorNote.Note)); }
/// <summary> /// Formats the order note text /// </summary> /// <param name="orderNote">Order note</param> /// <returns>Formatted text</returns> public static string FormatOrderNoteText(this ShipmentNote shipmentNote) { if (shipmentNote == null) { throw new ArgumentNullException("orderNote"); } return(FormatText.ConvertText(shipmentNote.Note)); }
/// <summary> /// Formats the customer note text /// </summary> /// <param name="customerNote">Customer note</param> /// <returns>Formatted text</returns> public static string FormatCustomerNoteText(this CustomerNote customerNote) { if (customerNote == null) { throw new ArgumentNullException("customerNote"); } return(FormatText.ConvertText(customerNote.Note)); }
public async Task <bool> Handle(SendProductEmailAFriendMessageCommand request, CancellationToken cancellationToken) { await _messageProviderService.SendProductEmailAFriendMessage(request.Customer, request.Store, request.Language.Id, request.Product, request.Model.YourEmailAddress, request.Model.FriendEmail, FormatText.ConvertText(request.Model.PersonalMessage)); return(true); }
public async Task <ContactVendorModel> Handle(ContactVendorSendCommand request, CancellationToken cancellationToken) { var subject = _commonSettings.SubjectFieldOnContactUsForm ? request.Model.Subject : null; var body = FormatText.ConvertText(request.Model.Enquiry); await _workflowMessageService.SendContactVendorMessage(_workContext.CurrentCustomer, request.Store, request.Vendor, _workContext.WorkingLanguage.Id, request.Model.Email.Trim(), request.Model.FullName, subject, body); request.Model.SuccessfullySent = true; request.Model.Result = _localizationService.GetResource("ContactVendor.YourEnquiryHasBeenSent"); return(request.Model); }
public virtual async Task PrepareProductReviewModel(ProductReviewModel model, ProductReview productReview, bool excludeProperties, bool formatReviewText) { if (model == null) { throw new ArgumentNullException("model"); } if (productReview == null) { throw new ArgumentNullException("productReview"); } var product = await _productService.GetProductById(productReview.ProductId); var customer = await _customerService.GetCustomerById(productReview.CustomerId); var store = await _storeService.GetStoreById(productReview.StoreId); model.Id = productReview.Id; model.StoreName = store != null ? store.Shortcut : ""; model.ProductId = productReview.ProductId; model.ProductName = product.Name; model.CustomerId = productReview.CustomerId; model.CustomerInfo = customer != null?customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest") : ""; model.Rating = productReview.Rating; model.CreatedOn = _dateTimeHelper.ConvertToUserTime(productReview.CreatedOnUtc, DateTimeKind.Utc); model.Signature = productReview.Signature; if (!excludeProperties) { model.Title = productReview.Title; if (formatReviewText) { model.ReviewText = FormatText.ConvertText(productReview.ReviewText); model.ReplyText = FormatText.ConvertText(productReview.ReplyText); } else { model.ReviewText = productReview.ReviewText; model.ReplyText = productReview.ReplyText; } model.IsApproved = productReview.IsApproved; } }
public virtual async Task PrepareVendorReviewModel(VendorReviewModel model, VendorReview vendorReview, bool excludeProperties, bool formatReviewText) { if (model == null) { throw new ArgumentNullException(nameof(model)); } if (vendorReview == null) { throw new ArgumentNullException(nameof(vendorReview)); } var vendor = await _vendorService.GetVendorById(vendorReview.VendorId); var customer = await _customerService.GetCustomerById(vendorReview.CustomerId); model.Id = vendorReview.Id; model.VendorId = vendorReview.VendorId; model.VendorName = vendor.Name; model.CustomerId = vendorReview.CustomerId; model.CustomerInfo = customer != null ? !string.IsNullOrEmpty(customer.Email) ? customer.Email : _translationService.GetResource("Admin.Customers.Guest") : ""; model.Rating = vendorReview.Rating; model.CreatedOn = _dateTimeService.ConvertToUserTime(vendorReview.CreatedOnUtc, DateTimeKind.Utc); if (!excludeProperties) { model.Title = vendorReview.Title; if (formatReviewText) { model.ReviewText = FormatText.ConvertText(vendorReview.ReviewText); } else { model.ReviewText = vendorReview.ReviewText; } model.IsApproved = vendorReview.IsApproved; } }
public virtual async Task <(IEnumerable <NewsCommentModel> newsCommentModels, int totalCount)> PrepareNewsCommentModel(string filterByNewsItemId, int pageIndex, int pageSize) { IList <NewsComment> comments; if (!String.IsNullOrEmpty(filterByNewsItemId)) { //filter comments by news item var newsItem = await _newsService.GetNewsById(filterByNewsItemId); comments = newsItem.NewsComments.OrderBy(bc => bc.CreatedOnUtc).ToList(); } else { //load all news comments comments = await _newsService.GetAllComments(""); } var customerService = _serviceProvider.GetRequiredService <ICustomerService>(); var items = new List <NewsCommentModel>(); foreach (var newsComment in comments.PagedForCommand(pageIndex, pageSize)) { var commentModel = new NewsCommentModel { Id = newsComment.Id, NewsItemId = newsComment.NewsItemId, NewsItemTitle = (await _newsService.GetNewsById(newsComment.NewsItemId))?.Title, CustomerId = newsComment.CustomerId }; var customer = await customerService.GetCustomerById(newsComment.CustomerId); commentModel.CustomerInfo = customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest"); commentModel.CreatedOn = _dateTimeHelper.ConvertToUserTime(newsComment.CreatedOnUtc, DateTimeKind.Utc); commentModel.CommentTitle = newsComment.CommentTitle; commentModel.CommentText = FormatText.ConvertText(newsComment.CommentText); items.Add(commentModel); } return(items, comments.Count); }
public virtual async Task <(IEnumerable <BlogCommentModel> blogComments, int totalCount)> PrepareBlogPostCommentsModel(string filterByBlogPostId, int pageIndex, int pageSize) { IList <BlogComment> comments; var storeId = string.IsNullOrEmpty(_workContext.CurrentCustomer.StaffStoreId) ? "" : _workContext.CurrentCustomer.StaffStoreId; if (!string.IsNullOrEmpty(filterByBlogPostId)) { //filter comments by blog var blogPost = await _blogService.GetBlogPostById(filterByBlogPostId); comments = await _blogService.GetBlogCommentsByBlogPostId(blogPost.Id); } else { //load all blog comments comments = await _blogService.GetAllComments("", storeId); } var commentsList = new List <BlogCommentModel>(); foreach (var blogComment in comments.Skip((pageIndex - 1) * pageSize).Take(pageSize)) { var commentModel = new BlogCommentModel { Id = blogComment.Id, BlogPostId = blogComment.BlogPostId, BlogPostTitle = blogComment.BlogPostTitle, CustomerId = blogComment.CustomerId }; var customer = await _customerService.GetCustomerById(blogComment.CustomerId); commentModel.CustomerInfo = !string.IsNullOrEmpty(customer.Email) ? customer.Email : _translationService.GetResource("Admin.Customers.Guest"); commentModel.CreatedOn = _dateTimeService.ConvertToUserTime(blogComment.CreatedOnUtc, DateTimeKind.Utc); commentModel.Comment = FormatText.ConvertText(blogComment.CommentText); commentsList.Add(commentModel); } return(commentsList, comments.Count); }
/// <summary> /// Formats attributes /// </summary> /// <param name="customAttributes">Attributes</param> /// <param name="customer">Customer</param> /// <param name="serapator">Serapator</param> /// <param name="htmlEncode">A value indicating whether to encode (HTML) values</param> /// <param name="renderPrices">A value indicating whether to render prices</param> /// <param name="allowHyperlinks">A value indicating whether to HTML hyperink tags could be rendered (if required)</param> /// <returns>Attributes</returns> public virtual async Task <string> FormatAttributes(IList <CustomAttribute> customAttributes, Customer customer, string serapator = "<br />", bool htmlEncode = true, bool renderPrices = true, bool allowHyperlinks = true) { var result = new StringBuilder(); if (customAttributes == null || !customAttributes.Any()) { return(result.ToString()); } var attributes = await _checkoutAttributeParser.ParseCheckoutAttributes(customAttributes); for (int i = 0; i < attributes.Count; i++) { var attribute = attributes[i]; var valuesStr = customAttributes.Where(x => x.Key == attribute.Id).Select(x => x.Value).ToList(); for (var j = 0; j < valuesStr.Count; j++) { var valueStr = valuesStr[j]; var formattedAttribute = ""; if (!attribute.ShouldHaveValues()) { //no values if (attribute.AttributeControlTypeId == AttributeControlType.MultilineTextbox) { //multiline textbox var attributeName = attribute.GetTranslation(a => a.Name, _workContext.WorkingLanguage.Id); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, FormatText.ConvertText(valueStr)); //we never encode multiline textbox input } else if (attribute.AttributeControlTypeId == AttributeControlType.FileUpload) { //file upload Guid downloadGuid; Guid.TryParse(valueStr, out downloadGuid); var download = await _downloadService.GetDownloadByGuid(downloadGuid); if (download != null) { string attributeText = ""; var fileName = string.Format("{0}{1}", download.Filename ?? download.DownloadGuid.ToString(), download.Extension); //encode (if required) if (htmlEncode) { fileName = WebUtility.HtmlEncode(fileName); } if (allowHyperlinks) { //hyperlinks are allowed var downloadLink = string.Format("{0}/download/getfileupload/?downloadId={1}", _workContext.CurrentStore.Url.TrimEnd('/'), download.DownloadGuid); attributeText = string.Format("<a href=\"{0}\" class=\"fileuploadattribute\">{1}</a>", downloadLink, fileName); } else { //hyperlinks aren't allowed attributeText = fileName; } var attributeName = attribute.GetTranslation(a => a.Name, _workContext.WorkingLanguage.Id); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, attributeText); } } else { //other attributes (textbox, datepicker) formattedAttribute = string.Format("{0}: {1}", attribute.GetTranslation(a => a.Name, _workContext.WorkingLanguage.Id), valueStr); //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } else { var attributeValue = attribute.CheckoutAttributeValues.Where(x => x.Id == valueStr).FirstOrDefault(); if (attributeValue != null) { formattedAttribute = string.Format("{0}: {1}", attribute.GetTranslation(a => a.Name, _workContext.WorkingLanguage.Id), attributeValue.GetTranslation(a => a.Name, _workContext.WorkingLanguage.Id)); if (renderPrices) { double priceAdjustmentBase = (await _taxService.GetCheckoutAttributePrice(attribute, attributeValue, customer)).checkoutPrice; double priceAdjustment = await _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency); if (priceAdjustmentBase > 0) { string priceAdjustmentStr = _priceFormatter.FormatPrice(priceAdjustment); formattedAttribute += string.Format(" [+{0}]", priceAdjustmentStr); } } } //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } if (!String.IsNullOrEmpty(formattedAttribute)) { if (i != 0 || j != 0) { result.Append(serapator); } result.Append(formattedAttribute); } } } return(result.ToString()); }
private async Task <StringBuilder> PrepareFormattedAttribute(Product product, IList <CustomAttribute> customAttributes, string langId, string serapator, bool htmlEncode, bool renderPrices, bool allowHyperlinks, bool showInAdmin) { var result = new StringBuilder(); var attributes = _productAttributeParser.ParseProductAttributeMappings(product, customAttributes); for (int i = 0; i < attributes.Count; i++) { var productAttribute = await _productAttributeService.GetProductAttributeById(attributes[i].ProductAttributeId); var attribute = attributes[i]; var valuesStr = _productAttributeParser.ParseValues(customAttributes, attribute.Id); for (int j = 0; j < valuesStr.Count; j++) { string valueStr = valuesStr[j]; string formattedAttribute = string.Empty; if (!attribute.ShouldHaveValues()) { //no values if (attribute.AttributeControlType == AttributeControlType.MultilineTextbox) { //multiline textbox var attributeName = productAttribute.GetLocalized(a => a.Name, langId); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, FormatText.ConvertText(valueStr)); //we never encode multiline textbox input } else if (attribute.AttributeControlType == AttributeControlType.FileUpload) { //file upload Guid downloadGuid; Guid.TryParse(valueStr, out downloadGuid); var download = await _downloadService.GetDownloadByGuid(downloadGuid); if (download != null) { //TODO add a method for getting URL (use routing because it handles all SEO friendly URLs) string attributeText = ""; var fileName = string.Format("{0}{1}", download.Filename ?? download.DownloadGuid.ToString(), download.Extension); //encode (if required) if (htmlEncode) { fileName = WebUtility.HtmlEncode(fileName); } if (allowHyperlinks) { //hyperlinks are allowed var downloadLink = string.Format("{0}download/getfileupload/?downloadId={1}", _webHelper.GetStoreLocation(false), download.DownloadGuid); attributeText = string.Format("<a href=\"{0}\" class=\"fileuploadattribute\">{1}</a>", downloadLink, fileName); } else { //hyperlinks aren't allowed attributeText = fileName; } var attributeName = productAttribute.GetLocalized(a => a.Name, langId); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, attributeText); } } else { //other attributes (textbox, datepicker) formattedAttribute = string.Format("{0}: {1}", productAttribute.GetLocalized(a => a.Name, langId), valueStr); //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } else { //attributes with values if (product.ProductAttributeMappings.Where(x => x.Id == attributes[i].Id).FirstOrDefault() != null) { var attributeValue = product.ProductAttributeMappings.Where(x => x.Id == attributes[i].Id).FirstOrDefault().ProductAttributeValues.Where(x => x.Id == valueStr).FirstOrDefault(); if (attributeValue != null) { formattedAttribute = string.Format("{0}: {1}", productAttribute.GetLocalized(a => a.Name, langId), attributeValue.GetLocalized(a => a.Name, langId)); if (renderPrices) { decimal attributeValuePriceAdjustment = await _priceCalculationService.GetProductAttributeValuePriceAdjustment(attributeValue); var prices = await _taxService.GetProductPrice(product, attributeValuePriceAdjustment, _workContext.CurrentCustomer); decimal priceAdjustmentBase = prices.productprice; decimal taxRate = prices.taxRate; decimal priceAdjustment = await _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency); if (priceAdjustmentBase > 0) { string priceAdjustmentStr = _priceFormatter.FormatPrice(priceAdjustment, false, false); formattedAttribute += string.Format(" [+{0}]", priceAdjustmentStr); } else if (priceAdjustmentBase < decimal.Zero) { string priceAdjustmentStr = _priceFormatter.FormatPrice(-priceAdjustment, false, false); formattedAttribute += string.Format(" [-{0}]", priceAdjustmentStr); } } //display quantity if (_shoppingCartSettings.RenderAssociatedAttributeValueQuantity && attributeValue.AttributeValueType == AttributeValueType.AssociatedToProduct) { //render only when more than 1 if (attributeValue.Quantity > 1) { //TODO localize resource formattedAttribute += string.Format(" - qty {0}", attributeValue.Quantity); } } } else { if (showInAdmin) { formattedAttribute += string.Format("{0}: {1}", productAttribute.GetLocalized(a => a.Name, langId), ""); } } //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } if (!string.IsNullOrEmpty(formattedAttribute)) { if (i != 0 || j != 0) { result.Append(serapator); } result.Append(formattedAttribute); } } } return(result); }
public virtual async Task <IActionResult> Info(VendorInfoModel model, IFormFile uploadedFile) { if (!_workContext.CurrentCustomer.IsRegistered()) { return(Challenge()); } if (_workContext.CurrentVendor == null || !_vendorSettings.AllowVendorsToEditInfo) { return(RedirectToRoute("CustomerInfo")); } string pictureId = string.Empty; string contentType = string.Empty; byte[] vendorPictureBinary = null; if (uploadedFile != null && !string.IsNullOrEmpty(uploadedFile.FileName)) { try { contentType = uploadedFile.ContentType; if (string.IsNullOrEmpty(contentType)) { ModelState.AddModelError("", "Empty content type"); } else if (!contentType.StartsWith("image")) { ModelState.AddModelError("", "Only image content type is allowed"); } vendorPictureBinary = uploadedFile.GetPictureBits(); } catch (Exception) { ModelState.AddModelError("", _localizationService.GetResource("Account.VendorInfo.Picture.ErrorMessage")); } } var vendor = _workContext.CurrentVendor; var prevPicture = await _pictureService.GetPictureById(vendor.PictureId); if (ModelState.IsValid && ModelState.ErrorCount == 0) { var description = FormatText.ConvertText(model.Description); vendor.Name = model.Name; vendor.Email = model.Email; vendor.Description = description; if (vendorPictureBinary != null && !string.IsNullOrEmpty(contentType)) { var picture = await _pictureService.InsertPicture(vendorPictureBinary, contentType, null); if (picture != null) { vendor.PictureId = picture.Id; } } if (prevPicture != null) { await _pictureService.DeletePicture(prevPicture); } //update picture seo file name await UpdatePictureSeoNames(vendor); model.Address.ToEntity(vendor.Address, true); await _vendorService.UpdateVendor(vendor); //notifications if (_vendorSettings.NotifyStoreOwnerAboutVendorInformationChange) { await _workflowMessageService.SendVendorInformationChangeNotification(vendor, _storeContext.CurrentStore, _localizationSettings.DefaultAdminLanguageId); } return(RedirectToAction("Info")); } var countries = await _countryService.GetAllCountries(_workContext.WorkingLanguage.Id); model.Address = await _mediator.Send(new GetVendorAddress() { Language = _workContext.WorkingLanguage, Model = model.Address, Address = vendor.Address, ExcludeProperties = false, LoadCountries = () => countries, }); return(View(model)); }
public virtual async Task <IActionResult> ApplyVendorSubmit(ApplyVendorModel model, bool captchaValid, IFormFile uploadedFile) { if (!_vendorSettings.AllowCustomersToApplyForVendorAccount) { return(RedirectToRoute("HomePage")); } if (!_workContext.CurrentCustomer.IsRegistered()) { return(Challenge()); } //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnApplyVendorPage && !captchaValid) { ModelState.AddModelError("", _captchaSettings.GetWrongCaptchaMessage(_localizationService)); } string pictureId = string.Empty; string contentType = string.Empty; byte[] vendorPictureBinary = null; if (uploadedFile != null && !string.IsNullOrEmpty(uploadedFile.FileName)) { try { contentType = uploadedFile.ContentType; if (string.IsNullOrEmpty(contentType)) { ModelState.AddModelError("", "Empty content type"); } else if (!contentType.StartsWith("image")) { ModelState.AddModelError("", "Only image content type is allowed"); } vendorPictureBinary = uploadedFile.GetPictureBits(); } catch (Exception) { ModelState.AddModelError("", _localizationService.GetResource("Vendors.ApplyAccount.Picture.ErrorMessage")); } } if (ModelState.IsValid) { if (vendorPictureBinary != null && !string.IsNullOrEmpty(contentType)) { var picture = await _pictureService.InsertPicture(vendorPictureBinary, contentType, null); if (picture != null) { pictureId = picture.Id; } } var description = FormatText.ConvertText(model.Description); var address = new Address(); //disabled by default var vendor = new Vendor { Name = model.Name, Email = model.Email, Description = description, PageSize = 6, PictureId = pictureId, AllowCustomersToSelectPageSize = true, PageSizeOptions = _vendorSettings.DefaultVendorPageSizeOptions, AllowCustomerReviews = _vendorSettings.DefaultAllowCustomerReview, }; model.Address.ToEntity(vendor.Address, true); await _vendorService.InsertVendor(vendor); //search engine name (the same as vendor name) var seName = await vendor.ValidateSeName(vendor.Name, vendor.Name, true, HttpContext.RequestServices.GetRequiredService <SeoSettings>(), HttpContext.RequestServices.GetRequiredService <IUrlRecordService>(), HttpContext.RequestServices.GetRequiredService <ILanguageService>()); await _urlRecordService.SaveSlug(vendor, seName, ""); //associate to the current customer //but a store owner will have to manually add this customer role to "Vendors" role //if he wants to grant access to admin area _workContext.CurrentCustomer.VendorId = vendor.Id; await _customerService.UpdateCustomerVendor(_workContext.CurrentCustomer); //notify store owner here (email) await _workflowMessageService.SendNewVendorAccountApplyStoreOwnerNotification(_workContext.CurrentCustomer, vendor, _storeContext.CurrentStore, _localizationSettings.DefaultAdminLanguageId); model.DisableFormInput = true; model.Result = _localizationService.GetResource("Vendors.ApplyAccount.Submitted"); return(View(model)); } //If we got this far, something failed, redisplay form model.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnApplyVendorPage; model.TermsOfServiceEnabled = _vendorSettings.TermsOfServiceEnabled; model.TermsOfServicePopup = _commonSettings.PopupForTermsOfServiceLinks; var countries = await _countryService.GetAllCountries(_workContext.WorkingLanguage.Id); model.Address = await _mediator.Send(new GetVendorAddress() { Language = _workContext.WorkingLanguage, Address = null, Model = model.Address, ExcludeProperties = false, PrePopulateWithCustomerFields = true, Customer = _workContext.CurrentCustomer, LoadCountries = () => countries, }); return(View(model)); }
public virtual async Task <IActionResult> EmailWishlist(WishlistEmailAFriendModel model, bool captchaValid, [FromServices] IMessageProviderService messageProviderService, [FromServices] CaptchaSettings captchaSettings) { if (!await _permissionService.Authorize(StandardPermission.EnableWishlist) || !_shoppingCartSettings.EmailWishlistEnabled) { return(RedirectToRoute("HomePage")); } var cart = _shoppingCartService.GetShoppingCart(_workContext.CurrentStore.Id, ShoppingCartType.Wishlist); if (!cart.Any()) { return(RedirectToRoute("HomePage")); } //validate CAPTCHA if (captchaSettings.Enabled && captchaSettings.ShowOnEmailWishlistToFriendPage && !captchaValid) { ModelState.AddModelError("", captchaSettings.GetWrongCaptchaMessage(_translationService)); } //check whether the current customer is guest and ia allowed to email wishlist if (await _groupService.IsGuest(_workContext.CurrentCustomer) && !_shoppingCartSettings.AllowAnonymousUsersToEmailWishlist) { ModelState.AddModelError("", _translationService.GetResource("Wishlist.EmailAFriend.OnlyRegisteredUsers")); } if (ModelState.IsValid) { //email await messageProviderService.SendWishlistEmailAFriendMessage(_workContext.CurrentCustomer, _workContext.CurrentStore, _workContext.WorkingLanguage.Id, model.YourEmailAddress, model.FriendEmail, FormatText.ConvertText(model.PersonalMessage)); model.SuccessfullySent = true; model.Result = _translationService.GetResource("Wishlist.EmailAFriend.SuccessfullySent"); return(View(model)); } //If we got this far, something failed, redisplay form model.DisplayCaptcha = captchaSettings.Enabled && captchaSettings.ShowOnEmailWishlistToFriendPage; return(View(model)); }
/// <summary> /// Formats attributes /// </summary> /// <param name="language">Language</param> /// <param name="customAttributes">Attributes </param> /// <param name="customer">Customer</param> /// <param name="serapator">Serapator</param> /// <param name="htmlEncode">A value indicating whether to encode (HTML) values</param> /// <param name="allowHyperlinks">A value indicating whether to HTML hyperink tags could be rendered (if required)</param> /// <returns>Attributes</returns> public virtual async Task <string> FormatAttributes( Language language, IList <CustomAttribute> customAttributes, Customer customer, string serapator = "<br />", bool htmlEncode = true, bool allowHyperlinks = true) { var result = new StringBuilder(); if (customAttributes == null || !customAttributes.Any()) { return(result.ToString()); } var attributes = await ParseContactAttributes(customAttributes); for (var i = 0; i < attributes.Count; i++) { var attribute = attributes[i]; var valuesStr = customAttributes.Where(x => x.Key == attribute.Id).Select(x => x.Value).ToList(); for (int j = 0; j < valuesStr.Count; j++) { string valueStr = valuesStr[j]; string formattedAttribute = ""; if (!attribute.ShouldHaveValues()) { //no values if (attribute.AttributeControlType == AttributeControlType.MultilineTextbox) { //multiline textbox var attributeName = attribute.GetLocalized(a => a.Name, language.Id); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, FormatText.ConvertText(valueStr)); //we never encode multiline textbox input } else if (attribute.AttributeControlType == AttributeControlType.FileUpload) { //file upload Guid downloadGuid; Guid.TryParse(valueStr, out downloadGuid); var download = await _downloadService.GetDownloadByGuid(downloadGuid); if (download != null) { //TODO add a method for getting URL (use routing because it handles all SEO friendly URLs) string attributeText = ""; var fileName = string.Format("{0}{1}", download.Filename ?? download.DownloadGuid.ToString(), download.Extension); //encode (if required) if (htmlEncode) { fileName = WebUtility.HtmlEncode(fileName); } if (allowHyperlinks) { //hyperlinks are allowed var downloadLink = string.Format("{0}download/getfileupload/?downloadId={1}", _webHelper.GetStoreLocation(), download.DownloadGuid); attributeText = string.Format("<a href=\"{0}\" class=\"fileuploadattribute\">{1}</a>", downloadLink, fileName); } else { //hyperlinks aren't allowed attributeText = fileName; } var attributeName = attribute.GetLocalized(a => a.Name, language.Id); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, attributeText); } } else { //other attributes (textbox, datepicker) formattedAttribute = string.Format("{0}: {1}", attribute.GetLocalized(a => a.Name, language.Id), valueStr); //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } else { var attributeValue = attribute.ContactAttributeValues.Where(x => x.Id == valueStr).FirstOrDefault(); if (attributeValue != null) { formattedAttribute = string.Format("{0}: {1}", attribute.GetLocalized(a => a.Name, language.Id), attributeValue.GetLocalized(a => a.Name, language.Id)); } //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } if (!string.IsNullOrEmpty(formattedAttribute)) { if (i != 0 || j != 0) { result.Append(serapator); } result.Append(formattedAttribute); } } } return(result.ToString()); }
/// <summary> /// Formats attributes /// </summary> /// <param name="language">Languages</param> /// <param name="attributes">Attributes</param> /// <param name="serapator">Serapator</param> /// <param name="htmlEncode">A value indicating whether to encode (HTML) values</param> /// <returns>Attributes</returns> public virtual async Task <string> FormatAttributes( Language language, IList <CustomAttribute> customAttributes, string serapator = "<br />", bool htmlEncode = true) { var result = new StringBuilder(); if (customAttributes == null) { return(result.ToString()); } var attributes = await ParseAddressAttributes(customAttributes); for (int i = 0; i < attributes.Count; i++) { var attribute = attributes[i]; var valuesStr = customAttributes.Where(x => x.Key == attribute.Id).Select(x => x.Value).ToList(); for (int j = 0; j < valuesStr.Count; j++) { string valueStr = valuesStr[j]; string formattedAttribute = ""; if (!attribute.ShouldHaveValues()) { //no values if (attribute.AttributeControlType == AttributeControlType.MultilineTextbox) { //multiline textbox var attributeName = attribute.GetTranslation(a => a.Name, language.Id); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, FormatText.ConvertText(valueStr)); //we never encode multiline textbox input } else if (attribute.AttributeControlType == AttributeControlType.FileUpload) { //file upload //not supported for address attributes } else { //other attributes (textbox, datepicker) formattedAttribute = string.Format("{0}: {1}", attribute.GetTranslation(a => a.Name, language.Id), valueStr); //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } else { string attributeValueId = valueStr; var attributeValue = attribute.AddressAttributeValues.FirstOrDefault(x => x.Id == attributeValueId); if (attributeValue != null) { formattedAttribute = string.Format("{0}: {1}", attribute.GetTranslation(a => a.Name, language.Id), attributeValue.GetTranslation(a => a.Name, language.Id)); } //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } if (!string.IsNullOrEmpty(formattedAttribute)) { if (i != 0 || j != 0) { result.Append(serapator); } result.Append(formattedAttribute); } } } return(result.ToString()); }
private async Task <StringBuilder> PrepareFormattedAttribute(Product product, IList <CustomAttribute> customAttributes, string langId, string serapator, bool htmlEncode, bool renderPrices, bool allowHyperlinks, bool showInAdmin) { var result = new StringBuilder(); var attributes = _productAttributeParser.ParseProductAttributeMappings(product, customAttributes); for (int i = 0; i < attributes.Count; i++) { var productAttribute = await _productAttributeService.GetProductAttributeById(attributes[i].ProductAttributeId); var attribute = attributes[i]; var valuesStr = _productAttributeParser.ParseValues(customAttributes, attribute.Id); for (int j = 0; j < valuesStr.Count; j++) { string valueStr = valuesStr[j]; string formattedAttribute = string.Empty; if (!attribute.ShouldHaveValues()) { //no values if (attribute.AttributeControlTypeId == AttributeControlType.MultilineTextbox) { //multiline textbox var attributeName = productAttribute.GetTranslation(a => a.Name, langId); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, FormatText.ConvertText(valueStr)); //we never encode multiline textbox input } else if (attribute.AttributeControlTypeId == AttributeControlType.FileUpload) { //file upload Guid downloadGuid; Guid.TryParse(valueStr, out downloadGuid); var download = await _downloadService.GetDownloadByGuid(downloadGuid); if (download != null) { string attributeText = ""; var fileName = string.Format("{0}{1}", download.Filename ?? download.DownloadGuid.ToString(), download.Extension); if (htmlEncode) { fileName = WebUtility.HtmlEncode(fileName); } if (allowHyperlinks) { var downloadLink = string.Format("{0}/download/getfileupload/?downloadId={1}", _workContext.CurrentStore.Url.TrimEnd('/'), download.DownloadGuid); attributeText = string.Format("<a href=\"{0}\" class=\"fileuploadattribute\">{1}</a>", downloadLink, fileName); } else { //hyperlinks aren't allowed attributeText = fileName; } var attributeName = productAttribute.GetTranslation(a => a.Name, langId); //encode (if required) if (htmlEncode) { attributeName = WebUtility.HtmlEncode(attributeName); } formattedAttribute = string.Format("{0}: {1}", attributeName, attributeText); } } else { //other attributes (textbox, datepicker) formattedAttribute = string.Format("{0}: {1}", productAttribute.GetTranslation(a => a.Name, langId), valueStr); //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } else { //attributes with values if (product.ProductAttributeMappings.Where(x => x.Id == attributes[i].Id).FirstOrDefault() != null) { var attributeValue = product.ProductAttributeMappings.Where(x => x.Id == attributes[i].Id).FirstOrDefault().ProductAttributeValues.Where(x => x.Id == valueStr).FirstOrDefault(); if (attributeValue != null) { formattedAttribute = string.Format("{0}: {1}", productAttribute.GetTranslation(a => a.Name, langId), attributeValue.GetTranslation(a => a.Name, langId)); if (renderPrices) { decimal attributeValuePriceAdjustment = await _pricingService.GetProductAttributeValuePriceAdjustment(attributeValue); var prices = await _taxService.GetProductPrice(product, attributeValuePriceAdjustment, _workContext.CurrentCustomer); decimal priceAdjustmentBase = prices.productprice; decimal taxRate = prices.taxRate; if (priceAdjustmentBase > 0) { string priceAdjustmentStr = _priceFormatter.FormatPrice(priceAdjustmentBase, false); formattedAttribute += string.Format(" [+{0}]", priceAdjustmentStr); } else if (priceAdjustmentBase < decimal.Zero) { string priceAdjustmentStr = _priceFormatter.FormatPrice(-priceAdjustmentBase, false); formattedAttribute += string.Format(" [-{0}]", priceAdjustmentStr); } } } else { if (showInAdmin) { formattedAttribute += string.Format("{0}: {1}", productAttribute.GetTranslation(a => a.Name, langId), ""); } } //encode (if required) if (htmlEncode) { formattedAttribute = WebUtility.HtmlEncode(formattedAttribute); } } } if (!string.IsNullOrEmpty(formattedAttribute)) { if (i != 0 || j != 0) { result.Append(serapator); } result.Append(formattedAttribute); } } } return(result); }