/// <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); }