Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
2.2 kB · 106 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107<?php
/** * Resolve an author or committer name, like * `"Abraham Lincoln <alincoln@logcab.in>"`, into a valid Phabricator user * account, like `@alincoln`. */final class DiffusionResolveUserQuery extends Phobject {
private $name;
public function withName($name) { $this->name = $name; return $this; }
public function execute() { return $this->findUserPHID($this->name); }
private function findUserPHID($user_name) { if (!strlen($user_name)) { return null; }
$phid = $this->findUserByUserName($user_name); if ($phid) { return $phid; }
$phid = $this->findUserByEmailAddress($user_name); if ($phid) { return $phid; }
$phid = $this->findUserByRealName($user_name); if ($phid) { return $phid; }
// No hits yet, try to parse it as an email address.
$email = new PhutilEmailAddress($user_name);
$phid = $this->findUserByEmailAddress($email->getAddress()); if ($phid) { return $phid; }
$display_name = $email->getDisplayName(); if ($display_name) { $phid = $this->findUserByUserName($display_name); if ($phid) { return $phid; }
$phid = $this->findUserByRealName($display_name); if ($phid) { return $phid; } }
return null; }
private function findUserByUserName($user_name) { $by_username = id(new PhabricatorUser())->loadOneWhere( 'userName = %s', $user_name);
if ($by_username) { return $by_username->getPHID(); }
return null; }
private function findUserByRealName($real_name) { // Note, real names are not guaranteed unique, which is why we do it this // way. $by_realname = id(new PhabricatorUser())->loadAllWhere( 'realName = %s', $real_name);
if (count($by_realname) == 1) { return head($by_realname)->getPHID(); }
return null; }
private function findUserByEmailAddress($email_address) { $by_email = PhabricatorUser::loadOneWithVerifiedEmailAddress($email_address);
if ($by_email) { return $by_email->getPHID(); }
return null; }
}