Example #1
0
        protected string GetMediaUrl(CatalogContentBase content) // ok for making lab of it
        {
            IList <CommerceMedia> mediaList = new List <CommerceMedia>();

            // check the model type and fill up with te right stuff
            if (content.ContentType == CatalogContentType.CatalogNode)
            {
                NodeContent node = content as NodeContent;
                mediaList = node.CommerceMediaCollection;
            }

            if (content.ContentType == CatalogContentType.CatalogEntry)
            {
                EntryContentBase entry = content as EntryContentBase;
                mediaList = entry.CommerceMediaCollection; //
            }

            // just get the first
            CommerceMedia media = mediaList.FirstOrDefault(); // ...do it easy in this lab

            if (media == null)
            {
                return(String.Empty);
            }

            // load the image url, if it exist... and return it
            var contentLinkMap = linkMapper.Find(new Guid(media.AssetKey));

            if (contentLinkMap == null)
            {
                return(String.Empty);
            }

            return(contentLinkMap.MappedUrl.ToString());
        }
Example #2
0
 private static void SetMediaCollection(IAssetContainer assetContainer, CommerceMedia media)
 {
     assetContainer.CommerceMediaCollection = new ItemCollection <CommerceMedia>()
     {
         media
     };
 }
        public void Create_WhenSelectedVariationHasImageAssets_ShouldSetImagesToLinkFromImage()
        {
            var imageLink = "http://www.episerver.com";

            var fashionProduct = CreateFashionProduct();
            var fashionVariant = CreateFashionVariant();

            SetVariantsToReturn(fashionVariant);

            IContentImage contentImage;

            var imageMedia = new CommerceMedia {
                AssetLink = new ContentReference(237)
            };

            _contentLoaderMock.Setup(x => x.TryGet(imageMedia.AssetLink, out contentImage)).Returns(true);
            _urlResolverMock.Setup(x => x.GetUrl(imageMedia.AssetLink)).Returns(imageLink);

            fashionVariant.CommerceMediaCollection = new ItemCollection <CommerceMedia>()
            {
                imageMedia
            };

            var result = CreateSubject().Create(fashionProduct, fashionVariant.Code);

            Assert.Equal(imageLink, result.Images.Single());
        }
Example #4
0
        /// <param name="media">The media to remove as link</param>
        /// <param name="code">The code of the catalog content from which the <paramref name="media"/> should be removed.</param>
        private void DeleteMediaLink(MediaData media, string code)
        {
            ContentReference contentReference = _referenceConverter.GetContentLink(code);

            if (ContentReference.IsNullOrEmpty(contentReference))
            {
                return;
            }

            IAssetContainer writableContent = null;

            if (_contentRepository.TryGet(contentReference, out NodeContent nodeContent))
            {
                writableContent = nodeContent.CreateWritableClone <NodeContent>();
            }
            else if (_contentRepository.TryGet(contentReference, out EntryContentBase catalogEntry))
            {
                writableContent = catalogEntry.CreateWritableClone <EntryContentBase>();
            }

            writableContent?.CommerceMediaCollection.CreateWritableClone();
            CommerceMedia mediaToRemove = writableContent?.CommerceMediaCollection?.FirstOrDefault(x => x.AssetLink.Equals(media.ContentLink));

            if (mediaToRemove == null)
            {
                return;
            }

            writableContent.CommerceMediaCollection.Remove(mediaToRemove);
            _contentRepository.Save((IContent)writableContent, SaveAction.Publish, AccessLevel.NoAccess);
        }
Example #5
0
        private CommerceMedia CreateImageMedia(ContentReference contentLink, string imageLink)
        {
            IContentImage contentImage;

            var imageMedia = new CommerceMedia {
                AssetLink = contentLink
            };

            _mockContentLoader.Setup(x => x.TryGet(imageMedia.AssetLink, out contentImage)).Returns(true);
            _mockUrlResolver.Setup(x => x.GetUrl(imageMedia.AssetLink)).Returns(imageLink);

            return(imageMedia);
        }
Example #6
0
        protected string GetMediaUrl(CommerceMedia media)
        {
            if (media == null)
            {
                return(String.Empty);
            }
            var contentLinkMap = LinkMapper.Find(new Guid(media.AssetKey));

            if (contentLinkMap == null)
            {
                return(String.Empty);
            }
            return(contentLinkMap.MappedUrl.ToString());
        }
Example #7
0
        private void AddLinksFromMediaToCodes(IContent contentMedia, IEnumerable <EntryCode> codes)
        {
            var media = new CommerceMedia {
                AssetLink = contentMedia.ContentLink, GroupName = "default", AssetType = "episerver.core.icontentmedia"
            };

            foreach (EntryCode entryCode in codes)
            {
                ContentReference contentReference = _referenceConverter.GetContentLink(entryCode.Code);

                IAssetContainer writableContent = null;
                if (_contentRepository.TryGet(contentReference, out EntryContentBase entry))
                {
                    writableContent = (EntryContentBase)entry.CreateWritableClone();
                }

                if (_contentRepository.TryGet(contentReference, out NodeContent node))
                {
                    writableContent = (NodeContent)node.CreateWritableClone();
                }

                if (writableContent == null)
                {
                    _logger.Error($"Can't get a suitable content (with code {entryCode.Code} to add CommerceMedia to, meaning it's neither EntryContentBase nor NodeContent.");
                    continue;
                }

                CommerceMedia existingMedia = writableContent.CommerceMediaCollection.FirstOrDefault(x => x.AssetLink.Equals(media.AssetLink));
                if (existingMedia != null)
                {
                    writableContent.CommerceMediaCollection.Remove(existingMedia);
                }

                if (entryCode.IsMainPicture)
                {
                    _logger.Debug($"Setting '{contentMedia.Name}' as main media on {entryCode.Code}");
                    media.SortOrder = 0;
                    writableContent.CommerceMediaCollection.Insert(0, media);
                }
                else
                {
                    _logger.Debug($"Adding '{contentMedia.Name}' as media on {entryCode.Code}");
                    media.SortOrder = 1;
                    writableContent.CommerceMediaCollection.Add(media);
                }

                _contentRepository.Save((IContent)writableContent, SaveAction.Publish, AccessLevel.NoAccess);
            }
        }
Example #8
0
        private static string GetMediaUrl(CommerceMedia media)
        {
            if (media == null)
            {
                return String.Empty;
            }
            var _permanentLinkMapper = ServiceLocator.Current.GetInstance<PermanentLinkMapper>();

            PermanentLinkMap contentLinkMap = _permanentLinkMapper.Find(new Guid(media.AssetKey));
            if (contentLinkMap == null)
            {
                return String.Empty;
            }
            return contentLinkMap.MappedUrl.ToString();
        }
Example #9
0
        private void GetProductStuff(AdminPage currentPage)
        {
            // added using EPiServer.Commerce.Catalog.ContentTypes;
            // so we get all the nice extension methods
            string code        = "Long-Sleeve-Shirt_1";
            var    theThingRef = _referenceConverter.GetContentLink(code);

            var    theThing = _contentLoader.Get <ShirtProduct>(theThingRef);
            string assetUrl = _assetUrlResolver.GetAssetUrl(theThing);

            CommerceMedia x = theThing.CommerceMediaCollection.First();
            ItemCollection <CommerceMedia> col = theThing.CommerceMediaCollection;

            Categories y = theThing.Categories;
            IEnumerable <ContentReference> z = theThing.GetCategories();
        }
 private static void SetMediaCollection(IAssetContainer assetContainer, CommerceMedia media)
 {
     assetContainer.CommerceMediaCollection = new ItemCollection<CommerceMedia>() { media };
 }
        private CommerceMedia CreateImageMedia(ContentReference contentLink, string imageLink)
        {
            IContentImage contentImage;

            var imageMedia = new CommerceMedia { AssetLink = contentLink };
            _mockContentLoader.Setup(x => x.TryGet(imageMedia.AssetLink, out contentImage)).Returns(true);
            _mockUrlResolver.Setup(x => x.GetUrl(imageMedia.AssetLink)).Returns(imageLink);

            return imageMedia;
        }
        //public static Guid AssetId(this CommerceMedia media)
        //{
        //    return new Guid(media.AssetKey);
        //}

        public static ContentReference AssetContentLink(this CommerceMedia media, IPermanentLinkMapper permanentLinkMapper)
        {
            return(media.AssetLink);
            // return PermanentLinkUtility.FindContentReference(media.AssetLink, permanentLinkMapper);
        }
Example #13
0
        public Product BuildKaChingProduct(
            ProductContent product,
            ICollection <string> tags,
            KachingConfiguration configuration,
            string skipVariantCode)
        {
            var kachingProduct = new Product();

            kachingProduct.Id          = product.Code.SanitizeKey();
            kachingProduct.Barcode     = GetPropertyStringValue(product, configuration.SystemMappings.BarcodeMetaField);
            kachingProduct.Name        = _l10nStringFactory.GetLocalizedString(product, nameof(product.DisplayName));
            kachingProduct.Description = _l10nStringFactory.GetLocalizedString(product, configuration.SystemMappings.DescriptionMetaField);

            foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
            {
                object value = GetAttributeValue(product, mapping.MetaField);
                if (value == null)
                {
                    continue;
                }

                kachingProduct.Attributes[mapping.AttributeId] = value;
            }

            /* ---------------------------- */
            /* Example of dimension and dimension value construction from the Quicksilver site. */
            /* ---------------------------- */

            //var dimensions = new List<Dimension>();
            //var sizeDimension = new Dimension();
            //sizeDimension.Id = "Size";
            //sizeDimension.Name = new L10nString("Size");
            //sizeDimension.Values = new List<DimensionValue>();
            //foreach (var size in product.AvailableSizes)
            //{
            //    var sizeValue = new DimensionValue();
            //    sizeValue.Id = size.ToLower().Replace(' ', '_');
            //    sizeValue.Name = new L10nString(size);
            //    sizeDimension.Values.Add(sizeValue);
            //}
            //dimensions.Add(sizeDimension);

            //var colorDimension = new Dimension();
            //colorDimension.Id = "Color";
            //colorDimension.Name = new L10nString("Color");
            //colorDimension.Values = new List<DimensionValue>();
            //foreach (var color in product.AvailableColors)
            //{
            //    var colorValue = new DimensionValue();
            //    colorValue.Id = color.ToLower().Replace(' ', '_');
            //    colorValue.Name = new L10nString(color);
            //    colorDimension.Values.Add(colorValue);
            //}
            //dimensions.Add(colorDimension);

            //kachingProduct.Dimensions = dimensions;

            CommerceMedia productImage = product.CommerceMediaCollection.FirstOrDefault();

            if (productImage != null)
            {
                Uri absoluteUrl = GetAbsoluteUrl(productImage.AssetLink);
                kachingProduct.ImageUrl = absoluteUrl?.AbsoluteUri;
            }

            IEnumerable <ContentReference> variantRefs = _relationRepository
                                                         .GetChildren <ProductVariation>(product.ContentLink)
                                                         .Select(r => r.Child);

            ICollection <VariationContent> variants = _contentLoader
                                                      .GetItems(variantRefs, LanguageSelector.MasterLanguage())
                                                      .OfType <VariationContent>()
                                                      .ToArray();

            if (variants.Count == 1 &&
                configuration.ExportSingleVariantAsProduct)
            {
                // If the product has only one variant and ExportSingleVariantAsProduct is configured to true,
                // then put all variant properties on the product instead.
                var variant = variants.First();

                kachingProduct.Id      = variant.Code.SanitizeKey();
                kachingProduct.Barcode = GetPropertyStringValue(variant, configuration.SystemMappings.BarcodeMetaField);
                kachingProduct.Name    = _l10nStringFactory.GetLocalizedString(variant, nameof(variant.DisplayName));

                MarketPrice retailPrice = MarketPriceForCode(variant.Code);
                AddProductPricing(kachingProduct, product, retailPrice, configuration.SystemMappings.PriceUnitMetaField);

                foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
                {
                    object value = GetAttributeValue(variant, mapping.MetaField);
                    if (value == null)
                    {
                        continue;
                    }

                    kachingProduct.Attributes[mapping.AttributeId] = value;
                }

                if (kachingProduct.ImageUrl == null)
                {
                    CommerceMedia variantImage = variant.CommerceMediaCollection.FirstOrDefault();
                    if (variantImage != null)
                    {
                        Uri absoluteUrl = GetAbsoluteUrl(variantImage.AssetLink);
                        kachingProduct.ImageUrl = absoluteUrl?.AbsoluteUri;
                    }
                }
            }
            else if (variants.Count > 0)
            {
                var kachingVariants = new List <Variant>(variants.Count);

                foreach (var variant in variants)
                {
                    if (skipVariantCode != null &&
                        skipVariantCode == variant.Code)
                    {
                        continue;
                    }

                    var kachingVariant = new Variant();
                    kachingVariant.Id      = variant.Code.SanitizeKey();
                    kachingVariant.Barcode = GetPropertyStringValue(variant, configuration.SystemMappings.BarcodeMetaField);

                    var variantName = _l10nStringFactory.GetLocalizedString(variant, nameof(variant.DisplayName));
                    if (!variantName.Equals(kachingProduct.Name))
                    {
                        kachingVariant.Name = variantName;
                    }

                    if (kachingProduct.UnitPricing == null)
                    {
                        kachingVariant.RetailPrice = MarketPriceForCode(variant.Code);
                    }

                    foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
                    {
                        object value = GetAttributeValue(variant, mapping.MetaField);
                        if (value == null)
                        {
                            continue;
                        }

                        kachingVariant.Attributes[mapping.AttributeId] = value;
                    }

                    CommerceMedia variantImage = variant.CommerceMediaCollection.FirstOrDefault();
                    if (variantImage != null)
                    {
                        Uri absoluteUrl = GetAbsoluteUrl(variantImage.AssetLink);
                        kachingVariant.ImageUrl = absoluteUrl?.AbsoluteUri;
                    }

                    if (kachingProduct.ImageUrl == null)
                    {
                        kachingProduct.ImageUrl = kachingVariant.ImageUrl;
                    }

                    kachingVariants.Add(kachingVariant);
                }

                kachingProduct.Variants = kachingVariants;
            }

            /* ---------------------------- */
            /* Assign tags to enable category navigation */
            /* ---------------------------- */

            kachingProduct.Tags = new Dictionary <string, bool>();
            foreach (var tag in tags)
            {
                kachingProduct.Tags[tag] = true;
            }

            return(kachingProduct);
        }