Path: blob/master/src/applications/files/builtin/PhabricatorFilesComposeIconBuiltinFile.php
12242 views
<?php12final class PhabricatorFilesComposeIconBuiltinFile3extends PhabricatorFilesBuiltinFile {45private $icon;6private $color;78public function setIcon($icon) {9$this->icon = $icon;10return $this;11}1213public function getIcon() {14return $this->icon;15}1617public function setColor($color) {18$this->color = $color;19return $this;20}2122public function getColor() {23return $this->color;24}2526public function getBuiltinFileKey() {27$icon = $this->getIcon();28$color = $this->getColor();29$desc = "compose(icon={$icon}, color={$color})";30$hash = PhabricatorHash::digestToLength($desc, 40);31return "builtin:{$hash}";32}3334public function getBuiltinDisplayName() {35$icon = $this->getIcon();36$color = $this->getColor();37return "{$icon}-{$color}.png";38}3940public function loadBuiltinFileData() {41return $this->composeImage($this->getColor(), $this->getIcon());42}4344public static function getAllIcons() {45$root = dirname(phutil_get_library_root('phabricator'));46$root = $root.'/resources/builtin/projects/';4748$quips = self::getIconQuips();4950$map = array();51$list = Filesystem::listDirectory($root, $include_hidden = false);52foreach ($list as $file) {53$short = preg_replace('/\.png$/', '', $file);5455$map[$short] = array(56'path' => $root.$file,57'quip' => idx($quips, $short, $short),58);59}6061return $map;62}6364public static function getAllColors() {65$colors = id(new CelerityResourceTransformer())66->getCSSVariableMap();6768$colors = array_select_keys(69$colors,70array(71'red',72'orange',73'yellow',74'green',75'blue',76'sky',77'indigo',78'violet',79'pink',80'charcoal',81'backdrop',82));8384$quips = self::getColorQuips();8586$map = array();87foreach ($colors as $name => $color) {88$map[$name] = array(89'color' => $color,90'quip' => idx($quips, $name, $name),91);92}9394return $map;95}9697private function composeImage($color, $icon) {98$color_map = self::getAllColors();99$color = idx($color_map, $color);100if (!$color) {101$fallback = 'backdrop';102$color = idx($color_map, $fallback);103if (!$color) {104throw new Exception(105pht(106'Fallback compose color ("%s") does not exist!',107$fallback));108}109}110111$color_hex = idx($color, 'color');112$color_const = hexdec(trim($color_hex, '#'));113114$icon_map = self::getAllIcons();115$icon = idx($icon_map, $icon);116if (!$icon) {117$fallback = 'fa-umbrella';118$icon = idx($icon_map, $fallback);119if (!$icon) {120throw new Exception(121pht(122'Fallback compose icon ("%s") does not exist!',123$fallback));124}125}126127$path = idx($icon, 'path');128$data = Filesystem::readFile($path);129130$icon_img = imagecreatefromstring($data);131132$canvas = imagecreatetruecolor(200, 200);133imagefill($canvas, 0, 0, $color_const);134imagecopy($canvas, $icon_img, 0, 0, 0, 0, 200, 200);135136return PhabricatorImageTransformer::saveImageDataInAnyFormat(137$canvas,138'image/png');139}140141private static function getIconQuips() {142return array(143'fa-android' => pht('Friendly Robot'),144'fa-apple' => pht('Friendly Fruit'),145'fa-beer' => pht('Liquid Carbs'),146'fa-bomb' => pht('Boom!'),147'fa-book' => pht('Read Me'),148'fa-briefcase' => pht('Briefcase'),149'fa-bug' => pht('Bug'),150'fa-building' => pht('Company'),151'fa-calendar' => pht('Deadline'),152'fa-camera-retro' => pht('Leica Enthusiast'),153'fa-chrome' => pht('Shiny'),154'fa-cloud' => pht('The Cloud'),155'fa-coffee' => pht('Go Juice'),156'fa-comments' => pht('Cartoon Captions'),157'fa-credit-card' => pht('Accounting'),158'fa-database' => pht('Stack of Pancakes'),159'fa-desktop' => pht('Cardboard Box'),160'fa-diamond' => pht('Isometric-Hexoctahedral'),161'fa-empire' => pht('Bad Guys'),162'fa-envelope' => pht('Communication'),163'fa-facebook' => pht('College Site'),164'fa-fax' => pht('Communication Device'),165'fa-film' => pht('Physical Film'),166'fa-firefox' => pht('Blake Ross'),167'fa-flag-checkered' => pht('Goal'),168'fa-flask' => pht('Experimental'),169'fa-folder' => pht('Folder'),170'fa-gamepad' => pht('Half-Life 3 Confirmed'),171'fa-gears' => pht('Mechanical'),172'fa-google' => pht('Car Company'),173'fa-hand-peace-o' => pht('Peace'),174'fa-hashtag' => pht('Not Slack'),175'fa-heart' => pht('Myocardial Infarction'),176'fa-internet-explorer' => pht('Now Just Edge'),177'fa-key' => pht('Primitive Security'),178'fa-legal' => pht('Hired Protection'),179'fa-linux' => pht('M\'Lady'),180'fa-lock' => pht('Policy'),181'fa-map-marker' => pht('Destination Beacon'),182'fa-microphone' => pht('Podcasting'),183'fa-mobile' => pht('Tiny Pocket Cat Meme Machine'),184'fa-money' => pht('1 of 99 Problems'),185'fa-phone' => pht('Grandma Uses This'),186'fa-pie-chart' => pht('Not Actually Edible'),187'fa-rebel' => pht('Good Guys'),188'fa-reddit-alien' => pht('Updoot In 5 Seconds'),189'fa-safari' => pht('Fruit Exploration'),190'fa-search' => pht('Dust Detector'),191'fa-server' => pht('Heating Units'),192'fa-shopping-cart' => pht('Buy Stuff'),193'fa-sitemap' => pht('Sitemap'),194'fa-star' => pht('The More You Know'),195'fa-tablet' => pht('Cellular Telephone For Giants'),196'fa-tag' => pht('You\'re It'),197'fa-tags' => pht('Tags'),198'fa-trash-o' => pht('Garbage'),199'fa-truck' => pht('Release'),200'fa-twitter' => pht('Bird Stencil'),201'fa-umbrella' => pht('An Umbrella'),202'fa-university' => pht('School'),203'fa-user-secret' => pht('Shhh'),204'fa-user' => pht('Individual'),205'fa-users' => pht('Team'),206'fa-warning' => pht('No Caution Required, Everything Looks Safe'),207'fa-wheelchair' => pht('Accessibility'),208'fa-windows' => pht('Windows'),209);210}211212private static function getColorQuips() {213return array(214'red' => pht('Verbillion'),215'orange' => pht('Navel Orange'),216'yellow' => pht('Prim Goldenrod'),217'green' => pht('Lustrous Verdant'),218'blue' => pht('Tropical Deep'),219'sky' => pht('Wide Open Sky'),220'indigo' => pht('Pleated Khaki'),221'violet' => pht('Aged Merlot'),222'pink' => pht('Easter Bunny'),223'charcoal' => pht('Gemstone'),224'backdrop' => pht('Driven Snow'),225);226}227228}229230231