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())); } }
/// <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())); } }
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; } }
/// <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 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); }
/// <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; }
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); }