protected function getValueFromRequest(AphrontRequest $request, $key)
 {
     $list = $this->getListFromRequest($request, $key);
     $phids = array();
     $slugs = array();
     $project_type = PhabricatorProjectProjectPHIDType::TYPECONST;
     foreach ($list as $item) {
         $type = phid_get_type($item);
         if ($type == $project_type) {
             $phids[] = $item;
         } else {
             if (PhabricatorTypeaheadDatasource::isFunctionToken($item)) {
                 // If this is a function, pass it through unchanged; we'll evaluate
                 // it later.
                 $phids[] = $item;
             } else {
                 $slugs[] = $item;
             }
         }
     }
     if ($slugs) {
         $projects = id(new PhabricatorProjectQuery())->setViewer($this->requireViewer())->withSlugs($slugs)->execute();
         foreach ($projects as $project) {
             $phids[] = $project->getPHID();
         }
         $phids = array_unique($phids);
     }
     return $phids;
 }
 protected function getUsersFromRequest(AphrontRequest $request, $key, array $allow_types = array())
 {
     $list = $this->getListFromRequest($request, $key);
     $phids = array();
     $names = array();
     $allow_types = array_fuse($allow_types);
     $user_type = PhabricatorPeopleUserPHIDType::TYPECONST;
     foreach ($list as $item) {
         $type = phid_get_type($item);
         if ($type == $user_type) {
             $phids[] = $item;
         } else {
             if (isset($allow_types[$type])) {
                 $phids[] = $item;
             } else {
                 if (PhabricatorTypeaheadDatasource::isFunctionToken($item)) {
                     // If this is a function, pass it through unchanged; we'll evaluate
                     // it later.
                     $phids[] = $item;
                 } else {
                     $names[] = $item;
                 }
             }
         }
     }
     if ($names) {
         $users = id(new PhabricatorPeopleQuery())->setViewer($this->getViewer())->withUsernames($names)->execute();
         foreach ($users as $user) {
             $phids[] = $user->getPHID();
         }
         $phids = array_unique($phids);
     }
     return $phids;
 }
 private function loadHandles()
 {
     if ($this->handles === null) {
         $viewer = $this->getUser();
         if (!$viewer) {
             throw new Exception(pht('Call %s before rendering tokenizers. ' . 'Use %s on %s to do this easily.', 'setUser()', 'appendControl()', 'AphrontFormView'));
         }
         $values = nonempty($this->getValue(), array());
         $phids = array();
         foreach ($values as $value) {
             if (!PhabricatorTypeaheadDatasource::isFunctionToken($value)) {
                 $phids[] = $value;
             }
         }
         $this->handles = $viewer->loadHandles($phids);
     }
     return $this->handles;
 }