resolved a number of issues with site creation #224
This commit is contained in:
		| @ -1,13 +1,14 @@ | ||||
| @namespace Oqtane.Modules.Admin.Sites | ||||
| @namespace Oqtane.Modules.Admin.Site | ||||
| @inherits ModuleBase | ||||
| @inject NavigationManager NavigationManager | ||||
| @inject ISiteService SiteService | ||||
| @inject ITenantService TenantService | ||||
| @inject IAliasService AliasService | ||||
| @inject IThemeService  ThemeService | ||||
| @inject ISettingService  SettingService | ||||
| 
 | ||||
| @if (themes != null) | ||||
| {  | ||||
| { | ||||
|     <table class="table table-borderless"> | ||||
|         <tr> | ||||
|             <td> | ||||
| @ -17,6 +18,14 @@ | ||||
|                 <input class="form-control" @bind="@name" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Name" class="control-label">Tenant: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input class="form-control" @bind="@tenant" readonly /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Name" class="control-label">Aliases: </label> | ||||
| @ -96,7 +105,7 @@ | ||||
|     </table> | ||||
| 
 | ||||
|     <a data-toggle="collapse" class="app-link-unstyled" href="#SMTP" aria-expanded="false" aria-controls="SMTP"> | ||||
|         <h5>SMTP Settings</h5><hr class="app-rule" /> | ||||
|         <h5><i class="oi oi-chevron-bottom"></i> SMTP Settings</h5><hr class="app-rule" /> | ||||
|     </a> | ||||
|     <div class="collapse" id="SMTP"> | ||||
|         <table class="table table-borderless"> | ||||
| @ -142,25 +151,29 @@ | ||||
|             </tr> | ||||
|         </table> | ||||
|     </div> | ||||
| 
 | ||||
|     <br /> | ||||
|     <button type="button" class="btn btn-success" @onclick="SaveSite">Save</button> | ||||
|     <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|     @if (UserSecurity.IsAuthorized(PageState.User, Constants.HostRole)) | ||||
|     { | ||||
|         <ActionDialog Header="Delete Site" Message="@("Are You Sure You Wish To Delete This Site?")" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteSite())" /> | ||||
|     } | ||||
|     <br /> | ||||
|     <br /> | ||||
|     <AuditInfo CreatedBy="@createdby" CreatedOn="@createdon" ModifiedBy="@modifiedby" ModifiedOn="@modifiedon" DeletedBy="@deletedby" DeletedOn="@deletedon"></AuditInfo> | ||||
| } | ||||
| 
 | ||||
| @code { | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } | ||||
| 
 | ||||
|     Dictionary<string, string> themes; | ||||
|     Dictionary<string, string> panelayouts; | ||||
|     Dictionary<string, string> containers; | ||||
| 
 | ||||
|     List<Theme> Themes; | ||||
|     Alias Alias; | ||||
|     int siteid; | ||||
|     string name = ""; | ||||
|     List<Tenant> tenants; | ||||
|     string tenant = ""; | ||||
|     List<Alias> aliases; | ||||
|     string urls = ""; | ||||
|     int logofileid = -1; | ||||
| @ -189,12 +202,12 @@ | ||||
|         { | ||||
|             Themes = await ThemeService.GetThemesAsync(); | ||||
|             aliases = await AliasService.GetAliasesAsync(); | ||||
|             Alias = aliases.Where(item => item.AliasId == int.Parse(PageState.QueryString["id"])).FirstOrDefault(); | ||||
|             siteid = Alias.SiteId; | ||||
|             Site site = await SiteService.GetSiteAsync(siteid, Alias); | ||||
|             Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId); | ||||
|             if (site != null) | ||||
|             { | ||||
|                 name = site.Name; | ||||
|                 tenants = await TenantService.GetTenantsAsync(); | ||||
|                 tenant = tenants.Find(item => item.TenantId == site.TenantId).Name; | ||||
|                 foreach (Alias alias in aliases.Where(item => item.SiteId == site.SiteId && item.TenantId == site.TenantId).ToList()) | ||||
|                 { | ||||
|                     urls += alias.Name + "\n"; | ||||
| @ -229,7 +242,7 @@ | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", siteid, ex.Message); | ||||
|             await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); | ||||
|             AddModuleMessage(ex.Message, MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| @ -262,7 +275,7 @@ | ||||
|         { | ||||
|             if (name != "" && urls != "" && !string.IsNullOrEmpty(themetype) && (panelayouts.Count == 0 || !string.IsNullOrEmpty(layouttype)) && !string.IsNullOrEmpty(containertype)) | ||||
|             { | ||||
|                 Site site = await SiteService.GetSiteAsync(siteid, Alias); | ||||
|                 Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId); | ||||
|                 if (site != null) | ||||
|                 { | ||||
|                     site.Name = name; | ||||
| @ -277,7 +290,7 @@ | ||||
|                     site.DefaultContainerType = containertype; | ||||
|                     site.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted)); | ||||
| 
 | ||||
|                     site = await SiteService.UpdateSiteAsync(site, Alias); | ||||
|                     site = await SiteService.UpdateSiteAsync(site); | ||||
| 
 | ||||
|                     urls = urls.Replace("\n", ","); | ||||
|                     string[] names = urls.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | ||||
| @ -320,8 +333,23 @@ | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Saving Site {SiteId} {Error}", siteid, ex.Message); | ||||
|             await logger.LogError(ex, "Error Saving Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); | ||||
|             AddModuleMessage("Error Saving Site", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private async Task DeleteSite() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             await SiteService.DeleteSiteAsync(PageState.Site.SiteId); | ||||
|             await logger.LogInformation("Sited Deleted {SiteId}", PageState.Site.SiteId); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Deleting Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); | ||||
|             AddModuleMessage("Error Deleting Site", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -44,14 +44,6 @@ else | ||||
|             <textarea class="form-control" @bind="@urls" rows="3" /> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <label for="Name" class="control-label">Logo: </label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <FileManager @ref="filemanager" /> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <label for="Name" class="control-label">Default Theme: </label> | ||||
| @ -130,7 +122,6 @@ else | ||||
|     string tenantid = "-1"; | ||||
|     string name = ""; | ||||
|     string urls = ""; | ||||
|     FileManager filemanager; | ||||
|     string themetype = ""; | ||||
|     string layouttype = ""; | ||||
|     string containertype = ""; | ||||
| @ -210,6 +201,8 @@ else | ||||
|  | ||||
|             if (isvalid) | ||||
|             { | ||||
|                 ShowProgressIndicator(); | ||||
|  | ||||
|                 List<Alias> aliases = new List<Alias>(); | ||||
|                 urls = urls.Replace("\n", ","); | ||||
|                 foreach (string name in urls.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) | ||||
| @ -226,11 +219,6 @@ else | ||||
|                 site.TenantId = int.Parse(tenantid); | ||||
|                 site.Name = name; | ||||
|                 site.LogoFileId = null; | ||||
|                 int logofileid = filemanager.GetFileId(); | ||||
|                 if (logofileid != -1) | ||||
|                 { | ||||
|                     site.LogoFileId = logofileid; | ||||
|                 } | ||||
|                 site.DefaultThemeType = themetype; | ||||
|                 site.DefaultLayoutType = (layouttype == null ? "" : layouttype); | ||||
|                 site.DefaultContainerType = containertype; | ||||
|  | ||||
| @ -19,8 +19,8 @@ else | ||||
|             <th>Name</th> | ||||
|         </Header> | ||||
|         <Row> | ||||
|             <td><ActionLink Action="Edit" Parameters="@($"id=" + context.AliasId.ToString())" /></td> | ||||
|             <td><ActionDialog Header="Delete Site" Message="@("Are You Sure You Wish To Delete The " + context.Name + " Site?")" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteSite(context))" Disabled="sites.Count == 1" /></td> | ||||
|             <td><NavLink class="btn btn-primary" href="@(scheme + context.Name + "/admin/site")">Edit</NavLink></td> | ||||
|             <td><NavLink class="btn btn-danger" href="@(scheme + context.Name + "/admin/site")">Delete</NavLink></td> | ||||
|             <td><a href="@(scheme + context.Name)">@context.Name</a></td> | ||||
|         </Row> | ||||
|     </Pager> | ||||
| @ -47,19 +47,4 @@ else | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task DeleteSite(Alias Alias) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             await SiteService.DeleteSiteAsync(Alias.SiteId, Alias); | ||||
|             await logger.LogInformation("Sited Deleted {Alias}", Alias); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Deleting Site {Error}", ex.Message); | ||||
|             AddModuleMessage("Error Deleting Site", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -4,32 +4,78 @@ | ||||
| @inject ITenantService TenantService | ||||
| @inject IInstallationService InstallationService | ||||
|  | ||||
| <table class="table table-borderless"> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <label for="Name" class="control-label">Name: </label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <input class="form-control" @bind="@name" /> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <label for="Name" class="control-label">Connection String: </label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <input class="form-control" @bind="@connectionstring" /> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <label for="Name" class="control-label">Schema: </label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <input class="form-control" @bind="@schema" /> | ||||
|         </td> | ||||
|     </tr> | ||||
| </table> | ||||
|     <table class="table table-borderless"> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Name" class="control-label">Name: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input class="form-control" @bind="@name" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Database Type: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <select class="custom-select" @bind="@type"> | ||||
|                     <option value="LocalDB">Local Database</option> | ||||
|                     <option value="SQLServer">SQL Server</option> | ||||
|                 </select> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Server: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input type="text" class="form-control" @bind="@server" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Database: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input type="text" class="form-control" @bind="@database" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Integrated Security: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <select class="custom-select" @onchange="SetIntegratedSecurity"> | ||||
|                     <option value="true" selected>True</option> | ||||
|                     <option value="false">False</option> | ||||
|                 </select> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr style="@integratedsecurity"> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Username: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input type="text" class="form-control" @bind="@username" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr style="@integratedsecurity"> | ||||
|             <td> | ||||
|                 <label for="Title" class="control-label">Password: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input type="password" class="form-control" @bind="@password" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <label for="Name" class="control-label">Schema: </label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input class="form-control" @bind="@schema" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|     </table> | ||||
| <button type="button" class="btn btn-success" @onclick="SaveTenant">Save</button> | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|  | ||||
| @ -37,46 +83,72 @@ | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     string name = ""; | ||||
|     string connectionstring = ""; | ||||
|     string type = "LocalDB"; | ||||
|     string server = "(LocalDb)\\MSSQLLocalDB"; | ||||
|     string database = "Oqtane-" + DateTime.Now.ToString("yyyyMMddHHmm"); | ||||
|     string username = ""; | ||||
|     string password = ""; | ||||
|     string schema = ""; | ||||
|     string integratedsecurity = "display: none;"; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     private void SetIntegratedSecurity(ChangeEventArgs e) | ||||
|     { | ||||
|         try | ||||
|         if (Convert.ToBoolean((string)e.Value)) | ||||
|         { | ||||
|             List<Tenant> tenants = await TenantService.GetTenantsAsync(); | ||||
|             connectionstring = tenants.FirstOrDefault().DBConnectionString; | ||||
|             schema = tenants.FirstOrDefault().DBSchema; | ||||
|             integratedsecurity = "display: none;"; | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         else | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading Tenants {Error}", ex.Message); | ||||
|             AddModuleMessage("Error Loading Tenants", MessageType.Error); | ||||
|             integratedsecurity = ""; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task SaveTenant() | ||||
|     { | ||||
|         ShowProgressIndicator(); | ||||
|  | ||||
|         connectionstring = connectionstring.Replace("\\\\", "\\"); | ||||
|         GenericResponse response = await InstallationService.Install(connectionstring); | ||||
|         if (response.Success) | ||||
|         if (!string.IsNullOrEmpty(name)) | ||||
|         { | ||||
|             Tenant tenant = new Tenant(); | ||||
|             tenant.Name = name; | ||||
|             tenant.DBConnectionString = connectionstring; | ||||
|             tenant.DBSchema = schema; | ||||
|             tenant.IsInitialized = false; | ||||
|             await TenantService.AddTenantAsync(tenant); | ||||
|             await logger.LogInformation("Tenant Created {Tenant}", tenant); | ||||
|             ShowProgressIndicator(); | ||||
|  | ||||
|             NavigationManager.NavigateTo(NavigateUrl()); | ||||
|             string connectionstring = ""; | ||||
|             if (type == "LocalDB") | ||||
|             { | ||||
|                 connectionstring = "Data Source=" + server + ";AttachDbFilename=|DataDirectory|\\" + database + ".mdf;Initial Catalog=" + database + ";Integrated Security=SSPI;"; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 connectionstring = "Data Source=" + server + ";Initial Catalog=" + database + ";"; | ||||
|                 if (integratedsecurity == "display: none;") | ||||
|                 { | ||||
|                     connectionstring += "Integrated Security=SSPI;"; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     connectionstring += "User ID=" + username + ";Password=" + password; | ||||
|  | ||||
|                 } | ||||
|             } | ||||
|             GenericResponse response = await InstallationService.Install(connectionstring); | ||||
|             if (response.Success) | ||||
|             { | ||||
|                 Tenant tenant = new Tenant(); | ||||
|                 tenant.Name = name; | ||||
|                 tenant.DBConnectionString = connectionstring; | ||||
|                 tenant.DBSchema = schema; | ||||
|                 tenant.IsInitialized = false; | ||||
|                 await TenantService.AddTenantAsync(tenant); | ||||
|                 await logger.LogInformation("Tenant Created {Tenant}", tenant); | ||||
|  | ||||
|                 NavigationManager.NavigateTo(NavigateUrl()); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 await logger.LogError("Error Creating Tenant {Error}", response.Message); | ||||
|                 AddModuleMessage(response.Message, MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             await logger.LogError("Error Creating Tenant {Error}", response.Message); | ||||
|             AddModuleMessage(response.Message, MessageType.Error); | ||||
|             AddModuleMessage("You Must Provide A Name For The Tenant", MessageType.Warning); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -93,7 +93,6 @@ | ||||
|     [Parameter] | ||||
|     public string UploadMultiple { get; set; } // optional - enable multiple file uploads - default false | ||||
|  | ||||
|  | ||||
|     string id; | ||||
|     List<Folder> folders; | ||||
|     int folderid = -1; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker