public function render()
 {
     require_celerity_resource('ponder-core-view-css');
     require_celerity_resource('ponder-feed-view-css');
     $user = $this->user;
     $aoffset = $this->answeroffset;
     $answers = $this->answers;
     $uri = $this->uri;
     $aparam = $this->aparam;
     $pagesize = $this->pagesize;
     $apagebuttons = id(new AphrontPagerView())->setPageSize($pagesize)->setOffset($aoffset)->setURI($uri->setFragment('answers'), $aparam);
     $answers = $apagebuttons->sliceResults($answers);
     $view = new PhabricatorObjectItemListView();
     $view->setNoDataString(pht('No matching answers.'));
     foreach ($answers as $answer) {
         $question = $answer->getQuestion();
         $author_phid = $question->getAuthorPHID();
         $item = new PhabricatorObjectItemView();
         $href = id(new PhutilURI('/Q' . $question->getID()))->setFragment('A' . $answer->getID());
         $item->setHeader('A' . $answer->getID() . ' ' . self::abbreviate($answer->getContent()));
         $item->setHref($href);
         $item->addDetail(pht('Votes'), $answer->getVoteCount());
         $item->addDetail(pht('Question'), self::abbreviate($question->getTitle()));
         $item->addAttribute(pht('Created %s', phabricator_date($answer->getDateCreated(), $user)));
         $view->addItem($item);
     }
     $view->appendChild($apagebuttons);
     return $view->render();
 }
 private function buildPasteList(array $pastes)
 {
     assert_instances_of($pastes, 'PhabricatorPaste');
     $user = $this->getRequest()->getUser();
     $this->loadHandles(mpull($pastes, 'getAuthorPHID'));
     $list = new PhabricatorObjectItemListView();
     foreach ($pastes as $paste) {
         $created = phabricator_datetime($paste->getDateCreated(), $user);
         $item = id(new PhabricatorObjectItemView())->setHeader($paste->getFullName())->setHref('/P' . $paste->getID())->addDetail(pht('Author'), $this->getHandle($paste->getAuthorPHID())->renderLink())->addAttribute(pht('Created %s', $created));
         $list->addItem($item);
     }
     return $list;
 }
 private function buildQuestionListView(array $questions)
 {
     assert_instances_of($questions, 'PonderQuestion');
     $user = $this->getRequest()->getUser();
     $view = new PhabricatorObjectItemListView();
     $view->setNoDataString(pht('No matching questions.'));
     foreach ($questions as $question) {
         $item = new PhabricatorObjectItemView();
         $item->setHeader('Q' . $question->getID() . ' ' . $question->getTitle());
         $item->setHref('/Q' . $question->getID());
         $desc = $question->getContent();
         if ($desc) {
             $item->addDetail(pht('Description'), phutil_escape_html(phutil_utf8_shorten($desc, 128)));
         }
         $item->addDetail(pht('Author'), $this->getHandle($question->getAuthorPHID())->renderLink());
         $item->addDetail(pht('Votes'), $question->getVoteCount());
         $item->addDetail(pht('Answers'), $question->getAnswerCount());
         $created = pht('Created %s', phabricator_date($question->getDateCreated(), $user));
         $item->addAttribute($created);
         $view->addItem($item);
     }
     return $view;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $viewer = $request->getUser();
     $macro_table = new PhabricatorFileImageMacro();
     $filter = $request->getStr('name');
     if (strlen($filter)) {
         $macros = $macro_table->loadAllWhere('name LIKE %~', $filter);
         $nodata = pht('There are no macros matching the filter "%s".', phutil_escape_html($filter));
     } else {
         $pager = new AphrontPagerView();
         $pager->setOffset($request->getInt('page'));
         $macros = $macro_table->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize());
         // Get an exact count since the size here is reasonably going to be a few
         // thousand at most in any reasonable case.
         $count = queryfx_one($macro_table->establishConnection('r'), 'SELECT COUNT(*) N FROM %T', $macro_table->getTableName());
         $count = $count['N'];
         $pager->setCount($count);
         $pager->setURI($request->getRequestURI(), 'page');
         $nodata = pht('There are no image macros yet.');
     }
     $file_phids = mpull($macros, 'getFilePHID');
     $files = array();
     if ($file_phids) {
         $files = id(new PhabricatorFile())->loadAllWhere("phid IN (%Ls)", $file_phids);
         $author_phids = mpull($files, 'getAuthorPHID', 'getPHID');
         $this->loadHandles($author_phids);
     }
     $files_map = mpull($files, null, 'getPHID');
     $filter_form = id(new AphrontFormView())->setMethod('GET')->setUser($request->getUser())->appendChild(id(new AphrontFormTextControl())->setName('name')->setLabel('Name')->setValue($filter))->appendChild(id(new AphrontFormSubmitControl())->setValue('Filter Image Macros'));
     $filter_view = new AphrontListFilterView();
     $filter_view->appendChild($filter_form);
     $nav = $this->buildSideNavView();
     $nav->selectFilter('/');
     $nav->appendChild($filter_view);
     if ($macros) {
         $pinboard = new PhabricatorPinboardView();
         foreach ($macros as $macro) {
             $file_phid = $macro->getFilePHID();
             $file = idx($files_map, $file_phid);
             $item = new PhabricatorPinboardItemView();
             if ($file) {
                 $item->setImageURI($file->getThumb220x165URI());
                 $item->setImageSize(220, 165);
                 if ($file->getAuthorPHID()) {
                     $author_handle = $this->getHandle($file->getAuthorPHID());
                     $item->appendChild('Created by ' . $author_handle->renderLink());
                 }
                 $datetime = phabricator_date($file->getDateCreated(), $viewer);
                 $item->appendChild(phutil_render_tag('div', array(), 'Created on ' . $datetime));
             }
             $item->setURI($this->getApplicationURI('/edit/' . $macro->getID() . '/'));
             $item->setHeader($macro->getName());
             $pinboard->addItem($item);
         }
         $nav->appendChild($pinboard);
     } else {
         $list = new PhabricatorObjectItemListView();
         $list->setNoDataString($nodata);
         $nav->appendChild($list);
     }
     if ($filter === null) {
         $nav->appendChild($pager);
     }
     return $this->buildApplicationPage($nav, array('device' => true, 'title' => 'Image Macros'));
 }