HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/TDijk1/erp-apps.eu/wwwroot/CMSModules/Membership/Pages/Users/User_New.aspx.cs
using System;

using CMS.Base;
using CMS.FormEngine;
using CMS.Helpers;
using CMS.Membership;
using CMS.PortalEngine;
using CMS.SiteProvider;
using CMS.UIControls;

public partial class CMSModules_Membership_Pages_Users_User_New : CMSUsersPage
{
    #region "Variables"

    private String userName = String.Empty;
    private bool error;

    #endregion


    private bool AllowAssignToWebsite
    {
        get
        {
            return (SiteID <= 0) && (SiteContext.CurrentSiteID > 0) && CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin);
        }
    }


    #region "Public methods"

    /// <summary>
    /// Shows the specified error message, optionally with a tooltip text.
    /// </summary>
    /// <param name="text">Error message text</param>
    /// <param name="description">Additional description</param>
    /// <param name="tooltipText">Tooltip text</param>
    /// <param name="persistent">Indicates if the message is persistent</param>
    public override void ShowError(string text, string description = null, string tooltipText = null, bool persistent = true)
    {
        base.ShowError(text, description, tooltipText, persistent);
        error = true;
    }

    #endregion


    protected void Page_Load(object sender, EventArgs e)
    {
        // Check "modify" permission
        if (!CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify"))
        {
            RedirectToAccessDenied("CMS.Users", "Modify");
        }

        RequiredFieldValidatorFullName.ErrorMessage = GetString("Administration-User_New.RequiresFullName");

        if (!RequestHelper.IsPostBack())
        {
            chkEnabled.Checked = true;

            if (!CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin))
            {
                // Remove global and site admin options for non global admins
                drpPrivilegeLevel.ExcludedValues = (int)UserPrivilegeLevelEnum.GlobalAdmin + ";" + (int)UserPrivilegeLevelEnum.Admin;
            }

            drpPrivilegeLevel.Value = (int)UserPrivilegeLevelEnum.Editor;
        }

        if (AllowAssignToWebsite)
        {
            chkAssignToSite.Text = String.Format("{0} {1}", GetString("general.assignwithwebsite"), HTMLHelper.HTMLEncode(SiteContext.CurrentSite.DisplayName));
            plcAssignToSite.Visible = true;
        }

        PageBreadcrumbs.Items.Add(new BreadcrumbItem
        {
            Text = GetString("general.users"),
            RedirectUrl = UIContextHelper.GetElementUrl("CMS.Users", QueryHelper.GetString("ParentElem", ""), false),
            Target = "_parent"
        });

        PageBreadcrumbs.Items.Add(new BreadcrumbItem
        {
            Text = GetString("Administration-User_New.CurrentUser")
        });
    }


    protected void btnSave_Click(object sender, EventArgs e)
    {
        // Email format validation
        string emailAddress = txtEmailAddress.Text.Trim();
        if (!String.IsNullOrEmpty(emailAddress) && !ValidationHelper.IsEmail(emailAddress))
        {
            ShowError(GetString("Administration-User_New.WrongEmailFormat"));
            return;
        }

        // Find whether user name is valid
        string result = null;
        if (!ucUserName.IsValid())
        {
            result = ucUserName.ValidationError;
        }

        // Additional validation
        if (String.IsNullOrEmpty(result))
        {
            result = new Validator().NotEmpty(txtFullName.Text, GetString("Administration-User_New.RequiresFullName")).Result;
        }

        userName = ValidationHelper.GetString(ucUserName.Value, String.Empty).Trim();

        // Check if user with the same user name exists
        if (UserInfoProvider.GetUserInfo(userName) != null)
        {
            ShowError(GetString("Administration-User_New.UserExists"));
            return;
        }

        SiteInfo siteInfo = SiteContext.CurrentSite;

        // Check if username with site prefix exists on current site
        var userNameWithPrefix = UserInfoProvider.GetUserInfo(UserInfoProvider.EnsureSitePrefixUserName(userName, siteInfo));
        if (userNameWithPrefix != null)
        {
            ShowError(GetString("Administration-User_New.siteprefixeduserexists"));
            return;
        }

        // If site prefixed allowed - add site prefix to user name
        if (((SiteID != 0) || (chkAssignToSite.Checked && AllowAssignToWebsite)) && UserInfoProvider.UserNameSitePrefixEnabled(siteInfo.SiteName))
        {
            if (!UserInfoProvider.IsSitePrefixedUser(userName))
            {
                userName = UserInfoProvider.EnsureSitePrefixUserName(userName, siteInfo);
            }
        }
        // User without site prefix is going to be created -> check if site prefixed user does not exist in solution
        else if (!UserInfoProvider.IsUserNamePrefixUnique(userName, 0))
        {
            ShowError(GetString("Administration-User_New.siteprefixeduserexists"));
            return;
        }

        if (String.IsNullOrEmpty(result))
        {
            if (txtConfirmPassword.Text == passStrength.Text)
            {
                // Check whether password is valid according to policy
                if (passStrength.IsValid())
                {
                    int userId = SaveNewUser();
                    if (userId != -1)
                    {
                        var uiElementUrl = UIContextHelper.GetElementUrl("CMS.Users", QueryHelper.GetString("editelem", ""), false);
                        var url = URLHelper.AppendQuery(uiElementUrl, "siteid=" + SiteID + "&objectid=" + userId);
                        URLHelper.Redirect(url);
                    }
                }
                else
                {
                    ShowError(AuthenticationHelper.GetPolicyViolationMessage(siteInfo.SiteName));
                }
            }
            else
            {
                ShowError(GetString("Administration-User_Edit_Password.PasswordsDoNotMatch"));
            }
        }
        else
        {
            ShowError(result);
        }
    }


    /// <summary>
    /// Saves new user's data into DB.
    /// </summary>
    /// <returns>Returns ID of created user</returns>
    protected int SaveNewUser()
    {
        UserInfo ui = new UserInfo();

        // Load default values
        FormHelper.LoadDefaultValues("cms.user", ui);

        string emailAddress = txtEmailAddress.Text.Trim();
        ui.PreferredCultureCode = "";
        ui.Email = emailAddress;
        ui.FirstName = "";
        ui.FullName = txtFullName.Text;
        ui.LastName = "";
        ui.MiddleName = "";
        ui.UserName = userName;
        ui.Enabled = chkEnabled.Checked;
        ui.IsExternal = false;

        // Set privilege level, global admin may set all levels, rest only editor
        UserPrivilegeLevelEnum privilegeLevel = (UserPrivilegeLevelEnum)drpPrivilegeLevel.Value.ToInteger(0);
        if (CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin)
            || (privilegeLevel == UserPrivilegeLevelEnum.None) || (privilegeLevel == UserPrivilegeLevelEnum.Editor))
        {
            ui.SetPrivilegeLevel(privilegeLevel);
        }

        // Check license limitations
        if (SiteID > 0)
        {
            string errorMessage = String.Empty;
            UserInfoProvider.CheckLicenseLimitation(ui, ref errorMessage);

            if (!String.IsNullOrEmpty(errorMessage))
            {
                ShowError(errorMessage);
            }
        }

        // Check whether email is unique if it is required
        string siteName = SiteName;
        bool assignUserToSite = chkAssignToSite.Checked && AllowAssignToWebsite;
        if (assignUserToSite)
        {
            siteName = SiteContext.CurrentSiteName;
        }

        if (!UserInfoProvider.IsEmailUnique(emailAddress, siteName, 0))
        {
            ShowError(GetString("UserInfo.EmailAlreadyExist"));
            return -1;
        }

        if (!error)
        {
            // Set password and save object
            UserInfoProvider.SetPassword(ui, passStrength.Text);

            // Add user to current site
            if ((SiteID > 0) || assignUserToSite)
            {
                UserInfoProvider.AddUserToSite(ui.UserName, siteName);
            }

            return ui.UserID;
        }

        return -1;
    }
}