diff --git a/app/Foundation/Providers/EventServiceProvider.php b/app/Foundation/Providers/EventServiceProvider.php index 7888cc54..b8f18b9b 100644 --- a/app/Foundation/Providers/EventServiceProvider.php +++ b/app/Foundation/Providers/EventServiceProvider.php @@ -39,9 +39,15 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent' => [ 'CachetHQ\Cachet\Bus\Handlers\Events\Component\SendComponentUpdateEmailNotificationHandler', ], + 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasReportedEvent' => [ 'CachetHQ\Cachet\Bus\Handlers\Events\Incident\SendIncidentEmailNotificationHandler', ], + 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\Incident\MaintenanceWasScheduledEvent' => [ 'CachetHQ\Cachet\Bus\Handlers\Events\Incident\SendMaintenanceEmailNotificationHandler', ], diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index fff386bb..b6d63570 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -41,11 +41,11 @@ class AuthController extends Controller */ public function postLogin() { - $loginData = Binput::only(['login', 'password']); + $loginData = Binput::only(['username', 'password']); // Login with username or email. - $loginKey = Str::contains($loginData['login'], '@') ? 'email' : 'username'; - $loginData[$loginKey] = array_pull($loginData, 'login'); + $loginKey = Str::contains($loginData['username'], '@') ? 'email' : 'username'; + $loginData[$loginKey] = array_pull($loginData, 'username'); // Validate login credentials. if (Auth::validate($loginData)) { diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php index 1f7292c2..36651597 100644 --- a/app/Http/Controllers/Dashboard/DashboardController.php +++ b/app/Http/Controllers/Dashboard/DashboardController.php @@ -13,6 +13,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use CachetHQ\Cachet\Integrations\Feed; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\Subscriber; use Illuminate\Routing\Controller; @@ -67,6 +68,9 @@ class DashboardController extends Controller $components = Component::orderBy('order')->get(); $incidents = $this->getIncidents(); $subscribers = $this->getSubscribers(); + $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id'); + $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get(); + $ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get(); $entries = null; if ($feed = $this->feed->latest()) { @@ -78,7 +82,9 @@ class DashboardController extends Controller ->withComponents($components) ->withIncidents($incidents) ->withSubscribers($subscribers) - ->withEntries($entries); + ->withEntries($entries) + ->withComponentGroups($componentGroups) + ->withUngroupedComponents($ungroupedComponents); } /** diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index d142d98b..6e3d5f27 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -42,6 +42,22 @@ class SetupController extends Controller 'redis' => 'Redis', ]; + /** + * Array of cache drivers. + * + * @var string[] + */ + protected $mailDrivers = [ + 'smtp' => 'SMTP', + 'mail' => 'Mail', + 'sendmail' => 'Sendmail', + 'mailgun' => 'Mailgun', + 'mandrill' => 'Mandrill', + // 'ses' => 'Amazon SES', this will be available only if aws/aws-sdk-php is installed + 'sparkpost' => 'SparkPost', + 'log' => 'Log (Testing)', + ]; + /** * Array of step1 rules. * @@ -73,6 +89,7 @@ class SetupController extends Controller $this->rulesStep1 = [ 'env.cache_driver' => 'required|in:'.implode(',', array_keys($this->cacheDrivers)), 'env.session_driver' => 'required|in:'.implode(',', array_keys($this->cacheDrivers)), + 'env.mail_driver' => 'required|in:'.implode(',', array_keys($this->mailDrivers)), ]; $this->rulesStep2 = [ @@ -112,6 +129,7 @@ class SetupController extends Controller return View::make('setup') ->withPageTitle(trans('setup.setup')) ->withCacheDrivers($this->cacheDrivers) + ->withMailDrivers($this->mailDrivers) ->withUserLanguage($userLanguage) ->withAppUrl(Request::root()); } @@ -127,6 +145,14 @@ class SetupController extends Controller $v = Validator::make($postData, $this->rulesStep1); + $v->sometimes('env.mail_host', 'required', function ($input) { + return $input->mail_driver === 'smtp'; + }); + + $v->sometimes(['env.mail_address', 'env.mail_username', 'env.mail_password'], 'required', function ($input) { + return $input->mail_driver !== 'log'; + }); + if ($v->passes()) { return Response::json(['status' => 1]); } @@ -224,8 +250,10 @@ class SetupController extends Controller try { (new Dotenv($dir, $file))->load(); + $envValue = env(strtoupper($key)) ?: 'null'; + file_put_contents($path, str_replace( - env(strtoupper($key)), $value, file_get_contents($path) + $envValue, $value, file_get_contents($path) )); } catch (InvalidPathException $e) { // diff --git a/app/Http/helpers.php b/app/helpers.php similarity index 100% rename from app/Http/helpers.php rename to app/helpers.php diff --git a/composer.json b/composer.json index 99f95144..d3a17446 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ ], "require": { "php": ">=5.5.9", - "laravel/framework": "5.2.37", + "laravel/framework": "5.2.39", "alt-three/badger": "^3.1", "alt-three/bus": "^1.1", "alt-three/emoji": "^3.1", @@ -58,7 +58,7 @@ "database" ], "files": [ - "app/Http/helpers.php" + "app/helpers.php" ], "psr-4": { "CachetHQ\\Cachet\\": "app/" diff --git a/composer.lock b/composer.lock index 2bde213d..9dcca8bf 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "bd74187402d65466fb19617859c8d507", - "content-hash": "3f1683299582010eced0a6ebd4daf734", + "hash": "85b73f3211babb4bf992e5628a862804", + "content-hash": "7b5f27f3d4ef54e83dd203203d704984", "packages": [ { "name": "alt-three/badger", @@ -325,16 +325,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.18.17", + "version": "3.18.20", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "6c7849556f556da8615d22e675710c7a086ed5d0" + "reference": "e5a901dd3a42d0c46a90ee37a174938cd0ce55bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6c7849556f556da8615d22e675710c7a086ed5d0", - "reference": "6c7849556f556da8615d22e675710c7a086ed5d0", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e5a901dd3a42d0c46a90ee37a174938cd0ce55bf", + "reference": "e5a901dd3a42d0c46a90ee37a174938cd0ce55bf", "shasum": "" }, "require": { @@ -401,7 +401,7 @@ "s3", "sdk" ], - "time": "2016-06-09 23:39:33" + "time": "2016-06-23 23:17:52" }, { "name": "backup-manager/backup-manager", @@ -1759,16 +1759,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "31382fef2889136415751badebbd1cb022a4ed72" + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72", - "reference": "31382fef2889136415751badebbd1cb022a4ed72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", "shasum": "" }, "require": { @@ -1784,7 +1784,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -1813,7 +1813,7 @@ "stream", "uri" ], - "time": "2016-04-13 19:56:01" + "time": "2016-06-24 23:00:38" }, { "name": "jakub-onderka/php-console-color", @@ -2019,16 +2019,16 @@ }, { "name": "laravel/framework", - "version": "v5.2.37", + "version": "v5.2.39", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bf199036b0e222a27e2133d841aee0d4238f804d" + "reference": "c2a77050269b4e03bd9a735a9f24e573a7598b8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bf199036b0e222a27e2133d841aee0d4238f804d", - "reference": "bf199036b0e222a27e2133d841aee0d4238f804d", + "url": "https://api.github.com/repos/laravel/framework/zipball/c2a77050269b4e03bd9a735a9f24e573a7598b8a", + "reference": "c2a77050269b4e03bd9a735a9f24e573a7598b8a", "shasum": "" }, "require": { @@ -2144,20 +2144,20 @@ "framework", "laravel" ], - "time": "2016-06-10 22:38:47" + "time": "2016-06-17 19:25:12" }, { "name": "league/commonmark", - "version": "0.13.3", + "version": "0.13.4", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "35816f39eb2498484fbb7b1495633a976ee1a8de" + "reference": "83f8210427fb01f671e272bb8d44b4ed3a94d459" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/35816f39eb2498484fbb7b1495633a976ee1a8de", - "reference": "35816f39eb2498484fbb7b1495633a976ee1a8de", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/83f8210427fb01f671e272bb8d44b4ed3a94d459", + "reference": "83f8210427fb01f671e272bb8d44b4ed3a94d459", "shasum": "" }, "require": { @@ -2213,7 +2213,7 @@ "markdown", "parser" ], - "time": "2016-05-21 18:41:30" + "time": "2016-06-14 14:49:29" }, { "name": "league/flysystem", @@ -3177,16 +3177,16 @@ }, { "name": "symfony/css-selector", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "e17f386efef7258ac671c24e727673abd086b0cf" + "reference": "c526d7b3cb4fe1673c6a34e13be2ff63f519df99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/e17f386efef7258ac671c24e727673abd086b0cf", - "reference": "e17f386efef7258ac671c24e727673abd086b0cf", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/c526d7b3cb4fe1673c6a34e13be2ff63f519df99", + "reference": "c526d7b3cb4fe1673c6a34e13be2ff63f519df99", "shasum": "" }, "require": { @@ -3226,7 +3226,7 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:56:56" + "time": "2016-06-06 11:42:41" }, { "name": "symfony/debug", @@ -3287,16 +3287,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0343b2cedd0edb26cdc791212a8eb645c406018b" + "reference": "f5b7563f67779c6d3d5370e23448e707c858df3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0343b2cedd0edb26cdc791212a8eb645c406018b", - "reference": "0343b2cedd0edb26cdc791212a8eb645c406018b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5b7563f67779c6d3d5370e23448e707c858df3e", + "reference": "f5b7563f67779c6d3d5370e23448e707c858df3e", "shasum": "" }, "require": { @@ -3343,7 +3343,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-04-12 18:27:47" + "time": "2016-06-06 11:42:41" }, { "name": "symfony/finder", @@ -4057,16 +4057,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.2.1", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "63f37b9395e8041cd4313129c08ece896d06ca8e" + "reference": "9ca5644c536654e9509b9d257f53c58630eb2a6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/63f37b9395e8041cd4313129c08ece896d06ca8e", - "reference": "63f37b9395e8041cd4313129c08ece896d06ca8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/9ca5644c536654e9509b9d257f53c58630eb2a6a", + "reference": "9ca5644c536654e9509b9d257f53c58630eb2a6a", "shasum": "" }, "require": { @@ -4078,7 +4078,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -4103,7 +4103,7 @@ "env", "environment" ], - "time": "2016-04-15 10:48:49" + "time": "2016-06-14 14:14:52" } ], "packages-dev": [ @@ -5247,16 +5247,16 @@ }, { "name": "sebastian/exporter", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", "shasum": "" }, "require": { @@ -5264,12 +5264,13 @@ "sebastian/recursion-context": "~1.0" }, "require-dev": { + "ext-mbstring": "*", "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -5309,7 +5310,7 @@ "export", "exporter" ], - "time": "2015-06-21 07:55:53" + "time": "2016-06-17 09:04:28" }, { "name": "sebastian/global-state", @@ -5452,7 +5453,7 @@ }, { "name": "symfony/dom-crawler", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -5508,16 +5509,16 @@ }, { "name": "symfony/yaml", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "eca51b7b65eb9be6af88ad7cc91685f1556f5c9a" + "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/eca51b7b65eb9be6af88ad7cc91685f1556f5c9a", - "reference": "eca51b7b65eb9be6af88ad7cc91685f1556f5c9a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c5a7e7fc273c758b92b85dcb9c46149ccda89623", + "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623", "shasum": "" }, "require": { @@ -5553,7 +5554,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-05-26 21:46:24" + "time": "2016-06-14 11:18:07" }, { "name": "webmozart/assert", diff --git a/config/langs.php b/config/langs.php index f9960758..68e8d358 100755 --- a/config/langs.php +++ b/config/langs.php @@ -100,11 +100,11 @@ return [ 'subset' => 'latin,latin-ext', ], 'pt-BR' => [ - 'name' => 'Portuguese', + 'name' => 'Portuguese, Brazilian', 'subset' => 'latin,latin-ext', ], 'pt-PT' => [ - 'name' => 'Portuguese, Brazilian', + 'name' => 'Portuguese, Portugal', 'subset' => 'latin,latin-ext', ], 'ro' => [ diff --git a/config/services.php b/config/services.php index 77ea1cba..f1a4e4c1 100644 --- a/config/services.php +++ b/config/services.php @@ -28,22 +28,22 @@ return [ ], 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), + 'domain' => env('MAIL_USERNAME'), + 'secret' => env('MAIL_PASSWORD'), ], 'mandrill' => [ - 'secret' => env('MANDRILL_SECRET'), + 'secret' => env('MAIL_PASSWORD'), ], 'ses' => [ - 'key' => env('SES_KEY'), - 'secret' => env('SES_SECRET'), + 'key' => env('MAIL_USERNAME'), + 'secret' => env('MAIL_PASSWORD'), 'region' => 'us-east-1', ], 'sparkpost' => [ - 'secret' => env('SPARKPOST_SECRET'), + 'secret' => env('MAIL_PASSWORD'), ], ]; diff --git a/resources/assets/sass/pages/_dashboard.scss b/resources/assets/sass/pages/_dashboard.scss index 47d971cf..f8be49b6 100755 --- a/resources/assets/sass/pages/_dashboard.scss +++ b/resources/assets/sass/pages/_dashboard.scss @@ -1,4 +1,4 @@ -.componet-inline-update { +.component-inline-update { @extend .text-right; padding-top: 8px; label { @@ -7,4 +7,13 @@ } } +.component-group-name{ + font-size: 18px; + padding-left: 10px; +} + +.component-group-other{ + font-size: 18px; +} + @import "modules/stats"; diff --git a/resources/lang/en/forms.php b/resources/lang/en/forms.php index e706de8a..fa09b231 100755 --- a/resources/lang/en/forms.php +++ b/resources/lang/en/forms.php @@ -23,6 +23,11 @@ return [ 'enable_google2fa' => 'Enable Google Two Factor Authentication', 'cache_driver' => 'Cache Driver', 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From', + 'mail_username' => 'Mail Client User', + 'mail_password' => 'Mail Client Password', ], // Login form fields diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 9c4fb5dc..e26c92d2 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -21,7 +21,7 @@
- +
diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index e06abb3e..4c65a86b 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -15,38 +15,22 @@
+
-
-

{{ trans('dashboard.components.component_statuses') }}

-
-
- @forelse($components as $component) -
-
-
-
-

{{ $component->name }}

-
-
- @foreach(trans('cachet.components.status') as $statusID => $status) -
- -
- @endforeach -
-
- -
-
- @empty - - @endforelse -
-
-
+
+

{{ trans('dashboard.components.component_statuses') }}

+
+ @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) + @include('dashboard.partials.components') + @else + + @endif +
+
diff --git a/resources/views/dashboard/partials/component.blade.php b/resources/views/dashboard/partials/component.blade.php new file mode 100644 index 00000000..9a8f019c --- /dev/null +++ b/resources/views/dashboard/partials/component.blade.php @@ -0,0 +1,20 @@ +
  • +
    +
    +
    +
    {{ $component->name }}
    +
    +
    + @foreach(trans('cachet.components.status') as $statusID => $status) +
    + +
    + @endforeach +
    +
    + +
    +
  • diff --git a/resources/views/dashboard/partials/components.blade.php b/resources/views/dashboard/partials/components.blade.php new file mode 100644 index 00000000..aa9f5496 --- /dev/null +++ b/resources/views/dashboard/partials/components.blade.php @@ -0,0 +1,30 @@ +@if($component_groups->count() > 0) +@foreach($component_groups as $componentGroup) +@if($componentGroup->enabled_components->count() > 0) + +@endif +@endforeach +@endif + +@if($ungrouped_components->count() > 0) + +@endif diff --git a/resources/views/setup.blade.php b/resources/views/setup.blade.php index 37fe7e21..f5ff6ad8 100644 --- a/resources/views/setup.blade.php +++ b/resources/views/setup.blade.php @@ -56,6 +56,46 @@ {{ $errors->first('env.session_driver') }} @endif
    +
    + + + @if($errors->has('env.mail_driver')) + {{ $errors->first('env.mail_driver') }} + @endif +
    +
    + + + @if($errors->has('env.mail_host')) + {{ $errors->first('env.mail_host') }} + @endif +
    +
    + + + @if($errors->has('env.mail_address')) + {{ $errors->first('env.mail_address') }} + @endif +
    +
    + + + @if($errors->has('env.mail_username')) + {{ $errors->first('env.mail_username') }} + @endif +
    +
    + + + @if($errors->has('env.mail_password')) + {{ $errors->first('env.mail_password') }} + @endif +