public List <dtoNodeItem> GetFoldersNodes(List <FolderType> folderTypes, dtoDisplayRepositoryItem currentFolder, RepositoryType type, Int32 idCommunity = -1, Boolean onlyAvailable = true, Boolean alsoTagChildren = false, Boolean removeDeleted = true)
 {
     return(GetItemsNodes(new List <ItemType>()
     {
         ItemType.Folder
     }, folderTypes, currentFolder, type, idCommunity, onlyAvailable, alsoTagChildren, removeDeleted));
 }
        public object Clone()
        {
            dtoDisplayRepositoryItem clone = new dtoDisplayRepositoryItem();

            clone.Children        = new List <dtoDisplayRepositoryItem>();
            clone.IsUserAvailable = this.IsUserAvailable;
            clone.Permissions     = this.Permissions;
            clone.Id              = this.Id;
            clone.IdFolder        = this.IdFolder;
            clone.UniqueId        = this.UniqueId;
            clone.IdVersion       = this.IdVersion;
            clone.UniqueIdVersion = this.UniqueIdVersion;
            clone.IdCommunity     = IdCommunity;
            clone.Type            = Type;
            clone.Name            = Name;
            clone.Extension       = Extension;
            clone.Url             = Url;
            clone.ContentType     = ContentType;
            clone.IsFile          = IsFile;
            clone.IdOwner         = IdOwner;
            clone.OwnerName       = OwnerName;
            clone.CreatedOn       = CreatedOn;
            clone.IdModifiedBy    = IdModifiedBy;
            clone.ModifiedOn      = ModifiedOn;
            clone.ModifiedBy      = ModifiedBy;
            clone.Size            = Size;
            clone.VersionsSize    = VersionsSize;
            clone.DeletedSize     = DeletedSize;
            clone.Description     = Description;
            clone.Tags            = Tags;
            clone.IsDownloadable  = IsDownloadable;
            clone.Deleted         = Deleted;
            clone.CloneOf         = CloneOf;
            clone.CloneOfUniqueId = CloneOfUniqueId;
            clone.AllowUpload     = AllowUpload;
            clone.FolderType      = FolderType;
            clone.IsVisible       = IsVisible;
            clone.DisplayOrder    = DisplayOrder;
            clone.Availability    = Availability;
            clone.Status          = Status;
            clone.HasVersions     = HasVersions;
            clone.DisplayMode     = DisplayMode;
            clone.RevisionsNumber = RevisionsNumber;
            clone.Thumbnail       = Thumbnail;
            clone.AutoThumbnail   = AutoThumbnail;
            clone.PreviewTime     = PreviewTime;
            clone.Time            = Time;
            clone.Number          = Number;
            clone.IdPlayer        = IdPlayer;
            clone.Downloaded      = Downloaded;
            clone.IsInternal      = IsInternal;
            clone.Module          = Module;
            clone.IsVirtual       = IsVirtual;
            clone.Path            = Path;
            if (Identifier != null)
            {
                clone.Identifier = (dtoItemIdentifier)Identifier.Clone();
            }
            return(clone);
        }
        private List <dtoNodeItem> CreateItemsNodes(dtoNodeItem father, dtoDisplayRepositoryItem item, List <ItemType> types, List <FolderType> folderTypes, dtoDisplayRepositoryItem currentFolder, RepositoryType type, Int32 idCommunity = -1, Boolean onlyAvailable = true, Boolean alsoTagChildren = false, Boolean removeDeleted = true)
        {
            List <dtoNodeItem> results = new List <dtoNodeItem>();

            dtoNodeItem cNode    = CreateItemNode(father, item, currentFolder, type, idCommunity);
            dtoNodeItem openNode = CreateOpenNode(cNode, item.Children.Any());

            results.Add(openNode);
            results.Add(cNode);
            if (item.Children.Any(c => IsItemAvailable(c, types, onlyAvailable, folderTypes, removeDeleted)))
            {
                results.Add(new dtoNodeItem()
                {
                    Type = NodeType.OpenChildren
                });
                item.Children.Where(c => IsItemAvailable(c, types, onlyAvailable, folderTypes, removeDeleted)).ToList().ForEach(n => results.AddRange(CreateItemsNodes(openNode, n, types, folderTypes, currentFolder, type, idCommunity, onlyAvailable, alsoTagChildren, removeDeleted)));
                results.Add(new dtoNodeItem()
                {
                    Type = NodeType.CloseChildren
                });
            }
            else
            {
                results.Add(new dtoNodeItem()
                {
                    Type = NodeType.NoChildren
                });
            }

            results.Add(new dtoNodeItem()
            {
                Type = NodeType.CloseNode
            });
            return(results);
        }
        public static dtoDisplayRepositoryItem GenerateFolder(FolderType type, String name, dtoDisplayRepositoryItem father = null)
        {
            dtoDisplayRepositoryItem folder = GenerateFolder(name);

            folder.Id                    = -(int)type;
            folder.FolderType            = type;
            folder.IdFolder              = (father == null) ? 0 : father.Id;
            folder.IdentifierPath        = CreateIdentifierPath(folder.Id, (father == null) ? "": father.IdentifierPath);
            folder.Father                = father;
            folder.Identifier.Type       = ItemIdentifierType.standard;
            folder.Identifier.FolderType = type;
            return(folder);
        }
        public static dtoDisplayRepositoryItem GenerateFolder(String name)
        {
            dtoDisplayRepositoryItem folder = new dtoDisplayRepositoryItem();

            folder.UniqueId        = Guid.Empty;
            folder.Name            = name;
            folder.IsVisible       = true;
            folder.Availability    = ItemAvailability.available;
            folder.IsUserAvailable = true;
            folder.Status          = ItemStatus.Active;
            folder.Type            = ItemType.Folder;
            folder.Children        = new List <dtoDisplayRepositoryItem>();
            folder.IsVirtual       = true;
            return(folder);
        }
        private List <dtoFolderItem> GetBreadCrumb(dtoDisplayRepositoryItem child, Boolean onlyAvailable, RepositoryType type, Int32 idCommunity = -1, Boolean removeDeleted = true)
        {
            List <dtoFolderItem> folders = new List <dtoFolderItem>();
            dtoFolderItem        folder  = new dtoFolderItem()
            {
                Id = Id, FolderType = FolderType, Name = Name, IdentifierPath = IdentifierPath, TemplateUrl = RootObject.FolderUrlTemplate(Id, FolderType, IdentifierPath, type, idCommunity)
            };

            folder.IsInCurrentPath = true;
            if (Father != null)
            {
                folders.AddRange(Father.GetBreadCrumb(this, onlyAvailable, type, idCommunity, removeDeleted));
            }
            folders.Add(folder);
            return(folders);
        }
        public static dtoDisplayRepositoryItem CreateFromInternal(dtoRepositoryItem source, Int32 idPerson, Boolean allowManage, Boolean allowView)
        {
            dtoDisplayRepositoryItem item = new dtoDisplayRepositoryItem(source);

            item.Children        = new List <dtoDisplayRepositoryItem>();
            item.IsUserAvailable = true;
            item.Permissions     = new ItemPermission();

            Boolean isOwner = (item.IdOwner == idPerson);

            switch (item.Type)
            {
            case ItemType.File:
                item.Permissions.Unzip = (item.Availability == ItemAvailability.available) && ((item.Extension == ".zip") && (allowManage || isOwner));
                item.Permissions.Zip   = (item.Availability == ItemAvailability.available) && (allowManage || isOwner);
                break;

            case ItemType.Folder:
                break;

            case ItemType.Multimedia:
            case ItemType.ScormPackage:
                item.Permissions.CanEditSettings = (allowManage || isOwner);
                item.Permissions.EditSettings    = IsAvailableByType(item.Type, item.Availability) && (allowManage || isOwner);
                item.Permissions.Zip             = (item.Availability == ItemAvailability.available) && (allowManage || isOwner);
                break;

            case ItemType.Link:
                break;
            }
            item.Permissions.Edit                = (allowManage || isOwner);
            item.Permissions.ViewMyStatistics    = ((item.Deleted == DomainModel.BaseStatusDeleted.None && item.Type != ItemType.Link && item.Type != ItemType.Folder && item.Type != ItemType.File) && !(allowManage || (isOwner && IsAvailableByType(item.Type, item.Availability))));
            item.Permissions.ViewOtherStatistics = (item.Deleted == DomainModel.BaseStatusDeleted.None && item.Type != ItemType.Link && item.Type != ItemType.Folder && item.Type != ItemType.File) && (allowManage || (isOwner && IsAvailableByType(item.Type, item.Availability)));

            item.Permissions.VersioningAvailable = true;
            item.Permissions.ViewPermission      = item.Permissions.Edit;
            item.Permissions.Delete        = (item.Deleted != DomainModel.BaseStatusDeleted.None && allowManage);
            item.Permissions.UnDelete      = (item.Deleted != DomainModel.BaseStatusDeleted.None && allowManage);
            item.Permissions.VirtualDelete = (item.Deleted == DomainModel.BaseStatusDeleted.None && allowManage);


            item.Permissions.Download = (item.Availability != ItemAvailability.notavailable) && (allowManage || (item.IsDownloadable && item.Type != ItemType.Folder && (isOwner || allowView)));
            item.Permissions.Play     = IsAvailableByType(item.Type, item.Availability) && (item.Type == ItemType.Multimedia || item.Type == ItemType.ScormPackage) && ((allowManage || allowView) && item.Type != ItemType.Folder);
            item.Permissions.Preview  = IsAvailableByType(item.Type, item.Availability) && (item.DisplayMode == Domain.DisplayMode.inModal || item.DisplayMode == Domain.DisplayMode.downloadOrPlayOrModal);
            return(item);
        }
        public List <dtoDisplayRepositoryItem> GetFoldersTree(Boolean onlyAvailable, Boolean removeDeleted = true, dtoDisplayRepositoryItem father = null)
        {
            List <dtoDisplayRepositoryItem> results = new List <dtoDisplayRepositoryItem>();

            if (IsAvailableForDelete(Deleted, removeDeleted) && (Father == null || (Father != null && IsAvailableForDelete(Father.Deleted, removeDeleted))))
            {
                dtoDisplayRepositoryItem folder = null;
                if (Type == ItemType.Folder && (!onlyAvailable || (onlyAvailable && IsUserAvailable)))
                {
                    folder = (dtoDisplayRepositoryItem)this.Clone();
                    folder.IdentifierPath = CreateIdentifierPath(folder.Id, (father == null) ? "" : father.IdentifierPath);
                    folder.Father         = father;
                }
                if (Type == ItemType.Folder && Children.Any(c => c.Type == ItemType.Folder))
                {
                    Children.Where(c => c.Type == ItemType.Folder).ToList().ForEach(c => folder.Children.AddRange(c.GetFoldersTree(onlyAvailable, removeDeleted, folder)));
                }
                results.Add(folder);
            }
            return(results);
        }
        private dtoNodeItem CreateItemNode(dtoNodeItem father, dtoDisplayRepositoryItem item, dtoDisplayRepositoryItem currentFolder, RepositoryType type, Int32 idCommunity = -1)
        {
            dtoNodeItem node = new dtoNodeItem()
            {
                Type = NodeType.Item, IsCurrent = (currentFolder != null && currentFolder.Id == item.Id && currentFolder.FolderType == item.FolderType && currentFolder.IdentifierPath == item.IdentifierPath)
            };

            node.Id             = item.Id;
            node.IdFolder       = item.IdFolder;
            node.FolderType     = item.FolderType;
            node.IdCommunity    = item.IdCommunity;
            node.ItemType       = item.Type;
            node.Name           = item.DisplayName;
            node.IdentifierPath = item.IdentifierPath;
            if (father != null)
            {
                node.Fathers.Add(father);
                node.Fathers.AddRange(father.Fathers);
            }
            node.HasCurrent = (currentFolder != null && (currentFolder.GetIdFathers().Where(f => f > 0).Contains(item.Id) || item.ContainsFolder(currentFolder.Id, currentFolder.FolderType, currentFolder.IdentifierPath)));
            switch (item.Type)
            {
            case ItemType.Folder:
                switch (item.FolderType)
                {
                case Domain.FolderType.standard:
                    node.TemplateNavigateUrl = RootObject.FolderUrlTemplate(item.Id, item.FolderType, type, idCommunity);
                    break;

                default:
                    node.TemplateNavigateUrl = RootObject.FolderUrlTemplate(item.Id, item.FolderType, item.IdentifierPath, type, idCommunity);
                    break;
                }
                break;
            }

            return(node);
        }
        public List <dtoNodeItem> GetItemsNodes(List <ItemType> types, List <FolderType> folderTypes, dtoDisplayRepositoryItem currentFolder, RepositoryType type, Int32 idCommunity = -1, Boolean onlyAvailable = true, Boolean alsoTagChildren = false, Boolean removeDeleted = true)
        {
            List <dtoNodeItem> nodes = new List <dtoNodeItem>();

            if (IsItemAvailable(this, types, onlyAvailable, folderTypes, removeDeleted))
            {
                nodes.AddRange(CreateItemsNodes(null, this, types, folderTypes, currentFolder, type, idCommunity, onlyAvailable, alsoTagChildren, removeDeleted));
            }
            return(nodes);
        }
 private Boolean IsItemAvailable(dtoDisplayRepositoryItem item, Boolean onlyAvailable, List <FolderType> folderTypes, Boolean removeDeleted)
 {
     return((!onlyAvailable || (onlyAvailable && IsUserAvailable)) && (!removeDeleted || (removeDeleted && item.Deleted == DomainModel.BaseStatusDeleted.None)) &&
            (folderTypes == null || !folderTypes.Any() || folderTypes.Contains(item.FolderType)));
 }
 private Boolean IsItemAvailable(dtoDisplayRepositoryItem item, List <ItemType> types, Boolean onlyAvailable, List <FolderType> folderTypes, Boolean removeDeleted)
 {
     return(types.Contains(item.Type) && IsItemAvailable(item, onlyAvailable, folderTypes, removeDeleted));
 }