public async Task <bool> Save(ISiteFolder siteFolder, CancellationToken cancellationToken = default(CancellationToken)) { if (siteFolder == null) { return(false); } SiteFolder folder = SiteFolder.FromISiteFolder(siteFolder); if (folder.Guid == Guid.Empty) { folder.Guid = Guid.NewGuid(); dbContext.SiteFolders.Add(folder); } else { bool tracking = dbContext.ChangeTracker.Entries <SiteFolder>().Any(x => x.Entity.Guid == folder.Guid); if (!tracking) { dbContext.SiteFolders.Update(folder); } } int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken); return(rowsAffected > 0); }
public async Task <bool> Save(ISiteFolder siteFolder, CancellationToken cancellationToken = default(CancellationToken)) { if (siteFolder == null) { return(false); } cancellationToken.ThrowIfCancellationRequested(); if (siteFolder.Guid == Guid.Empty) { siteFolder.Guid = Guid.NewGuid(); return(dbSiteFolder.Add( siteFolder.Guid, siteFolder.SiteGuid, siteFolder.FolderName)); } else { return(dbSiteFolder.Update( siteFolder.Guid, siteFolder.SiteGuid, siteFolder.FolderName)); } }
public static SiteFolder FromISiteFolder(ISiteFolder i) { SiteFolder f = new SiteFolder(); f.FolderName = i.FolderName; f.Guid = i.Guid; f.SiteGuid = i.SiteGuid; return f; }
public static SiteFolder FromISiteFolder(ISiteFolder i) { SiteFolder f = new SiteFolder(); f.FolderName = i.FolderName; f.Guid = i.Guid; f.SiteGuid = i.SiteGuid; return(f); }
void webMatrixHost_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) { try { ISiteItem siteItem = e.Items.FirstOrDefault <ISiteItem>(); if (siteItem != null) { ISiteFolder siteFolder = siteItem as ISiteFolder; if (siteFolder != null) // folders must end with '\' { e.AddMenuItem(new ContextMenuItem("Compile TypeScript files in folder", _typescriptCompileImageSmall, new DelegateCommand(CanExecute, (parameter) => { if (!_executer.Start()) { return; } var tsfiles = Directory.GetFiles(siteFolder.Path, "*.ts", SearchOption.AllDirectories); CompileTypeScriptFilesAsync(tsfiles).ContinueWith((antecedent) => _executer.End()); }), null)); } else { var siteFile = siteItem as ISiteFile; if (siteFile != null && Path.GetExtension(siteFile.Path) == ".ts") { e.AddMenuItem(new ContextMenuItem("Compile TypeScript file", _typescriptCompileImageSmall, new DelegateCommand(CanExecute, (parameter) => { if (!_executer.Start()) { return; } var tsfiles = new string[] { siteFile.Path }; CompileTypeScriptFilesAsync(tsfiles).ContinueWith((antecedent) => _executer.End()); }), null)); } } } } catch (Exception ex) { _webMatrixHost.ShowExceptionMessage("Compile TypeScript (context menu)", "The following error occured. Please report at https://github.com/MacawNL/TypeScript4WebMatrix/issues.", ex); } }
public async Task<bool> Save(ISiteFolder siteFolder, CancellationToken cancellationToken = default(CancellationToken)) { if (siteFolder == null) { return false; } cancellationToken.ThrowIfCancellationRequested(); if (siteFolder.Guid == Guid.Empty) { siteFolder.Guid = Guid.NewGuid(); return dbSiteFolder.Add( siteFolder.Guid, siteFolder.SiteGuid, siteFolder.FolderName); } else { return dbSiteFolder.Update( siteFolder.Guid, siteFolder.SiteGuid, siteFolder.FolderName); } }
public static void LoadFromReader(this ISiteFolder folder, DbDataReader reader) { folder.Guid = new Guid(reader["Guid"].ToString()); folder.SiteGuid = new Guid(reader["SiteGuid"].ToString()); folder.FolderName = reader["FolderName"].ToString(); }
public async Task <ActionResult> NewSite(SiteBasicSettingsViewModel model) { ViewData["Title"] = "Create New Site"; if (!ModelState.IsValid) { return(View(model)); } bool addHostName = false; if (multiTenantOptions.Mode == MultiTenantMode.FolderName) { if (string.IsNullOrEmpty(model.SiteFolderName)) { ModelState.AddModelError("foldererror", "Folder name is required."); return(View(model)); } ISiteFolder folder = await siteManager.GetSiteFolder(model.SiteFolderName); if (folder != null) { ModelState.AddModelError("foldererror", "The selected folder name is already in use on another site."); return(View(model)); } } else { ISiteHost host; if (!string.IsNullOrEmpty(model.HostName)) { model.HostName = model.HostName.Replace("https://", string.Empty).Replace("http://", string.Empty); host = await siteManager.GetSiteHost(model.HostName); if (host != null) { ModelState.AddModelError("hosterror", "The selected host/domain name is already in use on another site."); return(View(model)); } addHostName = true; } } SiteSettings newSite = new SiteSettings(); // only the first site created by setup page should be a server admin site newSite.IsServerAdminSite = false; newSite.SiteName = model.SiteName; if (multiTenantOptions.Mode == MultiTenantMode.FolderName) { newSite.SiteFolderName = model.SiteFolderName; } else if (addHostName) { newSite.PreferredHostName = model.HostName; } newSite.SiteIsClosed = model.IsClosed; newSite.SiteIsClosedMessage = model.ClosedMessage; //Site.SiteRepository.Save(newSite); bool result = await siteManager.CreateNewSite(newSite); result = await siteManager.CreateRequiredRolesAndAdminUser(newSite); if ((result) && (multiTenantOptions.Mode == MultiTenantMode.FolderName)) { bool folderResult = await siteManager.EnsureSiteFolder(newSite); // for folder sites we need routes that match the folder // which are normally created during app startup // can we add routes here? or do we need to force the app to recycle? // this seems to work, but we really do need to restart // so that the per folder authentication gets setup too //cloudscribe.Web.Routing.RouteRegistrar.AddDefaultRouteForNewSiteFolder(folder.FolderName); //startup.TriggerStartup(); //http://stackoverflow.com/questions/31339896/replacement-httpruntime-unloadappdomain-in-asp-net-5 } if (result && addHostName) { bool hostResult = await siteManager.AddHost( newSite.SiteGuid, newSite.SiteId, model.HostName); } if (result) { this.AlertSuccess(string.Format("Basic site settings for <b>{0}</b> were successfully created.", newSite.SiteName), true); } return(RedirectToAction("SiteList", new { pageNumber = model.ReturnPageNumber })); }
public async Task <ActionResult> SiteInfo(SiteBasicSettingsViewModel model) { // can only delete from server admin site/cannot delete server admin site if (siteManager.CurrentSite.IsServerAdminSite) { if (model.SiteGuid != siteManager.CurrentSite.SiteGuid) { model.ShowDelete = uiOptions.AllowDeleteChildSites; } } if (!ModelState.IsValid) { return(View(model)); } if (model.SiteGuid == Guid.Empty) { this.AlertDanger("oops something went wrong, site was not found.", true); return(RedirectToAction("Index")); } //model.SiteId = Site.SiteSettings.SiteId; //model.SiteGuid = Site.SiteSettings.SiteGuid; ISiteSettings selectedSite = null; if (model.SiteGuid == siteManager.CurrentSite.SiteGuid) { selectedSite = siteManager.CurrentSite; ViewData["Title"] = "Site Settings"; } else if (siteManager.CurrentSite.IsServerAdminSite) { selectedSite = await siteManager.Fetch(model.SiteGuid); ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, "{0} - Settings", selectedSite.SiteName); } if (selectedSite == null) { this.AlertDanger("oops something went wrong.", true); return(RedirectToAction("Index")); } if (multiTenantOptions.Mode == MultiTenantMode.FolderName) { if ( ((model.SiteFolderName == null) || (model.SiteFolderName.Length == 0)) && (!selectedSite.IsServerAdminSite) ) { // only the server admin site can be without a folder ModelState.AddModelError("foldererror", "Folder name is required."); return(View(model)); } ISiteFolder folder = await siteManager.GetSiteFolder(model.SiteFolderName); if ((folder != null) && (folder.SiteGuid != selectedSite.SiteGuid)) { ModelState.AddModelError("foldererror", "The selected folder name is already in use on another site."); return(View(model)); } } else if (multiTenantOptions.Mode == MultiTenantMode.HostName) { ISiteHost host; if (!string.IsNullOrEmpty(model.HostName)) { model.HostName = model.HostName.Replace("https://", string.Empty).Replace("http://", string.Empty); host = await siteManager.GetSiteHost(model.HostName); if (host != null) { if (host.SiteGuid != selectedSite.SiteGuid) { ModelState.AddModelError("hosterror", "The selected host/domain name is already in use on another site."); return(View(model)); } } else { bool hostResult = await siteManager.AddHost( selectedSite.SiteGuid, selectedSite.SiteId, model.HostName); } } selectedSite.PreferredHostName = model.HostName; } selectedSite.SiteName = model.SiteName; selectedSite.TimeZoneId = model.TimeZoneId; selectedSite.SiteFolderName = model.SiteFolderName; selectedSite.SiteIsClosed = model.IsClosed; selectedSite.SiteIsClosedMessage = model.ClosedMessage; if (layoutOptions.SelectionMode == LayoutSelectionMode.Browsing) { selectedSite.Layout = model.Layout; } bool result = await siteManager.Save(selectedSite); if ((result) && (multiTenantOptions.Mode == MultiTenantMode.FolderName)) { if (!string.IsNullOrEmpty(selectedSite.SiteFolderName)) { bool folderEnsured = await siteManager.EnsureSiteFolder(selectedSite); } } if (result) { this.AlertSuccess(string.Format("Basic site settings for <b>{0}</b> were successfully updated.", selectedSite.SiteName), true); } if ((siteManager.CurrentSite.IsServerAdminSite) //&&(Site.SiteSettings.SiteGuid != selectedSite.SiteGuid) ) { // just edited from site list so redirect there return(RedirectToAction("SiteList", new { pageNumber = model.ReturnPageNumber })); } return(RedirectToAction("Index")); }
public async Task<bool> Save( ISiteFolder siteFolder, CancellationToken cancellationToken = default(CancellationToken)) { if (siteFolder == null) { return false; } SiteFolder folder = SiteFolder.FromISiteFolder(siteFolder); if (folder.Guid == Guid.Empty) { folder.Guid = Guid.NewGuid(); dbContext.SiteFolders.Add(folder); } else { bool tracking = dbContext.ChangeTracker.Entries<SiteFolder>().Any(x => x.Entity.Guid == folder.Guid); if (!tracking) { dbContext.SiteFolders.Update(folder); } } int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken); return rowsAffected > 0; }