Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Finally after several days I found the answer to my own question. If anyone else is looking for a way to programatically create DotNetNuke pages, populate them with modules, and configure the modules --here's your solution!</p> <p><a href="http://kemmis.info/blog/archive/2007/11/07/programmatically-creating-dotnetnuke-pages.aspx" rel="nofollow">This blog entry</a> by Rafe Kemmis was my starting point, though based on an earlier version of DNN. He has several other DNN articles which may also be useful. </p> <p>Another section of the code below was taken from the DNN source. I did some tweaking, but it's still 99% from source. </p> <p>The following is a test DNN module I put together while working on this problem. I hope you find it useful. Figuring it out was certainly educational.</p> <pre><code>Imports System.Web.UI Imports System.Collections.Generic Imports System.Reflection Imports DotNetNuke Imports DotNetNuke.Security.Permissions Imports DotNetNuke.Services.Exceptions Imports DotNetNuke.Services.Localization Imports DotNetNuke.Entities.Modules Imports DotNetNuke.Entities.Modules.Definitions Imports DotNetNuke.Entities.Users Namespace DNNTest.Modules.PageGenerator Partial Class ViewPageGenerator Inherits Entities.Modules.PortalModuleBase #Region "Enums" Private Enum ViewPermissionType View = 0 Edit = 1 End Enum #End Region #Region "Events" Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try If (Not IsPostBack) Then PermGrid.TabID = -1 ParentsDropDownList.DataSource = TabController.GetPortalTabs(PortalId, TabId, True, False) ParentsDropDownList.DataBind() End If Catch ex As Exception 'failure Exceptions.ProcessModuleLoadException(Me, ex) End Try End Sub Protected Sub btnAddPage_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddPage.Click CreatePage(Trim(txtTabName.Text), Trim(txtTabTitle.Text), Trim(txtTabDesc.Text), Trim(txtTabKeyWords.Text), PermGrid.Permissions) End Sub #End Region #Region "DNN Page Creation" Private Sub CreatePage(ByVal PageName As String, ByVal PageTitle As String, ByVal Description As String, ByVal Keywords As String, ByVal Permissions As TabPermissionCollection, Optional ByVal LoadDefaultModules As Boolean = True) Dim controller As New TabController Dim newTab As New Tabs.TabInfo Dim newPermissions As TabPermissionCollection = newTab.TabPermissions Dim permissionProvider As PermissionProvider = permissionProvider.Instance Dim infPermission As TabPermissionInfo ' set new page properties newTab.PortalID = PortalId newTab.TabName = PageName newTab.Title = PageTitle newTab.Description = Description newTab.KeyWords = Keywords newTab.IsDeleted = False newTab.IsSuperTab = False newTab.IsVisible = True newTab.DisableLink = False newTab.IconFile = "" newTab.Url = "" newTab.ParentId = CInt(ParentsDropDownList.SelectedValue) ' create new page controller.AddTab(newTab, LoadDefaultModules) ' copy permissions selected in Permissions collection For index As Integer = 0 To (Permissions.Count - 1) infPermission = New TabPermissionInfo infPermission.AllowAccess = Permissions(index).AllowAccess infPermission.RoleID = Permissions(index).RoleID infPermission.RoleName = Permissions(index).RoleName infPermission.TabID = Permissions(index).TabID infPermission.PermissionID = Permissions(index).PermissionID 'save permission info newPermissions.Add(infPermission, True) permissionProvider.SaveTabPermissions(newTab) Next index 'create module on page 'CreateModule(newTab.TabID, "MyHTMLModule", "ContentPane", "Text/HTML") CreateModule(newTab.TabID, "MyModule", "ContentPane", "Custom_DNN_Module") ' clear the cache DataCache.ClearModuleCache(newTab.TabID) End Sub Private Sub CreateModule(ByVal TabID As Integer, ByVal modTitle As String, ByVal paneName As String, ByVal modDefinitionFriendlyName As String) 'Create a completely new module on the new page Dim modDefInfo As ModuleDefinitionInfo = ModuleDefinitionController.GetModuleDefinitionByFriendlyName(modDefinitionFriendlyName) AddNewModule(TabID, modTitle, modDefInfo.DesktopModuleID, paneName, 0, ViewPermissionType.View, "") 'Configure Module Settings ConfigModuleSettings(ModuleID) End Sub Private Sub ConfigModuleSettings(ByVal ModuleID As Integer) Dim objModules As New ModuleController Dim TabModuleID As Integer = objModules.GetModule(ModuleID).TabModuleID objModules.UpdateTabModuleSetting(TabModuleID, "MySetting", "1") End Sub #Region "From DNN Source --mostly" ''' ----------------------------------------------------------------------------- ''' &lt;summary&gt;Adds a New Module to a Pane&lt;/summary&gt; ''' &lt;param name="align"&gt;The alignment for the Module&lt;/param&gt; ''' &lt;param name="desktopModuleId"&gt;The Id of the DesktopModule&lt;/param&gt; ''' &lt;param name="permissionType"&gt;The View Permission Type for the Module&lt;/param&gt; ''' &lt;param name="title"&gt;The Title for the resulting module&lt;/param&gt; ''' &lt;param name="paneName"&gt;The pane to add the module to&lt;/param&gt; ''' &lt;param name="position"&gt;The relative position within the pane for the module&lt;/param&gt; ''' ----------------------------------------------------------------------------- Private Sub AddNewModule(ByVal TabID As Integer, ByVal title As String, ByVal desktopModuleId As Integer, ByVal paneName As String, ByVal position As Integer, ByVal permissionType As ViewPermissionType, ByVal align As String) Dim objTabController As New TabController Dim objTabPermissions As TabPermissionCollection = objTabController.GetTab(TabID, PortalId, True).TabPermissions Dim objPermissionController As New PermissionController Dim objModules As New ModuleController Dim objModuleDefinition As ModuleDefinitionInfo Dim objEventLog As New Services.Log.EventLog.EventLogController Dim j As Integer Try Dim desktopModule As DesktopModuleInfo = Nothing If Not DesktopModuleController.GetDesktopModules(PortalSettings.PortalId).TryGetValue(desktopModuleId, desktopModule) Then Throw New ArgumentException("desktopModuleId") End If Catch ex As Exception LogException(ex) End Try Dim UserId As Integer = -1 If Request.IsAuthenticated Then Dim objUserInfo As Users.UserInfo = UserController.GetCurrentUserInfo UserId = objUserInfo.UserID End If For Each objModuleDefinition In ModuleDefinitionController.GetModuleDefinitionsByDesktopModuleID(desktopModuleId).Values Dim objModule As New ModuleInfo objModule.Initialize(PortalSettings.PortalId) objModule.PortalID = PortalSettings.PortalId objModule.TabID = TabId objModule.ModuleOrder = position If title = "" Then objModule.ModuleTitle = objModuleDefinition.FriendlyName Else objModule.ModuleTitle = title End If objModule.PaneName = paneName objModule.ModuleDefID = objModuleDefinition.ModuleDefID If objModuleDefinition.DefaultCacheTime &gt; 0 Then objModule.CacheTime = objModuleDefinition.DefaultCacheTime If Portals.PortalSettings.Current.DefaultModuleId &gt; Null.NullInteger AndAlso Portals.PortalSettings.Current.DefaultTabId &gt; Null.NullInteger Then Dim defaultModule As ModuleInfo = objModules.GetModule(Portals.PortalSettings.Current.DefaultModuleId, Portals.PortalSettings.Current.DefaultTabId, True) If Not defaultModule Is Nothing Then objModule.CacheTime = defaultModule.CacheTime End If End If End If Select Case permissionType Case ViewPermissionType.View objModule.InheritViewPermissions = True Case ViewPermissionType.Edit objModule.InheritViewPermissions = False End Select ' get the default module view permissions Dim arrSystemModuleViewPermissions As ArrayList = objPermissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", "VIEW") ' get the permissions from the page For Each objTabPermission As TabPermissionInfo In objTabPermissions If objTabPermission.PermissionKey = "VIEW" AndAlso permissionType = ViewPermissionType.View Then 'Don't need to explicitly add View permisisons if "Same As Page" Continue For End If ' get the system module permissions for the permissionkey Dim arrSystemModulePermissions As ArrayList = objPermissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", objTabPermission.PermissionKey) ' loop through the system module permissions For j = 0 To arrSystemModulePermissions.Count - 1 ' create the module permission Dim objSystemModulePermission As PermissionInfo objSystemModulePermission = CType(arrSystemModulePermissions(j), PermissionInfo) If objSystemModulePermission.PermissionKey = "VIEW" AndAlso permissionType = ViewPermissionType.Edit AndAlso _ objTabPermission.PermissionKey &lt;&gt; "EDIT" Then 'Only Page Editors get View permissions if "Page Editors Only" Continue For End If Dim objModulePermission As ModulePermissionInfo = AddModulePermission(objModule, _ objSystemModulePermission, _ objTabPermission.RoleID, objTabPermission.UserID, _ objTabPermission.AllowAccess) ' ensure that every EDIT permission which allows access also provides VIEW permission If objModulePermission.PermissionKey = "EDIT" And objModulePermission.AllowAccess Then Dim objModuleViewperm As ModulePermissionInfo = AddModulePermission(objModule, _ CType(arrSystemModuleViewPermissions(0), PermissionInfo), _ objModulePermission.RoleID, objModulePermission.UserID, _ True) End If Next 'Get the custom Module Permissions, Assume that roles with Edit Tab Permissions 'are automatically assigned to the Custom Module Permissions If objTabPermission.PermissionKey = "EDIT" Then Dim arrCustomModulePermissions As ArrayList = objPermissionController.GetPermissionsByModuleDefID(objModule.ModuleDefID) ' loop through the custom module permissions For j = 0 To arrCustomModulePermissions.Count - 1 ' create the module permission Dim objCustomModulePermission As PermissionInfo objCustomModulePermission = CType(arrCustomModulePermissions(j), PermissionInfo) AddModulePermission(objModule, objCustomModulePermission, _ objTabPermission.RoleID, objTabPermission.UserID, _ objTabPermission.AllowAccess) Next End If Next objModule.AllTabs = False objModule.Alignment = align objModules.AddModule(objModule) Next End Sub ''' ----------------------------------------------------------------------------- ''' &lt;summary&gt;Adds a Module Permission&lt;/summary&gt; ''' &lt;param name="permission"&gt;The permission to add&lt;/param&gt; ''' &lt;param name="roleId"&gt;The Id of the role to add the permission for.&lt;/param&gt; ''' ----------------------------------------------------------------------------- Private Function AddModulePermission(ByVal objModule As ModuleInfo, ByVal permission As PermissionInfo, ByVal roleId As Integer, ByVal userId As Integer, ByVal allowAccess As Boolean) As ModulePermissionInfo Dim objModulePermission As New ModulePermissionInfo objModulePermission.ModuleID = objModule.ModuleID objModulePermission.PermissionID = permission.PermissionID objModulePermission.RoleID = roleId objModulePermission.UserID = userId objModulePermission.PermissionKey = permission.PermissionKey objModulePermission.AllowAccess = allowAccess ' add the permission to the collection If Not objModule.ModulePermissions.Contains(objModulePermission) Then objModule.ModulePermissions.Add(objModulePermission) End If Return objModulePermission End Function #End Region #End Region End Class End Namespace </code></pre> <p>Here's the markup...</p> <pre><code>&lt;%@ Control Language="vb" Inherits="DNNTest.Modules.PageGenerator.ViewPageGenerator" AutoEventWireup="false" Explicit="True" CodeBehind="ViewPageGenerator.ascx.vb" %&gt; &lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %&gt; &lt;%@ Register TagPrefix="Portal" Namespace="DotNetNuke.Security.Permissions.Controls" Assembly="DotNetNuke" %&gt; &lt;div&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label1" runat="server" Text="Parent Tab:" /&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:DropDownList ID="ParentsDropDownList" runat="server" DataTextField="TabName" DataValueField="TabID" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label2" runat="server" Text="Tab Name:"/&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:TextBox ID="txtTabName" runat="server"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label3" runat="server" Text="Tab Title:"/&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:TextBox ID="txtTabTitle" runat="server"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label4" runat="server" Text="Description:"/&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:TextBox ID="txtTabDesc" runat="server"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label5" runat="server" Text="Key Words:"/&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:TextBox ID="txtTabKeyWords" runat="server"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;br /&gt; &lt;Portal:TabPermissionsGrid ID="PermGrid" runat="server" /&gt; &lt;br /&gt; &lt;asp:Button ID="btnAddPage" runat="server" OnClick="btnAddPage_Click" Text="Add New Page Here" Width="161px" /&gt; &lt;/div&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload