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.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_Membership_Pages_Users_User_Edit_Sites : CMSUsersPage { #region "Variables" private int userId = 0; private string currentValues = string.Empty; private UserInfo ui = null; #endregion protected void Page_Load(object sender, EventArgs e) { lblAvialable.Text = GetString("User_Sites.Available"); // Get user ID userId = QueryHelper.GetInteger("userid", 0); if (userId > 0) { // Check that only global administrator can edit global administrator's accouns ui = UserInfoProvider.GetUserInfo(userId); EditedObject = ui; CheckUserAvaibleOnSite(ui); if (!CheckGlobalAdminEdit(ui)) { plcTable.Visible = false; ShowError(GetString("Administration-User_List.ErrorGlobalAdmin")); } else { // Get the user sites currentValues = GetUserSites(); if (!RequestHelper.IsPostBack()) { usSites.Value = currentValues; } usSites.OnSelectionChanged += usSites_OnSelectionChanged; } } } /// /// Returns string with site ids where user is member. /// private string GetUserSites() { DataSet ds = UserSiteInfoProvider.GetUserSites("SiteID", "UserID = " + userId, null, 0); if (!DataHelper.DataSourceIsEmpty(ds)) { return TextHelper.Join(";", SystemDataHelper.GetStringValues(ds.Tables[0], "SiteID")); } return String.Empty; } /// /// Handles site selector selection change event. /// protected void usSites_OnSelectionChanged(object sender, EventArgs e) { SaveSites(); } protected void SaveSites() { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify")) { RedirectToAccessDenied("CMS.Users", "Modify"); } // Remove old items string newValues = ValidationHelper.GetString(usSites.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 items to site foreach (string item in newItems) { int siteId = ValidationHelper.GetInteger(item, 0); // remove user from the site UserInfoProvider.RemoveUserFromSite(userId, siteId); // Remove user's allowed cultures for this site UserCultureInfoProvider.RemoveUserFromSite(userId, siteId); } } } // Add new items items = DataHelper.GetNewItemsInList(currentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { bool falseValues = false; // Add all new items to site foreach (string item in newItems) { int siteId = ValidationHelper.GetInteger(item, 0); SiteInfo si = SiteInfoProvider.GetSiteInfo(siteId); if (si != null) { if (ui.IsEditor) { if (!UserInfoProvider.LicenseVersionCheck(si.DomainName, FeatureEnum.Editors, VersionActionEnum.Insert, false)) { falseValues = true; ShowError(GetString("LicenseVersion.EditorSite")); continue; } } if (!UserInfoProvider.LicenseVersionCheck(si.DomainName, FeatureEnum.SiteMembers, VersionActionEnum.Insert, false)) { falseValues = true; ShowError(GetString("LicenseVersion.SiteMembersSite")); continue; } // Check if email would be unique in site if (UserInfoProvider.IsEmailUnique(ui.Email, si.SiteName, ui.UserID)) { UserSiteInfoProvider.AddUserToSite(ui, si); } else { falseValues = true; ShowError(GetString("UserInfo.EmailAlreadyExistInSomeSite")); } } } // If some of sites could not be assigned reload selector value if (falseValues) { usSites.Value = GetUserSites(); usSites.Reload(true); } } } ShowChangesSaved(); } }