Exemple #1
0
        /// <summary>
        /// Gets the content types from the database.
        /// </summary>
        private async Task <IEnumerable <ContentType> > GetTypes()
        {
            var types = _cache?.Get <IEnumerable <ContentType> >(CacheKey);

            if (types == null)
            {
                types = await _repo.GetAll().ConfigureAwait(false);

                _cache?.Set(CacheKey, types);
            }
            return(types);
        }
Exemple #2
0
        private IEnumerable <IContent> ProcessQuery(Sql sql)
        {
            //NOTE: This doesn't allow properties to be part of the query
            var dtos = Database.Fetch <DocumentDto, ContentVersionDto, ContentDto, NodeDto, DocumentPublishedReadOnlyDto>(sql);

            //nothing found
            if (dtos.Any() == false)
            {
                return(Enumerable.Empty <IContent>());
            }

            //content types
            //NOTE: This should be ok for an SQL 'IN' statement, there shouldn't be an insane amount of content types
            var contentTypes = _contentTypeRepository.GetAll(dtos.Select(x => x.ContentVersionDto.ContentDto.ContentTypeId).ToArray())
                               .ToArray();


            var ids = dtos
                      .Where(dto => dto.TemplateId.HasValue && dto.TemplateId.Value > 0)
                      .Select(x => x.TemplateId.Value).ToArray();

            //NOTE: This should be ok for an SQL 'IN' statement, there shouldn't be an insane amount of content types
            var templates = ids.Length == 0 ? Enumerable.Empty <ITemplate>() : _templateRepository.GetAll(ids).ToArray();

            var dtosWithContentTypes = dtos
                                       //This select into and null check are required because we don't have a foreign damn key on the contentType column
                                       // http://issues.umbraco.org/issue/U4-5503
                                       .Select(x => new { dto = x, contentType = contentTypes.FirstOrDefault(ct => ct.Id == x.ContentVersionDto.ContentDto.ContentTypeId) })
                                       .Where(x => x.contentType != null)
                                       .ToArray();

            //Go get the property data for each document
            var docDefs = dtosWithContentTypes.Select(d => new DocumentDefinition(
                                                          d.dto.NodeId,
                                                          d.dto.VersionId,
                                                          d.dto.ContentVersionDto.VersionDate,
                                                          d.dto.ContentVersionDto.ContentDto.NodeDto.CreateDate,
                                                          d.contentType));

            var propertyData = GetPropertyCollection(sql, docDefs);

            return(dtosWithContentTypes.Select(d => CreateContentFromDto(
                                                   d.dto,
                                                   contentTypes.First(ct => ct.Id == d.dto.ContentVersionDto.ContentDto.ContentTypeId),
                                                   templates.FirstOrDefault(tem => tem.Id == (d.dto.TemplateId.HasValue ? d.dto.TemplateId.Value : -1)),
                                                   propertyData[d.dto.NodeId])));
        }
Exemple #3
0
        private Tuple <IEnumerable <ContentType>, IEnumerable <Module> > ParseUSyncFiles(string folder)
        {
            //pages
            var uSyncFolder = Directory
                              .GetDirectories(folder, "uSync", SearchOption.AllDirectories)
                              .First(i => Directory.GetDirectories(i, "v8", SearchOption.AllDirectories).Any());

            _context.BaseFolder = uSyncFolder;

            var contentTypeFiles = _contentTypeRepository.GetAll();
            var dataTypeFiles    = _dataTypeRepository.GetAll();
            var blueprintFiles   = _blueprintRepository.GetAll();

            if (!blueprintFiles.Any())
            {
                textBoxResults.AppendText(Environment.NewLine + "Blueprints folder not found or empty!");
                return(new Tuple <IEnumerable <ContentType>, IEnumerable <Module> >(null, null));
            }

            var contentTypes = contentTypeFiles.Build(dataTypeFiles, blueprintFiles);

            foreach (var contentType in contentTypes)
            {
                ComputeNestedContentProperties(contentType, dataTypeFiles);
                //ComputeNestedContentElementsProperties(contentType, dataTypeFiles, blueprintFiles);
                //ComputeTreePickerMaxItems(dataTypeDocuments, allProperties);
                ComputeNotes(contentType, dataTypeFiles);

                var parentDocTypes = contentTypes.Where(i => i.ChildDocTypes.Contains(contentType.Alias));
                contentType.ParentDocTypes = parentDocTypes.Select(i => i.Name).ToList();

                var childDocTypesNames = new List <string>();
                foreach (var childAlias in contentType.ChildDocTypes)
                {
                    var name = contentTypes.FirstOrDefault(i => i.Alias == childAlias)?.Name;
                    if (!string.IsNullOrEmpty(name))
                    {
                        childDocTypesNames.Add(name);
                    }
                }
                contentType.ChildDocTypes = childDocTypesNames;
            }

            // fill nested content properties
            foreach (var docType in contentTypes)
            {
                foreach (var prop in docType.PropertiesSelf)
                {
                    if (prop.NestedContentDocTypes != null && prop.NestedContentDocTypes.Any())
                    {
                        var nestedContentList = new List <NestedContentDocType>();
                        foreach (var nestedContentDocType in prop.NestedContentDocTypes)
                        {
                            nestedContentDocType.Properties = contentTypes
                                                              .FirstOrDefault(i => i.Alias == nestedContentDocType.Alias)?.PropertiesSelf.ToList();
                            nestedContentList.Add(nestedContentDocType);
                        }

                        prop.NestedContentDocTypes = nestedContentList;
                    }
                    else if (prop.NestedContentElementsDocTypes != null && prop.NestedContentElementsDocTypes.Any())
                    {
                        foreach (var item in prop.NestedContentElementsDocTypes)
                        {
                            item.ContentType = contentTypes.First(i => i.Alias == item.NcContentTypeAlias);
                        }
                    }
                }
            }

            var allModules = contentTypes
                             .SelectMany(i => i.Properties)
                             .Where(i => i.NestedContentElementsDocTypes != null && i.NestedContentElementsDocTypes.Any())
                             .SelectMany(i => i.NestedContentElementsDocTypes)
                             .GroupBy(i => i.NcContentTypeAlias)
                             .Select(g =>
            {
                var module = g.First();

                if (!string.IsNullOrEmpty(module.NcContentTypeAlias))
                {
                    module.ContentType = contentTypes.FirstOrDefault(c => c.Alias == module.NcContentTypeAlias);
                }

                return(module);
            })
                             .OrderBy(i => i.Name)
                             .ToList();

            var pages = contentTypes.Where(i => i.Alias.EndsWith("Page") || i.Alias.EndsWith("websiteSettings"));

            return(new Tuple <IEnumerable <ContentType>, IEnumerable <Module> >(pages, allModules));
        }
Exemple #4
0
 public ContentType[] GetAll()
 {
     return(_contentTypeRepository.GetAll());
 }