pathChanges = $path_changes; return $this; } public function setOwnersPaths(array $owners_paths) { assert_instances_of($owners_paths, 'PhabricatorOwnersPath'); $this->ownersPaths = $owners_paths; return $this; } public function render() { $rows = array(); $rowc = array(); // TODO: Experiment with path stack rendering. // TODO: Copy Away and Move Away are rendered junkily still. foreach ($this->pathChanges as $change) { $path = $change->getPath(); $hash = substr(md5($path), 0, 8); if ($change->getFileType() == DifferentialChangeType::FILE_DIRECTORY) { $path .= '/'; } $path_column = phutil_render_tag( 'a', array( 'href' => '#'.$hash, ), phutil_escape_html($path)); $rows[] = array( $this->linkHistory($change->getPath()), $this->linkBrowse($change->getPath()), $this->linkChange( $change->getChangeType(), $change->getFileType(), $change->getPath()), $path_column, ); $row_class = null; foreach ($this->ownersPaths as $owners_path) { $owners_path = $owners_path->getPath(); if (strncmp('/'.$path, $owners_path, strlen($owners_path)) == 0) { $row_class = 'highlighted'; break; } } $rowc[] = $row_class; } $view = new AphrontTableView($rows); $view->setHeaders( array( 'History', 'Browse', 'Change', 'Path', )); $view->setColumnClasses( array( '', '', '', 'wide', )); $view->setRowClasses($rowc); $view->setNoDataString('This change has not been fully parsed yet.'); return $view->render(); } }