X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/dec0cbb1b25d139c504923a15b4ce884562c7404..refs/pull/73/head:/app/Http/Controllers/SettingController.php diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php index 5193a9d3b..47f59efbb 100644 --- a/app/Http/Controllers/SettingController.php +++ b/app/Http/Controllers/SettingController.php @@ -1,11 +1,11 @@ checkPermission('settings-update'); + $this->setPageTitle('Settings'); return view('settings/index'); } - /** * Update the specified settings in storage. * @@ -31,15 +31,68 @@ class SettingController extends Controller */ public function update(Request $request) { + $this->preventAccessForDemoUsers(); $this->checkPermission('settings-update'); + // Cycles through posted settings and update them foreach($request->all() as $name => $value) { if(strpos($name, 'setting-') !== 0) continue; $key = str_replace('setting-', '', trim($name)); + if($key == 'app-color') { + Setting::put('app-color-rgba', $this->hex2rgba($value, 0.15)); + } Setting::put($key, $value); } + session()->flash('success', 'Settings Saved'); return redirect('/settings'); } + /** + * Adapted from http://mekshq.com/how-to-convert-hexadecimal-color-code-to-rgb-or-rgba-using-php/ + * Converts a hex color code in to an RGBA string. + * + * @param string $color + * @param float|boolean $opacity + * @return boolean|string + */ + protected function hex2rgba($color, $opacity = false) + { + // Return false if no color provided + if(empty($color)) { + return false; + } + // Trim any whitespace + $color = trim($color); + + // Sanitize $color if "#" is provided + if($color[0] == '#' ) { + $color = substr($color, 1); + } + + // Check if color has 6 or 3 characters and get values + if(strlen($color) == 6) { + $hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] ); + } elseif( strlen( $color ) == 3 ) { + $hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] ); + } else { + return false; + } + + // Convert hexadec to rgb + $rgb = array_map('hexdec', $hex); + + // Check if opacity is set(rgba or rgb) + if($opacity) { + if(abs($opacity) > 1) + $opacity = 1.0; + $output = 'rgba('.implode(",",$rgb).','.$opacity.')'; + } else { + $output = 'rgb('.implode(",",$rgb).')'; + } + + // Return rgb(a) color string + return $output; + } + }