diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 0bf49da89..8c9d7e218 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -11,6 +11,7 @@ use App\{ Profile, Report, Status, + Story, User }; use DB, Cache; @@ -27,6 +28,7 @@ use App\Http\Controllers\Admin\{ }; use Illuminate\Validation\Rule; use App\Services\AdminStatsService; +use App\Services\StoryService; class AdminController extends Controller { @@ -465,4 +467,11 @@ class AdminController extends Controller return response()->json($res); } + + public function stories(Request $request) + { + $stories = Story::with('profile')->latest()->paginate(10); + $stats = StoryService::adminStats(); + return view('admin.stories.home', compact('stories', 'stats')); + } } diff --git a/resources/views/admin/partial/sidenav.blade.php b/resources/views/admin/partial/sidenav.blade.php index 88b291eb5..ff204756e 100644 --- a/resources/views/admin/partial/sidenav.blade.php +++ b/resources/views/admin/partial/sidenav.blade.php @@ -36,6 +36,13 @@ + + - -
diff --git a/resources/views/admin/stories/home.blade.php b/resources/views/admin/stories/home.blade.php new file mode 100644 index 000000000..d8d00d907 --- /dev/null +++ b/resources/views/admin/stories/home.blade.php @@ -0,0 +1,147 @@ +@extends('admin.partial.template-full') + +@section('section') + +
+
+
+
+
+

Stories

+
+
+
+
+
+
+
+
+
Active Stories
+ {{$stats['active']['today']}} +
+
+
+ +
+
+
+

+ {{$stats['active']['month']}} + in last 30 days +

+
+
+
+
+
+
+
+
+
Remote Stories
+ {{$stats['remote']['month']}} +
+
+
+ +
+
+
+

+ {{$stats['remote']['month']}} + in last 30 days +

+
+
+
+
+
+
Total Stories
+ {{$stats['total']}} +
+
+
Stories Per User
+ {{$stats['avg_spu']}} +
+
+
+
+
Storage Used
+ {{$stats['storage']['sum']}} +
+
+
Average Media Size
+ {{$stats['storage']['average']}} +
+
+
+
+
Average Duration
+ {{$stats['avg_duration']}}s +
+
+
Average Type
+ {{$stats['avg_type']}} +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + @foreach($stories as $story) + + + + + + + + + + @endforeach + +
#UsernameTypeView CountCreatedExpires
+ + {{$story->id}} + + {{$story->profile->username}}{{$story->type}}{{$story->view_count ?? 0}}{{$story->created_at->diffForHumans(null, true, true, true)}}{{optional($story->expires_at)->diffForHumans(null, true, true, true)}} + +
+
+
+ {{$stories->links()}} +
+
+@endsection + +@push('scripts') + +@endpush diff --git a/routes/web.php b/routes/web.php index 5c5e423bc..688d5cfe5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,6 +14,8 @@ Route::domain(config('pixelfed.domain.admin'))->prefix('i/admin')->group(functio Route::get('reports/appeals', 'AdminController@appeals'); Route::get('reports/appeal/{id}', 'AdminController@showAppeal'); Route::post('reports/appeal/{id}', 'AdminController@updateAppeal'); + Route::redirect('stories', '/stories/list'); + Route::get('stories/list', 'AdminController@stories')->name('admin.stories'); Route::redirect('statuses', '/statuses/list'); Route::get('statuses/list', 'AdminController@statuses')->name('admin.statuses'); Route::get('statuses/show/{id}', 'AdminController@showStatus'); @@ -231,18 +233,17 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::group(['prefix' => 'admin'], function () { Route::post('moderate', 'Api\AdminApiController@moderate'); }); - Route::group(['prefix' => 'stories'], function () { - Route::get('v0/recent', 'StoryController@apiV1Recent'); - Route::post('v0/add', 'StoryController@apiV1Add'); - Route::get('v0/fetch/{id}', 'StoryController@apiV1Fetch'); - Route::get('v0/profile/{id}', 'StoryController@apiV1Profile'); - Route::get('v0/exists/{id}', 'StoryController@apiV1Exists'); - Route::delete('v0/delete/{id}', 'StoryController@apiV1Delete'); - Route::get('v0/me', 'StoryController@apiV1Me'); - Route::get('v0/item/{id}', 'StoryController@apiV1Item'); - Route::post('v0/crop', 'StoryController@cropPhoto'); - Route::post('v0/publish', 'StoryController@publishStory'); - }); + // Route::group(['prefix' => 'stories'], function () { + // Route::get('v0/recent', 'StoryController@apiV1Recent'); + // Route::post('v0/add', 'StoryController@apiV1Add'); + // Route::get('v0/fetch/{id}', 'StoryController@apiV1Fetch'); + // Route::get('v0/profile/{id}', 'StoryController@apiV1Profile'); + // Route::get('v0/exists/{id}', 'StoryController@apiV1Exists'); + // Route::delete('v0/delete/{id}', 'StoryController@apiV1Delete'); + // Route::get('v0/item/{id}', 'StoryController@apiV1Item'); + // Route::post('v0/crop', 'StoryController@cropPhoto'); + // Route::post('v0/publish', 'StoryController@publishStory'); + // }); });