private void ApplyDefaultTabTemplate(TabInfo tab) { var portalSettings = PortalController.Instance.GetCurrentPortalSettings(); var templateFile = Path.Combine(portalSettings.HomeDirectoryMapPath, "Templates\\" + DefaultPageTemplate); if (!File.Exists(templateFile)) { return; } var xmlDoc = new XmlDocument(); try { xmlDoc.Load(templateFile); TabController.DeserializePanes(xmlDoc.SelectSingleNode("//portal/tabs/tab/panes"), tab.PortalID, tab.TabID, PortalTemplateModuleAction.Ignore, new Hashtable()); } catch (Exception ex) { throw new DotNetNukeException("Unable to process page template.", ex, DotNetNukeErrorCode.DeserializePanesFailed); } }
public static int SaveTabInfoObject(TabInfo tab, TabInfo relativeToTab, TabRelativeLocation location, string templateFileId) { //Validation: //Tab name is required //Tab name is invalid string invalidType; if (!TabController.IsValidTabName(tab.TabName, out invalidType)) { switch (invalidType) { case "EmptyTabName": throw new DotNetNukeException("Page name is required.", DotNetNukeErrorCode.PageNameRequired); case "InvalidTabName": throw new DotNetNukeException("Page name is invalid.", DotNetNukeErrorCode.PageNameInvalid); } } else if ((Validate_IsCircularReference(tab.PortalID, tab.TabID))) { throw new DotNetNukeException("Cannot move page to that location.", DotNetNukeErrorCode.PageCircularReference); } bool usingDefaultLanguage = (tab.CultureCode == PortalSettings.Current.DefaultLanguage) || tab.CultureCode == null; if (PortalSettings.Current.ContentLocalizationEnabled) { if ((!usingDefaultLanguage)) { TabInfo defaultLanguageSelectedTab = tab.DefaultLanguageTab; if ((defaultLanguageSelectedTab == null)) { //get the siblings from the selectedtab and iterate through until you find a sibbling with a corresponding defaultlanguagetab //if none are found get a list of all the tabs from the default language and then select the last one var selectedTabSibblings = TabController.Instance.GetTabsByPortal(tab.PortalID).WithCulture(tab.CultureCode, true).AsList(); foreach (TabInfo sibling in selectedTabSibblings) { TabInfo siblingDefaultTab = sibling.DefaultLanguageTab; if (((siblingDefaultTab != null))) { defaultLanguageSelectedTab = siblingDefaultTab; break; } } //still haven't found it if ((defaultLanguageSelectedTab == null)) { var defaultLanguageTabs = TabController.Instance.GetTabsByPortal(tab.PortalID).WithCulture(PortalSettings.Current.DefaultLanguage, true).AsList(); defaultLanguageSelectedTab = defaultLanguageTabs[defaultLanguageTabs.Count]; //get the last tab } } relativeToTab = defaultLanguageSelectedTab; } } if ((location != TabRelativeLocation.NOTSET)) { //Check Host tab - don't allow adding before or after if ((IsHostConsolePage(relativeToTab) && (location == TabRelativeLocation.AFTER || location == TabRelativeLocation.BEFORE))) { throw new DotNetNukeException("You cannot add or move pages before or after the Host tab.", DotNetNukeErrorCode.HostBeforeAfterError); } TabInfo parentTab = GetParentTab(relativeToTab, location); string permissionList = "ADD,COPY,EDIT,MANAGE"; //Check permissions for Page Editors when moving or inserting if ((!PortalSecurity.IsInRole("Administrators"))) { if (((parentTab == null) || !TabPermissionController.HasTabPermission(parentTab.TabPermissions, permissionList))) { throw new DotNetNukeException("You do not have permissions to add or move pages to this location. You can only add or move pages as children of pages you can edit.", DotNetNukeErrorCode.PageEditorPermissionError); } } if (((parentTab != null))) { tab.ParentId = parentTab.TabID; tab.Level = parentTab.Level + 1; } else { tab.ParentId = Null.NullInteger; tab.Level = 0; } } if ((tab.TabID > Null.NullInteger && tab.TabID == tab.ParentId)) { throw new DotNetNukeException("Parent page is invalid.", DotNetNukeErrorCode.ParentTabInvalid); } tab.TabPath = Globals.GenerateTabPath(tab.ParentId, tab.TabName); //check whether have conflict between tab path and portal alias. if (TabController.IsDuplicateWithPortalAlias(PortalSettings.Current.PortalId, tab.TabPath)) { throw new DotNetNukeException("The page path is duplicate with a site alias", DotNetNukeErrorCode.DuplicateWithAlias); } try { if ((tab.TabID < 0)) { if ((tab.TabPermissions.Count == 0 && tab.PortalID != Null.NullInteger)) { //Give admin full permission ArrayList permissions = PermissionController.GetPermissionsByTab(); foreach (PermissionInfo permission in permissions) { TabPermissionInfo newTabPermission = new TabPermissionInfo(); newTabPermission.PermissionID = permission.PermissionID; newTabPermission.PermissionKey = permission.PermissionKey; newTabPermission.PermissionName = permission.PermissionName; newTabPermission.AllowAccess = true; newTabPermission.RoleID = PortalSettings.Current.AdministratorRoleId; tab.TabPermissions.Add(newTabPermission); } } PortalSettings _PortalSettings = PortalController.Instance.GetCurrentPortalSettings(); if (_PortalSettings.ContentLocalizationEnabled) { Locale defaultLocale = LocaleController.Instance.GetDefaultLocale(tab.PortalID); tab.CultureCode = defaultLocale.Code; } else { tab.CultureCode = Null.NullString; } if ((location == TabRelativeLocation.AFTER && (relativeToTab != null))) { tab.TabID = TabController.Instance.AddTabAfter(tab, relativeToTab.TabID); } else if ((location == TabRelativeLocation.BEFORE && (relativeToTab != null))) { tab.TabID = TabController.Instance.AddTabBefore(tab, relativeToTab.TabID); } else { tab.TabID = TabController.Instance.AddTab(tab); } if (_PortalSettings.ContentLocalizationEnabled) { TabController.Instance.CreateLocalizedCopies(tab); } TabController.Instance.UpdateTabSetting(tab.TabID, "CacheProvider", ""); TabController.Instance.UpdateTabSetting(tab.TabID, "CacheDuration", ""); TabController.Instance.UpdateTabSetting(tab.TabID, "CacheIncludeExclude", "0"); TabController.Instance.UpdateTabSetting(tab.TabID, "IncludeVaryBy", ""); TabController.Instance.UpdateTabSetting(tab.TabID, "ExcludeVaryBy", ""); TabController.Instance.UpdateTabSetting(tab.TabID, "MaxVaryByCount", ""); } else { TabController.Instance.UpdateTab(tab); if ((location == TabRelativeLocation.AFTER && (relativeToTab != null))) { TabController.Instance.MoveTabAfter(tab, relativeToTab.TabID); } else if ((location == TabRelativeLocation.BEFORE && (relativeToTab != null))) { TabController.Instance.MoveTabBefore(tab, relativeToTab.TabID); } } } catch (Exception ex) { Logger.Error(ex); if (ex.Message.StartsWith("Page Exists")) { throw new DotNetNukeException(ex.Message, DotNetNukeErrorCode.PageExists); } } // create the page from a template if (!string.IsNullOrEmpty(templateFileId)) { XmlDocument xmlDoc = new XmlDocument { XmlResolver = null }; try { var templateFile = FileManager.Instance.GetFile(Convert.ToInt32(templateFileId)); xmlDoc.Load(FileManager.Instance.GetFileContent(templateFile)); TabController.DeserializePanes(xmlDoc.SelectSingleNode("//portal/tabs/tab/panes"), tab.PortalID, tab.TabID, PortalTemplateModuleAction.Ignore, new Hashtable()); //save tab permissions DeserializeTabPermissions(xmlDoc.SelectNodes("//portal/tabs/tab/tabpermissions/permission"), tab); } catch (Exception ex) { Exceptions.LogException(ex); throw new DotNetNukeException("Unable to process page template.", ex, DotNetNukeErrorCode.DeserializePanesFailed); } } //todo: reload tab from db or send back tabid instead? return(tab.TabID); }
public void ParsePanes(XmlNode nodePanes, int portalId, int TabId, PortalTemplateModuleAction mergeTabs, Hashtable hModules) { TabController.DeserializePanes(nodePanes, portalId, TabId, mergeTabs, hModules); }
public void CreatePageFromTemplate(int templateId, TabInfo tab, int portalId) { // create the page from a template if (templateId != Null.NullInteger) { var xmlDoc = new XmlDocument { XmlResolver = null }; try { // open the XML file var fileId = Convert.ToInt32(templateId); var templateFile = FileManager.Instance.GetFile(fileId); xmlDoc.Load(FileManager.Instance.GetFileContent(templateFile)); } catch (Exception ex) { DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); throw new PageException(Localization.GetString("BadTemplate")); } TabController.DeserializePanes(xmlDoc.SelectSingleNode("//portal/tabs/tab/panes"), tab.PortalID, tab.TabID, PortalTemplateModuleAction.Ignore, new Hashtable()); //save tab permissions RibbonBarManager.DeserializeTabPermissions(xmlDoc.SelectNodes("//portal/tabs/tab/tabpermissions/permission"), tab); var tabIndex = 0; var exceptions = string.Empty; // ReSharper disable once PossibleNullReferenceException foreach (XmlNode tabNode in xmlDoc.SelectSingleNode("//portal/tabs").ChildNodes) { //Create second tab onward tabs. Note first tab is already created above. if (tabIndex > 0) { try { TabController.DeserializeTab(tabNode, null, portalId, PortalTemplateModuleAction.Replace); } catch (Exception ex) { DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); exceptions += string.Format("Template Tab # {0}. Error {1}<br/>", tabIndex + 1, ex.Message); } } else { if (string.IsNullOrEmpty(tab.SkinSrc) && !String.IsNullOrEmpty(XmlUtils.GetNodeValue(tabNode, "skinsrc", ""))) { tab.SkinSrc = XmlUtils.GetNodeValue(tabNode, "skinsrc", ""); } if (string.IsNullOrEmpty(tab.ContainerSrc) && !String.IsNullOrEmpty(XmlUtils.GetNodeValue(tabNode, "containersrc", ""))) { tab.ContainerSrc = XmlUtils.GetNodeValue(tabNode, "containersrc", ""); } bool isSecure; if (bool.TryParse(XmlUtils.GetNodeValue(tabNode, "issecure", ""), out isSecure)) { tab.IsSecure = isSecure; } TabController.Instance.UpdateTab(tab); } tabIndex++; } if (!string.IsNullOrEmpty(exceptions)) { throw new PageException(exceptions); } } }