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')); }