using System; using System.Data; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.Forums; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.UIControls; public partial class CMSModules_Forums_Controls_LiveControls_Posts : CMSAdminItemsControl, IPostBackEventHandler { #region "Variables" private int mForumId = 0; private int postId = 0; private ForumPostInfo post = null; private const string breadCrumbsSeparator = "   "; #endregion #region "Public properties" /// /// Gets or sets the Forum ID. /// public int ForumID { get { return mForumId; } set { mForumId = value; } } #endregion protected override void OnLoad(EventArgs e) { base.OnLoad(e); #region "Security" postEdit.OnCheckPermissions += new CheckPermissionsEventHandler(postEdit_OnCheckPermissions); postNew.OnCheckPermissions += new CheckPermissionsEventHandler(postNew_OnCheckPermissions); #endregion postNew.OnInsertPost += new EventHandler(postNew_OnInsertPost); postNew.OnPreview += new EventHandler(postNew_OnPreview); postEdit.OnPreview += new EventHandler(postEdit_OnPreview); postEdit.OnCancelClick += new EventHandler(postEdit_OnCancelClick); postEdit.OnSaved += new EventHandler(postEdit_OnSaved); // Set forum treeElem.ForumID = mForumId; postNew.ForumID = mForumId; postEdit.ForumID = mForumId; // Get post ID postId = ValidationHelper.GetInteger(hdnPost.Value, 0); if (postId > 0) { postEdit.EditPostID = postId; post = ForumPostInfoProvider.GetForumPostInfo(postId); } // Unigrid settings UniGrid.Visible = false; UniGrid.Query = ""; UniGrid.OnAction += new OnActionEventHandler(UniGrid_OnAction); UniGrid.OnExternalDataBound += new OnExternalDataBoundEventHandler(UniGrid_OnExternalDataBound); // Initialize page elements titleViewElem.TitleText = GetString("ForumPost_View.PostTitleText"); titleViewElem.TitleImage = GetImageUrl("Objects/Forums_ForumPost/object.png"); titleEditElem.TitleText = GetString("ForumPost_Edit.HeaderCaption"); titleEditElem.TitleImage = GetImageUrl("Objects/Forums_ForumPost/object.png"); lnkEditBack.Text = GetString("general.view"); lnkEditBack.Click += new EventHandler(lnkEditBack_Click); if (post != null) { lblEditBack.Text = breadCrumbsSeparator + HTMLHelper.HTMLEncode(post.PostSubject); InitializeMenu(); } // Add handlers treeElem.OnGetPostIconUrl += new CMSModules_Forums_Controls_PostTree.GetIconEventHandler(treeElem_OnGetPostIconUrl); actionsElem.ActionPerformed += new CommandEventHandler(actionsElem_ActionPerformed); } #region "Security handlers" private void postNew_OnCheckPermissions(string permissionType, CMSAdminControl sender) { RaiseOnCheckPermissions(permissionType, sender); } private void postEdit_OnCheckPermissions(string permissionType, CMSAdminControl sender) { RaiseOnCheckPermissions(permissionType, sender); } #endregion /// /// Unigrid External bound event handler. /// private object UniGrid_OnExternalDataBound(object sender, string sourceName, object parameter) { // Display link instead of title if (sourceName.ToLowerCSafe() == "title") { if (parameter != DBNull.Value) { DataRowView row = (DataRowView)parameter; // Get info Guid attachmentGuid = ValidationHelper.GetGuid(row["AttachmentGUID"], Guid.Empty); if (attachmentGuid != Guid.Empty) { string url = URLHelper.GetAbsoluteUrl("~/CMSModules/Forums/CMSPages/GetForumAttachment.aspx?fileguid=" + attachmentGuid); string title = ValidationHelper.GetString(row["AttachmentFileName"], ""); // Create link to post attachment HyperLink link = new HyperLink(); link.NavigateUrl = url; link.Target = "_blank"; link.Text = HTMLHelper.HTMLEncode(title); link.ToolTip = url; return link; } } } return parameter.ToString(); } /// /// Unigrid Action event handler. /// private void UniGrid_OnAction(string actionName, object actionArgument) { if (actionName == "delete") { if (!CheckPermissions("cms.forums", PERMISSION_MODIFY)) { return; } ForumAttachmentInfoProvider.DeleteForumAttachmentInfo(ValidationHelper.GetInteger(actionArgument, 0)); } } protected void postNew_OnPreview(object sender, EventArgs e) { // Display new preview DisplayControl("newpreview"); } private void postEdit_OnCancelClick(object sender, EventArgs e) { // Display view DisplayControl("view"); } protected void postEdit_OnPreview(object sender, EventArgs e) { // Display edit preview DisplayControl("editpreview"); } protected void postEdit_OnSaved(object sender, EventArgs e) { // Display new view postView.PostData = null; DisplayControl("view"); } protected void postNew_OnInsertPost(object sender, EventArgs e) { // Set properties postId = postNew.EditPostID; treeElem.Selected = postId; postEdit.EditPostID = postId; postView.PostID = postId; postNew.ReplyToPostID = 0; // Save post to database post = ForumPostInfoProvider.GetForumPostInfo(postId); hdnPost.Value = postId.ToString(); DisplayControl("view"); } /// /// Reloads the form data. /// public override void ReloadData() { hdnPost.Value = null; postId = 0; post = null; DisplayControl("new"); } /// /// Initializes the menu. /// protected void InitializeMenu() { string[,] actions = new string[10,11]; int i = 0; // Edit actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("general.edit"); actions[i, 4] = GetString("ForumPost_View.EditToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/edit.png"); actions[i, 6] = "edit"; i++; // Delete actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("general.delete"); actions[i, 2] = "if (!confirm(" + ScriptHelper.GetString(GetString("ForumPost_View.DeleteConfirmation")) + ")){return false;}"; actions[i, 4] = GetString("ForumPost_View.DeleteToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/delete.png"); actions[i, 6] = "delete"; i++; // Reply actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconReply"); actions[i, 4] = GetString("ForumPost_View.ReplyToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/reply.png"); actions[i, 6] = "reply"; i++; if (post.PostLevel == 0) { // Lock actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconLock"); actions[i, 4] = GetString("ForumPost_View.LockToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/lock.png"); actions[i, 6] = "lockunlock"; actions[i, 10] = Convert.ToString((post != null) && !post.PostIsLocked); i++; // UnLock actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconUnLock"); actions[i, 4] = GetString("ForumPost_View.UnLockToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/unlock.png"); actions[i, 6] = "lockunlock"; actions[i, 10] = Convert.ToString((post != null) && post.PostIsLocked); i++; // Stick actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconStick"); actions[i, 4] = GetString("ForumPost_View.StickToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/stick.png"); actions[i, 6] = "stick"; actions[i, 10] = Convert.ToString((post != null) && (post.PostStickOrder <= 0)); i++; // UnStick actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconUnStick"); actions[i, 4] = GetString("ForumPost_View.UnStickToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/unstick.png"); actions[i, 6] = "unstick"; actions[i, 10] = Convert.ToString((post != null) && (post.PostStickOrder > 0)); i++; } else { // Split actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconSplit"); actions[i, 4] = GetString("ForumPost_View.SplitToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/split.png"); actions[i, 6] = "split"; i++; } // Approve actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; if (!post.PostApproved) { actions[i, 1] = GetString("general.approve"); actions[i, 4] = GetString("ForumPost_View.ApproveToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/approve.png"); actions[i, 6] = "approve"; } else { // Reject post actions[i, 1] = GetString("general.reject"); actions[i, 4] = GetString("ForumPost_View.RejectToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/reject.png"); actions[i, 6] = "reject"; } i++; // Approve subtree if (!post.PostApproved) { actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconApproveSubTree"); actions[i, 4] = GetString("ForumPost_View.ApproveSubTreeToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/approve.png"); actions[i, 6] = "approvesubtree"; } else { // Reject subtree actions[i, 0] = HeaderActions.TYPE_LINKBUTTON; actions[i, 1] = GetString("ForumPost_View.IconRejectSubTree"); actions[i, 4] = GetString("ForumPost_View.RejectSubTreeToolTip"); actions[i, 5] = GetImageUrl("CMSModules/CMS_Forums/reject.png"); actions[i, 6] = "rejectsubtree"; } i++; actionsElem.Actions = actions; actionsElem.SeparatorWidth = 19; } /// /// Handle actions. /// protected void actionsElem_ActionPerformed(object sender, CommandEventArgs e) { if (!CheckPermissions("cms.forums", PERMISSION_MODIFY)) { return; } switch (e.CommandName.ToLowerCSafe()) { case "stick": ForumPostInfoProvider.StickThread(post); // Get the post object with updated info post = ForumPostInfoProvider.GetForumPostInfo(post.PostId); DisplayControl("view"); break; case "unstick": ForumPostInfoProvider.UnstickThread(post); // Get the post object with updated info post = ForumPostInfoProvider.GetForumPostInfo(post.PostId); DisplayControl("view"); break; case "split": ForumPostInfoProvider.SplitThread(post); // Get the post object with updated info post = ForumPostInfoProvider.GetForumPostInfo(post.PostId); DisplayControl("view"); break; case "lockunlock": // Lock or unlock post post.PostIsLocked = !post.PostIsLocked; ForumPostInfoProvider.SetForumPostInfo(post); DisplayControl("view"); break; case "edit": // Edit DisplayControl("edit"); break; case "delete": // Delete post ForumPostInfoProvider.DeleteForumPostInfo(postId); postNew.ClearForm(); DisplayControl("new"); break; case "reply": // Reply DisplayControl("reply"); break; case "approve": // Approve action if (CMSContext.CurrentUser != null) { post.PostApprovedByUserID = CMSContext.CurrentUser.UserID; post.PostApproved = true; ForumPostInfoProvider.SetForumPostInfo(post); } DisplayControl("view"); break; case "reject": // Reject action post.PostApprovedByUserID = 0; post.PostApproved = false; ForumPostInfoProvider.SetForumPostInfo(post); DisplayControl("view"); break; case "approvesubtree": // Approve subtree if ((post != null) && (CMSContext.CurrentUser != null)) { post.PostApprovedByUserID = CMSContext.CurrentUser.UserID; post.PostApproved = true; ForumPostInfoProvider.SetForumPostInfo(post); DataSet ds = ForumPostInfoProvider.GetChildPosts(post.PostId); if (!DataHelper.DataSourceIsEmpty(ds)) { // All posts under current post foreach (DataRow dr in ds.Tables[0].Rows) { ForumPostInfo mfpi = new ForumPostInfo(dr); if ((mfpi != null) && (!mfpi.PostApproved)) { mfpi.PostApprovedByUserID = CMSContext.CurrentUser.UserID; mfpi.PostApproved = true; ForumPostInfoProvider.SetForumPostInfo(mfpi); } } } DisplayControl("view"); } break; case "rejectsubtree": // Reject subtree if (post != null) { post.PostApprovedByUserID = 0; post.PostApproved = false; ForumPostInfoProvider.SetForumPostInfo(post); DataSet ds = ForumPostInfoProvider.GetChildPosts(post.PostId); if (!DataHelper.DataSourceIsEmpty(ds)) { // All posts under current post foreach (DataRow dr in ds.Tables[0].Rows) { ForumPostInfo mfpi = new ForumPostInfo(dr); if ((mfpi != null) && (mfpi.PostApproved)) { mfpi.PostApprovedByUserID = 0; mfpi.PostApproved = false; ForumPostInfoProvider.SetForumPostInfo(mfpi); } } } DisplayControl("view"); } break; } hdnPost.Value = postId.ToString(); } protected void lnkEditBack_Click(object sender, EventArgs e) { // Display view control DisplayControl("view"); } protected string treeElem_OnGetPostIconUrl(ForumPostTreeNode node) { string imageUrl = ""; if (node != null) { // Set image url imageUrl = GetImageUrl("CMSModules/CMS_Forums/post16.png"); if (!ValidationHelper.GetBoolean(((DataRow)node.ItemData)["PostApproved"], false)) { imageUrl = GetImageUrl("CMSModules/CMS_Forums/rejected16.png"); } } return imageUrl; } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (ControlsHelper.IsInUpdatePanel(this)) { ControlsHelper.UpdateCurrentPanel(this); } // Register script for show post ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ForumPostPostback_value", ScriptHelper.GetScript( "function ShowPost(showId){ \n" + " var hidden = document.getElementById('" + hdnPost.ClientID + "'); \n" + " if (hidden != null) { \n" + " hidden.value = showId; \n" + " } \n" + ControlsHelper.GetPostBackEventReference(this, "showid") + "} \n")); } /// /// Displays only specified control. Other controls hides. /// /// Specified control private void DisplayControl(string selectedControl) { // Tree element treeElem.ForumID = mForumId; treeElem.SelectOnlyApproved = false; treeElem.Selected = postId; // Hide elements plcPostEdit.Visible = false; plcPostView.Visible = false; plcPostNew.Visible = false; switch (selectedControl.ToLowerCSafe()) { case "view": // View mode if ((post != null) && (post.PostAttachmentCount > 0)) { string where = "(AttachmentPostID = " + postId + ")"; // Load unigrid UniGrid.WhereCondition = where; UniGrid.Query = "Forums.ForumAttachment.selectall"; UniGrid.Columns = "AttachmentID,AttachmentFileName,AttachmentFileSize,AttachmentGUID"; UniGrid.Visible = true; UniGrid.ReloadData(); } if (post != null) { InitializeMenu(); actionsElem.ReloadData(); } postNew.ForumID = mForumId; postView.PostID = postId; postView.PostData = null; plcPostView.Visible = true; postView.ReloadData(); break; case "edit": // Edit mode postEdit.ForumID = mForumId; postEdit.EditPostID = postId; postEdit.ReloadData(); plcPostEdit.Visible = true; break; case "reply": // Reply mode plcPostNew.Visible = true; postNew.ReplyToPostID = postId; postNew.ReloadData(); break; case "newpreview": // New preview mode plcPostEdit.Visible = false; plcPostView.Visible = false; plcPostNew.Visible = true; break; case "editpreview": // Edit preview mode plcPostEdit.Visible = true; plcPostView.Visible = false; plcPostNew.Visible = false; break; default: // Default view mode postNew.ClearForm(); if (postId > 0) { postNew.ReplyToPostID = postId; } else { postNew.ReplyToPostID = 0; } plcPostNew.Visible = true; postNew.ReloadData(); break; } } #region IPostBackEventHandler Members public void RaisePostBackEvent(string eventArgument) { switch (eventArgument.ToLowerCSafe()) { case "showid": if (postId <= 0) { ReloadData(); } else { DisplayControl("view"); } break; } } #endregion }