123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /**
- * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
- *
- * @author Julius Haertl <jus@bitgrid.net>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- namespace OCA\Theming;
- use OCP\App\AppPathNotFoundException;
- use OCP\App\IAppManager;
- use OCP\IConfig;
- use OCP\Files\IRootFolder;
- class Util {
- /** @var IConfig */
- private $config;
- /** @var IRootFolder */
- private $rootFolder;
- /** @var IAppManager */
- private $appManager;
- /**
- * Util constructor.
- *
- * @param IConfig $config
- * @param IRootFolder $rootFolder
- * @param IAppManager $appManager
- */
- public function __construct(IConfig $config, IRootFolder $rootFolder, IAppManager $appManager) {
- $this->config = $config;
- $this->rootFolder = $rootFolder;
- $this->appManager = $appManager;
- }
- /**
- * @param string $color rgb color value
- * @return bool
- */
- public function invertTextColor($color) {
- $l = $this->calculateLuminance($color);
- if($l>0.5) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * get color for on-page elements:
- * theme color by default, grey if theme color is to bright
- * @param $color
- * @return string
- */
- public function elementColor($color) {
- $l = $this->calculateLuminance($color);
- if($l>0.8) {
- return '#555555';
- } else {
- return $color;
- }
- }
- /**
- * @param string $color rgb color value
- * @return float
- */
- public function calculateLuminance($color) {
- $hex = preg_replace("/[^0-9A-Fa-f]/", '', $color);
- if (strlen($hex) === 3) {
- $hex = $hex{0} . $hex{0} . $hex{1} . $hex{1} . $hex{2} . $hex{2};
- }
- if (strlen($hex) !== 6) {
- return 0;
- }
- $r = hexdec(substr($hex, 0, 2));
- $g = hexdec(substr($hex, 2, 2));
- $b = hexdec(substr($hex, 4, 2));
- return (0.299 * $r + 0.587 * $g + 0.114 * $b)/255;
- }
- /**
- * @param $color
- * @return string base64 encoded radio button svg
- */
- public function generateRadioButton($color) {
- $radioButtonIcon = '<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">' .
- '<path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="'.$color.'"/></svg>';
- return base64_encode($radioButtonIcon);
- }
- /**
- * @param $app string app name
- * @return string path to app icon / logo
- */
- public function getAppIcon($app) {
- $app = str_replace(array('\0', '/', '\\', '..'), '', $app);
- try {
- $appPath = $this->appManager->getAppPath($app);
- $icon = $appPath . '/img/' . $app . '.svg';
- if (file_exists($icon)) {
- return $icon;
- }
- $icon = $appPath . '/img/app.svg';
- if (file_exists($icon)) {
- return $icon;
- }
- } catch (AppPathNotFoundException $e) {}
- if($this->config->getAppValue('theming', 'logoMime', '') !== '' && $this->rootFolder->nodeExists('/themedinstancelogo')) {
- return $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/themedinstancelogo';
- }
- return \OC::$SERVERROOT . '/core/img/logo.svg';
- }
- /**
- * @param $app string app name
- * @param $image string relative path to image in app folder
- * @return string|false absolute path to image
- */
- public function getAppImage($app, $image) {
- $app = str_replace(array('\0', '/', '\\', '..'), '', $app);
- $image = str_replace(array('\0', '\\', '..'), '', $image);
- if ($app === "core") {
- $icon = \OC::$SERVERROOT . '/core/img/' . $image;
- if (file_exists($icon)) {
- return $icon;
- }
- }
- try {
- $appPath = $this->appManager->getAppPath($app);
- } catch (AppPathNotFoundException $e) {
- return false;
- }
- $icon = $appPath . '/img/' . $image;
- if (file_exists($icon)) {
- return $icon;
- }
- $icon = $appPath . '/img/' . $image . '.svg';
- if (file_exists($icon)) {
- return $icon;
- }
- $icon = $appPath . '/img/' . $image . '.png';
- if (file_exists($icon)) {
- return $icon;
- }
- $icon = $appPath . '/img/' . $image . '.gif';
- if (file_exists($icon)) {
- return $icon;
- }
- $icon = $appPath . '/img/' . $image . '.jpg';
- if (file_exists($icon)) {
- return $icon;
- }
- return false;
- }
- /**
- * replace default color with a custom one
- *
- * @param $svg string content of a svg file
- * @param $color string color to match
- * @return string
- */
- public function colorizeSvg($svg, $color) {
- $svg = preg_replace('/#0082c9/i', $color, $svg);
- return $svg;
- }
- }
|