Set timezone and date from setup and settings

This commit is contained in:
Joseph Cohen
2015-01-07 13:54:28 -06:00
parent 135badcecf
commit d51811d2b1
13 changed files with 286 additions and 17 deletions

View File

@@ -127,6 +127,7 @@ return [
'GrahamCampbell\Markdown\MarkdownServiceProvider',
'Roumen\Feed\FeedServiceProvider',
'Thujohn\Rss\RssServiceProvider',
'Jenssegers\Date\DateServiceProvider',
'CachetHQ\Cachet\Providers\AuthServiceProvider',
'CachetHQ\Cachet\Providers\ConsoleServiceProvider',

View File

@@ -4,11 +4,13 @@ return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Username',
'password' => 'Password',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'email' => 'Email',
'username' => 'Username',
'password' => 'Password',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Select your language',
],
// Login form fields
@@ -51,6 +53,8 @@ return [
'app-setup' => [
'site-name' => 'Site Name',
'site-url' => 'Site URL',
'site-timezone' => 'Site Timezone',
'site-locale' => 'Site Language',
'about-this-page' => 'About this page',
'days-of-incidents' => 'How many days of incidents to show?',
'banner' => 'Banner Image',

View File

@@ -4,11 +4,13 @@ return [
// Setup form fields
'setup' => [
'email' => 'Adresse email',
'username' => 'Identifiant',
'password' => 'Mot de passe',
'site_name' => 'Nom du site',
'site_domain' => 'Domaine du site',
'email' => 'Adresse email',
'username' => 'Identifiant',
'password' => 'Mot de passe',
'site_name' => 'Nom du site',
'site_domain' => 'Domaine du site',
'site_timezone' => 'Sélectionnez votre fuseau horaire',
'site_locale' => 'Sélectionnez votre langue',
],
// Login form fields
@@ -51,6 +53,8 @@ return [
'app-setup' => [
'site-name' => 'Nom du site',
'site-url' => 'URL du site',
'site-timezone' => 'Fuseau horaire du site',
'site-locale' => 'Langue du site',
'about-this-page' => 'À propos de cette page',
'days-of-incidents' => 'Nombre de jours à afficher ?',
'banner' => 'Bannière',

View File

@@ -3,11 +3,13 @@
return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Usuário',
'password' => 'Senha',
'site_name' => 'Nome do site',
'site_domain' => 'Domínio do site',
'email' => 'Email',
'username' => 'Usuário',
'password' => 'Senha',
'site_name' => 'Nome do site',
'site_domain' => 'Domínio do site',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Select your language',
],
// Login form fields
@@ -50,6 +52,8 @@ return [
'app-setup' => [
'site-name' => 'Nome do site',
'site-url' => 'URL do site',
'site-timezone' => 'Site Timezone',
'site-locale' => 'Site Language',
'about-this-page' => 'Sobre esta página',
'days-of-incidents' => 'Quantos dias de incidentes para mostrar?',
'banner' => 'Imagem do banner',

View File

@@ -42,6 +42,40 @@
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label>{{ trans('forms.settings.app-setup.site-timezone') }}</label>
<select name="app_timezone" class="form-control" required>
<option value="">Select Timezone</option>
@foreach($timezones as $region => $list)
<optgroup label="{{ $region }}">
@foreach($list as $timezone => $name)
<option value="{{ $timezone }}" @if(Setting::get('app_timezone') == $timezone) selected @endif>
{{ $name }}
</option>
@endforeach
</optgroup>
@endforeach
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label>{{ trans('forms.settings.app-setup.site-locale') }}</label>
<select name="app_locale" class="form-control" required>
<option value="">Select Language</option>
@foreach($langs as $lang => $name)
<option value="{{ $lang }}" @if(Setting::get('app_locale') == $lang) selected @endif>
{{ $name }}
</option>
@endforeach
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">

View File

@@ -40,6 +40,38 @@
<span class="text-danger">{{ $errors->first('settings.app_domain') }}</span>
@endif
</div>
<div class="form-group">
<label class="sr-only">{{ trans('forms.site_timezone') }}</label>
<select name="settings[app_timezone]" class="form-control" required>
<option value="">Select Timezone</option>
@foreach($timezones as $region => $list)
<optgroup label="{{ $region }}">
@foreach($list as $timezone => $name)
<option value="{{ $timezone }}" @if(Input::old('settins.app_timezone') == $timezone) selected @endif>
{{ $name }}
</option>
@endforeach
</optgroup>
@endforeach
</select>
@if($errors->has('settings.app_timezone'))
<span class="text-danger">{{ $errors->first('settings.app_timezone') }}</span>
@endif
</div>
<div class="form-group">
<label class="sr-only">{{ trans('forms.site_locale') }}</label>
<select name="settings[app_locale]" class="form-control" required>
<option value="">Select Language</option>
@foreach($langs as $lang => $name)
<option value="{{ $lang }}" @if(Input::old('settins.app_locale') == $timezone) selected @endif>
{{ $name }}
</option>
@endforeach
</select>
@if($errors->has('settings.app_locale'))
<span class="text-danger">{{ $errors->first('settings.app_locale') }}</span>
@endif
</div>
<div class="form-group">
<label>
<input type="checkbox" name="settings[show_support]" value="1" checked />

View File

@@ -21,7 +21,8 @@
"guzzlehttp/guzzle": "~5.0",
"roumen/feed": "~2.8",
"thujohn/rss": "~1.0",
"watson/validating": "0.10.*"
"watson/validating": "0.10.*",
"jenssegers/date": "~2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.3",

49
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "f529ce7217176f2b01770bc984daf22c",
"hash": "50862b080034db5b187b78c30807c1d5",
"packages": [
{
"name": "classpreloader/classpreloader",
@@ -1185,6 +1185,53 @@
],
"time": "2014-11-20 16:49:30"
},
{
"name": "jenssegers/date",
"version": "v2.0.10",
"source": {
"type": "git",
"url": "https://github.com/jenssegers/laravel-date.git",
"reference": "7ac5efaf4b829356d7feda21cace52097c8a1377"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jenssegers/laravel-date/zipball/7ac5efaf4b829356d7feda21cace52097c8a1377",
"reference": "7ac5efaf4b829356d7feda21cace52097c8a1377",
"shasum": ""
},
"require": {
"nesbot/carbon": "*",
"php": ">=5.3.0",
"symfony/translation": "*"
},
"require-dev": {
"satooshi/php-coveralls": "*"
},
"type": "library",
"autoload": {
"psr-0": {
"Jenssegers\\Date": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jens Segers",
"homepage": "http://jenssegers.be"
}
],
"description": "A date library to help you work with dates",
"keywords": [
"date",
"datetime",
"laravel",
"time"
],
"time": "2015-01-01 22:46:48"
},
{
"name": "jeremeamia/SuperClosure",
"version": "1.0.1",

View File

@@ -0,0 +1,31 @@
<?php
namespace CachetHQ\Cachet\Http\Before;
use CachetHQ\Cachet\Models\Setting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Lang;
class LoadConfigFilter
{
/**
* Load confit to override values filter.
*
* @param \Illuminate\Http\Request $request
*
* @return null
*/
public function filter(Request $request)
{
// Always allow our own domain.
$appDomain = Setting::get('app_domain');
$appTimezone = Setting::get('app_timezone');
$appLocale = Setting::get('app_locale');
Config::set('app.url', $appDomain ?: Config::get('app.url'));
Config::set('app.timezone', $appTimezone ?: Config::get('app.timezone'));
Config::set('app.locale', $appLocale ?: Config::get('app.locale'));
Lang::setLocale($appLocale);
}
}

View File

@@ -3,6 +3,8 @@
namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Models\Setting;
use DateTime;
use DateTimeZone;
use Exception;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
@@ -54,11 +56,47 @@ class DashSettingsController extends Controller
*/
public function showSetupView()
{
$langs = [
'en' => 'English',
'fr' => 'Français',
'pt-BR' => 'Portuguese, Brazilian',
];
$regions = [
'Africa' => DateTimeZone::AFRICA,
'America' => DateTimeZone::AMERICA,
'Antarctica' => DateTimeZone::ANTARCTICA,
'Asia' => DateTimeZone::ASIA,
'Atlantic' => DateTimeZone::ATLANTIC,
'Europe' => DateTimeZone::EUROPE,
'Indian' => DateTimeZone::INDIAN,
'Pacific' => DateTimeZone::PACIFIC,
];
$timezones = [];
foreach ($regions as $name => $mask) {
$zones = DateTimeZone::listIdentifiers($mask);
foreach ($zones as $timezone) {
// Lets sample the time there right now
$time = new DateTime(null, new DateTimeZone($timezone));
// Us dumb Americans can't handle millitary time
$ampm = $time->format('H') > 12 ? ' ('.$time->format('g:i a').')' : '';
// Remove region name and add a sample time
$timezones[$name][$timezone] = substr($timezone, strlen($name) + 1).' - '.$time->format('H:i').$ampm;
}
}
$this->subMenu['setup']['active'] = true;
return View::make('dashboard.settings.app-setup')->with([
'pageTitle' => 'Application Setup - Dashboard',
'subMenu' => $this->subMenu,
'timezones' => $timezones,
'langs' => $langs,
]);
}

View File

@@ -4,6 +4,8 @@ namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Models\Setting;
use CachetHQ\Cachet\Models\User;
use DateTime;
use DateTimeZone;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
@@ -32,8 +34,44 @@ class SetupController extends Controller
*/
public function getIndex()
{
$langs = [
'en' => 'English',
'fr' => 'Français',
'pt-BR' => 'Portuguese, Brazilian',
];
$regions = [
'Africa' => DateTimeZone::AFRICA,
'America' => DateTimeZone::AMERICA,
'Antarctica' => DateTimeZone::ANTARCTICA,
'Asia' => DateTimeZone::ASIA,
'Atlantic' => DateTimeZone::ATLANTIC,
'Europe' => DateTimeZone::EUROPE,
'Indian' => DateTimeZone::INDIAN,
'Pacific' => DateTimeZone::PACIFIC,
];
$timezones = [];
foreach ($regions as $name => $mask) {
$zones = DateTimeZone::listIdentifiers($mask);
foreach ($zones as $timezone) {
// Lets sample the time there right now
$time = new DateTime(null, new DateTimeZone($timezone));
// Us dumb Americans can't handle millitary time
$ampm = $time->format('H') > 12 ? ' ('.$time->format('g:i a').')' : '';
// Remove region name and add a sample time
$timezones[$name][$timezone] = substr($timezone, strlen($name) + 1).' - '.$time->format('H:i').$ampm;
}
}
return View::make('setup')->with([
'pageTitle' => trans('setup.setup'),
'timezones' => $timezones,
'langs' => $langs,
]);
}
@@ -49,6 +87,8 @@ class SetupController extends Controller
$v = Validator::make($postData, [
'settings.app_name' => 'required',
'settings.app_domain' => 'required',
'settings.app_timezone' => 'required',
'settings.app_locale' => 'required',
'settings.show_support' => 'boolean',
]);
@@ -72,6 +112,8 @@ class SetupController extends Controller
$v = Validator::make($postData, [
'settings.app_name' => 'required',
'settings.app_domain' => 'required',
'settings.app_timezone' => 'required',
'settings.app_locale' => 'required',
'settings.show_support' => 'boolean',
'user.username' => 'alpha_dash|required',
'user.email' => 'email|required',

View File

@@ -41,6 +41,7 @@ class RoutingServiceProvider extends ServiceProvider
$this->app->router->filter('csrf', 'CachetHQ\Cachet\Http\Before\CsrfFilter');
// Cachet's before filters
$this->app->router->before('CachetHQ\Cachet\Http\Before\LoadConfigFilter');
$this->app->router->filter('is_setup', 'CachetHQ\Cachet\Http\Before\IsSetupFilter');
$this->app->router->filter('has_setting', 'CachetHQ\Cachet\Http\Before\HasSettingFilter');
$this->app->router->filter('login_throttling', 'CachetHQ\Cachet\Http\Before\LoginThrottlingFilter');

View File

@@ -1,5 +1,6 @@
<?php
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Request;
if (!function_exists('elixir')) {
@@ -26,6 +27,35 @@ if (!function_exists('elixir')) {
}
}
if (!function_exists('config')) {
/**
* Get / set the specified configuration value.
*
* If an array is passed as the key, we will assume you want to set an array of values.
*
* @param array|string $key
* @param mixed $default
*
* @return mixed
*/
function config($key = null, $default = null)
{
if (is_null($key)) {
return Config::getItems();
}
if (is_array($key)) {
foreach ($key as $innerKey => $innerValue) {
Config::set($innerKey, $innerValue);
}
return;
}
return Config::get($key, $default);
}
}
if (!function_exists('set_active')) {
/**