using System; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_Membership_Pages_Users_User_Edit_Languages : CMSUsersPage { #region "Protected variables" protected int userId = 0; protected UserInfo ui = null; protected string currentValues = ""; private int siteID = 0; #endregion #region "Page events" protected void Page_Load(object sender, EventArgs e) { // Register script for pendingCallbacks repair ScriptHelper.FixPendingCallbacks(Page); // If languages on site not ok, redirect if (!CultureInfoProvider.LicenseVersionCheck()) { URLHelper.Redirect(ResolveUrl("~/CMSMessages/LicenseLimit.aspx")); } userId = QueryHelper.GetInteger("userid", 0); siteID = SiteID; if (userId > 0) { ui = UserInfoProvider.GetUserInfo(userId); CheckUserAvaibleOnSite(ui); EditedObject = ui; if (!CheckGlobalAdminEdit(ui)) { pnlLanguages.Visible = false; ShowError(GetString("Administration-User_List.ErrorGlobalAdmin")); return; } // Set site selector siteSelector.DropDownSingleSelect.AutoPostBack = true; siteSelector.AllowAll = false; siteSelector.OnlyRunningSites = false; siteSelector.UserId = ui.UserID; siteSelector.UniSelector.OnSelectionChanged += UniSelector_OnSelectionChanged; if (!RequestHelper.IsPostBack()) { // Initialize radio buttons radAllLanguages.Checked = !ui.UserHasAllowedCultures; radSelectedLanguages.Checked = ui.UserHasAllowedCultures; // Load the site selector with the data in order to preselect current site (if available in the list) siteSelector.UniSelector.SelectionMode = SelectionModeEnum.SingleDropDownList; siteSelector.UniSelector.AllowEmpty = false; siteSelector.UpdateWhereCondition(); siteSelector.Reload(true); // Select the current site if it is in the list, otherwise select the first site in the list if (siteSelector.DropDownSingleSelect.Items.FindByValue(CMSContext.CurrentSiteID.ToString()) != null) { siteSelector.Value = CMSContext.CurrentSiteID; } else if (siteSelector.DropDownSingleSelect.Items.Count > 0) { siteSelector.Value = siteSelector.DropDownSingleSelect.Items[0].Value; } siteSelector.DropDownSingleSelect.SelectedValue = siteSelector.Value.ToString(); } // Show site selection in CMSDesk only for global administrator if ((SiteID > 0) && (!CMSContext.CurrentUser.IsGlobalAdministrator)) { plcSite.Visible = false; } else { plcSite.Visible = radSelectedLanguages.Checked; siteID = siteSelector.SiteID; } // Set grid visibility plcCultures.Visible = radSelectedLanguages.Checked; // Load user cultures DataTable dt = UserCultureInfoProvider.GetUserCultures(userId, siteID, null, null); currentValues = TextHelper.Join(";", SystemDataHelper.GetStringValues(dt, "CultureID")); if (!RequestHelper.IsPostBack()) { uniSelector.Value = currentValues; uniSelector.Reload(true); } } uniSelector.WhereCondition = "CultureID IN (SELECT CultureID FROM CMS_SiteCulture WHERE SiteID = " + siteID + ")"; uniSelector.OnSelectionChanged += uniSelector_OnSelectionChanged; radAllLanguages.CheckedChanged += radAllLanguages_CheckedChanged; radSelectedLanguages.CheckedChanged += radSelectedLanguages_CheckedChanged; } protected override void OnPreRender(EventArgs e) { if (!RequestHelper.IsPostBack()) { // Causes site selector to load data if (!siteSelector.UniSelector.HasData) { pnlLanguages.Visible = false; plcSite.Visible = false; ShowError(GetString("Administration-User_Edit_Roles.UserWithNoSites")); } } base.OnPreRender(e); } #endregion #region "Control events" protected void uniSelector_OnSelectionChanged(object sender, EventArgs e) { bool reloadNeeded = !CheckModifyPermissions(); if (!reloadNeeded) { bool invalidateUser = false; // Remove old items string newValues = ValidationHelper.GetString(uniSelector.Value, null); string items = DataHelper.GetNewItemsInList(newValues, currentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new cultures to word foreach (string item in newItems) { int cultureId = ValidationHelper.GetInteger(item, 0); UserCultureInfoProvider.RemoveUserFromCulture(userId, cultureId, siteID); } invalidateUser = true; } } // Add new items items = DataHelper.GetNewItemsInList(currentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new cultures to word foreach (string item in newItems) { int cultureId = ValidationHelper.GetInteger(item, 0); UserCultureInfoProvider.AddUserToCulture(userId, cultureId, siteID); } invalidateUser = true; } } // Invalidate user object if (invalidateUser) { ui.Invalidate(false); } ShowChangesSaved(); } else { ReloadCultures(); } } protected void radSelectedLanguages_CheckedChanged(object sender, EventArgs e) { if (CheckModifyPermissions()) { // Set value indicating whether the user have allowed cultures if (ui != null) { ui.UserHasAllowedCultures = radSelectedLanguages.Checked; UserInfoProvider.SetUserInfo(ui); uniSelector.Value = ""; uniSelector.Reload(true); plcCultures.Visible = true; ShowChangesSaved(); } } } protected void radAllLanguages_CheckedChanged(object sender, EventArgs e) { if (CheckModifyPermissions()) { // Set value indicating whether the user have allowed cultures if (ui != null) { // Remove user's allowed cultures UserCultureInfoProvider.RemoveUserFromAllCultures(userId); ui.UserHasAllowedCultures = radSelectedLanguages.Checked; UserInfoProvider.SetUserInfo(ui); plcCultures.Visible = false; ShowChangesSaved(); } } } /// /// Handles site selection change event. /// protected void UniSelector_OnSelectionChanged(object sender, EventArgs e) { uniSelector.Value = currentValues; uniSelector.Reload(true); pnlUpdate.Update(); } #endregion #region "Protected methods" /// /// Reloads the cultures in UniSelector. /// protected void ReloadCultures() { DataTable dt = UserCultureInfoProvider.GetUserCultures(userId, SiteID, null, null); if (!DataHelper.DataSourceIsEmpty(dt)) { currentValues = TextHelper.Join(";", SystemDataHelper.GetStringValues(dt, "CultureID")); uniSelector.Value = currentValues; uniSelector.Reload(true); } } /// /// Checks modify permissions. /// protected bool CheckModifyPermissions() { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify")) { RedirectToAccessDenied("CMS.Users", "Modify"); } // Check permissions string result = ValidateGlobalAndDeskAdmin(userId); if (result != String.Empty) { ShowError(result); return false; } return true; } /// /// Check whether current user is allowed to modify another user. /// /// Modified user /// "" or error message. protected static string ValidateGlobalAndDeskAdmin(int userId) { string result = String.Empty; if (CMSContext.CurrentUser.IsGlobalAdministrator) { return result; } UserInfo userInfo = UserInfoProvider.GetUserInfo(userId); if (userInfo == null) { result = ResHelper.GetString("Administration-User.WrongUserId"); } else { if (userInfo.IsGlobalAdministrator) { result = ResHelper.GetString("Administration-User.NotAllowedToModify"); } } return result; } #endregion }