Esempio n. 1
0
        private IEnumerable <ItemDefinition> CreateDefinitions(HttpContextBase context)
        {
            var item = Selection.ParseSelectionFromRequest();

            if (item != null)
            {
                return(engine.Definitions.GetAllowedChildren(item, null).WhereAuthorized(engine.SecurityManager, context.User, item));
            }
            else
            {
                return(engine.Definitions.GetDefinitions());
            }
        }
Esempio n. 2
0
 private void EnsureValidSelection()
 {
     if (Selection.ParseSelectionFromRequest() == null)
     {
         throw new HttpException(404, "Not Found");
     }
 }
Esempio n. 3
0
        private static ContentItem GetSelectedItem(SelectionUtility selection, ProfileUser profile)
        {
            var selectedItem = selection.ParseSelectionFromRequest();

            if (selectedItem == null && profile.Settings.ContainsKey("Selected"))
            {
                selectedItem = selection.ParseSelected((string)profile.Settings["Selected"]);
            }
            return(selectedItem ?? (selection.Traverse.StartPage));
        }
Esempio n. 4
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()
            });
        }
Esempio n. 5
0
        public ContentItem GetAutosaveVersion()
        {
            var value = Page.Request[ClientID + "_autosaved_url"];

            if (string.IsNullOrEmpty(value))
            {
                return(null);
            }

            Url editUrl   = value;
            var selection = new SelectionUtility(key => editUrl[key], Engine);
            var item      = selection.ParseSelectionFromRequest();

            return(item);
        }
Esempio n. 6
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)
            });
        }
        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");
            }

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

            return(data);
        }
Esempio n. 8
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)
            });
        }
Esempio n. 9
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 });
        }