/// -----------------------------------------------------------------------------
        /// <summary>
        /// ImportModule implements the IPortable ImportModule Interface
        /// </summary>
        /// <param name="moduleId">The Id of the module to be imported</param>
        /// <param name="content">The content to be imported</param>
        /// <param name="version">The version of the module to be imported</param>
        /// <param name="userId">The Id of the user performing the import</param>
        /// -----------------------------------------------------------------------------
        public void ImportModule(int moduleId, string content, string version, int userId)
        {
            ModuleInfo module     = ModuleController.Instance.GetModule(moduleId, Null.NullInteger, true);
            var        controller = new HtmlTextController();
            XmlNode    item       = DotNetNuke.Common.Globals.GetContent(content, "htmlText");

            if (item == null)
            {
                return;
            }

            var newItem = new HtmlTextInfo()
            {
                ModuleId             = moduleId,
                Locale               = System.Threading.Thread.CurrentThread.CurrentCulture.Name,
                ModuleTitle          = item.SelectSingleNode("ModuleTitle").InnerText,
                Content              = item.SelectSingleNode("Content").InnerText,
                Summary              = item.SelectSingleNode("Summary").InnerText,
                Version              = -1,
                IsPublished          = true,
                CreatedByUserID      = userId,
                CreatedOnDate        = DateTime.Now,
                LastModifiedByUserId = userId,
                LastModifiedOnDate   = DateTime.Now
            };

            // NOTE: If moving from one installation to another, this user will not exist
            controller.UpdateHtmlText(newItem, true, controller.GetMaximumVersionHistory(module.PortalID));
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// ExportModule implements the IPortable ExportModule Interface
        /// </summary>
        /// <param name="moduleId">The Id of the module to be exported</param>
        /// -----------------------------------------------------------------------------
        public string ExportModule(int moduleId)
        {
            var          controller = new HtmlTextController();
            HtmlTextInfo item       = controller.GetTopHtmlText(moduleId, System.Threading.Thread.CurrentThread.CurrentCulture.Name, true);
            var          sb         = new StringBuilder();

            if (item == null)
            {
                return(string.Empty);
            }

            sb.Append("<htmlText>");
            //sb.AppendFormat("<ItemId>{0}</ItemId>", item.ItemId);
            //sb.AppendFormat("<ModuleId>{0}</ModuleId>", item.ModuleId);
            //sb.AppendFormat("<Locale>{0}</Locale>", item.Locale);
            sb.AppendFormat("<ModuleTitle>{0}</ModuleTitle>", XmlUtils.XMLEncode(item.ModuleTitle));
            sb.AppendFormat("<Content>{0}</Content>", XmlUtils.XMLEncode(item.Content));
            sb.AppendFormat("<Summary>{0}</Summary>", XmlUtils.XMLEncode(item.Summary));
            //sb.AppendFormat("<Version>{0}</Version>", item.Version);
            //sb.AppendFormat("<IsPublished>{0}</IsPublished>", item.IsPublished);
            //sb.AppendFormat("<CreatedByUserID>{0}</CreatedByUserID>", item.CreatedByUserID);
            //sb.AppendFormat("<CreatedOnDate>{0}</CreatedOnDate>", item.CreatedOnDate);
            //sb.AppendFormat("<LastModifiedByUserId>{0}</LastModifiedByUserId>", item.LastModifiedByUserId);
            //sb.AppendFormat("<LastModifiedOnDate>{0}</LastModifiedOnDate>", item.LastModifiedOnDate);
            sb.Append("</htmlText>");

            return(sb.ToString());
        }
        // feel free to remove any interfaces that you don't wish to use
        // (requires that you also update the .dnn manifest file)

        #region Optional Interfaces

        /// <summary>
        /// Gets the modified search documents for the DNN search engine indexer.
        /// </summary>
        /// <param name="moduleInfo">The module information.</param>
        /// <param name="beginDate">The begin date.</param>
        /// <returns></returns>
        public override IList <SearchDocument> GetModifiedSearchDocuments(ModuleInfo moduleInfo, DateTime beginDate)
        {
            var searchDocuments = new List <SearchDocument>();
            var controller      = new HtmlTextController();
            var items           = controller.GetHtmlTextList(moduleInfo.ModuleID);
            var repo            = new HtmlModuleSettingsRepository();
            var settings        = repo.GetSettings(moduleInfo);

            foreach (var item in items)
            {
                if (item.LastModifiedOnDate.ToUniversalTime() <= beginDate.ToUniversalTime() ||
                    item.LastModifiedOnDate.ToUniversalTime() >= DateTime.UtcNow)
                {
                    continue;
                }

                // Get the content & summary
                var strContent = HtmlUtils.Clean(string.Format("{0}<br />{1}", item.Content, item.Summary), false);

                // Get the description string
                var description = strContent.Length <= settings.SearchDescLength ? strContent : HtmlUtils.Shorten(strContent, settings.SearchDescLength, "...");

                var searchDocumnet = new SearchDocument
                {
                    UniqueKey       = string.Format("Items:{0}:{1}", moduleInfo.ModuleID, item.ItemId), // any unique identifier to be able to query for your individual record
                    PortalId        = moduleInfo.PortalID,                                              // the PortalID
                    TabId           = moduleInfo.TabID,                                                 // the TabID
                    AuthorUserId    = item.LastModifiedByUserId,                                        // the person who created the content
                    Title           = moduleInfo.ModuleTitle,                                           // the title of the content, but should be the module title
                    Description     = description,                                                      // the description or summary of the content
                    Body            = strContent,                                                       // the long form of your content
                    ModifiedTimeUtc = item.LastModifiedOnDate.ToUniversalTime(),                        // a time stamp for the search results page
                    CultureCode     = moduleInfo.CultureCode,                                           // the current culture code
                    IsActive        = true                                                              // allows you to remove the item from the search index (great for soft deletes)
                };

                searchDocuments.Add(searchDocumnet);
            }

            return(searchDocuments);
        }