PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/CMSWebParts/Membership/Registration/RegistrationForm.ascx.cs

https://bitbucket.org/kudutest2/kenticogit
C# | 1053 lines | 756 code | 159 blank | 138 comment | 84 complexity | 2e90932593dab25b36658e35a1c31695 MD5 | raw file
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. using CMS.PortalControls;
  12. using CMS.GlobalHelper;
  13. using CMS.TreeEngine;
  14. using CMS.CMSHelper;
  15. using CMS.SiteProvider;
  16. using CMS.EmailEngine;
  17. using CMS.EventLog;
  18. using CMS.DataEngine;
  19. using CMS.WebAnalytics;
  20. using CMS.LicenseProvider;
  21. using CMS.PortalEngine;
  22. using CMS.SettingsProvider;
  23. public partial class CMSWebParts_Membership_Registration_RegistrationForm : CMSAbstractWebPart
  24. {
  25. #region "Text properties"
  26. /// <summary>
  27. /// Gets or sets the Skin ID.
  28. /// </summary>
  29. public override string SkinID
  30. {
  31. get
  32. {
  33. return base.SkinID;
  34. }
  35. set
  36. {
  37. base.SkinID = value;
  38. SetSkinID(value);
  39. }
  40. }
  41. /// <summary>
  42. /// Gets or sets the first name text.
  43. /// </summary>
  44. public string FirstNameText
  45. {
  46. get
  47. {
  48. return DataHelper.GetNotEmpty(this.GetValue("FirstNameText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.FirstName$}"));
  49. }
  50. set
  51. {
  52. this.SetValue("FirstNameText", value);
  53. lblFirstName.Text = value;
  54. }
  55. }
  56. /// <summary>
  57. /// Gets or sets the last name text.
  58. /// </summary>
  59. public string LastNameText
  60. {
  61. get
  62. {
  63. return DataHelper.GetNotEmpty(this.GetValue("LastNameText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.LastName$}"));
  64. }
  65. set
  66. {
  67. this.SetValue("LastNameText", value);
  68. lblLastName.Text = value;
  69. }
  70. }
  71. /// <summary>
  72. /// Gets or sets the e-mail text.
  73. /// </summary>
  74. public string EmailText
  75. {
  76. get
  77. {
  78. return DataHelper.GetNotEmpty(this.GetValue("EmailText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.Email$}"));
  79. }
  80. set
  81. {
  82. this.SetValue("EmailText", value);
  83. lblEmail.Text = value;
  84. }
  85. }
  86. /// <summary>
  87. /// Gets or sets the password text.
  88. /// </summary>
  89. public string PasswordText
  90. {
  91. get
  92. {
  93. return DataHelper.GetNotEmpty(this.GetValue("PasswordText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.Password$}"));
  94. }
  95. set
  96. {
  97. this.SetValue("PasswordText", value);
  98. lblPassword.Text = value;
  99. }
  100. }
  101. /// <summary>
  102. /// Gets or sets the confirmation password text.
  103. /// </summary>
  104. public string ConfirmPasswordText
  105. {
  106. get
  107. {
  108. return DataHelper.GetNotEmpty(this.GetValue("ConfirmPasswordText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.ConfirmPassword$}"));
  109. }
  110. set
  111. {
  112. this.SetValue("ConfirmPasswordText", value);
  113. lblConfirmPassword.Text = value;
  114. }
  115. }
  116. /// <summary>
  117. /// Gets or sets the button text.
  118. /// </summary>
  119. public string ButtonText
  120. {
  121. get
  122. {
  123. return DataHelper.GetNotEmpty(this.GetValue("ButtonText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.Button$}"));
  124. }
  125. set
  126. {
  127. this.SetValue("ButtonText", value);
  128. btnOk.Text = value;
  129. }
  130. }
  131. /// <summary>
  132. /// Gets or sets the captcha label text.
  133. /// </summary>
  134. public string CaptchaText
  135. {
  136. get
  137. {
  138. return DataHelper.GetNotEmpty(this.GetValue("CaptchaText"), ResHelper.LocalizeString("{$Webparts_Membership_RegistrationForm.Captcha$}"));
  139. }
  140. set
  141. {
  142. this.SetValue("CaptchaText", value);
  143. lblCaptcha.Text = value;
  144. }
  145. }
  146. /// <summary>
  147. /// Gets or sets registration approval page URL.
  148. /// </summary>
  149. public string ApprovalPage
  150. {
  151. get
  152. {
  153. return DataHelper.GetNotEmpty(this.GetValue("ApprovalPage"), "");
  154. }
  155. set
  156. {
  157. this.SetValue("ApprovalPage", value);
  158. }
  159. }
  160. #endregion
  161. #region "Registration properties"
  162. /// <summary>
  163. /// Gets or sets the value that indicates whether email to user should be sent.
  164. /// </summary>
  165. public bool SendWelcomeEmail
  166. {
  167. get
  168. {
  169. return ValidationHelper.GetBoolean(this.GetValue("SendWelcomeEmail"), true);
  170. }
  171. set
  172. {
  173. this.SetValue("SendWelcomeEmail", value);
  174. }
  175. }
  176. /// <summary>
  177. /// Gets or sets the value that indicates whether user is enabled after registration.
  178. /// </summary>
  179. public bool EnableUserAfterRegistration
  180. {
  181. get
  182. {
  183. return ValidationHelper.GetBoolean(this.GetValue("EnableUserAfterRegistration"), true);
  184. }
  185. set
  186. {
  187. this.SetValue("EnableUserAfterRegistration", value);
  188. }
  189. }
  190. /// <summary>
  191. /// Gets or sets the sender email (from).
  192. /// </summary>
  193. public string FromAddress
  194. {
  195. get
  196. {
  197. return DataHelper.GetNotEmpty(this.GetValue("FromAddress"), SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSNoreplyEmailAddress"));
  198. }
  199. set
  200. {
  201. this.SetValue("FromAddress", value);
  202. }
  203. }
  204. /// <summary>
  205. /// Gets or sets the recipient email (to).
  206. /// </summary>
  207. public string ToAddress
  208. {
  209. get
  210. {
  211. return DataHelper.GetNotEmpty(this.GetValue("ToAddress"), SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSAdminEmailAddress"));
  212. }
  213. set
  214. {
  215. this.SetValue("ToAddress", value);
  216. }
  217. }
  218. /// <summary>
  219. /// Gets or sets the value that indicates whether after successful registration is
  220. /// notification email sent to the administrator
  221. /// </summary>
  222. public bool NotifyAdministrator
  223. {
  224. get
  225. {
  226. return ValidationHelper.GetBoolean(this.GetValue("NotifyAdministrator"), false);
  227. }
  228. set
  229. {
  230. this.SetValue("NotifyAdministrator", value);
  231. }
  232. }
  233. /// <summary>
  234. /// Gets or sets the roles where is user assigned after successful registration.
  235. /// </summary>
  236. public string AssignRoles
  237. {
  238. get
  239. {
  240. return ValidationHelper.GetString(this.GetValue("AssignToRoles"), "");
  241. }
  242. set
  243. {
  244. this.SetValue("AssignToRoles", value);
  245. }
  246. }
  247. /// <summary>
  248. /// Gets or sets the sites where is user assigned after successful registration.
  249. /// </summary>
  250. public string AssignToSites
  251. {
  252. get
  253. {
  254. return ValidationHelper.GetString(this.GetValue("AssignToSites"), "");
  255. }
  256. set
  257. {
  258. this.SetValue("AssignToSites", value);
  259. }
  260. }
  261. /// <summary>
  262. /// Gets or sets the message which is displayed after successful registration.
  263. /// </summary>
  264. public string DisplayMessage
  265. {
  266. get
  267. {
  268. return ValidationHelper.GetString(this.GetValue("DisplayMessage"), "");
  269. }
  270. set
  271. {
  272. this.SetValue("DisplayMessage", value);
  273. }
  274. }
  275. /// <summary>
  276. /// Gets or set the url where is user redirected after successful registration.
  277. /// </summary>
  278. public string RedirectToURL
  279. {
  280. get
  281. {
  282. return ValidationHelper.GetString(this.GetValue("RedirectToURL"), "");
  283. }
  284. set
  285. {
  286. this.SetValue("RedirectToURL", value);
  287. }
  288. }
  289. /// <summary>
  290. /// Gets or sets value that indicates whether the captcha image should be displayed.
  291. /// </summary>
  292. public bool DisplayCaptcha
  293. {
  294. get
  295. {
  296. return ValidationHelper.GetBoolean(this.GetValue("DisplayCaptcha"), false);
  297. }
  298. set
  299. {
  300. this.SetValue("DisplayCaptcha", value);
  301. plcCaptcha.Visible = value;
  302. }
  303. }
  304. /// <summary>
  305. /// Gets or sets the default starting alias path for newly registered user.
  306. /// </summary>
  307. public string StartingAliasPath
  308. {
  309. get
  310. {
  311. return ValidationHelper.GetString(this.GetValue("StartingAliasPath"), "");
  312. }
  313. set
  314. {
  315. this.SetValue("StartingAliasPath", value);
  316. }
  317. }
  318. /// <summary>
  319. /// Gets or sets the password minimal length.
  320. /// </summary>
  321. public int PasswordMinLength
  322. {
  323. get
  324. {
  325. return ValidationHelper.GetInteger(this.GetValue("PasswordMinLength"), 0);
  326. }
  327. set
  328. {
  329. this.SetValue("PasswordMinLength", 0);
  330. }
  331. }
  332. #endregion
  333. #region "Conversion properties"
  334. /// <summary>
  335. /// Gets or sets the conversion track name used after successful registration.
  336. /// </summary>
  337. public string TrackConversionName
  338. {
  339. get
  340. {
  341. return ValidationHelper.GetString(this.GetValue("TrackConversionName"), "");
  342. }
  343. set
  344. {
  345. if (value.Length > 400)
  346. {
  347. value = value.Substring(0, 400);
  348. }
  349. this.SetValue("TrackConversionName", value);
  350. }
  351. }
  352. /// <summary>
  353. /// Gets or sets the conversion value used after successful registration.
  354. /// </summary>
  355. public double ConversionValue
  356. {
  357. get
  358. {
  359. return ValidationHelper.GetDouble(GetValue("ConversionValue"), 0);
  360. }
  361. set
  362. {
  363. this.SetValue("ConversionValue", value);
  364. }
  365. }
  366. #endregion
  367. #region "Methods"
  368. /// <summary>
  369. /// Content loaded event handler.
  370. /// </summary>
  371. public override void OnContentLoaded()
  372. {
  373. base.OnContentLoaded();
  374. SetupControl();
  375. }
  376. /// <summary>
  377. /// Reloads data.
  378. /// </summary>
  379. public override void ReloadData()
  380. {
  381. base.ReloadData();
  382. SetupControl();
  383. }
  384. /// <summary>
  385. /// Initializes the control properties.
  386. /// </summary>
  387. protected void SetupControl()
  388. {
  389. if (this.StopProcessing)
  390. {
  391. // Do not process
  392. rfvFirstName.Enabled = false;
  393. rfvEmail.Enabled = false;
  394. rfvConfirmPassword.Enabled = false;
  395. rfvLastName.Enabled = false;
  396. }
  397. else
  398. {
  399. // Set default visibility
  400. pnlForm.Visible = true;
  401. lblText.Visible = false;
  402. // Set texts
  403. lblFirstName.Text = this.FirstNameText;
  404. lblLastName.Text = this.LastNameText;
  405. lblEmail.Text = this.EmailText;
  406. lblPassword.Text = this.PasswordText;
  407. lblConfirmPassword.Text = this.ConfirmPasswordText;
  408. btnOk.Text = this.ButtonText;
  409. lblCaptcha.Text = this.CaptchaText;
  410. // Set required field validators texts
  411. rfvFirstName.ErrorMessage = GetString("Webparts_Membership_RegistrationForm.rfvFirstName");
  412. rfvLastName.ErrorMessage = GetString("Webparts_Membership_RegistrationForm.rfvLastName");
  413. rfvEmail.ErrorMessage = GetString("Webparts_Membership_RegistrationForm.rfvEmail");
  414. rfvConfirmPassword.ErrorMessage = GetString("Webparts_Membership_RegistrationForm.rfvConfirmPassword");
  415. // Add unique validation form
  416. rfvFirstName.ValidationGroup = ClientID + "_registration";
  417. rfvLastName.ValidationGroup = ClientID + "_registration";
  418. rfvEmail.ValidationGroup = ClientID + "_registration";
  419. passStrength.ValidationGroup = ClientID + "_registration";
  420. rfvConfirmPassword.ValidationGroup = ClientID + "_registration";
  421. btnOk.ValidationGroup = ClientID + "_registration";
  422. // Set SkinID
  423. if (!this.StandAlone && (this.PageCycle < PageCycleEnum.Initialized))
  424. {
  425. SetSkinID(this.SkinID);
  426. }
  427. plcCaptcha.Visible = this.DisplayCaptcha;
  428. // WAI validation
  429. lblPassword.AssociatedControlClientID = passStrength.InputClientID;
  430. }
  431. }
  432. /// <summary>
  433. /// Sets SkinID.
  434. /// </summary>
  435. void SetSkinID(string skinId)
  436. {
  437. if (skinId != "")
  438. {
  439. lblFirstName.SkinID = skinId;
  440. lblLastName.SkinID = skinId;
  441. lblEmail.SkinID = skinId;
  442. lblPassword.SkinID = skinId;
  443. lblConfirmPassword.SkinID = skinId;
  444. txtFirstName.SkinID = skinId;
  445. txtLastName.SkinID = skinId;
  446. txtEmail.SkinID = skinId;
  447. passStrength.SkinID = skinId;
  448. txtConfirmPassword.SkinID = skinId;
  449. btnOk.SkinID = skinId;
  450. }
  451. }
  452. /// <summary>
  453. /// OK click handler (Proceed registration).
  454. /// </summary>
  455. protected void btnOK_Click(object sender, EventArgs e)
  456. {
  457. if ((this.PageManager.ViewMode == ViewModeEnum.Design) || (this.HideOnCurrentPage) || (!this.IsVisible))
  458. {
  459. // Do not process
  460. }
  461. else
  462. {
  463. String siteName = CMSContext.CurrentSiteName;
  464. #region "Banned IPs"
  465. // Ban IP addresses which are blocked for registration
  466. if (!BannedIPInfoProvider.IsAllowed(siteName, BanControlEnum.Registration))
  467. {
  468. lblError.Visible = true;
  469. lblError.Text = GetString("banip.ipisbannedregistration");
  470. return;
  471. }
  472. #endregion
  473. #region "Check Email & password"
  474. // Check whether user with same email does not exist
  475. UserInfo ui = UserInfoProvider.GetUserInfo(txtEmail.Text);
  476. SiteInfo si = CMSContext.CurrentSite;
  477. UserInfo siteui = UserInfoProvider.GetUserInfo(UserInfoProvider.EnsureSitePrefixUserName(txtEmail.Text,si));
  478. if ((ui != null) || (siteui != null))
  479. {
  480. lblError.Visible = true;
  481. lblError.Text = GetString("Webparts_Membership_RegistrationForm.UserAlreadyExists").Replace("%%name%%", HTMLHelper.HTMLEncode(txtEmail.Text));
  482. return;
  483. }
  484. // Check whether password is same
  485. if (passStrength.Text != txtConfirmPassword.Text)
  486. {
  487. lblError.Visible = true;
  488. lblError.Text = GetString("Webparts_Membership_RegistrationForm.PassworDoNotMatch");
  489. return;
  490. }
  491. if ((this.PasswordMinLength > 0) && (passStrength.Text.Length < this.PasswordMinLength))
  492. {
  493. lblError.Visible = true;
  494. lblError.Text = String.Format(GetString("Webparts_Membership_RegistrationForm.PasswordMinLength"), this.PasswordMinLength.ToString());
  495. return;
  496. }
  497. if (!passStrength.IsValid())
  498. {
  499. lblError.Visible = true;
  500. lblError.Text = UserInfoProvider.GetPolicyViolationMessage(CMSContext.CurrentSiteName);
  501. return;
  502. }
  503. if (!ValidationHelper.IsEmail(txtEmail.Text.ToLower()))
  504. {
  505. lblError.Visible = true;
  506. lblError.Text = GetString("Webparts_Membership_RegistrationForm.EmailIsNotValid");
  507. return;
  508. }
  509. #endregion
  510. #region "Captcha"
  511. // Check if captcha is required
  512. if (this.DisplayCaptcha)
  513. {
  514. // Verifiy captcha text
  515. if (!scCaptcha.IsValid())
  516. {
  517. // Display error message if catcha text is not valid
  518. lblError.Visible = true;
  519. lblError.Text = GetString("Webparts_Membership_RegistrationForm.captchaError");
  520. return;
  521. }
  522. else
  523. {
  524. // Generate new captcha
  525. scCaptcha.GenerateNew();
  526. }
  527. }
  528. #endregion
  529. #region "User properties"
  530. ui = new UserInfo();
  531. ui.PreferredCultureCode = "";
  532. ui.Email = txtEmail.Text.Trim();
  533. ui.FirstName = txtFirstName.Text.Trim();
  534. ui.FullName = txtFirstName.Text.Trim() + " " + txtLastName.Text.Trim();
  535. ui.LastName = txtLastName.Text.Trim();
  536. ui.MiddleName = "";
  537. // User name as put by user (no site prefix included)
  538. String plainUserName = txtEmail.Text.Trim();
  539. ui.UserName = plainUserName;
  540. // Ensure site prefixes
  541. if (UserInfoProvider.UserNameSitePrefixEnabled(siteName))
  542. {
  543. ui.UserName = UserInfoProvider.EnsureSitePrefixUserName(txtEmail.Text.Trim(), si);
  544. }
  545. ui.Enabled = this.EnableUserAfterRegistration;
  546. ui.IsEditor = false;
  547. ui.IsGlobalAdministrator = false;
  548. ui.UserURLReferrer = CMSContext.CurrentUser.URLReferrer;
  549. ui.UserCampaign = CMSContext.Campaign;
  550. ui.UserSettings.UserRegistrationInfo.IPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  551. ui.UserSettings.UserRegistrationInfo.Agent = HttpContext.Current.Request.UserAgent;
  552. // Check whether confirmation is required
  553. bool requiresConfirmation = SettingsKeyProvider.GetBoolValue(siteName + ".CMSRegistrationEmailConfirmation");
  554. bool requiresAdminApprove = false;
  555. if (!requiresConfirmation)
  556. {
  557. // If confirmation is not required check whether administration approval is reqiures
  558. if ((requiresAdminApprove = SettingsKeyProvider.GetBoolValue(siteName + ".CMSRegistrationAdministratorApproval")))
  559. {
  560. ui.Enabled = false;
  561. ui.UserSettings.UserWaitingForApproval = true;
  562. }
  563. }
  564. else
  565. {
  566. // EnableUserAfterRegistration is overrided by requiresConfirmation - user needs to be confirmed before enable
  567. ui.Enabled = false;
  568. }
  569. // Set user's starting alias path
  570. if (!String.IsNullOrEmpty(this.StartingAliasPath))
  571. {
  572. ui.UserStartingAliasPath = CMSContext.ResolveCurrentPath(this.StartingAliasPath);
  573. }
  574. #endregion
  575. #region "Reserved names"
  576. // Check for reserved user names like administrator, sysadmin, ...
  577. if (UserInfoProvider.NameIsReserved(siteName, plainUserName))
  578. {
  579. lblError.Visible = true;
  580. lblError.Text = GetString("Webparts_Membership_RegistrationForm.UserNameReserved").Replace("%%name%%", HTMLHelper.HTMLEncode(Functions.GetFormattedUserName(ui.UserName, true)));
  581. return;
  582. }
  583. if (UserInfoProvider.NameIsReserved(siteName, plainUserName))
  584. {
  585. lblError.Visible = true;
  586. lblError.Text = GetString("Webparts_Membership_RegistrationForm.UserNameReserved").Replace("%%name%%", HTMLHelper.HTMLEncode(ui.UserNickName));
  587. return;
  588. }
  589. #endregion
  590. #region "License limitations"
  591. // Check limitations for Global administrator
  592. if (ui.IsGlobalAdministrator)
  593. {
  594. if (!UserInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.GlobalAdmininistrators, VersionActionEnum.Insert, false))
  595. {
  596. lblError.Visible = true;
  597. lblError.Text = GetString("License.MaxItemsReachedGlobal");
  598. return;
  599. }
  600. }
  601. // Check limitations for editors
  602. if (ui.IsEditor)
  603. {
  604. if (!UserInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Editors, VersionActionEnum.Insert, false))
  605. {
  606. lblError.Visible = true;
  607. lblError.Text = GetString("License.MaxItemsReachedEditor");
  608. return;
  609. }
  610. }
  611. // Check limitations for site members
  612. if (!UserInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.SiteMembers, VersionActionEnum.Insert, false))
  613. {
  614. lblError.Visible = true;
  615. lblError.Text = GetString("License.MaxItemsReachedSiteMember");
  616. return;
  617. }
  618. #endregion
  619. // Check whether email is unique if it is required
  620. string checkSites = (String.IsNullOrEmpty(this.AssignToSites)) ? siteName : this.AssignToSites;
  621. if (!UserInfoProvider.IsEmailUnique(txtEmail.Text.Trim(), checkSites, 0))
  622. {
  623. lblError.Visible = true;
  624. lblError.Text = GetString("UserInfo.EmailAlreadyExist");
  625. return;
  626. }
  627. // Set password
  628. UserInfoProvider.SetPassword(ui, passStrength.Text);
  629. #region "Welcome Emails (confirmation, waiting for approval)"
  630. bool error = false;
  631. EventLogProvider ev = new EventLogProvider();
  632. EmailTemplateInfo template = null;
  633. string emailSubject = null;
  634. // Send welcome message with username and password, with confirmation link, user must confirm registration
  635. if (requiresConfirmation)
  636. {
  637. template = EmailTemplateProvider.GetEmailTemplate("RegistrationConfirmation", siteName);
  638. emailSubject = EmailHelper.GetSubject(template, GetString("RegistrationForm.RegistrationConfirmationEmailSubject"));
  639. }
  640. // Send welcome message with username and password, with information that user must be approved by administrator
  641. else if (this.SendWelcomeEmail)
  642. {
  643. if (requiresAdminApprove)
  644. {
  645. template = EmailTemplateProvider.GetEmailTemplate("Membership.RegistrationWaitingForApproval", siteName);
  646. emailSubject = EmailHelper.GetSubject(template, GetString("RegistrationForm.RegistrationWaitingForApprovalSubject"));
  647. }
  648. // Send welcome message with username and password, user can logon directly
  649. else
  650. {
  651. template = EmailTemplateProvider.GetEmailTemplate("Membership.Registration", siteName);
  652. emailSubject = EmailHelper.GetSubject(template, GetString("RegistrationForm.RegistrationSubject"));
  653. }
  654. }
  655. if (template != null)
  656. {
  657. // Rretrieve contact ID for confirmation e-mail
  658. int contactId = 0;
  659. if (ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(siteName))
  660. {
  661. // Check if loggin registration activity is enabled
  662. if (ActivitySettingsHelper.UserRegistrationEnabled(siteName))
  663. {
  664. if (ActivitySettingsHelper.ActivitiesEnabledForThisUser(ui))
  665. {
  666. contactId = ModuleCommands.OnlineMarketingGetUserLoginContactID(ui);
  667. }
  668. }
  669. }
  670. // Prepare macro replacements
  671. string[,] replacements = new string[6, 2];
  672. replacements[0, 0] = "confirmaddress";
  673. replacements[0, 1] = (this.ApprovalPage != String.Empty) ? URLHelper.GetAbsoluteUrl(this.ApprovalPage) : URLHelper.GetAbsoluteUrl("~/CMSPages/Dialogs/UserRegistration.aspx");
  674. replacements[0, 1] += "?userguid=" + ui.UserGUID + (contactId > 0?"&contactid=" + contactId.ToString():String.Empty);
  675. replacements[1, 0] = "username";
  676. replacements[1, 1] = plainUserName;
  677. replacements[2, 0] = "password";
  678. replacements[2, 1] = passStrength.Text;
  679. replacements[3, 0] = "Email";
  680. replacements[3, 1] = txtEmail.Text;
  681. replacements[4, 0] = "FirstName";
  682. replacements[4, 1] = txtFirstName.Text;
  683. replacements[5, 0] = "LastName";
  684. replacements[5, 1] = txtLastName.Text;
  685. // Set resolver
  686. ContextResolver resolver = CMSContext.CurrentResolver;
  687. resolver.SourceParameters = replacements;
  688. resolver.EncodeResolvedValues = true;
  689. // Email message
  690. EmailMessage email = new EmailMessage();
  691. email.EmailFormat = EmailFormatEnum.Default;
  692. email.Recipients = ui.Email;
  693. email.From = EmailHelper.GetSender(template, SettingsKeyProvider.GetStringValue(siteName + ".CMSNoreplyEmailAddress"));
  694. email.Body = resolver.ResolveMacros(template.TemplateText);
  695. resolver.EncodeResolvedValues = false;
  696. email.PlainTextBody = resolver.ResolveMacros(template.TemplatePlainText);
  697. email.Subject = resolver.ResolveMacros(emailSubject);
  698. email.CcRecipients = template.TemplateCc;
  699. email.BccRecipients = template.TemplateBcc;
  700. try
  701. {
  702. MetaFileInfoProvider.ResolveMetaFileImages(email, template.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);
  703. // Send the e-mail immediately
  704. EmailSender.SendEmail(siteName, email, true);
  705. }
  706. catch (Exception ex)
  707. {
  708. ev.LogEvent("E", "RegistrationForm - SendEmail", ex);
  709. error = true;
  710. }
  711. }
  712. // If there was some error, user must be deleted
  713. if (error)
  714. {
  715. lblError.Visible = true;
  716. lblError.Text = GetString("RegistrationForm.UserWasNotCreated");
  717. // Email was not send, user can't be approved - delete it
  718. UserInfoProvider.DeleteUser(ui);
  719. return;
  720. }
  721. #endregion
  722. #region "Administrator notification email"
  723. // Notify administrator if enabled and e-mail confirmation is not required
  724. if (!requiresConfirmation && this.NotifyAdministrator && (this.FromAddress != String.Empty) && (this.ToAddress != String.Empty))
  725. {
  726. EmailTemplateInfo mEmailTemplate = null;
  727. if (requiresAdminApprove)
  728. {
  729. mEmailTemplate = EmailTemplateProvider.GetEmailTemplate("Registration.Approve", siteName);
  730. }
  731. else
  732. {
  733. mEmailTemplate = EmailTemplateProvider.GetEmailTemplate("Registration.New", siteName);
  734. }
  735. if (mEmailTemplate == null)
  736. {
  737. // Log missing e-mail template
  738. ev.LogEvent("E", DateTime.Now, "RegistrationForm", "GetEmailTemplate", HTTPHelper.GetAbsoluteUri());
  739. }
  740. else
  741. {
  742. string[,] replacements = new string[4, 2];
  743. replacements[0, 0] = "firstname";
  744. replacements[0, 1] = ui.FirstName;
  745. replacements[1, 0] = "lastname";
  746. replacements[1, 1] = ui.LastName;
  747. replacements[2, 0] = "email";
  748. replacements[2, 1] = ui.Email;
  749. replacements[3, 0] = "username";
  750. replacements[3, 1] = plainUserName;
  751. ContextResolver resolver = CMSContext.CurrentResolver;
  752. resolver.SourceParameters = replacements;
  753. resolver.EncodeResolvedValues = true;
  754. EmailMessage message = new EmailMessage();
  755. message.EmailFormat = EmailFormatEnum.Default;
  756. message.From = EmailHelper.GetSender(mEmailTemplate, this.FromAddress);
  757. message.Recipients = this.ToAddress;
  758. message.Body = resolver.ResolveMacros(mEmailTemplate.TemplateText);
  759. resolver.EncodeResolvedValues = false;
  760. message.PlainTextBody = resolver.ResolveMacros(mEmailTemplate.TemplatePlainText);
  761. message.Subject = resolver.ResolveMacros(EmailHelper.GetSubject(mEmailTemplate, GetString("RegistrationForm.EmailSubject")));
  762. message.CcRecipients = mEmailTemplate.TemplateCc;
  763. message.BccRecipients = mEmailTemplate.TemplateBcc;
  764. try
  765. {
  766. // Attach template meta-files to e-mail
  767. MetaFileInfoProvider.ResolveMetaFileImages(message, mEmailTemplate.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);
  768. EmailSender.SendEmail(siteName, message);
  769. }
  770. catch
  771. {
  772. ev.LogEvent("E", DateTime.Now, "Membership", "RegistrationEmail", CMSContext.CurrentSite.SiteID);
  773. }
  774. }
  775. }
  776. #endregion
  777. #region "Web analytics"
  778. // Track successful registration conversion
  779. if (this.TrackConversionName != String.Empty)
  780. {
  781. if (AnalyticsHelper.AnalyticsEnabled(siteName) && AnalyticsHelper.TrackConversionsEnabled(siteName) && !AnalyticsHelper.IsIPExcluded(siteName, HTTPHelper.UserHostAddress))
  782. {
  783. // Log conversion
  784. HitLogProvider.LogConversions(siteName, CMSContext.PreferredCultureCode, this.TrackConversionName, 0, ConversionValue);
  785. }
  786. }
  787. // Log registered user if confirmation is not required
  788. if (!requiresConfirmation)
  789. {
  790. AnalyticsHelper.LogRegisteredUser(siteName, ui);
  791. }
  792. #endregion
  793. #region "On-line marketing - activity"
  794. // Log registered user if confirmation is not required
  795. if (!requiresConfirmation)
  796. {
  797. if (ActivitySettingsHelper.ActivitiesEnabledAndModuleLoaded(siteName))
  798. {
  799. int contactId = 0;
  800. // Log registration activity
  801. if (ActivitySettingsHelper.UserRegistrationEnabled(siteName))
  802. {
  803. if (ActivitySettingsHelper.ActivitiesEnabledForThisUser(ui))
  804. {
  805. contactId = ModuleCommands.OnlineMarketingGetUserLoginContactID(ui);
  806. ActivityLogProvider.LogRegistrationActivity(contactId,
  807. ui, URLHelper.CurrentRelativePath, CMSContext.CurrentDocument.DocumentID, siteName, CMSContext.Campaign, CMSContext.CurrentDocument.DocumentCulture);
  808. }
  809. }
  810. // Log login activity
  811. if (ui.Enabled && ActivitySettingsHelper.UserLoginEnabled(siteName) )
  812. {
  813. if (contactId <= 0)
  814. {
  815. contactId = ModuleCommands.OnlineMarketingGetUserLoginContactID(ui);
  816. }
  817. ActivityLogHelper.UpdateContactLastLogon(contactId); // Update last logon time
  818. if (ActivitySettingsHelper.ActivitiesEnabledForThisUser(ui))
  819. {
  820. ActivityLogProvider.LogLoginActivity(contactId,
  821. ui, URLHelper.CurrentRelativePath, CMSContext.CurrentDocument.DocumentID, siteName, CMSContext.Campaign, CMSContext.CurrentDocument.DocumentCulture);
  822. }
  823. }
  824. }
  825. }
  826. #endregion
  827. #region "Roles & authentication"
  828. string[] roleList = this.AssignRoles.Split(';');
  829. string[] siteList;
  830. // If AssignToSites field set
  831. if (!String.IsNullOrEmpty(this.AssignToSites))
  832. {
  833. siteList = this.AssignToSites.Split(';');
  834. }
  835. else // If not set user current site
  836. {
  837. siteList = new string[] { siteName };
  838. }
  839. foreach (string sn in siteList)
  840. {
  841. // Add new user to the current site
  842. UserInfoProvider.AddUserToSite(ui.UserName, sn);
  843. foreach (string roleName in roleList)
  844. {
  845. if (!String.IsNullOrEmpty(roleName))
  846. {
  847. String s = roleName.StartsWith(".") ? "" : siteName;
  848. // Add user to desired roles
  849. if (RoleInfoProvider.RoleExists(roleName, s))
  850. {
  851. UserInfoProvider.AddUserToRole(ui.UserName, roleName, s);
  852. }
  853. }
  854. }
  855. }
  856. if (this.DisplayMessage.Trim() != String.Empty)
  857. {
  858. pnlForm.Visible = false;
  859. lblText.Visible = true;
  860. lblText.Text = this.DisplayMessage;
  861. }
  862. else
  863. {
  864. if (ui.Enabled)
  865. {
  866. CMSContext.AuthenticateUser(ui.UserName, true);
  867. }
  868. if (this.RedirectToURL != String.Empty)
  869. {
  870. URLHelper.Redirect(this.RedirectToURL);
  871. }
  872. else if (QueryHelper.GetString("ReturnURL", "") != String.Empty)
  873. {
  874. string url = QueryHelper.GetString("ReturnURL", "");
  875. // Do url decode
  876. url = Server.UrlDecode(url);
  877. // Check that url is relative path or hash is ok
  878. if (url.StartsWith("~") || url.StartsWith("/") || QueryHelper.ValidateHash("hash"))
  879. {
  880. URLHelper.Redirect(url);
  881. }
  882. // Absolute path with wrong hash
  883. else
  884. {
  885. URLHelper.Redirect(ResolveUrl("~/CMSMessages/Error.aspx?title=" + ResHelper.GetString("general.badhashtitle") + "&text=" + ResHelper.GetString("general.badhashtext")));
  886. }
  887. }
  888. }
  889. #endregion
  890. lblError.Visible = false;
  891. }
  892. }
  893. #endregion
  894. }