public JsonResult <dynamic> Install(Core.Models.User adminUser, Core.Models.Portal portal, List <string> packages) { return(API.Execute <dynamic>(r => { if (Portal.CurrentPortal == null) { portal.Name = "Default"; portal.Default = true; var packagesToInstall = Videre.Core.Services.Update.GetPackages().Where(p => packages.Contains(p.Name)); //need to install account providers before we start creating accounts! foreach (var package in packagesToInstall.Where(p => p.Type == "Account Provider")) { Update.InstallPackage(package.Name, null); } var portalId = Core.Services.Update.InstallPortal(adminUser, portal); foreach (var package in packagesToInstall.Where(p => p.Type != "Account Provider")) { Update.InstallPackage(package.Name, portalId); } } else { r.AddError("Portal already exists."); //todo: localize } })); }
//todo: allowing passing in of objects, but currently using very little of them public static string InstallPortal(Core.Models.User adminUser, Core.Models.Portal portal) { //todo: hardcoding default for now... //if (Core.Services.Update.Register(new Videre.Core.Models.Portal() { Name = portal.Name, ThemeName = portal.ThemeName }) > 0) if (Core.Services.Update.Register(portal) > 0) { Core.Services.Repository.SaveChanges(); } var portalId = Core.Services.Portal.GetPortal(portal.Name).Id; //Core.Services.Portal.CurrentPortalId; var updates = 0; //portal Init if (!Core.Services.Account.ReadOnly) //todo: don't allow this?!?! or does UI disable this? { updates += Core.Services.Update.Register(new List <Core.Models.Role>() { new Core.Models.Role() { Name = "admin", PortalId = portalId, Description = "Administrative Priviledges" } }); updates += Core.Services.Update.Register(new List <Core.Models.User>() { new Core.Models.User() { PortalId = portalId, Name = adminUser.Name, Email = adminUser.Email, Password = adminUser.Password, Roles = new List <string>() { Core.Services.Update.GetAdminRoleId(portalId) } } }); } if (updates > 0) { CoreServices.Repository.SaveChanges(); } return(portalId); }