Path: blob/master/src/applications/almanac/controller/AlmanacController.php
12262 views
<?php12abstract class AlmanacController3extends PhabricatorController {45protected function buildAlmanacPropertiesTable(6AlmanacPropertyInterface $object) {78$viewer = $this->getViewer();9$properties = $object->getAlmanacProperties();1011$this->requireResource('almanac-css');12Javelin::initBehavior('phabricator-tooltips', array());1314$can_edit = PhabricatorPolicyFilter::hasCapability(15$viewer,16$object,17PhabricatorPolicyCapability::CAN_EDIT);1819$properties = $object->getAlmanacProperties();2021$icon_builtin = id(new PHUIIconView())22->setIcon('fa-circle')23->addSigil('has-tooltip')24->setMetadata(25array(26'tip' => pht('Builtin Property'),27'align' => 'E',28));2930$icon_custom = id(new PHUIIconView())31->setIcon('fa-circle-o grey')32->addSigil('has-tooltip')33->setMetadata(34array(35'tip' => pht('Custom Property'),36'align' => 'E',37));3839$builtins = $object->getAlmanacPropertyFieldSpecifications();40$defaults = mpull($builtins, 'getValueForTransaction');4142// Sort fields so builtin fields appear first, then fields are ordered43// alphabetically.44$properties = msort($properties, 'getFieldName');4546$head = array();47$tail = array();48foreach ($properties as $property) {49$key = $property->getFieldName();50if (isset($builtins[$key])) {51$head[$key] = $property;52} else {53$tail[$key] = $property;54}55}5657$properties = $head + $tail;5859$delete_base = $this->getApplicationURI('property/delete/');60$edit_base = $this->getApplicationURI('property/update/');6162$rows = array();63foreach ($properties as $key => $property) {64$value = $property->getFieldValue();6566$is_builtin = isset($builtins[$key]);67$is_persistent = (bool)$property->getID();6869$params = array(70'key' => $key,71'objectPHID' => $object->getPHID(),72);7374$delete_uri = new PhutilURI($delete_base, $params);75$edit_uri = new PhutilURI($edit_base, $params);7677$delete = javelin_tag(78'a',79array(80'class' => (($can_edit && $is_persistent)81? 'button button-grey small'82: 'button button-grey small disabled'),83'sigil' => 'workflow',84'href' => $delete_uri,85),86$is_builtin ? pht('Reset') : pht('Delete'));8788$default = idx($defaults, $key);89$is_default = ($default !== null && $default === $value);9091$display_value = PhabricatorConfigJSON::prettyPrintJSON($value);92if ($is_default) {93$display_value = phutil_tag(94'span',95array(96'class' => 'almanac-default-property-value',97),98$display_value);99}100101$display_key = $key;102if ($can_edit) {103$display_key = javelin_tag(104'a',105array(106'href' => $edit_uri,107'sigil' => 'workflow',108),109$display_key);110}111112$rows[] = array(113($is_builtin ? $icon_builtin : $icon_custom),114$display_key,115$display_value,116$delete,117);118}119120$table = id(new AphrontTableView($rows))121->setNoDataString(pht('No properties.'))122->setHeaders(123array(124null,125pht('Name'),126pht('Value'),127null,128))129->setColumnClasses(130array(131null,132null,133'wide',134'action',135));136137$phid = $object->getPHID();138$add_uri = id(new PhutilURI($edit_base))139->replaceQueryParam('objectPHID', $object->getPHID());140141$can_edit = PhabricatorPolicyFilter::hasCapability(142$viewer,143$object,144PhabricatorPolicyCapability::CAN_EDIT);145146$add_button = id(new PHUIButtonView())147->setTag('a')148->setHref($add_uri)149->setWorkflow(true)150->setDisabled(!$can_edit)151->setText(pht('Add Property'))152->setIcon('fa-plus');153154$header = id(new PHUIHeaderView())155->setHeader(pht('Properties'))156->addActionLink($add_button);157158return id(new PHUIObjectBoxView())159->setHeader($header)160->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)161->setTable($table);162}163164protected function addClusterMessage(165$positive,166$negative) {167168$can_manage = $this->hasApplicationCapability(169AlmanacManageClusterServicesCapability::CAPABILITY);170171$doc_link = phutil_tag(172'a',173array(174'href' => PhabricatorEnv::getDoclink(175'Clustering Introduction'),176'target' => '_blank',177),178pht('Learn More'));179180if ($can_manage) {181$severity = PHUIInfoView::SEVERITY_NOTICE;182$message = $positive;183} else {184$severity = PHUIInfoView::SEVERITY_WARNING;185$message = $negative;186}187188$icon = id(new PHUIIconView())189->setIcon('fa-sitemap');190191return id(new PHUIInfoView())192->setSeverity($severity)193->setErrors(194array(195array($icon, ' ', $message, ' ', $doc_link),196));197198}199200protected function getPropertyDeleteURI($object) {201return null;202}203204protected function getPropertyUpdateURI($object) {205return null;206}207208}209210211