Beispiel #1
0
        private void addMediaItemsFromUrlToDictionary(string url)
        {
            if (url.EndsWith("ashx"))
            {
                DynamicLink dynamicLink;
                if (!DynamicLink.TryParse(url, out dynamicLink))
                {
                    return;
                }

                if (dynamicLink != null)
                {
                    addMediaItemsByIdToDictionary(dynamicLink.ItemId);
                }
            }
            else
            {
                var urlWithoutMedia = url.Substring(url.IndexOf("media/")).Replace("media/", "/sitecore/media library/");
                var urlWithoutExt   = urlWithoutMedia.Substring(0, urlWithoutMedia.LastIndexOf("."));
                var urlRevertSpaces = urlWithoutExt.Replace("-", " ");

                var item = processArgs.PublishOptions.SourceDatabase.GetItem(urlRevertSpaces);

                if (item != null)
                {
                    addMediaItemsByIdToDictionary(item.ID);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Resolves Dynamic Links to either the item path or the media item path with extension
        /// </summary>
        /// <param name="link">The href value of a node</param>
        /// <param name="resolvedLink">Output of the resolved link.</param>
        /// <returns></returns>
        public static bool TryResolveInternalLink(string link, out string resolvedLink)
        {
            DynamicLink parsed;

            if (DynamicLink.TryParse(link, out parsed))
            {
                var item = Factory.GetDatabase(Constants.MasterDb).GetItem(parsed.ItemId);
                if (item != null)
                {
                    if (item.Paths.IsMediaItem)
                    {
                        bool includesExtension = false;
                        link = "/~/media" + GetMediaPath(parsed.ItemId, true, ref includesExtension);
                    }
                    else
                    {
                        using (var db = new SitecoreService(Constants.MasterDb))
                        {
                            var articleItem = db.GetItem <ArticleItem>(item.ID.Guid);
                            if (articleItem._TemplateId == IArticleConstants.TemplateId.Guid)
                            {
                                link = string.Format("{1}/a/{0}", articleItem.Article_Number, AssetLinkBase.BaseUrl);
                            }
                            else
                            {
                                link = LinkManager.GetItemUrl(item).ToLower();

                                const string partToRemove        = "/sitecore/shell";
                                int          indexOfPartToRemove = link.IndexOf(partToRemove);
                                if (indexOfPartToRemove != -1)
                                {
                                    link = link.Substring(partToRemove.Length + indexOfPartToRemove);
                                }
                            }
                        }
                    }
                }

                resolvedLink = link;
                return(true);
            }

            resolvedLink = null;
            return(false);
        }
        private void HandleNextNode(Queue <HtmlNode> nodes, IDataMap map, string itemPath, Item importRow)
        {
            var node       = nodes.Dequeue();
            var nodeName   = node.Name.ToLower();
            var parentNode = node.ParentNode;
            var childNodes = node.SelectNodes("./*|./text()");

            if (childNodes != null)
            {
                foreach (var child in childNodes)
                {
                    nodes.Enqueue(child);
                }
            }

            if (UnwantedTags.Any(tag => tag == nodeName))
            {
                // if this node is one to remove
                if (childNodes != null)
                {
                    // make sure children are added back
                    foreach (var child in childNodes)
                    {
                        parentNode.InsertBefore(child, node);
                    }
                }

                parentNode.RemoveChild(node);
            }
            else if (node.HasAttributes)
            {
                // if it's not being removed
                foreach (string s in UnwantedAttributes)                 // remove unwanted attributes
                {
                    node.Attributes.Remove(s);
                }

                //replace images
                if (nodeName.Equals("img"))
                {
                    // see if it exists
                    string      imgSrc = node.Attributes["src"].Value;
                    DynamicLink dynamicLink;
                    if (!DynamicLink.TryParse(imgSrc, out dynamicLink))
                    {
                        return;
                    }
                    MediaItem mediaItem       = importRow.Database.GetItem(dynamicLink.ItemId, dynamicLink.Language ?? map.ImportToLanguage);
                    var       mediaParentItem = BuildMediaPath(map.ToDB, mediaItem.InnerItem.Paths.ParentPath);
                    MediaItem newImg          = HandleMediaItem(map, mediaParentItem, itemPath, mediaItem);
                    if (newImg != null)
                    {
                        string newSrc = string.Format("-/media/{0}.ashx", newImg.ID.ToShortID().ToString());
                        // replace the node with sitecore tag
                        node.SetAttributeValue("src", newSrc);
                    }
                }
            }
            else if (ReplaceTags.ContainsKey(nodeName))
            {
                // Replace tag
                node.Name = ReplaceTags[nodeName];
            }
            else
            {
                //Keep node as is
            }
        }