Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
4.6 kB · 172 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173<?php
final class PhabricatorProjectBoardBackgroundController extends PhabricatorProjectBoardController {
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();
$view_uri = $this->getApplicationURI("board/{$id}/"); $manage_uri = $this->getApplicationURI("board/{$id}/manage/");
if ($request->isFormPost()) { $background_key = $request->getStr('backgroundKey');
$xactions = array();
$xactions[] = id(new PhabricatorProjectTransaction()) ->setTransactionType( PhabricatorProjectWorkboardBackgroundTransaction::TRANSACTIONTYPE) ->setNewValue($background_key);
id(new PhabricatorProjectTransactionEditor()) ->setActor($viewer) ->setContentSourceFromRequest($request) ->setContinueOnNoEffect(true) ->setContinueOnMissingFields(true) ->applyTransactions($board, $xactions);
return id(new AphrontRedirectResponse()) ->setURI($view_uri); }
$nav = $this->newNavigation( $board, PhabricatorProject::ITEM_WORKBOARD);
$crumbs = id($this->buildApplicationCrumbs()) ->addTextCrumb(pht('Workboard'), $board->getWorkboardURI()) ->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); }
private function renderOptionButton(array $option) { $viewer = $this->getViewer();
$icon = idx($option, 'icon'); if ($icon) { $preview_class = null; $preview_content = id(new PHUIIconView()) ->setIcon($icon, 'lightbluetext'); } else { $preview_class = 'phui-workboard-'.$option['key']; $preview_content = null; }
$preview = phutil_tag( 'div', array( 'class' => 'phui-workboard-color-preview '.$preview_class, ), $preview_content);
$button = javelin_tag( 'button', array( 'class' => 'button-grey profile-image-button', 'sigil' => 'has-tooltip', 'meta' => array( 'tip' => $option['name'], 'size' => 300, ), ), $preview);
$input = phutil_tag( 'input', array( 'type' => 'hidden', 'name' => 'backgroundKey', 'value' => $option['key'], ));
return phabricator_form( $viewer, array( 'class' => 'profile-image-form', 'method' => 'POST', ), array( $button, $input, )); }
}