Example #1
0
		private void Create(HttpContextBase context)
		{
			var parent = Selection.ParseSelectionFromRequest();
			if (parent == null)
				throw new HttpException((int)HttpStatusCode.NotFound, "Not Found");

			var discriminator = context.Request["discriminator"];
			var definition = engine.Definitions.GetDefinition(discriminator);

			var item = engine.Resolve<ContentActivator>().CreateInstance(definition.ItemType, parent);

			var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary<object>();
			foreach (var kvp in requestBody)
				item[kvp.Key] = kvp.Value;

			engine.Persister.Save(item);
		}
Example #2
0
		private void Update(HttpContextBase context)
		{
			var item = Selection.ParseSelectionFromRequest();
			if (item == null)
				throw new HttpException((int)HttpStatusCode.NotFound, "Not Found");

			var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary<object>();
			foreach (var kvp in requestBody)
				item[kvp.Key] = kvp.Value;

			engine.Persister.Save(item);
		}
Example #3
0
		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)
			});
		}
Example #4
0
		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 });
		}
Example #5
0
		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)
			});
		}
Example #6
0
 private void Patch(HttpContextBase context)
 {
     var requestBody = context.GetOrDeserializeRequestStreamJsonDictionary<object>();
     var user = GetUser(context.User);
     if (requestBody.ContainsKey("Settings") && requestBody["Settings"] is IDictionary<string, object>)
         foreach (var kvp in (IDictionary<string, object>)requestBody["Settings"])
         {
             if (kvp.Value != null)
                 user.Settings[kvp.Key] = kvp.Value;
             else
                 user.Settings.Remove(kvp.Key);
         }
     repository.Save(user);
     context.Response.WriteJson(new { User = user });
 }