diff --git a/app/Http/Controllers/Admin/SubscriberController.php b/app/Http/Controllers/Admin/SubscriberController.php new file mode 100644 index 00000000..747b6137 --- /dev/null +++ b/app/Http/Controllers/Admin/SubscriberController.php @@ -0,0 +1,118 @@ +with([ + 'page_title' => trans('dashboard.subscribers.subscribers').' - '.trans('dashboard.dashboard'), + 'subscribers' => $subscribers, + ]); + } + + /** + * Shows the add subscriber view. + * + * @return \Illuminate\View\View + */ + public function showAddSubscriber() + { + return View::make('dashboard.subscribers.add') + ->with([ + 'page_title' => trans('dashboard.subscribers.add.title').' - '.trans('dashboard.dashboard'), + 'incidentTemplates' => Subscriber::all(), + ]); + } + + /** + * Creates a new subscriber. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function createSubscriberAction() + { + $email = Binput::get('email'); + + $subscriber = Subscriber::create([ + 'email' => $email, + ]); + + if (!$subscriber->isValid()) { + segment_track('Dashboard', [ + 'event' => 'Created Subscriber', + 'success' => false, + ]); + + return Redirect::back() + ->withInput(Binput::all()) + ->with('title', sprintf( + '%s %s', + trans('dashboard.notifications.whoops'), + trans('dashboard.subscribers.add.failure') + )) + ->with('errors', $subscriber->getErrors()); + } + + segment_track('Dashboard', [ + 'event' => 'Created Subscriber', + 'success' => true, + ]); + + $successMsg = sprintf( + '%s %s', + trans('dashboard.notifications.awesome'), + trans('dashboard.subscribers.add.success') + ); + + event(new CustomerHasSubscribedEvent($subscriber)); + + return Redirect::back() + ->with('success', $successMsg); + } + + /** + * Deletes a subscriber. + * + * @param \CachetHQ\Cachet\Models\Subscriber $subscriber + * + * @throws \Exception + * + * @return \Illuminate\Http\RedirectResponse + */ + public function deleteSubscriberAction(Subscriber $subscriber) + { + segment_track('Dashboard', [ + 'event' => 'Deleted Subscriber', + ]); + + $subscriber->delete(); + + return Redirect::back(); + } +} diff --git a/app/Http/Middleware/SubscribersConfigured.php b/app/Http/Middleware/SubscribersConfigured.php index 907c2792..449afc9a 100644 --- a/app/Http/Middleware/SubscribersConfigured.php +++ b/app/Http/Middleware/SubscribersConfigured.php @@ -11,7 +11,6 @@ namespace CachetHQ\Cachet\Http\Middleware; -use CachetHQ\Cachet\Facades\Setting; use Closure; use Illuminate\Support\Facades\Redirect; @@ -27,11 +26,7 @@ class SubscribersConfigured */ public function handle($request, Closure $next) { - $isEnabled = Setting::get('enable_subscribers', false); - $mailAddress = env('MAIL_ADDRESS', false); - $mailFrom = env('MAIL_NAME', false); - - if (!($isEnabled && $mailAddress && $mailFrom)) { + if (!subscribers_enabled()) { return Redirect::route('status-page'); } diff --git a/app/Http/Routes/AdminRoutes.php b/app/Http/Routes/AdminRoutes.php index f369e0b4..dc714804 100644 --- a/app/Http/Routes/AdminRoutes.php +++ b/app/Http/Routes/AdminRoutes.php @@ -121,6 +121,22 @@ class AdminRoutes $router->delete('{incident_template}/delete', 'IncidentController@deleteTemplateAction'); }); + // Subscribers + $router->group(['prefix' => 'subscribers'], function ($router) { + $router->get('/', [ + 'as' => 'dashboard.subscribers', + 'uses' => 'SubscriberController@showSubscribers', + ]); + + $router->get('add', [ + 'as' => 'dashboard.subscribers.add', + 'uses' => 'SubscriberController@showAddSubscriber', + ]); + $router->post('add', 'SubscriberController@createSubscriberAction'); + + $router->delete('{subscriber}/delete', 'SubscriberController@deleteSubscriberAction'); + }); + // Metrics $router->group(['prefix' => 'metrics'], function ($router) { $router->get('/', [ diff --git a/app/Http/helpers.php b/app/Http/helpers.php index 36e55f05..fce371a2 100644 --- a/app/Http/helpers.php +++ b/app/Http/helpers.php @@ -153,3 +153,19 @@ if (!function_exists('formatted_date')) { return (new Date($date))->format($dateFormat); } } + +if (!function_exists('subscribers_enabled')) { + /** + * Is the subscriber functionality enabled and configured. + * + * @return bool + */ + function subscribers_enabled() + { + $isEnabled = Setting::get('enable_subscribers', false); + $mailAddress = env('MAIL_ADDRESS', false); + $mailFrom = env('MAIL_NAME', false); + + return $isEnabled && $mailAddress && $mailFrom; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index cf3c3e2b..bbcada9a 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -49,6 +49,7 @@ class RouteServiceProvider extends ServiceProvider $this->app->router->model('metric', 'CachetHQ\Cachet\Models\Metric'); $this->app->router->model('metric_point', 'CachetHQ\Cachet\Models\MetricPoint'); $this->app->router->model('setting', 'CachetHQ\Cachet\Models\Setting'); + $this->app->router->model('subscriber', 'CachetHQ\Cachet\Models\Subscriber'); $this->app->router->model('user', 'CachetHQ\Cachet\Models\User'); } diff --git a/resources/lang/en/dashboard.php b/resources/lang/en/dashboard.php index d8a0b3eb..0b380303 100755 --- a/resources/lang/en/dashboard.php +++ b/resources/lang/en/dashboard.php @@ -115,6 +115,23 @@ return [ 'failure' => 'Something went wrong with the metric.', ], ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created.', + 'verified' => 'Verified', + 'not_verified' => 'Not Verified', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber added.', + 'failure' => 'Something went wrong with the component.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber updated.', + 'failure' => 'Something went wrong when updating.', + ], + ], // Team 'team' => [ diff --git a/resources/views/dashboard/subscribers/add.blade.php b/resources/views/dashboard/subscribers/add.blade.php new file mode 100644 index 00000000..0c2fde96 --- /dev/null +++ b/resources/views/dashboard/subscribers/add.blade.php @@ -0,0 +1,32 @@ +@extends('layout.dashboard') + +@section('content') +
+ + + {{ trans('dashboard.subscribers.subscribers') }} + +
+
+
+
+ @include('partials.dashboard.errors') +
+ +
+
+ + +
+
+ +
+ +
+
+
+
+
+@stop diff --git a/resources/views/dashboard/subscribers/index.blade.php b/resources/views/dashboard/subscribers/index.blade.php new file mode 100644 index 00000000..61ac8750 --- /dev/null +++ b/resources/views/dashboard/subscribers/index.blade.php @@ -0,0 +1,48 @@ +@extends('layout.dashboard') + +@section('content') +
+ + + {{ trans('dashboard.subscribers.subscribers') }} + + @if($loggedUser->isAdmin) + + {{ trans('dashboard.subscribers.add.title') }} + + @endif +
+
+
+
+
+

{{ trans('dashboard.subscribers.description') }}

+ +
+ @foreach($subscribers as $subscriber) +
+
+

{{ $subscriber->email }}

+
+
+

{{ $subscriber->created_at->format('Y-m-d H:i:s') }}

+
+
+ @if(is_null($subscriber->verified_at)) + {{ trans('dashboard.subscribers.not_verified') }} + @else + {{ trans('dashboard.subscribers.verified') }} + @endif +
+ +
+ @endforeach +
+
+
+
+@stop diff --git a/resources/views/partials/dashboard/sidebar.blade.php b/resources/views/partials/dashboard/sidebar.blade.php index 656653a6..76853507 100644 --- a/resources/views/partials/dashboard/sidebar.blade.php +++ b/resources/views/partials/dashboard/sidebar.blade.php @@ -63,6 +63,14 @@ {{ trans('dashboard.metrics.metrics') }} + +
  • + + + {{ trans('dashboard.subscribers.subscribers') }} + +
  • +