mirror of
https://github.com/LinkStackOrg/LinkStack.git
synced 2025-03-20 13:30:11 +01:00
Speed up dashboard load time
This commit is contained in:
parent
3019efef0d
commit
ab8a660195
@ -34,22 +34,14 @@ class AdminController extends Controller
|
||||
//Statistics of the number of clicks and links
|
||||
public function index()
|
||||
{
|
||||
$userId = Auth::user()->id;
|
||||
$littlelink_name = Auth::user()->littlelink_name;
|
||||
return view('panel/index');
|
||||
}
|
||||
|
||||
$links = Link::where('user_id', $userId)->count();
|
||||
$clicks = Link::where('user_id', $userId)->sum('click_number');
|
||||
|
||||
$userNumber = User::count();
|
||||
$siteLinks = Link::count();
|
||||
$siteClicks = Link::sum('click_number');
|
||||
|
||||
$lastMonthCount = User::where('created_at', '>=', Carbon::now()->subDays(30))->count();
|
||||
$lastWeekCount = User::where('created_at', '>=', Carbon::now()->subDays(7))->count();
|
||||
$last24HrsCount = User::where('created_at', '>=', Carbon::now()->subHours(24))->count();
|
||||
$updatedLast30DaysCount = User::where('updated_at', '>=', Carbon::now()->subDays(30))->count();
|
||||
$updatedLast7DaysCount = User::where('updated_at', '>=', Carbon::now()->subDays(7))->count();
|
||||
$updatedLast24HrsCount = User::where('updated_at', '>=', Carbon::now()->subHours(24))->count();
|
||||
public function stats()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$userId = $user->id;
|
||||
$littlelink_name = $user->littlelink_name;
|
||||
|
||||
$topLinks = Link::where('user_id', $userId)
|
||||
->whereNotNull('link')
|
||||
@ -58,34 +50,62 @@ class AdminController extends Controller
|
||||
->take(5)
|
||||
->get();
|
||||
|
||||
$pageStats = [
|
||||
'visitors' => [
|
||||
'all' => visits('App\Models\User', $littlelink_name)->count(),
|
||||
'day' => visits('App\Models\User', $littlelink_name)->period('day')->count(),
|
||||
'week' => visits('App\Models\User', $littlelink_name)->period('week')->count(),
|
||||
'month' => visits('App\Models\User', $littlelink_name)->period('month')->count(),
|
||||
'year' => visits('App\Models\User', $littlelink_name)->period('year')->count(),
|
||||
],
|
||||
'os' => visits('App\Models\User', $littlelink_name)->operatingSystems(),
|
||||
'referers' => visits('App\Models\User', $littlelink_name)->refs(),
|
||||
'countries' => visits('App\Models\User', $littlelink_name)->countries(),
|
||||
];
|
||||
// Combine queries for user-specific data
|
||||
$userLinksData = Link::where('user_id', $userId)
|
||||
->selectRaw('COUNT(*) as links, SUM(click_number) as clicks')
|
||||
->first();
|
||||
|
||||
return view('panel/index', [
|
||||
'lastMonthCount' => $lastMonthCount,
|
||||
'lastWeekCount' => $lastWeekCount,
|
||||
'last24HrsCount' => $last24HrsCount,
|
||||
'updatedLast30DaysCount' => $updatedLast30DaysCount,
|
||||
'updatedLast7DaysCount' => $updatedLast7DaysCount,
|
||||
'updatedLast24HrsCount' => $updatedLast24HrsCount,
|
||||
'toplinks' => $topLinks,
|
||||
'links' => $links,
|
||||
'clicks' => $clicks,
|
||||
'pageStats' => $pageStats,
|
||||
'littlelink_name' => $littlelink_name,
|
||||
'siteLinks' => $siteLinks,
|
||||
'siteClicks' => $siteClicks,
|
||||
'userNumber' => $userNumber
|
||||
if ($user->role == 'admin') {
|
||||
|
||||
// Combine queries for site-wide data
|
||||
$siteLinksData = Link::selectRaw('COUNT(*) as siteLinks, SUM(click_number) as siteClicks')
|
||||
->first();
|
||||
|
||||
// Combine queries for user counts
|
||||
$userCounts = User::selectRaw('COUNT(*) as userNumber,
|
||||
SUM(CASE WHEN created_at >= ? THEN 1 ELSE 0 END) as lastMonthCount,
|
||||
SUM(CASE WHEN created_at >= ? THEN 1 ELSE 0 END) as lastWeekCount,
|
||||
SUM(CASE WHEN created_at >= ? THEN 1 ELSE 0 END) as last24HrsCount,
|
||||
SUM(CASE WHEN updated_at >= ? THEN 1 ELSE 0 END) as updatedLast30DaysCount,
|
||||
SUM(CASE WHEN updated_at >= ? THEN 1 ELSE 0 END) as updatedLast7DaysCount,
|
||||
SUM(CASE WHEN updated_at >= ? THEN 1 ELSE 0 END) as updatedLast24HrsCount', [
|
||||
Carbon::now()->subDays(30),
|
||||
Carbon::now()->subDays(7),
|
||||
Carbon::now()->subHours(24),
|
||||
Carbon::now()->subDays(30),
|
||||
Carbon::now()->subDays(7),
|
||||
Carbon::now()->subHours(24)
|
||||
])->first();
|
||||
|
||||
$pageStats = [
|
||||
'visitors' => [
|
||||
'all' => visits('App\Models\User', $littlelink_name)->count(),
|
||||
'day' => visits('App\Models\User', $littlelink_name)->period('day')->count(),
|
||||
'week' => visits('App\Models\User', $littlelink_name)->period('week')->count(),
|
||||
'month' => visits('App\Models\User', $littlelink_name)->period('month')->count(),
|
||||
'year' => visits('App\Models\User', $littlelink_name)->period('year')->count(),
|
||||
],
|
||||
'os' => visits('App\Models\User', $littlelink_name)->operatingSystems(),
|
||||
'referers' => visits('App\Models\User', $littlelink_name)->refs(),
|
||||
'countries' => visits('App\Models\User', $littlelink_name)->countries(),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
return view('studio/index', [
|
||||
'links' => $userLinksData->links ?? null,
|
||||
'clicks' => $userLinksData->clicks ?? null,
|
||||
'userNumber' => $userCounts->userNumber ?? null,
|
||||
'siteLinks' => $siteLinksData->siteLinks ?? null,
|
||||
'siteClicks' => $siteLinksData->siteClicks ?? null,
|
||||
'lastMonthCount' => $userCounts->lastMonthCount ?? null,
|
||||
'lastWeekCount' => $userCounts->lastWeekCount ?? null,
|
||||
'last24HrsCount' => $userCounts->last24HrsCount ?? null,
|
||||
'updatedLast30DaysCount' => $userCounts->updatedLast30DaysCount ?? null,
|
||||
'updatedLast7DaysCount' => $userCounts->updatedLast7DaysCount ?? null,
|
||||
'updatedLast24HrsCount' => $userCounts->updatedLast24HrsCount ?? null,
|
||||
'toplinks' => $topLinks ?? [],
|
||||
'pageStats' => $pageStats ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -2,178 +2,52 @@
|
||||
|
||||
|
||||
@section('content')
|
||||
<div class="conatiner-fluid content-inner mt-n5 py-0">
|
||||
<div class="row">
|
||||
<div id="site-stats" class="conatiner-fluid content-inner mt-n5 py-0">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
<h3 class="mb-4"><i class="bi bi-menu-up"></i> {{__('messages.Dashboard')}}</h3>
|
||||
<h3 class="mb-4"><i class="bi bi-menu-up"></i> {{ __('messages.Dashboard') }}</h3>
|
||||
|
||||
<section class="mb-3 text-center p-4 w-full">
|
||||
<div class=" d-flex">
|
||||
|
||||
<div class='p-2 h6'><i class="bi bi-link"></i> {{__('messages.Total Links:')}} <span class='text-primary'>{{ $links }} </span></div>
|
||||
|
||||
<div class='p-2 h6'><i class="bi bi-eye"></i> {{__('messages.Link Clicks:')}} <span class='text-primary'>{{ $clicks }}</span></div>
|
||||
</div>
|
||||
<div class='text-center w-100'>
|
||||
<a href="{{ url('/studio/links') }}">{{__('messages.View/Edit Links')}}</a>
|
||||
|
||||
</div>
|
||||
<div class='w-100 text-left'>
|
||||
<h6><i class="bi bi-sort-up"></i> {{__('messages.Top Links:')}}</h6>
|
||||
|
||||
@php $i = 0; @endphp
|
||||
|
||||
|
||||
<div class="bd-example" >
|
||||
<ol class="list-group list-group-numbered" style="text-align: left;">
|
||||
@if($toplinks == "[]")
|
||||
<div class="container">
|
||||
<div class="row justify-content-center mt-3">
|
||||
<div class="col-6 text-center">
|
||||
<p class="p-2">{{__('messages.You haven’t added any links yet')}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
@foreach($toplinks as $link)
|
||||
@php $linkName = str_replace('default ','',$link->name) @endphp
|
||||
@php $i++; @endphp
|
||||
|
||||
@if($link->name !== "phone" && $link->name !== 'heading' && $link->button_id !== 96)
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto text-truncate">
|
||||
<div class="fw-bold text-truncate">{{ $link->title }}</div>
|
||||
{{ $link->link }}
|
||||
</div>
|
||||
<span class="badge bg-primary rounded-pill p-2">{{ $link->click_number }} - {{__('messages.clicks')}}</span>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
@if(auth()->user()->role == 'admin' && !config('linkstack.single_user_mode'))
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{__('messages.Site statistics:')}}</div><br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi-share-fill"> {{ $siteLinks }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Total links')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi-eye-fill"> {{ $siteClicks }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Total clicks')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi bi-person-fill"> {{ $userNumber }}</i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Total users')}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="mb-3 text-center p-4 w-full">
|
||||
<div class="spinner-border text-primary" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
@push('sidebar-stylesheets')
|
||||
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
|
||||
@endpush
|
||||
@push('sidebar-scripts')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
async function fetchAndReplaceContent() {
|
||||
try {
|
||||
const response = await $.ajax({
|
||||
url: "{{ url('dashboard/site-stats') }}",
|
||||
method: 'GET',
|
||||
dataType: 'html'
|
||||
});
|
||||
$('#site-stats').fadeOut(0, function() {
|
||||
$('#site-stats').html(response).fadeIn(400);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error fetching content:', error);
|
||||
}
|
||||
}
|
||||
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{__('messages.Registrations:')}}</div><br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $lastMonthCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 30 days')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $lastWeekCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 7 days')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $last24HrsCount }}</i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 24 hours')}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{__('messages.Active users:')}}</div><br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast30DaysCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 30 days')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast7DaysCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 7 days')}}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast24HrsCount }}</i></strong></h3>
|
||||
<span class="text-muted">{{__('messages.Last 24 hours')}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
fetchAndReplaceContent();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@endsection
|
||||
|
186
resources/views/studio/index.blade.php
Normal file
186
resources/views/studio/index.blade.php
Normal file
@ -0,0 +1,186 @@
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
<h3 class="mb-4"><i class="bi bi-menu-up"></i> {{ __('messages.Dashboard') }}</h3>
|
||||
|
||||
<section class="mb-3 text-center p-4 w-full">
|
||||
<div class=" d-flex">
|
||||
|
||||
<div class='p-2 h6'><i class="bi bi-link"></i> {{ __('messages.Total Links:') }} <span
|
||||
class='text-primary'>{{ $links }} </span></div>
|
||||
|
||||
<div class='p-2 h6'><i class="bi bi-eye"></i> {{ __('messages.Link Clicks:') }} <span
|
||||
class='text-primary'>{{ $clicks }}</span></div>
|
||||
</div>
|
||||
<div class='text-center w-100'>
|
||||
<a href="{{ url('/studio/links') }}">{{ __('messages.View/Edit Links') }}</a>
|
||||
|
||||
</div>
|
||||
<div class='w-100 text-left'>
|
||||
<h6><i class="bi bi-sort-up"></i> {{ __('messages.Top Links:') }}</h6>
|
||||
|
||||
@php $i = 0; @endphp
|
||||
|
||||
|
||||
<div class="bd-example">
|
||||
<ol class="list-group list-group-numbered" style="text-align: left;">
|
||||
@if ($toplinks == '[]')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center mt-3">
|
||||
<div class="col-6 text-center">
|
||||
<p class="p-2">
|
||||
{{ __('messages.You haven’t added any links yet') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
@foreach ($toplinks as $link)
|
||||
@php $linkName = str_replace('default ','',$link->name) @endphp
|
||||
@php $i++; @endphp
|
||||
|
||||
@if ($link->name !== 'phone' && $link->name !== 'heading' && $link->button_id !== 96)
|
||||
<li
|
||||
class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto text-truncate">
|
||||
<div class="fw-bold text-truncate">{{ $link->title }}</div>
|
||||
{{ $link->link }}
|
||||
</div>
|
||||
<span
|
||||
class="badge bg-primary rounded-pill p-2">{{ $link->click_number }}
|
||||
- {{ __('messages.clicks') }}</span>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (auth()->user()->role == 'admin' && !config('linkstack.single_user_mode'))
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{ __('messages.Site statistics:') }}</div>
|
||||
<br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi-share-fill">
|
||||
{{ $siteLinks }} </i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Total links') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi-eye-fill"> {{ $siteClicks }}
|
||||
</i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Total clicks') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong><i class="bi bi bi-person-fill">
|
||||
{{ $userNumber }}</i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Total users') }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{ __('messages.Registrations:') }}</div>
|
||||
<br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $lastMonthCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Last 30 days') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $lastWeekCount }} </i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Last 7 days') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $last24HrsCount }}</i></strong></h3>
|
||||
<span class="text-muted">{{ __('messages.Last 24 hours') }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card rounded">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
|
||||
<!-- Section: Design Block -->
|
||||
<section class="mb-3 text-gray-800 text-center p-4 w-full">
|
||||
<div class='font-weight-bold text-left h3'>{{ __('messages.Active users:') }}</div><br>
|
||||
<div class="d-flex flex-wrap justify-content-around">
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast30DaysCount }} </i></strong>
|
||||
</h3>
|
||||
<span class="text-muted">{{ __('messages.Last 30 days') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast7DaysCount }} </i></strong>
|
||||
</h3>
|
||||
<span class="text-muted">{{ __('messages.Last 7 days') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="p-2">
|
||||
<h3 class="text-primary"><strong> {{ $updatedLast24HrsCount }}</i></strong>
|
||||
</h3>
|
||||
<span class="text-muted">{{ __('messages.Last 24 hours') }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
@ -99,6 +99,7 @@ Route::group([
|
||||
if(env('FORCE_ROUTE_HTTPS') == 'true'){URL::forceScheme('https');}
|
||||
if(isset($_COOKIE['LinkCount'])){if($_COOKIE['LinkCount'] == '20'){$LinkPage = 'showLinks20';}elseif($_COOKIE['LinkCount'] == '30'){$LinkPage = 'showLinks30';}elseif($_COOKIE['LinkCount'] == 'all'){$LinkPage = 'showLinksAll';} else {$LinkPage = 'showLinks';}} else {$LinkPage = 'showLinks';} //Shows correct link number
|
||||
Route::get('/dashboard', [AdminController::class, 'index'])->name('panelIndex');
|
||||
Route::get('/dashboard/site-stats', [AdminController::class, 'stats']);
|
||||
Route::get('/studio/index', function(){return redirect(url('dashboard'));});
|
||||
Route::get('/studio/add-link', [UserController::class, 'AddUpdateLink'])->name('showButtons');
|
||||
Route::post('/studio/edit-link', [UserController::class, 'saveLink'])->name('addLink');
|
||||
|
Loading…
x
Reference in New Issue
Block a user