Separate all of the settings into their own pages.

This commit is contained in:
James Brooks
2014-12-31 10:38:59 +00:00
parent 5fbbb1efde
commit 89ec124092
14 changed files with 302 additions and 100 deletions
+8 -8
View File
@@ -138,14 +138,14 @@ body.dashboard {
} }
} }
} }
}
.content-panel { + .content-panel {
top: 0; top: 0;
position: relative; position: relative;
width: 78%; width: 78%;
margin-left: 22%; margin-left: 22%;
padding: 24px 50px; padding: 24px 50px;
padding-bottom: 80px; padding-bottom: 80px;
}
} }
} }
+98 -11
View File
@@ -2,15 +2,98 @@
class DashSettingsController extends Controller class DashSettingsController extends Controller
{ {
protected $subMenu = [];
protected $subTitle = 'Settings';
public function __construct() {
$this->subMenu = [
'setup' => [
'title' => 'Application Setup',
'url' => '/dashboard/settings/setup',
'icon' => 'ion-gear-b',
'active' => false,
],
'security' => [
'title' => 'Security',
'url' => '/dashboard/settings/security',
'icon' => 'ion-lock-combination',
'active' => false,
],
'theme' => [
'title' => 'Theme',
'url' => '/dashboard/settings/theme',
'icon' => 'ion-paintbrush',
'active' => false,
],
'stylesheet' => [
'title' => 'Stylesheet',
'url' => '/dashboard/settings/stylesheet',
'icon' => 'ion-paintbucket',
'active' => false,
]
];
View::share('subTitle', $this->subTitle);
View::share('subMenu', $this->subMenu);
}
/** /**
* Shows the settings view. * Shows the settings setup view.
* *
* @return \Illuminate\View\View * @return \Illuminate\View\View
*/ */
public function showSettings() public function showSetupView()
{ {
return View::make('dashboard.settings')->with([ $this->subMenu['setup']['active'] = true;
'pageTitle' => 'Settings - Dashboard',
return View::make('dashboard.settings-app-setup')->with([
'pageTitle' => 'Application Setup - Dashboard',
'subMenu' => $this->subMenu
]);
}
/**
* Shows the settings theme view.
*
* @return \Illuminate\View\View
*/
public function showThemeView()
{
$this->subMenu['theme']['active'] = true;
return View::make('dashboard.settings-theme')->with([
'pageTitle' => 'Theme - Dashboard',
'subMenu' => $this->subMenu
]);
}
/**
* Shows the settings security view.
*
* @return \Illuminate\View\View
*/
public function showSecurityView()
{
$this->subMenu['security']['active'] = true;
return View::make('dashboard.settings-security')->with([
'pageTitle' => 'Security - Dashboard',
'subMenu' => $this->subMenu
]);
}
/**
* Shows the settings stylesheet view.
*
* @return \Illuminate\View\View
*/
public function showStylesheetView()
{
$this->subMenu['stylesheet']['active'] = true;
return View::make('dashboard.settings-stylesheet')->with([
'pageTitle' => 'Stylesheet - Dashboard',
'subMenu' => $this->subMenu
]); ]);
} }
@@ -24,14 +107,18 @@ class DashSettingsController extends Controller
// Fetch all of the settings we've been POSTed. // Fetch all of the settings we've been POSTed.
$settings = Input::all(); $settings = Input::all();
foreach ($settings as $settingName => $settingValue) { try {
$setting = Setting::firstOrCreate([ foreach ($settings as $settingName => $settingValue) {
'name' => $settingName, $setting = Setting::firstOrCreate([
])->update([ 'name' => $settingName,
'value' => $settingValue, ])->update([
]); 'value' => $settingValue,
]);
}
} catch (Exception $e) {
return Redirect::back()->withSaved(false);
} }
return Redirect::back(); return Redirect::back()->withSaved(true);
} }
} }
+2
View File
@@ -51,6 +51,8 @@ return [
'user' => 'User', 'user' => 'User',
'help' => 'Help', 'help' => 'Help',
'logged_incidents' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.', 'logged_incidents' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.',
'settings_saved' => 'Settings saved.',
'settings_not_saved' => 'Settings could not be saved.',
], ],
// Forms // Forms
'forms' => [ 'forms' => [
+4 -1
View File
@@ -27,7 +27,10 @@ Route::group(['before' => 'auth', 'prefix' => 'dashboard'], function () {
Route::get('notifications', ['as' => 'dashboard.notifications', 'uses' => 'DashboardController@showNotifications']); Route::get('notifications', ['as' => 'dashboard.notifications', 'uses' => 'DashboardController@showNotifications']);
// Settings // Settings
Route::get('settings', ['as' => 'dashboard.settings', 'uses' => 'DashSettingsController@showSettings']); Route::get('settings/setup', ['as' => 'dashboard.settings.setup', 'uses' => 'DashSettingsController@showSetupView']);
Route::get('settings/security', ['as' => 'dashboard.settings.security', 'uses' => 'DashSettingsController@showSecurityView']);
Route::get('settings/theme', ['as' => 'dashboard.settings.theme', 'uses' => 'DashSettingsController@showThemeView']);
Route::get('settings/stylesheet', ['as' => 'dashboard.settings.stylesheet', 'uses' => 'DashSettingsController@showStylesheetView']);
Route::post('settings', 'DashSettingsController@postSettings'); Route::post('settings', 'DashSettingsController@postSettings');
// User Settings // User Settings
@@ -0,0 +1,56 @@
@extends('layout.dashboard')
@section('content')
@if(isset($subMenu))
@include('partials.dashboard.sub-sidebar')
@endif
<div class='content-panel'>
<div class="header">
<span class="uppercase">
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
</span>
</div>
<div class="content-wrapper">
<div class="row">
<div class="col-sm-12">
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
<h4 class="sub-header" id='application-setup'>Application Setup</h4>
@if($saved = Session::get('saved'))
<div class='alert alert-success'><strong>{{ Lang::get('cachet.dashboard.settings_saved') }}</strong></div>
@elseif(Session::has('saved'))
<div class='alert alert-danger'><strong>{{ Lang::get('cachet.dashboard.settings_not_saved') }}</strong></div>
@endif
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Site Name</label>
<input type='text' class='form-control' name='app_name' value='{{ Setting::get("app_name") }}' required />
</div>
</div>
</div>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Site URL</label>
<input type='text' class='form-control' name='app_domain' value='{{ Setting::get("app_domain") }}' required />
</div>
</div>
</div>
</fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<button type="submit" class="btn btn-success">Save settings</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@@ -0,0 +1,51 @@
@extends('layout.dashboard')
@section('content')
@if(isset($subMenu))
@include('partials.dashboard.sub-sidebar')
@endif
<div class='content-panel'>
<div class="header">
<span class="uppercase">
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
</span>
</div>
<div class="content-wrapper">
<div class="row">
<div class="col-sm-12">
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
<h4 class="sub-header" id='security'>Security</h4>
@if($saved = Session::get('saved'))
<div class='alert alert-success'><strong>{{ Lang::get('cachet.dashboard.settings_saved') }}</strong></div>
@elseif(Session::has('saved'))
<div class='alert alert-danger'><strong>{{ Lang::get('cachet.dashboard.settings_not_saved') }}</strong></div>
@endif
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Allowed Domains <em>Comma Seperated</em></label>
<textarea class='form-control' name='allowed_domains' rows='5' placeholder='http://cachet.io, http://cachet.herokuapp.com'>{{ Setting::get('allowed_domains') }}</textarea>
<div class='help-block'>
The domain set above is automatically allowed by default.
</div>
</div>
</div>
</div>
</fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<button type="submit" class="btn btn-success">Save settings</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@@ -0,0 +1,48 @@
@extends('layout.dashboard')
@section('content')
@if(isset($subMenu))
@include('partials.dashboard.sub-sidebar')
@endif
<div class='content-panel'>
<div class="header">
<span class="uppercase">
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
</span>
</div>
<div class="content-wrapper">
<div class="row">
<div class="col-sm-12">
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
<h4 class="sub-header" id='stylesheet'>Stylesheet</h4>
@if($saved = Session::get('saved'))
<div class='alert alert-success'><strong>{{ Lang::get('cachet.dashboard.settings_saved') }}</strong></div>
@elseif(Session::has('saved'))
<div class='alert alert-danger'><strong>{{ Lang::get('cachet.dashboard.settings_not_saved') }}</strong></div>
@endif
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Custom Stylesheet</label>
<textarea class='form-control' name='stylesheet' rows='10'>{{ Setting::get('stylesheet') }}</textarea>
</div>
</div>
</div>
</fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<button type="submit" class="btn btn-success">Save settings</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@@ -1,7 +1,9 @@
@extends('layout.dashboard') @extends('layout.dashboard')
@section('content') @section('content')
@include('partials.dashboard.sidebar-settings') @if(isset($subMenu))
@include('partials.dashboard.sub-sidebar')
@endif
<div class='content-panel'> <div class='content-panel'>
<div class="header"> <div class="header">
<span class="uppercase"> <span class="uppercase">
@@ -12,48 +14,14 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'> <form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
<h4 class="sub-header" id='application-setup'>Application Setup</h4>
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Site Name</label>
<input type='text' class='form-control' name='app_name' value='{{ Setting::get("app_name") }}' required />
</div>
</div>
</div>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Site URL</label>
<input type='text' class='form-control' name='app_domain' value='{{ Setting::get("app_domain") }}' required />
</div>
</div>
</div>
</fieldset>
<!-- <h4 class="sub-header">Server</h4>
<fieldset></fieldset> -->
<h4 class="sub-header" id='security'>Security</h4>
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Allowed Domains <em>Comma Seperated</em></label>
<textarea class='form-control' name='allowed_domains' rows='5' placeholder='http://cachet.io, http://cachet.herokuapp.com'>{{ Setting::get('allowed_domains') }}</textarea>
<div class='help-block'>
The domain set above is automatically allowed by default.
</div>
</div>
</div>
</div>
</fieldset>
<!-- <h4 class='sub-header'>Mail</h4>
<fieldset></fieldset> -->
<h4 class="sub-header" id='theme'>Theme</h4> <h4 class="sub-header" id='theme'>Theme</h4>
@if($saved = Session::get('saved'))
<div class='alert alert-success'><strong>{{ Lang::get('cachet.dashboard.settings_saved') }}</strong></div>
@elseif(Session::has('saved'))
<div class='alert alert-danger'><strong>{{ Lang::get('cachet.dashboard.settings_not_saved') }}</strong></div>
@endif
<fieldset> <fieldset>
<div class='row'> <div class='row'>
<div class='col-xs-6'> <div class='col-xs-6'>
@@ -91,18 +59,6 @@
</div> </div>
</fieldset> </fieldset>
<h4 class="sub-header" id='stylesheet'>Stylesheet</h4>
<fieldset>
<div class='row'>
<div class='col-xs-12'>
<div class='form-group'>
<label>Custom Stylesheet</label>
<textarea class='form-control' name='stylesheet' rows='10'>{{ Setting::get('stylesheet') }}</textarea>
</div>
</div>
</div>
</fieldset>
<div class='row'> <div class='row'>
<div class='col-xs-12'> <div class='col-xs-12'>
<div class='form-group'> <div class='form-group'>
@@ -1,9 +0,0 @@
<div class='sub-sidebar'>
<h3>Settings</h3>
<ul class='menu'>
<li><a href='#setup'><i class='ion-gear-b'></i> Application Setup</a></li>
<li><a href='#security'><i class='ion-lock-combination'></i> Security</a></li>
<li><a href='#theme'><i class='ion-paintbrush'></i> Theme</a></li>
<li><a href='#stylesheet'><i class='ion-paintbucket'></i> Stylesheet</a></li>
</ul>
</div>
@@ -59,8 +59,8 @@
<i class="ion ion-email"></i> {{ Lang::get('cachet.dashboard.notifications') }} <i class="ion ion-email"></i> {{ Lang::get('cachet.dashboard.notifications') }}
</a> </a>
</li> --}} </li> --}}
<li class="{{ Request::is('dashboard/settings') ? 'active' : '' }}"> <li class="{{ Request::is('dashboard/settings/setup') ? 'active' : '' }}">
<a href="{{ URL::route('dashboard.settings') }}"> <a href="{{ URL::route('dashboard.settings.setup') }}">
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }} <i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
</a> </a>
</li> </li>
@@ -0,0 +1,8 @@
<div class='sub-sidebar'>
<h3>{{ $subTitle }}</h3>
<ul class='menu'>
@foreach($subMenu as $key => $item)
<li><a href='{{ $item["url"] }}' class='{{ $item["active"] ? "active" : null }}'><i class='{{ $item["icon"] }}'></i> {{ $item['title'] }}</a></li>
@endforeach
</ul>
</div>
@@ -4718,13 +4718,13 @@ body.dashboard .sub-sidebar {
color: #6787DA; } color: #6787DA; }
body.dashboard .sub-sidebar ul.menu li a:hover { body.dashboard .sub-sidebar ul.menu li a:hover {
color: #6787DA; } color: #6787DA; }
body.dashboard .content-panel { body.dashboard .sub-sidebar + .content-panel {
top: 0; top: 0;
position: relative; position: relative;
width: 78%; width: 78%;
margin-left: 22%; margin-left: 22%;
padding: 24px 50px; padding: 24px 50px;
padding-bottom: 80px; } padding-bottom: 80px; }
body.dashboard .content { body.dashboard .content {
position: relative; position: relative;
+7 -7
View File
@@ -4718,13 +4718,13 @@ body.dashboard .sub-sidebar {
color: #6787DA; } color: #6787DA; }
body.dashboard .sub-sidebar ul.menu li a:hover { body.dashboard .sub-sidebar ul.menu li a:hover {
color: #6787DA; } color: #6787DA; }
body.dashboard .content-panel { body.dashboard .sub-sidebar + .content-panel {
top: 0; top: 0;
position: relative; position: relative;
width: 78%; width: 78%;
margin-left: 22%; margin-left: 22%;
padding: 24px 50px; padding: 24px 50px;
padding-bottom: 80px; } padding-bottom: 80px; }
body.dashboard .content { body.dashboard .content {
position: relative; position: relative;
+1 -1
View File
@@ -1,4 +1,4 @@
{ {
"css/all.css": "css/all-3a96db65.css", "css/all.css": "css/all-ba7bbe3d.css",
"js/all.js": "js/all-4554a981.js" "js/all.js": "js/all-4554a981.js"
} }