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(); $item->setImageURI($file->getThumb160x120URI()); $item->setImageSize(160, 120); $item->setURI($this->getApplicationURI('/edit/'.$macro->getID().'/')); $item->setHeader($macro->getName()); 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)); $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', )); } }