Path: blob/master/src/applications/files/controller/PhabricatorFileComposeController.php
12242 views
<?php12final class PhabricatorFileComposeController3extends PhabricatorFileController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();78$color_map = PhabricatorFilesComposeIconBuiltinFile::getAllColors();9$icon_map = $this->getIconMap();1011if ($request->isFormPost()) {12$project_phid = $request->getStr('projectPHID');13if ($project_phid) {14$project = id(new PhabricatorProjectQuery())15->setViewer($viewer)16->withPHIDs(array($project_phid))17->requireCapabilities(18array(19PhabricatorPolicyCapability::CAN_VIEW,20PhabricatorPolicyCapability::CAN_EDIT,21))22->executeOne();23if (!$project) {24return new Aphront404Response();25}26}2728$icon = $request->getStr('icon');29$color = $request->getStr('color');3031$composer = id(new PhabricatorFilesComposeIconBuiltinFile())32->setIcon($icon)33->setColor($color);3435$data = $composer->loadBuiltinFileData();3637$file = PhabricatorFile::newFromFileData(38$data,39array(40'name' => $composer->getBuiltinDisplayName(),41'profile' => true,42'canCDN' => true,43));4445if ($project_phid) {46$edit_uri = '/project/manage/'.$project->getID().'/';4748$xactions = array();49$xactions[] = id(new PhabricatorProjectTransaction())50->setTransactionType(51PhabricatorProjectImageTransaction::TRANSACTIONTYPE)52->setNewValue($file->getPHID());5354$editor = id(new PhabricatorProjectTransactionEditor())55->setActor($viewer)56->setContentSourceFromRequest($request)57->setContinueOnMissingFields(true)58->setContinueOnNoEffect(true);5960$editor->applyTransactions($project, $xactions);6162return id(new AphrontRedirectResponse())->setURI($edit_uri);63} else {64$content = array(65'phid' => $file->getPHID(),66);6768return id(new AphrontAjaxResponse())->setContent($content);69}70}7172$value_color = head_key($color_map);73$value_icon = head_key($icon_map);7475require_celerity_resource('people-profile-css');7677$buttons = array();78foreach ($color_map as $color => $info) {79$quip = idx($info, 'quip');8081$buttons[] = javelin_tag(82'button',83array(84'class' => 'button-grey profile-image-button',85'sigil' => 'has-tooltip compose-select-color',86'style' => 'margin: 0 8px 8px 0',87'meta' => array(88'color' => $color,89'tip' => $quip,90),91),92id(new PHUIIconView())93->addClass('compose-background-'.$color));94}959697$icons = array();98foreach ($icon_map as $icon => $spec) {99$quip = idx($spec, 'quip');100101$icons[] = javelin_tag(102'button',103array(104'class' => 'button-grey profile-image-button',105'sigil' => 'has-tooltip compose-select-icon',106'style' => 'margin: 0 8px 8px 0',107'meta' => array(108'icon' => $icon,109'tip' => $quip,110),111),112id(new PHUIIconView())113->setIcon($icon)114->addClass('compose-icon-bg'));115}116117$dialog_id = celerity_generate_unique_node_id();118$color_input_id = celerity_generate_unique_node_id();119$icon_input_id = celerity_generate_unique_node_id();120$preview_id = celerity_generate_unique_node_id();121122$preview = id(new PHUIIconView())123->setID($preview_id)124->addClass('compose-background-'.$value_color)125->setIcon($value_icon)126->addClass('compose-icon-bg');127128$color_input = javelin_tag(129'input',130array(131'type' => 'hidden',132'name' => 'color',133'value' => $value_color,134'id' => $color_input_id,135));136137$icon_input = javelin_tag(138'input',139array(140'type' => 'hidden',141'name' => 'icon',142'value' => $value_icon,143'id' => $icon_input_id,144));145146Javelin::initBehavior('phabricator-tooltips');147Javelin::initBehavior(148'icon-composer',149array(150'dialogID' => $dialog_id,151'colorInputID' => $color_input_id,152'iconInputID' => $icon_input_id,153'previewID' => $preview_id,154'defaultColor' => $value_color,155'defaultIcon' => $value_icon,156));157158return $this->newDialog()159->setFormID($dialog_id)160->setClass('compose-dialog')161->setTitle(pht('Compose Image'))162->appendChild(163phutil_tag(164'div',165array(166'class' => 'compose-header',167),168pht('Choose Background Color')))169->appendChild($buttons)170->appendChild(171phutil_tag(172'div',173array(174'class' => 'compose-header',175),176pht('Choose Icon')))177->appendChild($icons)178->appendChild(179phutil_tag(180'div',181array(182'class' => 'compose-header',183),184pht('Preview')))185->appendChild($preview)186->appendChild($color_input)187->appendChild($icon_input)188->addCancelButton('/')189->addSubmitButton(pht('Save Image'));190}191192private function getIconMap() {193$icon_map = PhabricatorFilesComposeIconBuiltinFile::getAllIcons();194195$first = array(196'fa-briefcase',197'fa-tags',198'fa-folder',199'fa-group',200'fa-bug',201'fa-trash-o',202'fa-calendar',203'fa-flag-checkered',204'fa-envelope',205'fa-truck',206'fa-lock',207'fa-umbrella',208'fa-cloud',209'fa-building',210'fa-credit-card',211'fa-flask',212);213214$icon_map = array_select_keys($icon_map, $first) + $icon_map;215216return $icon_map;217}218219}220221222