public override object GetValue(global::Sitecore.Data.Items.Item item,  ISitecoreService service)
        {

            var itemField = base.GetField(item);

            if (itemField == null || itemField.Value.Trim().IsNullOrEmpty()) return null;
            
            

            Link link = new Link();
            LinkField field = new LinkField(itemField);

            switch (field.LinkType)
            {
                case "anchor":
                    link.Url = field.Anchor;
                    link.Type = LinkType.Anchor;
                    break;
                case "external":
                    link.Url = field.Url;
                    link.Type = LinkType.External;
                    break;
                case "mailto":
                    link.Url = field.Url;
                    link.Type = LinkType.MailTo;
                    break;
                case "javascript":
                    link.Url = field.Url;
                    link.Type = LinkType.JavaScript;
                    break;
                case "media":
                    global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(field.TargetItem);
                    link.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                    link.Type = LinkType.Media;
                    link.TargetId = field.TargetID.Guid;

                    break;
                case "internal":
                    if (field.TargetItem == null) link.Url = string.Empty;
                    else link.Url = LinkManager.GetItemUrl(field.TargetItem);
                    link.Type = LinkType.Internal;
                    link.TargetId = field.TargetID.Guid;

                    break;
                default:
                    return null;
                    break;

            }
            

            link.Anchor = field.Anchor;
            link.Class = field.Class;
            link.Text = field.Text;
            link.Title = field.Title;
            link.Target = field.Target;
            link.Query = field.QueryString;

            return link;
        }
        protected void MapToLinkModel(Link link, LinkField linkField, SitecoreFieldConfiguration config)
        {
            link.Anchor = linkField.Anchor;
            link.Class  = linkField.Class;
            link.Style  = linkField.GetAttribute("style");
            link.Text   = linkField.Text;
            link.Title  = linkField.Title;
            link.Target = linkField.Target;
            link.Query  = HttpUtility.UrlDecode(linkField.QueryString);

            switch (linkField.LinkType)
            {
            case "anchor":
                link.Url  = linkField.Anchor;
                link.Type = LinkType.Anchor;
                break;

            case "external":
                link.Url  = linkField.Url;
                link.Type = LinkType.External;
                break;

            case "mailto":
                link.Url  = linkField.Url;
                link.Type = LinkType.MailTo;
                break;

            case "javascript":
                link.Url  = linkField.Url;
                link.Type = LinkType.JavaScript;
                break;

            case "media":
                if (linkField.TargetItem == null)
                {
                    link.Url = string.Empty;
                }
                else
                {
                    global::Sitecore.Data.Items.MediaItem media =
                        new global::Sitecore.Data.Items.MediaItem(linkField.TargetItem);
                    link.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                }
                link.Type     = LinkType.Media;
                link.TargetId = linkField.TargetID.Guid;
                break;

            case "internal":
                var urlOptions = _urlOptionsResolver.CreateUrlOptions(config.UrlOptions);
                link.Url      = linkField.TargetItem == null ? string.Empty : LinkManager.GetItemUrl(linkField.TargetItem, urlOptions);
                link.Type     = LinkType.Internal;
                link.TargetId = linkField.TargetID.Guid;
                link.Text     = linkField.Text.IsNullOrEmpty() ? (linkField.TargetItem == null ? string.Empty : linkField.TargetItem.DisplayName) : linkField.Text;
                break;

            default:
                link = null;
                break;
            }
        }
        public static object GetItemInfo(SitecoreInfoType infoType, Item item, UrlOptions urlOptions)
        {
            if (urlOptions == null)
            {
                urlOptions = new UrlOptions();
            }

            switch (infoType)
            {
            case SitecoreInfoType.ContentPath:
                return(item.Paths.ContentPath);

            case SitecoreInfoType.DisplayName:
                return(item.DisplayName);

            case SitecoreInfoType.FullPath:
                return(item.Paths.FullPath);

            case SitecoreInfoType.Name:
                return(item.Name);

            case SitecoreInfoType.Key:
                return(item.Key);

            case SitecoreInfoType.MediaUrl:
                global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(item);
                return(global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));

                break;

            case SitecoreInfoType.Path:
                return(item.Paths.Path);

            case SitecoreInfoType.TemplateId:
                return(item.TemplateID.Guid);

            case SitecoreInfoType.TemplateName:
                return(item.TemplateName);

            case SitecoreInfoType.Url:
                return(LinkManager.GetItemUrl(item, urlOptions));

            case SitecoreInfoType.FullUrl:
                return(LinkManager.GetItemUrl(item, new UrlOptions()
                {
                    AlwaysIncludeServerUrl = true
                }));

            case SitecoreInfoType.Version:
                return(item.Version.Number);

            case SitecoreInfoType.Language:
                return(item.Language);

            default:
                throw new NotSupportedException("Value {0} not supported".Formatted(infoType.ToString()));
            }
        }
示例#4
0
        /// <summary>
        /// Maps data from the CMS value to the .Net property value
        /// </summary>
        /// <param name="mappingContext">The mapping context.</param>
        /// <returns>System.Object.</returns>
        /// <exception cref="Glass.Mapper.MapperException">SitecoreInfoType {0} not supported.Formatted(scConfig.Type)</exception>
        public override object MapToProperty(AbstractDataMappingContext mappingContext)
        {
            var context  = mappingContext as SitecoreDataMappingContext;
            var item     = context.Item;
            var scConfig = Configuration as SitecoreInfoConfiguration;

            //TODO: move this to the config?
            var urlOptions = Utilities.CreateUrlOptions(scConfig.UrlOptions);

            switch (scConfig.Type)
            {
            case SitecoreInfoType.ContentPath:
                return(item.Paths.ContentPath);

            case SitecoreInfoType.DisplayName:
                return(item.DisplayName);

            case SitecoreInfoType.FullPath:
                return(item.Paths.FullPath);

            case SitecoreInfoType.Name:
                return(item.Name);

            case SitecoreInfoType.Key:
                return(item.Key);

            case SitecoreInfoType.MediaUrl:
                var media = new global::Sitecore.Data.Items.MediaItem(item);
                return(global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));

            case SitecoreInfoType.Path:
                return(item.Paths.Path);

            case SitecoreInfoType.TemplateId:
                if (scConfig.PropertyInfo != null && scConfig.PropertyInfo.PropertyType == typeof(Sitecore.Data.ID))
                {
                    return(item.TemplateID);
                }
                return(item.TemplateID.Guid);

            case SitecoreInfoType.TemplateName:
                return(item.TemplateName);

            case SitecoreInfoType.Url:
                return(LinkManager.GetItemUrl(item, urlOptions));

            case SitecoreInfoType.Version:
                return(item.Version.Number);

            case SitecoreInfoType.Language:
                return(item.Language);

            default:
                throw new MapperException("SitecoreInfoType {0} not supported".Formatted(scConfig.Type));
            }
        }
        public static object GetItemInfo(SitecoreInfoType infoType, Item item, global::Sitecore.Links.UrlOptions urlOptions)
        {
            
            if (urlOptions == null) urlOptions = new UrlOptions();

            if(urlOptions.Language == null)
                urlOptions.Language = item.Language;

            switch (infoType)
            {
                case SitecoreInfoType.ContentPath:
                    return item.Paths.ContentPath;
                case SitecoreInfoType.DisplayName:
                    return item.DisplayName;
                case SitecoreInfoType.FullPath:
                    return item.Paths.FullPath;
                case SitecoreInfoType.Name:
                    return item.Name;
                case SitecoreInfoType.Key:
                    return item.Key;
                case SitecoreInfoType.MediaUrl:
                    global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(item);
                    return global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                    break;
                case SitecoreInfoType.Path:
                    return item.Paths.Path;
                case SitecoreInfoType.TemplateId:
                    return item.TemplateID.Guid;
                case SitecoreInfoType.TemplateName:
                    return item.TemplateName;
                case SitecoreInfoType.Url:
                    return LinkManager.GetItemUrl(item, urlOptions);
                case SitecoreInfoType.FullUrl:
                    return LinkManager.GetItemUrl(item, new UrlOptions() { AlwaysIncludeServerUrl = true });
                case SitecoreInfoType.Version:
                    return item.Version.Number;
                case SitecoreInfoType.Language:
                    return item.Language;
                default:
                    throw new NotSupportedException("Value {0} not supported".Formatted(infoType.ToString()));
            }
        }
示例#6
0
        public void GetValue_MediaUrl()
        {
            //Assign
            SitecoreProperty property = new SitecoreProperty()
            {
                Attribute = new SitecoreInfoAttribute(SitecoreInfoType.MediaUrl)
            };

            _handler.ConfigureDataHandler(property);

            //Act
            var result = _handler.GetValue(_item, null);

            //Assert
            //It think this test is probably wrong
            global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(_item);
            string value = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);

            Assert.AreEqual(value, result as string);
        }
        public override object GetValue(global::Sitecore.Data.Items.Item item, ISitecoreService service)
        {
            
            switch (InfoType)
            {
                case SitecoreInfoType.ContentPath:
                    return item.Paths.ContentPath;
                case SitecoreInfoType.DisplayName:
                    return item.DisplayName;
                case SitecoreInfoType.FullPath:
                    return item.Paths.FullPath;
                case SitecoreInfoType.Name:
                    return item.Name;
                case SitecoreInfoType.Key:
                    return item.Key;
                case SitecoreInfoType.MediaUrl:
                    global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(item);
                    return global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                    break;
                case SitecoreInfoType.Path:
                    return item.Paths.Path;
                case SitecoreInfoType.TemplateId:
                    return item.TemplateID.Guid;
                case SitecoreInfoType.TemplateName:
                    return item.TemplateName;
                case SitecoreInfoType.Url:
                    return LinkManager.GetItemUrl(item);
                case SitecoreInfoType.FullUrl:
                    return LinkManager.GetItemUrl(item, new UrlOptions() { AlwaysIncludeServerUrl = true, Site = service.SiteContext });
                case SitecoreInfoType.Version:
                    return item.Version.Number;
                case SitecoreInfoType.Language:
                    return item.Language;
                case SitecoreInfoType.LastUpdated:
                    return item.Statistics.Updated;
                default:
                    throw new NotSupportedException("Value {0} not supported".Formatted(InfoType.ToString()));
            }


        }
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {

            Link link = value as Link;

            var itemField = base.GetField(item);

            if (itemField == null) return;

            LinkField field = new LinkField(itemField);
            if (link == null || link.Type == LinkType.NotSet)
            {
                field.Clear();
                return;
            }


            switch (link.Type)
            {
                case LinkType.Internal:
                    field.LinkType = "internal";
                    if (field.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                            field.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            if (target != null)
                            {
                                field.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                field.UpdateLink(nLink);
                                field.Url = LinkManager.GetItemUrl(target);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.Media:
                    field.LinkType = "media";
                    if (field.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                            field.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                            if (target != null)
                            {
                                field.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                field.UpdateLink(nLink);
                                field.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.External:
                    field.LinkType = "external";
                    field.Url = link.Url;
                    break;
                case LinkType.Anchor:
                    field.LinkType = "anchor";
                    field.Url = link.Anchor;
                    break;
                case LinkType.MailTo:
                    field.LinkType = "mailto";
                    field.Url = link.Url;
                    break;
                case LinkType.JavaScript:
                    field.LinkType = "javascript";
                    field.Url = link.Url;
                    break;


            }



            if (!link.Anchor.IsNullOrEmpty())
                field.Anchor = link.Anchor;
            if (!link.Class.IsNullOrEmpty())
                field.Class = link.Class;
            if (!link.Text.IsNullOrEmpty())
                field.Text = link.Text;
            if (!link.Title.IsNullOrEmpty())
                field.Title = link.Title;
            if (!link.Query.IsNullOrEmpty())
                field.QueryString = link.Query;
            if (!link.Target.IsNullOrEmpty())
                field.Target = link.Target;


        }
        protected void MapToLinkField(Link link, LinkField linkField, SitecoreFieldConfiguration config)
        {
            var item = linkField.InnerField.Item;

            switch (link.Type)
            {
            case LinkType.Internal:
                linkField.LinkType = "internal";
                if (linkField.TargetID.Guid != link.TargetId)
                {
                    if (link.TargetId == Guid.Empty)
                    {
                        ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                        linkField.RemoveLink(iLink);
                    }
                    else
                    {
                        ID   newId  = new ID(link.TargetId);
                        Item target = item.Database.GetItem(newId);
                        if (target != null)
                        {
                            linkField.TargetID = newId;
                            ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                            linkField.UpdateLink(nLink);
                            linkField.Url = LinkManager.GetItemUrl(target);
                        }
                        else
                        {
                            throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }
                    }
                }
                break;

            case LinkType.Media:
                linkField.LinkType = "media";
                if (linkField.TargetID.Guid != link.TargetId)
                {
                    if (link.TargetId == Guid.Empty)
                    {
                        ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                        linkField.RemoveLink(iLink);
                    }
                    else
                    {
                        ID   newId  = new ID(link.TargetId);
                        Item target = item.Database.GetItem(newId);

                        if (target != null)
                        {
                            global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                            linkField.TargetID = newId;
                            ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                            linkField.UpdateLink(nLink);
                            var mediaUrl = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                            linkField.Url = mediaUrl;
                        }
                        else
                        {
                            throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }
                    }
                }
                break;

            case LinkType.External:
                linkField.LinkType = "external";
                linkField.Url      = link.Url;
                break;

            case LinkType.Anchor:
                linkField.LinkType = "anchor";
                linkField.Url      = link.Anchor;
                break;

            case LinkType.MailTo:
                linkField.LinkType = "mailto";
                linkField.Url      = link.Url;
                break;

            case LinkType.JavaScript:
                linkField.LinkType = "javascript";
                linkField.Url      = link.Url;
                break;
            }



            if (!link.Anchor.IsNullOrEmpty())
            {
                linkField.Anchor = link.Anchor;
            }
            if (!link.Class.IsNullOrEmpty())
            {
                linkField.Class = link.Class;
            }
            if (!link.Text.IsNullOrEmpty())
            {
                linkField.Text = link.Text;
            }
            if (!link.Title.IsNullOrEmpty())
            {
                linkField.Title = link.Title;
            }
            if (!link.Query.IsNullOrEmpty())
            {
                linkField.QueryString = HttpUtility.UrlEncode(link.Query);
            }
            if (!link.Target.IsNullOrEmpty())
            {
                linkField.Target = link.Target;
            }
        }
示例#10
0
        /// <summary>
        /// Maps data from the CMS value to the .Net property value
        /// </summary>
        /// <param name="mappingContext">The mapping context.</param>
        /// <returns>System.Object.</returns>
        /// <exception cref="Glass.Mapper.MapperException">SitecoreInfoType {0} not supported.Formatted(scConfig.Type)</exception>
        public override object MapToProperty(AbstractDataMappingContext mappingContext)
        {
            var context = mappingContext as SitecoreDataMappingContext;
            var item = context.Item;
            var scConfig = Configuration as SitecoreInfoConfiguration;

            //TODO: move this to the config?
            var urlOptions = Utilities.CreateUrlOptions(scConfig.UrlOptions);

            switch (scConfig.Type)
            {
               
                  case SitecoreInfoType.ContentPath:
                    return item.Paths.ContentPath;
                case SitecoreInfoType.DisplayName:
                    return item.DisplayName;
                case SitecoreInfoType.FullPath:
                    return item.Paths.FullPath;
                case SitecoreInfoType.Name:
                    return item.Name;
                case SitecoreInfoType.Key:
                    return item.Key;
                case SitecoreInfoType.MediaUrl:
                    var media = new global::Sitecore.Data.Items.MediaItem(item);
                    return global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                case SitecoreInfoType.Path:
                    return item.Paths.Path;
                case SitecoreInfoType.TemplateId:
                    if (scConfig.PropertyInfo != null && scConfig.PropertyInfo.PropertyType == typeof(Sitecore.Data.ID))
                        return item.TemplateID;
                    return item.TemplateID.Guid;
                case SitecoreInfoType.TemplateName:
                    return item.TemplateName;
                case SitecoreInfoType.Url:
                    return LinkManager.GetItemUrl(item, urlOptions);
                case SitecoreInfoType.Version:
                    return item.Version.Number;
                case SitecoreInfoType.Language:
                    return item.Language;  
                default:
                    throw new MapperException("SitecoreInfoType {0} not supported".Formatted(scConfig.Type));
            }
        }
示例#11
0
        public override object GetValue(global::Sitecore.Data.Items.Item item, ISitecoreService service)
        {
            var itemField = base.GetField(item);

            if (itemField == null || itemField.Value.Trim().IsNullOrEmpty())
            {
                return(null);
            }



            Link      link  = new Link();
            LinkField field = new LinkField(itemField);

            switch (field.LinkType)
            {
            case "anchor":
                link.Url  = field.Anchor;
                link.Type = LinkType.Anchor;
                break;

            case "external":
                link.Url  = field.Url;
                link.Type = LinkType.External;
                break;

            case "mailto":
                link.Url  = field.Url;
                link.Type = LinkType.MailTo;
                break;

            case "javascript":
                link.Url  = field.Url;
                link.Type = LinkType.JavaScript;
                break;

            case "media":
                global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(field.TargetItem);
                link.Url      = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                link.Type     = LinkType.Media;
                link.TargetId = field.TargetID.Guid;

                break;

            case "internal":
                if (field.TargetItem == null)
                {
                    link.Url = string.Empty;
                }
                else
                {
                    link.Url = LinkManager.GetItemUrl(field.TargetItem);
                }
                link.Type     = LinkType.Internal;
                link.TargetId = field.TargetID.Guid;

                break;

            default:
                return(null);

                break;
            }


            link.Anchor = field.Anchor;
            link.Class  = field.Class;
            link.Text   = field.Text;
            link.Title  = field.Title;
            link.Target = field.Target;
            link.Query  = field.QueryString;

            return(link);
        }
示例#12
0
        /// <summary>
        /// Maps data from the CMS value to the .Net property value
        /// </summary>
        /// <param name="mappingContext">The mapping context.</param>
        /// <returns>System.Object.</returns>
        /// <exception cref="Glass.Mapper.MapperException">SitecoreInfoType {0} not supported.Formatted(scConfig.Type)</exception>
        public override object MapToProperty(AbstractDataMappingContext mappingContext)
        {
            var context  = mappingContext as SitecoreDataMappingContext;
            var item     = context.Item;
            var scConfig = Configuration as SitecoreInfoConfiguration;

            //TODO: move this to the config?
            var urlOptions = Utilities.CreateUrlOptions(scConfig.UrlOptions);

            switch (scConfig.Type)
            {
            case SitecoreInfoType.ContentPath:
                return(item.Paths.ContentPath);

            case SitecoreInfoType.DisplayName:
                return(item[Global.Fields.DisplayName]);

            case SitecoreInfoType.FullPath:
                return(item.Paths.FullPath);

            case SitecoreInfoType.Name:
                return(item.Name);

            case SitecoreInfoType.Key:
                return(item.Key);

            case SitecoreInfoType.MediaUrl:
                var media = new global::Sitecore.Data.Items.MediaItem(item);
                return(global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));

            case SitecoreInfoType.Path:
                return(item.Paths.Path);

            case SitecoreInfoType.TemplateId:
                if (scConfig.PropertyInfo != null && scConfig.PropertyInfo.PropertyType == typeof(Sitecore.Data.ID))
                {
                    return(item.TemplateID);
                }
                return(item.TemplateID.Guid);

            case SitecoreInfoType.TemplateName:
                return(item.TemplateName);

            case SitecoreInfoType.Url:
                urlOptions.Language = null;
                return(LinkManager.GetItemUrl(item, urlOptions));

            case SitecoreInfoType.Version:
                if (scConfig.PropertyInfo != null && scConfig.PropertyInfo.PropertyType == typeof(string))
                {
                    return(item.Version.Number.ToString());
                }
                return(item.Version.Number);

            case SitecoreInfoType.Language:
                if (scConfig.PropertyInfo != null && scConfig.PropertyInfo.PropertyType == typeof(string))
                {
                    return(item.Language.Name);
                }
                return(item.Language);

            case SitecoreInfoType.BaseTemplateIds:
                Template template = TemplateManager.GetTemplate(item.TemplateID, item.Database);
                if (template == null)
                {
                    return(null);
                }

                if (scConfig.PropertyInfo != null &&
                    scConfig.PropertyInfo.PropertyType == typeof(IEnumerable <Sitecore.Data.ID>))
                {
                    return(template.GetBaseTemplates().Select(x => x.ID));
                }
                return(template.GetBaseTemplates().Select(x => x.ID.Guid));

            case SitecoreInfoType.ItemUri:
                return(new ItemUri(item.ID, item.Language, item.Version, item.Database));

            default:
                throw new MapperException("SitecoreInfoType {0} not supported".Formatted(scConfig.Type));
            }
        }
        /// <summary>
        /// Gets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public override object GetField(Sitecore.Data.Fields.Field field, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {

            if (field == null || field.Value.Trim().IsNullOrEmpty()) return null;



            Link link = new Link();
            LinkField linkField = new LinkField(field);

            link.Anchor = linkField.Anchor;
            link.Class = linkField.Class;
            link.Text = linkField.Text;
            link.Title = linkField.Title;
            link.Target = linkField.Target;
            link.Query = linkField.QueryString;

            switch (linkField.LinkType)
            {
                case "anchor":
                    link.Url = linkField.Anchor;
                    link.Type = LinkType.Anchor;
                    break;
                case "external":
                    link.Url = linkField.Url;
                    link.Type = LinkType.External;
                    break;
                case "mailto":
                    link.Url = linkField.Url;
                    link.Type = LinkType.MailTo;
                    break;
                case "javascript":
                    link.Url = linkField.Url;
                    link.Type = LinkType.JavaScript;
                    break;
                case "media":
                    if (linkField.TargetItem == null)
                        link.Url = string.Empty;
                    else
                    {
                        global::Sitecore.Data.Items.MediaItem media =
                            new global::Sitecore.Data.Items.MediaItem(linkField.TargetItem);
                        link.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                    }
                    link.Type = LinkType.Media;
                    link.TargetId = linkField.TargetID.Guid;
                    break;
                case "internal":
                    var urlOptions = Utilities.CreateUrlOptions(config.UrlOptions);
                    if (linkField.TargetItem == null) link.Url = string.Empty;
                    else link.Url = LinkManager.GetItemUrl(linkField.TargetItem, urlOptions);
                    link.Type = LinkType.Internal;
                    link.TargetId = linkField.TargetID.Guid;
                    link.Text =  linkField.Text.IsNullOrEmpty() ? (linkField.TargetItem == null ? string.Empty : linkField.TargetItem.DisplayName) : linkField.Text;
                    break;
                default:
                    return null;
            }


         

            return link;
        }
        /// <summary>
        /// Gets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public override object GetField(Sitecore.Data.Fields.Field field, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            if (field == null || field.Value.Trim().IsNullOrEmpty())
            {
                return(null);
            }



            Link      link      = new Link();
            LinkField linkField = new LinkField(field);

            switch (linkField.LinkType)
            {
            case "anchor":
                link.Url  = linkField.Anchor;
                link.Type = LinkType.Anchor;
                break;

            case "external":
                link.Url  = linkField.Url;
                link.Type = LinkType.External;
                break;

            case "mailto":
                link.Url  = linkField.Url;
                link.Type = LinkType.MailTo;
                break;

            case "javascript":
                link.Url  = linkField.Url;
                link.Type = LinkType.JavaScript;
                break;

            case "media":
                if (linkField.TargetItem == null)
                {
                    link.Url = string.Empty;
                }
                else
                {
                    global::Sitecore.Data.Items.MediaItem media =
                        new global::Sitecore.Data.Items.MediaItem(linkField.TargetItem);
                    link.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                }
                link.Type     = LinkType.Media;
                link.TargetId = linkField.TargetID.Guid;
                break;

            case "internal":
                if (linkField.TargetItem == null)
                {
                    link.Url = string.Empty;
                }
                else
                {
                    link.Url = LinkManager.GetItemUrl(linkField.TargetItem);
                }
                link.Type     = LinkType.Internal;
                link.TargetId = linkField.TargetID.Guid;

                break;

            default:
                return(null);

                break;
            }


            link.Anchor = linkField.Anchor;
            link.Class  = linkField.Class;
            link.Text   = linkField.Text;
            link.Title  = linkField.Title;
            link.Target = linkField.Target;
            link.Query  = linkField.QueryString;

            return(link);
        }
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">
        /// No item with ID {0}. Can not update Link linkField.Formatted(newId)
        /// or
        /// No item with ID {0}. Can not update Link linkField.Formatted(newId)
        /// </exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            Link link = value as Link;
            

            if (field == null) return;

            var item = field.Item;

            LinkField linkField = new LinkField(field);
            if (link == null || link.Type == LinkType.NotSet)
            {
                linkField.Clear();
                return;
            }


            switch (link.Type)
            {
                case LinkType.Internal:
                    linkField.LinkType = "internal";
                    if (linkField.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                            linkField.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            if (target != null)
                            {
                                linkField.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                linkField.UpdateLink(nLink);
                                linkField.Url = LinkManager.GetItemUrl(target);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.Media:
                    linkField.LinkType = "media";
                    if (linkField.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                            linkField.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);

                            if (target != null)
                            {
                                global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                                linkField.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                linkField.UpdateLink(nLink);
                                var mediaUrl = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                                linkField.Url = mediaUrl;
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.External:
                    linkField.LinkType = "external";
                    linkField.Url = link.Url;
                    break;
                case LinkType.Anchor:
                    linkField.LinkType = "anchor";
                    linkField.Url = link.Anchor;
                    break;
                case LinkType.MailTo:
                    linkField.LinkType = "mailto";
                    linkField.Url = link.Url;
                    break;
                case LinkType.JavaScript:
                    linkField.LinkType = "javascript";
                    linkField.Url = link.Url;
                    break;


            }



            if (!link.Anchor.IsNullOrEmpty())
                linkField.Anchor = link.Anchor;
            if (!link.Class.IsNullOrEmpty())
                linkField.Class = link.Class;
            if (!link.Text.IsNullOrEmpty())
                linkField.Text = link.Text;
            if (!link.Title.IsNullOrEmpty())
                linkField.Title = link.Title;
            if (!link.Query.IsNullOrEmpty())
                linkField.QueryString = HttpUtility.UrlEncode(link.Query);
            if (!link.Target.IsNullOrEmpty())
                linkField.Target = link.Target;
        }
示例#16
0
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {
            Link link = value as Link;

            var itemField = base.GetField(item);

            if (itemField == null)
            {
                return;
            }

            LinkField field = new LinkField(itemField);

            if (link == null || link.Type == LinkType.NotSet)
            {
                field.Clear();
                return;
            }


            switch (link.Type)
            {
            case LinkType.Internal:
                field.LinkType = "internal";
                if (field.TargetID.Guid != link.TargetId)
                {
                    if (link.TargetId == Guid.Empty)
                    {
                        ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                        field.RemoveLink(iLink);
                    }
                    else
                    {
                        ID   newId  = new ID(link.TargetId);
                        Item target = item.Database.GetItem(newId);
                        if (target != null)
                        {
                            field.TargetID = newId;
                            ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                            field.UpdateLink(nLink);
                            field.Url = LinkManager.GetItemUrl(target);
                        }
                        else
                        {
                            throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }
                    }
                }
                break;

            case LinkType.Media:
                field.LinkType = "media";
                if (field.TargetID.Guid != link.TargetId)
                {
                    if (link.TargetId == Guid.Empty)
                    {
                        ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                        field.RemoveLink(iLink);
                    }
                    else
                    {
                        ID   newId  = new ID(link.TargetId);
                        Item target = item.Database.GetItem(newId);
                        global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                        if (target != null)
                        {
                            field.TargetID = newId;
                            ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                            field.UpdateLink(nLink);
                            field.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                        }
                        else
                        {
                            throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }
                    }
                }
                break;

            case LinkType.External:
                field.LinkType = "external";
                field.Url      = link.Url;
                break;

            case LinkType.Anchor:
                field.LinkType = "anchor";
                field.Url      = link.Anchor;
                break;

            case LinkType.MailTo:
                field.LinkType = "mailto";
                field.Url      = link.Url;
                break;

            case LinkType.JavaScript:
                field.LinkType = "javascript";
                field.Url      = link.Url;
                break;
            }



            if (!link.Anchor.IsNullOrEmpty())
            {
                field.Anchor = link.Anchor;
            }
            if (!link.Class.IsNullOrEmpty())
            {
                field.Class = link.Class;
            }
            if (!link.Text.IsNullOrEmpty())
            {
                field.Text = link.Text;
            }
            if (!link.Title.IsNullOrEmpty())
            {
                field.Title = link.Title;
            }
            if (!link.Query.IsNullOrEmpty())
            {
                field.QueryString = link.Query;
            }
            if (!link.Target.IsNullOrEmpty())
            {
                field.Target = link.Target;
            }
        }
        public void GetValue_MediaUrl()
        {
            //Assign
            SitecoreProperty property= new SitecoreProperty()
            {
                Attribute = new SitecoreInfoAttribute(SitecoreInfoType.MediaUrl)
            };

            _handler.ConfigureDataHandler(property);

            //Act
            var result = _handler.GetValue( _item,  null);

            //Assert
            //It think this test is probably wrong
            global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(_item);
            string value = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);

            Assert.AreEqual(value, result as string);
        }