public void SetNotify(Notify model) { model.Actions = model.Actions ?? new List <string>(); model.Users = model.Users ?? new List <string>(); var username = System.Web.HttpContext.Current.User.Identity.Name; var dbname = string.Concat(DBNames.Notify, ":", model.Recursive ? "*" : ".", string.Join("", model.Actions.Select(x => ":" + x))); var dbkey = model.Path; var dbvalue = username; repo.GetPuckMeta() .Where(x => x.Name.StartsWith(DBNames.Notify)) .Where(x => x.Key.Equals(model.Path)) .Where(x => x.Value.Equals(username)) .ToList() .ForEach(x => repo.DeletePuckMeta(x)); var newMeta = new PuckMeta { Key = dbkey, Name = dbname, Value = dbvalue }; repo.AddPuckMeta(newMeta); repo.SaveChanges(); }
public JsonResult AllowedModels(Settings model) { string msg = ""; bool success = false; try { //typeallowedtypes if (model.TypeAllowedTypes != null && model.TypeAllowedTypes.Count > 0) { var typeAllowedTypesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTypes).ToList(); typeAllowedTypesMeta.ForEach(x => { repo.DeleteMeta(x); }); model.TypeAllowedTypes.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTypes; newMeta.Key = values[0]; newMeta.Value = values[1]; repo.AddMeta(newMeta); }); } repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public void SetLocalisation(string path, string variant) { if (string.IsNullOrEmpty(path)) { throw new Exception("path null or empty"); } if (string.IsNullOrEmpty(variant)) { var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.PathToLocale && x.Key == path).ToList(); meta.ForEach(x => { repo.DeletePuckMeta(x); }); if (meta.Count > 0) { repo.SaveChanges(); } } else { var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.PathToLocale && x.Key == path).ToList(); meta.ForEach(x => repo.DeletePuckMeta(x)); var newMeta = new PuckMeta(); newMeta.Name = DBNames.PathToLocale; newMeta.Key = path; newMeta.Value = variant; repo.AddPuckMeta(newMeta); repo.SaveChanges(); } StateHelper.UpdatePathLocaleMappings(true); }
public JsonResult FieldGroups(Settings model) { string msg = ""; bool success = false; try { //fieldgroup if (model.TypeGroupField != null && model.TypeGroupField.Count > 0) { foreach (var mod in apiHelper.AllModels(true)) { var fieldGroupMeta = repo.GetPuckMeta().Where(x => x.Name.StartsWith(DBNames.FieldGroups + mod.Name)).ToList(); fieldGroupMeta.ForEach(x => { repo.DeleteMeta(x); }); } model.TypeGroupField.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.FieldGroups + values[0]; newMeta.Key = values[1]; newMeta.Value = values[2]; repo.AddMeta(newMeta); }); } var modelTypes = apiHelper.Models(); string cacheKeys = ""; foreach (var modelType in modelTypes) { string cacheKey = "fieldGroups_" + modelType.Name; cacheKeys += cacheKey + ","; cache.Remove(cacheKey); } cacheKeys = cacheKeys.TrimEnd(','); var instruction = new PuckInstruction() { Count = modelTypes.Count, ServerName = ApiHelper.ServerName(), InstructionDetail = cacheKeys, InstructionKey = InstructionKeys.RemoveFromCache }; repo.AddPuckInstruction(instruction); repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public JsonResult CachePolicy(Settings model) { string msg = ""; bool success = false; try { //cachepolicy if (model.CachePolicy == null) { model.CachePolicy = new List <string>(); } var cacheTypes = new List <string>(); if (model.CachePolicy.Count > 0) { foreach (var entry in model.CachePolicy) { var values = entry.Split(new char[] { ':' }); var type = values[0]; cacheTypes.Add(type); var minutes = values[1]; int min; if (!int.TryParse(minutes, out min)) { throw new Exception("cache policy minutes not int for type:" + type); } var varyByQs = string.Join(",", (values[2] ?? "").Split(",", StringSplitOptions.RemoveEmptyEntries).Where(x => !string.IsNullOrEmpty(x) && !string.IsNullOrWhiteSpace(x)).Distinct()) ?? ""; var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.CachePolicy && x.Key.ToLower().Equals(type.ToLower())).FirstOrDefault(); if (meta != null) { meta.Value = minutes + ":" + varyByQs; } else { meta = new PuckMeta() { Name = DBNames.CachePolicy, Key = type, Value = minutes + ":" + varyByQs }; repo.AddPuckMeta(meta); } } } //delete unset repo.GetPuckMeta().Where(x => x.Name == DBNames.CachePolicy && !cacheTypes.Contains(x.Key)).ToList().ForEach(x => repo.DeletePuckMeta(x)); repo.SaveChanges(); StateHelper.UpdateCacheMappings(true); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public JsonResult Languages(Settings model) { string msg = ""; bool success = false; try { //languages if (model.Languages != null && model.Languages.Count > 0) { var metaLanguages = repo.GetPuckMeta().Where(x => x.Name == DBNames.Settings && x.Key == DBKeys.Languages).ToList(); if (metaLanguages.Count > 0) { metaLanguages.ForEach(x => { repo.DeletePuckMeta(x); }); } var i = 0; foreach (var x in model.Languages) { var newMeta = new PuckMeta(); newMeta.Name = DBNames.Settings; newMeta.Key = DBKeys.Languages; newMeta.Value = x; newMeta.Dt = DateTime.Now.AddMinutes(i + 1); repo.AddPuckMeta(newMeta); i++; } } else { var metaLanguages = repo.GetPuckMeta().Where(x => x.Name == DBNames.Settings && x.Key == DBKeys.Languages).ToList(); if (metaLanguages.Count > 0) { metaLanguages.ForEach(x => { repo.DeletePuckMeta(x); }); } } repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public void SetDomain(string path, string domains) { if (string.IsNullOrEmpty(path)) { throw new Exception("path null or empty"); } var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.DomainMapping).ToList(); if (string.IsNullOrEmpty(domains)) { var m = meta.Where(x => x.Key == path).ToList(); m.ForEach(x => { repo.DeletePuckMeta(x); }); if (m.Count > 0) { repo.SaveChanges(); } } else { var d = domains.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Where(x => !string.IsNullOrEmpty(x) && !string.IsNullOrWhiteSpace(x)) .Select(x => x.ToLower()) .ToList(); d.ForEach(dd => { if (meta.Where(x => x.Value == dd && !x.Key.Equals(path)).Count() > 0) { throw new Exception($"domain {dd} already mapped to another node, unset first."); } }); var m = meta.Where(x => x.Key == path).ToList(); m.ForEach(x => { repo.DeletePuckMeta(x); }); d.ForEach(x => { var newMeta = new PuckMeta(); newMeta.Name = DBNames.DomainMapping; newMeta.Key = path; newMeta.Value = x; repo.AddPuckMeta(newMeta); }); repo.SaveChanges(); } StateHelper.UpdateDomainMappings(true); }
public async Task <JsonResult> EditParameters(string puck_settingsType, string puck_modelType, string puck_propertyName, IFormCollection fc) { string key = string.Concat(puck_settingsType, ":", puck_modelType, ":", puck_propertyName); //var targetType = Type.GetType(puck_settingsType); var targetType = ApiHelper.EditorSettingTypes().FirstOrDefault(x => x.FullName == puck_settingsType); var model = Activator.CreateInstance(targetType); bool success = false; string message = ""; try { if (await this.TryUpdateModelAsync(model, targetType, "")) { PuckMeta settingsMeta = null; settingsMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.EditorSettings && x.Key == key).FirstOrDefault(); if (settingsMeta != null) { settingsMeta.Value = JsonConvert.SerializeObject(model); } else { settingsMeta = new PuckMeta(); settingsMeta.Name = DBNames.EditorSettings; settingsMeta.Key = key; settingsMeta.Value = JsonConvert.SerializeObject(model); repo.AddMeta(settingsMeta); } repo.SaveChanges(); ApiHelper.OnAfterSettingsSave(this, new puck.core.Events.AfterEditorSettingsSaveEventArgs { Setting = (I_Puck_Editor_Settings)model }); success = true; } else { success = false; message = string.Join(" ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage)); } } catch (Exception ex) { success = false; message = ex.Message; log.Log(ex); } return(Json(new { success = success, message = message })); }
public async Task <ActionResult> Edit(string p_type, IFormCollection fc) { //var targetType = Type.GetType(p_type); var targetType = apiHelper.TaskTypes().FirstOrDefault(x => x.FullName.Equals(p_type)); var model = Activator.CreateInstance(targetType); bool success = false; string message = ""; try { if (await TryUpdateModelAsync(model, model.GetType(), "")) { var mod = model as BaseTask; PuckMeta taskMeta = null; if (mod.Id != -1) { taskMeta = repo.GetPuckMeta().Where(x => x.Id == mod.Id).FirstOrDefault(); taskMeta.Value = JsonConvert.SerializeObject(mod); } else { taskMeta = new PuckMeta(); taskMeta.Name = DBNames.Tasks; taskMeta.Key = mod.GetType().FullName; taskMeta.Value = taskMeta.Value = JsonConvert.SerializeObject(mod); repo.AddPuckMeta(taskMeta); } repo.SaveChanges(); StateHelper.UpdateTaskMappings(true); success = true; } else { success = false; message = string.Join(" ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage)); } } catch (Exception ex) { success = false; message = ex.Message; log.Log(ex); } return(Json(new { success = success, message = message })); }
public async Task <ActionResult> ForgotPassword(ForgottenPassword model) { if (ModelState.IsValid) { var user = await userManager.FindByEmailAsync(model.Email); if (user == null) { //ModelState.AddModelError("", "Email doesn't exist"); ViewBag.SuccessMessage = $"An email will be sent to the specified address with instructions on how to reset your password, if the address matches our records"; return(View(model)); } var token = Guid.NewGuid().ToString(); var meta = new PuckMeta { Name = DBNames.PasswordResetToken , Key = token , Value = model.Email }; repo.AddMeta(meta); repo.SaveChanges(); var uri = HttpContext.Request.GetUri() ?? PuckCache.FirstRequestUrl; var resetUrl = uri.Scheme + "://" + uri.Host + (uri.Port != 80 ? (":" + uri.Port) : "") + $"/puck/admin/resetpassword?token={token}"; puck.core.Helpers.ApiHelper.Email( model.Email , "Reset your password - Puck CMS" , $"click <a href=\"{resetUrl}\">here</a> to reset your password." ); ViewBag.SuccessMessage = $"An email will be sent to the specified address with instructions on how to reset your password, if the address matches our records"; return(View(model)); } return(View(model)); }
public JsonResult Redirects(Settings model) { string msg = ""; bool success = false; try { //redirects if (model.Redirect != null && model.Redirect.Count > 0) { var redirectMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.Redirect301 || x.Name == DBNames.Redirect302).ToList(); redirectMeta.ForEach(x => { repo.DeleteMeta(x); }); //count of 1 and key/value of null indicates delete only so inserts are skipped if (!(model.Redirect.Count == 1 && string.IsNullOrEmpty(model.Redirect.First().Key))) { model.Redirect.ToList().ForEach(x => { var newMeta = new PuckMeta(); newMeta.Name = x.Key.StartsWith(DBNames.Redirect301) ? DBNames.Redirect301 : DBNames.Redirect302; newMeta.Key = x.Key.Substring(newMeta.Name.Length); newMeta.Value = x.Value; repo.AddMeta(newMeta); }); } } repo.SaveChanges(); StateHelper.UpdateRedirectMappings(true); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public static bool InitializeSync() { using (var scope = PuckCache.ServiceProvider.CreateScope()) { var repo = scope.ServiceProvider.GetService <I_Puck_Repository>(); var contentService = scope.ServiceProvider.GetService <I_Content_Service>(); var serverName = ApiHelper.ServerName(); var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.SyncId && x.Key == serverName).FirstOrDefault(); if (meta == null) { var newMeta = new PuckMeta(); newMeta.Name = DBNames.SyncId; newMeta.Key = ApiHelper.ServerName(); int?maxId = repo.GetPuckInstruction().Max(x => (int?)x.Id); newMeta.Value = (maxId ?? 0).ToString(); repo.AddPuckMeta(newMeta); repo.SaveChanges(); return(true); } } return(false); }
public JsonResult FieldGroups(Settings model) { string msg = ""; bool success = false; try { //fieldgroup if (model.TypeGroupField != null && model.TypeGroupField.Count > 0) { foreach (var mod in apiHelper.AllModels(true)) { var fieldGroupMeta = repo.GetPuckMeta().Where(x => x.Name.StartsWith(DBNames.FieldGroups + mod.Name)).ToList(); fieldGroupMeta.ForEach(x => { repo.DeleteMeta(x); }); } model.TypeGroupField.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.FieldGroups + values[0]; newMeta.Key = values[1]; newMeta.Value = values[2]; repo.AddMeta(newMeta); }); } repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public void DeleteMeta(PuckMeta meta) { repo.PuckMeta.Remove(meta); //repo.SaveChanges(); }
public async Task <JsonResult> EditUserGroup(PuckUserGroupViewModel userGroup, bool edit) { bool success = false; string message = ""; try { if (!ModelState.IsValid) { throw new Exception("model invalid."); } if (!edit) { var existingMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.UserGroup && x.Name.ToLower() == (string.IsNullOrEmpty(userGroup.Name)?"":userGroup.Name).ToLower()).FirstOrDefault(); if (existingMeta != null) { throw new Exception("A group with that name already exists."); } //add puck meta var meta = new PuckMeta() { Name = DBNames.UserGroup, Key = userGroup.Name, Value = string.Join(",", userGroup.Roles) }; repo.AddPuckMeta(meta); repo.SaveChanges(); success = true; } else { //edit puck meta var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.UserGroup && x.Id == userGroup.Id).FirstOrDefault(); if (meta != null) { meta.Key = userGroup.Name; meta.Value = string.Join(",", userGroup.Roles); } else { meta = new PuckMeta() { Name = DBNames.UserGroup, Key = userGroup.Name, Value = string.Join(",", userGroup.Roles) }; repo.AddPuckMeta(meta); } repo.SaveChanges(); success = true; } } catch (Exception ex) { log.Log(ex); success = false; message = ex.Message; } return(Json(new { success = success, message = message })); }
public void AddMeta(PuckMeta meta) { repo.PuckMeta.Add(meta); //repo.SaveChanges(); //return meta.ID; }
public JsonResult Edit(Settings model) { string msg = ""; bool success = false; try { // TODO: Add update logic here //default language if (!string.IsNullOrEmpty(model.DefaultLanguage)) { var metaDL = repo.GetPuckMeta().Where(x => x.Name == DBNames.Settings && x.Key == DBKeys.DefaultLanguage).FirstOrDefault(); if (metaDL != null) { metaDL.Value = model.DefaultLanguage; } else { var newMeta = new PuckMeta(); newMeta.Name = DBNames.Settings; newMeta.Key = DBKeys.DefaultLanguage; newMeta.Value = model.DefaultLanguage; repo.AddMeta(newMeta); } } //enable local prefix var metaELP = repo.GetPuckMeta().Where(x => x.Name == DBNames.Settings && x.Key == DBKeys.EnableLocalePrefix).FirstOrDefault(); if (metaELP != null) { metaELP.Value = model.EnableLocalePrefix.ToString(); } else { var newMeta = new PuckMeta(); newMeta.Name = DBNames.Settings; newMeta.Key = DBKeys.EnableLocalePrefix; newMeta.Value = model.EnableLocalePrefix.ToString(); repo.AddMeta(newMeta); } //languages if (model.Languages != null && model.Languages.Count > 0) { var metaLanguages = repo.GetPuckMeta().Where(x => x.Name == DBNames.Settings && x.Key == DBKeys.Languages).ToList(); if (metaLanguages.Count > 0) { metaLanguages.ForEach(x => { repo.DeleteMeta(x); }); } model.Languages.ForEach(x => { var newMeta = new PuckMeta(); newMeta.Name = DBNames.Settings; newMeta.Key = DBKeys.Languages; newMeta.Value = x; repo.AddMeta(newMeta); }); } //redirects if (model.Redirect != null && model.Redirect.Count > 0) { var redirectMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.Redirect301 || x.Name == DBNames.Redirect302).ToList(); redirectMeta.ForEach(x => { repo.DeleteMeta(x); }); //count of 1 and key/value of null indicates delete only so inserts are skipped if (!(model.Redirect.Count == 1 && string.IsNullOrEmpty(model.Redirect.First().Key))) { model.Redirect.ToList().ForEach(x => { var newMeta = new PuckMeta(); newMeta.Name = x.Key.StartsWith(DBNames.Redirect301) ? DBNames.Redirect301 : DBNames.Redirect302; newMeta.Key = x.Key.Substring(newMeta.Name.Length); newMeta.Value = x.Value; repo.AddMeta(newMeta); }); } } //fieldgroup if (model.TypeGroupField != null && model.TypeGroupField.Count > 0) { foreach (var mod in apiHelper.AllModels(true)) { var fieldGroupMeta = repo.GetPuckMeta().Where(x => x.Name.StartsWith(DBNames.FieldGroups + mod.AssemblyQualifiedName)).ToList(); fieldGroupMeta.ForEach(x => { repo.DeleteMeta(x); }); } model.TypeGroupField.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.FieldGroups + values[0]; newMeta.Key = values[1]; newMeta.Value = values[2]; repo.AddMeta(newMeta); }); } //typeallowedtypes if (model.TypeAllowedTypes != null && model.TypeAllowedTypes.Count > 0) { var typeAllowedTypesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTypes).ToList(); typeAllowedTypesMeta.ForEach(x => { repo.DeleteMeta(x); }); model.TypeAllowedTypes.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTypes; newMeta.Key = values[0]; newMeta.Value = values[1]; repo.AddMeta(newMeta); }); } //typeallowedtemplates if (model.TypeAllowedTemplates != null && model.TypeAllowedTemplates.Count > 0) { var typeAllowedTemplatesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTemplates).ToList(); typeAllowedTemplatesMeta.ForEach(x => { repo.DeleteMeta(x); }); model.TypeAllowedTemplates.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTemplates; newMeta.Key = values[0]; newMeta.Value = values[1]; repo.AddMeta(newMeta); }); } //cachepolicy if (model.CachePolicy == null) { model.CachePolicy = new List <string>(); } var cacheTypes = new List <string>(); if (model.CachePolicy.Count > 0) { foreach (var entry in model.CachePolicy) { var type = entry.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[0]; cacheTypes.Add(type); var minutes = entry.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[1]; int min; if (!int.TryParse(minutes, out min)) { throw new Exception("cache policy minutes not int for type:" + type); } var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.CachePolicy && x.Key.ToLower().Equals(type.ToLower())).FirstOrDefault(); if (meta != null) { meta.Value = minutes; } else { meta = new PuckMeta() { Name = DBNames.CachePolicy, Key = type, Value = minutes }; repo.AddMeta(meta); } } } //delete unset repo.GetPuckMeta().Where(x => x.Name == DBNames.CachePolicy && !cacheTypes.Contains(x.Key)).ToList().ForEach(x => repo.DeleteMeta(x)); //orphan types if (model.Orphans != null && model.Orphans.Count > 0) { foreach (var entry in model.Orphans) { var t1 = entry.Key; var t2 = entry.Value; contentService.RenameOrphaned(t1, t2); } } repo.SaveChanges(); StateHelper.UpdateDefaultLanguage(); StateHelper.UpdateCacheMappings(); StateHelper.UpdateRedirectMappings(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public JsonResult AllowedTemplates(Settings model) { string msg = ""; bool success = false; try { //typeallowedtemplates if (model.TypeAllowedTemplates != null && model.TypeAllowedTemplates.Count > 0) { var typeAllowedTemplatesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTemplates).ToList(); typeAllowedTemplatesMeta.ForEach(x => { repo.DeleteMeta(x); }); model.TypeAllowedTemplates.ForEach(x => { var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTemplates; newMeta.Key = values[0]; newMeta.Value = values[1]; repo.AddMeta(newMeta); }); } else { var typeAllowedTemplatesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTemplates).ToList(); typeAllowedTemplatesMeta.ForEach(x => { repo.DeleteMeta(x); }); } var modelTypes = apiHelper.Models(); string cacheKeys = ""; foreach (var modelType in modelTypes) { string cacheKey = "allowedViews_" + modelType.Name; cacheKeys += cacheKey + ","; cache.Remove(cacheKey); } cacheKeys = cacheKeys.TrimEnd(','); var instruction = new PuckInstruction() { Count = modelTypes.Count, ServerName = ApiHelper.ServerName(), InstructionDetail = cacheKeys, InstructionKey = InstructionKeys.RemoveFromCache }; repo.AddPuckInstruction(instruction); repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
//update class hierarchies/typechains which may have changed since last run public static void UpdateTypeChains() { using (var scope = PuckCache.ServiceProvider.CreateScope()) { var repo = scope.ServiceProvider.GetService <I_Puck_Repository>(); var excluded = new List <Type> { typeof(puck.core.Entities.PuckRevision) }; var currentTypes = ApiHelper.FindDerivedClasses(typeof(puck.core.Base.BaseModel), excluded: excluded, inclusive: false); var meta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeChain).ToList(); var typesToUpdate = new List <Type>(); foreach (var item in meta) { //check saved type is in currentTypes var type = currentTypes.FirstOrDefault(x => x.Name.Equals(item.Key)); if (type != null) { var typeChain = ApiHelper.TypeChain(type); var dbTypeChain = item.Value; //check that typechain is the same //if not, add to types to update if (!typeChain.Equals(dbTypeChain)) { typesToUpdate.Add(type); } } } var toIndex = new List <BaseModel>(); foreach (var type in typesToUpdate) { //get revisions whose typechains have changed var revisions = repo.GetPuckRevision().Where(x => x.Type.Equals(type.Name)); foreach (var revision in revisions) { //update typechain in revision and in model which may need to be published revision.TypeChain = ApiHelper.TypeChain(type); var model = revision.ToBaseModel(); model.TypeChain = ApiHelper.TypeChain(type); revision.Value = JsonConvert.SerializeObject(model); if (model.Published && revision.Current) { toIndex.Add(model); } } repo.SaveChanges(); } //publish content with updated typechains indexer.Index(toIndex); //delete typechains from previous bootstrap meta.ForEach(x => repo.DeletePuckMeta(x)); repo.SaveChanges(); //save typechains from current bootstrap currentTypes.ToList().ForEach(x => { var newMeta = new PuckMeta { Name = DBNames.TypeChain, Key = x.Name, Value = ApiHelper.TypeChain(x) }; repo.AddPuckMeta(newMeta); }); repo.SaveChanges(); } }
public JsonResult AllowedTemplates(Settings model) { string msg = ""; bool success = false; try { //typeallowedtemplates var i = 0; if (model.TypeAllowedTemplates != null && model.TypeAllowedTemplates.Count > 0) { var typeAllowedTemplatesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTemplates).ToList(); var metaPosted = new List <PuckMeta>(); model.TypeAllowedTemplates.ForEach(x => { var dt = DateTime.Now.AddMinutes(i + 1); var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTemplates; newMeta.Key = values[0]; newMeta.Value = values[1]; newMeta.Dt = dt; metaPosted.Add(newMeta); var existingMeta = typeAllowedTemplatesMeta.FirstOrDefault(m => m.Name == newMeta.Name && m.Key == newMeta.Key && m.Value == newMeta.Value); if (existingMeta == null) { repo.AddPuckMeta(newMeta); } else { existingMeta.Dt = dt; } i++; }); typeAllowedTemplatesMeta.ForEach(x => { if (!metaPosted.Any(p => p.Name == x.Name && p.Key == x.Key && p.Value == x.Value)) { repo.DeletePuckMeta(x); } }); } else { var typeAllowedTemplatesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTemplates).ToList(); typeAllowedTemplatesMeta.ForEach(x => { repo.DeletePuckMeta(x); }); } var modelTypes = apiHelper.Models(); string cacheKeys = ""; foreach (var modelType in modelTypes) { string cacheKey = "allowedViews_" + modelType.Name; cacheKeys += cacheKey + ","; cache.Remove(cacheKey); } cacheKeys = cacheKeys.TrimEnd(','); var instruction = new PuckInstruction() { Count = modelTypes.Count, ServerName = ApiHelper.ServerName(), InstructionDetail = cacheKeys, InstructionKey = InstructionKeys.RemoveFromCache }; repo.AddPuckInstruction(instruction); repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }
public JsonResult AllowedModels(Settings model) { string msg = ""; bool success = false; try { //typeallowedtypes var i = 0; if (model.TypeAllowedTypes != null && model.TypeAllowedTypes.Count > 0) { var typeAllowedTypesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTypes).ToList(); var metaPosted = new List <PuckMeta>(); model.TypeAllowedTypes.ForEach(x => { var dt = DateTime.Now.AddMinutes(i + 1); var values = x.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); var newMeta = new PuckMeta(); newMeta.Name = DBNames.TypeAllowedTypes; newMeta.Key = values[0]; newMeta.Value = values[1]; newMeta.Dt = dt; metaPosted.Add(newMeta); var existingMeta = typeAllowedTypesMeta.FirstOrDefault(m => m.Name == newMeta.Name && m.Key == newMeta.Key && m.Value == newMeta.Value); if (existingMeta == null) {//only add meta that isn't already in db repo.AddPuckMeta(newMeta); } else { existingMeta.Dt = dt; } i++; }); typeAllowedTypesMeta.ForEach(x => { //only delete meta that's in db but wasn't posted back with the model if (!metaPosted.Any(p => p.Name == x.Name && p.Key == x.Key && p.Value == x.Value)) { repo.DeletePuckMeta(x); } }); } else { var typeAllowedTypesMeta = repo.GetPuckMeta().Where(x => x.Name == DBNames.TypeAllowedTypes).ToList(); typeAllowedTypesMeta.ForEach(x => { repo.DeletePuckMeta(x); }); } repo.SaveChanges(); success = true; } catch (Exception ex) { msg = ex.Message; success = false; } return(Json(new { success = success, message = msg })); }