Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14063770
D19923.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D19923.diff
View Options
diff --git a/src/applications/pholio/engine/PholioMockTimelineEngine.php b/src/applications/pholio/engine/PholioMockTimelineEngine.php
--- a/src/applications/pholio/engine/PholioMockTimelineEngine.php
+++ b/src/applications/pholio/engine/PholioMockTimelineEngine.php
@@ -7,10 +7,13 @@
$viewer = $this->getViewer();
$object = $this->getObject();
- PholioMockQuery::loadImages(
- $viewer,
- array($object),
- $need_inline_comments = true);
+ $images = id(new PholioImageQuery())
+ ->setViewer($viewer)
+ ->withMocks(array($object))
+ ->needInlineComments(true)
+ ->execute();
+
+ $object->attachImages($images);
return id(new PholioTransactionView())
->setMock($object);
diff --git a/src/applications/pholio/query/PholioImageQuery.php b/src/applications/pholio/query/PholioImageQuery.php
--- a/src/applications/pholio/query/PholioImageQuery.php
+++ b/src/applications/pholio/query/PholioImageQuery.php
@@ -6,9 +6,9 @@
private $ids;
private $phids;
private $mockPHIDs;
+ private $mocks;
private $needInlineComments;
- private $mockCache = array();
public function withIDs(array $ids) {
$this->ids = $ids;
@@ -20,6 +20,16 @@
return $this;
}
+ public function withMocks(array $mocks) {
+ assert_instances_of($mocks, 'PholioMock');
+
+ $mocks = mpull($mocks, null, 'getPHID');
+ $this->mocks = $mocks;
+ $this->mockPHIDs = array_keys($mocks);
+
+ return $this;
+ }
+
public function withMockPHIDs(array $mock_phids) {
$this->mockPHIDs = $mock_phids;
return $this;
@@ -30,14 +40,6 @@
return $this;
}
- public function setMockCache($mock_cache) {
- $this->mockCache = $mock_cache;
- return $this;
- }
- public function getMockCache() {
- return $this->mockCache;
- }
-
public function newResultObject() {
return new PholioImage();
}
@@ -76,26 +78,40 @@
protected function willFilterPage(array $images) {
assert_instances_of($images, 'PholioImage');
- if ($this->getMockCache()) {
- $mocks = $this->getMockCache();
- } else {
- $mock_phids = mpull($images, 'getMockPHID');
+ $mock_phids = array();
+ foreach ($images as $image) {
+ if (!$image->hasMock()) {
+ continue;
+ }
+
+ $mock_phids[] = $image->getMockPHID();
+ }
+
+ if ($mock_phids) {
+ if ($this->mocks) {
+ $mocks = $this->mocks;
+ } else {
+ $mocks = id(new PholioMockQuery())
+ ->setViewer($this->getViewer())
+ ->withPHIDs($mock_phids)
+ ->execute();
+ }
- // DO NOT set needImages to true; recursion results!
- $mocks = id(new PholioMockQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs($mock_phids)
- ->execute();
$mocks = mpull($mocks, null, 'getPHID');
- }
- foreach ($images as $index => $image) {
- $mock = idx($mocks, $image->getMockPHID());
- if ($mock) {
+ foreach ($images as $key => $image) {
+ if (!$image->hasMock()) {
+ continue;
+ }
+
+ $mock = idx($mocks, $image->getMockPHID());
+ if (!$mock) {
+ unset($images[$key]);
+ $this->didRejectResult($image);
+ continue;
+ }
+
$image->attachMock($mock);
- } else {
- // mock is missing or we can't see it
- unset($images[$index]);
}
}
diff --git a/src/applications/pholio/query/PholioMockQuery.php b/src/applications/pholio/query/PholioMockQuery.php
--- a/src/applications/pholio/query/PholioMockQuery.php
+++ b/src/applications/pholio/query/PholioMockQuery.php
@@ -58,21 +58,14 @@
}
protected function loadPage() {
- $mocks = $this->loadStandardPage($this->newResultObject());
-
- if ($mocks && $this->needImages) {
- self::loadImages($this->getViewer(), $mocks, $this->needInlineComments);
- }
-
- if ($mocks && $this->needCoverFiles) {
- $this->loadCoverFiles($mocks);
- }
-
- if ($mocks && $this->needTokenCounts) {
- $this->loadTokenCounts($mocks);
+ if ($this->needInlineComments && !$this->needImages) {
+ throw new Exception(
+ pht(
+ 'You can not query for inline comments without also querying for '.
+ 'images.'));
}
- return $mocks;
+ return $this->loadStandardPage(new PholioMock());
}
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
@@ -109,58 +102,53 @@
return $where;
}
- public static function loadImages(
- PhabricatorUser $viewer,
- array $mocks,
- $need_inline_comments) {
- assert_instances_of($mocks, 'PholioMock');
-
- $mock_map = mpull($mocks, null, 'getPHID');
- $all_images = id(new PholioImageQuery())
- ->setViewer($viewer)
- ->setMockCache($mock_map)
- ->withMockPHIDs(array_keys($mock_map))
- ->needInlineComments($need_inline_comments)
- ->execute();
-
- $image_groups = mgroup($all_images, 'getMockPHID');
-
- foreach ($mocks as $mock) {
- $mock_images = idx($image_groups, $mock->getPHID(), array());
- $mock->attachImages($mock_images);
- }
- }
+ protected function didFilterPage(array $mocks) {
+ $viewer = $this->getViewer();
- private function loadCoverFiles(array $mocks) {
- assert_instances_of($mocks, 'PholioMock');
- $cover_file_phids = mpull($mocks, 'getCoverPHID');
- $cover_files = id(new PhabricatorFileQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs($cover_file_phids)
- ->execute();
+ if ($this->needImages) {
+ $images = id(new PholioImageQuery())
+ ->setViewer($viewer)
+ ->withMocks($mocks)
+ ->needInlineComments($this->needInlineComments)
+ ->execute();
- $cover_files = mpull($cover_files, null, 'getPHID');
-
- foreach ($mocks as $mock) {
- $file = idx($cover_files, $mock->getCoverPHID());
- if (!$file) {
- $file = PhabricatorFile::loadBuiltin($this->getViewer(), 'missing.png');
+ $image_groups = mgroup($images, 'getMockPHID');
+ foreach ($mocks as $mock) {
+ $images = idx($image_groups, $mock->getPHID(), array());
+ $mock->attachImages($images);
}
- $mock->attachCoverFile($file);
}
- }
- private function loadTokenCounts(array $mocks) {
- assert_instances_of($mocks, 'PholioMock');
+ if ($this->needCoverFiles) {
+ $cover_files = id(new PhabricatorFileQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(mpull($mocks, 'getCoverPHID'))
+ ->execute();
+ $cover_files = mpull($cover_files, null, 'getPHID');
+
+ foreach ($mocks as $mock) {
+ $file = idx($cover_files, $mock->getCoverPHID());
+ if (!$file) {
+ $file = PhabricatorFile::loadBuiltin(
+ $viewer,
+ 'missing.png');
+ }
+ $mock->attachCoverFile($file);
+ }
+ }
- $phids = mpull($mocks, 'getPHID');
- $counts = id(new PhabricatorTokenCountQuery())
- ->withObjectPHIDs($phids)
- ->execute();
+ if ($this->needTokenCounts) {
+ $counts = id(new PhabricatorTokenCountQuery())
+ ->withObjectPHIDs(mpull($mocks, 'getPHID'))
+ ->execute();
- foreach ($mocks as $mock) {
- $mock->attachTokenCount(idx($counts, $mock->getPHID(), 0));
+ foreach ($mocks as $mock) {
+ $token_count = idx($counts, $mock->getPHID(), 0);
+ $mock->attachTokenCount($token_count);
+ }
}
+
+ return $mocks;
}
public function getQueryApplicationClass() {
diff --git a/src/applications/pholio/view/PholioMockImagesView.php b/src/applications/pholio/view/PholioMockImagesView.php
--- a/src/applications/pholio/view/PholioMockImagesView.php
+++ b/src/applications/pholio/view/PholioMockImagesView.php
@@ -110,7 +110,7 @@
);
}
- $ids = mpull($mock->getActiveImages(), 'getID');
+ $ids = mpull($mock->getActiveImages(), null, 'getID');
if ($this->imageID && isset($ids[$this->imageID])) {
$selected_id = $this->imageID;
} else {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 19, 8:18 PM (16 h, 54 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6717435
Default Alt Text
D19923.diff (7 KB)
Attached To
Mode
D19923: Reduce the amount of weird "static" and "cache" behavior in Pholio query classes
Attached
Detach File
Event Timeline
Log In to Comment