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 override void RenderInEditMode(HtmlTextWriter writer, CmsPage page, int identifier, CmsLanguage langToRenderFor, string[] paramList) { string ControlId = "Glossary_" + page.ID.ToString() + "_" + identifier.ToString() + "_" + langToRenderFor.shortCode; string renderEditorToDivId = ControlId + "RenderArea"; string renderJsonToFormId = ControlId + "JsonFormData"; string jsonDataVarName = ControlId + "_GlossaryJsonData"; GlossaryDb db = new GlossaryDb(); GlossaryPlaceholderData placeholderData = db.getGlossary(page, identifier, langToRenderFor, true); string action = PageUtils.getFromForm(ControlId + "_action", ""); if (String.Compare(action, "updateGlossary", true) == 0) { string receivedJSONData = PageUtils.getFromForm(renderJsonToFormId, ""); GlossaryData[] newData = fromJSON(receivedJSONData); placeholderData.SortOrder = (GlossaryPlaceholderData.GlossarySortOrder)PageUtils.getFromForm(ControlId + "SortOrder", typeof(GlossaryPlaceholderData.GlossarySortOrder), placeholderData.SortOrder); placeholderData.ViewMode = (GlossaryPlaceholderData.GlossaryViewMode)PageUtils.getFromForm(ControlId + "ViewMode", typeof(GlossaryPlaceholderData.GlossaryViewMode), placeholderData.ViewMode); bool b = db.saveUpdatedGlossary(page, identifier, langToRenderFor, placeholderData, newData); if (b) { // -- get the glossary data again so that all IDs are updated. GlossaryData[] dataToSave = db.getGlossaryData(placeholderData, ""); string jsonToSave = getJSVariableStatement(jsonDataVarName, dataToSave); try { string jsonFilename = System.Web.Hosting.HostingEnvironment.MapPath(CmsContext.ApplicationPath + "_system/writable/Glossary/" + jsonDataVarName + ".js"); System.IO.File.Delete(jsonFilename); System.IO.File.WriteAllText(jsonFilename, jsonToSave); } catch { } } } // if updateGlossary StringBuilder html = new StringBuilder(); html.Append(PageUtils.getHiddenInputHtml(ControlId + "_action", "updateGlossary")); string EOL = Environment.NewLine; html.Append("<p><strong>Glossary Display Configuration:</strong></p>"); html.Append("<table>"); if (CmsConfig.Languages.Length > 1) { html.Append("<tr>"); html.Append("<td>Language:</td><td>" + langToRenderFor.shortCode + "</td>"); html.Append("</tr>"); } html.Append("<tr>"); html.Append("<td>Display Mode: </td>"); html.Append("<td>"); html.Append(PageUtils.getDropDownHtml(ControlId + "ViewMode", ControlId + "ViewMode", Enum.GetNames(typeof(GlossaryPlaceholderData.GlossaryViewMode)), Enum.GetName(typeof(GlossaryPlaceholderData.GlossaryViewMode), placeholderData.ViewMode))); html.Append("</td>"); html.Append("</tr>"); html.Append("<tr>"); html.Append("<td>Output Sorting: </td>"); html.Append("<td>"); html.Append(PageUtils.getDropDownHtml(ControlId + "SortOrder", ControlId + "SortOrder", Enum.GetNames(typeof(GlossaryPlaceholderData.GlossarySortOrder)), Enum.GetName(typeof(GlossaryPlaceholderData.GlossarySortOrder), placeholderData.SortOrder))); html.Append("</td>"); html.Append("</tr>"); html.Append("</table>" + EOL); // -- glossary data // note: the form is linked to GlossaryEditor.js GlossaryData[] items = db.getGlossaryData(placeholderData, ""); html.Append("<p><strong>Glossary Entries:</strong></p>"); if (GlossaryPlaceholderData.DataSource == GlossaryPlaceholderData.GlossaryDataSource.LocalDatabase) { html.Append("<div id=\"" + renderEditorToDivId + "\"></div>"); html.Append("<input type=\"button\" onclick=\"AddGlossaryElement('" + renderEditorToDivId + "');\" value=\"add new glossary entry\">" + Environment.NewLine); // -- the JSON data is passed to the server through this hidden form element html.Append(PageUtils.getHiddenInputHtml(renderJsonToFormId, renderJsonToFormId, "")); page.HeadSection.AddEmbeddedJavascriptFile(JavascriptGroup.ControlOrPlaceholder, typeof(Glossary).Assembly, "json2.js"); page.HeadSection.AddEmbeddedJavascriptFile(JavascriptGroup.ControlOrPlaceholder, typeof(Glossary).Assembly, "GlossaryEditor.js"); page.HeadSection.AddJSStatements(getJSVariableStatement(jsonDataVarName, items)); page.HeadSection.AddJSOnReady("var " + ControlId + "Instance = new GlossaryEditor('" + renderEditorToDivId + "', '" + renderJsonToFormId + "', JSON.parse(" + jsonDataVarName + ")); "); page.HeadSection.AddJSOnReady("GlossaryEditorInstances[GlossaryEditorInstances.length] = " + ControlId + "Instance; "); page.HeadSection.AddJSOnReady("" + ControlId + "Instance.updateDisplay();"); } else if (GlossaryPlaceholderData.DataSource == GlossaryPlaceholderData.GlossaryDataSource.RssFeed) { html.Append("<div class=\"Glossary RSS Edit\">"); html.Append("The Glossary is being driven from the following RSS feed: "); html.Append("<a href=\"" + GlossaryPlaceholderData.getRssDataSourceUrl() + "\">" + GlossaryPlaceholderData.getRssDataSourceUrl() + "</a><br />"); html.Append("<em>This URL is configured by the system administrator</em>"); html.Append("</div>"); } writer.Write(html.ToString()); } // RenderEdit