Exemplo n.º 1
0
 public void ToFaher(long idProject, long idActivity, List <dtoLiteMapActivity> activities)
 {
     if (UserContext.isAnonymous)
     {
         View.DisplaySessionTimeout();
     }
     else
     {
         PmActivity activity = Service.GetActivity(idActivity);
         if (activity == null)
         {
             List <dtoMapActivity> dbActivities = Service.GetActivities(idProject, View.ProjectIdCommunity, CurrentIdModule, View.UnknownUser, activities);
             View.SendUserAction(View.ProjectIdCommunity, CurrentIdModule, idProject, ModuleProjectManagement.ActionType.ActivityToFatherErrors);
             if (dbActivities != null)
             {
                 View.LoadActivities(dbActivities);
             }
             else
             {
                 View.DisplayErrorGetActivitiesFromDB();
             }
         }
         else
         {
             long idParent = (activity.Parent != null) ? ((activity.Parent.Parent == null) ? 0 : activity.Parent.Parent.Id) : 0;
             MoveActivityTo(idProject, idActivity, idParent, activities, ModuleProjectManagement.ActionType.ActivityToFather);
         }
     }
 }
        private ProjectAttachment AttachmentGet(Project project, PmActivity activity, long idItem)
        {
            ProjectAttachment attachment = null;

            try
            {
                if (activity != null)
                {
                    attachment = (from a in Manager.GetIQ <ProjectAttachment>()
                                  where a.Item != null && a.Project != null && a.Project.Id == project.Id &&
                                  a.Activity != null && a.Activity.Id == activity.Id &&
                                  a.Item != null && a.Item.Id == idItem
                                  select a).Skip(0).Take(1).ToList().FirstOrDefault();
                }
                else
                {
                    attachment = (from a in Manager.GetIQ <ProjectAttachment>()
                                  where a.Item != null && a.Project != null && a.Project.Id == project.Id && a.Item.Id == idItem
                                  select a).Skip(0).Take(1).ToList().FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
            }

            return(attachment);
        }
        public List <ProjectAttachment> AttachmentsAddFiles(long idProject, long idActivity, List <dtoModuleUploadedItem> files)
        {
            List <ProjectAttachment> attachments = null;
            Boolean isInTransaction = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                PmActivity activity = (idActivity > 0) ? Manager.Get <PmActivity>(idProject) : null;
                Project    project  = (idActivity == 0 && idProject > 0) ? Manager.Get <Project>(idProject) : ((activity == null) ? null : activity.Project);
                attachments = AttachmentsAddFiles(project, activity, files);
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                attachments = null;
            }
            return(attachments);
        }
        public List <RepositoryItemLink <long> > AttachmentsGetLinkedFiles(String unknownUser, long idProject, long idActivity, Boolean loadDeleted = false)
        {
            PmActivity activity = (idActivity > 0) ? Manager.Get <PmActivity>(idProject) : null;
            Project    project  = (idActivity == 0 && idProject > 0) ? Manager.Get <Project>(idProject) : ((activity == null) ? null : activity.Project);

            return(AttachmentsGetLinkedFiles(unknownUser, project, activity, loadDeleted));
        }
Exemplo n.º 5
0
        public void AddFilesToItem(long idProject, long idActivity)
        {
            if (UserContext.isAnonymous)
            {
                View.DisplayWorkingSessionExpired();
            }
            else
            {
                List <lm.Comol.Core.FileRepository.Domain.dtoModuleUploadedItem> files = null;
                PmActivity activity = (idActivity > 0) ? CurrentManager.Get <PmActivity>(idActivity) : null;
                Project    project  = (idProject > 0) ? CurrentManager.Get <Project>(idProject) : ((activity != null) ? activity.Project : null);
                if (idActivity > 0)
                {
                    if (activity == null)
                    {
                        View.DisplayActivityNotFound();
                        View.SendUserAction(View.IdProjectCommunity, CurrentIdModule, idProject, idActivity, ModuleProjectManagement.ActionType.AttachmentsActivityNotFound);
                        return;
                    }
                    else
                    {
                        files = View.UploadFiles(activity, false);
                    }
                }
                else if (idProject > 0 && project != null)
                {
                    files = View.UploadFiles(project, false);
                }
                else
                {
                    View.DisplayProjectNotFound();
                    View.SendUserAction(View.IdProjectCommunity, CurrentIdModule, idProject, idActivity, ModuleProjectManagement.ActionType.AttachmentsProjectNotFound);
                    return;
                }

                if (files != null && files.Any(f => f.IsAdded))
                {
                    List <ProjectAttachment> attachments = Service.AttachmentsAddFiles(project, activity, files.Where(f => f.IsAdded).ToList());
                    if (attachments == null)
                    {
                        View.DisplayItemsNotAdded();
                    }
                    else
                    {
                        View.DisplayItemsAdded();
                    }
                    View.SendUserAction(View.IdProjectCommunity, CurrentIdModule, idProject, idActivity, (attachments == null) ? ModuleProjectManagement.ActionType.AttachmentsNotAddedFiles : ModuleProjectManagement.ActionType.AttachmentsAddedFiles);
                }
                else
                {
                    View.DisplayNoFilesToAdd();
                }
            }
        }
        private long AttachmentsGetMaxDisplayOrder(Project project, PmActivity activity = null)
        {
            long dOrder = 1;

            var query = (from s in Manager.GetIQ <ProjectAttachmentLink>()
                         where s.Deleted == BaseStatusDeleted.None && ((activity == null && s.IsForProject) || (!s.IsForProject && s.Activity == activity)) && s.Project == project
                         select s);

            foreach (ProjectAttachmentLink a in query.ToList().OrderBy(a => a.DisplayOrder).ThenBy(a => a.CreatedOn))
            {
                a.DisplayOrder = dOrder++;
            }
            return(dOrder);
        }
        private List <dtoAttachment> AttachmentsGet(Project project, PmActivity activity, Boolean getDeleted, String unknownUser)
        {
            List <dtoAttachment> attachments = project.AttachmentLinks.Where(a => ((getDeleted && a.Deleted == BaseStatusDeleted.Manual) || (!getDeleted && a.Deleted == BaseStatusDeleted.None)) &&
                                                                             a.Project == project && a.Activity == activity).OrderBy(a => a.DisplayOrder).ThenBy(a => a.Id).Select(a =>
                                                                                                                                                                                   new dtoAttachment(a)).ToList();

            Dictionary <Int32, String> users = GetUsers(attachments.Select(i => i.IdCreatedBy).Distinct().ToList(), unknownUser);

            foreach (dtoAttachment item in attachments)
            {
                item.CreatedBy = users[item.IdCreatedBy];
            }
            return(attachments);
        }
        private ActivityRole AttachmentGetContainerRole(Project project, PmActivity activity, ProjectResource resource, ModuleProjectManagement mPermission)
        {
            ActivityRole role = (resource != null) ? resource.ProjectRole : ((!project.isPersonal && mPermission.Administration) ? ActivityRole.Manager : ActivityRole.None);

            if (resource != null && activity != null && resource.Visibility == ProjectVisibility.InvolvedTasks && role != ActivityRole.Manager && role != ActivityRole.ProjectOwner)
            {
                if (activity.IsSummary)
                {
                    role = (ResourceHasActivityAssignments(resource, activity) ? role : ActivityRole.None);
                }
                else
                {
                    role = (activity.Assignments.Where(a => a.Deleted == BaseStatusDeleted.None && a.Resource == resource).Any()) ? role: ActivityRole.None;
                }
            }
            return(role);
        }
        private Boolean ResourceHasActivityAssignments(ProjectResource resource, PmActivity father)
        {
            Boolean result = false;

            foreach (PmActivity child in father.Children.Where(c => c.Deleted == BaseStatusDeleted.None))
            {
                if (child.IsSummary)
                {
                    result = ResourceHasActivityAssignments(resource, child);
                }
                else
                {
                    result = child.Assignments.Where(a => a.Deleted == BaseStatusDeleted.None && a.Resource == resource).Any();
                }
                if (result)
                {
                    return(result);
                }
            }
            return(result);
        }
        //public List<lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions> AttachmentsGetAvailableUploadActions()
        //{
        //    List<lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions> actions = new List<lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions>();

        //    return actions;
        //}

        //public List<lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions> GetAttachmentsAvailableActions()
        //{

        //    ModuleRepository moduleRepository = View.RepositoryPermission(CommunityId);
        //    CoreItemPermission oPermission = Service.GetItemPermission(oItem, module, moduleRepository);
        //    if (oPermission.AllowAddFiles || oPermission.AllowEdit)
        //    {
        //        if (oItem.CommunityOwner == null)
        //        {
        //            View.AllowCommunityUpload = false;
        //            View.AllowCommunityLink = false;
        //        }
        //        View.AllowCommunityUpload = oPermission.AllowEdit && (moduleRepository.Administration || moduleRepository.UploadFile);
        //        View.AllowCommunityLink = oPermission.AllowEdit && (moduleRepository.Administration || moduleRepository.UploadFile || moduleRepository.ListFiles || moduleRepository.DownLoad);
        //        if (oPermission.AllowEdit && (moduleRepository.Administration || moduleRepository.UploadFile))
        //        {
        //            View.InitializeCommunityUploader(0, CommunityId, moduleRepository);
        //        }
        //        if (oPermission.AllowEdit)
        //        {
        //            View.InitializeModuleUploader(CommunityId);
        //        }
        //        View.AllowUpload = oPermission.AllowAddFiles;
        //        //  this.View.BackToDiary = CommunityID;
        //        View.SetBackToItemsUrl(CommunityId, oItem.Id);
        //        View.SetBackToItemUrl(CommunityId, oItem.Id);
        //        View.SetMultipleUploadUrl(oItem.Id);
        //        LoadItemFiles(oItem, oPermission);
        //    }
        //    else
        //    {
        //        this.View.ReturnToItemsList(CommunityId, oItem.Id);
        //    }


        //}

        #region "Add"
        #endregion

        #region "Manage"
        //public List<dtoAttachmentItem> GetProjectAttachments(long idProject)
        //    {
        //        List<dtoAttachmentItem> attachments = null;
        //        Boolean isInTransaction = Manager.IsInTransaction();
        //        try
        //        {
        //            if (!isInTransaction)
        //                Manager.BeginTransaction();
        //            Project project = Manager.Get<Project>(idProject);
        //            if (project !=null){
        //
        //            }
        //            if (!isInTransaction)
        //                Manager.Commit();
        //        }
        //        catch (Exception ex)
        //        {
        //            if (!isInTransaction)
        //                Manager.RollBack();
        //            attachments = null;
        //        }
        //        return attachments;


        //        PmActivityPermission pPermissions = GetProjectPermission(idProject, UserContext.CurrentUserID)
        //    }
        //public List<dtoAttachmentItem> GetProjectAttachments(long idProject, ModuleProjectManagement mPermission)
        //{

        //}

        public List <dtoAttachmentItem> GetProjectAttachments(long idProject, long idActivity, Boolean getDeleted, String unknownUser, Boolean onlyAvailable = false)
        {
            List <dtoAttachmentItem> attachments = null;
            Boolean isInTransaction = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                litePerson person   = Manager.Get <litePerson>(UC.CurrentUserID);
                PmActivity activity = (idActivity > 0) ? Manager.Get <PmActivity>(idActivity) : null;
                Project    project  = (activity != null && activity.Project != null) ? activity.Project : Manager.Get <Project>(idProject);
                if (project != null && person != null && person.TypeID != (int)UserTypeStandard.Guest && (idActivity <= 0 || (idActivity > 0 && activity != null)))
                {
                    ModuleProjectManagement mPermission    = (project.isPortal) ? ModuleProjectManagement.CreatePortalmodule((person == null) ? (Int32)UserTypeStandard.Guest : person.TypeID) : new ModuleProjectManagement(Manager.GetModulePermission(person.Id, (!project.isPortal && project.Community != null) ? project.Community.Id : 0, GetIdModule()));
                    ProjectResource         resource       = project.Resources.Where(r => r.Deleted == BaseStatusDeleted.None && r.Type == ResourceType.Internal && r.Person == person).FirstOrDefault();
                    PmActivityPermission    rolePermission = GetRolePermissions(AttachmentGetContainerRole(project, activity, resource, mPermission));


                    attachments = AttachmentsGet(person, project, activity, getDeleted, rolePermission, mPermission, unknownUser);
                }
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                attachments = null;
            }
            return((onlyAvailable && attachments != null) ? attachments.Where(a => a.Permissions.Download || a.Permissions.Play).ToList() : attachments);
        }
        private List <StandardActionType> GetAllowedStandardActionForFile(int idUser, ModuleObject source, ModuleObject destination)
        {
            List <StandardActionType> actions = new List <StandardActionType>();
            litePerson person   = Manager.Get <litePerson>(idUser);
            Project    project  = ((Int32)ModuleProjectManagement.ObjectType.Project == source.ObjectTypeID) ? Manager.Get <Project>(source.ObjectLongID) : null;
            PmActivity activity = ((Int32)ModuleProjectManagement.ObjectType.Task == source.ObjectTypeID) ? Manager.Get <PmActivity>(source.ObjectLongID) : null;

            if (project == null && activity != null)
            {
                project = activity.Project;
            }
            if (project != null)
            {
                ProjectAttachment attachment = AttachmentGet(project, activity, destination.ObjectLongID);
                if (attachment != null && attachment.Link != null && destination.ObjectLongID == attachment.Item.Id && destination.FQN == attachment.Item.GetType().FullName)
                {
                    dtoAttachmentPermission permissions = AttachmentGetPermissions(person, attachment, project, activity);
                    if (permissions.SetMetadata)
                    {
                        actions.Add(StandardActionType.EditMetadata);
                    }
                    if (permissions.Play)
                    {
                        actions.Add(StandardActionType.Play);
                    }
                    if (permissions.ViewMyStatistics)
                    {
                        actions.Add(StandardActionType.ViewPersonalStatistics);
                    }
                    if (permissions.ViewOtherStatistics)
                    {
                        actions.Add(StandardActionType.ViewAdvancedStatistics);
                    }
                }
            }
            return(actions);
        }
        private dtoAttachmentPermission AttachmentGetPermissions(litePerson person, dtoAttachment attachment, PmActivity activity, PmActivityPermission rolePermissions, ModuleProjectManagement mPermission, ModuleRepository repositoryPermissions)
        {
            dtoAttachmentPermission result = new dtoAttachmentPermission();

            switch (attachment.Type)
            {
            case AttachmentType.file:
                result.Download = (attachment.File != null && (attachment.File.IsDownloadable || attachment.File.Type == ItemType.Link)) && (HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments));
                result.Play     = (attachment.File != null && (attachment.File.Type == ItemType.Multimedia || attachment.File.Type == ItemType.ScormPackage || attachment.File.Type == ItemType.VideoStreaming)) && (HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments));

                switch (attachment.File.Type)
                {
                case ItemType.ScormPackage:
                case ItemType.Multimedia:
                    result.ViewMyStatistics = HasPermission(rolePermissions, PmActivityPermission.ViewAttachments);
                    if (attachment.File.IsInternal || (repositoryPermissions.Administration || (repositoryPermissions.EditOthersFiles || (repositoryPermissions.EditMyFiles && attachment.File.IdOwner == person.Id))))
                    {
                        result.ViewOtherStatistics = HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id);
                        result.SetMetadata         = result.ViewOtherStatistics;
                    }
                    break;

                case ItemType.Link:
                    result.Play = result.Download;
                    break;
                }
                result.Edit = false;
                break;

            case AttachmentType.url:
                result.Download = HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments);
                result.Play     = result.Download;
                result.Edit     = HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id);
                break;
            }

            result.Delete        = false;
            result.UnDelete      = (attachment.Deleted != BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualUnDeleteAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id));
            result.Unlink        = (attachment.InSharing && attachment.Deleted == BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualDeleteAttachments) || HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.CreatedBy != null && attachment.IdCreatedBy == person.Id));
            result.VirtualDelete = (attachment.Deleted == BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualDeleteAttachments) || HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id));
            return(result);
        }
        private ProjectAttachmentLink GenerateLink(ProjectAttachment attachment, long displayOrder, litePerson person = null, Project project = null, PmActivity activity = null)
        {
            ProjectAttachmentLink link = new ProjectAttachmentLink();

            if (person != null && project != null)
            {
                link.CreateMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress);
                link.Project      = project;
                link.Activity     = activity;
                link.Attachment   = attachment;
                link.DisplayOrder = displayOrder;
                link.Type         = AttachmentLinkType.Shared;
                link.IsForProject = (activity == null);
            }
            else
            {
                link = ProjectAttachmentLink.CreateFromAttachment(attachment, displayOrder++);
            }
            return(link);
        }
        public List <RepositoryItemLink <long> > AttachmentsGetLinkedFiles(String unknownUser, Project project, PmActivity activity, Boolean loadDeleted = false)
        {
            List <RepositoryItemLink <long> > items = new List <RepositoryItemLink <long> >();

            try
            {
                List <ProjectAttachment> attachments = project.Attachments.Where(a => (loadDeleted || (!loadDeleted && a.Deleted == BaseStatusDeleted.None)) && a.Type == AttachmentType.file &&
                                                                                 ((activity == null && a.IsForProject) || (activity != null && !a.IsForProject && a.Activity == activity))).ToList();

                attachments.ForEach(a => items.Add(new RepositoryItemLink <long>()
                {
                    IdCreatedBy  = a.IdCreatedBy,
                    CreatedOn    = a.CreatedOn,
                    Deleted      = a.Deleted,
                    File         = new RepositoryItemObject(a.Item),
                    IdObjectLink = a.Id,
                    IdStatus     = 0,
                    Link         = a.Link,
                    IdModifiedBy = a.IdModifiedBy,
                    ModifiedOn   = a.ModifiedOn,
                    IdOwner      = a.IdCreatedBy,
                    IsVisible    = (a.Deleted == BaseStatusDeleted.None && a.Item != null && a.Item.Deleted == BaseStatusDeleted.None && (a.Version == null || a.Version.Deleted == BaseStatusDeleted.None))
                }));

                if (activity != null)
                {
                    (from s in Manager.GetIQ <ProjectAttachmentLink>()
                     where (loadDeleted || (!loadDeleted && s.Deleted == BaseStatusDeleted.None)) && s.Activity == activity && s.Attachment != null
                     select s).ToList().Where(s => s.Attachment.Activity != activity).ToList().ForEach(s => items.Add(new RepositoryItemLink <long>()
                    {
                        IdCreatedBy       = s.IdCreatedBy,
                        CreatedOn         = s.CreatedOn,
                        Deleted           = s.Deleted,
                        File              = new RepositoryItemObject(s.Attachment.Item),
                        IdObjectLink      = s.Id,
                        AlwaysLastVersion = true,
                        IdStatus          = 0,
                        Link              = s.Attachment.Link,
                        IdModifiedBy      = s.IdModifiedBy,
                        ModifiedOn        = s.ModifiedOn,
                        IdOwner           = s.IdCreatedBy,
                        IsVisible         = (s.Deleted == BaseStatusDeleted.None && s.Attachment.Item != null && s.Attachment.Item.Deleted == BaseStatusDeleted.None && (s.Attachment.Version == null || s.Attachment.Version.Deleted == BaseStatusDeleted.None))
                    }));
                }
            }
            catch (Exception ex) {
            }
            Dictionary <Int32, String> users = GetUsers(items.Select(i => i.IdOwner).Distinct().ToList(), items.Select(i => i.IdModifiedBy).Distinct().ToList(), items.Select(i => i.IdCreatedBy).Distinct().ToList(), unknownUser);

            foreach (RepositoryItemLink <long> item in items)
            {
                item.Owner      = users[item.IdOwner];
                item.ModifiedBy = users[item.IdModifiedBy];
                item.CreatedBy  = users[item.IdCreatedBy];
            }
            List <RepositoryItemLink <long> > orderedFiles;

            orderedFiles = (from f in items where f.File == null || f.Link == null orderby f.CreatedOn select f).ToList();
            orderedFiles.AddRange((from f in items where f.File != null && f.Link != null orderby f.File.DisplayName select f).ToList());
            return(orderedFiles);
        }
        public List <RepositoryItemLinkBase <long> > AttachmentsGetBaseLinkedFiles(Project project, PmActivity activity, Boolean loadDeleted = false)
        {
            List <RepositoryItemLinkBase <long> > items = new List <RepositoryItemLinkBase <long> >();

            try
            {
                List <ProjectAttachment> attachments = project.Attachments.Where(a => (loadDeleted || (!loadDeleted && a.Deleted == BaseStatusDeleted.None)) && a.Type == AttachmentType.file &&
                                                                                 ((activity == null && a.IsForProject) || (activity != null && !a.IsForProject && a.Activity == activity))).ToList();

                attachments.ForEach(a => items.Add(new RepositoryItemLinkBase <long>()
                {
                    Deleted           = a.Deleted,
                    File              = new RepositoryItemObject(a.Item),
                    IdObjectLink      = a.Id,
                    AlwaysLastVersion = true,
                    IsVisible         = (a.Deleted == BaseStatusDeleted.None && a.Item != null && a.Item.Deleted == BaseStatusDeleted.None && (a.Version == null || a.Version.Deleted == BaseStatusDeleted.None))
                }));

                if (activity != null)
                {
                    (from s in Manager.GetIQ <ProjectAttachmentLink>()
                     where (loadDeleted || (!loadDeleted && s.Deleted == BaseStatusDeleted.None)) && s.Activity == activity && s.Attachment != null
                     select s).ToList().Where(s => s.Attachment.Activity != activity).ToList().ForEach(s => items.Add(new RepositoryItemLinkBase <long>()
                    {
                        Deleted           = s.Deleted,
                        File              = new RepositoryItemObject(s.Attachment.Item),
                        IdObjectLink      = s.Id,
                        AlwaysLastVersion = true,
                        IsVisible         = (s.Deleted == BaseStatusDeleted.None && s.Attachment.Item != null && s.Attachment.Item.Deleted == BaseStatusDeleted.None && (s.Attachment.Version == null || s.Attachment.Version.Deleted == BaseStatusDeleted.None))
                    }));
                }
            }
            catch (Exception ex)
            {
            }
            return(items);
        }
        public List <ProjectAttachment> AttachmentsLinkFiles(long idProject, long idActivity, List <ModuleActionLink> links)
        {
            List <ProjectAttachment> attachments = null;
            Boolean isInTransaction = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                PmActivity activity = (idActivity > 0) ? Manager.Get <PmActivity>(idProject) : null;
                Project    project  = (idActivity == 0 && idProject > 0) ? Manager.Get <Project>(idProject) : ((activity == null) ? null : activity.Project);
                Person     person   = Manager.GetPerson(UC.CurrentUserID);
                if (links.Any() && project != null && (idActivity == 0 || activity != null) && person != null && person.TypeID != (int)UserTypeStandard.Guest && person.TypeID != (int)UserTypeStandard.PublicUser)
                {
                    DateTime date   = DateTime.Now;
                    long     dOrder = AttachmentsGetMaxDisplayOrder(project, activity);
                    attachments = new List <ProjectAttachment>();
                    foreach (ModuleActionLink link in links)
                    {
                        ProjectAttachment attachment = (from a in project.Attachments.Where(a => (idActivity == 0 && a.IsForProject) || (!a.IsForProject && a.Activity == activity))
                                                        select a).ToList().Where(a => a.Item == (liteRepositoryItem)link.ModuleObject.ObjectOwner).Skip(0).Take(1).ToList().FirstOrDefault();
                        if (attachment == null)
                        {
                            attachment = new ProjectAttachment();
                            attachment.CreateMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress, date);
                            attachment.Activity     = activity;
                            attachment.Description  = "";
                            attachment.IsForProject = (activity == null);
                            attachment.Project      = project;
                            attachment.Type         = AttachmentType.file;
                            attachment.Item         = (liteRepositoryItem)link.ModuleObject.ObjectOwner;
                            attachment.Version      = null;

                            Manager.SaveOrUpdate(attachment);
                            ProjectAttachmentLink aLink = GenerateLink(attachment, dOrder++);
                            Manager.SaveOrUpdate(aLink);
                            attachment.SharedItems.Add(aLink);
                            Manager.SaveOrUpdate(attachment);


                            ModuleLink mLink = new ModuleLink(link.Description, link.Permission, link.Action);
                            mLink.CreateMetaInfo(person, UC.IpAddress, UC.ProxyIpAddress, date);
                            mLink.DestinationItem = (ModuleObject)link.ModuleObject;
                            mLink.AutoEvaluable   = false;
                            if (attachment.IsForProject)
                            {
                                mLink.SourceItem = ModuleObject.CreateLongObject(project.Id, project, (int)ModuleProjectManagement.ObjectType.Project, (project.Community != null) ? project.Community.Id : 0, ModuleProjectManagement.UniqueCode, GetIdModule());
                            }
                            else
                            {
                                mLink.SourceItem = ModuleObject.CreateLongObject(activity.Id, activity, (int)ModuleProjectManagement.ObjectType.Task, (project.Community != null) ? project.Community.Id : 0, ModuleProjectManagement.UniqueCode, GetIdModule());
                            }
                            Manager.SaveOrUpdate(mLink);
                            attachment.Link = Manager.Get <liteModuleLink>(mLink.Id);
                            Manager.SaveOrUpdate(attachment);
                            if (activity == null)
                            {
                                project.Attachments.Add(attachment);
                            }
                            project.AttachmentLinks.Add(aLink);
                        }
                        else if (attachment.Deleted != BaseStatusDeleted.None)
                        {
                            attachment.RecoverMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress, date);
                            foreach (ProjectAttachmentLink l in attachment.SharedItems.Where(s => s.Type == AttachmentLinkType.Owner))
                            {
                                l.DisplayOrder = dOrder++;
                                l.RecoverMetaInfo(person.Id, attachment.ModifiedIpAddress, attachment.ModifiedProxyIpAddress, attachment.ModifiedOn);
                            }
                        }

                        attachments.Add(attachment);
                    }
                }
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                attachments = null;
            }
            return(attachments);
        }
        public List <ProjectAttachment> AttachmentsAddFiles(Project project, PmActivity activity, List <dtoModuleUploadedItem> items)
        {
            List <ProjectAttachment> attachments = null;
            Boolean isInTransaction = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                Person person = Manager.GetPerson(UC.CurrentUserID);
                if (items.Any() && project != null && person != null && person.TypeID != (int)UserTypeStandard.Guest && person.TypeID != (int)UserTypeStandard.PublicUser)
                {
                    long dOrder = AttachmentsGetMaxDisplayOrder(project, activity);
                    attachments = new List <ProjectAttachment>();
                    DateTime date = DateTime.Now;
                    foreach (dtoModuleUploadedItem item in items)
                    {
                        ProjectAttachment attachment = new ProjectAttachment();
                        attachment.CreateMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress, date);
                        attachment.Activity     = activity;
                        attachment.Description  = "";
                        attachment.IsForProject = (activity == null);
                        attachment.Project      = project;
                        attachment.Type         = AttachmentType.file;
                        attachment.Item         = item.ItemAdded;
                        Manager.SaveOrUpdate(attachment);
                        ProjectAttachmentLink aLink = GenerateLink(attachment, dOrder++);
                        Manager.SaveOrUpdate(aLink);
                        attachment.SharedItems.Add(aLink);
                        Manager.SaveOrUpdate(attachment);
                        ModuleLink link = new ModuleLink(item.Link.Description, item.Link.Permission, item.Link.Action);
                        link.CreateMetaInfo(person, UC.IpAddress, UC.ProxyIpAddress, date);
                        link.DestinationItem = (ModuleObject)item.Link.ModuleObject;
                        link.AutoEvaluable   = false;
                        if (attachment.IsForProject)
                        {
                            link.SourceItem = ModuleObject.CreateLongObject(project.Id, project, (int)ModuleProjectManagement.ObjectType.Project, (project.Community != null) ? project.Community.Id : 0, ModuleProjectManagement.UniqueCode, GetIdModule());
                        }
                        else
                        {
                            link.SourceItem = ModuleObject.CreateLongObject(activity.Id, activity, (int)ModuleProjectManagement.ObjectType.Task, (project.Community != null) ? project.Community.Id : 0, ModuleProjectManagement.UniqueCode, GetIdModule());
                        }
                        Manager.SaveOrUpdate(link);
                        attachment.Link = Manager.Get <liteModuleLink>(link.Id);
                        Manager.SaveOrUpdate(attachment);
                        attachments.Add(attachment);
                        if (activity == null)
                        {
                            project.Attachments.Add(attachment);
                        }
                        project.AttachmentLinks.Add(aLink);
                    }
                }
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                attachments = null;
            }
            return(attachments);
        }
        public List <ProjectAttachment> AttachmentsAddUrl(long idProject, long idActivity, List <dtoUrl> urls)
        {
            List <ProjectAttachment> attachments = null;
            Boolean isInTransaction = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                Person person = Manager.GetPerson(UC.CurrentUserID);
                if (urls != null && urls.Where(u => !String.IsNullOrEmpty(u.Address)).Any() && person != null && person.TypeID != (int)UserTypeStandard.Guest && person.TypeID != (int)UserTypeStandard.PublicUser)
                {
                    PmActivity activity = (idActivity > 0) ? Manager.Get <PmActivity>(idActivity) : null;
                    Project    project  = (idActivity == 0 && idProject > 0) ? Manager.Get <Project>(idProject) : ((activity == null) ? null : activity.Project);
                    if (project != null && (idActivity == 0 || activity != null))
                    {
                        long     dOrder = AttachmentsGetMaxDisplayOrder(project, activity);
                        DateTime date   = DateTime.Now;
                        attachments = new List <ProjectAttachment>();
                        foreach (dtoUrl item in urls.Where(u => !String.IsNullOrEmpty(u.Address) && Uri.IsWellFormedUriString(u.Address, UriKind.RelativeOrAbsolute)))
                        {
                            ProjectAttachment attachment = new ProjectAttachment();
                            attachment.CreateMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress, date);
                            attachment.Activity     = activity;
                            attachment.Description  = "";
                            attachment.IsForProject = (activity == null);
                            attachment.Project      = project;
                            attachment.Type         = AttachmentType.url;
                            attachment.Url          = item.Address;
                            attachment.UrlName      = item.Name;
                            Manager.SaveOrUpdate(attachment);

                            ProjectAttachmentLink aLink = GenerateLink(attachment, dOrder++);
                            Manager.SaveOrUpdate(aLink);
                            attachment.SharedItems.Add(aLink);
                            attachments.Add(attachment);
                            if (idActivity == 0)
                            {
                                project.Attachments.Add(attachment);
                            }
                            project.AttachmentLinks.Add(aLink);
                        }
                    }
                }
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                attachments = null;
            }
            return(attachments);
        }
        private dtoAttachmentPermission AttachmentGetPermissions(litePerson person, ProjectAttachment attachment, Project project, PmActivity activity)
        {
            dtoAttachmentPermission result = new dtoAttachmentPermission();

            if (attachment != null && project != null)
            {
                lm.Comol.Core.FileRepository.Domain.ModuleRepository repositoryPermissions = GetRepositoryPermissions((project.isPortal) ? 0 : (project.Community == null) ? -1 : project.Community.Id, person.Id);
                ModuleProjectManagement mPermission     = (project.isPortal) ? ModuleProjectManagement.CreatePortalmodule((person == null) ? (Int32)UserTypeStandard.Guest : person.TypeID) : new ModuleProjectManagement(Manager.GetModulePermission(person.Id, (!project.isPortal && project.Community != null) ? project.Community.Id : 0, GetIdModule()));
                ProjectResource         resource        = project.Resources.Where(r => r.Deleted == BaseStatusDeleted.None && r.Type == ResourceType.Internal && r.Person == person).FirstOrDefault();
                PmActivityPermission    rolePermissions = GetRolePermissions(AttachmentGetContainerRole(project, activity, resource, mPermission));

                switch (attachment.Type)
                {
                case AttachmentType.file:
                    result.Download = (attachment.Item != null && attachment.Item.IsDownloadable || attachment.Item.Type == ItemType.Link) && (HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments));
                    result.Play     = (attachment.Item != null && (attachment.Item.Type == ItemType.Multimedia || attachment.Item.Type == ItemType.ScormPackage || attachment.Item.Type == ItemType.VideoStreaming)) && (HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments));

                    switch (attachment.Item.Type)
                    {
                    case ItemType.ScormPackage:
                    case ItemType.Multimedia:
                        result.ViewMyStatistics = HasPermission(rolePermissions, PmActivityPermission.ViewAttachments);
                        if (attachment.Item.IsInternal || (repositoryPermissions.Administration || (repositoryPermissions.EditOthersFiles || (repositoryPermissions.EditMyFiles && attachment.Item.IdOwner == person.Id))))
                        {
                            result.ViewOtherStatistics = HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id);
                            result.SetMetadata         = result.ViewOtherStatistics;
                        }
                        break;

                    case ItemType.Link:
                        result.Play = result.Download;
                        break;
                    }
                    result.Edit = false;
                    break;

                case AttachmentType.url:
                    result.Download = HasPermission(rolePermissions, PmActivityPermission.ViewAttachments) || HasPermission(rolePermissions, PmActivityPermission.DownloadAttacchments);
                    result.Play     = result.Download;
                    result.Edit     = HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id);
                    break;
                }

                result.Delete        = false;
                result.UnDelete      = (attachment.Deleted != BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualUnDeleteAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id));
                result.Unlink        = (attachment.SharedItems.Any() && activity != null && attachment.SharedItems.Where(s => s.Deleted == BaseStatusDeleted.None && s.Activity != null && s.Activity.Id == activity.Id && s.Type == AttachmentLinkType.Shared).Any() && attachment.Deleted == BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualDeleteAttachments) || HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id));
                result.VirtualDelete = (attachment.Deleted == BaseStatusDeleted.None) && (HasPermission(rolePermissions, PmActivityPermission.VirtualDeleteAttachments) || HasPermission(rolePermissions, PmActivityPermission.ManageAttachments) || (HasPermission(rolePermissions, PmActivityPermission.ManageActivityAttachments) && attachment.IdCreatedBy == person.Id));
            }

            return(result);
        }
        private List <dtoAttachmentItem> AttachmentsGet(litePerson person, Project project, PmActivity activity, Boolean getDeleted, PmActivityPermission rolePermission, ModuleProjectManagement mPermission, String unknownUser)
        {
            List <dtoAttachmentItem> items = null;
            Boolean isInTransaction        = Manager.IsInTransaction();

            try
            {
                if (!isInTransaction)
                {
                    Manager.BeginTransaction();
                }
                if (activity != null || project != null)
                {
                    items = new List <dtoAttachmentItem>();
                    List <dtoAttachment> attachments           = AttachmentsGet(project, activity, getDeleted, unknownUser);
                    ModuleRepository     repositoryPermissions = GetRepositoryPermissions((project.isPortal) ? 0 : (project.Community == null) ? -1 : project.Community.Id);
                    items = attachments.Where(a => a.IdAttachment > 0).OrderBy(a => a.DisplayOrder).ThenBy(a => a.DisplayName).Select(a => new dtoAttachmentItem()
                    {
                        Attachment = a, Permissions = AttachmentGetPermissions(person, a, activity, rolePermission, mPermission, repositoryPermissions)
                    }).ToList();
                }
                if (!isInTransaction)
                {
                    Manager.Commit();
                }
            }
            catch (Exception ex)
            {
                if (!isInTransaction)
                {
                    Manager.RollBack();
                }
                items = null;
            }
            return(items);
        }