Don't try to load user profile images in PhabricatorPeopleQuery if no users have any
Summary:
Fixes T3810. In PhabricatorPeopleQuery, we issue an unnecessary query like this:
SELECT f.* FROM file f WHERE (f.phid IN ('')) ORDER BY f.id DESC
...if we're loading a user without a profile picture. Filter the file PHIDs before loading them to prevent this.
This doesn't change anything, but saves us a spurious/silly query.
Also makes `PhabricatorPeopleProfileController` use `needProfileImage()`, moving us closer to getting rid of `loadProfileImageURI()` eventually.
Test Plan: Looked at profiles of users with and without profile pictures. Checked query log in DarkConsole.
Reviewers: chad, btrahan
Reviewed By: chad
CC: aran
Maniphest Tasks: T3810
Differential Revision: https://secure.phabricator.com/D6913
This commit is contained in:
@@ -19,6 +19,7 @@ final class PhabricatorPeopleProfileController
|
|||||||
$user = id(new PhabricatorPeopleQuery())
|
$user = id(new PhabricatorPeopleQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withUsernames(array($this->username))
|
->withUsernames(array($this->username))
|
||||||
|
->needProfileImage(true)
|
||||||
->executeOne();
|
->executeOne();
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
|
|||||||
@@ -133,11 +133,17 @@ final class PhabricatorPeopleQuery
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->needProfileImage) {
|
if ($this->needProfileImage) {
|
||||||
|
$user_profile_file_phids = mpull($users, 'getProfileImagePHID');
|
||||||
|
$user_profile_file_phids = array_filter($user_profile_file_phids);
|
||||||
|
if ($user_profile_file_phids) {
|
||||||
$files = id(new PhabricatorFileQuery())
|
$files = id(new PhabricatorFileQuery())
|
||||||
->setViewer($this->getViewer())
|
->setViewer($this->getViewer())
|
||||||
->withPHIDs(mpull($users, 'getProfileImagePHID'))
|
->withPHIDs($user_profile_file_phids)
|
||||||
->execute();
|
->execute();
|
||||||
$files = mpull($files, null, 'getPHID');
|
$files = mpull($files, null, 'getPHID');
|
||||||
|
} else {
|
||||||
|
$files = array();
|
||||||
|
}
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
$image_phid = $user->getProfileImagePHID();
|
$image_phid = $user->getProfileImagePHID();
|
||||||
if (isset($files[$image_phid])) {
|
if (isset($files[$image_phid])) {
|
||||||
|
|||||||
Reference in New Issue
Block a user