protected override DirectoryContent[] GetChildren()
        {
            var directoryFile = new DirectoryContent
            {
                name  = Info.name,
                hash  = new DirectoryContentHash(EntityReference).ToString(),
                url   = Info.url,
                date  = Info.date,
                read  = Info.read,
                write = Info.write,
                rm    = Info.rm,
                mime  = "application/x-adx_webpage",
                size  = 0,
            };

            var langContext = HttpContext.Current.GetContextLanguageInfo();
            Func <WebPageNode, bool> langFilter = page => page.IsRoot.HasValue && page.IsRoot.Value;

            var childPages = Node.WebPages
                             .Where(langContext.IsCrmMultiLanguageEnabled ? langFilter : page => true)
                             .Select(GetDirectoryContent);
            var childFiles  = Node.WebFiles.Select(GetDirectoryContent);
            var childBlogs  = GetRelatedEntities(new Relationship("adx_webpage_blog")).Select(GetDirectoryContent);
            var childEvents = GetRelatedEntities(new Relationship("adx_webpage_event")).Select(GetDirectoryContent);
            var childForums = GetRelatedEntities(new Relationship("adx_webpage_communityforum")).Select(GetDirectoryContent);

            var children = childPages
                           .Concat(childFiles)
                           .Concat(childBlogs)
                           .Concat(childEvents)
                           .Concat(childForums)
                           .Where(content => content != null)
                           .OrderByDescending(content => content.mime == DirectoryMimeType)
                           .ThenBy(content => content.name)
                           .ToArray();

            return(new[] { directoryFile }.Concat(children).ToArray());
        }
예제 #2
0
        protected override DirectoryContent[] GetChildren()
        {
            var directoryFile = new DirectoryContent
            {
                name  = Info.name,
                hash  = new DirectoryContentHash(EntityReference).ToString(),
                url   = Info.url,
                date  = Info.date,
                read  = Info.read,
                write = Info.write,
                rm    = Info.rm,
                mime  = "application/x-{0}".FormatWith(EntityReference.LogicalName),
                size  = 0,
            };

            var children = DirectoryType.GetEntityChildren(ServiceContext, Entity, Website)
                           .Select(GetDirectoryContent)
                           .Where(content => content != null)
                           .OrderByDescending(content => content.mime == DirectoryMimeType)
                           .ThenBy(content => content.name)
                           .ToArray();

            return(new[] { directoryFile }.Concat(children).ToArray());
        }
예제 #3
0
        protected virtual DirectoryContent GetDirectoryContent(Entity entity)
        {
            if (entity == null)
            {
                return(null);
            }

            string url;

            try
            {
                url = UrlProvider.GetUrl(ServiceContext, entity);
            }
            catch (Exception e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Error getting URL for entity [{0}:{1}]: {2}", entity.LogicalName, entity.Id, e.ToString()));

                return(null);
            }

            if (url == null)
            {
                return(null);
            }

            bool canWrite;

            try
            {
                if (!SecurityProvider.TryAssert(ServiceContext, entity, CrmEntityRight.Read))
                {
                    return(null);
                }

                canWrite = SecurityProvider.TryAssert(ServiceContext, entity, CrmEntityRight.Change);
            }
            catch (InvalidOperationException e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Error validating security for entity [{0}:{1}]: {2}", entity.LogicalName, entity.Id, e.ToString()));

                return(null);
            }

            var content = new DirectoryContent
            {
                url  = url,
                date = FormatDateTime(entity.GetAttributeValue <DateTime?>("modifiedon")),
                read = true,
                rm   = false,
            };

            DirectoryType directoryType;

            if (FileSystem.EntityDirectoryTypes.TryGetValue(entity.LogicalName, out directoryType))
            {
                content.hash  = new DirectoryContentHash(entity, true).ToString();
                content.name  = directoryType.GetDirectoryName(entity);
                content.mime  = DirectoryMimeType;
                content.size  = 0;
                content.write = directoryType.SupportsUpload && SecurityProvider.TryAssert(ServiceContext, entity, CrmEntityRight.Change);

                return(content);
            }

            content.write = canWrite;
            content.name  = entity.GetAttributeValue <string>("adx_name");
            content.hash  = new DirectoryContentHash(entity).ToString();

            if (entity.LogicalName != "adx_webfile")
            {
                content.mime = "application/x-{0}".FormatWith(entity.LogicalName);
                content.size = 0;

                return(content);
            }

            var fileNote = ServiceContext.GetNotes(entity)
                           .Where(e => e.GetAttributeValue <bool?>("isdocument").GetValueOrDefault())
                           .OrderByDescending(e => e.GetAttributeValue <DateTime?>("createdon"))
                           .FirstOrDefault();

            if (fileNote == null)
            {
                return(null);
            }

            content.mime = fileNote.GetAttributeValue <string>("mimetype");
            content.size = fileNote.GetAttributeValue <int?>("filesize").GetValueOrDefault();
            content.rm   = canWrite;

            return(content);
        }