Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/macro/controller/PhabricatorMacroListController.php b/src/applications/macro/controller/PhabricatorMacroListController.php
index 691fa6b9b7..828cbf01a0 100644
--- a/src/applications/macro/controller/PhabricatorMacroListController.php
+++ b/src/applications/macro/controller/PhabricatorMacroListController.php
@@ -1,131 +1,161 @@
<?php
final class PhabricatorMacroListController
extends PhabricatorMacroController {
public function processRequest() {
$request = $this->getRequest();
$viewer = $request->getUser();
$macro_table = new PhabricatorFileImageMacro();
+ $file_table = new PhabricatorFile();
+ $conn = $macro_table->establishConnection('r');
+
+ $where = array();
+
+ $join = array();
+ $join[] = qsprintf($conn, '%T m', $macro_table->getTableName());
$filter = $request->getStr('name');
if (strlen($filter)) {
- $macros = $macro_table->loadAllWhere(
- 'name LIKE %~',
- $filter);
+ $where[] = qsprintf($conn, 'm.name LIKE %~', $filter);
+ }
+
+ $authors = $request->getArr('authors');
+ if ($authors) {
+ $join[] = qsprintf(
+ $conn,
+ '%T f ON m.filePHID = f.phid',
+ $file_table->getTableName());
+ $where[] = qsprintf($conn, 'f.authorPHID IN (%Ls)', $authors);
+ }
- $nodata = pht(
- 'There are no macros matching the filter "%s".',
- phutil_escape_html($filter));
+ $has_search = $where;
+
+ if ($has_search) {
+ $macros = queryfx_all(
+ $conn,
+ 'SELECT m.*
+ FROM '.implode(' JOIN ', $join).'
+ WHERE '.implode(' AND ', $where));
+ $macros = $macro_table->loadAllFromArray($macros);
+ $nodata = pht('There are no macros matching the 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'),
+ $conn,
'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.');
}
+ $author_phids = array_combine($authors, $authors);
+
$file_phids = mpull($macros, 'getFilePHID');
$files = array();
if ($file_phids) {
- $files = id(new PhabricatorFile())->loadAllWhere(
+ $files = $file_table->loadAllWhere(
"phid IN (%Ls)",
$file_phids);
- $author_phids = mpull($files, 'getAuthorPHID', 'getPHID');
-
- $this->loadHandles($author_phids);
+ $author_phids += mpull($files, 'getAuthorPHID', 'getAuthorPHID');
}
$files_map = mpull($files, null, 'getPHID');
+ $this->loadHandles($author_phids);
+ $author_handles = array_select_keys($this->getLoadedHandles(), $authors);
+
$filter_form = id(new AphrontFormView())
->setMethod('GET')
->setUser($request->getUser())
->appendChild(
id(new AphrontFormTextControl())
->setName('name')
->setLabel('Name')
->setValue($filter))
+ ->appendChild(
+ id(new AphrontFormTokenizerControl())
+ ->setName('authors')
+ ->setLabel(pht('Authors'))
+ ->setDatasource('/typeahead/common/users/')
+ ->setValue(mpull($author_handles, 'getFullName')))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Filter Image Macros'));
$filter_view = new AphrontListFilterView();
$filter_view->appendChild($filter_form);
- $has_search = strlen($filter);
$nav = $this->buildSideNavView(
$for_app = false,
$has_search);
$nav->selectFilter($has_search ? 'search' : '/');
$nav->appendChild($filter_view);
$pinboard = new PhabricatorPinboardView();
$pinboard->setNoDataString($nodata);
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('/view/'.$macro->getID().'/'));
$item->setHeader($macro->getName());
$pinboard->addItem($item);
}
$nav->appendChild($pinboard);
- if (!strlen($filter)) {
+ if (!$has_search) {
$nav->appendChild($pager);
$name = pht('All Macros');
} else {
$name = pht('Search');
}
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addCrumb(
id(new PhabricatorCrumbView())
->setName($name)
->setHref($request->getRequestURI()));
$nav->setCrumbs($crumbs);
return $this->buildApplicationPage(
$nav,
array(
'device' => true,
'title' => 'Image Macros',
));
}
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Dec 1, 1:11 AM (21 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
424855
Default Alt Text
(5 KB)

Event Timeline