private function buildObjectTranscriptPanel($xscript) { $field_names = HeraldFieldConfig::getFieldMap(); $object_xscript = $xscript->getObjectTranscript(); $data = array(); if ($object_xscript) { $phid = $object_xscript->getPHID(); $handles = $this->loadViewerHandles(array($phid)); $data += array('Object Name' => $object_xscript->getName(), 'Object Type' => $object_xscript->getType(), 'Object PHID' => $phid, 'Object Link' => $handles[$phid]->renderLink()); } $data += $xscript->getMetadataMap(); if ($object_xscript) { foreach ($object_xscript->getFields() as $field => $value) { $field = idx($field_names, $field, '[' . $field . '?]'); $data['Field: ' . $field] = $value; } } $rows = array(); foreach ($data as $name => $value) { if (!is_scalar($value) && !is_null($value)) { $value = implode("\n", $value); } if (strlen($value) > 256) { $value = phutil_render_tag('textarea', array('class' => 'herald-field-value-transcript'), phutil_escape_html($value)); } else { if ($name === 'Object Link') { // The link cannot be escaped } else { $value = phutil_escape_html($value); } } $rows[] = array(phutil_escape_html($name), $value); } $table = new AphrontTableView($rows); $table->setColumnClasses(array('header', 'wide')); $panel = new AphrontPanelView(); $panel->setHeader('Object Transcript'); $panel->appendChild($table); return $panel; }