예제 #1
0
    /// <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;
        }
    }