public override void RenderInViewMode(HtmlTextWriter writer, CmsPage page, int identifier, CmsLanguage langToRenderFor, string[] paramList) { GlossaryDb db = new GlossaryDb(); GlossaryPlaceholderData placeholderData = db.getGlossary(page, identifier, langToRenderFor, true); string letterToDisplay = getLetterToDisplay(placeholderData); GlossaryData[] items; if (GlossaryPlaceholderData.DataSource == GlossaryPlaceholderData.GlossaryDataSource.RssFeed) { items = db.FetchRssFeedGlossaryDataFromDatabase(); } else { items = db.getGlossaryData(placeholderData, letterToDisplay); } string[] charactersWithData = db.getAllCharactersWithData(items); StringBuilder html = new StringBuilder(); if (GlossaryPlaceholderData.DataSource == GlossaryPlaceholderData.GlossaryDataSource.RssFeed) { html.Append("<!-- Glossary data pulled from RSS: " + GlossaryPlaceholderData.getRssDataSourceUrl() + " -->"); } else { html.Append("<!-- Glossary data pulled from HatCMS database -->"); } html.Append(GetHtmlDisplay(page, items, placeholderData, charactersWithData, letterToDisplay)); writer.Write(html.ToString()); } // RenderView
public override string Render() { StringBuilder html = new StringBuilder(); if (GlossaryPlaceholderData.DataSource != GlossaryPlaceholderData.GlossaryDataSource.RssFeed) { html.Append(base.formatErrorMsg("The Glossary data is currently hosted from the Local Database. To update the glossary, edit the page with the glossary placeholder in it")); } else { html.Append("<p>"); string url = GlossaryPlaceholderData.getRssDataSourceUrl(); html.Append(base.formatNormalMsg("Fetching updated glossary from <a href=\"" + url + "\" target=\"_blank\">" + url + "</a>")); try { // -- run the background task in the foreground thread to update the database. HatCMS.Modules.Glossary.BackgroundTasks.FetchUpdatedRSSGlossaryItems backgroundFetcher = new HatCMS.Modules.Glossary.BackgroundTasks.FetchUpdatedRSSGlossaryItems(); if (backgroundFetcher.FetchAndSaveRemoteRSSGlossaryData()) { // -- fetch the data from the database. GlossaryDb db = new GlossaryDb(); GlossaryData[] items = db.FetchRssFeedGlossaryDataFromDatabase(); html.Append(base.formatNormalMsg(items.Length + " glossary entries are now available.")); } else { html.Append(base.formatErrorMsg("Exception: could not update the glossary from the external URL.")); } } catch (Exception ex) { html.Append(base.formatErrorMsg("Exception: could not update the glossary from the external URL: " + ex.Message)); } html.Append("</p>"); } return(html.ToString()); }
public string RunInlineGlossaryFilter(CmsPage pageBeingFiltered, string placeholderHtml) { try { bool enabled = CmsConfig.getConfigValue("GlossaryHighlightFilter:Enable", false); // disabled by default if (!enabled || CmsContext.currentEditMode == CmsEditMode.Edit) { return(placeholderHtml); } #if DEBUG CmsContext.currentPage.HeadSection.AddCSSStyleStatements("span.InlineGlossaryTerm { border-bottom: 1px dotted red; }"); #endif // -- get the glossaryID to get data for (language specific) int glossaryId = 1; string glossaryIds = CmsConfig.getConfigValue("GlossaryHighlightFilter:GlossaryId", ""); try { string[] glossaryIdsParts = glossaryIds.Split(new char[] { CmsConfig.PerLanguageConfigSplitter }, StringSplitOptions.RemoveEmptyEntries); if (glossaryIdsParts.Length >= CmsConfig.Languages.Length) { int index = CmsLanguage.IndexOf(CmsContext.currentLanguage.shortCode, CmsConfig.Languages); if (index >= 0) { glossaryId = Convert.ToInt32(glossaryIdsParts[index]); } } } catch (Exception ex) { throw new Exception("Error: GlossaryHighlightFilter is incorrectly configured!"); } // -- get the glossary data from the database. The data is cached so that we don't hit the database for this info every time. GlossaryData[] gData; string cacheKey = "GlossaryHighlightFilter_Data_" + glossaryId; if (!CmsContext.currentUserIsLoggedIn && System.Web.Hosting.HostingEnvironment.Cache[cacheKey] != null) { gData = (GlossaryData[])System.Web.Hosting.HostingEnvironment.Cache[cacheKey]; } else { GlossaryDb db = new GlossaryDb(); if (GlossaryPlaceholderData.DataSource == GlossaryPlaceholderData.GlossaryDataSource.RssFeed) { gData = db.FetchRssFeedGlossaryDataFromDatabase(); } else { gData = db.getGlossaryData(glossaryId); } if (!CmsContext.currentUserIsLoggedIn) { System.Web.Hosting.HostingEnvironment.Cache.Insert(cacheKey, gData, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration); } // go through longer words first (longer words/phrases are usually more specific than shorter ones) gData = GlossaryData.SortByWordLength(gData, SortDirection.Descending); } // -- short-circuit processing if there aren't any glossary terms in the system. if (gData.Length == 0) { return(placeholderHtml); } // -- process the placeholderHTML string html = placeholderHtml; List <string> toSurround = new List <string>(); List <string> prefixs = new List <string>(); List <string> suffixs = new List <string>(); foreach (GlossaryData d in gData) { int index = html.IndexOf(d.word.Trim(), StringComparison.CurrentCultureIgnoreCase); if (index >= 0 && d.word.Trim().Length > 0) { // string safeDesc = StringUtils.AddSlashes(d.description); string safeDesc = HttpUtility.HtmlEncode(d.word + ": " + d.description); safeDesc = safeDesc.Replace("\n", " "); safeDesc = safeDesc.Replace("\r", " "); safeDesc = safeDesc.Replace("\t", " "); safeDesc = safeDesc.Replace(" ", " "); string prefix = "<span title=\"" + safeDesc + "\" class=\"InlineGlossaryTerm\">"; string suffix = "</span>"; toSurround.Add(d.word.Trim()); prefixs.Add(prefix); suffixs.Add(suffix); } } // foreach word html = SurroundInHtml(toSurround.ToArray(), prefixs.ToArray(), suffixs.ToArray(), html); return(html.ToString()); } catch (Exception ex) { placeholderHtml += ("<!-- GlossaryHighlightingFilter Error: " + ex.Message + " -->"); } return(placeholderHtml); }