protected void rptControls_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { var control = e.Item.DataItem as DashboardControl; if (control != null) { Control dashboardControl; if (control.DashboardControlSrc.ToLowerInvariant().EndsWith("ascx")) { //load from a user control on the file system dashboardControl = LoadControl("~/" + control.DashboardControlSrc); } else { //load from a typename in an assembly ( ie. server control ) dashboardControl = LoadControl(Reflection.CreateType(control.DashboardControlSrc), null); } dashboardControl.ID = Path.GetFileNameWithoutExtension(control.DashboardControlSrc); var placeHolder = (PlaceHolder)e.Item.FindControl("phControl"); placeHolder.Controls.Add(dashboardControl); } } }
private void DoAddExistingModule(int moduleId, int tabId, string paneName, int position, string align, bool cloneModule) { ModuleInfo moduleInfo = ModuleController.Instance.GetModule(moduleId, tabId, false); int userID = -1; if (this.Request.IsAuthenticated) { UserInfo user = UserController.Instance.GetCurrentUserInfo(); if (user != null) { userID = user.UserID; } } if (moduleInfo != null) { // Is this from a site other than our own? (i.e., is the user requesting "module sharing"?) var remote = moduleInfo.PortalID != PortalSettings.Current.PortalId; if (remote) { switch (moduleInfo.DesktopModule.Shareable) { case ModuleSharing.Unsupported: // Should never happen since the module should not be listed in the first place. throw new ApplicationException(string.Format( "Module '{0}' does not support Shareable and should not be listed in Add Existing Module from a different source site", moduleInfo.DesktopModule.FriendlyName)); case ModuleSharing.Supported: break; default: case ModuleSharing.Unknown: break; } } // clone the module object ( to avoid creating an object reference to the data cache ) ModuleInfo newModule = moduleInfo.Clone(); newModule.UniqueId = Guid.NewGuid(); // Cloned Module requires a different uniqueID newModule.TabModuleID = Null.NullInteger; newModule.TabID = PortalSettings.Current.ActiveTab.TabID; newModule.ModuleOrder = position; newModule.PaneName = paneName; newModule.Alignment = align; if (cloneModule) { newModule.ModuleID = Null.NullInteger; // copy module settings and tab module settings newModule.ModuleSettings.Clear(); foreach (var key in moduleInfo.ModuleSettings.Keys) { newModule.ModuleSettings.Add(key, moduleInfo.ModuleSettings[key]); } newModule.TabModuleSettings.Clear(); foreach (var key in moduleInfo.TabModuleSettings.Keys) { newModule.TabModuleSettings.Add(key, moduleInfo.TabModuleSettings[key]); } // reset the module id newModule.ModuleID = ModuleController.Instance.AddModule(newModule); if (!string.IsNullOrEmpty(newModule.DesktopModule.BusinessControllerClass)) { object objObject = Reflection.CreateObject(newModule.DesktopModule.BusinessControllerClass, newModule.DesktopModule.BusinessControllerClass); if (objObject is IPortable) { try { SetCloneModuleContext(true); string content = Convert.ToString(((IPortable)objObject).ExportModule(moduleId)); if (!string.IsNullOrEmpty(content)) { ((IPortable)objObject).ImportModule(newModule.ModuleID, content, newModule.DesktopModule.Version, userID); } } finally { SetCloneModuleContext(false); } } } } else { // copy tab module settings newModule.TabModuleSettings.Clear(); foreach (var key in moduleInfo.TabModuleSettings.Keys) { newModule.TabModuleSettings.Add(key, moduleInfo.TabModuleSettings[key]); } ModuleController.Instance.AddModule(newModule); } if (remote) { // Ensure the Portal Admin has View rights var permissionController = new PermissionController(); ArrayList arrSystemModuleViewPermissions = permissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", "VIEW"); AddModulePermission( newModule, (PermissionInfo)arrSystemModuleViewPermissions[0], PortalSettings.Current.AdministratorRoleId, Null.NullInteger, true); // Set PortalID correctly newModule.OwnerPortalID = newModule.PortalID; newModule.PortalID = PortalSettings.Current.PortalId; ModulePermissionController.SaveModulePermissions(newModule); } // Add Event Log EventLogController.Instance.AddLog(newModule, PortalSettings.Current, userID, string.Empty, EventLogController.EventLogType.MODULE_CREATED); } }