private async Task <bool> MatchContent(ICache cache, IMapTask mapTask, IContent content, object value, string alias) { if (string.IsNullOrWhiteSpace(alias)) { return(false); } alias = alias.ToLowerInvariant(); var maps = GetMaps(mapTask); if (maps == null || value == null) { return(false); } var map = maps.FirstOrDefault(x => x.MatchAlias(alias)); object fieldValue = null; if (map == null) { throw new ArgumentNullException(nameof(map)); } if (map.ContentType != null) { fieldValue = content.Has(map.Alias) ? await GetContentField(cache, map, content).ConfigureAwait(false) : map.Default; } return(value.Equals(fieldValue)); }
public ICmsQuery <T> Create <T>(ISite site, IMapTask <T> mapTask) where T : class, new() { var isMedia = typeof(IMedia).IsAssignableFrom(typeof(T)); return(isMedia ? new MediaQuery <T>() : new ContentQuery <T>(site?.Id.ToString(), mapTask.Alias) as ICmsQuery <T>); }
private IList <IMapItem> GetMaps(IMapTask mapTask) { var maps = new List <IMapItem>(); foreach (var map in mapTask.Maps) { if (map is MapItemCopy) { if (_registry.Has(map.ContentType)) { maps.AddRange(_registry[map.ContentType].Maps); } } else { maps.Add(map); } } return(maps); }
private async Task <object> Load(ICache cache, IMapTask mapTask, IContent content, object instance = null) { if (mapTask == null || content == null) { return(null); } var result = mapTask.Create(instance); if (result == null) { return(null); } var maps = GetMaps(mapTask); object val = null; maps.Each(async x => { if (content.Has(x.Alias)) { val = await GetContentField(cache, x, content).ConfigureAwait(false); x.Setter?.Set(result, val); } }); var fields = new Dictionary <string, object>(); if (mapTask.CmsFields.Any() && mapTask.GroupActions.Any()) { foreach (var field in mapTask.CmsFields) { fields.Add(field.Key, content.Get(field.Value, field.Key)); } foreach (var ga in mapTask.GroupActions) { var values = ga.Aliases.Select(x => fields[x]).ToList(); ga.Action(result, values); } } mapTask.Action?.Invoke(content, result); var defer = mapTask.TaskDefer; if (defer != null) { foreach (var map in defer.Maps) { val = string.IsNullOrWhiteSpace(map.Alias) ? null : content.Get(map.ContentType, map.Alias); if (map.Defer != null) { await map.Defer(cache, result, val).ConfigureAwait(false); } } } return(result); }