getUser(); $id = $request->getURIData('id'); $blog = id(new PhameBlogQuery()) ->setViewer($user) ->withIDs(array($id)) ->executeOne(); if (!$blog) { return new Aphront404Response(); } $posts = id(new PhamePostQuery()) ->setViewer($user) ->withBlogPHIDs(array($blog->getPHID())) ->withVisibility(PhamePost::VISIBILITY_PUBLISHED) ->execute(); $blog_uri = PhabricatorEnv::getProductionURI( $this->getApplicationURI('blog/feed/'.$blog->getID().'/')); $content = array(); $content[] = phutil_tag('title', array(), $blog->getName()); $content[] = phutil_tag('id', array(), $blog_uri); $content[] = phutil_tag('link', array( 'rel' => 'self', 'type' => 'application/atom+xml', 'href' => $blog_uri, )); $updated = $blog->getDateModified(); if ($posts) { $updated = max($updated, max(mpull($posts, 'getDateModified'))); } $content[] = phutil_tag('updated', array(), date('c', $updated)); $description = $blog->getDescription(); if ($description != '') { $content[] = phutil_tag('subtitle', array(), $description); } $engine = id(new PhabricatorMarkupEngine())->setViewer($user); foreach ($posts as $post) { $engine->addObject($post, PhamePost::MARKUP_FIELD_BODY); } $engine->process(); $blogger_phids = mpull($posts, 'getBloggerPHID'); $bloggers = id(new PhabricatorHandleQuery()) ->setViewer($user) ->withPHIDs($blogger_phids) ->execute(); foreach ($posts as $post) { $content[] = hsprintf(''); $content[] = phutil_tag('title', array(), $post->getTitle()); $content[] = phutil_tag('link', array('href' => $post->getViewURI())); $content[] = phutil_tag('id', array(), PhabricatorEnv::getProductionURI( '/phame/post/view/'.$post->getID().'/')); $content[] = hsprintf( '%s', $bloggers[$post->getBloggerPHID()]->getFullName()); $content[] = phutil_tag( 'updated', array(), date('c', $post->getDateModified())); $content[] = hsprintf( ''. '
%s
'. '
', $engine->getOutput($post, PhamePost::MARKUP_FIELD_BODY)); $content[] = hsprintf('
'); } $content = phutil_tag( 'feed', array('xmlns' => 'http://www.w3.org/2005/Atom'), $content); return id(new AphrontFileResponse()) ->setMimeType('application/xml') ->setContent($content); } }