public object Evaluate(ExecutionState state, Token contextToken)
        {
            if (CurrentRequest.Value["CurrentForumOrTopicPageExpression_Value"] != null)
            {
                return((int)CurrentRequest.Value["CurrentForumOrTopicPageExpression_Value"]);
            }

            ReferencedForum rf = ReferencedForum.Current;

            CurrentRequest.Value["CurrentForumOrTopicPageExpression_Value"] = rf.Page;
            return(rf.Page);
        }
        public object Evaluate(ExecutionState state, Token contextToken)
        {
            if (CurrentRequest.Value["UserCanPostNewTopicsExpression_Value"] != null)
            {
                return((bool)CurrentRequest.Value["UserCanPostNewTopicsExpression_Value"]);
            }

            ReferencedForum rf;

            if (CurrentRequest.Value["ReferencedForum_Value"] == null)
            {
                rf = ReferencedForum.ExtractFromURL();
                CurrentRequest.Value["ReferencedForum_Value"] = rf;
            }
            else
            {
                rf = (ReferencedForum)CurrentRequest.Value["ReferencedForum_Value"];
            }

            bool result;

            if (rf.Forum.PostNewTopics == Forum.AccessType.AllowAnonymous)
            {
                result = true;
            }

            else if (!WebAuthentication.IsLoggedIn)
            {
                result = false;
            }

            else
            {
                switch (rf.Forum.PostNewTopics)
                {
                case Forum.AccessType.AllMembers:
                    result = true;
                    break;

                case Forum.AccessType.ActivatedMembers:
                    result = SecurityProvider.CurrentUser.Activated;
                    break;

                case Forum.AccessType.Administrators:
                    result = SecurityProvider.CurrentUser.HasPermission(PermissionType.SuperUser);
                    break;

                default:
                    if (!rf.Forum.ModeratorRoleID.HasValue)
                    {
                        result = false;
                    }
                    else
                    {
                        result = SecurityProvider.CurrentUser.HasRole(rf.Forum.ModeratorRoleID.Value);
                    }
                    break;
                }
            }
            CurrentRequest.Value["UserCanPostNewTopicsExpression_Value"] = result;
            return(result);
        }