コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="tree"></param>
        private void SearchFolders(DashboardSearchFilter filter, SearchTree tree, ModelTeams teams)
        {
            var shouldReturn =
                (null != filter.FolderIds && !filter.FolderIds.Contains(0)) ||
                (filter.Starred) ||
                (filter.HasTags) ||
                (filter.HasDashboardIds);

            if (shouldReturn)
            {
                return;
            }

            var request = DataContext
                          .Folders
                          .ForActiveOrg()
                          .Include(x => x.Permissions)
                          .AsQueryable();

            if (!string.IsNullOrEmpty(filter.Query))
            {
                request = request
                          .Where(x => x.Title.ToLower().Contains(filter.Query.ToLower()));
            }

            var folders = request.ToList();

            tree.Folders = folders
                           .Where(x => CheckViewPermission(x, teams))
                           .Select(x => x.ToModel())
                           .ToList();
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public OperationResult <SearchTree> Search(DashboardSearchFilter filter)
        {
            //return OperationResult<SearchTree>.Create( ErrorCode.BadGetDashboards);

            var tree = new SearchTree();
            OperationResult <SearchTree> res = null;

            try
            {
                var teams = new UserRepository(DataContext)
                            .ForActiveOrg(DataContext.ActiveOrgId)
                            .GetUserTeams(DataContext.ActiveUserId)
                            .Value ?? new ModelTeams();

                SearchDashboards(filter, tree, teams);

                SearchFolders(filter, tree, teams);

                res = OperationResult <SearchTree> .Create(tree);
            }
            catch            //( Exception )
            {
                //res = OperationResult<ModelDashboards>.Create( ErrorCode.BadGetDashboards, e );
            }

            return(res);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="tree"></param>
        private void SearchDashboards(DashboardSearchFilter filter, SearchTree tree, ModelTeams teams)
        {
            var request = DataContext
                          .Dashboards
                          .ForActiveOrg()
                          .AsQueryable();

            if (filter.HasFolderIds)
            {
                request = request.Where(d => (null == d.FolderId && filter.FolderIds.Contains(0)) ?
                                        true : (null != d.FolderId && filter.FolderIds.Contains(d.FolderId.Value)));
            }

            if (!string.IsNullOrEmpty(filter.Query))
            {
                request = request
                          .Where(x => x.Title.ToLower().Contains(filter.Query.ToLower()));
            }

            if (filter.Starred)
            {
                request = request
                          .Where(x => x.Stars.Any(y => y.UserId == filter.UserId));
            }

            if (filter.HasDashboardIds)
            {
                request = request
                          .Where(x => filter.DashboardIds.Contains(x.Id));
            }

            var dashboards = request
                             .Include(x => x.Folder)
                             .ThenInclude(x => x.Permissions)
                             .Include(x => x.Tags)
                             .Include(x => x.Stars)
                             .Include(x => x.Permissions)
                             .ToList()
                             .Where(x => CheckViewPermission(x, teams))
                             .Select(x => x
                                     .ToModel()
                                     .AddVersion(DataContext.Entry(x)))
                             .ToList();

            if (filter.HasTags)
            {
                Func <ModelDashboard, bool> tagPred = x => (filter.TagOperator == SearchOperator.And) ?
                                                      filter.Tags.Intersect(x.Tags).Count() == filter.Tags.Count() :
                                                      x.Tags.Intersect(filter.Tags).Count() > 0;

                dashboards = dashboards
                             .Where(tagPred)
                             .ToList();
            }

            tree.Dashboards = dashboards;
        }