public function testRenderWithTemplate() { $rssFeed = new RSSFeed(new ArrayList(), "", "", ""); $rssFeed->setTemplate('RSSFeedTest'); $content = $rssFeed->outputToBrowser(); $this->assertContains('<title>Test Custom Template</title>', $content); $rssFeed->setTemplate('RSSFeed'); $content = $rssFeed->outputToBrowser(); $this->assertNotContains('<title>Test Custom Template</title>', $content); }
public function rss() { $rss = new RSSFeed($this->Updates()->sort('Created DESC')->limit(20), $this->Link(), $this->getSubscriptionTitle()); $rss->setTemplate('NewsHolder_rss'); return $rss->outputToBrowser(); }
/** * Overrides the ContentControllerSearchExtension and adds snippets to results. */ function results($data, $form, $request) { $this->linkToAllSiteRSSFeed(); $results = $form->getResults(); $query = $form->getSearchQuery(); // Add context summaries based on the queries. foreach ($results as $result) { $contextualTitle = new Text(); $contextualTitle->setValue($result->MenuTitle ? $result->MenuTitle : $result->Title); $result->ContextualTitle = $contextualTitle->ContextSummary(300, $query); if (!$result->Content && $result->ClassName == 'File') { // Fake some content for the files. $result->ContextualContent = "A file named \"{$result->Name}\" ({$result->Size})."; } else { $result->ContextualContent = $result->obj('Content')->ContextSummary(300, $query); } } $rssLink = HTTP::setGetVar('rss', '1'); // Render the result. $data = array('Results' => $results, 'Query' => $query, 'Title' => _t('SearchForm.SearchResults', 'Search Results'), 'RSSLink' => $rssLink); // Choose the delivery method - rss or html. if (!$this->owner->request->getVar('rss')) { // Add RSS feed to normal search. RSSFeed::linkToFeed($rssLink, "Search results for query \"{$query}\"."); return $this->owner->customise($data)->renderWith(array('Page_results', 'Page')); } else { // De-paginate and reorder. Sort-by-relevancy doesn't make sense in RSS context. $fullList = $results->getList()->sort('LastEdited', 'DESC'); // Get some descriptive strings $siteName = SiteConfig::current_site_config()->Title; $siteTagline = SiteConfig::current_site_config()->Tagline; if ($siteName) { $title = "{$siteName} search results for query \"{$query}\"."; } else { $title = "Search results for query \"{$query}\"."; } // Generate the feed content. $rss = new RSSFeed($fullList, $this->owner->request->getURL(), $title, $siteTagline, "Title", "ContextualContent", null); $rss->setTemplate('Page_results_rss'); return $rss->outputToBrowser(); } }
/** * Get all changes from the site in a RSS feed. */ public function allchanges() { // Check viewability of allchanges if (!Config::inst()->get('VersionFeed', 'allchanges_enabled') || !SiteConfig::current_site_config()->AllChangesEnabled) { return $this->owner->httpError(404, 'Global history not viewable'); } $limit = (int) Config::inst()->get('VersionFeed', 'allchanges_limit'); $latestChanges = DB::query(' SELECT * FROM "SiteTree_versions" WHERE "WasPublished" = \'1\' AND "CanViewType" IN (\'Anyone\', \'Inherit\') AND "ShowInSearch" = 1 AND ("PublicHistory" IS NULL OR "PublicHistory" = \'1\') ORDER BY "LastEdited" DESC LIMIT ' . $limit); $lastChange = $latestChanges->record(); $latestChanges->rewind(); if ($lastChange) { // Cache the diffs to remove DOS possibility. $key = 'allchanges' . preg_replace('#[^a-zA-Z0-9_]#', '', $lastChange['LastEdited']) . (Member::currentUserID() ?: 'public'); $changeList = $this->filterContent($key, function () use($latestChanges) { $changeList = new ArrayList(); $canView = array(); foreach ($latestChanges as $record) { // Check if the page should be visible. // WARNING: although we are providing historical details, we check the current configuration. $id = $record['RecordID']; if (!isset($canView[$id])) { $page = SiteTree::get()->byID($id); $canView[$id] = $page && $page->canView(new Member()); } if (!$canView[$id]) { continue; } // Get the diff to the previous version. $version = new Versioned_Version($record); if ($diff = $version->getDiff()) { $changeList->push($diff); } } return $changeList; }); } else { $changeList = new ArrayList(); } // Produce output $rss = new RSSFeed($changeList, $this->owner->request->getURL(), $this->linkToAllSitesRSSFeedTitle(), '', 'Title', '', null); $rss->setTemplate('Page_allchanges_rss'); return $rss->outputToBrowser(); }