Exemplo n.º 1
0
		List<Guid> getGuestRooms(Dictionary<Guid, RoomStub> rooms)
		{
			List<Guid> guestRooms = new List<Guid>();
			Thread t = null;
			if (ContainerPage.Url.HasObjectFilter || (ContainerPage.Url.CurrentApplication == "chat" && ContainerPage.Url["k"].IsInt))
			{
				IBob guestChatObject = null;

				#region Get from page
				if (ContainerPage.Url.CurrentApplication == "chat" && ContainerPage.Url["k"].IsInt)
				{
					try
					{
						t = new Thread(ContainerPage.Url["k"]);
						IBob b = t.ParentObject;
						while (b != null && b is Photo && b is IHasParent)
							b = ((IHasParent)b).ParentObject;
						guestChatObject = (IBob)b;
					}
					catch { }
				}
				else if (ContainerPage.Url.HasArticleObjectFilter)
					guestChatObject = ContainerPage.Url.ObjectFilterArticle;
				else if (ContainerPage.Url.HasGroupLogicalFilter)
					guestChatObject = ContainerPage.Url.LogicalFilterGroup;
				else if (ContainerPage.Url.HasEventObjectFilter)
					guestChatObject = ContainerPage.Url.ObjectFilterEvent;
				else if (ContainerPage.Url.HasVenueObjectFilter)
					guestChatObject = ContainerPage.Url.ObjectFilterVenue;
				else if (ContainerPage.Url.HasPlaceObjectFilter)
					guestChatObject = ContainerPage.Url.ObjectFilterPlace;
				else if (ContainerPage.Url.HasCountryObjectFilter)
					guestChatObject = ContainerPage.Url.ObjectFilterCountry;
				else if (ContainerPage.Url.HasUsrObjectFilter && Usr.Current != null && ContainerPage.Url.ObjectFilterUsr.K != Usr.Current.K)
					guestChatObject = ContainerPage.Url.ObjectFilterUsr;
				#endregion

				if (guestChatObject != null)
				{
					#region Create spec
					Chat.RoomSpec s = null;
					if (guestChatObject is Usr)
					{
						if (Usr.Current != null)
						{
							Usr usrWeAreVisiting = (Usr)guestChatObject;
							if (usrWeAreVisiting.K != Usr.Current.K)
							{
								s = new Chat.RoomSpec(Usr.Current.K, usrWeAreVisiting.K);
							}
						}
					}
					else
					{
						s = new Chat.RoomSpec(RoomType.Normal, ((IBobType)guestChatObject).ObjectType, ((IHasSinglePrimaryKey)guestChatObject).K);
					}
					#endregion

					if (s != null && !s.Disabled && s.CheckPermission(Usr.Current, false))
					{
						Guid g = s.Guid;
						guestRooms.Add(g);
					}
				}
			}
			#region Did we find a thread?
			if (t != null)
			{
				try
				{
					Chat.RoomSpec s = t.GetRoomSpec();
					if (s != null && !s.Disabled && s.CheckPermission(Usr.Current, false))
						guestRooms.Add(s.Guid);
				}
				catch { }
			}
			#endregion

			#region Photo guest
			Photo p = null;
			if ((ContainerPage.Url.CurrentApplication.StartsWith("tags/") || ContainerPage.Url.CurrentApplication == "photos") && ContainerPage.Url["photo"].IsInt)
			{
				//photo room...
				try
				{
					p = new Photo(ContainerPage.Url["photo"]);
				}
				catch { }
			}
			else if (ContainerPage.Url.HasPhotoObjectFilter)
			{
				try
				{
					p = ContainerPage.Url.ObjectFilterPhoto;
				}
				catch { }
			}
			else if (ContainerPage.Url.HasGalleryObjectFilter && ContainerPage.Url.ObjectFilterGallery.LivePhotos > 0)
			{
				try
				{
					p = ContainerPage.Url.ObjectFilterGallery.ChildPhotos(Photo.EnabledQueryCondition, Photo.DefaultOrder)[0];
				}
				catch { }
			}

			if (p != null)
			{
				try
				{
					Chat.RoomSpec s = new Chat.RoomSpec(RoomType.Normal, Model.Entities.ObjectType.Photo, p.K);
					if (s != null && !s.Disabled && s.CheckPermission(Usr.Current, false))
						guestRooms.Add(s.Guid);
				}
				catch { }
			}
			#endregion

			return guestRooms;
		}