Helps discovering item selection in editing interfaces.
Exemple #1
0
		// Upload partial file
		private IEnumerable<FilesStatus> UploadPartialFile(string fileName, HttpContext context, IFileSystem fs, SelectionUtility selection)
		{
			if (context.Request.Files.Count != 1) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request");

			var fileUpload = context.Request.Files[0];
			var inputStream = fileUpload.InputStream;
			var virtualPath = Url.Combine(selection.SelectedItem.Url, fileName);

			if (!IsFilenameTrusted(fileName))
			{
				yield return new FilesStatus(virtualPath, 0) { error = "Unsafe filename" };
			}
			else
			{

				using (var s = fs.OpenFile(virtualPath))
				{
					var buffer = new byte[1024];

					var l = inputStream.Read(buffer, 0, 1024);
					while (l > 0)
					{
						s.Write(buffer, 0, l);
						l = inputStream.Read(buffer, 0, 1024);
					}
					s.Flush();
					s.Close();
				}
				yield return new FilesStatus(virtualPath, fileUpload.ContentLength);
			}
		}
		public object PostNotes(HttpContextBase context, Dictionary<string, object> body)
		{
			var item = new SelectionUtility(context, engine).SelectedItem;
			item["CollaborationNote"] = body["note"];
			engine.Persister.Save(item);

			return new { Success = true };
		}
		public object Messages(HttpContextBase context)
		{
			var selectedItem = new SelectionUtility(context, engine).ParseSelectionFromRequest() ?? engine.Persister.Get(engine.Host.DefaultSite.RootItemID);
			var ctx = CollaborationContext.Create(DateTime.MinValue, selectedItem, context.User);
			return new
			{
				Messages = messages.GetMessages(ctx).ToList()
			};
		}
		public void ProcessRequest(HttpContext context)
		{
			var engine = N2.Context.Current;
			var selection = new SelectionUtility(context.Request, engine);
			engine.Resolve<Tracker>().UpdateReferencesTo(selection.SelectedItem);

			context.Response.ContentType = "application/json";
			context.Response.Write(new { success = true }.ToJson());
		}
Exemple #5
0
        public virtual ContextData GetInterfaceContextData(HttpContextBase context, SelectionUtility selection)
        {
            var item = selection.ParseSelectionFromRequest();

            Url selectedUrl = context.Request["selectedUrl"];
            if (item == null && selectedUrl != null)
                item = selection.ParseUrl(selectedUrl);

            var data = new ContextData();

            if (item != null)
            {
                var adapter = engine.GetContentAdapter<NodeAdapter>(item);
                data.CurrentItem = adapter.GetTreeNode(item);
                data.ExtendedInfo = CreateExtendedContextData(item, resolveVersions: true);
                var l = adapter.GetLanguage(item);
                if (l != null)
                    data.Language = new ContextLanguage { IconClass = "sprite " + (l.LanguageCode.Split('-').LastOrDefault() ?? string.Empty).ToLower(), LanguageCode = l.LanguageCode, LanguageTitle = l.LanguageTitle };
                data.Flags = adapter.GetNodeFlags(item).ToList();
            }
            else
                data.Flags = new List<string>();

            var mangementUrl = "{ManagementUrl}".ResolveUrlTokens();
            if (!selectedUrl.IsEmpty())
            {
                data.ReturnUrl = HttpUtility.UrlDecode(selectedUrl["returnUrl"]);
                var isOrganizing = selectedUrl["edit"] == "drag";
                if (selectedUrl.Path.StartsWith(mangementUrl, StringComparison.InvariantCultureIgnoreCase))
                {
                    data.Flags.Add("Management");
                    data.Flags.Add(selectedUrl.Path.Substring(mangementUrl.Length).ToUrl().PathWithoutExtension.Replace("/", ""));
                    if (isOrganizing)
                        data.Flags.Add("Organize");
                }
                else if (isOrganizing)
                {
                    data.Flags.Add("Management");
                    data.Flags.Add("Organize");
                }
            }

            if (new[] { "MyselfRoot", "ContentEditRecursive", "ContentTemplatesDefault", "ContentWizardDefault", "UsersUsers" }.Intersect(data.Flags).Any() == false)
                data.Flags.Add("ContentPages");

            data.Actions = CreateActions(context);

			var collaborationContext = CollaborationContext.Create(engine.Resolve<IProfileRepository>(), item, context);
			data.Messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>().GetMessages(collaborationContext).ToList();
			data.Flags.AddRange(engine.Resolve<N2.Edit.Collaboration.ManagementFlagCollector>().GetFlags(collaborationContext));

            if (ContextBuilt != null)
                ContextBuilt(this, new ContextBuiltEventArgs { Data = data });

            return data;
        }
Exemple #6
0
        private void NotifyEditing(IEngine engine, HttpContextWrapper context)
        {
            var selection = new SelectionUtility(context, engine);
            if (Convert.ToBoolean(context.Request["changes"]))
                engine.AddActivity(new ManagementActivity { Operation = "Edit", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path });

            var activities = ManagementActivity.GetActivity(engine, selection.SelectedItem);
            context.Response.ContentType = "application/json";
            context.Response.Write(ManagementActivity.ToJson(activities));
        }
        protected override void OnInit(EventArgs e)
        {
            Selection = Page.GetSelection();

            base.OnInit(e);

            InitMaxFileSize();

            Page.JQueryUi();
        }
Exemple #8
0
        private void NotifyEditing(IEngine engine, HttpContextWrapper context)
        {
            var selection = new SelectionUtility(context, engine);
            if (Convert.ToBoolean(context.Request["changes"]))
                engine.AddActivity(new ManagementActivity { Operation = "Edit", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path });

            var activities = ManagementActivity.GetActivity(engine, selection.SelectedItem);
			var messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>()
				.GetMessages(CollaborationContext.Create(engine.Resolve<IProfileRepository>(), selection.SelectedItem, context))
				.ToList();
            context.Response.ContentType = "application/json";
			context.Response.Write(ManagementActivity.ToJson(activities, messages));
        }
Exemple #9
0
        private void NotifyViewing(IEngine engine, HttpContextWrapper context)
        {
            var selection = new SelectionUtility(context, engine);
            if (selection.SelectedItem != null)
                engine.AddActivity(new ManagementActivity { Operation = "View", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path });

			context.Response.WriteJson(new
			{
				Messages = engine.Resolve<ManagementMessageCollector>()
				.GetMessages(CollaborationContext.Create(engine.Resolve<IProfileRepository>(), selection.SelectedItem, context))
					.ToList()
			});
        }
Exemple #10
0
        public PluginContext(SelectionUtility selection, ContentItem startItem, ContentItem rootItem, ControlPanelState state,
                             IEngine engine, HttpContextBase httpContext)
        {
            Selection = selection;
            State     = state;
            Selected  = selection.SelectedItem;
            Memorized = selection.MemorizedItem;
            Start     = startItem;
            Root      = rootItem;

            Engine      = engine;
            HttpContext = httpContext;
        }
        public PluginContext(SelectionUtility selection, ContentItem startItem, ContentItem rootItem, ControlPanelState state, 
            IEngine engine, HttpContextBase httpContext)
        {
            Selection = selection;
            State = state;
            Selected = selection.SelectedItem;
            Memorized = selection.MemorizedItem;
            Start = startItem;
            Root = rootItem;

            Engine = engine;
            HttpContext = httpContext;
        }
        // Upload entire file
        private IEnumerable<FilesStatus> UploadWholeFile(HttpContext context, IFileSystem fs, SelectionUtility selection)
        {
            for (int i = 0; i < context.Request.Files.Count; i++)
            {
                var file = context.Request.Files[i];
                var fileName = Path.GetFileName(file.FileName);
                var virtualPath = Url.Combine(((IFileSystemNode)selection.SelectedItem).LocalUrl, fileName);

                fs.WriteFile(virtualPath, file.InputStream);

                yield return new FilesStatus(virtualPath, file.ContentLength);
            }
        }
Exemple #13
0
        public static SelectionUtility GetSelection(this Page page)
        {
            if (page is Web.EditPage)
            {
                return((page as Web.EditPage).Selection);
            }

            var selection = page.Items["SelectionUtility"] as SelectionUtility;

            if (selection == null)
            {
                page.Items["SelectionUtility"] = selection = new SelectionUtility(page, N2.Context.Current);
            }

            return(selection);
        }
Exemple #14
0
		public void Handle(HttpContextBase context)
		{
			string tagName = context.Request["tagName"];
			string term = context.Request["term"];
			
			var selection = new SelectionUtility(context.Request, engine);
			var startPage = engine.Content.Traverse.ClosestStartPage(selection.SelectedItem);

			var allTags = engine.Resolve<CacheWrapper>()
				.GetOrCreate<IEnumerable<string>>("Tags" + startPage, () => tags.FindTags(startPage, tagName));
			var json = allTags
				.Where(t => t.StartsWith(term, StringComparison.InvariantCultureIgnoreCase))
				.Select(t => new { label = t })
				.ToJson();
			context.Response.ContentType = "application/json";
			context.Response.Write(json);
		}
		public object Notes(HttpContextBase context, int? skip, int? take)
		{
			var item = new SelectionUtility(context, engine).ParseSelectionFromRequest();
			if (item != null)
			{
				return new
				{
					Notes = item["CollaborationNote"] != null ? new[] { item["CollaborationNote"] } : new object[0]
				};
			}
			else
			{
				var items = engine.Persister.Repository.Find(Parameter.IsNotNull("CollaborationNote").Detail().Skip(skip ?? 0).Take(take ?? 1000));
				return new
				{
					AnnotatedItems = items.Select(ci => new { ci.ID, ci.Title, ci.Url, ci.IconUrl, ci.IconClass, Notes = new [] { ci["CollaborationNote"] } }).ToList()
				};
			}
		}
Exemple #16
0
        public void ProcessRequest(HttpContext context)
        {
            var request = context.Request;

            var ticket = FormsAuthentication.Decrypt(request["ticket"]);
            if (ticket.Expired)
                throw new N2.N2Exception("Upload ticket expired");
            if(!ticket.Name.StartsWith("SecureUpload-"))
                throw new N2.N2Exception("Unknown ticket");

            SelectionUtility selection = new SelectionUtility(request, N2.Context.Current);

            if (request.Files.Count > 0)
            {
                var fs = N2.Context.Current.Resolve<IFileSystem>();
                foreach (string key in request.Files.Keys)
                {
                    var file = request.Files[key];
                    fs.WriteFile(Url.Combine(selection.SelectedItem.Url, file.FileName), file.InputStream);
                }
            }
        }
		public void ProcessRequest(HttpContext context)
		{
            context.Response.AddHeader("Pragma", "no-cache");
            context.Response.AddHeader("Cache-Control", "private, no-cache");

            ValidateTicket(context.Request["ticket"]);

            SelectionUtility selection = new SelectionUtility(context, N2.Context.Current);
            var fs = N2.Context.Current.Resolve<IFileSystem>();

            List<FilesStatus> statuses;

            var headers = context.Request.Headers;
            if (string.IsNullOrEmpty(headers["X-File-Name"]))
            {
                statuses = UploadWholeFile(context, fs, selection).ToList();
            }
            else
            {
                statuses = UploadPartialFile(headers["X-File-Name"], context, fs, selection).ToList();
            }

            WriteJsonIframeSafe(context, statuses);
        }
Exemple #18
0
		public static SelectionUtility GetSelectionUtility(this HttpContextBase context, IEngine engine = null)
		{
			var selection = context.Items["CachedSelectionUtility"] as SelectionUtility;
			if (selection == null)
				context.Items["CachedSelectionUtility"] = selection = new SelectionUtility(context, engine ?? Context.Current);
			return selection;
		}
Exemple #19
0
		public static SelectionUtility GetSelection(this Page page)
		{
			if (page is Web.EditPage)
				return (page as Web.EditPage).Selection;

			var selection = page.Items["SelectionUtility"] as SelectionUtility;
			if(selection == null)
				page.Items["SelectionUtility"] = selection = new SelectionUtility(page, N2.Context.Current);

			return selection;
		}
Exemple #20
0
		public object GetMessages(HttpContextBase context, SelectionUtility selection)
		{
			var messageContext = new Edit.Collaboration.CollaborationContext { SelectedItem = selection.ParseSelectionFromRequest(), User = context.User }
				.ParseLastDismissed(context.Request["lastDismissed"]);
			return new
			{
				Messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>().GetMessages(messageContext).ToList()
			};
		}
Exemple #21
0
		private void Organize(HttpContextBase context, SelectionUtility selection)
		{
			var navigator = engine.Resolve<Navigator>();
			var persister = engine.Persister;
			var integrity = engine.IntegrityManager;
			var versions = engine.Resolve<IVersionManager>();
			var versionRepository = engine.Resolve<ContentVersionRepository>();

			string versionIndex = selection.RequestValueAccessor(PathData.VersionIndexQueryKey);
			string versionKey = selection.RequestValueAccessor(PathData.VersionKeyQueryKey);
            var path = PartsExtensions.EnsureDraft(versions, versionRepository, versionIndex, versionKey, selection.SelectedItem);
			ContentItem item = path.CurrentItem;
			ContentItem page = path.CurrentPage;

			item.ZoneName = selection.RequestValueAccessor("zone");

			var beforeItem = PartsExtensions.GetBeforeItem(navigator, selection.RequestValueAccessor, page);
			ContentItem parent;
			if (beforeItem != null)
			{
				parent = beforeItem.Parent;
				int newIndex = parent.Children.IndexOf(beforeItem);
				ThrowUnlessNull(integrity.GetMoveException(item, parent));
				Utility.Insert(item, parent, newIndex);
			}
			else
			{
				parent = PartsExtensions.GetBelowItem(navigator, selection.RequestValueAccessor, page);
				ThrowUnlessNull(integrity.GetMoveException(item, parent));
				Utility.Insert(item, parent, parent.Children.Count);
			}

			Utility.UpdateSortOrder(parent.Children);
			versionRepository.Save(page);
		}
Exemple #22
0
 private void NotifyViewing(IEngine engine, HttpContextWrapper context)
 {
     var selection = new SelectionUtility(context, engine);
     if (selection.SelectedItem != null)
         engine.AddActivity(new ManagementActivity { Operation = "View", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path });
 }