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 System.Collections.Generic; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.MessageBoard; using CMS.SettingsProvider; using CMS.DocumentEngine; using CMS.UIControls; using CMS.WebAnalytics; using CMS.PortalEngine; using CMS.SiteProvider; using CMS.ExtendedControls; using TreeNode = CMS.DocumentEngine.TreeNode; public partial class CMSModules_MessageBoards_Controls_Boards_BoardUserSubscriptions : CMSAdminControl { private int mSiteId = 0; private int mUserId = 0; private string mSiteName; #region "Public properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { plcMess.IsLiveSite = value; base.IsLiveSite = value; } } /// /// Site ID. /// public int SiteID { get { return mSiteId; } set { mSiteId = value; } } /// /// User ID. /// public int UserID { get { return mUserId; } set { mUserId = value; } } #endregion protected void Page_Load(object sender, EventArgs e) { if (StopProcessing || !Visible) { EnableViewState = false; boardSubscriptions.StopProcessing = true; return; } // If control should be hidden save view state memory if (!Visible) { EnableViewState = false; } // Initialize controls SetupControls(); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (DataHelper.DataSourceIsEmpty(boardSubscriptions.GridView.DataSource)) { lblMessage.Visible = false; } } #region "Private methods" /// /// Initializes controls on the page. /// private void SetupControls() { if (UserID > 0) { boardSubscriptions.Visible = true; if (CMSContext.CurrentUser.UserID == UserID) { boardSubscriptions.ZeroRowsText = GetString("boardsubscripitons.userhasnosubscriptions"); } else { boardSubscriptions.ZeroRowsText = GetString("boardsubscripitons.NoDataUser"); } // Setup UniGrid control boardSubscriptions.IsLiveSite = IsLiveSite; boardSubscriptions.Pager.DefaultPageSize = 10; boardSubscriptions.OnAction += boardSubscriptions_OnAction; boardSubscriptions.OnExternalDataBound += boardSubscriptions_OnExternalDataBound; boardSubscriptions.OnDataReload += boardSubscriptions_OnDataReload; boardSubscriptions.ShowActionsMenu = true; BoardSubscriptionInfo bsi = new BoardSubscriptionInfo(); boardSubscriptions.AllColumns = SqlHelperClass.MergeColumns(SqlHelperClass.MergeColumns(bsi.ColumnNames), "BoardID, BoardDisplayName, BoardSiteID, NodeAliasPath, DocumentCulture, SubscriptionApproved"); mSiteName = SiteInfoProvider.GetSiteName(SiteID); } else { boardSubscriptions.Visible = false; } } #endregion #region "UniGrid events handling" protected DataSet boardSubscriptions_OnDataReload(string completeWhere, string currentOrder, int currentTopN, string columns, int currentOffset, int currentPageSize, ref int totalRecords) { DataSet ds = BoardSubscriptionInfoProvider.GetSubscriptions(UserID, SiteID, currentTopN); totalRecords = DataHelper.GetItemsCount(ds); return ds; } /// /// On action event handling. /// /// Name of the action. /// Parameter for the action. protected void boardSubscriptions_OnAction(string actionName, object actionArgument) { int boardSubscriptionId = ValidationHelper.GetInteger(actionArgument, 0); switch (actionName.ToLowerCSafe()) { case "delete": if (RaiseOnCheckPermissions(PERMISSION_MANAGE, this)) { if (StopProcessing) { return; } } try { BoardSubscriptionInfoProvider.DeleteBoardSubscriptionInfo(boardSubscriptionId); } catch (Exception ex) { ShowError(ex.Message); } break; case "approve": if (RaiseOnCheckPermissions(PERMISSION_MANAGE, this)) { if (StopProcessing) { return; } } // Approve BoardSubscriptionInfo object BoardSubscriptionInfo bsi = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(boardSubscriptionId); if ((bsi != null) && !bsi.SubscriptionApproved) { bsi.SubscriptionApproved = true; BoardSubscriptionInfoProvider.SetBoardSubscriptionInfo(bsi); // Send confirmation mail BoardInfo bi = BoardInfoProvider.GetBoardInfo(bsi.SubscriptionBoardID); if ((bi != null) && bi.BoardSendOptInConfirmation) { BoardSubscriptionInfoProvider.SendConfirmationEmail(bsi, true); } // Log activity if (CMSContext.CurrentUser.UserID == UserID) { BoardSubscriptionInfoProvider.LogSubscriptionActivity(bsi, bi, PredefinedActivityType.SUBSCRIPTION_MESSAGE_BOARD, false); } } break; } } /// /// Handles the UniGrid's OnExternalDataBound event. /// private object boardSubscriptions_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "displayname": DataRowView dr = (DataRowView)parameter; string url = ResolveUrl(TreePathUtils.GetUrl(ValidationHelper.GetString(dr["NodeAliasPath"], ""), null, mSiteName)); string lang = ValidationHelper.GetString(dr["DocumentCulture"], ""); if (!String.IsNullOrEmpty(lang)) { url += "?" + URLHelper.LanguageParameterName + "=" + lang; } return "" + HTMLHelper.HTMLEncode(ValidationHelper.GetString(dr["BoardDisplayName"], "")) + ""; case "approved": return UniGridFunctions.ColoredSpanYesNo(parameter, true); case "approve": ImageButton button = ((ImageButton)sender); if (button != null) { bool isApproved = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["SubscriptionApproved"], true); if (isApproved) { button.Visible = false; } } break; } return parameter; } public override void SetValue(string propertyName, object value) { base.SetValue(propertyName, value); if (propertyName != null) { switch (propertyName.ToLowerCSafe()) { case "siteid": SiteID = ValidationHelper.GetInteger(value, 0); break; case "userid": UserID = ValidationHelper.GetInteger(value, 0); break; case "islivesite": IsLiveSite = ValidationHelper.GetBoolean(value, true); break; } } } #endregion }