using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Collections; using CMS.Blogs; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.DocumentEngine; using CMS.UIControls; public partial class CMSModules_Blogs_Controls_Blogs_Comments : CMSAdminControl { #region "Variables" protected CurrentUserInfo currentUser = null; private bool mShowFilter = true; private string mIsApproved = "no"; private string mIsSpam = "all"; private string mOrderBy = "CommentDate asc"; private string mItemsPerPage = string.Empty; private string mBlogName = "##myblogs##"; private string mSiteName = CMSContext.CurrentSiteName; #endregion #region "Properties" /// /// Indicates whether shown comments are approved. /// public string IsApproved { get { return mIsApproved; } set { mIsApproved = value; } } /// /// Blog name to filter. /// public string BlogName { get { return mBlogName; } set { mBlogName = value; } } /// /// Order by for grid. /// public string OrderBy { get { return mOrderBy; } set { mOrderBy = value; } } /// /// Items per page. /// public string ItemsPerPage { get { return mItemsPerPage; } set { mItemsPerPage = value; } } /// /// Indicates whether show spam marked comments. /// public string IsSpam { get { return mIsSpam; } set { mIsSpam = value; } } /// /// Site name of blogs. /// public string SiteName { get { return mSiteName; } set { mSiteName = value; } } /// /// If false don't show filter. /// public bool ShowFilter { get { return mShowFilter; } set { mShowFilter = value; } } /// /// Gets the filter query string. /// public string FilterQueryString { get { return "&approved=" + IsApproved + "&isspam=" + IsSpam; } } /// /// Creates condition for DB query (if filter set via web part). /// private String CommentWhereCondition { get { string where = String.Empty; // Is approved switch (IsApproved.ToLowerCSafe()) { case "yes": where = SqlHelperClass.AddWhereCondition(where, "CommentApproved = 1"); break; case "no": where = SqlHelperClass.AddWhereCondition(where, "(CommentApproved = 0 OR CommentApproved IS NULL )"); break; } // Is spam switch (IsSpam.ToLowerCSafe()) { case "yes": where = SqlHelperClass.AddWhereCondition(where, "CommentIsSpam = 1"); break; case "no": where = SqlHelperClass.AddWhereCondition(where, "(CommentIsSpam = 0 OR CommentIsSpam IS NULL )"); break; } return where; } } /// /// Gets the Blog part of the WHERE condition. /// public string BlogWhereCondition { get { string blogWhere = string.Empty; // Blogs dropdownlist switch (BlogName.ToLowerCSafe()) { case "##all##": // If current user isn't Global admin or user with 'Manage' permissions for blogs if (!currentUser.IsAuthorizedPerResource("cms.blog", "Manage")) { blogWhere = "(NodeOwner=" + currentUser.UserID + " OR (';' + BlogModerators + ';' LIKE N'%;" + SqlHelperClass.GetSafeQueryString(currentUser.UserName, false) + ";%'))"; } break; case "##myblogs##": blogWhere = "NodeOwner = " + currentUser.UserID; break; default: blogWhere = "BlogID = " + ValidationHelper.GetInteger(BlogName, 0); break; } return blogWhere; } } /// /// Indicates if controls is in MyDesk section. /// public bool IsInMydesk { get { return filterElem.IsInMydesk; } set { filterElem.IsInMydesk = value; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { gridComments.Visible = false; return; } ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "PostBackRererence", ScriptHelper.GetScript("function postBack () {" + ControlsHelper.GetPostBackEventReference(this, String.Empty) + ";}")); ScriptHelper.RegisterDialogScript(Page); gridComments.OnAction += gridComments_OnAction; gridComments.OnExternalDataBound += gridComments_OnExternalDataBound; gridComments.OnDataReload += gridComments_OnDataReload; gridComments.HideControlForZeroRows = true; gridComments.ShowActionsMenu = true; gridComments.Columns = "CommentID, CommentDate, CommentApproved, CommentUserName, CommentText, CommentIsSpam"; // Get all possible column names. BlogCommentInfo bci = new BlogCommentInfo(); gridComments.AllColumns = SqlHelperClass.MergeColumns(bci.ColumnNames); btnAction.Text = GetString("General.Ok"); btnAction.OnClientClick = "return MassConfirm('" + drpAction.ClientID + "'," + ScriptHelper.GetString(GetString("MyBlogs.Comments.ConfirmDelete")) + ");"; currentUser = CMSContext.CurrentUser; // Load action dropdown if (!URLHelper.IsPostback()) { // Actions dropdown drpAction.Items.Add(new ListItem(GetString("General.SelectAction"), string.Empty)); drpAction.Items.Add(new ListItem(GetString("General.Approve"), "approve")); drpAction.Items.Add(new ListItem(GetString("General.Reject"), "reject")); drpAction.Items.Add(new ListItem(GetString("MyBlogs.Comments.IsSpam"), "spam")); drpAction.Items.Add(new ListItem(GetString("MyBlogs.Comments.IsNoSpam"), "nospam")); drpAction.Items.Add(new ListItem(GetString("General.Delete"), "delete")); } if (!ShowFilter) { filterElem.Visible = false; gridComments.OrderBy = OrderBy; } if (!RequestHelper.IsPostBack() && !string.IsNullOrEmpty(ItemsPerPage)) { gridComments.Pager.DefaultPageSize = ValidationHelper.GetInteger(ItemsPerPage, -1); } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Hide actions dropdown and button if no data pnlActions.Visible = !DataHelper.DataSourceIsEmpty(gridComments.GridView.DataSource); } protected DataSet gridComments_OnDataReload(string completeWhere, string currentOrder, int currentTopN, string columns, int currentOffset, int currentPageSize, ref int totalRecords) { string whereCondition = String.Empty; string blogWhereCondition = String.Empty; if (ShowFilter) { whereCondition = filterElem.CommentWhereCondition; blogWhereCondition = filterElem.BlogWhereCondition; } else { whereCondition = CommentWhereCondition; blogWhereCondition = BlogWhereCondition; } // All sites if (SiteName == "-1") { SiteName = TreeProvider.ALL_SITES; } // Set the current site if the siteName is not defined if (String.IsNullOrEmpty(SiteName)) { SiteName = CMSContext.CurrentSiteName; } return BlogCommentInfoProvider.GetComments(0, null, whereCondition, blogWhereCondition, columns, currentTopN, currentOrder, currentOffset, currentPageSize, ref totalRecords, SiteName); } protected void gridComments_OnAction(string actionName, object actionArgument) { int commentId = ValidationHelper.GetInteger(actionArgument, 0); switch (actionName.ToLowerCSafe()) { case "delete": // Delete specified comment BlogCommentInfoProvider.DeleteBlogCommentInfo(commentId); break; case "approve": BlogCommentInfo bci = BlogCommentInfoProvider.GetBlogCommentInfo(commentId); if (bci != null) { if (bci.CommentApproved) { // Set comment as 'rejected' bci.CommentApproved = false; bci.CommentApprovedByUserID = 0; } else { // Set comment as 'approved' bci.CommentApproved = true; bci.CommentApprovedByUserID = currentUser.UserID; } BlogCommentInfoProvider.SetBlogCommentInfo(bci); } break; case "edit": // JavaScript break; } } protected object gridComments_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "commentusername": return HTMLHelper.HTMLEncode(Convert.ToString(parameter)); case "commenttext": string text = Convert.ToString(parameter); if (text.Length > 50) { text = text.Substring(0, 50) + "..."; } return HTMLHelper.HTMLEncode(text); case "commentapproved": return UniGridFunctions.ColoredSpanYesNo(parameter); case "commentisspam": return UniGridFunctions.ColoredSpanYesNoReversed(parameter); case "approve": bool approve = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["CommentApproved"], false); if (!approve) { ImageButton button = ((ImageButton)sender); button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Approve.png"); button.ToolTip = GetString("general.approve"); } else { ImageButton button = ((ImageButton)sender); button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Reject.png"); button.ToolTip = GetString("general.reject"); } break; case "edit": string commentId = ((DataRowView)((GridViewRow)parameter).DataItem).Row["CommentID"].ToString(); ImageButton editButton = ((ImageButton)sender); // Get filter query string string queryCondition = ShowFilter ? filterElem.FilterQueryString : FilterQueryString; // If no display use postback for refresh string usePostback = String.Empty; if (!ShowFilter) { usePostback = "&usepostback=true"; } editButton.OnClientClick = "modalDialog('" + ResolveUrl("~/CMSModules/Blogs/Controls/Comment_Edit.aspx") + "?commentID=" + commentId + queryCondition + usePostback + "', 'CommentEdit', 500, 440); return false;"; break; } return parameter; } /// /// Handle mass actions. /// protected void btnAction_Click(object sender, EventArgs e) { if (drpAction.SelectedValue != "SELECT") { List list = gridComments.SelectedItems; if (list.Count > 0) { foreach (string commnentId in list) { BlogCommentInfo bci = BlogCommentInfoProvider.GetBlogCommentInfo(Convert.ToInt32(commnentId)); switch (drpAction.SelectedValue.ToLowerCSafe()) { case "delete": // Delete specified comment BlogCommentInfoProvider.DeleteBlogCommentInfo(bci); break; case "approve": if (!bci.CommentApproved) { // Set comment as 'approved' bci.CommentApproved = true; bci.CommentApprovedByUserID = CMSContext.CurrentUser.UserID; BlogCommentInfoProvider.SetBlogCommentInfo(bci); } break; case "reject": if (bci.CommentApproved) { // Set comment as 'reject' bci.CommentApproved = false; bci.CommentApprovedByUserID = 0; BlogCommentInfoProvider.SetBlogCommentInfo(bci); } break; case "spam": if (!bci.CommentIsSpam) { bci.CommentIsSpam = true; BlogCommentInfoProvider.SetBlogCommentInfo(bci); } break; case "nospam": if (bci.CommentIsSpam) { bci.CommentIsSpam = false; BlogCommentInfoProvider.SetBlogCommentInfo(bci); } break; } } } } // Clear selection gridComments.ResetSelection(); ReloadData(); } /// /// Load data according to filter settings. /// public override void ReloadData() { gridComments.FilterIsSet = true; gridComments.ReloadData(); base.ReloadData(); } #endregion }