189 lines
7.1 KiB
PHP
189 lines
7.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\IssueManagement;
|
|
use App\Models\MediaMonitoring;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class StatisticController extends Controller
|
|
{
|
|
public function index(Request $request){
|
|
|
|
$statistics = [
|
|
[
|
|
'name' => 'Aktivitas Login',
|
|
'category' => 'login-activities',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Jurnalis',
|
|
'category' => 'journalists',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Kerja Sama Media',
|
|
'category' => 'media-cooperations',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Laporan Bukti Tayang',
|
|
'category' => 'reports',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Media',
|
|
'category' => 'media',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Monitoring Media & Manajemen Isu',
|
|
'category' => 'media-monitorings-issue-management',
|
|
'is_available' => true
|
|
],
|
|
[
|
|
'name' => 'Penyelesaian Kerja Sama',
|
|
'category' => 'cooperation-completions',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Pengguna',
|
|
'category' => 'users',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Perusahaan',
|
|
'category' => 'companies',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Rekap Konten',
|
|
'category' => 'content-recaps',
|
|
'is_available' => false
|
|
],
|
|
[
|
|
'name' => 'Pengunjung Website',
|
|
'category' => 'website-visitors',
|
|
'is_available' => false
|
|
],
|
|
];
|
|
|
|
|
|
return view('dashboard.statistics.index', [
|
|
'title' => 'Statistik',
|
|
'statistics' => $statistics
|
|
]);
|
|
}
|
|
|
|
public function show(Request $request, $category){
|
|
|
|
$data = [
|
|
'category' => $category,
|
|
'year' => $request->input('year') ? $request->input('year') : null,
|
|
'from_month' => $request->input('from_month') ? $request->input('from_month') : null,
|
|
'to_month' => $request->input('to_month') ? $request->input('to_month') : null,
|
|
];
|
|
|
|
$upComings = [
|
|
'login-activities',
|
|
'journalists',
|
|
'media-cooperations',
|
|
'reports',
|
|
'media',
|
|
'cooperation-completions',
|
|
'users',
|
|
'companies',
|
|
'content-recaps',
|
|
'website-visitors',
|
|
];
|
|
|
|
if(in_array($category, $upComings)){
|
|
return redirect()->back()->with('waiting-status', 'Dalam pegembangan');
|
|
}
|
|
|
|
$year = $request->input('year') ? $request->input('year') : Carbon::now()->year;
|
|
|
|
switch($category){
|
|
case 'media-monitorings-issue-management':
|
|
$data['title'] = 'Statistik Monitoring Media & Manajemen Isu';
|
|
// Statistik Isu
|
|
$issues = IssueManagement::with(['mediaMonitoring']);
|
|
$mediaMonitorings = MediaMonitoring::with(['issue']);
|
|
|
|
if($year !== 'all'){
|
|
$issues->whereYear('created_at', $year);
|
|
$mediaMonitorings->whereYear('created_at', $year);
|
|
}
|
|
|
|
$issues = $issues->get();
|
|
$mediaMonitorings = $mediaMonitorings->get();
|
|
|
|
|
|
$issueCounts = $issues->groupBy('issue')->map(function ($group) {
|
|
return $group->count();
|
|
});
|
|
|
|
$data['crisisIssue'] = $issueCounts->get('krisis', 0);
|
|
$data['negativeIssue'] = $issueCounts->get('negatif', 0);
|
|
$data['neutralIssue'] = $issueCounts->get('netral', 0);
|
|
$data['positiveIssue'] = $issueCounts->get('positif', 0);
|
|
// Akhir Statistik Isu
|
|
|
|
// Statistik Monitoring Media
|
|
$mediaMonitoringCount = $mediaMonitorings->groupBy('channel')->map(function ($group) {
|
|
return $group->count();
|
|
});
|
|
$data['facebookMediaMonitoring'] = $mediaMonitoringCount->get('facebook', 0);
|
|
$data['twitterMediaMonitoring'] = $mediaMonitoringCount->get('twitter', 0);
|
|
$data['websiteMediaMonitoring'] = $mediaMonitoringCount->get('website', 0);
|
|
$data['youtubeMediaMonitoring'] = $mediaMonitoringCount->get('youtube', 0);
|
|
$data['instagramMediaMonitoring'] = $mediaMonitoringCount->get('instagram', 0);
|
|
$data['tiktokMediaMonitoring'] = $mediaMonitoringCount->get('tiktok', 0);
|
|
$data['cetakMediaMonitoring'] = $mediaMonitoringCount->get('cetak', 0);
|
|
// Akhir Statistik Monitoring Media
|
|
|
|
// Media Monitoring 2 (pakai koleksi yang sudah ada)
|
|
$mediaMonitoringMonthly = array_fill(0, 12, 0); // Init array 12 bulan
|
|
$mediaMonitorings->groupBy(function ($item) {
|
|
return (int) $item->created_at->format('m'); // bulan sebagai int
|
|
})->each(function ($group, $month) use (&$mediaMonitoringMonthly) {
|
|
$mediaMonitoringMonthly[$month - 1] = $group->count();
|
|
});
|
|
|
|
// Issue Management 2 (pakai koleksi yang sudah ada)
|
|
$issueManagementMonthly = array_fill(0, 12, 0);
|
|
$issues->groupBy(function ($item) {
|
|
return (int) $item->created_at->format('m');
|
|
})->each(function ($group, $month) use (&$issueManagementMonthly) {
|
|
$issueManagementMonthly[$month - 1] = $group->count();
|
|
});
|
|
|
|
$mediaMonitoringWithoutIssue = MediaMonitoring::doesntHave('issue')
|
|
->when($year !== 'all', function ($query) use ($year) {
|
|
$query->whereYear('created_at', $year);
|
|
})
|
|
->get();
|
|
|
|
$mediaMonitoringWithIssue = MediaMonitoring::has('issue')
|
|
->when($year !== 'all', function ($query) use ($year) {
|
|
$query->whereYear('created_at', $year);
|
|
})
|
|
->get();
|
|
|
|
$data['mediaMonitoringWithoutIssueCount'] = $mediaMonitoringWithoutIssue->count();
|
|
$data['mediaMonitoringWithIssueCount'] = $mediaMonitoringWithIssue->count();
|
|
|
|
$data['mediaMonitoringMonthly'] = $mediaMonitoringMonthly;
|
|
$data['issueManagementMonthly'] = $issueManagementMonthly;
|
|
|
|
return view('dashboard.statistics.show.media-monitoring-issue-management', $data);
|
|
case 'issue-managements':
|
|
$data['title'] = 'Statistik Manajemen Isu';
|
|
break;
|
|
}
|
|
}
|
|
}
|