Exemplo n.º 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;
        }
    }
    /// <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);
        }
    }
Exemplo n.º 3
0
    /// <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;
    }