generated from biigle/module
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement admin view with list of subscribers
- Loading branch information
Showing
10 changed files
with
173 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<?php | ||
|
||
namespace Biigle\Modules\Newsletter\Http\Controllers\Views; | ||
|
||
use Biigle\Http\Controllers\Views\Controller; | ||
use Biigle\Modules\Newsletter\NewsletterSubscriber; | ||
use Illuminate\Http\Request; | ||
|
||
class AdminController extends Controller | ||
{ | ||
|
||
/** | ||
* Shows the list of subscribers page. | ||
* | ||
* @param Request $request | ||
* @return mixed | ||
*/ | ||
public function index(Request $request) | ||
{ | ||
$subscribers = NewsletterSubscriber::verified() | ||
->select('id', 'email', 'created_at') | ||
->when($request->has('q'), function ($query) use ($request) { | ||
$q = $request->get('q'); | ||
$query->where(function ($query) use ($q) { | ||
$query->where('email', 'ilike', "%$q%"); | ||
}); | ||
}) | ||
->orderBy('created_at', 'desc') | ||
->paginate(100); | ||
|
||
return view('newsletter::admin.index', [ | ||
'subscribers' => $subscribers, | ||
'query' => $request->get('q'), | ||
]); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...Http/Controllers/NewsletterController.php → ...ontrollers/Views/NewsletterController.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,47 +1,56 @@ | ||
<?php | ||
|
||
$router->get('newsletter', [ | ||
'uses' => 'NewsletterController@index', | ||
]); | ||
$router->group([ | ||
'namespace' => 'Api', | ||
'prefix' => 'api/v1', | ||
'middleware' => ['api', 'auth:web,api'], | ||
], function ($router) { | ||
$router->resource('newsletter-subscribers', 'NewsletterSubscriberController', [ | ||
'only' => ['destroy'], | ||
'parameters' => ['newsletter-subscribers' => 'id'], | ||
]); | ||
}); | ||
|
||
$router->post('newsletter/subscribe', [ | ||
'uses' => 'NewsletterController@create', | ||
]); | ||
$router->group([ | ||
'namespace' => 'Views', | ||
], function ($router) { | ||
$router->get('admin/newsletter', [ | ||
'uses' => 'AdminController@index', | ||
'middleware' => ['auth:web', 'can:sudo'], | ||
'as' => 'newsletter.admin.index', | ||
]); | ||
|
||
$router->get('newsletter/verify', [ | ||
'uses' => 'NewsletterController@created', | ||
]); | ||
$router->get('newsletter', [ | ||
'uses' => 'NewsletterController@index', | ||
]); | ||
|
||
$router->get('newsletter/verify/{id}/{hash}', [ | ||
'uses' => 'NewsletterController@verify', | ||
'middleware' => ['signed'], | ||
'as' => 'newsletter.verify', | ||
]); | ||
$router->post('newsletter/subscribe', [ | ||
'uses' => 'NewsletterController@create', | ||
]); | ||
|
||
$router->get('newsletter/subscribed', [ | ||
'uses' => 'NewsletterController@subscribed', | ||
]); | ||
$router->get('newsletter/verify', [ | ||
'uses' => 'NewsletterController@created', | ||
]); | ||
|
||
$router->get('newsletter/unsubscribe', [ | ||
'uses' => 'NewsletterController@unsubscribe', | ||
]); | ||
$router->get('newsletter/verify/{id}/{hash}', [ | ||
'uses' => 'NewsletterController@verify', | ||
'middleware' => ['signed'], | ||
'as' => 'newsletter.verify', | ||
]); | ||
|
||
$router->post('newsletter/unsubscribe', [ | ||
'uses' => 'NewsletterController@destroy', | ||
]); | ||
$router->get('newsletter/subscribed', [ | ||
'uses' => 'NewsletterController@subscribed', | ||
]); | ||
|
||
$router->get('newsletter/unsubscribed', [ | ||
'uses' => 'NewsletterController@unsubscribed', | ||
]); | ||
$router->get('newsletter/unsubscribe', [ | ||
'uses' => 'NewsletterController@unsubscribe', | ||
]); | ||
|
||
$router->post('newsletter/unsubscribe', [ | ||
'uses' => 'NewsletterController@destroy', | ||
]); | ||
|
||
$router->group([ | ||
'namespace' => 'Api', | ||
'prefix' => 'api/v1', | ||
'middleware' => ['api', 'auth:web,api'], | ||
], function ($router) { | ||
$router->resource('newsletter-subscribers', 'NewsletterSubscriberController', [ | ||
'only' => ['destroy'], | ||
'parameters' => ['newsletter-subscribers' => 'id'], | ||
$router->get('newsletter/unsubscribed', [ | ||
'uses' => 'NewsletterController@unsubscribed', | ||
]); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
@extends('admin.base') | ||
|
||
@section('title', 'Newsletter subscribers admin area') | ||
|
||
@section('admin-content') | ||
<form class="form-inline inline-block-form" action="{{route('newsletter.admin.index')}}" method="get"> | ||
<input class="form-control" type="text" name="q" placeholder="Search subscribers" value="{{$query}}"> | ||
</form> | ||
@if ($query) | ||
<a href="{{route('newsletter.admin.index')}}" class="btn btn-info" title="Clear filtering"><i class="fas fa-times"></i></a> | ||
@endif | ||
|
||
<table class="table table-hover"> | ||
<thead> | ||
<tr> | ||
<th>Email</th> | ||
<th>Subscribed</th> | ||
<th></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
@forelse($subscribers as $s) | ||
<tr> | ||
<td> | ||
<a href="mailto:{{$s->email}}">{{$s->email}}</a> | ||
</td> | ||
<td title="{{$s->created_at}}"> | ||
{{$s->created_at->diffForHumans()}} | ||
</td> | ||
<td> | ||
<form class="form-inline clearfix" action="{{url('api/v1/newsletter-subscribers', $s->id)}}" method="post" onsubmit="return confirm('Are you sure you want to delete {{$s->email}}?')"> | ||
<button type="submit" class="btn btn-xs btn-default pull-right" title="Delete subscriber {{$s->email}}"><i class="fa fa-trash"></i></button> | ||
<input type="hidden" name="_token" value="{{ csrf_token() }}"> | ||
<input type="hidden" name="_method" value="delete"> | ||
<input type="hidden" name="_redirect" value="{{ route('newsletter.admin.index') }}"> | ||
</form> | ||
</td> | ||
</tr> | ||
@empty | ||
<tr> | ||
<td colspan="5" class="text-muted"> | ||
@if ($query) | ||
No subscribers found for query "{{$query}}". | ||
@else | ||
No subscribers found. | ||
@endif | ||
</td> | ||
</tr> | ||
@endforelse | ||
</tbody> | ||
</table> | ||
<nav class="text-center"> | ||
{{$subscribers->links()}} | ||
</nav> | ||
@endsection |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<li role="presentation"@if(Request::is('admin/newsletter')) class="active" @endif><a href="{{route('newsletter.admin.index')}}">Newsletter</a></li> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
namespace Biigle\Tests\Modules\Newsletter\Http\Controllers\Views; | ||
|
||
use Biigle\Modules\Newsletter\NewsletterSubscriber; | ||
use Biigle\Modules\Newsletter\Notifications\VerifyEmail; | ||
use Biigle\Modules\Newsletter\Notifications\Unsubscribed; | ||
use Biigle\Tests\UserTest; | ||
use Honeypot; | ||
use Illuminate\Support\Facades\Notification; | ||
use ApiTestCase; | ||
use View; | ||
|
||
class AdminControllerTest extends ApiTestCase | ||
{ | ||
public function testIndex() | ||
{ | ||
$this->beUser(); | ||
$this->get('admin/newsletter')->assertStatus(403); | ||
|
||
$this->beGlobalAdmin(); | ||
$this->get('admin/newsletter') | ||
->assertSuccessful() | ||
->assertViewIs('newsletter::admin.index'); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
.../Controllers/NewsletterControllerTest.php → ...ollers/Views/NewsletterControllerTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters