Differential D20287 Diff 48426 src/applications/project/controller/PhabricatorProjectBoardViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/controller/PhabricatorProjectBoardViewController.php
Show First 20 Lines • Show All 567 Lines • ▼ Show 20 Lines | foreach ($visible_columns as $column_phid => $column) { | ||||
if ($column->isHidden()) { | if ($column->isHidden()) { | ||||
$panel->addClass('project-panel-hidden'); | $panel->addClass('project-panel-hidden'); | ||||
} | } | ||||
$column_menu = $this->buildColumnMenu($project, $column); | $column_menu = $this->buildColumnMenu($project, $column); | ||||
$panel->addHeaderAction($column_menu); | $panel->addHeaderAction($column_menu); | ||||
if ($column->canHaveTrigger()) { | |||||
$trigger_menu = $this->buildTriggerMenu($column); | |||||
$panel->addHeaderAction($trigger_menu); | |||||
} | |||||
$count_tag = id(new PHUITagView()) | $count_tag = id(new PHUITagView()) | ||||
->setType(PHUITagView::TYPE_SHADE) | ->setType(PHUITagView::TYPE_SHADE) | ||||
->setColor(PHUITagView::COLOR_BLUE) | ->setColor(PHUITagView::COLOR_BLUE) | ||||
->addSigil('column-points') | ->addSigil('column-points') | ||||
->setName( | ->setName( | ||||
javelin_tag( | javelin_tag( | ||||
'span', | 'span', | ||||
array( | array( | ||||
▲ Show 20 Lines • Show All 582 Lines • ▼ Show 20 Lines | if (!$column->isHidden()) { | ||||
$column_items[] = id(new PhabricatorActionView()) | $column_items[] = id(new PhabricatorActionView()) | ||||
->setName(pht('Show Column')) | ->setName(pht('Show Column')) | ||||
->setIcon('fa-eye') | ->setIcon('fa-eye') | ||||
->setHref($hide_uri) | ->setHref($hide_uri) | ||||
->setDisabled(!$can_hide) | ->setDisabled(!$can_hide) | ||||
->setWorkflow(true); | ->setWorkflow(true); | ||||
} | } | ||||
if ($column->canHaveTrigger()) { | $column_menu = id(new PhabricatorActionListView()) | ||||
$column_items[] = id(new PhabricatorActionView()) | ->setUser($viewer); | ||||
->setType(PhabricatorActionView::TYPE_DIVIDER); | foreach ($column_items as $item) { | ||||
$column_menu->addAction($item); | |||||
} | |||||
$column_button = id(new PHUIIconView()) | |||||
->setIcon('fa-pencil') | |||||
->setHref('#') | |||||
->addSigil('boards-dropdown-menu') | |||||
->setMetadata( | |||||
array( | |||||
'items' => hsprintf('%s', $column_menu), | |||||
)); | |||||
return $column_button; | |||||
} | |||||
private function buildTriggerMenu(PhabricatorProjectColumn $column) { | |||||
$viewer = $this->getViewer(); | |||||
$trigger = $column->getTrigger(); | $trigger = $column->getTrigger(); | ||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
$viewer, | |||||
$column, | |||||
PhabricatorPolicyCapability::CAN_EDIT); | |||||
$trigger_items = array(); | |||||
if (!$trigger) { | if (!$trigger) { | ||||
$set_uri = $this->getApplicationURI( | $set_uri = $this->getApplicationURI( | ||||
new PhutilURI( | new PhutilURI( | ||||
'trigger/edit/', | 'trigger/edit/', | ||||
array( | array( | ||||
'columnPHID' => $column->getPHID(), | 'columnPHID' => $column->getPHID(), | ||||
))); | ))); | ||||
$column_items[] = id(new PhabricatorActionView()) | $trigger_items[] = id(new PhabricatorActionView()) | ||||
->setIcon('fa-cogs') | ->setIcon('fa-cogs') | ||||
->setName(pht('New Trigger...')) | ->setName(pht('New Trigger...')) | ||||
->setHref($set_uri) | ->setHref($set_uri) | ||||
->setDisabled(!$can_edit); | ->setDisabled(!$can_edit); | ||||
} else { | } else { | ||||
$column_items[] = id(new PhabricatorActionView()) | $trigger_items[] = id(new PhabricatorActionView()) | ||||
->setIcon('fa-cogs') | ->setIcon('fa-cogs') | ||||
->setName(pht('View Trigger')) | ->setName(pht('View Trigger')) | ||||
->setHref($trigger->getURI()) | ->setHref($trigger->getURI()) | ||||
->setDisabled(!$can_edit); | ->setDisabled(!$can_edit); | ||||
} | } | ||||
$column_items[] = id(new PhabricatorActionView()) | $remove_uri = $this->getApplicationURI( | ||||
new PhutilURI( | |||||
urisprintf( | |||||
'column/remove/%d/', | |||||
$column->getID()))); | |||||
$trigger_items[] = id(new PhabricatorActionView()) | |||||
->setIcon('fa-times') | ->setIcon('fa-times') | ||||
->setName(pht('Remove Trigger')) | ->setName(pht('Remove Trigger')) | ||||
->setHref('#') | ->setHref($remove_uri) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setDisabled(!$can_edit || !$trigger); | ->setDisabled(!$can_edit || !$trigger); | ||||
} | |||||
$column_menu = id(new PhabricatorActionListView()) | $trigger_menu = id(new PhabricatorActionListView()) | ||||
->setUser($viewer); | ->setUser($viewer); | ||||
foreach ($column_items as $item) { | foreach ($trigger_items as $item) { | ||||
$column_menu->addAction($item); | $trigger_menu->addAction($item); | ||||
} | } | ||||
$column_button = id(new PHUIIconView()) | if ($trigger) { | ||||
->setIcon('fa-caret-down') | $trigger_icon = 'fa-cogs'; | ||||
} else { | |||||
$trigger_icon = 'fa-cogs grey'; | |||||
} | |||||
if ($trigger) { | |||||
$trigger_tip = array( | |||||
pht('%s: %s', $trigger->getObjectName(), $trigger->getDisplayName()), | |||||
$trigger->getRulesDescription(), | |||||
); | |||||
$trigger_tip = implode("\n", $trigger_tip); | |||||
} else { | |||||
$trigger_tip = pht('No column trigger.'); | |||||
} | |||||
$trigger_button = id(new PHUIIconView()) | |||||
->setIcon($trigger_icon) | |||||
->setHref('#') | ->setHref('#') | ||||
->addSigil('boards-dropdown-menu') | ->addSigil('boards-dropdown-menu') | ||||
->addSigil('has-tooltip') | |||||
->setMetadata( | ->setMetadata( | ||||
array( | array( | ||||
'items' => hsprintf('%s', $column_menu), | 'items' => hsprintf('%s', $trigger_menu), | ||||
'tip' => $trigger_tip, | |||||
)); | )); | ||||
return $column_button; | return $trigger_button; | ||||
} | } | ||||
/** | /** | ||||
* Add current state parameters (like order and the visibility of hidden | * Add current state parameters (like order and the visibility of hidden | ||||
* columns) to a URI. | * columns) to a URI. | ||||
* | * | ||||
* This allows actions which toggle or adjust one piece of state to keep | * This allows actions which toggle or adjust one piece of state to keep | ||||
* the rest of the board state persistent. If no URI is provided, this method | * the rest of the board state persistent. If no URI is provided, this method | ||||
* starts with the request URI. | * starts with the request URI. | ||||
* | * | ||||
▲ Show 20 Lines • Show All 208 Lines • Show Last 20 Lines |