Path: blob/master/src/applications/diffusion/query/DiffusionResolveUserQuery.php
12242 views
<?php12/**3* Resolve an author or committer name, like4* `"Abraham Lincoln <[email protected]>"`, into a valid Phabricator user5* account, like `@alincoln`.6*/7final class DiffusionResolveUserQuery extends Phobject {89private $name;1011public function withName($name) {12$this->name = $name;13return $this;14}1516public function execute() {17return $this->findUserPHID($this->name);18}1920private function findUserPHID($user_name) {21if (!strlen($user_name)) {22return null;23}2425$phid = $this->findUserByUserName($user_name);26if ($phid) {27return $phid;28}2930$phid = $this->findUserByEmailAddress($user_name);31if ($phid) {32return $phid;33}3435$phid = $this->findUserByRealName($user_name);36if ($phid) {37return $phid;38}3940// No hits yet, try to parse it as an email address.4142$email = new PhutilEmailAddress($user_name);4344$phid = $this->findUserByEmailAddress($email->getAddress());45if ($phid) {46return $phid;47}4849$display_name = $email->getDisplayName();50if ($display_name) {51$phid = $this->findUserByUserName($display_name);52if ($phid) {53return $phid;54}5556$phid = $this->findUserByRealName($display_name);57if ($phid) {58return $phid;59}60}6162return null;63}646566private function findUserByUserName($user_name) {67$by_username = id(new PhabricatorUser())->loadOneWhere(68'userName = %s',69$user_name);7071if ($by_username) {72return $by_username->getPHID();73}7475return null;76}777879private function findUserByRealName($real_name) {80// Note, real names are not guaranteed unique, which is why we do it this81// way.82$by_realname = id(new PhabricatorUser())->loadAllWhere(83'realName = %s',84$real_name);8586if (count($by_realname) == 1) {87return head($by_realname)->getPHID();88}8990return null;91}929394private function findUserByEmailAddress($email_address) {95$by_email = PhabricatorUser::loadOneWithEmailAddress($email_address);9697if ($by_email) {98return $by_email->getPHID();99}100101return null;102}103104}105106107