public SearchResultItem GetSearchResultItem(SearchGroup searchGroup, SearchItem searchResultItem) { var result = new SearchResultItem { Name = searchResultItem.Title, Additional = new Dictionary<string, object> { { "Type", searchResultItem.EntityType }, { "imageRef", WebImageSupplier.GetAbsoluteWebPath(GetImage(searchResultItem.EntityType), ProductEntryPoint.ID) }, { "Hint", GetHint(searchResultItem.EntityType) } }, URL = GetItemPath(searchResultItem.EntityType, searchResultItem.ID, searchGroup.ProjectID) }; if (searchResultItem.EntityType != EntityType.Project) { result.Additional.Add("ProjectName", searchGroup.ProjectTitle); result.Date = searchResultItem.CreateOn; result.Description = searchResultItem.Description; } return result; }
public SearchItemWrapper(SearchItem searchItem) { Id = searchItem.ID; Title = searchItem.Title; EntityType = searchItem.EntityType; Created = (ApiDateTime) searchItem.CreateOn; Description = searchItem.Description; }
public string GetItemPath(SearchItem item) { switch (item.EntityType) { case EntityType.Message: return string.Format("messages.aspx?prjID={0}&ID={1}", SearchGroup.ProjectID, item.ID); case EntityType.Milestone: return string.Format("milestones.aspx?prjID={0}&ID={1}", SearchGroup.ProjectID, item.ID); case EntityType.Project: return string.Format("projects.aspx?prjID={0}", SearchGroup.ProjectID); case EntityType.Task: return string.Format("tasks.aspx?prjID={0}&ID={1}", SearchGroup.ProjectID, item.ID); case EntityType.Team: return string.Format("projectteam.aspx?prjID={0}", SearchGroup.ProjectID); case EntityType.File: return item.ID; default: return string.Empty; } }
public List <SearchGroup> Search(String searchText, int projectId) { var queryResult = _searchDao.Search(searchText, projectId); var groups = new Dictionary <int, SearchGroup>(); foreach (var r in queryResult) { var projId = 0; SearchItem item = null; if (r is Project) { var p = (Project)r; if (ProjectSecurity.CanRead(p)) { projId = p.ID; if (!groups.ContainsKey(projId)) { groups[projId] = new SearchGroup(projId, p.Title); } item = new SearchItem(EntityType.Project, p.ID, p.Title, p.Description, p.CreateOn); } } else { if (r is Milestone) { var m = (Milestone)r; if (ProjectSecurity.CanRead(m)) { projId = m.Project.ID; if (!groups.ContainsKey(projId)) { groups[projId] = new SearchGroup(projId, m.Project.Title); } item = new SearchItem(EntityType.Milestone, m.ID, m.Title, null, m.CreateOn); } } else if (r is Message) { var m = (Message)r; if (ProjectSecurity.CanReadMessages(m.Project)) { projId = m.Project.ID; if (!groups.ContainsKey(projId)) { groups[projId] = new SearchGroup(projId, m.Project.Title); } item = new SearchItem(EntityType.Message, m.ID, m.Title, m.Content, m.CreateOn); } } else if (r is Task) { var t = (Task)r; if (ProjectSecurity.CanRead(t)) { projId = t.Project.ID; if (!groups.ContainsKey(projId)) { groups[projId] = new SearchGroup(projId, t.Project.Title); } item = new SearchItem(EntityType.Task, t.ID, t.Title, t.Description, t.CreateOn); } } } if (0 < projId && item != null) { groups[projId].Items.Add(item); } } try { // search in files var fileEntries = new List <Files.Core.FileEntry>(); using (var folderDao = FilesIntegration.GetFolderDao()) using (var fileDao = FilesIntegration.GetFileDao()) { fileEntries.AddRange(folderDao.Search(searchText, Files.Core.FolderType.BUNCH).Cast <Files.Core.FileEntry>()); fileEntries.AddRange(fileDao.Search(searchText, Files.Core.FolderType.BUNCH).Cast <Files.Core.FileEntry>()); var projectIds = projectId != 0 ? new List <int> { projectId } : fileEntries.GroupBy(f => f.RootFolderId) .Select(g => folderDao.GetFolder(g.Key)) .Select(f => f != null ? folderDao.GetBunchObjectID(f.RootFolderId).Split('/').Last() : null) .Where(s => !string.IsNullOrEmpty(s)) .Select(s => int.Parse(s)); var rootProject = projectIds.ToDictionary(id => FilesIntegration.RegisterBunch("projects", "project", id.ToString())); fileEntries.RemoveAll(f => !rootProject.ContainsKey(f.RootFolderId)); var security = FilesIntegration.GetFileSecurity(); fileEntries.RemoveAll(f => !security.CanRead(f)); foreach (var f in fileEntries) { var id = rootProject[f.RootFolderId]; if (!groups.ContainsKey(id)) { var project = _projDao.GetById(id); if (project != null && ProjectSecurity.CanRead(project) && ProjectSecurity.CanReadFiles(project)) { groups[id] = new SearchGroup(id, project.Title); } else { continue; } } var item = new SearchItem { EntityType = EntityType.File, ID = f is Files.Core.File ? ((Files.Core.File)f).ViewUrl : string.Format("{0}tmdocs.aspx?prjID={1}#{2}", VirtualPathUtility.ToAbsolute("~/products/projects/"), id, f.ID), Title = f.Title, CreateOn = f.CreateOn, }; groups[id].Items.Add(item); } } } catch (Exception err) { LogManager.GetLogger("ASC.Web").Error(err); } return(new List <SearchGroup>(groups.Values)); }
public SearchItem(EntityType entityType, string id, string title, DateTime createOn, SearchItem container = null, string desc = "", string itemPath = "") { Container = container; EntityType = entityType; ID = id; Title = title; Description = desc; CreateOn = createOn; if (!string.IsNullOrEmpty(itemPath)) { ItemPath = ItemPathToAbsolute(itemPath); } else if (container != null) { ItemPath = container.ItemPath; } }
public List<SearchGroup> Search(String searchText, int projectId) { var queryResult = _searchDao.Search(searchText, projectId); var groups = new Dictionary<int, SearchGroup>(); foreach (var r in queryResult) { var projId = 0; SearchItem item = null; if (r is Project) { var p = (Project) r; if (ProjectSecurity.CanRead(p)) { projId = p.ID; if (!groups.ContainsKey(projId)) groups[projId] = new SearchGroup(projId, p.Title); item = new SearchItem(EntityType.Project, p.ID, p.Title, p.Description, p.CreateOn); } } else { if (r is Milestone) { var m = (Milestone) r; if (ProjectSecurity.CanRead(m)) { projId = m.Project.ID; if (!groups.ContainsKey(projId)) groups[projId] = new SearchGroup(projId, m.Project.Title); item = new SearchItem(EntityType.Milestone, m.ID, m.Title, null, m.CreateOn); } } else if (r is Message) { var m = (Message) r; if (ProjectSecurity.CanReadMessages(m.Project)) { projId = m.Project.ID; if (!groups.ContainsKey(projId)) groups[projId] = new SearchGroup(projId, m.Project.Title); item = new SearchItem(EntityType.Message, m.ID, m.Title, m.Content, m.CreateOn); } } else if (r is Task) { var t = (Task) r; if (ProjectSecurity.CanRead(t)) { projId = t.Project.ID; if (!groups.ContainsKey(projId)) groups[projId] = new SearchGroup(projId, t.Project.Title); item = new SearchItem(EntityType.Task, t.ID, t.Title, t.Description, t.CreateOn); } } } if (0 < projId && item != null) { groups[projId].Items.Add(item); } } try { // search in files var fileEntries = new List<Files.Core.FileEntry>(); using (var folderDao = FilesIntegration.GetFolderDao()) using (var fileDao = FilesIntegration.GetFileDao()) { fileEntries.AddRange(folderDao.Search(searchText, Files.Core.FolderType.BUNCH).Cast<Files.Core.FileEntry>()); fileEntries.AddRange(fileDao.Search(searchText, Files.Core.FolderType.BUNCH).Cast<Files.Core.FileEntry>()); var projectIds = projectId != 0 ? new List<int> {projectId} : fileEntries.GroupBy(f => f.RootFolderId) .Select(g => folderDao.GetFolder(g.Key)) .Select(f => f != null ? folderDao.GetBunchObjectID(f.RootFolderId).Split('/').Last() : null) .Where(s => !string.IsNullOrEmpty(s)) .Select(s => int.Parse(s)); var rootProject = projectIds.ToDictionary(id => FilesIntegration.RegisterBunch("projects", "project", id.ToString())); fileEntries.RemoveAll(f => !rootProject.ContainsKey(f.RootFolderId)); var security = FilesIntegration.GetFileSecurity(); fileEntries.RemoveAll(f => !security.CanRead(f)); foreach (var f in fileEntries) { var id = rootProject[f.RootFolderId]; if (!groups.ContainsKey(id)) { var project = _projDao.GetById(id); if (project != null && ProjectSecurity.CanRead(project) && ProjectSecurity.CanReadFiles(project)) { groups[id] = new SearchGroup(id, project.Title); } else { continue; } } var item = new SearchItem { EntityType = EntityType.File, ID = f is Files.Core.File ? ((Files.Core.File) f).ViewUrl : string.Format("{0}tmdocs.aspx?prjID={1}#{2}", VirtualPathUtility.ToAbsolute("~/products/projects/"), id, f.ID), Title = f.Title, CreateOn = f.CreateOn, }; groups[id].Items.Add(item); } } } catch (Exception err) { LogManager.GetLogger("ASC.Web").Error(err); } return new List<SearchGroup>(groups.Values); }