handle = $handle; return $this; } public function setQuery(PhabricatorSearchQuery $query) { $this->query = $query; return $this; } public function setObject($object) { $this->object = $object; return $this; } public function render() { $handle = $this->handle; $type_name = nonempty($handle->getTypeName(), 'Document'); require_celerity_resource('phabricator-search-results-css'); $link = phutil_render_tag( 'a', array( 'href' => $handle->getURI(), ), PhabricatorEnv::getProductionURI($handle->getURI())); switch ($handle->getType()) { case PhabricatorPHIDConstants::PHID_TYPE_USER: if ($this->object) { $img_phid = $this->object->getProfileImagePHID(); $img = PhabricatorFileURI::getViewURIForPHID($img_phid); } break; default: $img = null; break; } if ($img) { $img = phutil_render_tag( 'div', array( 'class' => 'result-image', 'style' => "background-image: url('{$img}');", ), ''); } switch ($handle->getType()) { case PhabricatorPHIDConstants::PHID_TYPE_CMIT: $object_name = $handle->getName(); if ($this->object) { $data = $this->object->getCommitData(); $summary = $data->getSummary(); if (strlen($summary)) { $object_name = $handle->getName().': '.$data->getSummary(); } } break; default: $object_name = $handle->getFullName(); break; } return '
'. $img. '
'. phutil_render_tag( 'a', array( 'class' => 'result-name', 'href' => $handle->getURI(), ), $this->emboldenQuery($object_name)). '
'.$type_name.' · '.$link.'
'. '
'. '
'. '
'; } private function emboldenQuery($str) { if (!$this->query) { return phutil_escape_html($str); } $query = $this->query->getQuery(); $query = preg_split("/\s+/", $query); $query = array_filter($query); $str = phutil_escape_html($str); foreach ($query as $word) { $word = phutil_escape_html($word); $str = preg_replace( '/(?:^|\b)('.preg_quote($word, '/').')(?:\b|$)/i', '\1', $str); } return $str; } }