private void Autosave(HttpContextBase context) { var selected = Selection.ParseSelectionFromRequest(); if (selected == null) { throw new HttpException((int)HttpStatusCode.NotFound, "Not Found"); } var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary <object>(); var discriminator = EditExtensions.GetDiscriminator(context.Request); var versions = engine.Resolve <VersionManager>(); ContentItem item; if (string.IsNullOrEmpty(discriminator)) { item = selected; if (item.State != ContentState.Draft) { item = versions.GetOrCreateDraft(item); } Update(requestBody, item); if (item.ID == 0 && item.VersionOf.HasValue) { versions.UpdateVersion(item); } else { engine.Persister.Save(item); } } else { int id; if (requestBody.ContainsKey("ID") && (id = (int)requestBody["ID"]) != 0) { item = engine.Persister.Get(id); } else { item = engine.Resolve <IDefinitionManager>().GetDefinition(discriminator).CreateInstance(selected); item.State = ContentState.Draft; } Update(requestBody, item); if (item.ID == 0 && (item.VersionOf.HasValue || !item.IsPage)) { versions.UpdateVersion(item); } else { engine.Persister.Save(item); } } context.Response.WriteJson(new { ID = item.VersionOf.ID ?? item.ID, VersionIndex = item.VersionIndex, Path = item.Path, PreviewUrl = item.Url, Permission = engine.ResolveAdapter <NodeAdapter>(item).GetMaximumPermission(item), Permissions = engine.SecurityManager.GetPermissions(context.User, item), Draft = new DraftInfo { ItemID = item.VersionOf.ID ?? item.ID, Saved = item.Updated, SavedBy = item.SavedBy, VersionIndex = item.VersionIndex }, Node = engine.ResolveAdapter <NodeAdapter>(item.VersionOf.Value ?? item).GetTreeNode(item.VersionOf.Value ?? item) }); }
private void Autosave(HttpContextBase context) { var selected = Selection.ParseSelectionFromRequest(); if (selected == null) { throw new HttpException((int)HttpStatusCode.NotFound, "Not Found"); } var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary <object>(); var discriminator = EditExtensions.GetDiscriminator(context.Request); var versions = engine.Resolve <VersionManager>(); ContentItem item; if (string.IsNullOrEmpty(discriminator)) { item = selected; if (item.State != ContentState.Draft) { item = versions.GetOrCreateDraft(item); } Update(requestBody, item); var page = Find.ClosestPage(item); // existing page // draft of existing page // existing part // draft of existing part if (item.VersionOf.HasValue) { versions.UpdateVersion(item); } else if (page != null && page.VersionOf.HasValue) { versions.UpdateVersion(item); } else { engine.Persister.Save(item); } } else { var parent = selected; int id; if (requestBody.ContainsKey("ID") && (id = (int)requestBody["ID"]) != 0) { item = engine.Persister.Get(id); } else { var definitions = engine.Resolve <IDefinitionManager>(); var definition = definitions.GetDefinition(discriminator); if (!definition.IsPage) { if (parent.ID != 0 && !parent.VersionOf.HasValue) { parent = versions.GetOrCreateDraft(parent); } } var templateKey = context.Request["template"]; var zoneName = context.Request["zoneName"]; item = engine.Resolve <ContentActivator>().CreateInstance(definition.ItemType, parent, templateKey); item.State = ContentState.Draft; item.ZoneName = zoneName; item.AddTo(parent); } Update(requestBody, item); // new page // new part if (item.ID == 0 && (item.VersionOf.HasValue || !item.IsPage)) { versions.UpdateVersion(item); } else { engine.Persister.Save(item); } } context.Response.WriteJson(new { EditUrl = engine.ManagementPaths.GetEditExistingItemUrl(item, context.Request["returnUrl"]), PageID = Find.ClosestPage(item)?.VersionOf?.ID ?? Find.ClosestPage(item)?.ID, ID = item.VersionOf.ID ?? item.ID, VersionIndex = item.VersionIndex, VersionKey = item.GetVersionKey(), Selected = context.Request[PathData.SelectedQueryKey], Path = item.Path, PreviewUrl = item.Url, Permission = engine.ResolveAdapter <NodeAdapter>(item).GetMaximumPermission(item), Permissions = engine.SecurityManager.GetPermissions(context.User, item), Draft = new DraftInfo { ItemID = item.VersionOf.ID ?? item.ID, Saved = item.Updated, SavedBy = item.SavedBy, VersionIndex = item.VersionIndex }, Node = engine.ResolveAdapter <NodeAdapter>(item.VersionOf.Value ?? item).GetTreeNode(item.VersionOf.Value ?? item) }); }
private void Autosave(HttpContextBase context) { var selected = Selection.ParseSelectionFromRequest(); if (selected == null) { throw new HttpException((int)HttpStatusCode.NotFound, "Not Found"); } var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary <object>(); var discriminator = EditExtensions.GetDiscriminator(context.Request); ContentItem item; if (string.IsNullOrEmpty(discriminator)) { item = selected; var versions = engine.Resolve <VersionManager>(); if (item.State != ContentState.Draft) { item = versions.GetOrCreateDraft(item); } Update(requestBody, item); if (item.ID == 0 && item.VersionOf.HasValue) { versions.UpdateVersion(item); } else { engine.Persister.Repository.SaveOrUpdate(item); engine.Persister.Repository.Flush(); } } else { int id; if (requestBody.ContainsKey("ID") && (id = (int)requestBody["ID"]) != 0) { item = engine.Persister.Get(id); } else { item = engine.Resolve <IDefinitionManager>().GetDefinition(discriminator).CreateInstance(selected); item.State = ContentState.Draft; } Update(requestBody, item); bool itemNeedsResaveWithIdGeneratedName = string.IsNullOrEmpty(item.Name); engine.Persister.Repository.SaveOrUpdate(item); engine.Persister.Repository.Flush(); if (itemNeedsResaveWithIdGeneratedName) { engine.Persister.Repository.Flush(); } } context.Response.WriteJson(new { ID = item.VersionOf.ID ?? item.ID, VersionIndex = item.VersionIndex }); }