Пример #1
0
        /// <summary>
        ///     Get all available tiles for user and dashboard
        /// </summary>
        /// <param name="idUser"></param>
        /// <param name="idDashboard"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public List <dtoLiteTile> TilesGetForUser(Int32 idUser, long idDashboard, TileType type, Boolean useCache = true)
        {
            List <dtoLiteTile> results = null;

            try
            {
                results = (useCache) ? lm.Comol.Core.DomainModel.Helpers.CacheHelper.Find <List <dtoLiteTile> >(CacheKeys.DashboardUserTiles(idDashboard, idUser, type)) : null;
                if (results == null || !results.Any())
                {
                    List <liteDashboardTileAssignment> tAssignments = CacheGetDashBoardTiles(idDashboard);
                    List <dtoLiteTile> aTiles = null;
                    switch (type)
                    {
                    case TileType.CombinedTags:
                        aTiles = tAssignments.Where(t => t.Tile != null && (t.Tile.Type == TileType.CommunityTag || t.Tile.Type == TileType.CombinedTags || t.Tile.Type == TileType.DashboardUserDefined)).Select(t => new dtoLiteTile()
                        {
                            DisplayOrder = t.DisplayOrder, Tile = t.Tile
                        }).ToList();
                        break;

                    case TileType.CommunityTag:
                        aTiles = tAssignments.Where(t => t.Tile != null && t.Tile.Type == TileType.CommunityTag).Select(t => new dtoLiteTile()
                        {
                            DisplayOrder = t.DisplayOrder, Tile = t.Tile
                        }).ToList();
                        break;

                    case TileType.Module:
                        aTiles = tAssignments.Where(t => t.Tile != null && (t.Tile.Type == TileType.Module || t.Tile.Type == TileType.UserDefined)).Select(t => new dtoLiteTile()
                        {
                            DisplayOrder = t.DisplayOrder, Tile = t.Tile
                        }).ToList();
                        break;

                    default:
                        aTiles = tAssignments.Where(t => t.Tile != null && t.Tile.Type == type).Select(t => new dtoLiteTile()
                        {
                            DisplayOrder = t.DisplayOrder, Tile = t.Tile
                        }).ToList();
                        break;
                    }
                    if (aTiles != null)
                    {
                        switch (type)
                        {
                        case TileType.Module:
                            break;

                        default:
                            List <lm.Comol.Core.Tag.Domain.dtoCommunityTags> tLinks = null;
                            switch (type)
                            {
                            case TileType.CommunityType:
                                List <Int32> idTypes = (from s in Manager.GetIQ <liteSubscriptionInfo>() where s.IdPerson == idUser && s.IdRole > -1 select s.Community.IdTypeOfCommunity).Distinct().ToList();

                                results = aTiles.Where(a => a.HasAnyCommunityType(idTypes)).ToList();

                                break;

                            case TileType.CommunityTag:
                            case TileType.CombinedTags:
                                List <Int32> idCommunities = (from s in Manager.GetIQ <liteSubscriptionInfo>() where s.IdPerson == idUser && s.IdRole > -1 select s.IdCommunity).ToList();
                                tLinks = Service.CacheGetUserCommunitiesAssociation(idUser, idCommunities, (type == TileType.Module) ? Tag.Domain.TagType.Module : Tag.Domain.TagType.Community, true);
                                if (idCommunities.Except(tLinks.Select(t => t.IdCommunity).ToList()).Any())
                                {
                                    tLinks = Service.CacheGetUserCommunitiesAssociation(idUser, idCommunities, (type == TileType.Module) ? Tag.Domain.TagType.Module : Tag.Domain.TagType.Community, false);
                                }
                                results = aTiles.Where(a => a.Tile.Type == TileType.CommunityTag && a.Tile.GetAvailableIdTags().Count == 1 && tLinks.Where(l => l.HasTag(a.Tile.GetAvailableIdTags().FirstOrDefault())).Any()).ToList();
                                if (type == TileType.CombinedTags)
                                {
                                    results.AddRange(aTiles.Where(a => a.Tile.Type == TileType.CombinedTags && a.Tile.GetAvailableIdTags().Count > 1 && tLinks.Where(l => l.HasTags(a.Tile.GetAvailableIdTags())).Any()).ToList());
                                    results.AddRange(aTiles.Where(a => a.Tile.Type == TileType.DashboardUserDefined && a.Tile.NavigateUrl != "").ToList());
                                }
                                break;
                            }
                            break;
                        }
                        results = results.OrderBy(i => i.DisplayOrder).ToList();
                        if (useCache)
                        {
                            CacheHelper.AddToCache <List <dtoLiteTile> >(CacheKeys.DashboardUserTiles(idDashboard, idUser, type), results, CacheExpiration._12hours);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(results);
        }