private function buildPropertyView(PhabricatorProject $board)
 {
     $viewer = $this->getRequest()->getUser();
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->setObject($board);
     $background = $board->getDisplayWorkboardBackgroundColor();
     if ($background !== null) {
         $map = PhabricatorProjectWorkboardBackgroundColor::getOptions();
         $map = ipull($map, 'name');
         $name = idx($map, $background, $background);
         $properties->addProperty(pht('Background Color'), $name);
     }
     return $properties;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getUser();
     $board_id = $request->getURIData('projectID');
     $board = id(new PhabricatorProjectQuery())->setViewer($viewer)->withIDs(array($board_id))->needImages(true)->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
     if (!$board) {
         return new Aphront404Response();
     }
     if (!$board->getHasWorkboard()) {
         return new Aphront404Response();
     }
     $this->setProject($board);
     $id = $board->getID();
     $manage_uri = $this->getApplicationURI("board/{$id}/manage/");
     if ($request->isFormPost()) {
         $background_key = $request->getStr('backgroundKey');
         $xactions = array();
         $xactions[] = id(new PhabricatorProjectTransaction())->setTransactionType(PhabricatorProjectTransaction::TYPE_BACKGROUND)->setNewValue($background_key);
         id(new PhabricatorProjectTransactionEditor())->setActor($viewer)->setContentSourceFromRequest($request)->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($board, $xactions);
         return id(new AphrontRedirectResponse())->setURI($manage_uri);
     }
     $nav = $this->getProfileMenu();
     $crumbs = id($this->buildApplicationCrumbs())->addTextCrumb(pht('Workboard'), "/project/board/{$board_id}/")->addTextCrumb(pht('Manage'), $manage_uri)->addTextCrumb(pht('Background Color'));
     $form = id(new AphrontFormView())->setUser($viewer);
     $group_info = array('basic' => array('label' => pht('Basics')), 'solid' => array('label' => pht('Solid Colors')), 'gradient' => array('label' => pht('Gradients')));
     $groups = array();
     $options = PhabricatorProjectWorkboardBackgroundColor::getOptions();
     $option_groups = igroup($options, 'group');
     require_celerity_resource('people-profile-css');
     require_celerity_resource('phui-workboard-color-css');
     Javelin::initBehavior('phabricator-tooltips', array());
     foreach ($group_info as $group_key => $spec) {
         $buttons = array();
         $available_options = idx($option_groups, $group_key, array());
         foreach ($available_options as $option) {
             $buttons[] = $this->renderOptionButton($option);
         }
         $form->appendControl(id(new AphrontFormMarkupControl())->setLabel($spec['label'])->setValue($buttons));
     }
     // NOTE: Each button is its own form, so we can't wrap them in a normal
     // form.
     $layout_view = $form->buildLayoutView();
     $form_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Edit Background Color'))->appendChild($layout_view);
     return $this->newPage()->setTitle(array(pht('Edit Background Color'), $board->getDisplayName()))->setCrumbs($crumbs)->setNavigation($nav)->appendChild($form_box);
 }