Bitboxx.DNNModules.BBImageStory.BusinessController.ImportModule C# (CSharp) Method

ImportModule() public method

ImportModule implements the IPortable ImportModule Interface
public ImportModule ( int ModuleID, string Content, string Version, int UserID ) : void
ModuleID int The Id of the module to be imported
Content string The content to be imported
Version string The version of the module to be imported
UserID int
return void
        public void ImportModule(int ModuleID, string Content, string Version, int UserID)
        {
            int? partModuleId = null, partPortalId = null;
            
            ModuleInfo module = ModuleController.Instance.GetModule(ModuleID, PortalSettings.Current.ActiveTab.TabID, true);
            switch ((string)module.ModuleSettings["Partitioning"])
            {
                case "1":
                    partModuleId = ModuleID;
                    break;
                case "2":
                    partPortalId = PortalSettings.Current.PortalId;
                    break;

            }
            
            XmlNode xmlroot = Globals.GetContent(Content, "BBImageStories");

            // Save Templates
            string templateRoot = PortalSettings.Current.HomeDirectoryMapPath + "..\\..\\DesktopModules\\" + module.DesktopModule.FolderName + "\\";

            XmlNode xmlListTemplate = xmlroot.SelectSingleNode("ListTemplate");
            string contentListTemplate = xmlListTemplate.SelectSingleNode("Content").InnerText;
            string contentListName = xmlListTemplate.SelectSingleNode("Name").InnerText;
            string listTemplateFile = templateRoot + "js\\List\\" + contentListName;
            File.WriteAllText(listTemplateFile, contentListTemplate);
            ModuleController.Instance.UpdateModuleSetting(ModuleID, "List", contentListName.ToLower());

            XmlNode xmlViewTemplate = xmlroot.SelectSingleNode("ViewTemplate");
            string contentViewTemplate = xmlViewTemplate.SelectSingleNode("Content").InnerText;
            string contentViewName = xmlViewTemplate.SelectSingleNode("Name").InnerText;
            string viewTemplateFile = templateRoot + "js\\View\\" + contentViewName;
            File.WriteAllText(viewTemplateFile, contentViewTemplate);
            ModuleController.Instance.UpdateModuleSetting(ModuleID, "View", contentViewName.ToLower());

            XmlNode xmlImageWidth = xmlroot.SelectSingleNode("ImageWidth");
            if (xmlImageWidth != null)
                ModuleController.Instance.UpdateModuleSetting(ModuleID, "Width", xmlImageWidth.InnerText);

            //XmlNode xmlPartitioning = xmlroot.SelectSingleNode("Partitioning");
            //if (xmlPartitioning != null)
            //    ModuleController.Instance.UpdateModuleSetting(ModuleID, "Partitioning", xmlPartitioning.InnerText);

            foreach (XmlNode xmlStory in xmlroot.SelectNodes("Story"))
            {
                // Insert Story
                string strModuleId = xmlStory.SelectSingleNode("ModuleId").InnerText;
                string strPortalId = xmlStory.SelectSingleNode("PortalId").InnerText;
                string strStartDate = xmlStory.SelectSingleNode("StartDate").InnerText;
                string strEndDate = xmlStory.SelectSingleNode("EndDate").InnerText;
                StoryInfo story = new StoryInfo()
                                  {
                                      ModuleId = partModuleId,
                                      PortalId = partPortalId,
                                      StartDate = (strStartDate != "null") ? (DateTime?) Convert.ToDateTime(strStartDate, CultureInfo.InvariantCulture) : null,
                                      EndDate = (strEndDate != "null") ? (DateTime?) Convert.ToDateTime(strEndDate, CultureInfo.InvariantCulture) : null,
                                      LastPublishedDate = null,
                                      CreatedByUserID = UserID,
                                      CreatedOnDate = DateTime.Now,
                                      LastModifiedByUserID = UserID,
                                      LastModifiedOnDate = DateTime.Now
                                  };
                int storyId = DbController.Instance.InsertStory(story, ModuleID, PortalSettings.Current.ActiveTab.TabID);

                // Insert Story Language Info
                XmlNode xmlStoryLangs = xmlStory.SelectSingleNode("StoryLangs");
                foreach (XmlNode xmlStoryLang in xmlStoryLangs.SelectNodes("StoryLang"))
                {
                    string strLanguage = xmlStoryLang.SelectSingleNode("Language").InnerText;
                    string strTitle = xmlStoryLang.SelectSingleNode("Title").InnerText;
                    string strStory = xmlStoryLang.SelectSingleNode("Story").InnerText;
                    StoryLangInfo storyLang = new StoryLangInfo()
                                              {
                                                  StoryId = storyId,
                                                  Language = strLanguage,
                                                  Title = strTitle,
                                                  Story = strStory
                                              };
                    DbController.Instance.InsertStoryLang(storyLang, PortalSettings.Current.ActiveTab.TabID);
                }

                // Insert Images
                string imageDir = "Images/BBImageStory/" + storyId.ToString();

                IFolderInfo folder;
                if (!FolderManager.Instance.FolderExists(PortalSettings.Current.PortalId, imageDir))
                    folder = FolderManager.Instance.AddFolder(PortalSettings.Current.PortalId, imageDir);
                else
                    folder = FolderManager.Instance.GetFolder(PortalSettings.Current.PortalId, imageDir);

                XmlNode xmlImages = xmlStory.SelectSingleNode("Images");
                foreach (XmlNode xmlImage in xmlImages.SelectNodes("Image"))
                {
                    string strViewOrder = xmlImage.SelectSingleNode("ViewOrder").InnerText;
                    string strImageData = xmlImage.SelectSingleNode("ImageData").InnerText;
                    string strFileName = xmlImage.SelectSingleNode("FileName").InnerText;
                    MemoryStream imageStream = HexStringToStream(strImageData);
                    if (!FileManager.Instance.FileExists(folder, strFileName))
                    {
                        // Add File to directory
                        IFileInfo ifile = FileManager.Instance.AddFile(folder, strFileName, imageStream, true);

                        // Insert Image reference into Image Table
                        ImageInfo image = new ImageInfo() {FileId = ifile.FileId};
                        int imageId = DbController.Instance.InsertImage(image);

                        // Combine image and story in crosstable
                        ForeignImageInfo foreignImage = new ForeignImageInfo() {ForeignId = storyId, ForeignToken = "STORY", ImageId = imageId, ViewOrder = Convert.ToInt32(strViewOrder)};
                        DbController.Instance.InsertForeignImage(foreignImage);

                        XmlNode xmlImageLangs = xmlImage.SelectSingleNode("ImageLangs");
                        foreach (XmlNode xmlImageLang in xmlImageLangs.SelectNodes("ImageLang"))
                        {
                            string strLanguage = xmlImageLang.SelectSingleNode("Language").InnerText;
                            string strShortDescription = xmlImageLang.SelectSingleNode("ShortDescription").InnerText;
                            string strLongDescription = xmlImageLang.SelectSingleNode("LongDescription").InnerText;
                            ImageLangInfo imageLang = new ImageLangInfo()
                                                      {
                                                          ImageId = imageId,
                                                          Language = strLanguage,
                                                          ShortDescription = strShortDescription,
                                                          LongDescription = strLongDescription
                                                      };
                            DbController.Instance.InsertImageLang(imageLang);

                        }
                    }
                }
            }
        }