From adc117c2483e31658071def37b935ab5b38407aa Mon Sep 17 00:00:00 2001 From: Hyleus Date: Tue, 10 Apr 2018 15:26:43 +0200 Subject: [PATCH 1/4] Use percent for poll values --- app/Http/Controllers/PollController.php | 6 +++++- app/Poll.php | 9 +++++++++ resources/views/poll/result.blade.php | 7 +++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/PollController.php b/app/Http/Controllers/PollController.php index 430becfc98..9a05a7f275 100644 --- a/app/Http/Controllers/PollController.php +++ b/app/Http/Controllers/PollController.php @@ -80,7 +80,11 @@ public function vote(VoteOnPoll $request) public function result($slug) { $poll = Poll::whereSlug($slug)->firstOrFail(); + $map = [ + 'poll' => $poll, + 'total_votes' => $poll->totalVotes() + ]; - return view('poll.result', compact('poll')); + return view('poll.result', $map); } } diff --git a/app/Poll.php b/app/Poll.php index c8f82f692a..68fa4d701a 100644 --- a/app/Poll.php +++ b/app/Poll.php @@ -76,4 +76,13 @@ public function makeSlugFromTitle($title) $count = $this->where('slug', 'LIKE', "%$slug%")->count(); return $count ? "{$slug}-{$count}" : $slug; } + + public function totalVotes() + { + $result = 0; + foreach ($this->options as $option) { + $result += $option->votes; + } + return $result; + } } diff --git a/resources/views/poll/result.blade.php b/resources/views/poll/result.blade.php index e46d7a8b53..c0472a56cc 100755 --- a/resources/views/poll/result.blade.php +++ b/resources/views/poll/result.blade.php @@ -34,10 +34,13 @@
@foreach ($poll->options as $option) + @php + $vote_value = $total_votes !== 0 ? ($option->votes / $total_votes) * 100 : 0; + @endphp {{ $option->name }}{{ $option->votes }} {{ trans('poll.votes') }}
-
- {{ $option->votes }} +
+ {{ $vote_value }}%
@endforeach From ca92f390972bb77b15a3bb3d161aafc686ed29e7 Mon Sep 17 00:00:00 2001 From: Hyleus Date: Tue, 10 Apr 2018 15:59:58 +0200 Subject: [PATCH 2/4] Redirect to result when user has already voted --- app/Http/Controllers/PollController.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Http/Controllers/PollController.php b/app/Http/Controllers/PollController.php index 9a05a7f275..8bd9f51638 100644 --- a/app/Http/Controllers/PollController.php +++ b/app/Http/Controllers/PollController.php @@ -45,6 +45,12 @@ public function index() public function show($slug) { $poll = Poll::whereSlug($slug)->firstOrFail(); + $user = auth()->user(); + $user_has_voted = $poll->voters->where('user_id', $user->id)->isNotEmpty(); + + if ($user_has_voted) { + return $this->result($slug); + } return view('poll.show', compact('poll')); } From c43650839953c3e4be5a07743c737081c8c33c38 Mon Sep 17 00:00:00 2001 From: Hyleus Date: Tue, 10 Apr 2018 16:02:05 +0200 Subject: [PATCH 3/4] Use rounding for poll percents --- resources/views/poll/result.blade.php | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/views/poll/result.blade.php b/resources/views/poll/result.blade.php index c0472a56cc..c5f67346ef 100755 --- a/resources/views/poll/result.blade.php +++ b/resources/views/poll/result.blade.php @@ -36,6 +36,7 @@ @foreach ($poll->options as $option) @php $vote_value = $total_votes !== 0 ? ($option->votes / $total_votes) * 100 : 0; + $vote_value = round($vote_value, 2); @endphp {{ $option->name }}{{ $option->votes }} {{ trans('poll.votes') }}
From 0fb3a56f33f74f98dbce84e2f79b4c7102b64612 Mon Sep 17 00:00:00 2001 From: Hyleus Date: Tue, 10 Apr 2018 16:16:33 +0200 Subject: [PATCH 4/4] Mention poll votes in shoutbox --- app/Http/Controllers/PollController.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Http/Controllers/PollController.php b/app/Http/Controllers/PollController.php index 8bd9f51638..9dc3283939 100644 --- a/app/Http/Controllers/PollController.php +++ b/app/Http/Controllers/PollController.php @@ -19,6 +19,7 @@ use App\Http\Requests; use App\Http\Requests\StorePoll; use App\Http\Requests\VoteOnPoll; +use App\Shoutbox; use \Toastr; @@ -78,6 +79,11 @@ public function vote(VoteOnPoll $request) ]); } + $slug = $poll->slug; + $url = config('app.url'); + $title = $poll->title; + Shoutbox::create(["user" => 1, "mentions" => 1, "message" => "An user has voted on poll [url=${url}/poll/$slug]${title}[/url]"]); + cache()->forget("shoutbox_messages"); Toastr::success('Your vote has been counted.', 'Yay!', ['options']); return redirect('poll/' . $poll->slug . '/result');