/// <summary> /// Initializes a new instance of the <see cref="ProductContentBase"/> class. /// </summary> /// <param name="productBase"> /// The product base. /// </param> /// <param name="contentType"> /// The content Type. /// </param> /// <param name="specificCulture"> /// Specifically sets the culture /// </param> protected ProductContentBase(ProductDisplayBase productBase, PublishedContentType contentType, string specificCulture) { Mandate.ParameterNotNull(productBase, "productBase"); _productBase = productBase; this.CultureName = specificCulture; _contentType = contentType; this.Initialize(); }
/// <summary> /// The template id. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="cultureName"> /// The culture name. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> internal static int TemplateId(this ProductDisplayBase display, string cultureName) { if (!display.DetachedContents.Any()) { return(0); } var dc = display.DetachedContentForCulture(cultureName); return(dc == null ? 0 : dc.TemplateId); }
/// <summary> /// The slug. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="cultureName"> /// The culture name. /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> internal static string Slug(this ProductDisplayBase display, string cultureName) { var defaultSlug = display.GetDefaultSlug(); if (!display.DetachedContents.Any()) { return(defaultSlug); } var dc = display.DetachedContentForCulture(cultureName); return(dc.Slug.IsNullOrWhiteSpace() ? defaultSlug : dc.Slug); }
/// <summary> /// Utility for setting the IsForBackOfficeEditor property. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="conversionType"> /// The value conversion type. /// </param> internal static void EnsureValueConversion(this ProductDisplayBase display, DetachedValuesConversionType conversionType = DetachedValuesConversionType.Db) { if (display.DetachedContents.Any()) { foreach (var dc in display.DetachedContents) { var contentType = DetachedValuesConverter.Current.GetContentTypeByKey(dc.DetachedContentType.UmbContentType.Key); if (dc.ValueConversion != conversionType) { dc.ValueConversion = conversionType; if (contentType != null) { dc.DetachedDataValues = DetachedValuesConverter.Current.Convert(contentType, dc.DetachedDataValues, conversionType); } } } } }
/// <summary> /// Adds or updates <see cref="IProductVariantDetachedContent"/>. /// </summary> /// <param name="destination"> /// The destination. /// </param> /// <param name="display"> /// The display. /// </param> internal static void AddOrUpdateDetachedContent(this IProductBase destination, ProductDisplayBase display) { if (destination.DetachedContents.Any()) { // detached content var removedLanguages = destination.DetachedContents.Where( x => !display.DetachedContents.Select(y => y.CultureName).Contains(x.CultureName)); foreach (var lang in removedLanguages) { destination.DetachedContents.RemoveItem(lang.CultureName); } } foreach (var detachedContent in display.DetachedContents.ToArray()) { IProductVariantDetachedContent pvdc; if (destination.DetachedContents.Contains(detachedContent.CultureName)) { var destContent = destination.DetachedContents[detachedContent.CultureName]; detachedContent.ToProductVariantDetachedContent(destContent); } else { var variant = display.GetType().IsAssignableFrom(typeof(ProductDisplay)) ? ((ProductDisplay)display).AsMasterVariantDisplay() : (ProductVariantDisplay)display; destination.DetachedContents.Add(detachedContent.ToProductVariantDetachedContent(variant.Key)); } } }
/// <summary> /// Adds or updates <see cref="IProductVariantDetachedContent"/>. /// </summary> /// <param name="destination"> /// The destination. /// </param> /// <param name="display"> /// The display. /// </param> internal static void AddOrUpdateDetachedContent(this IProductBase destination, ProductDisplayBase display) { if (destination.DetachedContents.Any()) { // detached content var removedLanguages = destination.DetachedContents.Where( x => !display.DetachedContents.Select(y => y.CultureName).Contains(x.CultureName)); foreach (var lang in removedLanguages) { destination.DetachedContents.RemoveItem(lang.CultureName); } } foreach (var detachedContent in display.DetachedContents.ToArray()) { if (destination.DetachedContents.Contains(detachedContent.CultureName)) { var destContent = destination.DetachedContents[detachedContent.CultureName]; detachedContent.ToProductVariantDetachedContent(destContent); } else { var variant = display.GetType().IsAssignableFrom(typeof(ProductDisplay)) ? ((ProductDisplay)display).AsMasterVariantDisplay() : (ProductVariantDisplay)display; destination.DetachedContents.Add(detachedContent.ToProductVariantDetachedContent(variant.Key)); } } }
/// <summary> /// Gets the <see cref="ProductVariantDetachedContentDisplay"/> for a given culture. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="cultureName"> /// The culture name. /// </param> /// <returns> /// The <see cref="ProductVariantDetachedContentDisplay"/>. /// </returns> internal static ProductVariantDetachedContentDisplay DetachedContentForCulture(this ProductDisplayBase display, string cultureName) { return(display.DetachedContents.Any() ? display.DetachedContents.FirstOrDefault(x => x.CultureName == cultureName) : null); }
/// <summary> /// Gets the default slug. /// </summary> /// <param name="display"> /// The display. /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> internal static string GetDefaultSlug(this ProductDisplayBase display) { return(PathHelper.ConvertToSlug(string.Format("{0}-{1}", display.Name, display.Sku))); }
/// <summary> /// Adds product base values /// </summary> /// <param name="extendedData"> /// The extended data /// </param> /// <param name="productBase"> /// The base product /// </param> private static void AddBaseProductValues(ExtendedDataCollection extendedData, ProductDisplayBase productBase) { extendedData.SetValue(Constants.ExtendedDataKeys.CostOfGoods, productBase.CostOfGoods.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Weight, productBase.Weight.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Width, productBase.Width.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Height, productBase.Height.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Length, productBase.Length.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Barcode, productBase.Barcode); extendedData.SetValue(Constants.ExtendedDataKeys.Price, productBase.Price.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.OnSale, productBase.OnSale.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Manufacturer, productBase.Manufacturer); extendedData.SetValue(Constants.ExtendedDataKeys.ManufacturerModelNumber, productBase.ManufacturerModelNumber); extendedData.SetValue(Constants.ExtendedDataKeys.SalePrice, productBase.SalePrice.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.TrackInventory, productBase.TrackInventory.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.OutOfStockPurchase, productBase.OutOfStockPurchase.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Taxable, productBase.Taxable.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Shippable, productBase.Shippable.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Download, productBase.Download.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.DownloadMediaId, productBase.DownloadMediaId.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.VersionKey, productBase.VersionKey.ToString()); }