/// <summary> /// Page_Load - Set properties for current control. /// </summary> protected void Page_Load(object sender, EventArgs e) { try { // Check stop processing if (this.StopProcessing) { return; } EnsureUnsubscription(); if (!this.SearchResult) { ForumContext.GroupID = this.GroupID; ForumContext.ForumID = this.ForumID; ForumContext.CommunityGroupID = this.CommunityGroupID; } // If search result control, check whether search is performed if (this.SearchResult && (ForumContext.CurrentState != ForumStateEnum.Search)) { return; } // Get current state currentState = CheckPermissions(ForumContext.CurrentState); if (currentState != ForumStateEnum.Search) { // Group if (startingMode == 0) { // Check whether forum is defined if ((ForumContext.CurrentForum != null) && (currentState != ForumStateEnum.Forums)) { // For nested level call request to single display if ((ForumContext.CurrentGroup != null) && (ForumContext.CurrentForum.ForumGroupID == ForumContext.CurrentGroup.GroupID)) { ForumContext.DisplayOnlyMe(this); } else { // Hide current forum because ids not match return; } } } // Forum else if (startingMode == 1) { // Hide all others forums ForumContext.DisplayOnlyMe(this); } else { // Hide forum because none of mandatory property was set return; } } // Display correspondent control with dependence on current mode switch (currentState) { // Threads case ForumStateEnum.Threads: ctrl = LoadControl(defaultPath + ForumLayout + "/Threads.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "threadsElem", ctrl); break; // Thread case ForumStateEnum.Thread: // Log thread views if ((ForumContext.CurrentThread != null) && (!QueryHelper.Contains("tpage"))) { ThreadViewCounter.LogThreadView(ForumContext.CurrentThread.PostId); } ctrl = LoadControl(defaultPath + ForumLayout + "/Thread.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "threadElem", ctrl); break; // New post, reply or edit post case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.EditPost: ctrl = LoadControl(defaultPath + ForumLayout + "/ThreadEdit.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "editElem", ctrl); break; // Subscription to forum or subscription to post case ForumStateEnum.NewSubscription: case ForumStateEnum.SubscribeToPost: ctrl = LoadControl(defaultPath + ForumLayout + "/SubscriptionEdit.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "subscriptionElem", ctrl); break; // Forums case ForumStateEnum.Forums: ctrl = LoadControl(defaultPath + ForumLayout + "/Forums.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "forumsElem", ctrl); break; case ForumStateEnum.Attachments: ctrl = LoadControl(defaultPath + ForumLayout + "/Attachments.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "attachmentElem", ctrl); break; case ForumStateEnum.Search: if (this.SearchResult) { ctrl = LoadControl(defaultPath + ForumLayout + "/SearchResults.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(this.plcForum, "searchElem", ctrl); } else { return; } break; case ForumStateEnum.AccessDenied: this.Visible = false; return; // Unknown case ForumStateEnum.Unknown: if (!this.SearchResult) { throw new Exception("[Forum divider]: Unknown forum state."); } return; } // Clear controls collection plcForum.Controls.Clear(); // Add loaded control to the control collection plcForum.Controls.Add(ctrl); // Get forum viewer control ForumViewer frmv = ctrl as ForumViewer; // If control exists set forum properties if (frmv != null) { CopyValues(frmv); } } catch (Exception ex) { lblError.Visible = true; lblError.Text = ex.Message; } }
/// <summary> /// Page_Load - Set properties for current control. /// </summary> protected void Page_Load(object sender, EventArgs e) { try { // Check stop processing if (StopProcessing) { return; } EnsureUnsubscription(); if (!SearchResult) { ForumContext.GroupID = GroupID; ForumContext.ForumID = ForumID; ForumContext.CommunityGroupID = CommunityGroupID; } // If search result control, check whether search is performed if (SearchResult && (ForumContext.CurrentState != ForumStateEnum.Search)) { return; } // Get current state currentState = CheckPermissions(ForumContext.CurrentState); if (currentState != ForumStateEnum.Search) { // Group if (startingMode == 0) { // Check whether forum is defined if ((ForumContext.CurrentForum != null) && (currentState != ForumStateEnum.Forums)) { // For nested level call request to single display if ((ForumContext.CurrentGroup != null) && (ForumContext.CurrentForum.ForumGroupID == ForumContext.CurrentGroup.GroupID)) { ForumContext.DisplayOnlyMe(this); } else { // Hide current forum because ids not match return; } } } // Forum else if (startingMode == 1) { // Hide all others forums ForumContext.DisplayOnlyMe(this); } else { // Hide forum because none of mandatory property was set return; } } // Display correspondent control with dependence on current mode switch (currentState) { // Threads case ForumStateEnum.Threads: ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/Threads.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "threadsElem", ctrl); break; // Thread case ForumStateEnum.Thread: // Log thread views if ((ForumContext.CurrentThread != null) && (!QueryHelper.Contains("tpage"))) { ThreadViewCounter.LogThreadView(ForumContext.CurrentThread.PostId); } ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/Thread.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "threadElem", ctrl); break; // New post, reply or edit post case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.EditPost: ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/ThreadEdit.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "editElem", ctrl); break; // Subscription to forum or subscription to post case ForumStateEnum.NewSubscription: case ForumStateEnum.SubscribeToPost: ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/SubscriptionEdit.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "subscriptionElem", ctrl); break; // Forums case ForumStateEnum.Forums: ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/Forums.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "forumsElem", ctrl); break; case ForumStateEnum.Attachments: ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/Attachments.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "attachmentElem", ctrl); break; case ForumStateEnum.Search: if (SearchResult) { ctrl = this.LoadUserControl(defaultPath + ForumLayout + "/SearchResults.ascx"); ctrl.ID = ControlsHelper.GetUniqueID(plcForum, "searchElem", ctrl); } else { return; } break; case ForumStateEnum.AccessDenied: Visible = false; return; // Unknown case ForumStateEnum.Unknown: if (!SearchResult) { throw new Exception("[Forum divider]: Unknown forum state."); } return; } // Clear controls collection plcForum.Controls.Clear(); // Add loaded control to the control collection plcForum.Controls.Add(ctrl); // Get forum viewer control ForumViewer frmv = ctrl as ForumViewer; // If control exists set forum properties if (frmv != null) { CopyValues(frmv); } } catch (Exception ex) { ShowError(ex.Message); } }
/// <summary> /// Check permissions. /// </summary> /// <param name="state">Current state</param> public ForumStateEnum CheckPermissions(ForumStateEnum state) { // Return original state for selected types if ((state == ForumStateEnum.Forums) || (state == ForumStateEnum.Unknown) || (state == ForumStateEnum.Search)) { return(state); } // If forum doesn't exist display default if (ForumContext.CurrentForum == null) { return(ForumStateEnum.Forums); } // If forum is closed => hide if ((!IsAdHocForum) && (!ForumContext.CurrentForum.ForumOpen)) { return(ForumStateEnum.Forums); } // Sets threads state for every action if forum is locked if (ForumContext.CurrentForum.ForumIsLocked) { switch (state) { case ForumStateEnum.NewSubscription: case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.SubscribeToPost: case ForumStateEnum.Attachments: return(ForumStateEnum.Threads); } } // If user is global admin, forum admin, community admin or modrator if (ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, this.CommunityGroupID)) { return(state); } // Sets thread state for locked post if ((ForumContext.CurrentThread != null) && (ForumContext.CurrentThread.PostIsLocked)) { if (!ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, this.CommunityGroupID)) { switch (state) { case ForumStateEnum.NewSubscription: case ForumStateEnum.SubscribeToPost: case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.Attachments: return(ForumStateEnum.Thread); } } } bool hasPermissions = true; // Check permissions for action switch (state) { case ForumStateEnum.ReplyToPost: hasPermissions = ForumViewer.CheckPermission("Reply", ForumContext.CurrentForum.AllowReply, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.NewThread: hasPermissions = ForumViewer.CheckPermission("Post", ForumContext.CurrentForum.AllowPost, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.Attachments: hasPermissions = ForumViewer.CheckPermission("AttachFiles", ForumContext.CurrentForum.AllowAttachFiles, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.TopicMove: hasPermissions = ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, this.CommunityGroupID); break; case ForumStateEnum.SubscribeToPost: case ForumStateEnum.NewSubscription: hasPermissions = ForumViewer.CheckPermission("Subscribe", ForumContext.CurrentForum.AllowSubscribe, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID) && this.EnableSubscription; break; case ForumStateEnum.EditPost: hasPermissions = ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, this.CommunityGroupID) || (ForumContext.CurrentForum.ForumAuthorEdit && (ForumContext.CurrentPost != null && !CMSContext.CurrentUser.IsPublic() && (ForumContext.CurrentPost.PostUserID == CMSContext.CurrentUser.UserID))); break; } // Check ForumAccess permission if (ForumContext.CurrentForum != null) { hasPermissions = hasPermissions && ForumViewer.CheckPermission("AccessToForum", ForumContext.CurrentForum.AllowAccess, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); } // Check whether user has permissions for selected state if (!hasPermissions) { // Check whether public user should be redirected to logon page if (this.RedirectUnauthorized && CMSContext.CurrentUser.IsPublic()) { URLHelper.Redirect(URLHelper.AddParameterToUrl(ResolveUrl(this.LogonPageURL), "returnurl", HttpUtility.UrlEncode(URLHelper.CurrentURL))); } else if (!String.IsNullOrEmpty(this.AccessDeniedPageURL)) { URLHelper.Redirect(URLHelper.AddParameterToUrl(ResolveUrl(this.AccessDeniedPageURL), "returnurl", HttpUtility.UrlEncode(URLHelper.CurrentURL))); } // Sets state with dependence on current settings else { if (startingMode == 0) { return(ForumStateEnum.Forums); } else { return(ForumStateEnum.AccessDenied); } } } return(state); }
/// <summary> /// Check permissions. /// </summary> /// <param name="state">Current state</param> public ForumStateEnum CheckPermissions(ForumStateEnum state) { // Return original state for selected types if ((state == ForumStateEnum.Forums) || (state == ForumStateEnum.Unknown) || (state == ForumStateEnum.Search)) { return state; } // If forum doesn't exist display default if (ForumContext.CurrentForum == null) { return ForumStateEnum.Forums; } // If forum is closed => hide if ((!IsAdHocForum) && (!ForumContext.CurrentForum.ForumOpen)) { return ForumStateEnum.Forums; } // Sets threads state for every action if forum is locked if (ForumContext.CurrentForum.ForumIsLocked) { switch (state) { case ForumStateEnum.NewSubscription: case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.SubscribeToPost: return ForumStateEnum.Threads; // Allow attachment view for forum moderators case ForumStateEnum.Attachments: if (ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, CommunityGroupID)) { return state; } return ForumStateEnum.Threads; } } // If user is global admin, forum admin, community admin or moderator if (ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, CommunityGroupID)) { return state; } // Sets thread state for locked post if ((ForumContext.CurrentThread != null) && (ForumContext.CurrentThread.PostIsLocked)) { if (!ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, CommunityGroupID)) { switch (state) { case ForumStateEnum.NewSubscription: case ForumStateEnum.SubscribeToPost: case ForumStateEnum.NewThread: case ForumStateEnum.ReplyToPost: case ForumStateEnum.Attachments: return ForumStateEnum.Thread; } } } bool hasPermissions = true; // Check permissions for action switch (state) { case ForumStateEnum.ReplyToPost: hasPermissions = CheckPermission("Reply", ForumContext.CurrentForum.AllowReply, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.NewThread: hasPermissions = CheckPermission("Post", ForumContext.CurrentForum.AllowPost, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.Attachments: hasPermissions = CheckPermission("AttachFiles", ForumContext.CurrentForum.AllowAttachFiles, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); break; case ForumStateEnum.TopicMove: hasPermissions = ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, CommunityGroupID); break; case ForumStateEnum.SubscribeToPost: case ForumStateEnum.NewSubscription: hasPermissions = CheckPermission("Subscribe", ForumContext.CurrentForum.AllowSubscribe, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID) && EnableSubscription; break; case ForumStateEnum.EditPost: hasPermissions = ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, CommunityGroupID) || (ForumContext.CurrentForum.ForumAuthorEdit && (ForumContext.CurrentPost != null && !MembershipContext.AuthenticatedUser.IsPublic() && (ForumContext.CurrentPost.PostUserID == MembershipContext.AuthenticatedUser.UserID))); break; } // Check ForumAccess permission if (ForumContext.CurrentForum != null) { hasPermissions = hasPermissions && CheckPermission("AccessToForum", ForumContext.CurrentForum.AllowAccess, ForumContext.CurrentForum.ForumGroupID, ForumContext.CurrentForum.ForumID); } // Check whether user has permissions for selected state if (!hasPermissions) { // Check whether public user should be redirected to logon page if (RedirectUnauthorized && MembershipContext.AuthenticatedUser.IsPublic()) { URLHelper.Redirect(URLHelper.AddParameterToUrl(ResolveUrl(LogonPageURL), "returnurl", HttpUtility.UrlEncode(RequestContext.CurrentURL))); } else if (!String.IsNullOrEmpty(AccessDeniedPageURL)) { URLHelper.Redirect(URLHelper.AddParameterToUrl(ResolveUrl(AccessDeniedPageURL), "returnurl", HttpUtility.UrlEncode(RequestContext.CurrentURL))); } // Sets state with dependence on current settings else { if (startingMode == 0) { return ForumStateEnum.Forums; } else { return ForumStateEnum.AccessDenied; } } } return state; }