public ActionResult NewSite(int slp = 1)
        {
            ViewData["Title"] = "Create New Site";

            SiteBasicSettingsViewModel model = new SiteBasicSettingsViewModel();

            model.ReturnPageNumber = slp; //site list return page
            model.SiteId           = -1;
            model.SiteGuid         = Guid.Empty;
            // model.SiteName = Site.SiteSettings.SiteName;

            model.TimeZoneId = siteManager.CurrentSite.TimeZoneId;
            //model.AllTimeZones = DateTimeHelper.GetTimeZoneList();
            model.AllTimeZones = DateTimeHelper.GetTimeZoneList().Select(x =>
                                                                         new SelectListItem
            {
                Text  = x.DisplayName,
                Value = x.Id
                ,
                Selected = model.TimeZoneId == x.Id
            });



            return(View(model));
        }
        public ActionResult NewSite(int slp = 1)
        {
            ViewData["Title"] = "Create New Site";

            SiteBasicSettingsViewModel model = new SiteBasicSettingsViewModel();

            model.ReturnPageNumber = slp; //site list return page
            model.SiteId           = -1;
            model.SiteGuid         = Guid.Empty;
            // model.SiteName = Site.SiteSettings.SiteName;

            model.TimeZoneId   = siteManager.CurrentSite.TimeZoneId;
            model.AllTimeZones = DateTimeHelper.GetTimeZoneList();



            return(View(model));
        }
        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 <IActionResult> SiteInfo(
            Guid?siteGuid,
            int slp = 1)
        {
            ISiteSettings selectedSite;

            // only server admin site can edit other sites settings
            if ((siteGuid.HasValue) && (siteGuid.Value != Guid.Empty) && (siteGuid.Value != siteManager.CurrentSite.SiteGuid) && (siteManager.CurrentSite.IsServerAdminSite))
            {
                selectedSite = await siteManager.Fetch(siteGuid.Value);

                ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, "{0} - Settings", selectedSite.SiteName);
            }
            else
            {
                selectedSite      = siteManager.CurrentSite;
                ViewData["Title"] = "Site Settings";
            }

            SiteBasicSettingsViewModel model = new SiteBasicSettingsViewModel();

            model.ReturnPageNumber = slp; // site list page number to return to

            //model.AllTimeZones = DateTimeHelper.GetTimeZoneList();
            model.AllTimeZones = DateTimeHelper.GetTimeZoneList().Select(x =>
                                                                         new SelectListItem
            {
                Text  = x.DisplayName,
                Value = x.Id
                ,
                Selected = model.TimeZoneId == x.Id
            });

            model.SiteId   = selectedSite.SiteId;
            model.SiteGuid = selectedSite.SiteGuid;
            model.SiteName = selectedSite.SiteName;

            model.TimeZoneId = selectedSite.TimeZoneId;

            model.IsClosed      = selectedSite.SiteIsClosed;
            model.ClosedMessage = selectedSite.SiteIsClosedMessage;

            if (multiTenantOptions.Mode == MultiTenantMode.FolderName)
            {
                model.SiteFolderName = selectedSite.SiteFolderName;
            }
            else if (multiTenantOptions.Mode == MultiTenantMode.HostName)
            {
                model.HostName = selectedSite.PreferredHostName;
            }

            if (layoutOptions.SelectionMode == LayoutSelectionMode.Browsing)
            {
                model.Layout           = selectedSite.Layout;
                model.AvailableLayouts = layoutListBuilder.GetAvailableLayouts(selectedSite.SiteId);
            }



            // 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;
                }
            }


            //dpBeginDate.Text = blog.StartDate.ToLocalTime(timeZone).ToString("g");
            //TimeZoneInfo timeZone = DateTimeHelper.GetTimeZone(model.AllTimeZones, "Eastern Standard Time");

            //model.TmpDate = DateTime.UtcNow.ToLocalTime(timeZone);

            //string timeFormat = CultureInfo.CurrentUICulture.DateTimeFormat.ToDatePickerWithTimeFormat();
            //string timeFormat = "h:mm:ss TT";
            //ViewData.Add("TimeFormat", timeFormat);

            //ViewBag.TimeFormat = timeFormat;

            //string dateFormat = CultureInfo.CurrentUICulture.DateTimeFormat.ToDatePickerFormat();

            //ViewBag.DateFormat = dateFormat;

            return(View(model));
        }