private int LocalizeModuleInternal(ModuleInfo sourceModule) { int moduleId = Null.NullInteger; if (sourceModule != null) { // clone the module object ( to avoid creating an object reference to the data cache ) var newModule = sourceModule.Clone(); newModule.ModuleID = Null.NullInteger; string translatorRoles = PortalController.GetPortalSetting(string.Format("DefaultTranslatorRoles-{0}", sourceModule.CultureCode), sourceModule.PortalID, "").TrimEnd(';'); //Add the default translators for this language, view and edit permissions var permissionController = new PermissionController(); var viewPermissionsList = permissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", "VIEW"); var editPermissionsList = permissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", "EDIT"); PermissionInfo viewPermisison = null; PermissionInfo editPermisison = null; //View if (viewPermissionsList != null && viewPermissionsList.Count > 0) { viewPermisison = (PermissionInfo)viewPermissionsList[0]; } //Edit if (editPermissionsList != null && editPermissionsList.Count > 0) { editPermisison = (PermissionInfo)editPermissionsList[0]; } if (viewPermisison != null || editPermisison != null) { foreach (string translatorRole in translatorRoles.Split(';')) { AddModulePermission(ref newModule, sourceModule.PortalID, translatorRole, viewPermisison, "VIEW"); AddModulePermission(ref newModule, sourceModule.PortalID, translatorRole, editPermisison, "EDIT"); } } //Add Module AddModuleInternal(newModule); //copy module settings Hashtable settings = GetModuleSettings(sourceModule.ModuleID); //Copy each setting to the new TabModule instance foreach (DictionaryEntry setting in settings) { UpdateModuleSetting(newModule.ModuleID, Convert.ToString(setting.Key), Convert.ToString(setting.Value)); } // update tabmodule dataProvider.UpdateTabModule(newModule.TabModuleID, newModule.TabID, newModule.ModuleID, newModule.ModuleTitle, newModule.Header, newModule.Footer, newModule.ModuleOrder, newModule.PaneName, newModule.CacheTime, newModule.CacheMethod, newModule.Alignment, newModule.Color, newModule.Border, newModule.IconFile, (int)newModule.Visibility, newModule.ContainerSrc, newModule.DisplayTitle, newModule.DisplayPrint, newModule.DisplaySyndicate, newModule.IsWebSlice, newModule.WebSliceTitle, newModule.WebSliceExpiryDate, newModule.WebSliceTTL, newModule.VersionGuid, newModule.DefaultLanguageGuid, newModule.LocalizedVersionGuid, newModule.CultureCode, UserController.GetCurrentUserInfo().UserID); if (!string.IsNullOrEmpty(newModule.DesktopModule.BusinessControllerClass)) { try { object businessController = Reflection.CreateObject(newModule.DesktopModule.BusinessControllerClass, newModule.DesktopModule.BusinessControllerClass); var portableModule = businessController as IPortable; if (portableModule != null) { string Content = portableModule.ExportModule(sourceModule.ModuleID); if (!string.IsNullOrEmpty(Content)) { portableModule.ImportModule(newModule.ModuleID, Content, newModule.DesktopModule.Version, UserController.GetCurrentUserInfo().UserID); } } } catch (Exception ex) { Exceptions.LogException(ex); } } moduleId = newModule.ModuleID; //Clear Caches ClearCache(newModule.TabID); ClearCache(sourceModule.TabID); } return moduleId; }
/// <summary> /// Des the localize module. /// </summary> /// <param name="sourceModule">The source module.</param> /// <returns>new module id</returns> public int DeLocalizeModule(ModuleInfo sourceModule) { int moduleId = Null.NullInteger; if (sourceModule != null && sourceModule.DefaultLanguageModule != null) { // clone the module object ( to avoid creating an object reference to the data cache ) ModuleInfo newModule = sourceModule.Clone(); //Get the Module ID of the default language instance newModule.ModuleID = sourceModule.DefaultLanguageModule.ModuleID; if (newModule.ModuleID != sourceModule.ModuleID) { // update tabmodule dataProvider.UpdateTabModule(newModule.TabModuleID, newModule.TabID, newModule.ModuleID, newModule.ModuleTitle, newModule.Header, newModule.Footer, newModule.ModuleOrder, newModule.PaneName, newModule.CacheTime, newModule.CacheMethod, newModule.Alignment, newModule.Color, newModule.Border, newModule.IconFile, (int)newModule.Visibility, newModule.ContainerSrc, newModule.DisplayTitle, newModule.DisplayPrint, newModule.DisplaySyndicate, newModule.IsWebSlice, newModule.WebSliceTitle, newModule.WebSliceExpiryDate, newModule.WebSliceTTL, newModule.VersionGuid, newModule.DefaultLanguageGuid, newModule.LocalizedVersionGuid, newModule.CultureCode, UserController.GetCurrentUserInfo().UserID); //check if all modules instances have been deleted if (GetModule(sourceModule.ModuleID, Null.NullInteger, true).TabID == Null.NullInteger) { //delete the deep copy "module info" DeleteModule(sourceModule.ModuleID); } } moduleId = newModule.ModuleID; //Clear Caches ClearCache(newModule.TabID); ClearCache(sourceModule.TabID); } return moduleId; }
/// <summary> /// Copies the module to page. /// </summary> /// <param name="moduleToCopy">The module to copy.</param> /// <param name="destinationTabID">The destination tab ID.</param> private static void CopyModuleToPage(ModuleInfo moduleToCopy, int destinationTabID) { var moduleController = new ModuleController(); // duplicate the module and assign it the new page ModuleInfo newModule = moduleToCopy.Clone(); newModule.ModuleID = -1; newModule.TabID = destinationTabID; // add it to the system - this takes care of adding the // module and the tab module newModule.ModuleID = moduleController.AddModule(newModule); // duplicate the settings for the module DuplicateModuleSettings(moduleToCopy, newModule.ModuleID); // duplicate the settings for the tabmodule moduleController.CopyTabModuleSettings(moduleToCopy, newModule); }
/// <summary> /// Copies the module to a new page. /// </summary> /// <param name="sourceModule">The source module.</param> /// <param name="destinationTab">The destination tab.</param> /// <param name="toPaneName">Name of to pane.</param> /// <param name="includeSettings">if set to <c>true</c> include settings.</param> public void CopyModule(ModuleInfo sourceModule, TabInfo destinationTab, string toPaneName, bool includeSettings) { PortalInfo portal = new PortalController().GetPortal(destinationTab.PortalID); //Clone Module ModuleInfo destinationModule = sourceModule.Clone(); if (!String.IsNullOrEmpty(toPaneName)) { destinationModule.PaneName = toPaneName; } destinationModule.TabID = destinationTab.TabID; //The new reference copy should have the same culture as the destination Tab destinationModule.UniqueId = Guid.NewGuid(); destinationModule.CultureCode = destinationTab.CultureCode; destinationModule.VersionGuid = Guid.NewGuid(); destinationModule.LocalizedVersionGuid = Guid.NewGuid(); //Figure out the DefaultLanguage Guid if (!String.IsNullOrEmpty(sourceModule.CultureCode) && sourceModule.CultureCode == portal.DefaultLanguage && destinationModule.CultureCode != sourceModule.CultureCode && !String.IsNullOrEmpty(destinationModule.CultureCode)) { //Tab is localized so set Default language Guid reference destinationModule.DefaultLanguageGuid = sourceModule.UniqueId; } else if (!String.IsNullOrEmpty(sourceModule.CultureCode) && sourceModule.CultureCode != portal.DefaultLanguage && destinationModule.CultureCode != sourceModule.CultureCode && !String.IsNullOrEmpty(destinationModule.CultureCode)) { // tab is localized, but the source is not in the default language (it was on a single culture page) // this wires up all the connections sourceModule.DefaultLanguageGuid = destinationModule.UniqueId; UpdateModule(sourceModule); } else if (sourceModule.AllTabs && sourceModule.CultureCode != portal.DefaultLanguage) { if (sourceModule.DefaultLanguageModule != null && destinationTab.DefaultLanguageTab != null) { ModuleInfo defaultLanguageModule = GetModule(sourceModule.DefaultLanguageModule.ModuleID, destinationTab.DefaultLanguageTab.TabID); if (defaultLanguageModule != null) { destinationModule.DefaultLanguageGuid = defaultLanguageModule.UniqueId; } } } //This will fail if the page already contains this module try { //Add a copy of the module to the bottom of the Pane for the new Tab dataProvider.AddTabModule(destinationModule.TabID, destinationModule.ModuleID, destinationModule.ModuleTitle, destinationModule.Header, destinationModule.Footer, destinationModule.ModuleOrder, destinationModule.PaneName, destinationModule.CacheTime, destinationModule.CacheMethod, destinationModule.Alignment, destinationModule.Color, destinationModule.Border, destinationModule.IconFile, (int)destinationModule.Visibility, destinationModule.ContainerSrc, destinationModule.DisplayTitle, destinationModule.DisplayPrint, destinationModule.DisplaySyndicate, destinationModule.IsWebSlice, destinationModule.WebSliceTitle, destinationModule.WebSliceExpiryDate, destinationModule.WebSliceTTL, destinationModule.UniqueId, destinationModule.VersionGuid, destinationModule.DefaultLanguageGuid, destinationModule.LocalizedVersionGuid, destinationModule.CultureCode, UserController.GetCurrentUserInfo().UserID); //Optionally copy the TabModuleSettings if (includeSettings) { CopyTabModuleSettings(sourceModule, destinationModule); } } catch (Exception exc) { // module already in the page, ignore error Logger.Error(exc); } ClearCache(sourceModule.TabID); ClearCache(destinationTab.TabID); //Optionally copy the TabModuleSettings if (includeSettings) { destinationModule = GetModule(destinationModule.ModuleID, destinationModule.TabID); CopyTabModuleSettings(sourceModule, destinationModule); } }
/// <summary> /// Adds the referenced module to page. /// </summary> /// <param name="moduleToCopy">The module to copy.</param> /// <param name="destinationTabID">The destination tab ID.</param> private static void AddReferencedModuleToPage(ModuleInfo moduleToCopy, int destinationTabID) { // duplicate the module and assign it the new page ModuleInfo newModule = moduleToCopy.Clone(); newModule.TabID = destinationTabID; // add it to the system - this takes care of adding the // module and the tab module newModule.ModuleID = new ModuleController().AddModule(newModule); }