コード例 #1
0
        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();
        }
コード例 #2
0
        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 }));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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 }));
        }
コード例 #5
0
        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 }));
        }
コード例 #6
0
        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 }));
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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 }));
        }
コード例 #9
0
ファイル: TaskController.cs プロジェクト: tvarshney/puck-core
        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 }));
        }
コード例 #10
0
        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));
        }
コード例 #11
0
        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 }));
        }
コード例 #12
0
 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);
 }
コード例 #13
0
        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 }));
        }
コード例 #14
0
 public void DeleteMeta(PuckMeta meta)
 {
     repo.PuckMeta.Remove(meta);
     //repo.SaveChanges();
 }
コード例 #15
0
        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 }));
        }
コード例 #16
0
 public void AddMeta(PuckMeta meta)
 {
     repo.PuckMeta.Add(meta);
     //repo.SaveChanges();
     //return meta.ID;
 }
コード例 #17
0
        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 }));
        }
コード例 #18
0
        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 }));
        }
コード例 #19
0
ファイル: StateHelper.cs プロジェクト: yohsii/puck-core
 //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();
     }
 }
コード例 #20
0
        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 }));
        }
コード例 #21
0
        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 }));
        }