Exemple #1
0
        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));
        }
Exemple #2
0
        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>);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }