protected function execute(ConduitAPIRequest $request)
 {
     $name = $request->getValue('name');
     $name_prefix = $request->getValue('namePrefix');
     $language = $request->getValue('language');
     $type = $request->getValue('type');
     $query = new DiffusionSymbolQuery();
     if ($name !== null) {
         $query->setName($name);
     }
     if ($name_prefix !== null) {
         $query->setNamePrefix($name_prefix);
     }
     if ($language !== null) {
         $query->setLanguage($language);
     }
     if ($type !== null) {
         $query->setType($type);
     }
     $query->needPaths(true);
     $query->needArcanistProjects(true);
     $query->needRepositories(true);
     $results = $query->execute();
     $response = array();
     foreach ($results as $result) {
         $response[] = array('name' => $result->getSymbolName(), 'type' => $result->getSymbolType(), 'language' => $result->getSymbolLanguage(), 'path' => $result->getPath(), 'line' => $result->getLineNumber(), 'uri' => PhabricatorEnv::getProductionURI($result->getURI()));
     }
     return $response;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $query = new DiffusionSymbolQuery();
     $query->setName($this->name);
     if ($request->getStr('type')) {
         $query->setType($request->getStr('type'));
     }
     if ($request->getStr('lang')) {
         $query->setLanguage($request->getStr('lang'));
     }
     if ($request->getStr('projects')) {
         $phids = $request->getStr('projects');
         $phids = explode(',', $phids);
         $phids = array_filter($phids);
         if ($phids) {
             $projects = id(new PhabricatorRepositoryArcanistProject())->loadAllWhere('phid IN (%Ls)', $phids);
             $projects = mpull($projects, 'getID');
             if ($projects) {
                 $query->setProjectIDs($projects);
             }
         }
     }
     $query->needPaths(true);
     $query->needArcanistProjects(true);
     $query->needRepositories(true);
     $symbols = $query->execute();
     // For PHP builtins, jump to php.net documentation.
     if ($request->getBool('jump') && count($symbols) == 0) {
         if ($request->getStr('lang') == 'php') {
             if ($request->getStr('type') == 'function') {
                 if (in_array($this->name, idx(get_defined_functions(), 'internal'))) {
                     return id(new AphrontRedirectResponse())->setURI('http://www.php.net/' . $this->name);
                 }
             }
         }
     }
     $rows = array();
     foreach ($symbols as $symbol) {
         $project = $symbol->getArcanistProject();
         if ($project) {
             $project_name = $project->getName();
         } else {
             $project_name = '-';
         }
         $file = phutil_escape_html($symbol->getPath());
         $line = phutil_escape_html($symbol->getLineNumber());
         $repo = $symbol->getRepository();
         if ($repo) {
             $href = $symbol->getURI();
             if ($request->getBool('jump') && count($symbols) == 1) {
                 // If this is a clickthrough from Differential, just jump them
                 // straight to the target if we got a single hit.
                 return id(new AphrontRedirectResponse())->setURI($href);
             }
             $location = phutil_render_tag('a', array('href' => $href), phutil_escape_html($file . ':' . $line));
         } else {
             if ($file) {
                 $location = phutil_escape_html($file . ':' . $line);
             } else {
                 $location = '?';
             }
         }
         $rows[] = array(phutil_escape_html($symbol->getSymbolType()), phutil_escape_html($symbol->getSymbolName()), phutil_escape_html($symbol->getSymbolLanguage()), phutil_escape_html($project_name), $location);
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Type', 'Name', 'Language', 'Project', 'File'));
     $table->setColumnClasses(array('', 'pri', '', '', '', 'n'));
     $table->setNoDataString("No matching symbol could be found in any indexed project.");
     $panel = new AphrontPanelView();
     $panel->setHeader('Similar Symbols');
     $panel->appendChild($table);
     return $this->buildStandardPageResponse(array($panel), array('title' => 'Find Symbol'));
 }