diff --git a/lib/db/session.php b/lib/db/session.php index 7133774e..2717a601 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -64,7 +64,7 @@ class Db_Session extends \OCA\Documents\Db { ->getData() ; - $memberColor = Helper::getRandomColor(); + $memberColor = Helper::getMemberColor($uid); $member = new Db_Member(array( $session['es_id'], diff --git a/lib/helper.php b/lib/helper.php index f04b7867..2bd9cd6e 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -1,4 +1,5 @@ file_exists($path)){ $fileNum += 1; - $path = preg_replace('/(\.odt|' . $prepend . '\(\d+\)\.odt)$/', $prepend . '(' .$fileNum . ').odt', $path); + $path = preg_replace('/(\.odt|' . $prepend . '\(\d+\)\.odt)$/', $prepend . '(' . $fileNum . ').odt', $path); }; - + return $path; } - + public static function isVersionsEnabled(){ return \OCP\App::isEnabled('files_versions'); } - + public static function getRandomColor(){ $str = dechex(floor(rand(0, 16777215))); return '#' . str_pad($str, 6, "0", STR_PAD_LEFT); } - - public static function debugLog($message){ + + public static function getMemberColor($name){ + $hash = md5($name); + $maxRange = hexdec('ffffffffffffffffffffffffffffffff'); + $hue = hexdec($hash) / $maxRange * 256; + return '#' . self::convertHSLToRGB($hue, 90, 60); + } + + public static function debugLog($message){ self::log($message, \OCP\Util::DEBUG); } - public static function warnLog($message){ + public static function warnLog($message){ self::log($message, \OCP\Util::WARN); } - public static function errorLog($message){ + public static function errorLog($message){ self::log($message, \OCP\Util::ERROR); } - + public static function log($message, $level){ \OCP\Util::writeLog(self::APP_ID, $message, $level); } -} \ No newline at end of file + + protected static function convertHSLToRGB($iH, $iS, $iV){ + if ($iH < 0){ + $iH = 0; // Hue: + } + if ($iH > 360){ + $iH = 360; // 0-360 + } + if ($iS < 0){ + $iS = 0; // Saturation: + } + if ($iS > 100){ + $iS = 100; // 0-100 + } + if ($iV < 0){ + $iV = 0; // Lightness: + } + if ($iV > 100){ + $iV = 100; // 0-100 + } + + $dS = $iS / 100.0; // Saturation: 0.0-1.0 + $dV = $iV / 100.0; // Lightness: 0.0-1.0 + $dC = $dV * $dS; // Chroma: 0.0-1.0 + $dH = $iH / 60.0; // H-Prime: 0.0-6.0 + $dT = $dH; // Temp variable + + while ($dT >= 2.0) + $dT -= 2.0; // php modulus does not work with float + $dX = $dC * (1 - abs($dT - 1)); // as used in the Wikipedia link + + switch ($dH){ + case($dH >= 0.0 && $dH < 1.0): + $dR = $dC; + $dG = $dX; + $dB = 0.0; + break; + case($dH >= 1.0 && $dH < 2.0): + $dR = $dX; + $dG = $dC; + $dB = 0.0; + break; + case($dH >= 2.0 && $dH < 3.0): + $dR = 0.0; + $dG = $dC; + $dB = $dX; + break; + case($dH >= 3.0 && $dH < 4.0): + $dR = 0.0; + $dG = $dX; + $dB = $dC; + break; + case($dH >= 4.0 && $dH < 5.0): + $dR = $dX; + $dG = 0.0; + $dB = $dC; + break; + case($dH >= 5.0 && $dH < 6.0): + $dR = $dC; + $dG = 0.0; + $dB = $dX; + break; + default: + $dR = 0.0; + $dG = 0.0; + $dB = 0.0; + break; + } + + $dM = $dV - $dC; + $dR += $dM; + $dG += $dM; + $dB += $dM; + $dR *= 255; + $dG *= 255; + $dB *= 255; + + $dR = str_pad(dechex(round($dR)), 2, "0", STR_PAD_LEFT); + $dG = str_pad(dechex(round($dG)), 2, "0", STR_PAD_LEFT); + $dB = str_pad(dechex(round($dB)), 2, "0", STR_PAD_LEFT); + return $dR.$dG.$dB; + } + +}