Dynamically creating Tabs And adding Modules in DotNetNuke

This example is about how to create tabs through code, set permission of tabs and embed an existing desktop module to that tab, set permission of desktop module, clear module cache, tab cache, portal cache.

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using DotNetNuke;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Entities.Modules.Definitions;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Entities.Tabs;
using DotNetNuke.Security.Permissions;
using DotNetNuke.Common;
using System.Data.SqlClient;

public partial class CreateTabWithModuleClass : PortalModuleBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateTabWithModule();
    }
    protected void CreateTabWithModule()
    {
        //Create Tab
        PortalSettings portalSettings = new PortalSettings();
        int portalId = portalSettings.PortalId;

        TabController tabController = new TabController();
        TabInfo parentTab = tabController.GetTabByName("Questionnaires", portalId);

        TabInfo tab = new TabInfo();
        tab.PortalID = portalId;
        tab.TabName = "qqq_" + txtQuestionnaireName.Text;
        tab.Title = txtQuestionnaireName.Text;
        tab.Description = "qqq_" + txtQuestionnaireName.Text;
        tab.KeyWords = "qqq_" + txtQuestionnaireName.Text;
        //works for include in menu option. if true, will be shown in menus, else will not be shown, we have to redirect internally
        tab.IsVisible = false;        
        tab.DisableLink = false;
        //if this tab has any parents provide parent tab id, so that it will be shown in parent tab menus sub menu list, else is NULL         //and will be in main menu list
        tab.ParentId = parentTab.TabID;
        tab.IsDeleted = false;
        tab.Url = "";
        tab.IsSuperTab = false;//if true, it has no parents, else false
        tab.SkinSrc = "[G]Skins/WP-DEFAULT/wp_member_default.ascx";//provide skin src, else will take default skin
        int tabId = tabController.AddTab(tab, true);//true to load defalut modules
        
        //Set Tab Permission
        TabPermissionController objTPC = new TabPermissionController();

        TabPermissionInfo tpi = new TabPermissionInfo();
        tpi.TabID = tabId;
        tpi.PermissionID = 3;//for view
        tpi.PermissionKey = "VIEW";
        tpi.PermissionName = "View Tab";
        tpi.AllowAccess = true;
        tpi.RoleID = 0; //Role ID of administrator         
        objTPC.AddTabPermission(tpi);

        TabPermissionInfo tpi1 = new TabPermissionInfo();
        tpi1.TabID = tabId;
        tpi1.PermissionID = 4;//for edit
        tpi1.PermissionKey = "EDIT";
        tpi1.PermissionName = "Edit Tab";
        tpi1.AllowAccess = true;
        tpi1.RoleID = 0; //Role ID of administrator       
        objTPC.AddTabPermission(tpi1);

        TabPermissionInfo tpi2 = new TabPermissionInfo();
        tpi2.TabID = tabId;
        tpi2.PermissionID = 3;
        tpi2.PermissionKey = "VIEW";
        tpi2.PermissionName = "View Tab";
        tpi2.AllowAccess = true;
        tpi2.RoleID = 4; //Role ID of specified user     
        objTPC.AddTabPermission(tpi2);

        TabPermissionInfo tpi3 = new TabPermissionInfo();
        tpi3.TabID = tabId;
        tpi3.PermissionID = 4;
        tpi3.PermissionKey = "EDIT";
        tpi3.PermissionName = "Edit Tab";
        tpi3.AllowAccess = true;
        tpi3.RoleID = 4; //Role ID of specified user     
        objTPC.AddTabPermission(tpi3);

        TabPermissionInfo tpi4 = new TabPermissionInfo();
        tpi4.TabID = tabId;
        tpi4.PermissionID = 3;
        tpi4.PermissionKey = "VIEW";
        tpi4.PermissionName = "View Tab";
        tpi4.AllowAccess = true;
        tpi4.RoleID = 1; //Role ID of Registered users     
        tpi4.RoleName = "Registered Users";
        tpi4.PermissionCode = "SYSTEM_TAB";
        objTPC.AddTabPermission(tpi4);
        
        //Add Module
        DesktopModuleController objDMC = new DesktopModuleController();
        DesktopModuleInfo desktopModuleInfo = objDMC.GetDesktopModuleByName("Dynamic Forms");        

        ModuleDefinitionInfo moduleDefinitionInfo = new ModuleDefinitionInfo();
        ModuleInfo moduleInfo = new ModuleInfo();
        moduleInfo.PortalID = portalId;
        moduleInfo.TabID = tabId;
        moduleInfo.ModuleOrder = 1;
        moduleInfo.ModuleTitle = "Dynamic Forms";
        moduleInfo.PaneName = "Dynamic Forms";
        moduleInfo.ModuleDefID = 169;
        moduleInfo.CacheTime = moduleDefinitionInfo.DefaultCacheTime;//Default Cache Time is 0
        moduleInfo.InheritViewPermissions = true;//Inherit View Permissions from Tab
        moduleInfo.AllTabs = false;
        moduleInfo.Alignment = "Top";

        ModuleController moduleController = new ModuleController();
        int moduleId = moduleController.AddModule(moduleInfo);

        //Set Module Permission
        ModulePermissionController objMPC = new ModulePermissionController();

        ModulePermissionInfo mpi1 = new ModulePermissionInfo();
        mpi1.ModuleID = moduleId;
        mpi1.PermissionID = 1;//View Permission
        mpi1.AllowAccess = true;
        mpi1.RoleID = 0;//Role ID of Administrator
        objMPC.AddModulePermission(mpi1);

        ModulePermissionInfo mpi2 = new ModulePermissionInfo();
        mpi2.ModuleID = moduleId;
        mpi2.PermissionID = 2;//Edit Permission
        mpi2.AllowAccess = true;
        mpi2.RoleID = 0;//Role ID of Administrator
        objMPC.AddModulePermission(mpi2);

        ModulePermissionInfo mpi3 = new ModulePermissionInfo();
        mpi3.ModuleID = moduleId;
        mpi3.PermissionID = 1;//View Permission
        mpi3.AllowAccess = true;
        mpi3.RoleID = 4;//Role ID of Specified User
        objMPC.AddModulePermission(mpi3);

        ModulePermissionInfo mpi4 = new ModulePermissionInfo();
        mpi4.ModuleID = moduleId;
        mpi4.PermissionID = 2;//Edit Permission
        mpi4.AllowAccess = true;
        mpi4.RoleID = 4;//Role ID of Specified User
        objMPC.AddModulePermission(mpi4);

        ModulePermissionInfo mpi5 = new ModulePermissionInfo();
        mpi5.ModuleID = moduleId;
        mpi5.PermissionID = 1;//View Permission
        mpi5.AllowAccess = true;
        mpi5.RoleID = 1;//Role ID of Registered User
        objMPC.AddModulePermission(mpi5);
        
        //Clear Cache
        DotNetNuke.Common.Utilities.DataCache.ClearModuleCache(tab.TabID);
        DotNetNuke.Common.Utilities.DataCache.ClearTabsCache(PortalId);
        DotNetNuke.Common.Utilities.DataCache.ClearPortalCache(PortalId, false);        
    }
}
150 150 Burnignorance | Where Minds Meet And Sparks Fly!