using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_Membership_Pages_Users_User_Edit_Membership : CMSUsersPage { #region "Variables private int mUserID; private string currentValues = String.Empty; protected UserInfo ui = null; #endregion #region "Properties" /// /// Current user ID. /// private int UserID { get { if (mUserID == 0) { mUserID = QueryHelper.GetInteger("userid", 0); } return mUserID; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { CurrentUserInfo user = CMSContext.CurrentUser; // Check UI profile for membership if (!user.IsAuthorizedPerUIElement("CMS.Administration", "Membership")) { RedirectToCMSDeskUIElementAccessDenied("CMS.Administration", "Membership"); } // Check "read" permission if (!user.IsAuthorizedPerResource("CMS.Membership", "Read")) { RedirectToAccessDenied("CMS.Membership", "Read"); } ScriptHelper.RegisterJQuery(Page); ui = UserInfoProvider.GetUserInfo(UserID); CheckUserAvaibleOnSite(ui); EditedObject = ui; if (!CheckGlobalAdminEdit(ui)) { plcTable.Visible = false; ShowError(GetString("Administration-User_List.ErrorGlobalAdmin")); return; } DataSet ds = MembershipUserInfoProvider.GetMembershipUsers("UserID = " + UserID, String.Empty); if ((SiteID > 0) && !CMSContext.CurrentUser.IsGlobalAdministrator) { CurrentMaster.DisplaySiteSelectorPanel = false; } else { CurrentMaster.DisplaySiteSelectorPanel = true; } if (!DataHelper.DataSourceIsEmpty(ds)) { currentValues = TextHelper.Join(";", SystemDataHelper.GetStringValues(ds.Tables[0], "MembershipID")); } if (!RequestHelper.IsPostBack()) { // Set values usMemberships.Value = currentValues; } // Init uni selector usMemberships.SelectItemPageUrl = "~/CMSModules/Membership/Pages/Users/User_Edit_Add_Item_Dialog.aspx"; usMemberships.ListingWhereCondition = "UserID=" + UserID; usMemberships.ReturnColumnName = "MembershipID"; usMemberships.DynamicColumnName = false; usMemberships.GridName = "User_Membership_List.xml"; usMemberships.OnAdditionalDataBound += new CMSAdminControls_UI_UniSelector_UniSelector.AdditionalDataBoundEventHandler(usMemberships_OnAdditionalDataBound); usMemberships.OnSelectionChanged += new EventHandler(usMemberships_OnSelectionChanged); usMemberships.AdditionalColumns = "ValidTo"; // Init int siteID = SiteID; if (CurrentMaster.DisplaySiteSelectorPanel) { // Set site selector siteSelector.DropDownSingleSelect.AutoPostBack = true; siteSelector.AllowAll = false; siteSelector.AllowEmpty = false; siteSelector.AllowGlobal = true; // Only sites assigned to user siteSelector.UserId = UserID; siteSelector.OnlyRunningSites = false; siteSelector.UniSelector.OnSelectionChanged += new EventHandler(UniSelector_OnSelectionChanged); if (!RequestHelper.IsPostBack()) { siteID = CMSContext.CurrentSiteID; // If user is member of current site if (UserSiteInfoProvider.GetUserSiteInfo(UserID, siteID) != null) { // Force uniselector to preselect current site siteSelector.Value = siteID; } } siteID = siteSelector.SiteID; } string siteWhere = (siteID <= 0) ? "MembershipSiteID IS NULL" : "MembershipSiteID =" + siteID; usMemberships.ListingWhereCondition = SqlHelperClass.AddWhereCondition(usMemberships.ListingWhereCondition, siteWhere); usMemberships.WhereCondition = SqlHelperClass.AddWhereCondition(usMemberships.WhereCondition, siteWhere); string script = "function setNewDateTime(date) {$j('#" + hdnDate.ClientID + "').val(date);}"; ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "NewDateUniSelectorScript", ScriptHelper.GetScript(script)); // Manage single item valid to change by calendar string eventTarget = Request["__EVENTTARGET"]; string eventArgument = Request["__EVENTARGUMENT"]; if (eventTarget == ucCalendar.DateTimeTextBox.UniqueID) { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Membership", "ManageUserMembership")) { RedirectToAccessDenied("CMS.Membership", "Manage user membership"); } int id = ValidationHelper.GetInteger(hdnDate.Value, 0); if (id != 0) { DateTime dt = ValidationHelper.GetDateTime(eventArgument, DateTimeHelper.ZERO_TIME); MembershipUserInfo mi = MembershipUserInfoProvider.GetMembershipUserInfo(id, UserID); if (mi != null) { mi.ValidTo = dt; MembershipUserInfoProvider.SetMembershipUserInfo(mi); // Invalidate changes if (ui != null) { ui.Invalidate(false); } ShowChangesSaved(); } } } } /// Handles site selection change event /// protected void UniSelector_OnSelectionChanged(object sender, EventArgs e) { pnlUpdate.Update(); } /// /// Callback event for create calendar icon. /// /// Sender object /// Event source name /// Event parameter /// Value from basic external data bound event private object usMemberships_OnAdditionalDataBound(object sender, string sourceName, object parameter, string val) { switch (sourceName.ToLowerCSafe()) { case "calendar": DataRowView drv = (parameter as DataRowView); string itemID = drv[usMemberships.ReturnColumnName].ToString(); string date = drv["ValidTo"].ToString(); string imageID = "img_" + itemID; string postback = ControlsHelper.GetPostBackEventReference(ucCalendar.DateTimeTextBox, "#").Replace("'#'", "$j('#" + ucCalendar.DateTimeTextBox.ClientID + "').val()"); string onClick = String.Empty; ucCalendar.DateTimeTextBox.Attributes["OnChange"] = postback; if (!ucCalendar.UseCustomCalendar) { onClick = " onClick=\" $j('#" + hdnDate.ClientID + "').val('" + itemID + "');" + ucCalendar.GenerateNonCustomCalendarImageEvent() + "\""; } else { onClick = " onClick=\" $j('#" + hdnDate.ClientID + "').val('" + itemID + "'); var dt = $j('#" + ucCalendar.DateTimeTextBox.ClientID + "'); dt.val('" + date + "'); dt.cmsdatepicker('setLocation','" + imageID + "'); dt.cmsdatepicker('show');\""; } val = "\"""; break; } return val; } protected void usMemberships_OnSelectionChanged(object sender, EventArgs ea) { SaveData(); } /// /// Check whether current user is allowed to modify another user. /// /// Modified user /// "" or error message. protected static string ValidateGlobalAndDeskAdmin(UserInfo ui) { string result = String.Empty; if (CMSContext.CurrentUser.IsGlobalAdministrator) { return result; } if (ui == null) { result = ResHelper.GetString("Administration-User.WrongUserId"); } else { if (ui.IsGlobalAdministrator) { result = ResHelper.GetString("Administration-User.NotAllowedToModify"); } } return result; } protected override void OnPreRender(EventArgs e) { if (RequestHelper.IsPostBack()) { pnlBasic.Update(); } base.OnPreRender(e); } /// /// Store selected (unselected) roles. /// private void SaveData() { bool updateUser = false; // Check permission for manage membership for users if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Membership", "ManageUserMembership")) { RedirectToAccessDenied("CMS.Membership", "Manage user membership"); } string result = ValidateGlobalAndDeskAdmin(ui); if (result != String.Empty) { ShowError(result); return; } // Remove old items string newValues = ValidationHelper.GetString(usMemberships.Value, null); string items = DataHelper.GetNewItemsInList(newValues, currentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { foreach (string item in newItems) { int membershipID = ValidationHelper.GetInteger(item, 0); MembershipUserInfoProvider.RemoveMembershipFromUser(membershipID, UserID); updateUser = true; } } } // Add new items items = DataHelper.GetNewItemsInList(currentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { DateTime dt = ValidationHelper.GetDateTime(hdnDate.Value, DateTimeHelper.ZERO_TIME); // Add all new items to membership foreach (string item in newItems) { int membershipID = ValidationHelper.GetInteger(item, 0); MembershipUserInfoProvider.AddMembershipToUser(membershipID, UserID, dt); updateUser = true; } } } if (updateUser) { usMemberships.Reload(true); // Invalidate user object if (ui != null) { ui.Invalidate(false); } ShowChangesSaved(); } } #endregion }