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);
        }
Beispiel #2
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));
            }
        }
Beispiel #3
0
        public static SiteFolder FromISiteFolder(ISiteFolder i)
        {
            SiteFolder f = new SiteFolder();
            f.FolderName = i.FolderName;
            f.Guid = i.Guid;
            f.SiteGuid = i.SiteGuid;

            return f;
        }
Beispiel #4
0
        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"));
        }
Beispiel #10
0
        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;

        }