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