Example #1
0
function main($request, $payload, $kwargs = array())
{
    $ext = 'tpl';
    if ($request->isMobile() && $request->clientWantsMobile) {
        $ext = 'mbl';
    }
    $str = sprintf('%s/%s.%s', $request->controller, $request->action, $ext);
    // the main controller can return a page, if requested
    // see \gryphon\controller\main::page()
    if (isset($payload['page'])) {
        $str = sprintf('%s/%s.%s', $request->controller, $payload['page'], $ext);
    }
    // check for breaking news
    $payload['breaking'] = false;
    $breaking = M::init('article')->cache(false)->where('self:status = 1')->order('self:created desc')->limit(1)->findByTags(M::init('tag')->findByName('breaking'))->pop();
    if ($breaking && $breaking->uid) {
        $payload['breaking'] = $breaking;
    }
    $payload['suppressLeaderBoard'] = true;
    $tpl = new Template($str);
    if ($tpl->didFindTemplate()) {
        $res = new Response();
        $res->content = $tpl->render($payload);
    } else {
        $res = new \foundry\response\redirect(URL::linkTo('/'), true);
    }
    return $res;
}
function xml($request, $payload, $kwargs = array())
{
    $res = new Response();
    $articles = '';
    $comments = '';
    $lastUpdate = false;
    if ($payload['articles']) {
        $articles = $payload['articles']->serialize('atom');
        $lastUpdate = $payload['articles']->peekFront()->created;
    }
    if ($payload['comments']) {
        $comments = $payload['comments']->serialize('atom');
    }
    if ($payload['comments'] && $payload['comments']->peekFront()->created > $lastUpdate) {
        $lastUpdate = $payload['comments']->peekFront()->created;
    }
    $lastUpdate = date('c', $lastUpdate);
    if ($payload['articles'] && !$payload['comments']) {
        $url = URL::linkTo('gryphon:recent/article', true);
    } elseif ($payload['comments'] && !$payload['articles']) {
        $url = URL::linkTo('gryphon:recent/comment', true);
    } else {
        $url = URL::linkTo('gryphon:recent', true);
    }
    $res->content = <<<ATOM
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
\t<title>State News Recent Items</title>
\t<link href="{$url}.xml" rel="self" />
\t<id>{$url}.xml</id>
\t<updated>{$lastUpdate}</updated>
\t{$articles}
\t{$comments}
</feed>
ATOM;
    $res->setHeader('Content-Type', 'application/atom+xml');
    return $res;
}
Example #3
0
function main($request, $payload, $kwargs = array())
{
    $response = new Response();
    $feed = $payload['feed'];
    $items = $payload['items'];
    if ($feed->type == 'atom') {
        $entries = $items->serialize('atom');
        $lastUpdate = date('c', $items->peekBack()->created);
        $link = URL::linkTo('/', true);
        $response->content = <<<ATOM
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
\t<title>{$feed->title}</title>
\t<link href="{$link}" rel="self" />
\t<id>{$feed->url}</id>
\t<updated>{$lastUpdate}</updated>
\t{$entries}
</feed>
ATOM;
        $response->setHeader('Content-Type', 'application/atom+xml');
    } elseif ($feed->type == 'rss') {
        $entries = $items->serialize('rss');
        $lastUpdate = date('r', $items->peekBack()->created);
        $buildDate = date('r', time());
        $link = URL::linkTo('/', true);
        $v = sprintf('Gryphon %s', \foundry\config::get('gryphon:version'));
        $c = date('Y') . ' ' . Conf::get('publication:name');
        $response->content = <<<RSS
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
\t<channel>
\t\t<title>{$feed->title}</title>
\t\t<link>{$link}</link>
\t\t<pubDate>{$buildDate}</pubDate>
\t\t<lastBuildDate>{$lastUpdate}</lastBuildDate>
\t\t<generator>{$v}</generator>
\t\t<copyright>{$c}</copyright>
\t\t<description>{$feed->description}</description>
\t\t{$entries}
\t</channel>
</rss>
RSS;
        $response->setHeader('Content-Type', 'application/rss+xml');
    } elseif ($feed->type == 'podcast') {
        $entries = $items->serialize('podcast');
        $lastUpdate = date('r', $items->peekBack()->created);
        $buildDate = date('r', time());
        $link = URL::linkTo('/', true);
        $v = sprintf('Gryphon %s', \foundry\config::get('gryphon:version'));
        $c = date('Y') . ' ' . Conf::get('publication:name');
        $i = '';
        if ($feed->media->length) {
            $image = $feed->media->pop();
            $i = sprintf('<itunes:image href="%s" />', $image->url);
        }
        $response->content = <<<RSS
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
\t<channel>
\t\t<title>{$feed->title}</title>
\t\t<link>{$link}</link>
\t\t<pubDate>{$buildDate}</pubDate>
\t\t<lastBuildDate>{$lastUpdate}</lastBuildDate>
\t\t<generator>{$v}</generator>
\t\t<description>{$feed->description}</description>
\t\t<copyright>{$c}</copyright>
\t\t<itunes:summary>{$feed->description}</itunes:summary>
\t\t{$i}
\t\t{$entries}
\t</channel>
</rss>
RSS;
        $response->setHeader('Content-Type', 'application/rss+xml');
    }
    return $response;
}