/// <summary>
 /// Checks if the options entered require user input. If user input is not required, the page should be created automatically and the user taken to EditMode of the new page.
 /// This function does some rudimentary validation of object values. If not all object values are filled in, user input is needed (returns true).
 /// </summary>
 /// <returns></returns>
 public bool RequiresUserInput()
 {
     if (!PromptUserForFilename && AllItemsHaveAValue(CmsPageLanguageInfo.GetNames(NewPageLanguageInfos)) &&
         !PromptUserForTitle &&
         !PromptUserForMenuTitle &&
         !PromptUserForTemplate && Template.Trim() != "" &&
         !PromptUserForParentPage && ParentPageId >= 0)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
        public static CmsCreateNewPageOptions ReadFromQueryString()
        {
            int parentId = PageUtils.getFromForm("ParentPageId", -1);
            CmsCreateNewPageOptions ret = new CmsCreateNewPageOptions();

            // -- modify smart defaults if the query string isn't formatted correctly.
            if (parentId >= 0)
            {
                CmsPage parentPage = CmsContext.getPageById(parentId);
                if (parentPage.ID >= 0)
                {
                    parentId = parentPage.ID;
                    ret      = CreateInstanceWithDefaultsForCurrentUser(parentPage);
                }
            }

            ret.PromptUserForFilename   = PageUtils.getFromForm("pFilename", ret.PromptUserForFilename);
            ret.PromptUserForTitle      = PageUtils.getFromForm("pTitle", ret.PromptUserForTitle);
            ret.PromptUserForMenuTitle  = PageUtils.getFromForm("pMenuTitle", ret.PromptUserForMenuTitle);
            ret.PromptUserForShowInMenu = PageUtils.getFromForm("pShowInMenu", ret.PromptUserForShowInMenu);
            ret.PromptUserForTemplate   = PageUtils.getFromForm("pTemplate", ret.PromptUserForTemplate);
            ret.PromptUserForParentPage = PageUtils.getFromForm("pParentPage", ret.PromptUserForParentPage);

            List <CmsPageLanguageInfo> langInfos = new List <CmsPageLanguageInfo>();

            foreach (CmsLanguage lang in CmsConfig.Languages)
            {
                CmsPageLanguageInfo langInfo = CmsPageLanguageInfo.GetFromHaystack(lang, ret.NewPageLanguageInfos); // returns a new CmsPageLangInfo if not found
                langInfo.languageShortCode       = lang.shortCode;
                langInfo.menuTitle               = PageUtils.getFromForm("MenuTitle_" + lang.shortCode, langInfo.menuTitle);
                langInfo.title                   = PageUtils.getFromForm("Title_" + lang.shortCode, langInfo.title);
                langInfo.searchEngineDescription = PageUtils.getFromForm("SEDesc_" + lang.shortCode, langInfo.searchEngineDescription);
                langInfo.name = PageUtils.getFromForm("Name_" + lang.shortCode, langInfo.name);

                langInfos.Add(langInfo);
            } // foreach lang

            ret.NewPageLanguageInfos = langInfos.ToArray();

            ret.ShowInMenu   = PageUtils.getFromForm("ShowInMenu", ret.ShowInMenu);
            ret.Template     = PageUtils.getFromForm("Template", ret.Template);
            ret.ParentPageId = parentId;

            return(ret);
        }
        public static CmsCreateNewPageOptions GetInstanceWithNoUserPrompts(string newPageName, string newPageTitle, string newPageMenuTitle, string newPageSearchEngineDescription, bool newPageShowInMenu, string newPageTemplate, int newPageParentId)
        {
            List <CmsPageLanguageInfo> newPageLangInfos = new List <CmsPageLanguageInfo>();

            foreach (CmsLanguage lang in CmsConfig.Languages)
            {
                CmsPageLanguageInfo langInfo = new CmsPageLanguageInfo();
                langInfo.languageShortCode = lang.shortCode;
                langInfo.name      = newPageName;
                langInfo.title     = newPageTitle;
                langInfo.menuTitle = newPageMenuTitle;
                langInfo.searchEngineDescription = newPageSearchEngineDescription;

                newPageLangInfos.Add(langInfo);
            }

            return(CreateInstanceWithNoUserPrompts(newPageLangInfos.ToArray(), newPageShowInMenu, newPageTemplate, newPageParentId));
        }
        public static CmsCreateNewPageOptions CreateInstanceWithDefaultsForCurrentUser(CmsPage editMenuPage)
        {
            CmsCreateNewPageOptions ret = new CmsCreateNewPageOptions();
            // CreateNewPage_DefaultTemplate; use "~~ParentTemplate~~" for the new page's parent's template
            string defaultTemplate = CmsConfig.getConfigValue("CreateNewPage_DefaultTemplate", editMenuPage.TemplateName);

            if (string.Compare(defaultTemplate, "~~ParentTemplate~~", true) == 0)
            {
                defaultTemplate = editMenuPage.TemplateName;
            }

            if (CmsContext.currentUserIsSuperAdmin)
            {
                ret.PromptUserForFilename   = true;
                ret.PromptUserForTitle      = true;
                ret.PromptUserForMenuTitle  = true;
                ret.PromptUserForShowInMenu = true;
                ret.PromptUserForTemplate   = true;
                ret.PromptUserForParentPage = true;

                List <CmsPageLanguageInfo> langInfos = new List <CmsPageLanguageInfo>();
                foreach (CmsLanguage lang in CmsConfig.Languages)
                {
                    CmsPageLanguageInfo l = new CmsPageLanguageInfo();
                    l.languageShortCode = lang.shortCode;
                    l.name      = "";
                    l.title     = "";
                    l.menuTitle = "";
                    l.searchEngineDescription = "";

                    langInfos.Add(l);
                }

                ret.NewPageLanguageInfos = langInfos.ToArray();

                ret.ShowInMenu   = true;
                ret.Template     = defaultTemplate;
                ret.ParentPageId = editMenuPage.ID;
            }
            else if (editMenuPage.currentUserCanWrite)
            {
                ret.PromptUserForFilename   = true;
                ret.PromptUserForTitle      = true;
                ret.PromptUserForMenuTitle  = false;
                ret.PromptUserForShowInMenu = false;
                ret.PromptUserForTemplate   = false;
                ret.PromptUserForParentPage = false;

                List <CmsPageLanguageInfo> langInfos = new List <CmsPageLanguageInfo>();
                foreach (CmsLanguage lang in CmsConfig.Languages)
                {
                    CmsPageLanguageInfo l = new CmsPageLanguageInfo();
                    l.languageShortCode = lang.shortCode;
                    l.name      = "";
                    l.title     = "";
                    l.menuTitle = "";
                    l.searchEngineDescription = "";

                    langInfos.Add(l);
                }

                ret.NewPageLanguageInfos = langInfos.ToArray();

                ret.ShowInMenu   = true;
                ret.Template     = defaultTemplate;
                ret.ParentPageId = editMenuPage.ID;
            }
            else
            {
                ret.PromptUserForFilename   = false;
                ret.PromptUserForTitle      = false;
                ret.PromptUserForMenuTitle  = false;
                ret.PromptUserForShowInMenu = false;
                ret.PromptUserForTemplate   = false;
                ret.PromptUserForParentPage = false;

                List <CmsPageLanguageInfo> langInfos = new List <CmsPageLanguageInfo>();
                foreach (CmsLanguage lang in CmsConfig.Languages)
                {
                    CmsPageLanguageInfo l = new CmsPageLanguageInfo();
                    l.languageShortCode = lang.shortCode;
                    l.name      = "";
                    l.title     = "";
                    l.menuTitle = "";
                    l.searchEngineDescription = "";

                    langInfos.Add(l);
                }

                ret.NewPageLanguageInfos = langInfos.ToArray();

                ret.ShowInMenu   = true;
                ret.Template     = defaultTemplate;
                ret.ParentPageId = editMenuPage.ID;
            }

            return(ret);
        }