SetupWizard.aspx.cs
上传用户:zhuzg88
上传日期:2018-04-24
资源大小:868k
文件大小:16k
源码类别:

SilverLight

开发平台:

C#

  1. // SilverlightDesktop.Net - http://www.SilverlightDesktop.net
  2. // Copyright (c) 2008
  3. // by SilverlightDesktop.Net
  4. //
  5. // DotNetNuke® - http://www.dotnetnuke.com
  6. // Copyright (c) 2002-2008
  7. // by DotNetNuke Corporation
  8. //
  9. // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
  10. // documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
  11. // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
  12. // to permit persons to whom the Software is furnished to do so, subject to the following conditions:
  13. //
  14. // The above copyright notice and this permission notice shall be included in all copies or substantial portions 
  15. // of the Software.
  16. //
  17. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
  18. // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
  19. // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
  20. // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  21. // DEALINGS IN THE SOFTWARE.
  22. using System;
  23. using System.Collections;
  24. using System.Configuration;
  25. using System.Data;
  26. using System.Linq;
  27. using System.Web;
  28. using System.Web.Security;
  29. using System.Web.UI;
  30. using System.Web.UI.HtmlControls;
  31. using System.Web.UI.WebControls;
  32. using System.Web.UI.WebControls.WebParts;
  33. using System.Xml.Linq;
  34. using System.IO;
  35. using System.Drawing;
  36. using SilverlightDesktopCore.DAL;
  37. using System.Xml;
  38. using System.Collections.Specialized;
  39. using System.Web.Configuration;
  40. public partial class SetupWizard : System.Web.UI.Page
  41. {
  42.     string strConnection;
  43.     string strCurrentVersion = "01.70.00";
  44.     string[] arrSQLScriptsToRun = new string[] { "01.00.00.sql", "01.10.00.sql", "01.20.00.sql", "01.50.00.sql", "01.60.00.sql", "01.70.00.sql" };
  45.     protected void Page_Load(object sender, EventArgs e)
  46.     {
  47.         if (!Page.IsPostBack)
  48.         {
  49.             // If the site is already set-up do not allow the Install Wizard to run
  50.             if (DatabaseReady())
  51.             {
  52.                 Response.Redirect("Default.aspx");
  53.                 Response.End();
  54.             }
  55.         }
  56.     }
  57.     #region Navigation
  58.     protected void btnWelcomeNext_Click(object sender, EventArgs e)
  59.     {
  60.         blPermissions.Items.Clear();
  61.         if (!IsUpgrade())
  62.         {
  63.             mvSetupWizard.SetActiveView(vwPermissions);
  64.         }
  65.         else
  66.         {
  67.             // This is an upgrade so run .sql scripts
  68.             mvSetupWizard.SetActiveView(vwDatabaseSetup);
  69.             SetupDatabase();
  70.         }
  71.     }
  72.     protected void btnPermissionsPrevious_Click(object sender, EventArgs e)
  73.     {
  74.         mvSetupWizard.SetActiveView(vwWelcome);
  75.     }
  76.     protected void btnPermissionsNext_Click(object sender, EventArgs e)
  77.     {
  78.         mvSetupWizard.SetActiveView(vwDatabase);
  79.     }
  80.     protected void btnDatabasePrevious_Click(object sender, EventArgs e)
  81.     {
  82.         blPermissions.Items.Clear();
  83.         mvSetupWizard.SetActiveView(vwPermissions);
  84.     }
  85.     protected void btnDatabaseNext_Click(object sender, EventArgs e)
  86.     {
  87.         mvSetupWizard.SetActiveView(vwDatabaseSetup);
  88.         SetupDatabase();
  89.     }
  90.     protected void btnCompletePrevious_Click(object sender, EventArgs e)
  91.     {
  92.         mvSetupWizard.SetActiveView(vwDatabase);
  93.     }
  94.     protected void btnAdministratorPrevious_Click(object sender, EventArgs e)
  95.     {
  96.         mvSetupWizard.SetActiveView(vwDatabaseSetup);
  97.         SetupDatabase();
  98.     }
  99.     #endregion
  100.     #region PermissionCheck
  101.     protected void btnCheckPermissions_Click(object sender, EventArgs e)
  102.     {
  103.         int intValidItems = 0;
  104.         blPermissions.Items.Clear();
  105.         //FolderCreate
  106.         ListItem permissionItem = new ListItem();
  107.         permissionItem.Text = String.Format("Folder Create - {0}", ((VerifyFolderCreate()) ? "Passed" : "Failed"));
  108.         permissionItem.Enabled = ((permissionItem.Text.Contains("Passed")) ? true : false);
  109.         blPermissions.Items.Add(permissionItem);
  110.         intValidItems = intValidItems + ((permissionItem.Text.Contains("Passed")) ? 1 : 0);
  111.         //FileCreate
  112.         permissionItem = new ListItem();
  113.         permissionItem.Text = String.Format("File Create - {0}", ((VerifyFolderCreate()) ? "Passed" : "Failed"));
  114.         permissionItem.Enabled = ((permissionItem.Text.Contains("Passed")) ? true : false);
  115.         blPermissions.Items.Add(permissionItem);
  116.         intValidItems = intValidItems + ((permissionItem.Text.Contains("Passed")) ? 1 : 0);
  117.         //FileDelete
  118.         permissionItem = new ListItem();
  119.         permissionItem.Text = String.Format("File Delete - {0}", ((VerifyFolderCreate()) ? "Passed" : "Failed"));
  120.         permissionItem.Enabled = ((permissionItem.Text.Contains("Passed")) ? true : false);
  121.         blPermissions.Items.Add(permissionItem);
  122.         intValidItems = intValidItems + ((permissionItem.Text.Contains("Passed")) ? 1 : 0);
  123.         //FolderDelete
  124.         permissionItem = new ListItem();
  125.         permissionItem.Text = String.Format("Folder Delete - {0}", ((VerifyFolderCreate()) ? "Passed" : "Failed"));
  126.         permissionItem.Enabled = ((permissionItem.Text.Contains("Passed")) ? true : false);
  127.         blPermissions.Items.Add(permissionItem);
  128.         intValidItems = intValidItems + ((permissionItem.Text.Contains("Passed")) ? 1 : 0);
  129.         lblPermissionCheck.Text = String.Format("Permissions {0}", ((intValidItems == 4) ? "Passed" : "Failed"));
  130.         lblPermissionCheck.BackColor = ((intValidItems == 4) ? Color.Green : Color.Red);
  131.         // Show the Continue button?
  132.         btnPermissionsNext.Visible = ((intValidItems == 4) ? true : false);
  133.     }
  134.     #region VerifyFolderCreate
  135.     private bool VerifyFolderCreate()
  136.     {
  137.         string verifyPath = Server.MapPath("~/Verify");
  138.         bool verified = true;
  139.         //Attempt to create the Directory
  140.         try
  141.         {
  142.             if (Directory.Exists(verifyPath))
  143.             {
  144.                 Directory.Delete(verifyPath, true);
  145.             }
  146.             Directory.CreateDirectory(verifyPath);
  147.         }
  148.         catch (Exception ex)
  149.         {
  150.             string strTemp = ex.Message;
  151.             verified = false;
  152.         }
  153.         return verified;
  154.     }
  155.     #endregion
  156.     #region VerifyFolderDelete
  157.     private bool VerifyFolderDelete()
  158.     {
  159.         string verifyPath = Server.MapPath("~/Verify");
  160.         bool verified = VerifyFolderCreate();
  161.         if (verified)
  162.         {
  163.             //Attempt to delete the Directory
  164.             try
  165.             {
  166.                 Directory.Delete(verifyPath);
  167.             }
  168.             catch (Exception ex)
  169.             {
  170.                 string strTemp = ex.Message;
  171.                 verified = false;
  172.             }
  173.         }
  174.         return verified;
  175.     }
  176.     #endregion
  177.     #region VerifyFileCreate
  178.     private bool VerifyFileCreate()
  179.     {
  180.         string verifyPath = Server.MapPath("~/Verify/Verify.txt");
  181.         bool verified = VerifyFolderCreate();
  182.         if (verified)
  183.         {
  184.             //Attempt to create the File
  185.             try
  186.             {
  187.                 if (File.Exists(verifyPath))
  188.                 {
  189.                     File.Delete(verifyPath);
  190.                 }
  191.                 Stream fileStream = File.Create(verifyPath);
  192.                 fileStream.Close();
  193.             }
  194.             catch (Exception ex)
  195.             {
  196.                 string strTemp = ex.Message;
  197.                 verified = false;
  198.             }
  199.         }
  200.         return verified;
  201.     }
  202.     #endregion
  203.     #region VerifyFileDelete
  204.     private bool VerifyFileDelete()
  205.     {
  206.         string verifyPath = Server.MapPath("~/Verify/Verify.txt");
  207.         bool verified = VerifyFileCreate();
  208.         if (verified)
  209.         {
  210.             //Attempt to delete the File
  211.             try
  212.             {
  213.                 File.Delete(verifyPath);
  214.             }
  215.             catch (Exception ex)
  216.             {
  217.                 string strTemp = ex.Message;
  218.                 verified = false;
  219.             }
  220.         }
  221.         return verified;
  222.     }
  223.     #endregion
  224.     #endregion
  225.     #region Database Configuration
  226.     protected void chkIntegrated_CheckedChanged(object sender, EventArgs e)
  227.     {
  228.         trUser.Visible = (!chkIntegrated.Checked);
  229.         trPassword.Visible = (!chkIntegrated.Checked);
  230.     }
  231.     protected void btnDatabaseCheck_Click(object sender, EventArgs e)
  232.     {
  233.         bool boolCanConnectToDatabase = CanConnectToDatabase();
  234.         btnDatabaseNext.Visible = boolCanConnectToDatabase;
  235.         this.lblConnectionResults.Text = (boolCanConnectToDatabase) ? "Connection Successful" : "Connection Error";
  236.         // If connection was successful then write the connection string to the web.config to be used on the next wizard step
  237.         if (boolCanConnectToDatabase)
  238.         {
  239.             System.Configuration.Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
  240.             System.Configuration.ConnectionStringSettings connString;
  241.             connString = rootWebConfig.ConnectionStrings.ConnectionStrings["SiteSqlServer"];
  242.             connString.ConnectionString = strConnection;
  243.             rootWebConfig.Save();
  244.         }
  245.     }
  246.     private bool CanConnectToDatabase()
  247.     {
  248.         string strUserInfo = (!chkIntegrated.Checked) ? String.Format("Persist Security Info=True;User ID={0};Password={1}", this.txtUserId.Text, this.txtPassword.Text) : "Integrated Security=True";
  249.         strConnection = String.Format("Data Source={0};Initial Catalog={1};{2}", this.txtServer.Text, this.txtDatabase.Text, strUserInfo);
  250.         SilverlightDesktopDAL SilverlightDesktopDAL = new SilverlightDesktopDAL(strConnection);
  251.         return SilverlightDesktopDAL.DatabaseExists();
  252.     }
  253.     #endregion
  254.     #region Database Set-up
  255.     private void SetupDatabase()
  256.     {
  257.         lblDatabaseSetup.Text = (DatabaseReady()) ? "The Database is already set-up. Click continue." : "Click the Continue button to run the database set-up scripts.";
  258.     }
  259.     private bool DatabaseReady()
  260.     {
  261.         // This method returns true if the databse exists and the table is created
  262.         bool CanConnect = true;
  263.         // Determine if the SiteSqlServer key exists. If it does not create it
  264.         ConnectionStringSettings StringSettings = null;
  265.         Configuration WebConfig = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
  266.         StringSettings = WebConfig.ConnectionStrings.ConnectionStrings["SiteSqlServer"];
  267.         if (StringSettings == null)
  268.         {
  269.             // Add the SiteSqlServer key
  270.             StringSettings = new ConnectionStringSettings();
  271.             StringSettings.Name = "SiteSqlServer";
  272.             StringSettings.ConnectionString = "Data Source=(local);Initial Catalog=SilverlightDesktop;Integrated Security=True";
  273.             StringSettings.ProviderName = "System.Data.SqlClient";
  274.             WebConfig.ConnectionStrings.ConnectionStrings.Add(StringSettings);
  275.             WebConfig.Save();
  276.         }
  277.         try
  278.         {
  279.             SilverlightDesktopDAL SilverlightDesktopDAL = new SilverlightDesktopDAL();
  280.             var result = from VersionNumber in SilverlightDesktopDAL.Versions
  281.                          select VersionNumber;
  282.             CanConnect = (result.FirstOrDefault().VersionNumber == strCurrentVersion) ? true : false;
  283.         }
  284.         catch (Exception e)
  285.         {
  286.             string strError = e.Message;
  287.             CanConnect = false;
  288.         }
  289.         return CanConnect;
  290.     }
  291.     private bool IsUpgrade()
  292.     {
  293.         // This method returns true if the database exists and the table is created
  294.         bool _IsUpgrade = true;
  295.         int intCurrentVersion = Convert.ToInt32(strCurrentVersion.Replace(".", ""));
  296.         try
  297.         {
  298.             SilverlightDesktopDAL SilverlightDesktopDAL = new SilverlightDesktopDAL();
  299.             var result = from VersionNumber in SilverlightDesktopDAL.Versions
  300.                          select VersionNumber;
  301.             _IsUpgrade = (Convert.ToInt32(result.FirstOrDefault().VersionNumber.Replace(".", "")) < intCurrentVersion) ? true : false;
  302.         }
  303.         catch (Exception e)
  304.         {
  305.             string strError = e.Message;
  306.             _IsUpgrade = false;
  307.         }
  308.         return _IsUpgrade;
  309.     }
  310.     protected void btnDatabaseSetupNext_Click(object sender, EventArgs e)
  311.     {
  312.         bool InUpgradeMode = IsUpgrade();
  313.         if (!DatabaseReady())
  314.         {
  315.             try
  316.             {
  317.                 // Process all the SQL Scripts   
  318.                 foreach (string strSQLScript in arrSQLScriptsToRun)
  319.                 {
  320.                     string strSqlScript = GetSQLScript(strSQLScript);
  321.                     SilverlightDesktopDAL SilverlightDesktopDAL = new SilverlightDesktopDAL();
  322.                     SilverlightDesktopDAL.ExecuteCommand(strSqlScript);
  323.                     // Log the event
  324.                     ApplicationLog.AddToLog(String.Format("Processed upgrade script {0} ", strSQLScript));
  325.                 }
  326.             }
  327.             catch (Exception ex)
  328.             {
  329.                 lblDatabaseSetup.Text = ex.Message;
  330.                 return;
  331.             }
  332.         }
  333.         if (!InUpgradeMode)
  334.         {
  335.             mvSetupWizard.SetActiveView(vwAdminAccount);
  336.         }
  337.         else
  338.         {
  339.             // This is an upgrade so go to end
  340.             mvSetupWizard.SetActiveView(vwComplete);
  341.         }
  342.     }
  343.     private String GetSQLScript(string strSQLScript)
  344.     {
  345.         string strSQL;
  346.         string strFilePath = MapPath(String.Format(@"~/SQLScripts/{0}", strSQLScript));
  347.         StreamReader reader = new StreamReader(strFilePath);
  348.         strSQL = reader.ReadToEnd();
  349.         reader.Close();
  350.         reader = null;
  351.         return strSQL;
  352.     }
  353.     #endregion
  354.     #region Create Admin Account
  355.     protected void btnCreateAdmin_Click(object sender, EventArgs e)
  356.     {
  357.         // Attempt to create the Administrator account
  358.         if (txtUserName.Text.Trim() == "" | txtUserPassword.Text.Trim() == "" | txtUserEmail.Text.Trim() == "")
  359.         {
  360.             lblUserAccountResults.Text = "User name, password, and email must be entered to continue";
  361.         }
  362.         else
  363.         {
  364.             // Delete any SuperUser account
  365.             SilverlightDesktopDAL SilverlightDesktopDAL = new SilverlightDesktopDAL();
  366.             var result = from Superusers in SilverlightDesktopDAL.SilverlightDesktopUsers
  367.                          where Superusers.UserName == "Superuser"
  368.                          select Superusers;
  369.             if (result.Count() > 0)
  370.             {
  371.                 SilverlightDesktopDAL.SilverlightDesktopUsers.DeleteOnSubmit(result.FirstOrDefault());
  372.                 SilverlightDesktopDAL.SubmitChanges();
  373.             }
  374.             // Create SuperUser account
  375.             SilverlightDesktopUser SilverlightDesktopUser = new SilverlightDesktopUser();
  376.             SilverlightDesktopUser.Active = true;
  377.             SilverlightDesktopUser.Email = txtUserEmail.Text.Trim();
  378.             SilverlightDesktopUser.FirstName = "Super";
  379.             SilverlightDesktopUser.LastName = "User";
  380.             SilverlightDesktopUser.LoginFailures = 0;
  381.             SilverlightDesktopUser.Password = txtUserPassword.Text.Trim();
  382.             SilverlightDesktopUser.Role = "Administrators";
  383.             SilverlightDesktopUser.SuperUser = true;
  384.             SilverlightDesktopUser.UserName = txtUserName.Text.Trim();
  385.             SilverlightDesktopUser.SilverlightKey = 0;
  386.             SilverlightDesktopDAL.SilverlightDesktopUsers.InsertOnSubmit(SilverlightDesktopUser);
  387.             SilverlightDesktopDAL.SubmitChanges();
  388.             mvSetupWizard.SetActiveView(vwComplete);
  389.         }
  390.     }
  391.     #endregion
  392.     #region Complete
  393.     protected void btnCompleteNext_Click(object sender, EventArgs e)
  394.     {
  395.         Response.Redirect("Default.aspx");
  396.     }
  397.     #endregion
  398. }