From 8fb8677406dedca773c430553487a1e20c16a6d5 Mon Sep 17 00:00:00 2001
From: shibafu
Date: Sun, 24 May 2020 19:03:15 +0900
Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=95=E3=82=A3=E3=83=BC?=
=?UTF-8?q?=E3=83=AB=E3=83=88=E3=83=83=E3=83=97=E3=81=AB=E6=9C=80=E8=BF=91?=
=?UTF-8?q?=E3=81=AE=E3=82=B7=E3=82=B3=E8=8D=89=E3=82=92=E7=A7=BB=E5=8B=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/Http/Controllers/UserController.php | 36 ++++++++++++++++++-------
resources/assets/js/user/profile.js | 15 +++++++++++
resources/views/user/profile.blade.php | 18 +++++++++++++
webpack.mix.js | 1 +
4 files changed, 60 insertions(+), 10 deletions(-)
create mode 100644 resources/assets/js/user/profile.js
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index 3c51369..618997c 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -62,7 +62,18 @@ SQL
->limit(10)
->get();
- return view('user.profile')->with(compact('user', 'ejaculations', 'tags'));
+ // シコ草
+ $countByDayQuery = $this->countEjaculationByDay($user)
+ ->where('ejaculated_date', '>=', now()->startOfMonth()->subMonths(9))
+ ->where('ejaculated_date', '<', now()->addMonth()->startOfMonth())
+ ->get();
+ $countByDay = [];
+ foreach ($countByDayQuery as $data) {
+ $date = Carbon::createFromFormat('Y/m/d', $data->date);
+ $countByDay[$date->timestamp] = $data->count;
+ }
+
+ return view('user.profile')->with(compact('user', 'ejaculations', 'tags', 'countByDay'));
}
public function stats($name)
@@ -223,16 +234,8 @@ SQL
$dateCondition[] = ['ejaculated_date', '>=', $dateSince];
}
- $groupByDay = Ejaculation::select(DB::raw(
- <<<'SQL'
-to_char(ejaculated_date, 'YYYY/MM/DD') AS "date",
-count(*) AS "count"
-SQL
- ))
- ->where('user_id', $user->id)
+ $groupByDay = $this->countEjaculationByDay($user)
->where($dateCondition)
- ->groupBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
- ->orderBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
->get();
$groupByHour = Ejaculation::select(DB::raw(
@@ -287,4 +290,17 @@ SQL
'hourlySum' => array_values($hourlySum),
];
}
+
+ private function countEjaculationByDay(User $user)
+ {
+ return Ejaculation::select(DB::raw(
+ <<<'SQL'
+to_char(ejaculated_date, 'YYYY/MM/DD') AS "date",
+count(*) AS "count"
+SQL
+ ))
+ ->where('user_id', $user->id)
+ ->groupBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
+ ->orderBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"));
+ }
}
diff --git a/resources/assets/js/user/profile.js b/resources/assets/js/user/profile.js
new file mode 100644
index 0000000..24cba77
--- /dev/null
+++ b/resources/assets/js/user/profile.js
@@ -0,0 +1,15 @@
+import CalHeatMap from 'cal-heatmap';
+
+if (document.getElementById('cal-heatmap')) {
+ new CalHeatMap().init({
+ itemSelector: '#cal-heatmap',
+ domain: 'month',
+ subDomain: 'day',
+ domainLabelFormat: '%Y/%m',
+ weekStartOnMonday: false,
+ start: new Date().setMonth(new Date().getMonth() - 9),
+ range: 10,
+ data: JSON.parse(document.getElementById('count-by-day').textContent),
+ legend: [1, 2, 3, 4]
+ });
+}
diff --git a/resources/views/user/profile.blade.php b/resources/views/user/profile.blade.php
index 5823026..978a39a 100644
--- a/resources/views/user/profile.blade.php
+++ b/resources/views/user/profile.blade.php
@@ -2,6 +2,12 @@
@section('title', $user->display_name . ' (@' . $user->name . ')')
+@push('head')
+ @if (Route::currentRouteName() === 'user.profile')
+
+ @endif
+@endpush
+
@section('sidebar')
{{-- TODO: タイムラインとオカズのテンプレを分けたら条件外す --}}
@if (Route::currentRouteName() === 'user.profile')
@@ -32,6 +38,11 @@
このユーザはチェックイン履歴を公開していません。
@else
+ @if ($ejaculations->count() !== 0 && $ejaculations->currentPage() === 1)
+ Shikontributions
+
+
+ @endif
@forelse ($ejaculations as $ejaculation)
-
@@ -116,3 +127,10 @@
@endslot
@endcomponent
@endsection
+
+@push('script')
+
+
+
+@endpush
+
diff --git a/webpack.mix.js b/webpack.mix.js
index 59b6cee..94f9909 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -14,6 +14,7 @@ require('laravel-mix-bundle-analyzer')
mix.js('resources/assets/js/app.js', 'public/js')
.js('resources/assets/js/home.js', 'public/js')
+ .js('resources/assets/js/user/profile.js', 'public/js/user')
.js('resources/assets/js/user/stats.js', 'public/js/user')
.js('resources/assets/js/setting/privacy.js', 'public/js/setting')
.js('resources/assets/js/setting/import.js', 'public/js/setting')