public virtual CodeEditViewModel GetEdit(string codetype, ApiCall call) { call.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); call.Context.Response.Headers.Add("Access-Control-Allow-Headers", "*"); var sitedb = call.WebSite.SiteDb(); call.WebSite.BaseUrl(); if (call.ObjectId != default(Guid)) { var code = sitedb.Code.Get(call.ObjectId); CodeEditViewModel model = new CodeEditViewModel(); if (code != null) { model.Name = code.Name; model.Body = code.Body; model.Config = code.Config; model.EventType = Enum.GetName(typeof(Kooboo.Sites.FrontEvent.enumEventType), code.EventType); model.CodeType = Enum.GetName(typeof(Kooboo.Sites.Models.CodeType), code.CodeType); model.Id = code.Id; if (code.CodeType == Sites.Models.CodeType.Api) { var route = sitedb.Routes.GetByObjectId(model.Id); if (route != null) { model.Url = route.Name; } } } return(model); } else { CodeEditViewModel model = new CodeEditViewModel(); model.Config = configSample(); if (codetype != null && codetype.ToLower() != "all") { var enumcodetype = Lib.Helper.EnumHelper.GetEnum <CodeType>(codetype); model.Body = getSample(enumcodetype); } model.AvailableEventType = Enum.GetNames(typeof(Kooboo.Sites.FrontEvent.enumEventType)).ToList(); model.AvailableCodeType = Enum.GetNames(typeof(Kooboo.Sites.Models.CodeType)).ToList(); return(model); } }
public virtual Guid Post(CodeEditViewModel model, ApiCall call) { var sitedb = call.WebSite.SiteDb(); Code code = new Code(); code.Name = model.Name; code.Config = model.Config; code.Body = model.Body; if (HasScriptTag(code.Body)) { throw new Exception(Data.Language.Hardcoded.GetValue("You do not need script tag in code. Only in the page, view or layout, you need the script tag")); } if (!string.IsNullOrEmpty(model.EventType)) { code.EventType = Lib.Helper.EnumHelper.GetEnum <Sites.FrontEvent.enumEventType>(model.EventType); } if (!string.IsNullOrEmpty(model.CodeType)) { code.CodeType = Lib.Helper.EnumHelper.GetEnum <CodeType>(model.CodeType); } code.Id = model.Id; if (code.CodeType == Sites.Models.CodeType.Api) { if (!string.IsNullOrEmpty(model.Url) && !sitedb.Routes.Validate(model.Url, model.Id)) { throw new Exception(Data.Language.Hardcoded.GetValue("Url occupied", call.Context)); } // check if it only return Json... code.IsJson = Lib.Helper.JsonHelper.IsJson(code.Body); } if (model.Id != default(Guid)) { var oldcode = sitedb.Code.Get(model.Id); if (oldcode != null) { oldcode.Name = model.Name; oldcode.Body = model.Body; oldcode.Config = model.Config; oldcode.IsJson = Lib.Helper.JsonHelper.IsJson(oldcode.Body); if (oldcode.IsEmbedded && oldcode.CodeType == Sites.Models.CodeType.PageScript) { sitedb.Code.AddOrUpdate(oldcode, true, true, call.Context.User.Id); } else { sitedb.Code.AddOrUpdate(oldcode, call.Context.User.Id); } code.EventType = oldcode.EventType; code.CodeType = oldcode.CodeType; } } else { sitedb.Code.AddOrUpdate(code); } if (code.CodeType == Sites.Models.CodeType.Api) { string url = model.Url; if (!string.IsNullOrEmpty(url)) { var route = new Kooboo.Sites.Routing.Route(); route.Name = url; route.objectId = code.Id; route.DestinationConstType = ConstObjectType.Code; sitedb.Routes.AddOrUpdate(route); } else { // delete the route. var route = sitedb.Routes.GetByObjectId(code.Id); if (route != null) { sitedb.Routes.Delete(route.Id); } } } return(code.Id); }
public virtual Guid Post(CodeEditViewModel model, ApiCall call) { if (model.Url != null) { if (model.Url.StartsWith("\\")) { model.Url = "/" + model.Url.Substring(1); } if (!model.Url.StartsWith("/")) { model.Url = "/" + model.Url; } } else { throw new Exception(Kooboo.Data.Language.Hardcoded.GetValue("Url is required", call.Context)); } var sitedb = call.WebSite.SiteDb(); Code code = new Code(); code.Name = model.Name; code.Config = model.Config; code.Body = model.Body; if (HasScriptTag(code.Body)) { throw new Exception(Data.Language.Hardcoded.GetValue("You do not need script tag in code. Only in the page, view or layout, you need the script tag")); } if (!string.IsNullOrEmpty(model.EventType)) { code.EventType = Lib.Helper.EnumHelper.GetEnum <Sites.FrontEvent.enumEventType>(model.EventType); } if (!string.IsNullOrEmpty(model.CodeType)) { code.CodeType = Lib.Helper.EnumHelper.GetEnum <CodeType>(model.CodeType); } code.Id = model.Id; if (code.CodeType == Sites.Models.CodeType.Api) { if (!string.IsNullOrEmpty(model.Url) && !sitedb.Routes.Validate(model.Url, model.Id)) { // one more verify. var route = sitedb.Routes.Get(model.Url); if (route != null && route.objectId != default(Guid)) { var siteobjecttype = Kooboo.ConstTypeContainer.GetModelType(route.DestinationConstType); if (siteobjecttype != null) { var repo = sitedb.GetSiteRepositoryByModelType(siteobjecttype); if (repo != null) { var obj = repo.Get(route.objectId); if (obj != null) { throw new Exception(Data.Language.Hardcoded.GetValue("Url occupied", call.Context)); } } } } } // check if it only return Json... code.IsJson = Lib.Helper.JsonHelper.IsJson(code.Body); } if (model.Id != default(Guid)) { var oldcode = sitedb.Code.Get(model.Id); if (oldcode != null) { // check if needed to change route. if (code.CodeType == Sites.Models.CodeType.Api) { var oldroute = sitedb.Routes.GetByObjectId(oldcode.Id); if (oldroute != null && oldroute.Name != model.Url) { sitedb.Routes.ChangeRoute(oldroute.Name, model.Url); } } oldcode.Name = model.Name; oldcode.Body = model.Body; oldcode.Config = model.Config; oldcode.IsJson = Lib.Helper.JsonHelper.IsJson(oldcode.Body); if (oldcode.IsEmbedded && oldcode.CodeType == Sites.Models.CodeType.PageScript) { sitedb.Code.AddOrUpdate(oldcode, true, true, call.Context.User.Id); } else { sitedb.Code.AddOrUpdate(oldcode, call.Context.User.Id); } code.EventType = oldcode.EventType; code.CodeType = oldcode.CodeType; } } else { //Api add route. if (code.CodeType == Sites.Models.CodeType.Api) { // add a new route. var route = new Kooboo.Sites.Routing.Route(); route.Name = model.Url; route.objectId = code.Id; route.DestinationConstType = ConstObjectType.Code; sitedb.Routes.AddOrUpdate(route); } sitedb.Code.AddOrUpdate(code); } return(code.Id); }