/// <summary>
    /// Creates forum. Called when the "Create forum" button is pressed.
    /// </summary>
    private bool CreateForum()
    {
        // Get the forum group
        ForumGroupInfo group = ForumGroupInfoProvider.GetForumGroupInfo("MyNewGroup", CMSContext.CurrentSiteID);

        if (group != null)
        {
            // Create new forum object
            ForumInfo newForum = new ForumInfo();

            // Set the properties
            newForum.ForumDisplayName = "My new forum";
            newForum.ForumName = "MyNewForum";
            newForum.ForumGroupID = group.GroupID;
            newForum.ForumSiteID = group.GroupSiteID;
            newForum.AllowAccess = SecurityAccessEnum.AllUsers;
            newForum.AllowAttachFiles = SecurityAccessEnum.AuthenticatedUsers;
            newForum.AllowPost = SecurityAccessEnum.AllUsers;
            newForum.AllowReply = SecurityAccessEnum.AllUsers;
            newForum.AllowSubscribe = SecurityAccessEnum.AllUsers;
            newForum.ForumOpen = true;
            newForum.ForumModerated = false;
            newForum.ForumThreads = 0;
            newForum.ForumPosts = 0;

            // Save the forum
            ForumInfoProvider.SetForumInfo(newForum);

            return true;
        }

        return false;
    }
        public void GetForumEvent_ReturnsNull_WhenForumIdIsInvalid()
        {
            // Arrange
            var infos = new List<ForumInfo>();
            var forumInfo = new ForumInfo { Active = true, Description = "Awesome", ForumId = 1 };
            infos.Add(forumInfo);
            infos.Add(new ForumInfo { Active = true, Description = "What?", ForumId = 2 });
            forumsController.Setup(x => x.GetForum(1)).Returns(forumInfo);
            presenter = new ForumsServicePresenter(view.Object, forumsController.Object);

            // Act
            var getForumCalledEventArgs = new GetForumCalledEventArgs(6);
            view.Raise(x => x.ForumGetCalled += null, getForumCalledEventArgs);
            
            // Assert
            Assert.IsNull(getForumCalledEventArgs.Result);
        }
Exemplo n.º 3
0
    protected void Page_Load(object sender, EventArgs e)
    {
        UpdateButton.Click+=new EventHandler(UpdateButton_Click);
        ModeratedCheckBox.CheckedChanged += new EventHandler(ModeratedCheckBox_CheckedChanged);
        Slider1.TextChanged += new EventHandler(Slider1_TextChanged);
        DeleteForumButton.Click +=new EventHandler(DeleteForumButton_Click);

        string forumId = Request.QueryString["forum"];
        if (string.IsNullOrEmpty(forumId))
            Response.Redirect("Default.aspx");

        _forum = Forums.GetForumByID(int.Parse(forumId));
        if (_forum == null)
            Response.Redirect("Default.aspx");

        if (!IsPostBack)
        {
            DataBind();
        }
    }
    /// <summary>
    /// Reloads the form data.
    /// </summary>
    public override void ReloadData(bool forceReload)
    {
        currentValues = GetModerators();

        if (forceReload)
        {
            forum = ForumInfoProvider.GetForumInfo(ForumID);

            if (forum != null)
            {
                userSelector.CurrentValues = currentValues;
                userSelector.ReloadData();
            }
        }

        if (!RequestHelper.IsPostBack() || forceReload)
        {
            chkForumModerated.Checked = forum.ForumModerated;

            // Load current values to uniselector
            userSelector.CurrentValues = currentValues;
            userSelector.ReloadData();
        }
    }
Exemplo n.º 5
0
    /// <summary>
    /// Sets data to database.
    /// </summary>
    protected void btnOK_Click(object sender, EventArgs e)
    {
        // Check MODIFY permission for forums
        if (!CheckPermissions("cms.forums", CMSAdminControl.PERMISSION_MODIFY))
        {
            return;
        }

        string codeName = txtForumName.Text.Trim();

        // Get safe code name for simple display mode
        if (DisplayMode == ControlDisplayModeEnum.Simple)
        {
            codeName = ValidationHelper.GetCodeName(txtForumDisplayName.Text.Trim(), 50) + "_group_" + this.CommunityGroupGUID;
        }

        // Check required fields
        string errorMessage = new Validator().NotEmpty(txtForumDisplayName.Text, GetString("Forum_General.EmptyDisplayName")).NotEmpty(codeName, GetString("Forum_General.EmptyCodeName")).Result;

        if (errorMessage == String.Empty && !ValidationHelper.IsCodeName(codeName))
        {
            errorMessage = GetString("general.errorcodenameinidentificatorformat");
        }

        if (errorMessage == "")
        {
            if (CMSContext.CurrentSite != null)
            {
                // If forum with given name already exists show error message
                if (ForumInfoProvider.GetForumInfo(codeName, CMSContext.CurrentSiteID, CommunityGroupID) != null)
                {
                    lblError.Visible = true;
                    lblError.Text = GetString("Forum_Edit.ForumAlreadyExists");
                    return;
                }

                // Create new object
                ForumInfo forumObj = new ForumInfo();

                // Set new properties
                forumObj.ForumSiteID = CMSContext.CurrentSite.SiteID;
                forumObj.ForumIsLocked = chkForumLocked.Checked;
                forumObj.ForumOpen = chkForumOpen.Checked;
                forumObj.ForumDisplayEmails = chkForumDisplayEmails.Checked;
                forumObj.ForumDescription = txtForumDescription.Text.Trim();
                forumObj.ForumRequireEmail = chkForumRequireEmail.Checked;
                forumObj.ForumDisplayName = txtForumDisplayName.Text.Trim();
                forumObj.ForumName = codeName;
                forumObj.ForumGroupID = this.mGroupId;
                forumObj.ForumModerated = chkForumModerated.Checked;
                forumObj.ForumAccess = 40000;
                forumObj.ForumPosts = 0;
                forumObj.ForumThreads = 0;
                forumObj.ForumPostsAbsolute = 0;
                forumObj.ForumThreadsAbsolute = 0;
                forumObj.ForumOrder = 0;
                forumObj.ForumUseCAPTCHA = chkCaptcha.Checked;
                forumObj.ForumCommunityGroupID = CommunityGroupID;

                // For simple display mode skip some properties
                if (DisplayMode != ControlDisplayModeEnum.Simple)
                {
                    forumObj.ForumBaseUrl = txtBaseUrl.Text.Trim();
                    forumObj.ForumUnsubscriptionUrl = txtUnsubscriptionUrl.Text.Trim();
                    forumObj.ForumHTMLEditor = chkUseHTML.Checked;

                    if (chkInheritBaseUrl.Checked)
                    {
                        forumObj.ForumBaseUrl = null;
                    }

                    if (chkInheritUnsubscribeUrl.Checked)
                    {
                        forumObj.ForumUnsubscriptionUrl = null;
                    }
                }

                // Clear inherited values
                if (chkInheritUseHTML.Checked)
                {
                    forumObj.SetValue("ForumHTMLEditor", null);
                }

                if (chkInheritForumDisplayEmails.Checked)
                {
                    forumObj.SetValue("ForumDisplayEmails", null);
                }

                if (chkInheritForumRequireEmail.Checked)
                {
                    forumObj.SetValue("ForumRequireEmail", null);
                }

                if (chkInheritCaptcha.Checked)
                {
                    forumObj.SetValue("ForumUseCAPTCHA", null);
                }

                // Check licence
                if (ForumInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Forums, VersionActionEnum.Insert))
                {
                    ForumInfoProvider.SetForumInfo(forumObj);
                    this.mForumId = forumObj.ForumID;
                    this.RaiseOnSaved();
                }
                else
                {
                    lblError.Visible = true;
                    lblError.Text = GetString("LicenseVersionCheck.Forums");
                }
            }
        }
        else
        {
            lblError.Visible = true;
            lblError.Text = errorMessage;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        process = true;
        if (!Visible || StopProcessing)
        {
            EnableViewState = false;
            process = false;
        }

        chkChangeName.CheckedChanged += chkChangeName_CheckedChanged;

        if (ForumID > 0)
        {
            // Get information on current forum
            forum = ForumInfoProvider.GetForumInfo(ForumID);

            // Check whether the forum still exists
            EditedObject = forum;
        }

        // Get forum resource
        resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");

        if ((resForums != null) && (forum != null))
        {
            QueryDataParameters parameters = new QueryDataParameters();
            parameters.Add("@ID", resForums.ResourceId);
            parameters.Add("@ForumID", forum.ForumID);
            parameters.Add("@SiteID", SiteContext.CurrentSiteID);

            string where = string.Empty;
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Build where condition
            if (groupId > 0)
            {
                where = "RoleGroupID=" + groupId + " AND PermissionDisplayInMatrix = 0";
            }
            else
            {
                where = "RoleGroupID IS NULL AND PermissionDisplayInMatrix = 0";
            }

            // Setup matrix control
            gridMatrix.IsLiveSite = IsLiveSite;
            gridMatrix.QueryParameters = parameters;
            gridMatrix.WhereCondition = where;
            gridMatrix.CssClass = "permission-matrix";
            gridMatrix.OnItemChanged += gridMatrix_OnItemChanged;

            // Disable permission matrix if user has no MANAGE rights
            if (!CheckPermissions("cms.forums", PERMISSION_MODIFY))
            {
                Enable = false;
                gridMatrix.Enabled = false;
                ShowError(String.Format(GetString("general.accessdeniedonpermissionname"), "Manage"));
            }
        }
    }
Exemplo n.º 7
0
 /// <summary>
 /// 批理设置论坛信息
 /// </summary>
 /// <param name="__foruminfo">复制的论坛信息</param>
 /// <param name="bsp">是否要批量设置的信息字段</param>
 /// <param name="fidlist">目标论坛(fid)串</param>
 /// <returns></returns>
 public static bool BatchSetForumInf(ForumInfo __foruminfo, BatchSetParams bsp, string fidlist)
 {
     return(DatabaseProvider.GetInstance().BatchSetForumInf(__foruminfo, bsp, fidlist));
 }
Exemplo n.º 8
0
        private void RunForumStatic_Click(object sender, EventArgs e)
        {
            #region 运行论坛统计

            if (this.CheckCookie())
            {
                forumsstatic.Text = ViewState["forumsstatic"].ToString();

                int fid = DNTRequest.GetInt("fid", -1);
                if (fid > 0)
                {
                    forumInfo = Forums.GetForumInfo(fid);
                }
                else
                {
                    return;
                }

                int    topiccount   = 0;
                int    postcount    = 0;
                int    lasttid      = 0;
                string lasttitle    = "";
                string lastpost     = "";
                int    lastposterid = 0;
                string lastposter   = "";
                int    replypost    = 0;
                AdminForumStats.ReSetFourmTopicAPost(fid, out topiccount, out postcount, out lasttid, out lasttitle, out lastpost, out lastposterid, out lastposter, out replypost);

                runforumsstatic = string.Format("<br /><br />运行结果<hr style=\"height:1px; width:600; color:#CCCCCC; background:#CCCCCC; border: 0; \" align=\"left\" />主题总数:{0}<br />帖子总数:{1}<br />今日回帖数总数:{2}<br />最后提交日期:{3}",
                                                topiccount,
                                                postcount,
                                                replypost,
                                                lastpost);

                if ((forumInfo.Topics == topiccount) && (forumInfo.Posts == postcount) && (forumInfo.Todayposts == replypost) && (forumInfo.Lastpost.Trim() == lastpost))
                {
                    runforumsstatic += "<br /><br /><br />结果一致";
                }
                else
                {
                    runforumsstatic += "<br /><br /><br />比较<hr style=\"height:1px; width:600; color:#CCCCCC; background:#CCCCCC; border: 0; \" align=\"left\" />";
                    if (forumInfo.Topics != topiccount)
                    {
                        runforumsstatic += "主题总数有差异<br />";
                    }
                    if (forumInfo.Posts != postcount)
                    {
                        runforumsstatic += "帖子总数有差异<br />";
                    }
                    if (forumInfo.Todayposts != replypost)
                    {
                        runforumsstatic += "今日回帖数总数有差异<br />";
                    }
                    if (forumInfo.Lastpost != lastpost)
                    {
                        runforumsstatic += "最后提交日期有差异<br />";
                    }
                }
            }
            this.TabControl1.SelectedIndex = 5;
            DataGridBind("");
            BindTopicType();
            #endregion
        }
Exemplo n.º 9
0
    /// <summary>
    /// OK click hadler.
    /// </summary>
    protected void btnOK_Click(object sender, EventArgs e)
    {
        #region "Security"

        // Check whether forum exists
        if (ForumContext.CurrentForum == null)
        {
            return;
        }

        // Check security
        bool securityCheck = true;
        switch (ForumContext.CurrentState)
        {
        case ForumStateEnum.NewThread:
            securityCheck = IsAvailable(ForumContext.CurrentForum, ForumActionType.NewThread);
            break;

        case ForumStateEnum.ReplyToPost:
            securityCheck = IsAvailable(ForumContext.CurrentForum, ForumActionType.Reply);
            break;

        case ForumStateEnum.EditPost:
            securityCheck = ForumContext.CurrentPost != null && IsAvailable(ForumContext.CurrentPost, ForumActionType.Edit);
            break;
        }

        if (!securityCheck)
        {
            ShowError(GetString("ForumNewPost.PermissionDenied"));
            return;
        }


        #region "Captcha"

        // Check security code if is required
        if ((ForumContext.CurrentForum.ForumUseCAPTCHA) && (!SecurityCode1.IsValid()) && (ForumContext.CurrentState != ForumStateEnum.EditPost))
        {
            ShowError(GetString("ForumNewPost.InvalidCaptcha"));
            return;
        }

        #endregion



        #region "Email field"

        // Check if email is set when it is required. Email format must be valid when it is set.
        var isEmailRequired = ForumContext.CurrentForum.ForumRequireEmail || chkSubscribe.Checked;
        var isEmailInvalid  = (isEmailRequired && String.IsNullOrWhiteSpace(txtEmail.Text)) || !txtEmail.IsValid();
        if (isEmailInvalid)
        {
            ShowError(GetString("Forums_WebInterface_ForumNewPost.emailErrorMsg"));
            return;
        }

        #endregion


        #region "Subject"

        // Check whether subject is filled
        if (txtSubject.Text.Trim() == "")
        {
            ShowError(rfvSubject.ErrorMessage);
            return;
        }

        #endregion


        #region "Text"

        var    validator = new Validator();
        string result;

        // Check post text in HTML editor or text area
        if (!ForumContext.CurrentForum.ForumHTMLEditor)
        {
            // Check whether post text is added in text area
            if ((result = validator.NotEmpty(DiscussionMacroResolver.RemoveTags(ucBBEditor.Text), rfvText.ErrorMessage).Result) != "")
            {
                ShowError(result);
                return;
            }
        }
        else
        {
            // Check whether post text is added in HTML editor
            if ((result = validator.NotEmpty(htmlTemplateBody.ResolvedValue, rfvText.ErrorMessage).Result) != "")
            {
                ShowError(result);
                return;
            }
        }

        #endregion


        #region "User name"

        // Check whether user name is filled if user name field is visible
        if (ForumContext.CurrentForum.ForumAllowChangeName || MembershipContext.AuthenticatedUser.IsPublic() || ((ForumContext.CurrentForum != null) && (ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, ForumContext.CommunityGroupID))))
        {
            validator = new Validator();

            if (!String.IsNullOrEmpty(result = validator.NotEmpty(txtUserName.Text, rfvUserName.ErrorMessage).Result))
            {
                ShowError(result);
                return;
            }
        }

        #endregion


        #endregion


        #region "Forum post properties"

        bool newPost = false;

        // Current forum info object
        ForumInfo fi = ForumContext.CurrentForum;

        // Forum post info object
        ForumPostInfo fp;

        // Get forum post info with dependence on current state
        if (ForumContext.CurrentState == ForumStateEnum.EditPost)
        {
            // Get existing object
            fp = ForumContext.CurrentPost;
            fp.PostLastEdit = DateTime.Now;
        }
        else
        {
            // Create new forum post info object
            fp      = new ForumPostInfo();
            newPost = true;
        }

        fp.SiteId = fi.ForumSiteID;

        #region "Ad-hoc forum"

        if (IsAdHocForum && (ForumContext.CurrentForum.ForumID == 0))
        {
            if (DocumentContext.CurrentDocument == null)
            {
                ShowError(GetString("forums.documentdoesnotexist"));
                return;
            }

            fi.ForumGroupID     = ForumGroupInfoProvider.GetAdHocGroupInfo(SiteID).GroupID;
            fi.ForumName        = "AdHoc-" + Guid.NewGuid();
            fi.ForumDisplayName = TextHelper.LimitLength(DocumentContext.CurrentDocument.GetDocumentName(), POST_USERNAME_LENGTH, String.Empty);
            fi.ForumOpen        = true;
            fi.ForumModerated   = false;
            fi.ForumAccess      = 040000;
            fi.ForumThreads     = 0;
            fi.ForumPosts       = 0;
            fi.ForumLogActivity = LogActivity;
            ForumInfoProvider.SetForumInfo(fi);

            ForumContext.CurrentForum.ForumID = fi.ForumID;
            ForumContext.ForumID = fi.ForumID;
            ForumID = fi.ForumID;
        }

        #endregion


        // Post forum
        fp.PostForumID = ForumContext.CurrentForum.ForumID;
        // Get forum post info with dependence on current state
        if (ForumContext.CurrentState != ForumStateEnum.EditPost)
        {
            // Post time
            fp.PostTime = DateTime.Now;
            // User IP address
            fp.PostInfo.IPAddress = RequestContext.UserHostAddress;
            // User agent
            fp.PostInfo.Agent = Request.UserAgent;
            // Post user id
            if (!MembershipContext.AuthenticatedUser.IsPublic())
            {
                fp.PostUserID = MembershipContext.AuthenticatedUser.UserID;
            }

            // Post signature
            fp.PostUserSignature = txtSignature.Text;
        }

        // Post subject
        fp.PostSubject = txtSubject.Text;
        // Post user email
        fp.PostUserMail = txtEmail.Text;


        // Post type
        int forumType = ForumContext.CurrentForum.ForumType;
        if (forumType == 0)
        {
            if (ForumContext.CurrentReplyThread == null)
            {
                // New thread - use type which user chosen
                fp.PostType = (radTypeDiscussion.Checked ? 0 : 1);
            }
            else
            {
                // Reply - use parent type
                fp.PostType = ForumContext.CurrentReplyThread.PostType;
            }
        }
        else
        {
            // Fixed type - use the forum setting
            fp.PostType = forumType - 1;
        }

        // Set username if change name is allowed
        if (fi.ForumAllowChangeName || MembershipContext.AuthenticatedUser.IsPublic() || ForumContext.UserIsModerator(fp.PostForumID, ForumContext.CommunityGroupID))
        {
            fp.PostUserName = TextHelper.LimitLength(txtUserName.Text, POST_USERNAME_LENGTH, "");
        }
        else
        {
            // Get forum post info with dependence on current state
            if (ForumContext.CurrentState != ForumStateEnum.EditPost)
            {
                fp.PostUserName = UserName;
            }
        }

        // Post parent id -> reply to
        if (ForumContext.CurrentReplyThread != null)
        {
            fp.PostParentID = ForumContext.CurrentReplyThread.PostId;

            // Check max relative level
            if ((MaxRelativeLevel > -1) && (ForumContext.CurrentReplyThread.PostLevel >= MaxRelativeLevel))
            {
                ShowError(GetString("Forums.MaxRelativeLevelError"));
                return;
            }
        }

        // Get post text from HTML editor if is enabled
        fp.PostText = ForumContext.CurrentForum.ForumHTMLEditor ? htmlTemplateBody.ResolvedValue : ucBBEditor.Text;

        // Approve post if forum is not moderated
        if (newPost)
        {
            if (!ForumContext.CurrentForum.ForumModerated)
            {
                fp.PostApproved = true;
            }
            else
            {
                if (ForumContext.UserIsModerator(fp.PostForumID, CommunityGroupID))
                {
                    fp.PostApproved         = true;
                    fp.PostApprovedByUserID = MembershipContext.AuthenticatedUser.UserID;
                }
            }
        }

        // If signature is enabled then
        if (EnableSignature)
        {
            fp.PostUserSignature = MembershipContext.AuthenticatedUser.UserSignature;
        }

        #endregion


        if (!BadWordInfoProvider.CanUseBadWords(MembershipContext.AuthenticatedUser, SiteContext.CurrentSiteName))
        {
            // Prepare columns to check
            Dictionary <string, int> columns = new Dictionary <string, int>();
            columns.Add("PostText", 0);
            columns.Add("PostSubject", 450);
            columns.Add("PostUserSignature", 0);
            columns.Add("PostUserName", 200);

            // Perform bad words check
            string badMessage = BadWordsHelper.CheckBadWords(fp, columns, "PostApproved", "PostApprovedByUserID", fp.PostText, MembershipContext.AuthenticatedUser.UserID, () => { return(ValidatePost(fp)); });

            if (String.IsNullOrEmpty(badMessage))
            {
                if (!ValidatePost(fp))
                {
                    badMessage = GetString("ForumNewPost.EmptyBadWord");
                }
            }

            if (!String.IsNullOrEmpty(badMessage))
            {
                ShowError(badMessage);
                return;
            }
        }



        // Flood protection
        if (FloodProtectionHelper.CheckFlooding(SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
        {
            ShowError(GetString("General.FloodProtection"));
            return;
        }

        // Check banned ip
        if (!BannedIPInfoProvider.IsAllowed(SiteContext.CurrentSiteName, BanControlEnum.AllNonComplete))
        {
            ShowError(GetString("General.BannedIP"));
            return;
        }

        string baseUrl = ForumContext.CurrentForum.ForumBaseUrl;
        if (String.IsNullOrEmpty(baseUrl))
        {
            baseUrl = FriendlyBaseURL;
        }

        string unsubscriptionUrl = ForumContext.CurrentForum.ForumUnsubscriptionUrl;
        if (String.IsNullOrEmpty(unsubscriptionUrl))
        {
            unsubscriptionUrl = UnsubscriptionURL;
        }

        // USe parent post id for new post
        int subscibePostId = newPost ? fp.PostParentID : fp.PostId;

        // Check subscriptions
        if ((chkSubscribe.Checked) && (!String.IsNullOrEmpty(txtEmail.Text)) && (ForumSubscriptionInfoProvider.IsSubscribed(txtEmail.Text.Trim(), fp.PostForumID, subscibePostId)))
        {
            // Post of the forum is already subscribed to this email -> show an error
            chkSubscribe.Checked = false;
            ShowError(GetString("Forums.EmailAlreadySubscribed"));
            return;
        }

        // Save post object
        ForumPostInfoProvider.SetForumPostInfo(fp, baseUrl, unsubscriptionUrl);
        LogPostActivity(fp, fi);


        #region "Subscription"

        // If subscribe is checked create new subscription to the current post
        if ((chkSubscribe.Checked) && (!ForumSubscriptionInfoProvider.IsSubscribed(fp.PostUserMail, fp.PostForumID, fp.PostId)))
        {
            // Create new subscription info object
            ForumSubscriptionInfo fsi = new ForumSubscriptionInfo();
            // Set info properties
            fsi.SubscriptionForumID = fp.PostForumID;
            fsi.SubscriptionEmail   = fp.PostUserMail;
            fsi.SubscriptionPostID  = fp.PostId;
            fsi.SubscriptionUserID  = fp.PostUserID;
            fsi.SubscriptionGUID    = Guid.NewGuid();

            // Save subscription
            ForumSubscriptionInfoProvider.Subscribe(fsi, DateTime.Now, true, true);

            if (fsi.SubscriptionApproved)
            {
                LogSubscriptionActivity(fsi, fi);
            }
        }

        #endregion


        bool moderationRequired = false;
        if ((!fp.PostApproved) && (!ForumContext.UserIsModerator(fp.PostForumID, CommunityGroupID)))
        {
            moderationRequired = true;
            if (OnModerationRequired != null)
            {
                OnModerationRequired(this, null);
            }
        }

        // Keep current user info
        var currentUser = MembershipContext.AuthenticatedUser;

        if (AuthenticationHelper.IsAuthenticated() && chkAttachFile.Checked && (currentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin) || ForumContext.CurrentForum.AllowAttachFiles != SecurityAccessEnum.Nobody))
        {
            // Redirect to the post attachments
            string attachmentUrl = GetURL(fp, ForumActionType.Attachment);
            if (moderationRequired)
            {
                attachmentUrl = URLHelper.AddParameterToUrl(attachmentUrl, "moderated", "1");
            }
            URLHelper.Redirect(UrlResolver.ResolveUrl(attachmentUrl));
        }
        else
        {
            if (!StopProcessing)
            {
                // Redirect back to the forum or forum thread
                URLHelper.Redirect(ClearURL());
            }
        }
    }
    /// <summary>
    /// Creates department forum group.
    /// </summary>
    /// <param name="departmentNode">Department node</param>
    private void CreateDepartmentForumGroup(TreeNode departmentNode)
    {
        // Set general values
        string departmentName = departmentNode.DocumentName;
        string suffix = "";

        #region "Create forum group"

        // Get forum group code name
        string groupCodeName = "Department_" + departmentNode.NodeGUID;

        // Check if forum group with given name already exists
        if (ForumGroupInfoProvider.GetForumGroupInfo(groupCodeName, CMSContext.CurrentSiteID) != null)
        {
            return;
        }

        // Create base URL for forums
        string baseUrl = CMSContext.GetUrl(departmentNode.NodeAliasPath + "/" + FORUM_DOCUMENT_ALIAS);

        ForumGroupInfo forumGroupObj = new ForumGroupInfo();
        forumGroupObj.GroupDescription = "Forum group for " + departmentName + " department.";
        suffix = " forum group";
        forumGroupObj.GroupDisplayName = TextHelper.LimitLength(departmentName, 200 - suffix.Length, "") + suffix;
        forumGroupObj.GroupName = groupCodeName;
        forumGroupObj.GroupOrder = 0;
        forumGroupObj.GroupEnableQuote = true;
        forumGroupObj.GroupSiteID = CMSContext.CurrentSiteID;
        forumGroupObj.GroupBaseUrl = baseUrl;

        // Additional settings
        forumGroupObj.GroupEnableCodeSnippet = true;
        forumGroupObj.GroupEnableFontBold = true;
        forumGroupObj.GroupEnableFontColor = true;
        forumGroupObj.GroupEnableFontItalics = true;
        forumGroupObj.GroupEnableFontStrike = true;
        forumGroupObj.GroupEnableFontUnderline = true;
        forumGroupObj.GroupEnableQuote = true;
        forumGroupObj.GroupEnableURL = true;
        forumGroupObj.GroupEnableImage = true;

        ForumGroupInfoProvider.SetForumGroupInfo(forumGroupObj);

        #endregion

        #region "Create forum"

        string codeName = "Default_department_" + departmentNode.NodeGUID;

        // Check if forum with given name already exists
        if (ForumInfoProvider.GetForumInfo(codeName, CMSContext.CurrentSite.SiteID) != null)
        {
            return;
        }

        ForumInfo forumObj = new ForumInfo();
        forumObj.ForumSiteID = CMSContext.CurrentSiteID;
        forumObj.ForumIsLocked = false;
        forumObj.ForumOpen = true;
        forumObj.ForumDisplayEmails = false;
        forumObj.ForumDescription = "Forum for " + departmentName + " department.";
        forumObj.ForumRequireEmail = false;
        suffix = " forum";
        forumObj.ForumDisplayName = TextHelper.LimitLength(departmentName, 200 - suffix.Length, "") + suffix;
        forumObj.ForumName = codeName;
        forumObj.ForumGroupID = forumGroupObj.GroupID;
        forumObj.ForumModerated = false;
        forumObj.ForumAccess = 40000;
        forumObj.ForumPosts = 0;
        forumObj.ForumThreads = 0;
        forumObj.ForumPostsAbsolute = 0;
        forumObj.ForumThreadsAbsolute = 0;
        forumObj.ForumOrder = 0;
        forumObj.ForumUseCAPTCHA = false;
        forumObj.SetValue("ForumHTMLEditor", null);

        // Set security
        forumObj.AllowAccess = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowAttachFiles = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowMarkAsAnswer = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowPost = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowReply = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowSubscribe = SecurityAccessEnum.AuthorizedRoles;

        if (ForumInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Forums, VersionActionEnum.Insert))
        {
            ForumInfoProvider.SetForumInfo(forumObj);
        }

        #endregion
    }
    /// <summary>
    /// Reloads the form data.
    /// </summary>
    public override void ReloadData()
    {
        fi = ForumInfoProvider.GetForumInfo(ForumID);
        replyPi = ForumPostInfoProvider.GetForumPostInfo(ReplyToPostID);
        editPi = ForumPostInfoProvider.GetForumPostInfo(EditPostID);
        var cui = MembershipContext.AuthenticatedUser;

        // Edit post
        if (editPi != null)
        {
            ForumPost1.PostID = editPi.PostId;
            ForumPost1.DisplayOnly = true;

            if (DisableCancelButton)
            {
                btnCancel.Enabled = false;
            }
            ucBBEditor.Text = editPi.PostText;
            htmlTemplateBody.ResolvedValue = editPi.PostText;
            txtSubject.Text = editPi.PostSubject;
            txtSignature.Text = editPi.PostUserSignature;
            txtEmail.Text = editPi.PostUserMail;
            txtUserName.Text = editPi.PostUserName;
            plcIsAnswer.Visible = true;
            plcIsNotAnswer.Visible = true;
            txtPostIsAnswer.Text = editPi.PostIsAnswer.ToString();
            txtPostIsNotAnswer.Text = editPi.PostIsNotAnswer.ToString();

            if ((fi != null) && (fi.ForumType == 0) && (editPi.PostLevel == 0))
            {
                if (editPi.PostType == 0)
                {
                    radTypeDiscussion.Checked = true;
                }
                else
                {
                    radTypeQuestion.Checked = true;
                }
            }
            else
            {
                plcThreadType.Visible = false;
            }
        }
        else
        {
            // Reply to post
            if (replyPi != null)
            {
                pnlReplyPost.Visible = true;
                ForumPost1.PostID = replyPi.PostId;
                ForumPost1.DisplayOnly = true;

                plcThreadType.Visible = false;
                txtSignature.Text = cui.UserSignature;
                txtEmail.Text = cui.Email;

                if (!String.IsNullOrEmpty(cui.UserNickName))
                {
                    txtUserName.Text = cui.UserNickName.Trim();
                }
                else
                {
                    txtUserName.Text = Functions.GetFormattedUserName(cui.UserName, IsLiveSite);
                }

                if (!replyPi.PostSubject.StartsWithCSafe(GetString("Forums.ReplyPrefix")))
                {
                    txtSubject.Text = GetString("Forums.ReplyPrefix") + replyPi.PostSubject;
                    txtSubject.Text = TextHelper.LimitLength(txtSubject.Text, POST_SUBJECT_LENGTH, "");
                }
                else
                {
                    txtSubject.Text = replyPi.PostSubject;
                }
                btnCancel.Enabled = true;
            }
            // Create new thread
            else
            {
                btnCancel.Enabled = false;
                txtSignature.Text = cui.UserSignature;
                txtEmail.Text = cui.Email;

                if (!String.IsNullOrEmpty(cui.UserNickName))
                {
                    txtUserName.Text = cui.UserNickName.Trim();
                }
                else
                {
                    txtUserName.Text = Functions.GetFormattedUserName(cui.UserName, IsLiveSite);
                }
            }
        }
    }
Exemplo n.º 12
0
        protected override void ShowPage()
        {
            GetPostAds(forumid);

            if (userid > 0 && useradminid > 0)
            {
                AdminGroupInfo admingroupinfo = AdminGroups.GetAdminGroupInfo(usergroupid);
                if (admingroupinfo != null)
                {
                    disablepostctrl = admingroupinfo.Disablepostctrl;
                }
            }

            #region 获取版块信息
            if (forumid == -1)
            {
                AddLinkRss(forumpath + "tools/rss.aspx", "最新主题");
                AddErrLine("无效的版块ID");
                return;
            }
            forum = Forums.GetForumInfo(forumid);
            if (forum == null || forum.Fid < 1)
            {
                if (config.Rssstatus == 1)
                {
                    AddLinkRss(forumpath + "tools/rss.aspx", Utils.EncodeHtml(config.Forumtitle) + " 最新主题");
                }

                AddErrLine("不存在的版块ID");
                return;
            }
            #endregion

            if (config.Rssstatus == 1)
            {
                AddLinkRss(forumpath + "tools/" + base.RssAspxRewrite(forum.Fid), Utils.EncodeHtml(forum.Name) + " 最新主题");
            }

            if (JumpUrl(forum))
            {
                return;
            }

            needaudit = UserAuthority.NeedAudit(forum, useradminid, userid, usergroupinfo);

            // 检查是否具有版主的身份
            if (useradminid > 0)
            {
                ismoder = Moderators.IsModer(useradminid, userid, forumid);
            }

            //设置搜索和排序条件
            SetSearchCondition();

            showforumlogin = IsShowForumLogin(forum);
            pagetitle      = Utils.RemoveHtml(forum.Name);
            navhomemenu    = Caches.GetForumListMenuDivCache(usergroupid, userid, config.Extname);
            forumnav       = ShowForumAspxRewrite(ForumUtils.UpdatePathListExtname(forum.Pathlist.Trim(), config.Extname).Replace("\"showforum", "\"" + forumurl + "showforum"),
                                                  forumid, pageid);
            topicextcreditsinfo = Scoresets.GetScoreSet(Scoresets.GetTopicAttachCreditsTrans());
            bonusextcreditsinfo = Scoresets.GetScoreSet(Scoresets.GetBonusCreditsTrans());

            #region 主题分类设置
            if (forum.Applytopictype == 1) //启用主题分类
            {
                topictypeselectoptions = Forums.GetCurrentTopicTypesOption(forum.Fid, forum.Topictypes);
            }

            if (forum.Viewbytopictype == 1) //允许按类别浏览
            {
                topictypeselectlink = Forums.GetCurrentTopicTypesLink(forum.Fid, forum.Topictypes, forumurl + "showforum.aspx");
            }
            #endregion

            //更新页面Meta中的keyword,description项, 提高SEO友好性
            UpdateMetaInfo(Utils.StrIsNullOrEmpty(forum.Seokeywords) ? config.Seokeywords : forum.Seokeywords,
                           Utils.StrIsNullOrEmpty(forum.Seodescription) ? forum.Description : forum.Seodescription,
                           config.Seohead);

            //设置编辑器状态
            SetEditorState();

            #region 访问和发帖权限校验
            if (!UserAuthority.VisitAuthority(forum, usergroupinfo, userid, ref msg))
            {
                AddErrLine(msg);
                needlogin = userid == -1;
                return;
            }

            canposttopic = UserAuthority.PostAuthority(forum, usergroupinfo, userid, ref msg);
            // 如果当前用户非管理员并且论坛设定了禁止发帖时间段,当前时间如果在其中的一个时间段内,不允许用户发帖
            if (useradminid != 1 && usergroupinfo.Disableperiodctrl != 1)
            {
                string visittime = "";
                if (Scoresets.BetweenTime(config.Postbanperiods, out visittime))
                {
                    canposttopic = false;
                }

                isnewbie = UserAuthority.CheckNewbieSpan(userid);
            }

            //判断是否有快速发主题的权限
            if ((config.Fastpost == 1 || config.Fastpost == 3) && forum.Allowspecialonly <= 0 && canposttopic && !isnewbie)
            {
                canquickpost = true;
            }
            #endregion

            // 得到子版块列表
            if (forum.Subforumcount > 0)
            {
                subforumlist = Forums.GetSubForumCollection(forumid, forum.Colcount, config.Hideprivate, usergroupid, config.Moddisplay);
            }
            if (!forum.Rules.Equals(""))
            {
                forum.Rules = UBB.ParseSimpleUBB(forum.Rules);//替换版规中的UBB
            }
            //获取主题总数
            topiccount = Topics.GetTopicCount(forumid, true, condition);

            #region 设置分页及主题列表信息
            // 得到Tpp设置
            if (tpp <= 0)
            {
                tpp = config.Tpp;
            }

            // 得到Ppp设置
            if (ppp <= 0)
            {
                ppp = config.Ppp;
            }

            //修正请求页数中可能的错误
            if (pageid < 1)
            {
                pageid = 1;
            }

            int toptopicpagecount = 0;

            if (forum.Layer > 0)
            {
                //获取当前页置顶主题列表
                DataRow dr = Topics.GetTopTopicListID(forumid);
                if (dr != null && !Utils.StrIsNullOrEmpty(dr["tid"].ToString()))
                {
                    topiccount = topiccount + TypeConverter.ObjectToInt(dr["tid0Count"]);
                }

                //获取总页数
                pagecount = topiccount % tpp == 0 ? topiccount / tpp : topiccount / tpp + 1;
                if (pagecount == 0)
                {
                    pagecount = 1;
                }
                if (pageid > pagecount)
                {
                    pageid = pagecount;
                }

                if (dr != null && !Utils.StrIsNullOrEmpty(dr["tid"].ToString()))
                {
                    toptopiccount = TypeConverter.ObjectToInt(dr["tidCount"]);
                    if (toptopiccount > tpp * (pageid - 1))
                    {
                        toptopiclist      = Topics.GetTopTopicList(forumid, tpp, pageid, dr["tid"].ToString(), forum.Autoclose, forum.Topictypeprefix);
                        toptopicpagecount = toptopiccount / tpp;
                    }

                    if (toptopicpagecount >= pageid || (pageid == 1 && toptopicpagecount != toptopiccount))
                    {
                        topiclist = GetTopicInfoList(tpp - toptopiccount % tpp, pageid - toptopicpagecount, 0);
                    }
                    else
                    {
                        topiclist = GetTopicInfoList(tpp, pageid - toptopicpagecount, toptopiccount % tpp);
                    }
                }
                else
                {
                    toptopicpagecount = 0;
                    topiclist         = GetTopicInfoList(tpp, pageid, 0);
                }

                //如果topiclist为空则更新当前论坛帖数
                if (topiclist == null || topiclist.Count == 0 || topiclist.Count > topiccount)
                {
                    Forums.SetRealCurrentTopics(forum.Fid);
                }

                SetPageNumber();
                //当版块数大于一个并且当版块数量为一个时不是版块自身时显示下拉菜单
                showvisitedforumsmenu = visitedforums != null && ((visitedforums.Length == 1 && visitedforums[0].Fid != forumid) || visitedforums.Length > 1);
                SetVisitedForumsCookie();
                //保存查看版块的页数
                Utils.WriteCookie("forumpageid", pageid.ToString(), 30);

                //判断是否需要生成游客缓存页面
                IsGuestCachePage();
            }
            #endregion

            #region 替换版规中的UBB
            forum.Description = UBB.ParseSimpleUBB(forum.Description);
            #endregion

            #region 更新在线信息
            OnlineUsers.UpdateAction(olid, UserAction.ShowForum.ActionID, forumid, forum.Name, -1, "");

            if ((forumtotalonline < config.Maxonlinelist && (config.Whosonlinestatus == 2 || config.Whosonlinestatus == 3)) || DNTRequest.GetString("showonline") == "yes")
            {
                showforumonline = true;
                onlineuserlist  = OnlineUsers.GetForumOnlineUserCollection(forumid, out forumtotalonline, out forumtotalonlineguest,
                                                                           out forumtotalonlineuser, out forumtotalonlineinvisibleuser);
            }
            //if (DNTRequest.GetString("showonline") != "no")
            //{
            //     showforumonline = false;
            //}

            if (DNTRequest.GetString("showonline") == "no")
            {
                showforumonline = false;
            }
            #endregion

            //修正版主列表
            if (forum.Moderators.Trim() != "")
            {
                string moderHtml = string.Empty;
                foreach (string m in forum.Moderators.Split(','))
                {
                    moderHtml += string.Format("<a href=\"{0}userinfo.aspx?username={1}\">{2}</a>,", forumpath, Utils.UrlEncode(m), m);
                }

                forum.Moderators = moderHtml.TrimEnd(',');
            }

            ForumUtils.UpdateVisitedForumsOptions(forumid);
        }
Exemplo n.º 13
0
        /// <summary>
        /// 发帖权限控制
        /// </summary>
        /// <param name="forum">版块信息</param>
        /// <param name="usergroupinfo">当前用户的用户组信息</param>
        /// <param name="userId">当前用户Id</param>
        /// <returns></returns>
        public static bool PostAuthority(ForumInfo forum, UserGroupInfo userGroupInfo, int userId, ref string msg)
        {
            if (!Forums.AllowPostByUserID(forum.Permuserlist, userId)) //判断当前用户在当前版块发主题权限
            {
                if (string.IsNullOrEmpty(forum.Postperm))              //权限设置为空时,根据用户组权限判断
                {
                    // 验证用户是否有发表主题的权限
                    if (userGroupInfo.Allowpost != 1)
                    {
                        msg = "您当前的身份 \"" + userGroupInfo.Grouptitle + "\" 没有发表主题的权限";
                        return(false);
                    }
                }
                else//权限设置不为空时,根据板块权限判断
                {
                    if (!Forums.AllowPost(forum.Postperm, userGroupInfo.Groupid))
                    {
                        msg = "您没有在该版块发表主题的权限";
                        return(false);
                    }
                }
            }
            //当用户拥有发帖权限但版块只允许发布特殊主题时,需要判断用户是否能发布特殊主题
            if (forum.Allowspecialonly > 0)
            {
                //当版块设置了只允许特殊主题,但又没有开启任何特殊主题类型,则相当于关闭了版块的发主题功能
                if (forum.Allowpostspecial <= 0)
                {
                    msg = "您没有在该版块发表特殊主题的权限";
                    return(false);
                }

                if ((forum.Allowpostspecial & 1) == 1 && userGroupInfo.Allowpostpoll != 1)
                {
                    msg = "您当前的身份 \"" + userGroupInfo.Grouptitle + "\" 没有发布投票的权限";
                }
                else
                {
                    return(true);
                }

                if ((forum.Allowpostspecial & 4) == 4 && userGroupInfo.Allowbonus != 1)
                {
                    msg = "您当前的身份 \"" + userGroupInfo.Grouptitle + "\" 没有发布悬赏的权限";
                }
                else
                {
                    return(true);
                }

                if ((forum.Allowpostspecial & 16) == 16 && userGroupInfo.Allowdebate != 1)
                {
                    msg = "您当前的身份 \"" + userGroupInfo.Grouptitle + "\" 没有发起辩论的权限";
                }
                else
                {
                    return(true);
                }

                return(false);
            }
            return(true);
        }
Exemplo n.º 14
0
        abstract public bool BuildForum(string name);  //made changes

        abstract public void CancelForum(ForumInfo f);
    /// <summary>
    /// Generates the permission matrix for the current forum.
    /// </summary>
    private void CreateMatrix()
    {
        // Get forum resource info
        if (resForums == null)
        {
            resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");
        }

        // Get forum object
        if ((forum == null) && (ForumID > 0))
        {
            forum = ForumInfoProvider.GetForumInfo(ForumID);
        }

        if ((resForums != null) && (forum != null))
        {
            // Get permissions for the current forum resource
            DataSet permissions = PermissionNameInfoProvider.GetResourcePermissions(resForums.ResourceId);
            if (DataHelper.DataSourceIsEmpty(permissions))
            {
                ShowInformation(GetString("general.emptymatrix"));
            }
            else
            {
                TableHeaderRow headerRow = new TableHeaderRow();
                headerRow.CssClass     = "unigrid-head";
                headerRow.TableSection = TableRowSection.TableHeader;
                TableCell       newCell       = new TableCell();
                TableHeaderCell newHeaderCell = new TableHeaderCell();
                newHeaderCell.CssClass = "first-column";
                headerRow.Cells.Add(newHeaderCell);

                foreach (string permission in allowedPermissions)
                {
                    DataRow[] drArray = permissions.Tables[0].DefaultView.Table.Select("PermissionName = '" + permission + "'");
                    if (drArray.Length > 0)
                    {
                        DataRow dr = drArray[0];
                        newHeaderCell         = new TableHeaderCell();
                        newHeaderCell.Text    = dr["PermissionDisplayName"].ToString();
                        newHeaderCell.ToolTip = dr["PermissionDescription"].ToString();
                        headerRow.Cells.Add(newHeaderCell);
                    }
                    else
                    {
                        throw new Exception("[Security matrix] Column '" + permission + "' cannot be found.");
                    }
                }

                tblMatrix.Rows.Add(headerRow);

                // Render forum access permissions
                object[,] accessNames = new object[5, 2];
                accessNames[0, 0]     = GetString("security.nobody");
                accessNames[0, 1]     = SecurityAccessEnum.Nobody;
                accessNames[1, 0]     = GetString("security.allusers");
                accessNames[1, 1]     = SecurityAccessEnum.AllUsers;
                accessNames[2, 0]     = GetString("security.authenticated");
                accessNames[2, 1]     = SecurityAccessEnum.AuthenticatedUsers;
                accessNames[3, 0]     = GetString("security.groupmembers");
                accessNames[3, 1]     = SecurityAccessEnum.GroupMembers;
                accessNames[4, 0]     = GetString("security.authorizedroles");
                accessNames[4, 1]     = SecurityAccessEnum.AuthorizedRoles;

                TableRow newRow = null;
                for (int access = 0; access <= accessNames.GetUpperBound(0); access++)
                {
                    SecurityAccessEnum currentAccess = ((SecurityAccessEnum)accessNames[access, 1]);

                    // If the security isn't displayed as part of group section
                    if ((currentAccess == SecurityAccessEnum.GroupMembers) && (!IsGroupForum))
                    {
                        // Do not render this access item
                    }
                    else
                    {
                        // Generate cell holding access item name
                        newRow           = new TableRow();
                        newCell          = new TableCell();
                        newCell.Text     = accessNames[access, 0].ToString();
                        newCell.CssClass = "matrix-header";
                        newRow.Cells.Add(newCell);

                        // Render the permissions access items
                        bool isAllowed       = false;
                        bool isEnabled       = true;
                        int  permissionIndex = 0;
                        for (int permission = 0; permission < (tblMatrix.Rows[0].Cells.Count - 1); permission++)
                        {
                            newCell = new TableCell();

                            // Check if the currently processed access is applied for permission
                            isAllowed = CheckPermissionAccess(currentAccess, permission, tblMatrix.Rows[0].Cells[permission + 1].Text);
                            isEnabled = ((currentAccess != SecurityAccessEnum.AllUsers) || (permission != 1)) && Enable;

                            // Disable column in roles grid if needed
                            if ((currentAccess == SecurityAccessEnum.AuthorizedRoles) && !isAllowed)
                            {
                                gridMatrix.DisableColumn(permissionIndex);
                            }

                            // Insert the radio button for the current permission
                            var radio = new CMSRadioButton
                            {
                                Checked = isAllowed,
                                Enabled = isEnabled,
                            };
                            radio.Attributes.Add("onclick", ControlsHelper.GetPostBackEventReference(this, permission + ";" + Convert.ToInt32(currentAccess)));
                            newCell.Controls.Add(radio);

                            newRow.Cells.Add(newCell);
                            permissionIndex++;
                        }

                        // Add the access row to the table
                        tblMatrix.Rows.Add(newRow);
                    }
                }

                // Check if forum has some roles assigned
                headTitle.Visible = gridMatrix.HasData;
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        process = true;
        if (!Visible || StopProcessing)
        {
            EnableViewState = false;
            process         = false;
        }

        chkChangeName.CheckedChanged += chkChangeName_CheckedChanged;

        if (ForumID > 0)
        {
            // Get information on current forum
            forum = ForumInfoProvider.GetForumInfo(ForumID);

            // Check whether the forum still exists
            EditedObject = forum;
        }

        // Get forum resource
        resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");

        if ((resForums != null) && (forum != null))
        {
            QueryDataParameters parameters = new QueryDataParameters();
            parameters.Add("@ID", resForums.ResourceId);
            parameters.Add("@ForumID", forum.ForumID);
            parameters.Add("@SiteID", SiteContext.CurrentSiteID);

            string where = string.Empty;
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Build where condition
            if (groupId > 0)
            {
                where = "RoleGroupID=" + groupId + " AND PermissionDisplayInMatrix = 0";
            }
            else
            {
                where = "RoleGroupID IS NULL AND PermissionDisplayInMatrix = 0";
            }

            // Setup matrix control
            gridMatrix.IsLiveSite      = IsLiveSite;
            gridMatrix.QueryParameters = parameters;
            gridMatrix.WhereCondition  = where;
            gridMatrix.CssClass        = "permission-matrix";
            gridMatrix.OnItemChanged  += gridMatrix_OnItemChanged;

            // Disable permission matrix if user has no MANAGE rights
            if (!CheckPermissions("cms.forums", PERMISSION_MODIFY))
            {
                Enable             = false;
                gridMatrix.Enabled = false;
                ShowError(String.Format(GetString("general.accessdeniedonpermissionname"), "Manage"));
            }
        }
    }
    /// <summary>
    /// Creates department forum group.
    /// </summary>
    /// <param name="departmentNode">Department node</param>
    private void CreateDepartmentForumGroup(TreeNode departmentNode)
    {
        // Set general values
        string departmentName = departmentNode.GetDocumentName();
        string suffix         = "";


        #region "Create forum group"

        // Get forum group code name
        string groupCodeName = "Department_" + departmentNode.NodeGUID;

        // Check if forum group with given name already exists
        if (ForumGroupInfoProvider.GetForumGroupInfo(groupCodeName, SiteContext.CurrentSiteID) != null)
        {
            return;
        }

        // Create base URL for forums
        string baseUrl = DocumentURLProvider.GetUrl(departmentNode.NodeAliasPath + "/" + FORUM_DOCUMENT_ALIAS);

        ForumGroupInfo forumGroupObj = new ForumGroupInfo();
        forumGroupObj.GroupDescription = "Forum group for " + departmentName + " department.";
        suffix = " forum group";
        forumGroupObj.GroupDisplayName = TextHelper.LimitLength(departmentName, 200 - suffix.Length, "") + suffix;
        forumGroupObj.GroupName        = groupCodeName;
        forumGroupObj.GroupOrder       = 0;
        forumGroupObj.GroupEnableQuote = true;
        forumGroupObj.GroupSiteID      = SiteContext.CurrentSiteID;
        forumGroupObj.GroupBaseUrl     = baseUrl;

        // Additional settings
        forumGroupObj.GroupEnableCodeSnippet   = true;
        forumGroupObj.GroupEnableFontBold      = true;
        forumGroupObj.GroupEnableFontColor     = true;
        forumGroupObj.GroupEnableFontItalics   = true;
        forumGroupObj.GroupEnableFontStrike    = true;
        forumGroupObj.GroupEnableFontUnderline = true;
        forumGroupObj.GroupEnableQuote         = true;
        forumGroupObj.GroupEnableURL           = true;
        forumGroupObj.GroupEnableImage         = true;

        ForumGroupInfoProvider.SetForumGroupInfo(forumGroupObj);

        #endregion


        #region "Create forum"

        string codeName = "Default_department_" + departmentNode.NodeGUID;

        // Check if forum with given name already exists
        if (ForumInfoProvider.GetForumInfo(codeName, SiteContext.CurrentSite.SiteID) != null)
        {
            return;
        }

        ForumInfo forumObj = new ForumInfo();
        forumObj.ForumSiteID        = SiteContext.CurrentSiteID;
        forumObj.ForumIsLocked      = false;
        forumObj.ForumOpen          = true;
        forumObj.ForumDisplayEmails = false;
        forumObj.ForumDescription   = "Forum for " + departmentName + " department.";
        forumObj.ForumRequireEmail  = false;
        suffix = " forum";
        forumObj.ForumDisplayName     = TextHelper.LimitLength(departmentName, 200 - suffix.Length, "") + suffix;
        forumObj.ForumName            = codeName;
        forumObj.ForumGroupID         = forumGroupObj.GroupID;
        forumObj.ForumModerated       = false;
        forumObj.ForumAccess          = 40000;
        forumObj.ForumPosts           = 0;
        forumObj.ForumThreads         = 0;
        forumObj.ForumPostsAbsolute   = 0;
        forumObj.ForumThreadsAbsolute = 0;
        forumObj.ForumOrder           = 0;
        forumObj.ForumUseCAPTCHA      = false;
        forumObj.SetValue("ForumHTMLEditor", null);

        // Set security
        forumObj.AllowAccess       = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowAttachFiles  = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowMarkAsAnswer = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowPost         = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowReply        = SecurityAccessEnum.AuthorizedRoles;
        forumObj.AllowSubscribe    = SecurityAccessEnum.AuthorizedRoles;

        if (ForumInfoProvider.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Forums, ObjectActionEnum.Insert))
        {
            ForumInfoProvider.SetForumInfo(forumObj);
        }

        #endregion
    }
    /// <summary>
    /// PreRender action on which security settings are set.
    /// </summary>
    private void Page_PreRender(object sender, EventArgs e)
    {
        if ((Form == null) || !mDocumentSaved)
        {
            return;
        }

        TreeNode editedNode = Form.EditedObject as TreeNode;

        // Create or rebuild department content index
        CreateDepartmentContentSearchIndex(editedNode);

        if ((editedNode == null) || !editedNode.NodeIsACLOwner)
        {
            return;
        }

        ForumInfo        fi = ForumInfoProvider.GetForumInfo("Default_department_" + editedNode.NodeGUID, SiteContext.CurrentSiteID);
        MediaLibraryInfo mi = MediaLibraryInfoProvider.GetMediaLibraryInfo("Department_" + editedNode.NodeGUID, SiteContext.CurrentSiteName);

        // Check if forum of media library exists
        if ((fi == null) && (mi == null))
        {
            return;
        }

        // Get allowed roles ID
        int         aclID     = ValidationHelper.GetInteger(editedNode.GetValue("NodeACLID"), 0);
        DataSet     listRoles = AclItemInfoProvider.GetAllowedRoles(aclID, NodePermissionsEnum.Read, "RoleID");
        IList <int> roleIds   = null;


        if (!DataHelper.DataSourceIsEmpty(listRoles))
        {
            roleIds = DataHelper.GetIntegerValues(listRoles.Tables[0], "RoleID") as List <int>;
        }

        // Set permissions for forum
        if (fi != null)
        {
            // Get resource object
            ResourceInfo resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");

            // Get permissions IDs
            var forumPermissions = PermissionNameInfoProvider.GetPermissionNames()
                                   .Column("PermissionID")
                                   .WhereEquals("ResourceID", resForums.ResourceID)
                                   .WhereNotEquals("PermissionName", CMSAdminControl.PERMISSION_READ)
                                   .WhereNotEquals("PermissionName", CMSAdminControl.PERMISSION_MODIFY);

            // Delete old permissions apart attach file permission
            ForumRoleInfoProvider.DeleteAllRoles(new WhereCondition().WhereEquals("ForumID", fi.ForumID).WhereIn("PermissionID", forumPermissions));

            // Set forum permissions
            ForumRoleInfoProvider.SetPermissions(fi.ForumID, roleIds, forumPermissions.Select(p => p.PermissionId).ToArray());

            // Log staging task
            SynchronizationHelper.LogObjectChange(fi, TaskTypeEnum.UpdateObject);
        }

        // Set permissions for media library
        if (mi == null)
        {
            return;
        }

        // Get resource object
        ResourceInfo resMediaLibs = ResourceInfoProvider.GetResourceInfo("CMS.MediaLibrary");

        // Get permissions IDs
        var where = new WhereCondition()
                    .WhereEquals("ResourceID", resMediaLibs.ResourceID)
                    .And()
                    .Where(new WhereCondition()
                           .WhereEquals("PermissionName", "LibraryAccess")
                           .Or()
                           .WhereEquals("PermissionName", "FileCreate"));

        DataSet     dsMediaLibPerm         = PermissionNameInfoProvider.GetPermissionNames().Where(where).Column("PermissionID");
        IList <int> mediaLibPermissionsIds = null;

        if (!DataHelper.DataSourceIsEmpty(dsMediaLibPerm))
        {
            mediaLibPermissionsIds = DataHelper.GetIntegerValues(dsMediaLibPerm.Tables[0], "PermissionID");
        }

        var deleteWhere = new WhereCondition()
                          .WhereEquals("LibraryID", mi.LibraryID)
                          .WhereIn("PermissionID", mediaLibPermissionsIds);

        // Delete old permissions only for Create file and See library content permissions
        MediaLibraryRolePermissionInfoProvider.DeleteAllRoles(deleteWhere.ToString(true));

        MediaLibraryRolePermissionInfoProvider.SetPermissions(mi.LibraryID, roleIds, mediaLibPermissionsIds);

        // Log staging task;
        SynchronizationHelper.LogObjectChange(mi, TaskTypeEnum.UpdateObject);
    }
Exemplo n.º 19
0
    /// <summary>
    /// Reloads the data of the editing forum.
    /// </summary>
    /// <param name="forumObj">Forum object</param>
    private void ReloadData(ForumInfo forumObj)
    {
        // Set main properties
        this.chkForumOpen.Checked = forumObj.ForumOpen;
        this.chkForumLocked.Checked = forumObj.ForumIsLocked;
        this.txtForumDescription.Text = forumObj.ForumDescription;
        this.txtForumDisplayName.Text = forumObj.ForumDisplayName;
        this.txtForumName.Text = forumObj.ForumName;

        // Set other settings
        this.txtImageMaxSideSize.Text = forumObj.ForumImageMaxSideSize.ToString();
        this.txtIsAnswerLimit.Text = forumObj.ForumIsAnswerLimit.ToString();
        this.txtMaxAttachmentSize.Text = forumObj.ForumAttachmentMaxFileSize.ToString();
        this.txtBaseUrl.Text = forumObj.ForumBaseUrl;
        this.txtUnsubscriptionUrl.Text = forumObj.ForumUnsubscriptionUrl;

        // Check if is inherited value
        bool inheritAuthorDelete = (forumObj.GetValue("ForumAuthorDelete") == null);
        bool inheritAuthorEdit = (forumObj.GetValue("ForumAuthorEdit") == null);
        bool inheritImageMaxSideSize = (forumObj.GetValue("ForumImageMaxSideSize") == null);
        bool inheritMaxAttachmentSize = (forumObj.GetValue("ForumAttachmentMaxFileSize") == null);
        bool inheritIsAnswerLimit = (forumObj.GetValue("ForumIsAnswerLimit") == null);
        bool inheritType = (forumObj.GetValue("ForumType") == null);
        bool inheritUseHTML = (forumObj.GetValue("ForumHTMLEditor") == null);
        bool inheritDislayEmails = (forumObj.GetValue("ForumDisplayEmails") == null);
        bool inheritRequireEmail = (forumObj.GetValue("ForumRequireEmail") == null);
        bool inheritCaptcha = (forumObj.GetValue("ForumUseCAPTCHA") == null);
        bool inheritBaseUrl = (forumObj.GetValue("ForumBaseUrl") == null);
        bool inheritUnsubscriptionUrl = (forumObj.GetValue("ForumUnsubscriptionUrl") == null);
        bool inheritLogActivity = (forumObj.GetValue("ForumLogActivity") == null);
        // Discussion
        bool inheritDiscussion = (forumObj.GetValue("ForumDiscussionActions") == null);

        // Set properties
        this.chkInheritUseHTML.Checked = inheritUseHTML;
        this.chkInheritDisplayEmails.Checked = inheritDislayEmails;
        this.chkInheritRequireEmail.Checked = inheritRequireEmail;
        this.chkInheritCaptcha.Checked = inheritCaptcha;
        this.chkInheritAuthorDelete.Checked = inheritAuthorDelete;
        this.chkInheritAuthorEdit.Checked = inheritAuthorEdit;
        this.txtImageMaxSideSize.Enabled = !inheritImageMaxSideSize;
        this.chkInheritMaxSideSize.Checked = inheritImageMaxSideSize;
        this.txtIsAnswerLimit.Enabled = !inheritIsAnswerLimit;
        this.chkInheritIsAnswerLimit.Checked = inheritIsAnswerLimit;
        this.chkInheritType.Checked = inheritType;
        this.txtMaxAttachmentSize.Enabled = !inheritMaxAttachmentSize;
        this.chkInheritMaxAttachmentSize.Checked = inheritMaxAttachmentSize;
        this.txtBaseUrl.Enabled = !inheritBaseUrl;
        this.chkInheritBaseUrl.Checked = inheritBaseUrl;
        this.txtUnsubscriptionUrl.Enabled = !inheritUnsubscriptionUrl;
        this.chkInheritUnsubscribeUrl.Checked = inheritUnsubscriptionUrl;

        this.plcOnline.Visible = ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(CMSContext.CurrentSiteName);
        this.chkInheritLogActivity.Checked = inheritLogActivity;

        // Discussion
        this.chkInheritDiscussion.Checked = inheritDiscussion;

        // Create script for update inherit values
        this.ltrScript.Text += ScriptHelper.GetScript(
            "LoadSetting('" + chkForumRequireEmail.ClientID + "', " + (forumObj.ForumRequireEmail ? "true" : "false") + ", " + (inheritRequireEmail ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkCaptcha.ClientID + "', " + (forumObj.ForumUseCAPTCHA ? "true" : "false") + ", " + (inheritCaptcha ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkForumDisplayEmails.ClientID + "', " + (forumObj.ForumDisplayEmails ? "true" : "false") + ", " + (inheritDislayEmails ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkUseHTML.ClientID + "', " + (forumObj.ForumHTMLEditor ? "true" : "false") + ", " + (inheritUseHTML ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkAuthorDelete.ClientID + "', " + (forumObj.ForumAuthorDelete ? "true" : "false") + ", " + (inheritAuthorDelete ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkAuthorEdit.ClientID + "', " + (forumObj.ForumAuthorEdit ? "true" : "false") + ", " + (inheritAuthorEdit ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkLogActivity.ClientID + "', " + (forumObj.ForumLogActivity ? "true" : "false") + ", " + (inheritLogActivity ? "true" : "false") + ", 'chk');" +

            // Discussion
            "LoadSetting('" + radImageSimple.ClientID + "', " + (forumObj.ForumEnableImage ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radImageAdvanced.ClientID + "', " + (forumObj.ForumEnableAdvancedImage ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radImageNo.ClientID + "', " + (!(forumObj.ForumEnableAdvancedImage || forumObj.ForumEnableImage) ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlSimple.ClientID + "', " + (forumObj.ForumEnableURL ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlAdvanced.ClientID + "', " + (forumObj.ForumEnableAdvancedURL ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlNo.ClientID + "', " + (!(forumObj.ForumEnableAdvancedURL || forumObj.ForumEnableURL) ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + chkEnableQuote.ClientID + "', " + (forumObj.ForumEnableQuote ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableBold.ClientID + "', " + (forumObj.ForumEnableFontBold ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableItalic.ClientID + "', " + (forumObj.ForumEnableFontItalics ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableStrike.ClientID + "', " + (forumObj.ForumEnableFontStrike ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableUnderline.ClientID + "', " + (forumObj.ForumEnableFontUnderline ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableCode.ClientID + "', " + (forumObj.ForumEnableCodeSnippet ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableColor.ClientID + "', " + (forumObj.ForumEnableFontColor ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + radTypeAnswer.ClientID + "', " + (forumObj.ForumType == 2 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radTypeDiscussion.ClientID + "', " + (forumObj.ForumType == 1 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radTypeChoose.ClientID + "', " + (forumObj.ForumType == 0 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');");

        ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forumObj.ForumGroupID);

        this.chkInheritUnsubscribeUrl.Attributes.Add("onclick", "SetInheritance('" + txtUnsubscriptionUrl.ClientID + "', '" + fgi.GroupUnsubscriptionUrl.Replace("'","\\\'") + "', 'txt');");
        this.chkInheritBaseUrl.Attributes.Add("onclick", "SetInheritance('" + txtBaseUrl.ClientID + "', '" + fgi.GroupBaseUrl.Replace("'", "\\\'") + "', 'txt');");

        // Settings inheritance
        this.chkInheritUseHTML.Attributes.Add("onclick", "SetInheritance('" + chkUseHTML.ClientID + "', '" + fgi.GroupHTMLEditor.ToString().ToLower() + "', 'chk');");
        this.chkInheritCaptcha.Attributes.Add("onclick", "SetInheritance('" + chkCaptcha.ClientID + "', '" + fgi.GroupUseCAPTCHA.ToString().ToLower() + "', 'chk');");
        this.chkInheritRequireEmail.Attributes.Add("onclick", "SetInheritance('" + chkForumRequireEmail.ClientID + "', '" + fgi.GroupRequireEmail.ToString().ToLower() + "', 'chk');");
        this.chkInheritDisplayEmails.Attributes.Add("onclick", "SetInheritance('" + chkForumDisplayEmails.ClientID + "', '" + fgi.GroupDisplayEmails.ToString().ToLower() + "', 'chk');");
        this.chkInheritAuthorDelete.Attributes.Add("onclick", "SetInheritance('" + chkAuthorDelete.ClientID + "', '" + fgi.GroupAuthorDelete.ToString().ToLower() + "', 'chk');");
        this.chkInheritAuthorEdit.Attributes.Add("onclick", "SetInheritance('" + chkAuthorEdit.ClientID + "', '" + fgi.GroupAuthorEdit.ToString().ToLower() + "', 'chk');");
        this.chkInheritIsAnswerLimit.Attributes.Add("onclick", "SetInheritance('" + txtIsAnswerLimit.ClientID + "', '" + fgi.GroupIsAnswerLimit.ToString().Replace("'", "\\\'") + "', 'txt');");
        this.chkInheritMaxSideSize.Attributes.Add("onclick", "SetInheritance('" + txtImageMaxSideSize.ClientID + "', '" + fgi.GroupImageMaxSideSize.ToString().Replace("'", "\\\'") + "', 'txt');");
        this.chkInheritType.Attributes.Add("onclick", "SetInheritance('" + radTypeAnswer.ClientID + "', '" + (fgi.GroupType == 2 ? "true" : "false") + "', 'rad');" +
            "SetInheritance('" + radTypeDiscussion.ClientID + "', '" + (fgi.GroupType == 1 ? "true" : "false") + "', 'rad');" +
            "SetInheritance('" + radTypeChoose.ClientID + "', '" + (fgi.GroupType == 0 ? "true" : "false") + "', 'rad');");
        this.chkInheritMaxAttachmentSize.Attributes.Add("onclick", "SetInheritance('" + txtMaxAttachmentSize.ClientID + "','" + fgi.GroupAttachmentMaxFileSize.ToString().Replace("'", "\\\'") + "', 'txt');");
        this.chkInheritLogActivity.Attributes.Add("onclick", "SetInheritance('" + chkLogActivity.ClientID + "','" + fgi.GroupLogActivity.ToString().ToLower() + "', 'chk');");

        // Discussion
        string chkList = "'" + radImageSimple.ClientID + ";" + chkEnableBold.ClientID + ";" + chkEnableCode.ClientID + ";" +
                               chkEnableColor.ClientID + ";" + radUrlSimple.ClientID + ";" + chkEnableItalic.ClientID + ";" +
                               radImageAdvanced.ClientID + ";" + radUrlAdvanced.ClientID + ";" + chkEnableQuote.ClientID + ";" +
                               chkEnableStrike.ClientID + ";" + chkEnableUnderline.ClientID + ";" + radImageNo.ClientID + ";" + radUrlNo.ClientID + "'";
        string chkListValues = "'" + fgi.GroupEnableImage.ToString() + ";" + fgi.GroupEnableFontBold.ToString() + ";" + fgi.GroupEnableCodeSnippet.ToString() + ";" +
                               fgi.GroupEnableFontColor.ToString() + ";" + fgi.GroupEnableURL.ToString() + ";" + fgi.GroupEnableFontItalics.ToString() + ";" +
                               fgi.GroupEnableAdvancedImage.ToString() + ";" + fgi.GroupEnableAdvancedURL.ToString() + ";" + fgi.GroupEnableQuote.ToString() + ";" +
                               fgi.GroupEnableFontStrike.ToString() + ";" + fgi.GroupEnableFontUnderline.ToString() + ";" +
                               !(fgi.GroupEnableAdvancedImage || fgi.GroupEnableImage) + ";" + !(fgi.GroupEnableAdvancedURL || fgi.GroupEnableURL) + "'";
        this.chkInheritDiscussion.Attributes.Add("onclick", "SetInheritance(" + chkList + ", " + chkListValues.ToLower() + ", 'chk');");
    }
    /// <summary>
    /// Creates group forum.
    /// </summary>
    /// <param name="group">Particular group info object</param>
    private void CreateGroupForum(GroupInfo group)
    {
        #region "Create forum group"

        // Get forum group code name
        string forumGroupCodeName = "Forums_group_" + group.GroupGUID;

        // Check if forum group with given name already exists
        if (ForumGroupInfoProvider.GetForumGroupInfo(forumGroupCodeName, SiteContext.CurrentSiteID) != null)
        {
            return;
        }

        // Create forum base URL
        string baseUrl = null;
        TreeNode groupDocument = TreeProvider.SelectSingleNode(group.GroupNodeGUID, DocumentContext.CurrentDocumentCulture.CultureCode, SiteContext.CurrentSiteName);
        if (groupDocument != null)
        {
            baseUrl = DocumentURLProvider.GetUrl(groupDocument.NodeAliasPath + "/" + FORUM_DOCUMENT_ALIAS);
        }

        ForumGroupInfo forumGroupObj = new ForumGroupInfo();
        const string suffix = " forums";
        forumGroupObj.GroupDisplayName = TextHelper.LimitLength(group.GroupDisplayName, 200 - suffix.Length, string.Empty) + suffix;
        forumGroupObj.GroupName = forumGroupCodeName;
        forumGroupObj.GroupOrder = 0;
        forumGroupObj.GroupEnableQuote = true;
        forumGroupObj.GroupGroupID = group.GroupID;
        forumGroupObj.GroupSiteID = SiteContext.CurrentSiteID;
        forumGroupObj.GroupBaseUrl = baseUrl;

        // Additional settings
        forumGroupObj.GroupEnableCodeSnippet = true;
        forumGroupObj.GroupEnableFontBold = true;
        forumGroupObj.GroupEnableFontColor = true;
        forumGroupObj.GroupEnableFontItalics = true;
        forumGroupObj.GroupEnableFontStrike = true;
        forumGroupObj.GroupEnableFontUnderline = true;
        forumGroupObj.GroupEnableQuote = true;
        forumGroupObj.GroupEnableURL = true;
        forumGroupObj.GroupEnableImage = true;

        // Set forum group info
        ForumGroupInfoProvider.SetForumGroupInfo(forumGroupObj);

        #endregion

        #region "Create forum"

        string codeName = "General_discussion_group_" + group.GroupGUID;

        // Check if forum with given name already exists
        if (ForumInfoProvider.GetForumInfo(codeName, SiteContext.CurrentSiteID, group.GroupID) != null)
        {
            return;
        }

        // Create new forum object
        ForumInfo forumObj = new ForumInfo();
        forumObj.ForumSiteID = SiteContext.CurrentSiteID;
        forumObj.ForumIsLocked = false;
        forumObj.ForumOpen = true;
        forumObj.ForumDisplayEmails = false;
        forumObj.ForumRequireEmail = false;
        forumObj.ForumDisplayName = "General discussion";
        forumObj.ForumName = codeName;
        forumObj.ForumGroupID = forumGroupObj.GroupID;
        forumObj.ForumModerated = false;
        forumObj.ForumAccess = 40000;
        forumObj.ForumPosts = 0;
        forumObj.ForumThreads = 0;
        forumObj.ForumPostsAbsolute = 0;
        forumObj.ForumThreadsAbsolute = 0;
        forumObj.ForumOrder = 0;
        forumObj.ForumUseCAPTCHA = false;
        forumObj.SetValue("ForumHTMLEditor", null);

        // Set security
        forumObj.AllowAccess = SecurityAccessEnum.GroupMembers;
        forumObj.AllowAttachFiles = SecurityAccessEnum.GroupMembers;
        forumObj.AllowMarkAsAnswer = SecurityAccessEnum.GroupMembers;
        forumObj.AllowPost = SecurityAccessEnum.GroupMembers;
        forumObj.AllowReply = SecurityAccessEnum.GroupMembers;
        forumObj.AllowSubscribe = SecurityAccessEnum.GroupMembers;

        if (ForumInfoProvider.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Forums, ObjectActionEnum.Insert))
        {
            ForumInfoProvider.SetForumInfo(forumObj);
        }

        #endregion
    }
Exemplo n.º 21
0
    /// <summary>
    /// Generates the permission matrix for the current forum.
    /// </summary>
    private void CreateMatrix()
    {
        // Get forum resource info
        if (resForums == null)
        {
            resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");
        }

        // Get forum object
        if ((forum == null) && (ForumID > 0))
        {
            forum = ForumInfoProvider.GetForumInfo(ForumID);
        }

        if ((resForums != null) && (forum != null))
        {
            // Get permission matrix for roles of the current site/group
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Get permissions for the current forum resource
            DataSet permissions = PermissionNameInfoProvider.GetResourcePermissions(resForums.ResourceId);
            if (DataHelper.DataSourceIsEmpty(permissions))
            {
                ShowInformation(GetString("general.emptymatrix"));
            }
            else
            {
                TableRow headerRow = new TableRow();
                headerRow.CssClass = "UniGridHead";
                TableCell       newCell       = new TableCell();
                TableHeaderCell newHeaderCell = new TableHeaderCell();
                newHeaderCell.Text = "&nbsp;";
                newHeaderCell.Attributes["style"] = "width:200px;";
                headerRow.Cells.Add(newHeaderCell);

                foreach (string permission in allowedPermissions)
                {
                    DataRow[] drArray = permissions.Tables[0].DefaultView.Table.Select("PermissionName = '" + permission + "'");
                    if ((drArray != null) && (drArray.Length > 0))
                    {
                        DataRow dr = drArray[0];
                        newHeaderCell = new TableHeaderCell();
                        newHeaderCell.Attributes["style"] = "text-align:center;white-space:nowrap;";
                        newHeaderCell.Text            = dr["PermissionDisplayName"].ToString();
                        newHeaderCell.ToolTip         = dr["PermissionDescription"].ToString();
                        newHeaderCell.HorizontalAlign = HorizontalAlign.Center;
                        headerRow.Cells.Add(newHeaderCell);
                    }
                    else
                    {
                        throw new Exception("[Security matrix] Column '" + permission + "' cannot be found.");
                    }
                }
                newHeaderCell      = new TableHeaderCell();
                newHeaderCell.Text = "&nbsp;";
                headerRow.Cells.Add(newHeaderCell);

                tblMatrix.Rows.Add(headerRow);

                // Render forum access permissions
                object[,] accessNames = new object[5, 2];
                accessNames[0, 0]     = GetString("security.nobody");
                accessNames[0, 1]     = SecurityAccessEnum.Nobody;
                accessNames[1, 0]     = GetString("security.allusers");
                accessNames[1, 1]     = SecurityAccessEnum.AllUsers;
                accessNames[2, 0]     = GetString("security.authenticated");
                accessNames[2, 1]     = SecurityAccessEnum.AuthenticatedUsers;
                accessNames[3, 0]     = GetString("security.groupmembers");
                accessNames[3, 1]     = SecurityAccessEnum.GroupMembers;
                accessNames[4, 0]     = GetString("security.authorizedroles");
                accessNames[4, 1]     = SecurityAccessEnum.AuthorizedRoles;

                TableRow newRow   = null;
                int      rowIndex = 0;
                for (int access = 0; access <= accessNames.GetUpperBound(0); access++)
                {
                    SecurityAccessEnum currentAccess = ((SecurityAccessEnum)accessNames[access, 1]);

                    // If the security isn't displayed as part of group section
                    if ((currentAccess == SecurityAccessEnum.GroupMembers) && (!IsGroupForum))
                    {
                        // Do not render this access item
                    }
                    else
                    {
                        // Generate cell holding access item name
                        newRow           = new TableRow();
                        newRow.CssClass  = ((rowIndex % 2 == 0) ? "EvenRow" : "OddRow");
                        newCell          = new TableCell();
                        newCell.Text     = accessNames[access, 0].ToString();
                        newCell.Wrap     = false;
                        newCell.CssClass = "MatrixHeader";
                        newCell.Width    = new Unit(28, UnitType.Percentage);
                        newRow.Cells.Add(newCell);
                        rowIndex++;

                        // Render the permissions access items
                        bool isAllowed       = false;
                        bool isDisabled      = true;
                        int  permissionIndex = 0;
                        for (int permission = 0; permission < (tblMatrix.Rows[0].Cells.Count - 2); permission++)
                        {
                            newCell = new TableCell();

                            // Check if the currently processed access is applied for permission
                            isAllowed  = CheckPermissionAccess(currentAccess, permission, tblMatrix.Rows[0].Cells[permission + 1].Text);
                            isDisabled = ((currentAccess == SecurityAccessEnum.AllUsers) && (permission == 1)) || (!Enable);

                            // Disable column in roles grid if needed
                            if ((currentAccess == SecurityAccessEnum.AuthorizedRoles) && !isAllowed)
                            {
                                gridMatrix.DisableColumn(permissionIndex);
                            }

                            // Insert the radio button for the current permission
                            string permissionText = tblMatrix.Rows[0].Cells[permission + 1].Text;
                            string elemId         = ClientID + "_" + permission + "_" + access;
                            newCell.Text = "<label style=\"display:none;\" for=\"" + elemId + "\">" + permissionText + "</label><input type=\"radio\" id=\"" + elemId + "\" name=\"" + permissionText + "\" onclick=\"" +
                                           ControlsHelper.GetPostBackEventReference(this, permission.ToString() + ";" + Convert.ToInt32(currentAccess).ToString()) + "\" " +
                                           ((isAllowed) ? "checked = \"checked\"" : "") + ((isDisabled) ? " disabled=\"disabled\"" : "") + "/>";

                            newCell.Wrap            = false;
                            newCell.Width           = new Unit(12, UnitType.Percentage);
                            newCell.HorizontalAlign = HorizontalAlign.Center;
                            newRow.Cells.Add(newCell);
                            permissionIndex++;
                        }

                        newCell      = new TableCell();
                        newCell.Text = "&nbsp;";
                        newRow.Cells.Add(newCell);

                        // Add the access row to the table
                        tblMatrix.Rows.Add(newRow);
                    }
                }

                // Check if forum has some roles assigned
                mNoRolesAvailable = !gridMatrix.HasData;

                // Get permission matrix for current forum resource
                if (!mNoRolesAvailable)
                {
                    // Security - Role separator
                    newRow       = new TableRow();
                    newCell      = new TableCell();
                    newCell.Text = "&nbsp;";
                    newCell.Attributes.Add("colspan", Convert.ToString(tblMatrix.Rows[0].Cells.Count));
                    newRow.Controls.Add(newCell);
                    tblMatrix.Rows.Add(newRow);

                    // Security - Role separator text
                    newRow           = new TableRow();
                    newCell          = new TableCell();
                    newCell.CssClass = "MatrixLabel";
                    newCell.Text     = GetString("SecurityMatrix.RolesAvailability");
                    newCell.Attributes.Add("colspan", Convert.ToString(tblMatrix.Rows[0].Cells.Count));
                    newRow.Controls.Add(newCell);
                    tblMatrix.Rows.Add(newRow);
                }
            }
        }
    }
Exemplo n.º 22
0
    /// <summary>
    /// Logs "post" activity.
    /// </summary>
    /// <param name="bci">Forum subscription</param>
    /// <param name="fi">Forum info</param>
    private void LogPostActivity(ForumPostInfo fp, ForumInfo fi)
    {
        string siteName = CMSContext.CurrentSiteName;
        if ((CMSContext.ViewMode != ViewModeEnum.LiveSite) || (fp == null) || (fi == null) || !fi.ForumLogActivity
            || !ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(siteName)
            || !ActivitySettingsHelper.ActivitiesEnabledForThisUser(CMSContext.CurrentUser) || !ActivitySettingsHelper.ForumPostsEnabled(siteName))
        {
            return;
        }

        int contactId = ModuleCommands.OnlineMarketingGetCurrentContactID();
        Dictionary<string, object> contactData = new Dictionary<string, object>();
        contactData.Add("ContactEmail", fp.PostUserMail);
        contactData.Add("ContactLastName", fp.PostUserName);
        ModuleCommands.OnlineMarketingUpdateContactFromExternalSource(contactData, false, contactId);

        var data = new ActivityData()
        {
            ContactID = contactId,
            SiteID = CMSContext.CurrentSiteID,
            Type = PredefinedActivityType.FORUM_POST,
            TitleData = fi.ForumName,
            ItemID = fi.ForumID,
            ItemDetailID = fp.PostId,
            URL = URLHelper.CurrentRelativePath,
            NodeID = CMSContext.CurrentDocument.NodeID,
            Culture = CMSContext.CurrentDocument.DocumentCulture,
            Campaign = CMSContext.Campaign
        };
        ActivityLogProvider.LogActivity(data);
    }
Exemplo n.º 23
0
        public void LoadCurrentForumInfo(int fid)
        {
            #region 加载相关信息

            if (fid > 0)
            {
                forumInfo = Forums.GetForumInfo(fid);
            }
            else
            {
                return;
            }

            if (forumInfo.Layer > 0)
            {
                tabPage2.Visible = true;
                tabPage6.Visible = true;
            }
            else
            {
                //删除掉"高级设置"属性页
                TabControl1.Items.Remove(tabPage2);
                tabPage2.Visible = false;

                //删除掉"特殊用户"属性页
                TabControl1.Items.Remove(tabPage4);
                tabPage4.Visible = false;

                //删除掉"主题分类"属性页
                TabControl1.Items.Remove(tabPage5);
                tabPage5.Visible = false;

                //删除掉"统计信息"属性页
                TabControl1.Items.Remove(tabPage6);
                tabPage6.Visible      = false;
                templatestyle.Visible = false;
            }

            forumname.Text    = forumInfo.Name.Trim();
            name.Text         = forumInfo.Name.Trim();
            displayorder.Text = forumInfo.Displayorder.ToString();

            status.SelectedValue = forumInfo.Status.ToString();

            if (forumInfo.Colcount == 1)
            {
                showcolnum.Attributes.Add("style", "display:none");
                colcount.SelectedIndex = 0;
            }
            else
            {
                showcolnum.Attributes.Add("style", "display:block");
                colcount.SelectedIndex = 1;
            }
            colcount.Attributes.Add("onclick", "javascript:document.getElementById('" + showcolnum.ClientID + "').style.display= (document.getElementById('TabControl1_tabPage1_colcount_0').checked ? 'none' : 'block');");
            colcountnumber.Text = forumInfo.Colcount.ToString();

            templateid.SelectedValue = forumInfo.Templateid.ToString();

            forumsstatic.Text = string.Format("主题总数:{0}<br />帖子总数:{1}<br />今日回帖数总数:{2}<br />最后提交日期:{3}",
                                              forumInfo.Topics.ToString(),
                                              forumInfo.Posts.ToString(),
                                              forumInfo.Todayposts.ToString(),
                                              forumInfo.Lastpost.ToString());

            ViewState["forumsstatic"] = forumsstatic.Text;

            if (forumInfo.Allowsmilies == 1)
            {
                setting.Items[0].Selected = true;
            }
            if (forumInfo.Allowrss == 1)
            {
                setting.Items[1].Selected = true;
            }
            if (forumInfo.Allowbbcode == 1)
            {
                setting.Items[2].Selected = true;
            }
            if (forumInfo.Allowimgcode == 1)
            {
                setting.Items[3].Selected = true;
            }
            if (forumInfo.Recyclebin == 1)
            {
                setting.Items[4].Selected = true;
            }
            if (forumInfo.Modnewposts == 1)
            {
                setting.Items[5].Selected = true;
            }
            if (forumInfo.Disablewatermark == 1)
            {
                setting.Items[6].Selected = true;
            }
            if (forumInfo.Inheritedmod == 1)
            {
                setting.Items[7].Selected = true;
            }
            if (forumInfo.Allowthumbnail == 1)
            {
                setting.Items[8].Selected = true;
            }
            if (forumInfo.Allowtag == 1)
            {
                setting.Items[9].Selected = true;
            }
            allowspecialonly.SelectedValue = forumInfo.Allowspecialonly.ToString();

            if (forumInfo.Autoclose == 0)
            {
                showclose.Attributes.Add("style", "display:none");
                autocloseoption.SelectedIndex = 0;
            }
            else
            {
                autocloseoption.SelectedIndex = 1;
            }
            autocloseoption.Attributes.Add("onclick", "javascript:document.getElementById('" + showclose.ClientID + "').style.display= (document.getElementById('TabControl1_tabPage2_autocloseoption_0').checked ? 'none' : 'block');");
            autocloseday.Text = forumInfo.Autoclose.ToString();

            //提取高级信息
            description.Text       = forumInfo.Description.Trim();
            password.Text          = forumInfo.Password.Trim();
            icon.Text              = forumInfo.Icon.Trim();
            redirect.Text          = forumInfo.Redirect.Trim();
            moderators.Text        = forumInfo.Moderators.Trim();
            inheritmoderators.Text = Users.GetModerators(fid);
            rules.Text             = forumInfo.Rules.Trim();
            topictypes.Text        = forumInfo.Topictypes.Trim();

            DataTable dt = UserGroups.GetUserGroupForDataTable();
            int       i  = 1;
            foreach (DataRow dr in dt.Rows)
            {
                HtmlTableRow  tr = new HtmlTableRow();
                HtmlTableCell td = new HtmlTableCell("td");
                if (i % 2 == 1)
                {
                    td.Attributes.Add("class", "td_alternating_item1");
                }
                else
                {
                    td.Attributes.Add("class", "td_alternating_item2");
                }
                td.Controls.Add(new LiteralControl("<input type='checkbox' id='r" + i + "' onclick='selectRow(" + i + ",this.checked)'>"));
                tr.Cells.Add(td);
                td = new HtmlTableCell("td");
                if (i % 2 == 1)
                {
                    td.Attributes.Add("class", "td_alternating_item1");
                }
                else
                {
                    td.Attributes.Add("class", "td_alternating_item2");
                }
                td.Controls.Add(new LiteralControl("<label for='r" + i + "'>" + dr["grouptitle"].ToString() + "</lable>"));
                tr.Cells.Add(td);
                tr.Cells.Add(GetTD("viewperm", forumInfo.Viewperm.Trim(), dr["groupid"].ToString(), i));
                tr.Cells.Add(GetTD("postperm", forumInfo.Postperm.Trim(), dr["groupid"].ToString(), i));
                tr.Cells.Add(GetTD("replyperm", forumInfo.Replyperm.Trim(), dr["groupid"].ToString(), i));
                tr.Cells.Add(GetTD("getattachperm", forumInfo.Getattachperm.Trim(), dr["groupid"].ToString(), i));
                tr.Cells.Add(GetTD("postattachperm", forumInfo.Postattachperm.Trim(), dr["groupid"].ToString(), i));
                powerset.Rows.Add(tr);
                i++;
            }


            dt = Attachments.GetAttachmentType();
            attachextensions.SetSelectByID(forumInfo.Attachextensions.Trim());

            if (fid > 0)
            {
                forumInfo = Forums.GetForumInfo(fid);
            }
            else
            {
                return;
            }
            applytopictype.SelectedValue  = forumInfo.Applytopictype.ToString();
            postbytopictype.SelectedValue = forumInfo.Postbytopictype.ToString();
            viewbytopictype.SelectedValue = forumInfo.Viewbytopictype.ToString();
            topictypeprefix.SelectedValue = forumInfo.Topictypeprefix.ToString();


            #endregion
        }
    protected void Page_Load(object sender, EventArgs e)
    {
        EnsureEditedObject();

        // Show back link if is opened from listing
        if (!String.IsNullOrEmpty(ListingPost) && (PostInfo != null))
        {
            mListingParameter = "&listingpost=" + HTMLHelper.HTMLEncode(ListingPost);
        }

        mThreadMove            = Page.LoadUserControl("~/CMSModules/Forums/Controls/ThreadMove.ascx") as ForumViewer;
        mThreadMove.ID         = "ctrlThreadMove";
        mThreadMove.IsLiveSite = IsLiveSite;
        plcThreadMove.Controls.Add(mThreadMove);

        if (!Visible)
        {
            EnableViewState = false;
        }

        PostEdit1.OnCancelClick      += ForumNewPost1_OnCancelClick;
        PostEdit1.OnCheckPermissions += PostEdit1_OnCheckPermissions;
        PostEdit1.IsLiveSite          = false;

        if (Reply != 0)
        {
            NewThreadTitle.TitleText = GetString("ForumPost_View.PostTitleText");

            pnlBody.Visible = false;

            PanelNewThread.Visible  = true;
            PostEdit1.ReplyToPostID = PostID;
            PostEdit1.ForumID       = ForumID;
            PostEdit1.OnInsertPost += ForumNewPost1_OnInsertPost;
        }
        else
        {
            //New thread
            if (NewForumPostIsBeingCreated)
            {
                NewThreadTitle.TitleText = GetString("ForumPost_View.NewThreadHeaderCaption");

                pnlBody.Visible = false;

                PanelNewThread.Visible  = true;
                PostEdit1.ForumID       = ForumID;
                PostEdit1.OnInsertPost += ForumNewPost1_OnInsertPost;
            }
            else
            {
                // ReSharper disable once PossibleNullReferenceException - edited object is ensured => no null reference is possible
                ForumInfo fi = ForumInfoProvider.GetForumInfo(PostInfo.PostForumID);
                if (fi != null)
                {
                    ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ForumScripts",
                                                           ScriptHelper.GetScript(" function ReplyToPost(postId)\n" +
                                                                                  "{    if (postId != 0){\n" +
                                                                                  "location.href='ForumPost_View.aspx?postid=' + postId + '&reply=1&forumId=" + fi.ForumID + mListingParameter + "' }}\n"));
                }

                InitializeMenu();

                ltlScript.Text += ScriptHelper.GetScript(
                    "function DeletePost(postId) { if (confirm(" + ScriptHelper.GetString(GetString("ForumPost_View.DeleteConfirmation")) + ")) { " + Page.ClientScript.GetPostBackEventReference(btnDelete, null) + "; } } \n" +
                    "function ApprovePost(postId) { " + Page.ClientScript.GetPostBackEventReference(btnApprove, null) + "; } \n" +
                    "function ApproveSubTree(postId) { " + Page.ClientScript.GetPostBackEventReference(btnApproveSubTree, null) + "; } \n" +
                    "function RejectSubTree(postId) { " + Page.ClientScript.GetPostBackEventReference(btnRejectSubTree, null) + "; } \n" +
                    "function StickThread(postId) { " + Page.ClientScript.GetPostBackEventReference(btnStickThread, null) + "; } \n" +
                    "function SplitThread(postId) { " + Page.ClientScript.GetPostBackEventReference(btnSplitThread, null) + "; } \n" +
                    "function LockThread(postId) { " + Page.ClientScript.GetPostBackEventReference(btnLockThread, null) + "; } \n"
                    );
                ForumPost1.ForumID     = ForumID;
                ForumPost1.PostID      = PostID;
                ForumPost1.DisplayOnly = true;


                if (PostInfo.PostAttachmentCount > 0)
                {
                    ReloadAttachmentData(PostID);
                }
            }
        }
    }
Exemplo n.º 25
0
    /// <summary>
    /// Initialize resources, holders, controls etc.
    /// </summary>
    protected void Initialize()
    {
        #region "Captcha"

        // Hide captcha when not needed
        if (!ForumContext.CurrentForum.ForumUseCAPTCHA || (ForumContext.CurrentState == ForumStateEnum.EditPost))
        {
            plcCaptcha.Visible = false;
        }

        #endregion


        #region "Settings of HTML editor"

        // Set HTML editor properties
        htmlTemplateBody.AutoDetectLanguage    = false;
        htmlTemplateBody.DefaultLanguage       = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;
        htmlTemplateBody.EditorAreaCSS         = "";
        htmlTemplateBody.ToolbarSet            = "Forum";
        htmlTemplateBody.DisableObjectResizing = true;     // Disable image resizing
        htmlTemplateBody.RemovePlugins.Add("contextmenu"); // Disable context menu
        htmlTemplateBody.IsLiveSite = IsLiveSite;
        htmlTemplateBody.MediaDialogConfig.UseFullURL = true;
        htmlTemplateBody.LinkDialogConfig.UseFullURL  = true;

        #endregion


        #region "Resource strings"

        // Resources
        rfvSubject.ErrorMessage  = GetString("Forums_WebInterface_ForumNewPost.subjectErrorMsg");
        lblText.Text             = GetString("Forums_WebInterface_ForumNewPost.text");
        rfvText.ErrorMessage     = GetString("Forums_WebInterface_ForumNewPost.textErrorMsg");
        rfvUserName.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.usernameErrorMsg");
        btnOk.Text         = GetString("general.ok");
        btnCancel.Text     = GetString("general.cancel");
        btnPreview.Text    = GetString("Forums_WebInterface_ForumNewPost.Preview");
        lblSubscribe.Text  = GetString("Forums_WebInterface_ForumNewPost.Subscription");
        lblSignature.Text  = GetString("Forums_WebInterface_ForumNewPost.Signature");
        lblCaptcha.Text    = GetString("Forums_WebInterface_ForumNewPost.captcha");
        lblAttachFile.Text = GetString("For.NewPost.Attach");
        lblNickName.Text   = GetString("Forums_WebInterface_ForumNewPost.NickName");

        // WAI validation
        lblCaptcha.AssociatedControlClientID = SecurityCode1.InputClientID;

        #endregion


        #region "Controls visibility"

        ForumInfo fi = ForumContext.CurrentForum;

        // Hide or display html editor/ text area
        if (fi.ForumHTMLEditor)
        {
            ucBBEditor.Visible = false;
            rfvText.Enabled    = false;

            // Define customizable shortcuts
            Hashtable keystrokes = new Hashtable()
            {
                { "link", "CKEDITOR.CTRL + 76 /*L*/" },
                { "bold", "CKEDITOR.CTRL + 66 /*B*/" },
                { "italic", "CKEDITOR.CTRL + 73 /*I*/" },
                { "underline", "CKEDITOR.CTRL + 85 /*U*/" }
            };

            if (!fi.ForumEnableURL)
            {
                htmlTemplateBody.RemoveButtons.Add("InsertUrl");
                if (!fi.ForumEnableAdvancedURL)
                {
                    // Remove the keyborad shortcut for the link insertion
                    keystrokes.Remove("link");
                }
            }
            if (!fi.ForumEnableAdvancedURL)
            {
                htmlTemplateBody.RemoveButtons.Add("InsertLink");
            }
            if (!fi.ForumEnableImage)
            {
                htmlTemplateBody.RemoveButtons.Add("InsertImage");
            }
            if (!fi.ForumEnableAdvancedImage)
            {
                htmlTemplateBody.RemoveButtons.Add("InsertImageOrMedia");
            }
            if (!fi.ForumEnableQuote)
            {
                htmlTemplateBody.RemoveButtons.Add("InsertQuote");
            }
            if (!fi.ForumEnableFontBold)
            {
                htmlTemplateBody.RemoveButtons.Add("Bold");
                keystrokes.Remove("bold");
            }
            if (!fi.ForumEnableFontItalics)
            {
                htmlTemplateBody.RemoveButtons.Add("Italic");
                keystrokes.Remove("italic");
            }
            if (!fi.ForumEnableFontUnderline)
            {
                htmlTemplateBody.RemoveButtons.Add("Underline");
                keystrokes.Remove("underline");
            }
            if (!fi.ForumEnableFontStrike)
            {
                htmlTemplateBody.RemoveButtons.Add("Strike");
            }
            if (!fi.ForumEnableFontColor)
            {
                htmlTemplateBody.RemoveButtons.Add("TextColor");
                htmlTemplateBody.RemoveButtons.Add("BGColor");
            }

            // Generate keystrokes string for the CK Editor
            StringBuilder sb     = new StringBuilder("[ [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ], [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ], [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ], [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ], [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ], [ CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ], [ CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ]");
            string        format = ", [ {0}, '{1}' ]";

            foreach (DictionaryEntry entry in keystrokes)
            {
                sb.Append(String.Format(format, entry.Value, entry.Key));
            }

            sb.Append("]");
            htmlTemplateBody.Keystrokes = sb.ToString();
        }
        else
        {
            ucBBEditor.IsLiveSite        = IsLiveSite;
            ucBBEditor.ShowImage         = fi.ForumEnableImage;
            ucBBEditor.ShowQuote         = fi.ForumEnableQuote;
            ucBBEditor.ShowURL           = fi.ForumEnableURL;
            ucBBEditor.ShowBold          = fi.ForumEnableFontBold;
            ucBBEditor.ShowItalic        = fi.ForumEnableFontItalics;
            ucBBEditor.ShowUnderline     = fi.ForumEnableFontUnderline;
            ucBBEditor.ShowStrike        = fi.ForumEnableFontStrike;
            ucBBEditor.ShowColor         = fi.ForumEnableFontColor;
            ucBBEditor.ShowCode          = fi.ForumEnableCodeSnippet;
            ucBBEditor.ShowAdvancedImage = fi.ForumEnableAdvancedImage;
            ucBBEditor.ShowAdvancedURL   = fi.ForumEnableAdvancedURL;
            htmlTemplateBody.Visible     = false;
        }

        if ((fi.ForumModerated) && (!ForumContext.UserIsModerator(fi.ForumID, CommunityGroupID)))
        {
            ShowInformation(GetString("forums.requiremoderation"));
        }

        bool userCanModerate = fi.ForumModerated && ForumContext.UserIsModerator(fi.ForumID, CommunityGroupID);
        if ((MembershipContext.AuthenticatedUser.IsPublic()) || (!ForumInfoProvider.IsAuthorizedPerForum(fi.ForumID, fi.ForumGroupID, "AttachFiles", fi.AllowAttachFiles, MembershipContext.AuthenticatedUser) && !userCanModerate))
        {
            plcAttachFile.Visible = false;
        }

        // If user can choose thread type and this is not reply, show the options
        if ((fi.ForumType == 0) && (ForumContext.CurrentReplyThread == null))
        {
            // Only thread can be set
            if ((ForumContext.CurrentState != ForumStateEnum.EditPost) || (ForumContext.CurrentPost.PostLevel == 0))
            {
                plcThreadType.Visible = true;
            }
        }

        // Hide or display subscription checkbox with dependence
        // on allow subscription property value and security
        if ((!AllowSubscription) || (!ForumInfoProvider.IsAuthorizedPerForum(fi.ForumID, fi.ForumGroupID, "Subscribe", fi.AllowSubscribe, MembershipContext.AuthenticatedUser)))
        {
            SubscribeHolder.Visible = false;
        }

        // Display signature if is allowed
        if (!AllowSignature)
        {
            plcSignature.Visible = false;
        }

        // Display username textbox if is change name allowed or label with user name
        if (fi.ForumAllowChangeName || MembershipContext.AuthenticatedUser.IsPublic() || ((ForumContext.CurrentForum != null) && (ForumContext.UserIsModerator(ForumContext.CurrentForum.ForumID, ForumContext.CommunityGroupID))))
        {
            if (!RequestHelper.IsPostBack())
            {
                // Do not show 'public' for unauthenticated user
                if (!MembershipContext.AuthenticatedUser.IsPublic())
                {
                    txtUserName.Text = UserName;
                }
            }
            plcNickName.Visible = false;
        }
        else
        {
            if (ForumContext.CurrentMode != ForumMode.Edit)
            {
                lblNickNameValue.Text = HTMLHelper.HTMLEncode(UserName);
            }
            else
            {
                lblNickNameValue.Text = HTMLHelper.HTMLEncode(ForumContext.CurrentPost.PostUserName);
            }
            plcUserName.Visible = false;
        }

        // Prefill user email and reset the security code
        if (!RequestHelper.IsPostBack())
        {
            txtEmail.Text = MembershipContext.AuthenticatedUser.Email;
        }

        if (ForumContext.CurrentReplyThread != null)
        {
            string replyPrefix = GetString("forums.replyprefix");
            if (!ForumContext.CurrentReplyThread.PostSubject.StartsWithCSafe(replyPrefix))
            {
                txtSubject.Text = replyPrefix + ForumContext.CurrentReplyThread.PostSubject;
                txtSubject.Text = TextHelper.LimitLength(txtSubject.Text, POST_SUBJECT_LENGTH, "");
            }
            else
            {
                txtSubject.Text = ForumContext.CurrentReplyThread.PostSubject;
            }
            txtSubject.Text = txtSubject.Text;


            // New post - check max level for subscribcribtion
            if (ForumContext.CurrentReplyThread.PostLevel >= ForumPostInfoProvider.MaxPostLevel - 1)
            {
                SubscribeHolder.Visible = false;
            }
        }
        // Edit post - check max level for subscribcribtion
        else if ((ForumContext.CurrentPost != null) && (ForumContext.CurrentPost.PostLevel >= ForumPostInfoProvider.MaxPostLevel))
        {
            SubscribeHolder.Visible = false;
        }


        // Hide subscription if not enabled
        if (!EnableSubscription)
        {
            SubscribeHolder.Visible = false;
        }

        #endregion


        #region "Post Data"

        if (!RequestHelper.IsPostBack())
        {
            // Check whether current state is edit
            if (ForumContext.CurrentState == ForumStateEnum.EditPost)
            {
                txtEmail.Text     = ForumContext.CurrentPost.PostUserMail;
                txtSignature.Text = ForumContext.CurrentPost.PostUserSignature;
                txtSubject.Text   = ForumContext.CurrentPost.PostSubject;
                txtUserName.Text  = ForumContext.CurrentPost.PostUserName;

                SetPostText(ForumContext.CurrentPost.PostText);


                radTypeDiscussion.Checked = true;

                if (ForumContext.CurrentPost.PostType == 1)
                {
                    radTypeQuestion.Checked = true;
                }
            }
            else if ((ForumContext.CurrentMode == ForumMode.Quote) && (ForumContext.CurrentReplyThread != null))
            {
                // Indicates whether wysiwyg editor is used
                bool isHtml = ForumContext.CurrentForum.ForumHTMLEditor;
                // Keeps post user name
                string userName = ForumContext.CurrentReplyThread.PostUserName;

                // Encode username for wysiwyg editor
                if (isHtml)
                {
                    userName = HTMLHelper.HTMLEncode(userName);
                }

                SetPostText(DiscussionMacroResolver.GetQuote(userName, ForumContext.CurrentReplyThread.PostText));

                // Set new line after
                if (isHtml)
                {
                    htmlTemplateBody.ResolvedValue += "<br /><br />";
                }
                else
                {
                    ucBBEditor.Text += "\n";
                }
            }
        }

        #endregion
    }
    /// <summary>
    /// Generates the permission matrix for the current forum.
    /// </summary>
    private void CreateMatrix()
    {
        // Get forum resource info
        if (resForums == null)
        {
            resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");
        }

        // Get forum object
        if ((forum == null) && (ForumID > 0))
        {
            forum = ForumInfoProvider.GetForumInfo(ForumID);
        }

        if ((resForums != null) && (forum != null))
        {
            // Get permission matrix for roles of the current site/group
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Get permissions for the current forum resource
            DataSet permissions = PermissionNameInfoProvider.GetResourcePermissions(resForums.ResourceId);
            if (DataHelper.DataSourceIsEmpty(permissions))
            {
                ShowInformation(GetString("general.emptymatrix"));
            }
            else
            {
                TableRow headerRow = new TableRow();
                headerRow.CssClass = "UniGridHead";
                TableCell newCell = new TableCell();
                TableHeaderCell newHeaderCell = new TableHeaderCell();
                newHeaderCell.Text = "&nbsp;";
                newHeaderCell.Attributes["style"] = "width:200px;";
                headerRow.Cells.Add(newHeaderCell);

                foreach (string permission in allowedPermissions)
                {
                    DataRow[] drArray = permissions.Tables[0].DefaultView.Table.Select("PermissionName = '" + permission + "'");
                    if ((drArray != null) && (drArray.Length > 0))
                    {
                        DataRow dr = drArray[0];
                        newHeaderCell = new TableHeaderCell();
                        newHeaderCell.Attributes["style"] = "text-align:center;white-space:nowrap;";
                        newHeaderCell.Text = dr["PermissionDisplayName"].ToString();
                        newHeaderCell.ToolTip = dr["PermissionDescription"].ToString();
                        newHeaderCell.HorizontalAlign = HorizontalAlign.Center;
                        headerRow.Cells.Add(newHeaderCell);
                    }
                    else
                    {
                        throw new Exception("[Security matrix] Column '" + permission + "' cannot be found.");
                    }
                }
                newHeaderCell = new TableHeaderCell();
                newHeaderCell.Text = "&nbsp;";
                headerRow.Cells.Add(newHeaderCell);

                tblMatrix.Rows.Add(headerRow);

                // Render forum access permissions
                object[,] accessNames = new object[5,2];
                accessNames[0, 0] = GetString("security.nobody");
                accessNames[0, 1] = SecurityAccessEnum.Nobody;
                accessNames[1, 0] = GetString("security.allusers");
                accessNames[1, 1] = SecurityAccessEnum.AllUsers;
                accessNames[2, 0] = GetString("security.authenticated");
                accessNames[2, 1] = SecurityAccessEnum.AuthenticatedUsers;
                accessNames[3, 0] = GetString("security.groupmembers");
                accessNames[3, 1] = SecurityAccessEnum.GroupMembers;
                accessNames[4, 0] = GetString("security.authorizedroles");
                accessNames[4, 1] = SecurityAccessEnum.AuthorizedRoles;

                TableRow newRow = null;
                int rowIndex = 0;
                for (int access = 0; access <= accessNames.GetUpperBound(0); access++)
                {
                    SecurityAccessEnum currentAccess = ((SecurityAccessEnum)accessNames[access, 1]);

                    // If the security isn't displayed as part of group section
                    if ((currentAccess == SecurityAccessEnum.GroupMembers) && (!IsGroupForum))
                    {
                        // Do not render this access item
                    }
                    else
                    {
                        // Generate cell holding access item name
                        newRow = new TableRow();
                        newRow.CssClass = ((rowIndex % 2 == 0) ? "EvenRow" : "OddRow");
                        newCell = new TableCell();
                        newCell.Text = accessNames[access, 0].ToString();
                        newCell.Wrap = false;
                        newCell.CssClass = "MatrixHeader";
                        newCell.Width = new Unit(28, UnitType.Percentage);
                        newRow.Cells.Add(newCell);
                        rowIndex++;

                        // Render the permissions access items
                        bool isAllowed = false;
                        bool isDisabled = true;
                        int permissionIndex = 0;
                        for (int permission = 0; permission < (tblMatrix.Rows[0].Cells.Count - 2); permission++)
                        {
                            newCell = new TableCell();

                            // Check if the currently processed access is applied for permission
                            isAllowed = CheckPermissionAccess(currentAccess, permission, tblMatrix.Rows[0].Cells[permission + 1].Text);
                            isDisabled = ((currentAccess == SecurityAccessEnum.AllUsers) && (permission == 1)) || (!Enable);

                            // Disable column in roles grid if needed
                            if ((currentAccess == SecurityAccessEnum.AuthorizedRoles) && !isAllowed)
                            {
                                gridMatrix.DisableColumn(permissionIndex);
                            }

                            // Insert the radio button for the current permission
                            string permissionText = tblMatrix.Rows[0].Cells[permission + 1].Text;
                            string elemId = ClientID + "_" + permission + "_" + access;
                            newCell.Text = "<label style=\"display:none;\" for=\"" + elemId + "\">" + permissionText + "</label><input type=\"radio\" id=\"" + elemId + "\" name=\"" + permissionText + "\" onclick=\"" +
                                           ControlsHelper.GetPostBackEventReference(this, permission.ToString() + ";" + Convert.ToInt32(currentAccess).ToString()) + "\" " +
                                           ((isAllowed) ? "checked = \"checked\"" : "") + ((isDisabled) ? " disabled=\"disabled\"" : "") + "/>";

                            newCell.Wrap = false;
                            newCell.Width = new Unit(12, UnitType.Percentage);
                            newCell.HorizontalAlign = HorizontalAlign.Center;
                            newRow.Cells.Add(newCell);
                            permissionIndex++;
                        }

                        newCell = new TableCell();
                        newCell.Text = "&nbsp;";
                        newRow.Cells.Add(newCell);

                        // Add the access row to the table
                        tblMatrix.Rows.Add(newRow);
                    }
                }

                // Check if forum has some roles assigned
                mNoRolesAvailable = !gridMatrix.HasData;

                // Get permission matrix for current forum resource
                if (!mNoRolesAvailable)
                {
                    // Security - Role separator
                    newRow = new TableRow();
                    newCell = new TableCell();
                    newCell.Text = "&nbsp;";
                    newCell.Attributes.Add("colspan", Convert.ToString(tblMatrix.Rows[0].Cells.Count));
                    newRow.Controls.Add(newCell);
                    tblMatrix.Rows.Add(newRow);

                    // Security - Role separator text
                    newRow = new TableRow();
                    newCell = new TableCell();
                    newCell.CssClass = "MatrixLabel";
                    newCell.Text = GetString("SecurityMatrix.RolesAvailability");
                    newCell.Attributes.Add("colspan", Convert.ToString(tblMatrix.Rows[0].Cells.Count));
                    newRow.Controls.Add(newCell);
                    tblMatrix.Rows.Add(newRow);
                }
            }
        }
    }
Exemplo n.º 27
0
        /// <summary>
        /// 加载主题所在版块名称
        /// </summary>
        /// <param name="topicInfo"></param>
        private static void LoadTopicForumName(TopicInfo topicInfo)
        {
            ForumInfo forumInfo = Forums.GetForumInfo(topicInfo.Fid);

            topicInfo.Forumname = forumInfo == null ? "" : forumInfo.Name;
        }
    /// <summary>
    /// Loads the forums DropDownList for topic move.
    /// </summary>
    private void LoadMoveTopicDropdown()
    {
        if (drpMoveToForum.Items.Count > 0)
        {
            return;
        }

        ForumPostInfo fpi = ForumContext.CurrentThread;
        if ((fpi == null) && (CurrentThread > 0))
        {
            fpi = ForumPostInfoProvider.GetForumPostInfo(CurrentThread);
        }

        if (fpi != null)
        {
            bool isOk = AdminMode || ((ForumContext.CurrentForum != null) && (ForumContext.CurrentForum.ForumID == fpi.PostForumID));
            if (isOk)
            {
                var currentForumId = fpi.PostForumID;

                ForumInfo fi = ForumInfoProvider.GetForumInfo(currentForumId);
                if (fi != null)
                {
                    ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(fi.ForumGroupID);
                    if (fgi != null)
                    {
                        var whereCondition = new WhereCondition().WhereNotStartsWith("GroupName", "AdHoc").WhereEquals("GroupSiteID", SiteID);

                        if (fgi.GroupGroupID > 0)
                        {
                            whereCondition.WhereEquals("GroupGroupID", fgi.GroupGroupID);
                        }
                        else
                        {
                            whereCondition.WhereNull("GroupGroupID");
                        }

                        DataSet dsGroups = ForumGroupInfoProvider.GetForumGroups().Where(whereCondition).OrderBy("GroupDisplayName").Columns("GroupID, GroupDisplayName");

                        if (!DataHelper.DataSourceIsEmpty(dsGroups))
                        {
                            Hashtable forums = new Hashtable();

                            // Get all forums for selected groups
                            var groupWhereCondition = new WhereCondition().WhereIn("ForumGroupID", new ObjectQuery<ForumGroupInfo>().Where(whereCondition).Column("GroupID"));
                            DataSet dsForums = ForumInfoProvider.GetForums()
                                                                .WhereEquals("ForumOpen", 1)
                                                                .WhereNotEquals("ForumID", currentForumId)
                                                                .Where(groupWhereCondition)
                                                                .OrderBy("ForumDisplayName")
                                                                .Columns("ForumID, ForumDisplayName, ForumGroupID")
                                                                .TypedResult;

                            if (!DataHelper.DataSourceIsEmpty(dsForums))
                            {
                                // Load forums into hash table
                                foreach (DataRow drForum in dsForums.Tables[0].Rows)
                                {
                                    int groupId = Convert.ToInt32(drForum["ForumGroupID"]);
                                    List<string[]> forumNames = forums[groupId] as List<string[]> ?? new List<string[]>();

                                    forumNames.Add(new[] { Convert.ToString(drForum["ForumDisplayName"]), Convert.ToString(drForum["ForumID"]) });
                                    forums[groupId] = forumNames;
                                }
                            }

                            foreach (DataRow dr in dsGroups.Tables[0].Rows)
                            {
                                int groupId = Convert.ToInt32(dr["GroupId"]);

                                List<string[]> forumNames = forums[groupId] as List<string[]>;
                                if (forumNames != null)
                                {
                                    // Add forum group item if some forum
                                    ListItem li = new ListItem(Convert.ToString(dr["GroupDisplayName"]), "0");
                                    li.Attributes.Add("disabled", "disabled");
                                    drpMoveToForum.Items.Add(li);

                                    // Add forum items
                                    foreach (string[] forum in forumNames)
                                    {
                                        // Add forum to DDL
                                        drpMoveToForum.Items.Add(new ListItem(" \xA0\xA0\xA0\xA0 " + forum[0], forum[1]));
                                    }
                                }
                            }


                            // Display message if no forum exists
                            if (drpMoveToForum.Items.Count == 0)
                            {
                                plcMoveInner.Visible = false;
                                ShowInformation(GetString("Forums.NoForumToMoveIn"));
                            }
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 29
0
 /// <summary>
 /// 获取指定用户组和版信息下主题的DisplayOrder
 /// </summary>
 /// <param name="usergroupinfo">用户组信息</param>
 /// <param name="useradminid">管理组ID</param>
 /// <param name="forum">当前版块</param>
 /// <param name="topicInfo">当前主题信息</param>
 /// <param name="message">帖子内容</param>
 /// <param name="disablepost">是否受灌水限制 1,不受限制;0,受限制</param>
 /// <returns>0:正常显示;-2:待审核</returns>
 public static int GetTitleDisplayOrder(UserGroupInfo usergroupinfo, int useradminid, ForumInfo forum, TopicInfo topicInfo, string message, int disablepost)
 {
     if (useradminid == 1 || Moderators.IsModer(useradminid, topicInfo.Posterid, forum.Fid))
     {
         return(topicInfo.Displayorder);
     }
     if (forum.Modnewtopics == 1 || usergroupinfo.ModNewTopics == 1 || Scoresets.BetweenTime(GeneralConfigs.GetConfig().Postmodperiods) && disablepost != 1 || ForumUtils.HasAuditWord(topicInfo.Title) || ForumUtils.HasAuditWord(message))
     {
         return(-2);
     }
     return(topicInfo.Displayorder);
 }
Exemplo n.º 30
0
        private void SubmitInfo_Click(object sender, EventArgs e)
        {
            #region 提交同级版块

            if (this.CheckCookie())
            {
                if (DNTRequest.GetString("fid") != "")
                {
                    forumInfo              = Forums.GetForumInfo(DNTRequest.GetInt("fid", 0));
                    forumInfo.Name         = name.Text.Trim();
                    forumInfo.Displayorder = Convert.ToInt32(displayorder.Text);
                    forumInfo.Status       = Convert.ToInt16(status.SelectedValue);

                    if (colcount.SelectedValue == "1") //传统模式[默认]
                    {
                        forumInfo.Colcount = 1;
                    }
                    else
                    {
                        if (Convert.ToInt16(colcountnumber.Text) < 1 || Convert.ToInt16(colcountnumber.Text) > 9)
                        {
                            base.RegisterStartupScript("", "<script>alert('列值必须在2~9范围内');</script>");
                            return;
                        }
                        forumInfo.Colcount = Convert.ToInt16(colcountnumber.Text);
                    }

                    forumInfo.Templateid = (Convert.ToInt32(templateid.SelectedValue) == config.Templateid ? 0 : Convert.ToInt32(templateid.SelectedValue));
                    forumInfo.Allowhtml  = 0;
                    forumInfo.Allowblog  = 0;
                    //__foruminfo.Istrade = 0;
                    //__foruminfo.Allowpostspecial = 0; //需要作与运算如下
                    //__foruminfo.Allowspecialonly = 0; //需要作与运算如下
                    ////$allow辩论 = allowpostspecial & 16;
                    ////$allow悬赏 = allowpostspecial & 4;
                    ////$allow投票 = allowpostspecial & 1;

                    forumInfo.Alloweditrules = 0;
                    forumInfo.Allowsmilies   = BoolToInt(setting.Items[0].Selected);
                    forumInfo.Allowrss       = BoolToInt(setting.Items[1].Selected);
                    forumInfo.Allowbbcode    = BoolToInt(setting.Items[2].Selected);
                    forumInfo.Allowimgcode   = BoolToInt(setting.Items[3].Selected);
                    forumInfo.Recyclebin     = BoolToInt(setting.Items[4].Selected);
                    forumInfo.Modnewposts    = BoolToInt(setting.Items[5].Selected);
                    //__foruminfo.Jammer = BoolToInt(setting.Items[6].Selected);
                    forumInfo.Disablewatermark = BoolToInt(setting.Items[6].Selected);
                    forumInfo.Inheritedmod     = BoolToInt(setting.Items[7].Selected);
                    forumInfo.Allowthumbnail   = BoolToInt(setting.Items[8].Selected);
                    forumInfo.Allowtag         = BoolToInt(setting.Items[9].Selected);
                    //__foruminfo.Istrade = BoolToInt(setting.Items[11].Selected);
                    int temppostspecial = 0;
                    //temppostspecial = setting.Items[11].Selected ? temppostspecial | 1 : temppostspecial & ~1;
                    //temppostspecial = setting.Items[12].Selected ? temppostspecial | 16 : temppostspecial & ~16;
                    //temppostspecial = setting.Items[13].Selected ? temppostspecial | 4 : temppostspecial & ~4;
                    forumInfo.Allowpostspecial = temppostspecial;
                    forumInfo.Allowspecialonly = Convert.ToInt16(allowspecialonly.SelectedValue);

                    if (autocloseoption.SelectedValue == "0")
                    {
                        forumInfo.Autoclose = 0;
                    }
                    else
                    {
                        forumInfo.Autoclose = Convert.ToInt32(autocloseday.Text);
                    }

                    forumInfo.Description      = description.Text;
                    forumInfo.Password         = password.Text;
                    forumInfo.Icon             = icon.Text;
                    forumInfo.Redirect         = redirect.Text;
                    forumInfo.Attachextensions = attachextensions.GetSelectString(",");

                    AdminForums.CompareOldAndNewModerator(forumInfo.Moderators, moderators.Text.Replace("\r\n", ","), DNTRequest.GetInt("fid", 0));

                    forumInfo.Moderators     = moderators.Text.Replace("\r\n", ",");
                    forumInfo.Rules          = rules.Text;
                    forumInfo.Topictypes     = topictypes.Text;
                    forumInfo.Viewperm       = Request.Form["viewperm"];
                    forumInfo.Postperm       = Request.Form["postperm"];
                    forumInfo.Replyperm      = Request.Form["replyperm"];
                    forumInfo.Getattachperm  = Request.Form["getattachperm"];
                    forumInfo.Postattachperm = Request.Form["postattachperm"];

                    forumInfo.Applytopictype  = Convert.ToInt32(applytopictype.SelectedValue);
                    forumInfo.Postbytopictype = Convert.ToInt32(postbytopictype.SelectedValue);
                    forumInfo.Viewbytopictype = Convert.ToInt32(viewbytopictype.SelectedValue);
                    forumInfo.Topictypeprefix = Convert.ToInt32(topictypeprefix.SelectedValue);
                    forumInfo.Topictypes      = GetTopicType();

                    forumInfo.Permuserlist = GetPermuserlist();

                    Discuz.Aggregation.AggregationFacade.ForumAggregation.ClearDataBind();
                    string result = AdminForums.UpdateForumInfo(forumInfo).Replace("'", "’");
                    AdminVistLogs.InsertLog(this.userid, this.username, this.usergroupid, this.grouptitle, this.ip, "编辑论坛版块", "编辑论坛版块,名称为:" + name.Text.Trim());

                    GeneralConfigInfo configInfo = GeneralConfigs.GetConfig();
                    configInfo.Specifytemplate = Forums.GetSpecifyForumTemplateCount() > 0 ? 1 : 0;
                    GeneralConfigs.Serialiaze(configInfo, Server.MapPath("../../config/general.config"));
                    if (result == "")
                    {
                        Response.Redirect("forum_ForumsTree.aspx");
                    }
                    else
                    {
                        Response.Write("<script>alert('用户:" + result + "不存在或因为它们所属组为\"游客\",\"等待验证会员\",因为无法设为版主');window.location.href='forum_ForumsTree.aspx';</script>");
                        Response.End();
                    }
                }
            }

            #endregion
        }
Exemplo n.º 31
0
        /// <summary>
        /// 获得板块信息
        /// </summary>
        /// <returns></returns>
        public string Get()
        {
            if (Signature != GetParam("sig").ToString())
            {
                ErrorCode = (int)ErrorType.API_EC_SIGNATURE;
                return("");
            }

            //如果是桌面程序则需要验证用户身份
            if (this.App.ApplicationType == (int)ApplicationType.DESKTOP)
            {
                if (Uid < 1)
                {
                    ErrorCode = (int)ErrorType.API_EC_SESSIONKEY;
                    return("");
                }
            }

            if (CallId <= LastCallId)
            {
                ErrorCode = (int)ErrorType.API_EC_CALLID;
                return("");
            }

            if (!CheckRequiredParams("fid"))
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }

            int fid = Utils.StrToInt(GetParam("fid"), 0);

            if (fid < 1)
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }

            ForumInfo forumInfo = Discuz.Forum.Forums.GetForumInfo(fid);

            if (forumInfo == null)
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }
            //string forumurl = "http://" + DNTRequest.GetCurrentFullHost() + BaseConfigs.GetForumPath.ToLower();

            ForumGetResponse fgr = new ForumGetResponse();

            fgr.Fid           = fid;
            fgr.Url           = ForumUrl + Urls.ShowForumAspxRewrite(fid, 1, forumInfo.Rewritename);
            fgr.CurTopics     = forumInfo.CurrentTopics;
            fgr.Description   = forumInfo.Description;
            fgr.Icon          = forumInfo.Icon;
            fgr.LastPost      = forumInfo.Lastpost;
            fgr.LastPoster    = forumInfo.Lastposter.Trim();
            fgr.LastPosterId  = forumInfo.Lastposterid;
            fgr.LastTid       = forumInfo.Lasttid;
            fgr.LastTitle     = forumInfo.Lasttitle.Trim();
            fgr.Moderators    = forumInfo.Moderators;
            fgr.Name          = forumInfo.Name;
            fgr.ParentId      = forumInfo.Parentid;
            fgr.ParentIdList  = forumInfo.Parentidlist.Trim();
            fgr.PathList      = forumInfo.Pathlist.Trim();
            fgr.Posts         = forumInfo.Posts;
            fgr.Rules         = forumInfo.Rules;
            fgr.Status        = forumInfo.Status;
            fgr.SubForumCount = forumInfo.Subforumcount;
            fgr.TodayPosts    = forumInfo.Todayposts;
            fgr.Topics        = forumInfo.Topics;


            if (Format == FormatType.JSON)
            {
                return(JavaScriptConvert.SerializeObject(fgr));
            }
            return(SerializationHelper.Serialize(fgr));
        }
Exemplo n.º 32
0
        /// <summary>
        ///  得到指定论坛版块(分类)的相关信息
        /// </summary>
        /// <param name="fid">指定版块或分类的fid值</param>
        /// <returns></returns>
        public static ForumInfo GetForumInfomation(int fid)
        {
            ForumInfo foruminfo = new ForumInfo();

            DataTable dt = DatabaseProvider.GetInstance().GetForumInformation(fid);

            if (dt.Rows.Count > 0)
            {
                DataRow dr = dt.Rows[0];
                foruminfo.Fid              = Int32.Parse(dr["fid"].ToString());
                foruminfo.Parentid         = Int16.Parse(dr["parentid"].ToString());
                foruminfo.Layer            = Int16.Parse(dr["layer"].ToString());
                foruminfo.Name             = dr["name"].ToString();
                foruminfo.Pathlist         = dr["pathlist"].ToString();
                foruminfo.Parentidlist     = dr["parentidlist"].ToString();
                foruminfo.Subforumcount    = Int32.Parse(dr["subforumcount"].ToString());
                foruminfo.Status           = Int32.Parse(dr["status"].ToString());
                foruminfo.Colcount         = Int32.Parse(dr["colcount"].ToString());
                foruminfo.Displayorder     = Int32.Parse(dr["displayorder"].ToString());
                foruminfo.Templateid       = Int16.Parse(dr["templateid"].ToString());
                foruminfo.Topics           = Int32.Parse(dr["topics"].ToString());
                foruminfo.Posts            = Int32.Parse(dr["posts"].ToString());
                foruminfo.Todayposts       = Int32.Parse(dr["todayposts"].ToString());
                foruminfo.Lastpost         = dr["lastpost"].ToString();
                foruminfo.Lastposter       = dr["lastposter"].ToString();
                foruminfo.Lastposterid     = Int32.Parse(dr["lastposterid"].ToString());
                foruminfo.Lasttitle        = dr["lasttitle"].ToString();
                foruminfo.Allowsmilies     = Int32.Parse(dr["allowsmilies"].ToString());
                foruminfo.Allowrss         = Int32.Parse(dr["allowrss"].ToString());
                foruminfo.Allowhtml        = Int32.Parse(dr["allowhtml"].ToString());
                foruminfo.Allowbbcode      = Int32.Parse(dr["allowbbcode"].ToString());
                foruminfo.Allowimgcode     = Int32.Parse(dr["allowimgcode"].ToString());
                foruminfo.Allowblog        = Int32.Parse(dr["allowblog"].ToString());
                foruminfo.Istrade          = Int32.Parse(dr["istrade"].ToString());
                foruminfo.Allowpostspecial = Int32.Parse(dr["allowpostspecial"].ToString());
                foruminfo.Allowspecialonly = Int32.Parse(dr["allowspecialonly"].ToString());
                foruminfo.Alloweditrules   = Int32.Parse(dr["alloweditrules"].ToString());
                foruminfo.Recyclebin       = Int32.Parse(dr["recyclebin"].ToString());
                foruminfo.Modnewposts      = Int32.Parse(dr["modnewposts"].ToString());
                foruminfo.Jammer           = Int32.Parse(dr["jammer"].ToString());
                foruminfo.Disablewatermark = Int32.Parse(dr["disablewatermark"].ToString());
                foruminfo.Inheritedmod     = Int32.Parse(dr["inheritedmod"].ToString());
                foruminfo.Autoclose        = Int16.Parse(dr["autoclose"].ToString());


                foruminfo.Description      = dr["description"].ToString().Trim() != "" ? dr["description"].ToString() : "";
                foruminfo.Password         = dr["password"].ToString();
                foruminfo.Icon             = dr["icon"].ToString();
                foruminfo.Postcredits      = dr["postcredits"].ToString();
                foruminfo.Replycredits     = dr["replycredits"].ToString();
                foruminfo.Redirect         = dr["redirect"].ToString();
                foruminfo.Attachextensions = dr["attachextensions"].ToString();
                foruminfo.Moderators       = dr["moderators"].ToString();
                foruminfo.Rules            = dr["rules"].ToString();
                foruminfo.Topictypes       = dr["topictypes"].ToString();

                foruminfo.Viewperm        = dr["viewperm"].ToString();
                foruminfo.Postperm        = dr["postperm"].ToString();
                foruminfo.Replyperm       = dr["replyperm"].ToString();
                foruminfo.Getattachperm   = dr["getattachperm"].ToString();
                foruminfo.Postattachperm  = dr["postattachperm"].ToString();
                foruminfo.Allowthumbnail  = Int32.Parse(dr["allowthumbnail"].ToString());
                foruminfo.Allowtag        = Int32.Parse(dr["allowtag"].ToString());
                foruminfo.Applytopictype  = Int32.Parse(dr["applytopictype"].ToString());
                foruminfo.Postbytopictype = Int32.Parse(dr["postbytopictype"].ToString());
                foruminfo.Viewbytopictype = Int32.Parse(dr["viewbytopictype"].ToString());
                foruminfo.Topictypeprefix = Int32.Parse(dr["topictypeprefix"].ToString());
                foruminfo.Topictypes      = dr["topictypes"].ToString();
                foruminfo.Permuserlist    = dr["permuserlist"].ToString();

                dt.Dispose();
            }

            return(foruminfo);
        }
Exemplo n.º 33
0
        /// <summary>
        /// 创建板块
        /// </summary>
        /// <returns></returns>
        public string Create()
        {
            if (Signature != GetParam("sig").ToString())
            {
                ErrorCode = (int)ErrorType.API_EC_SIGNATURE;
                return("");
            }

            //如果是桌面程序则需要验证用户身份
            if (this.App.ApplicationType == (int)ApplicationType.DESKTOP)
            {
                if (Uid < 1)
                {
                    ErrorCode = (int)ErrorType.API_EC_SESSIONKEY;
                    return("");
                }
            }

            if (CallId <= LastCallId)
            {
                ErrorCode = (int)ErrorType.API_EC_CALLID;
                return("");
            }

            if (!CheckRequiredParams("forum_info"))
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }

            Forum forum;

            try
            {
                forum = JavaScriptConvert.DeserializeObject <Forum>(GetParam("forum_info").ToString());
            }
            catch
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }

            if (forum == null || AreParamsNullOrZeroOrEmptyString(forum.Name))
            {
                ErrorCode = (int)ErrorType.API_EC_PARAM;
                return("");
            }

            if (!Utils.StrIsNullOrEmpty(forum.RewriteName) && Discuz.Forum.Forums.CheckRewriteNameInvalid(forum.RewriteName))
            {
                ErrorCode = (int)ErrorType.API_EC_REWRITENAME;
                return("");
            }


            int fid;

            if (forum.ParentId > 0)
            {
                #region 添加与当前论坛同级的论坛

                //添加与当前论坛同级的论坛
                //DataRow dr = AdminForums.GetForum(forum.ParentId);
                ForumInfo forumInfo = Discuz.Forum.Forums.GetForumInfo(forum.ParentId);

                //找出当前要插入的记录所用的FID
                string parentidlist = null;
                if (forumInfo.Parentidlist == "0")
                {
                    parentidlist = forumInfo.Fid.ToString();
                }
                else
                {
                    parentidlist = forumInfo.Parentidlist + "," + forumInfo.Fid;
                }

                int       maxdisplayorder = 0;
                DataTable dt = AdminForums.GetMaxDisplayOrder(forum.ParentId);
                if ((dt.Rows.Count > 0) && (dt.Rows[0][0].ToString() != ""))
                {
                    maxdisplayorder = Convert.ToInt32(dt.Rows[0][0]);
                }
                else
                {
                    maxdisplayorder = forumInfo.Displayorder;
                }

                AdminForums.UpdateForumsDisplayOrder(maxdisplayorder);
                fid = InsertForum(forum, forumInfo.Layer + 1, parentidlist, 0, maxdisplayorder + 1);

                AdminForums.SetSubForumCount(forumInfo.Fid);

                #endregion
            }
            else
            {
                #region  根论坛插入

                int maxdisplayorder = AdminForums.GetMaxDisplayOrder();
                fid = InsertForum(forum, 0, "0", 0, maxdisplayorder);

                #endregion
            }
            //string forumurl = "http://" + DNTRequest.GetCurrentFullHost() + BaseConfigs.GetForumPath.ToLower();

            ForumCreateResponse fcr = new ForumCreateResponse();
            fcr.Fid = fid;
            fcr.Url = ForumUrl + Urls.ShowForumAspxRewrite(fid, 1, forum.RewriteName);


            if (Format == FormatType.JSON)
            {
                return(JavaScriptConvert.SerializeObject(fcr));
            }
            return(SerializationHelper.Serialize(fcr));
        }
Exemplo n.º 34
0
 public int SaveForum(ForumInfo objForum) {
     int UserId = -1;
     if (objForum.ForumId > 0) {
         UserId = objForum.LastModifiedByUserId;
     } else {
         UserId = objForum.CreatedByUserId;
     }
     return dataProvider.SaveForum(objForum.ForumId, objForum.PortalId, objForum.ModuleId, objForum.ParentId, objForum.AllowTopics, objForum.Name, objForum.Description, objForum.SortOrder, objForum.Active, objForum.Hidden, objForum.TopicCount, objForum.ReplyCount, objForum.LastPostId, objForum.Slug, objForum.PermissionId, objForum.SettingId, objForum.EmailAddress, objForum.SiteMapPriority, UserId);
 }
Exemplo n.º 35
0
        private int InsertForum(Forum forum, int layer, string parentidlist, int subforumcount, int systemdisplayorder)
        {
            #region 添加新论坛
            ForumInfo foruminfo = new ForumInfo();

            foruminfo.Parentid      = forum.ParentId;
            foruminfo.Layer         = layer;
            foruminfo.Parentidlist  = parentidlist;
            foruminfo.Subforumcount = subforumcount;
            foruminfo.Name          = forum.Name.Trim();

            foruminfo.Status = forum.Status == null ? 1 : Convert.ToInt32(forum.Status);

            foruminfo.Displayorder = systemdisplayorder;

            foruminfo.Templateid   = forum.TemplateId;
            foruminfo.Allowsmilies = forum.AllowSmilies;
            foruminfo.Allowrss     = forum.AllowRss;
            foruminfo.Allowhtml    = 1;
            foruminfo.Allowbbcode  = forum.AllowBbcode;
            foruminfo.Allowimgcode = forum.AllowImgcode;
            foruminfo.Allowblog    = 0;
            foruminfo.Istrade      = 0;

            //__foruminfo.Allowpostspecial = 0; //需要作与运算如下
            //__foruminfo.Allowspecialonly = 0; //需要作与运算如下
            //$allow辩论 = allowpostspecial & 16;
            //$allow悬赏 = allowpostspecial & 4;
            //$allow投票 = allowpostspecial & 1;

            foruminfo.Alloweditrules   = forum.AllowEditRules;
            foruminfo.Recyclebin       = forum.RecycleBin;
            foruminfo.Modnewposts      = forum.ModNewPosts;
            foruminfo.Modnewtopics     = forum.ModNewTopics;
            foruminfo.Jammer           = forum.Jammer;
            foruminfo.Disablewatermark = forum.DisableWatermark;
            foruminfo.Inheritedmod     = forum.InheritedMod;
            foruminfo.Allowthumbnail   = forum.AllowThumbnail;
            foruminfo.Allowtag         = forum.AllowTag;

            foruminfo.Allowpostspecial = 0;
            foruminfo.Allowspecialonly = 0;

            foruminfo.Autoclose = forum.AutoClose;

            foruminfo.Description      = forum.Description == null ? string.Empty : forum.Description;
            foruminfo.Password         = string.Empty;
            foruminfo.Icon             = forum.Icon == null ? string.Empty : forum.Icon;
            foruminfo.Postcredits      = "";
            foruminfo.Replycredits     = "";
            foruminfo.Redirect         = string.Empty;
            foruminfo.Attachextensions = string.Empty;
            foruminfo.Moderators       = forum.Moderators == null ? string.Empty : forum.Moderators;
            foruminfo.Rules            = forum.Rules == null ? string.Empty : forum.Rules;
            foruminfo.Seokeywords      = forum.SeoKeywords == null ? string.Empty : forum.SeoKeywords;
            foruminfo.Seodescription   = forum.SeoDescription == null ? string.Empty : forum.SeoDescription;
            foruminfo.Rewritename      = forum.RewriteName == null ? string.Empty : forum.RewriteName;
            foruminfo.Topictypes       = string.Empty;
            foruminfo.Colcount         = 1;
            foruminfo.Viewperm         = string.Empty;
            foruminfo.Postperm         = string.Empty;
            foruminfo.Replyperm        = string.Empty;
            foruminfo.Getattachperm    = string.Empty;
            foruminfo.Postattachperm   = string.Empty;

            return(Discuz.Forum.AdminForums.CreateForums(foruminfo));


            #endregion
        }
    /// <summary>
    /// Generates the permission matrix for the current forum.
    /// </summary>
    private void CreateMatrix()
    {
        // Get forum resource info
        if (resForums == null)
        {
            resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");
        }

        // Get forum object
        if ((forum == null) && (ForumID > 0))
        {
            forum = ForumInfoProvider.GetForumInfo(ForumID);
        }

        if ((resForums != null) && (forum != null))
        {
            // Get permissions for the current forum resource
            DataSet permissions = PermissionNameInfoProvider.GetResourcePermissions(resForums.ResourceId);
            if (DataHelper.DataSourceIsEmpty(permissions))
            {
                ShowInformation(GetString("general.emptymatrix"));
            }
            else
            {
                TableHeaderRow headerRow = new TableHeaderRow();
                headerRow.CssClass = "unigrid-head";
                headerRow.TableSection = TableRowSection.TableHeader;
                TableCell newCell = new TableCell();
                TableHeaderCell newHeaderCell = new TableHeaderCell();
                newHeaderCell.CssClass = "first-column";
                headerRow.Cells.Add(newHeaderCell);

                foreach (string permission in allowedPermissions)
                {
                    DataRow[] drArray = permissions.Tables[0].DefaultView.Table.Select("PermissionName = '" + permission + "'");
                    if (drArray.Length > 0)
                    {
                        DataRow dr = drArray[0];
                        newHeaderCell = new TableHeaderCell();
                        newHeaderCell.Text = dr["PermissionDisplayName"].ToString();
                        newHeaderCell.ToolTip = dr["PermissionDescription"].ToString();
                        headerRow.Cells.Add(newHeaderCell);
                    }
                    else
                    {
                        throw new Exception("[Security matrix] Column '" + permission + "' cannot be found.");
                    }
                }

                tblMatrix.Rows.Add(headerRow);

                // Render forum access permissions
                object[,] accessNames = new object[5, 2];
                accessNames[0, 0] = GetString("security.nobody");
                accessNames[0, 1] = SecurityAccessEnum.Nobody;
                accessNames[1, 0] = GetString("security.allusers");
                accessNames[1, 1] = SecurityAccessEnum.AllUsers;
                accessNames[2, 0] = GetString("security.authenticated");
                accessNames[2, 1] = SecurityAccessEnum.AuthenticatedUsers;
                accessNames[3, 0] = GetString("security.groupmembers");
                accessNames[3, 1] = SecurityAccessEnum.GroupMembers;
                accessNames[4, 0] = GetString("security.authorizedroles");
                accessNames[4, 1] = SecurityAccessEnum.AuthorizedRoles;

                TableRow newRow = null;
                for (int access = 0; access <= accessNames.GetUpperBound(0); access++)
                {
                    SecurityAccessEnum currentAccess = ((SecurityAccessEnum)accessNames[access, 1]);

                    // If the security isn't displayed as part of group section
                    if ((currentAccess == SecurityAccessEnum.GroupMembers) && (!IsGroupForum))
                    {
                        // Do not render this access item
                    }
                    else
                    {
                        // Generate cell holding access item name
                        newRow = new TableRow();
                        newCell = new TableCell();
                        newCell.Text = accessNames[access, 0].ToString();
                        newCell.CssClass = "matrix-header";
                        newRow.Cells.Add(newCell);

                        // Render the permissions access items
                        bool isAllowed = false;
                        bool isEnabled = true;
                        int permissionIndex = 0;
                        for (int permission = 0; permission < (tblMatrix.Rows[0].Cells.Count - 1); permission++)
                        {
                            newCell = new TableCell();

                            // Check if the currently processed access is applied for permission
                            isAllowed = CheckPermissionAccess(currentAccess, permission, tblMatrix.Rows[0].Cells[permission + 1].Text);
                            isEnabled = ((currentAccess != SecurityAccessEnum.AllUsers) || (permission != 1)) && Enable;

                            // Disable column in roles grid if needed
                            if ((currentAccess == SecurityAccessEnum.AuthorizedRoles) && !isAllowed)
                            {
                                gridMatrix.DisableColumn(permissionIndex);
                            }

                            // Insert the radio button for the current permission
                            var radio = new CMSRadioButton
                            {
                                Checked = isAllowed,
                                Enabled = isEnabled,
                            };
                            radio.Attributes.Add("onclick", ControlsHelper.GetPostBackEventReference(this, permission + ";" + Convert.ToInt32(currentAccess)));
                            newCell.Controls.Add(radio);

                            newRow.Cells.Add(newCell);
                            permissionIndex++;
                        }

                        // Add the access row to the table
                        tblMatrix.Rows.Add(newRow);
                    }
                }

                // Check if forum has some roles assigned
                headTitle.Visible = gridMatrix.HasData;
            }
        }
    }
Exemplo n.º 37
0
    /// <summary>
    /// Loads the forums DropDownList for topic move.
    /// </summary>
    private void LoadMoveTopicDropdown()
    {
        if (drpMoveToForum.Items.Count > 0)
        {
            return;
        }

        int           currentForumId = 0;
        ForumPostInfo fpi            = ForumContext.CurrentThread;

        if ((fpi == null) && (CurrentThread > 0))
        {
            fpi = ForumPostInfoProvider.GetForumPostInfo(CurrentThread);
        }


        if (fpi != null)
        {
            bool isOk = AdminMode ? true : ((ForumContext.CurrentForum != null) && (ForumContext.CurrentForum.ForumID == fpi.PostForumID));
            if (isOk)
            {
                currentForumId = fpi.PostForumID;

                ForumInfo fi = ForumInfoProvider.GetForumInfo(currentForumId);
                if (fi != null)
                {
                    ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(fi.ForumGroupID);
                    if (fgi != null)
                    {
                        string where = null;
                        DataSet dsGroups = null;
                        if (fgi.GroupGroupID > 0)
                        {
                            where = "GroupName NOT LIKE 'AdHoc%' AND GroupSiteID = " + SiteID + " AND GroupGroupID = " + fgi.GroupGroupID;
                        }
                        else
                        {
                            where = "GroupName NOT LIKE 'AdHoc%' AND GroupSiteID = " + SiteID + " AND GroupGroupID IS NULL";
                        }
                        dsGroups = ForumGroupInfoProvider.GetGroups(where, "GroupDisplayName", 0, "GroupID, GroupDisplayName");

                        if (!DataHelper.DataSourceIsEmpty(dsGroups))
                        {
                            Hashtable forums = new Hashtable();

                            // Get all forums for selected groups
                            string  groupWhere = "AND ForumGroupID IN (SELECT GroupID FROM Forums_ForumGroup WHERE " + where + ") ";
                            DataSet dsForums   = ForumInfoProvider.GetForums(" ForumOpen = 1 " + " AND NOT ForumID = " + currentForumId + groupWhere, "ForumDisplayName", 0, "ForumID, ForumDisplayName, ForumGroupID");

                            if (!DataHelper.DataSourceIsEmpty(dsForums))
                            {
                                // Load forums into hash table
                                foreach (DataRow drForum in dsForums.Tables[0].Rows)
                                {
                                    int             groupId    = Convert.ToInt32(drForum["ForumGroupID"]);
                                    List <string[]> forumNames = forums[groupId] as List <string[]>;
                                    if (forumNames == null)
                                    {
                                        forumNames = new List <string[]>();
                                    }

                                    forumNames.Add(new string[] { Convert.ToString(drForum["ForumDisplayName"]), Convert.ToString(drForum["ForumID"]) });
                                    forums[groupId] = forumNames;
                                }
                            }

                            foreach (DataRow dr in dsGroups.Tables[0].Rows)
                            {
                                int groupId = Convert.ToInt32(dr["GroupId"]);

                                List <string[]> forumNames = forums[groupId] as List <string[]>;
                                if (forumNames != null)
                                {
                                    // Add forum group item if some forum
                                    ListItem li = new ListItem(Convert.ToString(dr["GroupDisplayName"]), "0");
                                    li.Attributes.Add("disabled", "disabled");
                                    drpMoveToForum.Items.Add(li);

                                    // Add forum items
                                    foreach (string[] forum in forumNames)
                                    {
                                        // Add forum to DDL
                                        drpMoveToForum.Items.Add(new ListItem(" \xA0\xA0\xA0\xA0 " + forum[0], forum[1]));
                                    }
                                }
                            }


                            // Display message if no forum exists
                            if (drpMoveToForum.Items.Count == 0)
                            {
                                plcMoveInner.Visible = false;
                                ShowInformation(GetString("Forums.NoForumToMoveIn"));
                            }
                        }
                    }
                }
            }
        }
    }
 /// <summary>
 /// Logs "post" activity.
 /// </summary>
 /// <param name="fp">Forum post object</param>
 /// <param name="fi">Forum info</param>
 private void LogPostActivity(ForumPostInfo fp, ForumInfo fi)
 {
     Activity forumPost = new ActivityForumPost(fp, fi, DocumentContext.CurrentDocument, fi.ForumLogActivity, AnalyticsContext.ActivityEnvironmentVariables);
     forumPost.Log();
 }
Exemplo n.º 39
0
 public override void CancelForum(UserInfo u, ForumInfo f)
 {
     return;
 }
    protected void Page_Load(object sender, EventArgs e)
    {
        bool process = true;

        if (!Visible || StopProcessing)
        {
            EnableViewState = true;
            process = false;
        }

        chkForumModerated.Text = GetString("Forum_Edit.ForumModerated");

        // Get community group id
        int communityGroupID = 0;
        forum = ForumInfoProvider.GetForumInfo(mForumId);

        if (forum == null)
        {
            return;
        }

        if (forum.ForumGroupID > 0)
        {
            ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
            if (fgi != null)
            {
                communityGroupID = fgi.GroupGroupID;
            }
        }

        userSelector.ForumID = ForumID;
        userSelector.GroupID = communityGroupID;
        userSelector.CurrentSelector.SelectionMode = SelectionModeEnum.Multiple;
        userSelector.ShowSiteFilter = false;
        userSelector.SiteID = SiteContext.CurrentSiteID;
        userSelector.IsLiveSite = IsLiveSite;
        userSelector.Changed += userSelector_Changed;

        if (!IsLiveSite && process)
        {
            ReloadData(false);
        }
    }
Exemplo n.º 41
0
        private static bool testForum(ForumInfo f, int i)
        {
            string str = "test" + i;

            return(f.id.Equals(Int2Guid(i)) && f.name == str);
        }
    /// <summary>
    /// Gets and bulk updates forums. Called when the "Get and bulk update forums" button is pressed.
    /// Expects the CreateForum method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateForums()
    {
        // Prepare the parameters
        string where = "ForumName LIKE N'MyNewForum%'";
        string orderBy = "";
        string columns = "";
        int topN = 10;

        // Get the data
        DataSet forums = ForumInfoProvider.GetForums(where, orderBy, topN, columns);
        if (!DataHelper.DataSourceIsEmpty(forums))
        {
            // Loop through the individual items
            foreach (DataRow forumDr in forums.Tables[0].Rows)
            {
                // Create object from DataRow
                ForumInfo modifyForum = new ForumInfo(forumDr);

                // Update the properties
                modifyForum.ForumDisplayName = modifyForum.ForumDisplayName.ToUpper();

                // Save the changes
                ForumInfoProvider.SetForumInfo(modifyForum);
            }

            return true;
        }

        return false;
    }
Exemplo n.º 43
0
 public override List <MemberInfo> WatchAllMembers(UserInfo _usr, ForumInfo forumInfo)
 {
     return(null);
 }
    protected void Page_Load(object sender, EventArgs e)
    {
        bool process = (Visible && !StopProcessing);

        fi = ForumInfoProvider.GetForumInfo(ForumID);
        replyPi = ForumPostInfoProvider.GetForumPostInfo(ReplyToPostID);
        editPi = ForumPostInfoProvider.GetForumPostInfo(EditPostID);

        if ((fi == null) && (editPi != null))
        {
            fi = ForumInfoProvider.GetForumInfo(editPi.PostForumID);
            ForumID = fi.ForumID;
        }

        // Check whether the post still exists
        if (EditPostID > 0)
        {
            EditedObject = editPi;
        }

        // Check whether the post still exists
        if ((ForumID > 0) && (fi == null))
        {
            RedirectToInformation("editedobject.notexists");
        }

        #region "HTML Editor properties"

        // Set HTML editor properties
        htmlTemplateBody.AutoDetectLanguage = false;
        htmlTemplateBody.DefaultLanguage = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;
        htmlTemplateBody.EditorAreaCSS = "";
        htmlTemplateBody.ToolbarSet = "Forum";
        htmlTemplateBody.DisableObjectResizing = true; // Disable image resizing
        htmlTemplateBody.RemovePlugins.Add("contextmenu"); // Disable context menu
        htmlTemplateBody.IsLiveSite = IsLiveSite;
        htmlTemplateBody.MediaDialogConfig.UseFullURL = true;
        htmlTemplateBody.LinkDialogConfig.UseFullURL = true;

        #endregion

        // Regular expression to validate email (e-mail is not required)
        rfvEmail.ValidationExpression = @"^([\w0-9_\-\+]+(\.[\w0-9_\-\+]+)*@[\w0-9_-]+(\.[\w0-9_-]+)+)*$";

        if (fi != null)
        {
            if ((fi.ForumType == 0) && (replyPi == null))
            {
                plcThreadType.Visible = true;
            }

            if (fi.ForumRequireEmail)
            {
                rfvEmailRequired.Enabled = true;
                rfvEmailRequired.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.emailRequireErrorMsg");
            }

            #region "Forum text"

            rfvText.Enabled = !fi.ForumHTMLEditor;
            htmlTemplateBody.Visible = fi.ForumHTMLEditor;
            ucBBEditor.Visible = !fi.ForumHTMLEditor;

            if (fi.ForumHTMLEditor)
            {
                // Define customizable shortcuts
                Hashtable keystrokes = new Hashtable()
                                           {
                                               { "link", "CKEDITOR.CTRL + 76 /*L*/" },
                                               { "bold", "CKEDITOR.CTRL + 66 /*B*/" },
                                               { "italic", "CKEDITOR.CTRL + 73 /*I*/" },
                                               { "underline", "CKEDITOR.CTRL + 85 /*U*/" }
                                           };

                // Register script for HTML Editor forum buttons control
                if (!fi.ForumEnableURL)
                {
                    htmlTemplateBody.RemoveButtons.Add("InsertUrl");
                    if (!fi.ForumEnableAdvancedURL)
                    {
                        // Remove the keyboard shortcut for the link insertion
                        keystrokes.Remove("link");
                    }
                }
                if (!fi.ForumEnableImage)
                {
                    htmlTemplateBody.RemoveButtons.Add("InsertImage");
                }
                if (!fi.ForumEnableQuote)
                {
                    htmlTemplateBody.RemoveButtons.Add("InsertQuote");
                }
                if (!fi.ForumEnableAdvancedURL)
                {
                    htmlTemplateBody.RemoveButtons.Add("InsertLink");
                }
                if (!fi.ForumEnableAdvancedImage)
                {
                    htmlTemplateBody.RemoveButtons.Add("InsertImageOrMedia");
                }
                if (!fi.ForumEnableFontBold)
                {
                    htmlTemplateBody.RemoveButtons.Add("Bold");
                    keystrokes.Remove("bold");
                }
                if (!fi.ForumEnableFontItalics)
                {
                    htmlTemplateBody.RemoveButtons.Add("Italic");
                    keystrokes.Remove("italic");
                }
                if (!fi.ForumEnableFontUnderline)
                {
                    htmlTemplateBody.RemoveButtons.Add("Underline");
                    keystrokes.Remove("underline");
                }
                if (!fi.ForumEnableFontStrike)
                {
                    htmlTemplateBody.RemoveButtons.Add("Strike");
                }
                if (!fi.ForumEnableFontColor)
                {
                    htmlTemplateBody.RemoveButtons.Add("TextColor");
                    htmlTemplateBody.RemoveButtons.Add("BGColor");
                }

                // Generate keystrokes string for the CK Editor
                StringBuilder sb = new StringBuilder("[ [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ], [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ], [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ], [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ], [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ], [ CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ], [ CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ]");
                string format = ", [ {0}, '{1}' ]";

                foreach (DictionaryEntry entry in keystrokes)
                {
                    sb.Append(String.Format(format, entry.Value, entry.Key));
                }

                sb.Append("]");
                htmlTemplateBody.Keystrokes = sb.ToString();
            }
            else
            {
                ucBBEditor.IsLiveSite = IsLiveSite;
                ucBBEditor.ShowImage = fi.ForumEnableImage;
                ucBBEditor.ShowQuote = fi.ForumEnableQuote;
                ucBBEditor.ShowBold = fi.ForumEnableFontBold;
                ucBBEditor.ShowItalic = fi.ForumEnableFontItalics;
                ucBBEditor.ShowUnderline = fi.ForumEnableFontUnderline;
                ucBBEditor.ShowStrike = fi.ForumEnableFontStrike;
                ucBBEditor.ShowCode = fi.ForumEnableCodeSnippet;
                ucBBEditor.ShowColor = fi.ForumEnableFontColor;
                ucBBEditor.ShowURL = fi.ForumEnableURL;
                ucBBEditor.ShowAdvancedImage = fi.ForumEnableAdvancedImage;
                ucBBEditor.ShowAdvancedURL = fi.ForumEnableAdvancedURL;

                // WAI validation
                lblText.AssociatedControlClientID = ucBBEditor.TextArea.ClientID;
            }

            #endregion
        }

        // Do not show subscribe checkbox if no post can't be added under the post
        if ((replyPi != null) && (replyPi.PostLevel >= ForumPostInfoProvider.MaxPostLevel - 1))
        {
            plcSubscribe.Visible = false;
        }

        #region "Resources"

        rfvEmail.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.emailErrorMsg");
        rfvSubject.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.subjectErrorMsg");
        lblText.Text = GetString("Forums_WebInterface_ForumNewPost.text");
        rfvText.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.textErrorMsg");
        rfvUserName.ErrorMessage = GetString("Forums_WebInterface_ForumNewPost.usernameErrorMsg");
        btnOk.Text = GetString("general.ok");
        btnCancel.Text = GetString("general.cancel");
        btnPreview.Text = GetString("Forums_WebInterface_ForumNewPost.Preview");
        lblSubscribe.Text = GetString("Forums_WebInterface_ForumNewPost.Subscription");
        lblSignature.Text = GetString("Forums_WebInterface_ForumNewPost.Signature");
        lblPostIsAnswerLabel.Text = GetString("ForumPost_Edit.PostIsAnswer");
        lblPostIsNotAnswerLabel.Text = GetString("ForumPost_Edit.PostIsNotAnswer");

        #endregion

        if (!IsLiveSite && !RequestHelper.IsPostBack() && process)
        {
            ReloadData();
        }
    }
Exemplo n.º 45
0
 public override bool UpdatePolicyParams(UserInfo u, ForumInfo f, int minword, int maxmont, List <String> legg)
 {
     return(true);
 }
Exemplo n.º 46
0
    /// <summary>
    /// Logs "subscription" activity.
    /// </summary>
    /// <param name="bci">Forum subscription</param>
    private void LogSubscriptionActivity(ForumSubscriptionInfo fsi, ForumInfo fi)
    {
        string siteName = CMSContext.CurrentSiteName;
        if ((CMSContext.ViewMode != ViewModeEnum.LiveSite) || (fsi == null) || (fi == null) || !fi.ForumLogActivity
            || !ActivitySettingsHelper.ActivitiesEnabledForThisUser(CMSContext.CurrentUser) ||
            !ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(siteName) || !ActivitySettingsHelper.ForumPostSubscriptionEnabled(siteName))
        {
            return;
        }

        var data = new ActivityData()
        {
            ContactID = ModuleCommands.OnlineMarketingGetCurrentContactID(),
            SiteID = CMSContext.CurrentSiteID,
            Type = PredefinedActivityType.SUBSCRIPTION_FORUM_POST,
            TitleData = fi.ForumName,
            ItemID = fi.ForumID,
            ItemDetailID = fsi.SubscriptionID,
            URL = URLHelper.CurrentRelativePath,
            NodeID = CMSContext.CurrentDocument.NodeID,
            Culture = CMSContext.CurrentDocument.DocumentCulture,
            Campaign = CMSContext.Campaign
        };
        ActivityLogProvider.LogActivity(data);
    }
Exemplo n.º 47
0
 public override PolicyInfo GetPolicyParam(UserInfo u, ForumInfo f)
 {
     return(null);
 }
Exemplo n.º 48
0
    //protected void EditDescriptionDialog_OkButtonClicked(object sender, EventArgs e)
    //{
    //    SelectedForum.Description = DescriptionTextBox.Text;
    //    Forums.UpdateForum(SelectedForum);
    //    DescriptionLiteral.Text = SelectedForum.Description;
    //    DescriptionUpdatePanel.Update();
    //}

    public void GetForumDetailsById()
    {
        string forumId = Request.QueryString["forum"];
        _forum = Forums.GetForumByID(int.Parse(forumId));
    }
Exemplo n.º 49
0
    /// <summary>
    /// Creates tree node.
    /// </summary>
    /// <param name="sourceNode">Node with source data</param>
    protected TreeNode CreateNode(ForumPostTreeNode sourceNode, int index)
    {
        if (sourceNode == null)
        {
            return(null);
        }

        // Create tree node
        TreeNode newNode = new TreeNode();

        DataRow dr = (DataRow)sourceNode.ItemData;

        // Check whether item data are defined, if not it is root node
        if (dr != null)
        {
            int sourceNodeId = (int)dr["PostID"];
            int nodeLevel    = (int)dr["PostLevel"];

            // Check on maximum post in tree
            if (!this.UseMaxPostNodes || (index < MaxPostNodes))
            {
                #region "Set node values and appearance"

                newNode.Value        = sourceNodeId.ToString();
                newNode.SelectAction = TreeNodeSelectAction.None;

                bool   isApproved  = ValidationHelper.GetBoolean(dr["PostApproved"], false);
                string postSubject = (string)dr["PostSubject"];

                string cssClass = this.ItemCssClass;

                // Add CSS class for unapproved posts
                if (HighlightUnApprove && !isApproved)
                {
                    cssClass += " PostUnApproved";
                }

                string imageTag = "";
                if (OnGetPostIconUrl != null)
                {
                    string imageUrl = OnGetPostIconUrl(sourceNode);
                    imageTag = "<img src=\"" + imageUrl + "\" alt=\"post\" style=\"border:0px;vertical-align:middle;\" />&nbsp;";
                }


                // Set by display mode
                switch (this.ShowMode)
                {
                // Dynamic detail mode
                case ShowModeEnum.DynamicDetailMode:
                    newNode.Text = CreateDynamicDetailModeNode(dr, cssClass, imageTag, postSubject);
                    break;

                // Detail mode
                case ShowModeEnum.DetailMode:
                    newNode.Text = CreateDetailModeNode(dr);
                    break;

                // Tree mode
                default:

                    if (this.Selected == sourceNodeId)
                    {
                        cssClass = this.SelectedItemCssClass;

                        string spanId = String.Empty;
                        if (this.AdministrationMode)
                        {
                            spanId = "id=\"treeSelectedNode\"";
                        }

                        newNode.Text = String.Format("<span {0} class=\"{1}\" onclick=\"ShowPost({2}); SelectForumNode(this);\">{3}<span class=\"Name\">{4}</span></span>",
                                                     spanId, cssClass, newNode.Value, imageTag, HTMLHelper.HTMLEncode(postSubject));
                    }
                    else
                    {
                        newNode.Text = String.Format("<span class=\"{0}\" onclick=\"ShowPost({1}); SelectForumNode(this);\">{2}<span class=\"Name\">{3}</span></span>",
                                                     cssClass, newNode.Value, imageTag, HTMLHelper.HTMLEncode(postSubject));
                    }
                    break;
                }

                #endregion

                if (!this.ExpandTree)
                {
                    #region "Populate deeper levels on demand"

                    // Check if can expand
                    string childCountColumn = "PostThreadPosts";

                    // Check if unapproved posts can be included
                    if (this.AdministrationMode || this.UserIsModerator)
                    {
                        childCountColumn = "PostThreadPostsAbsolute";
                    }

                    int childNodesCount = ValidationHelper.GetInteger(dr[childCountColumn], 0);

                    // If the post is thread(level = 0) then childnodes count 1 means no real child-post
                    if ((childNodesCount == 0) || ((childNodesCount == 1) && (nodeLevel == 0)))
                    {
                        newNode.PopulateOnDemand = false;

                        // No childs -> expand
                        newNode.Expanded = true;
                    }
                    else
                    {
                        if (!sourceNode.ChildNodesLoaded)
                        {
                            newNode.PopulateOnDemand = true;
                            newNode.Expanded         = false;
                        }
                    }

                    #endregion

                    #region "Expand nodes on the current path"

                    // If preselect is set = first load
                    if (this.RegularLoad)
                    {
                        string currentNodePath     = (string)dr["PostIDPath"];
                        string currentSelectedPath = String.Empty;

                        if (this.SelectedPost != null)
                        {
                            currentSelectedPath = this.SelectedPost.PostIDPath;
                        }

                        // Expand if node is on the path
                        if (currentSelectedPath.StartsWith(currentNodePath))
                        {
                            // Raise OnTreeNodePopulate
                            newNode.PopulateOnDemand = true;
                            newNode.Expanded         = true;
                        }
                        else
                        {
                            newNode.Expanded = false;
                        }
                    }

                    #endregion
                }
                else
                {
                    // Populate will be called on each node
                    newNode.PopulateOnDemand = true;
                    newNode.Expanded         = true;
                }
            }
            else
            {
                string parentNodeId = ValidationHelper.GetString(dr["PostParentID"], "");
                newNode.Value        = sourceNodeId.ToString();
                newNode.Text         = MaxTreeNodeText.Replace("##PARENTNODEID##", parentNodeId);
                newNode.SelectAction = TreeNodeSelectAction.None;
            }
        }
        // Root node populate by default
        else
        {
            // Root node as forum display name
            ForumInfo fi = ForumInfoProvider.GetForumInfo(this.ForumID);

            if (fi != null)
            {
                newNode.Text         = "<span class=\"" + this.ItemCssClass + "\" onclick=\"ShowPost('-1'); SelectForumNode(this); \"><span class=\"Name\">" + HTMLHelper.HTMLEncode(fi.ForumDisplayName) + "</span></span>";
                newNode.Value        = "0";
                newNode.SelectAction = TreeNodeSelectAction.None;
            }

            newNode.PopulateOnDemand = true;
            newNode.Expanded         = true;
        }

        return(newNode);
    }
    /// <summary>
    /// Logs activity.
    /// </summary>
    /// <param name="bci">Forum subscription</param>
    private void LogSubscriptionActivity(ForumSubscriptionInfo fsi, ForumInfo fi)
    {
        if ((fi == null) || !fi.ForumLogActivity)
        {
            return;
        }

        Activity activity = new ActivitySubscriptionForumPost(fi, fsi, CMSContext.CurrentDocument, CMSContext.ActivityEnvironmentVariables);
        activity.Log();
    }
Exemplo n.º 51
0
    protected void Page_Load(object sender, EventArgs e)
    {
        process = true;
        if (!Visible || StopProcessing)
        {
            EnableViewState = false;
            process         = false;
        }

        chkChangeName.CheckedChanged += new EventHandler(chkChangeName_CheckedChanged);

        if (ForumID > 0)
        {
            // Get information on current forum
            forum = ForumInfoProvider.GetForumInfo(ForumID);

            // Check whether the forum still exists
            EditedObject = forum;
        }

        // Get forum resource
        resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");

        if ((resForums != null) && (forum != null))
        {
            QueryDataParameters parameters = new QueryDataParameters();
            parameters.Add("@ID", resForums.ResourceId);
            parameters.Add("@ForumID", forum.ForumID);
            parameters.Add("@SiteID", CMSContext.CurrentSiteID);

            string where = "";
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Build where condition
            if (groupId > 0)
            {
                where = "RoleGroupID=" + groupId.ToString() + " AND PermissionDisplayInMatrix = 0";
            }
            else
            {
                where = "RoleGroupID IS NULL AND PermissionDisplayInMatrix = 0";
            }

            // Setup matrix control
            gridMatrix.IsLiveSite      = IsLiveSite;
            gridMatrix.QueryParameters = parameters;
            gridMatrix.WhereCondition  = where;
            gridMatrix.ContentBefore   = "<table class=\"PermissionMatrix\" cellspacing=\"0\" cellpadding=\"0\" rules=\"rows\" border=\"1\" style=\"border-collapse:collapse;\">";
            gridMatrix.ContentAfter    = "</table>";
            gridMatrix.OnItemChanged  += new UniMatrix.ItemChangedEventHandler(gridMatrix_OnItemChanged);

            // Disable permission matrix if user has no MANAGE rights
            if (!CheckPermissions("cms.forums", PERMISSION_MODIFY))
            {
                Enable             = false;
                gridMatrix.Enabled = false;
                ShowError(String.Format(GetString("CMSSiteManager.AccessDeniedOnPermissionName"), "Manage"));
            }
        }
    }
    /// <summary>
    /// Reloads the data of the editing forum.
    /// </summary>
    /// <param name="forumObj">Forum object</param>
    private void ReloadData(ForumInfo forumObj)
    {
        // Set main properties
        chkForumOpen.Checked = forumObj.ForumOpen;
        chkForumLocked.Checked = forumObj.ForumIsLocked;
        txtForumDescription.Text = forumObj.ForumDescription;
        txtForumDisplayName.Text = forumObj.ForumDisplayName;
        txtForumName.Text = forumObj.ForumName;

        // Set other settings
        txtImageMaxSideSize.Text = forumObj.ForumImageMaxSideSize.ToString();
        txtIsAnswerLimit.Text = forumObj.ForumIsAnswerLimit.ToString();
        txtMaxAttachmentSize.Text = forumObj.ForumAttachmentMaxFileSize.ToString();
        txtBaseUrl.Text = forumObj.ForumBaseUrl;
        txtUnsubscriptionUrl.Text = forumObj.ForumUnsubscriptionUrl;
        txtOptInURL.Text = forumObj.ForumOptInApprovalURL;

        // Three state checkboxes
        chkForumRequireEmail.InitFromThreeStateValue(forumObj, "ForumRequireEmail");
        chkCaptcha.InitFromThreeStateValue(forumObj, "ForumUseCAPTCHA");
        chkForumDisplayEmails.InitFromThreeStateValue(forumObj, "ForumDisplayEmails");
        chkUseHTML.InitFromThreeStateValue(forumObj, "ForumHTMLEditor");
        chkAuthorDelete.InitFromThreeStateValue(forumObj, "ForumAuthorDelete");
        chkAuthorEdit.InitFromThreeStateValue(forumObj, "ForumAuthorEdit");
        chkEnableOptIn.InitFromThreeStateValue(forumObj, "ForumEnableOptIn");
        chkSendOptInConfirmation.InitFromThreeStateValue(forumObj, "ForumSendOptInConfirmation");

        // Check if is inherited value
        bool inheritImageMaxSideSize = (forumObj.GetValue("ForumImageMaxSideSize") == null);
        bool inheritMaxAttachmentSize = (forumObj.GetValue("ForumAttachmentMaxFileSize") == null);
        bool inheritIsAnswerLimit = (forumObj.GetValue("ForumIsAnswerLimit") == null);
        bool inheritType = (forumObj.GetValue("ForumType") == null);
        bool inheritBaseUrl = (forumObj.GetValue("ForumBaseUrl") == null);
        bool inheritUnsubscriptionUrl = (forumObj.GetValue("ForumUnsubscriptionUrl") == null);
        bool inheritLogActivity = (forumObj.GetValue("ForumLogActivity") == null);
        bool inheritOptInApprovalUrl = (forumObj.GetValue("ForumOptInApprovalURL") == null);
        // Discussion
        bool inheritDiscussion = (forumObj.GetValue("ForumDiscussionActions") == null);

        // Set properties
        txtImageMaxSideSize.Enabled = !inheritImageMaxSideSize;
        chkInheritMaxSideSize.Checked = inheritImageMaxSideSize;
        txtIsAnswerLimit.Enabled = !inheritIsAnswerLimit;
        chkInheritIsAnswerLimit.Checked = inheritIsAnswerLimit;
        chkInheritType.Checked = inheritType;
        txtMaxAttachmentSize.Enabled = !inheritMaxAttachmentSize;
        chkInheritMaxAttachmentSize.Checked = inheritMaxAttachmentSize;
        txtBaseUrl.Enabled = !inheritBaseUrl;
        chkInheritBaseUrl.Checked = inheritBaseUrl;
        txtUnsubscriptionUrl.Enabled = !inheritUnsubscriptionUrl;
        chkInheritUnsubscribeUrl.Checked = inheritUnsubscriptionUrl;
        txtOptInURL.Enabled = !inheritOptInApprovalUrl;
        chkInheritOptInURL.Checked = inheritOptInApprovalUrl;

        plcOnline.Visible = ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(CMSContext.CurrentSiteName);
        chkInheritLogActivity.Checked = inheritLogActivity;

        // Discussion
        chkInheritDiscussion.Checked = inheritDiscussion;

        // Create script for update inherit values
        ltrScript.Text += ScriptHelper.GetScript(
            "LoadSetting('" + chkLogActivity.ClientID + "', " + (forumObj.ForumLogActivity ? "true" : "false") + ", " + (inheritLogActivity ? "true" : "false") + ", 'chk');" +
            // Discussion
            "LoadSetting('" + radImageSimple.ClientID + "', " + (forumObj.ForumEnableImage ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radImageAdvanced.ClientID + "', " + (forumObj.ForumEnableAdvancedImage ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radImageNo.ClientID + "', " + (!(forumObj.ForumEnableAdvancedImage || forumObj.ForumEnableImage) ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlSimple.ClientID + "', " + (forumObj.ForumEnableURL ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlAdvanced.ClientID + "', " + (forumObj.ForumEnableAdvancedURL ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radUrlNo.ClientID + "', " + (!(forumObj.ForumEnableAdvancedURL || forumObj.ForumEnableURL) ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + chkEnableQuote.ClientID + "', " + (forumObj.ForumEnableQuote ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableBold.ClientID + "', " + (forumObj.ForumEnableFontBold ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableItalic.ClientID + "', " + (forumObj.ForumEnableFontItalics ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableStrike.ClientID + "', " + (forumObj.ForumEnableFontStrike ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableUnderline.ClientID + "', " + (forumObj.ForumEnableFontUnderline ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableCode.ClientID + "', " + (forumObj.ForumEnableCodeSnippet ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + chkEnableColor.ClientID + "', " + (forumObj.ForumEnableFontColor ? "true" : "false") + ", " + (inheritDiscussion ? "true" : "false") + ", 'chk');" +
            "LoadSetting('" + radTypeAnswer.ClientID + "', " + (forumObj.ForumType == 2 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radTypeDiscussion.ClientID + "', " + (forumObj.ForumType == 1 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');" +
            "LoadSetting('" + radTypeChoose.ClientID + "', " + (forumObj.ForumType == 0 ? "true" : "false") + ", " + (inheritType ? "true" : "false") + ", 'rad');");

        ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forumObj.ForumGroupID);

        chkInheritUnsubscribeUrl.Attributes.Add("onclick", "SetInheritance('" + txtUnsubscriptionUrl.ClientID + "', '" + fgi.GroupUnsubscriptionUrl.Replace("'", "\\\'") + "', 'txt');");
        chkInheritBaseUrl.Attributes.Add("onclick", "SetInheritance('" + txtBaseUrl.ClientID + "', '" + fgi.GroupBaseUrl.Replace("'", "\\\'") + "', 'txt');");
        string btnId = txtOptInURL.SelectButton.ClientID;
        chkInheritOptInURL.Attributes.Add("onclick", "SetInheritance('" + txtOptInURL.PathTextBox.ClientID + "', '" + fgi.GroupOptInApprovalURL.Replace("'", "\\\'") + "', 'txt');ChangeState_" + txtOptInURL.ClientID + "(!this.checked);");

        // Set default values
        chkForumRequireEmail.SetDefaultValue(fgi.GroupRequireEmail);
        chkForumDisplayEmails.SetDefaultValue(fgi.GroupDisplayEmails);
        chkUseHTML.SetDefaultValue(fgi.GroupHTMLEditor);
        chkCaptcha.SetDefaultValue(fgi.GroupUseCAPTCHA);
        chkAuthorDelete.SetDefaultValue(fgi.GroupAuthorDelete);
        chkAuthorEdit.SetDefaultValue(fgi.GroupAuthorEdit);
        chkEnableOptIn.SetDefaultValue(fgi.GroupEnableOptIn);
        chkSendOptInConfirmation.SetDefaultValue(fgi.GroupSendOptInConfirmation);

        // Settings inheritance
        chkInheritIsAnswerLimit.Attributes.Add("onclick", "SetInheritance('" + txtIsAnswerLimit.ClientID + "', '" + fgi.GroupIsAnswerLimit.ToString().Replace("'", "\\\'") + "', 'txt');");
        chkInheritMaxSideSize.Attributes.Add("onclick", "SetInheritance('" + txtImageMaxSideSize.ClientID + "', '" + fgi.GroupImageMaxSideSize.ToString().Replace("'", "\\\'") + "', 'txt');");
        chkInheritType.Attributes.Add("onclick", "SetInheritance('" + radTypeAnswer.ClientID + "', '" + (fgi.GroupType == 2 ? "true" : "false") + "', 'rad');" +
                                                 "SetInheritance('" + radTypeDiscussion.ClientID + "', '" + (fgi.GroupType == 1 ? "true" : "false") + "', 'rad');" +
                                                 "SetInheritance('" + radTypeChoose.ClientID + "', '" + (fgi.GroupType == 0 ? "true" : "false") + "', 'rad');");
        chkInheritMaxAttachmentSize.Attributes.Add("onclick", "SetInheritance('" + txtMaxAttachmentSize.ClientID + "','" + fgi.GroupAttachmentMaxFileSize.ToString().Replace("'", "\\\'") + "', 'txt');");
        chkInheritLogActivity.Attributes.Add("onclick", "SetInheritance('" + chkLogActivity.ClientID + "','" + fgi.GroupLogActivity.ToString().ToLowerCSafe() + "', 'chk');");

        // Discussion
        string chkList = "'" + radImageSimple.ClientID + ";" + chkEnableBold.ClientID + ";" + chkEnableCode.ClientID + ";" +
                         chkEnableColor.ClientID + ";" + radUrlSimple.ClientID + ";" + chkEnableItalic.ClientID + ";" +
                         radImageAdvanced.ClientID + ";" + radUrlAdvanced.ClientID + ";" + chkEnableQuote.ClientID + ";" +
                         chkEnableStrike.ClientID + ";" + chkEnableUnderline.ClientID + ";" + radImageNo.ClientID + ";" + radUrlNo.ClientID + "'";
        string chkListValues = "'" + fgi.GroupEnableImage.ToString() + ";" + fgi.GroupEnableFontBold.ToString() + ";" + fgi.GroupEnableCodeSnippet.ToString() + ";" +
                               fgi.GroupEnableFontColor.ToString() + ";" + fgi.GroupEnableURL.ToString() + ";" + fgi.GroupEnableFontItalics.ToString() + ";" +
                               fgi.GroupEnableAdvancedImage.ToString() + ";" + fgi.GroupEnableAdvancedURL.ToString() + ";" + fgi.GroupEnableQuote.ToString() + ";" +
                               fgi.GroupEnableFontStrike.ToString() + ";" + fgi.GroupEnableFontUnderline.ToString() + ";" +
                               !(fgi.GroupEnableAdvancedImage || fgi.GroupEnableImage) + ";" + !(fgi.GroupEnableAdvancedURL || fgi.GroupEnableURL) + "'";
        chkInheritDiscussion.Attributes.Add("onclick", "SetInheritance(" + chkList + ", " + chkListValues.ToLowerCSafe() + ", 'chk');");
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        process = true;
        if (!Visible || StopProcessing)
        {
            EnableViewState = false;
            process = false;
        }

        chkChangeName.CheckedChanged += new EventHandler(chkChangeName_CheckedChanged);

        if (ForumID > 0)
        {
            // Get information on current forum
            forum = ForumInfoProvider.GetForumInfo(ForumID);

            // Check whether the forum still exists
            EditedObject = forum;
        }

        // Get forum resource
        resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums");

        if ((resForums != null) && (forum != null))
        {
            QueryDataParameters parameters = new QueryDataParameters();
            parameters.Add("@ID", resForums.ResourceId);
            parameters.Add("@ForumID", forum.ForumID);
            parameters.Add("@SiteID", CMSContext.CurrentSiteID);

            string where = "";
            int groupId = 0;
            if (IsGroupForum)
            {
                ForumGroupInfo fgi = ForumGroupInfoProvider.GetForumGroupInfo(forum.ForumGroupID);
                groupId = fgi.GroupGroupID;
            }

            // Build where condition
            if (groupId > 0)
            {
                where = "RoleGroupID=" + groupId.ToString() + " AND PermissionDisplayInMatrix = 0";
            }
            else
            {
                where = "RoleGroupID IS NULL AND PermissionDisplayInMatrix = 0";
            }

            // Setup matrix control
            gridMatrix.IsLiveSite = IsLiveSite;
            gridMatrix.QueryParameters = parameters;
            gridMatrix.WhereCondition = where;
            gridMatrix.ContentBefore = "<table class=\"PermissionMatrix\" cellspacing=\"0\" cellpadding=\"0\" rules=\"rows\" border=\"1\" style=\"border-collapse:collapse;\">";
            gridMatrix.ContentAfter = "</table>";
            gridMatrix.OnItemChanged += new UniMatrix.ItemChangedEventHandler(gridMatrix_OnItemChanged);

            // Disable permission matrix if user has no MANAGE rights
            if (!CheckPermissions("cms.forums", PERMISSION_MODIFY))
            {
                Enable = false;
                gridMatrix.Enabled = false;
                ShowError(String.Format(GetString("CMSSiteManager.AccessDeniedOnPermissionName"), "Manage"));
            }
        }
    }