private string getMacroReplacement(string macro, string macroPrefix, string macroSuffix, CmsPage sourcePage) { string cleaned = macro.Substring(macroPrefix.Length, macro.Length - macroPrefix.Length - macroSuffix.Length); string[] parts = cleaned.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length >= 1) { int pageId = Convert.ToInt32(parts[0]); CmsLanguage lang = CmsContext.currentLanguage; if (parts.Length >= 2 && includePageLanguageInMacro()) { string langCode = parts[1]; lang = CmsLanguage.GetFromHaystack(langCode, CmsConfig.Languages); } if (!lang.isInvalidLanguage) { CmsPage p = CmsContext.getPageById(pageId); if (p.Id >= 0) { return(p.getUrl(lang)); } } } string pageNotFoundUrl = CmsContext.ApplicationPath + "PageNotFound" + macro.Replace("/", "") + "source_" + sourcePage.Id.ToString() + ".aspx"; return(pageNotFoundUrl); }
/// <summary> /// returns true if any of the .name fields in the specified pageLangInfos matches ChildPage.names, returns TRUE /// </summary> /// <param name="parentPageId"></param> /// <param name="pageLangInfos"></param> /// <returns></returns> public static bool childPageWithNameExists(int parentPageId, CmsPageLanguageInfo[] pageLangInfos) { CmsPage parentPage = CmsPage.FetchPageById(parentPageId); if (parentPage.ID < 0) { return(false); } foreach (CmsPage p in parentPage.ChildPages) { foreach (CmsPageLanguageInfo langInfo in pageLangInfos) { string nameToFind = langInfo.name; CmsLanguage pageLanguage = CmsLanguage.GetFromHaystack(langInfo.languageShortCode, CmsConfig.Languages); if (String.Compare(p.getName(pageLanguage), nameToFind, true) == 0) { return(true); } } } return(false); }
public void ProcessRequest(HttpContext context) { string pagePath = ""; if (context.Request.QueryString["p"] != null) { pagePath = context.Request.QueryString["p"]; } CmsLanguage pageLang = CmsConfig.Languages[0]; if (CmsConfig.Languages.Length > 1 && context.Request.QueryString["l"] != null) { string langCode = context.Request.QueryString["l"]; CmsLanguage testLang = CmsLanguage.GetFromHaystack(langCode, CmsConfig.Languages); if (!testLang.isInvalidLanguage) { pageLang = testLang; } } CmsPage pageToRenderRSSFor = CmsContext.getPageByPath(pagePath, pageLang); if (pageToRenderRSSFor.ID < 0 || !pageToRenderRSSFor.currentUserCanRead) { context.Response.ContentType = "text/plain"; context.Response.Write("Error: CMS page not found"); context.Response.Flush(); context.Response.End(); } else { // -- generate the RssFeed RssFeed rssFeed = new RssFeed(System.Text.UTF8Encoding.UTF8); rssFeed.Version = RssVersion.RSS20; // -- setup the RSS channel string titlePrefix = CmsConfig.getConfigValue("pageTitlePrefix", ""); string titlePostfix = CmsConfig.getConfigValue("pageTitlePostfix", ""); string rssTitle = titlePrefix + pageToRenderRSSFor.getTitle(pageLang) + titlePostfix; string rssDescription = pageToRenderRSSFor.getSearchEngineDescription(pageLang); Uri rssLink = new Uri(pageToRenderRSSFor.getUrl(CmsUrlFormat.FullIncludingProtocolAndDomainName, pageLang), UriKind.RelativeOrAbsolute); RssChannel rssChannel = new RssChannel(rssTitle, rssDescription, rssLink); rssChannel.Generator = "HatCMS: https://code.google.com/p/hatcms/"; // -- call "GetRssFeedItems()" for each placeholder. CmsPlaceholderDefinition[] phDefs = pageToRenderRSSFor.getAllPlaceholderDefinitions(); foreach (CmsPlaceholderDefinition phDef in phDefs) { RssItem[] items = Placeholders.PlaceholderUtils.GetRssFeedItems(phDef.PlaceholderType, pageToRenderRSSFor, phDef, pageLang); foreach (RssItem item in items) { rssChannel.Items.Add(item); } } rssFeed.Channels.Add(rssChannel); context.Response.ContentType = "application/rss+xml"; rssFeed.Write(context.Response.OutputStream); context.Response.Flush(); context.Response.End(); } }