Skip to content

Commit 50e5f28

Browse files
authored
Merge pull request #1154 from HDInnovations/development
(Update) Poll System
2 parents 8cb017a + 9cf874d commit 50e5f28

File tree

14 files changed

+27
-106
lines changed

14 files changed

+27
-106
lines changed

app/Helpers/Helpers.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ function hrefPoll($poll)
5858
{
5959
$appurl = appurl();
6060

61-
return "{$appurl}/polls/{$poll->slug}";
61+
return "{$appurl}/polls/{$poll->id}";
6262
}
6363
}
6464

app/Http/Controllers/PollController.php

+11-41
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@ public function index()
5757
*
5858
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
5959
*/
60-
public function show(Request $request, $slug)
60+
public function show(Request $request, $id)
6161
{
62-
$poll = Poll::whereSlug($slug)->firstOrFail();
62+
$poll = Poll::findOrFail($id);
6363
$user = $request->user();
6464
$user_has_voted = $poll->voters->where('user_id', '=', $user->id)->isNotEmpty();
6565

6666
if ($user_has_voted) {
67-
return redirect('polls/'.$poll->slug.'/result')
67+
return redirect()->route('poll_results', ['id' => $poll->id])
6868
->withInfo('You have already vote on this poll. Here are the results.');
6969
}
7070

@@ -82,10 +82,11 @@ public function vote(VoteOnPoll $request)
8282
{
8383
$user = $request->user();
8484
$poll = Option::findOrFail($request->input('option.0'))->poll;
85-
86-
// Extract the logic to function validateVoter()
87-
if (!$this->validateVoter($request, $user, $poll)) {
88-
return redirect('polls/'.$poll->slug.'/result')
85+
$voted = Voter::where('user_id', '=', $user->id)
86+
->where('poll_id', '=', $poll->id)
87+
->exists();
88+
if ($voted) {
89+
return redirect()->route('poll_results', ['id' => $poll->id])
8990
->withErrors('Bro have already vote on this poll. Your vote has not been counted.');
9091
}
9192

@@ -98,7 +99,6 @@ public function vote(VoteOnPoll $request)
9899
$vote = new Voter();
99100
$vote->poll_id = $poll->id;
100101
$vote->user_id = $user->id;
101-
$vote->ip_address = $request->ip();
102102
$vote->save();
103103

104104
$poll_url = hrefPoll($poll);
@@ -108,7 +108,7 @@ public function vote(VoteOnPoll $request)
108108
"[url={$profile_url}]{$user->username}[/url] has voted on poll [url={$poll_url}]{$poll->title}[/url]"
109109
);
110110

111-
return redirect('polls/'.$poll->slug.'/result')
111+
return redirect()->route('poll_results', ['id' => $poll->id])
112112
->withSuccess('Your vote has been counted.');
113113
}
114114

@@ -119,44 +119,14 @@ public function vote(VoteOnPoll $request)
119119
*
120120
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
121121
*/
122-
public function result($slug)
122+
public function result($id)
123123
{
124-
$poll = Poll::whereSlug($slug)->firstOrFail();
124+
$poll = Poll::findOrFail($id);
125125
$map = [
126126
'poll' => $poll,
127127
'total_votes' => $poll->totalVotes(),
128128
];
129129

130130
return view('poll.result', $map);
131131
}
132-
133-
/**
134-
* Check If Voter Validated.
135-
*
136-
* @param VoteOnPoll $request
137-
* @param $user
138-
* @param Poll $poll
139-
*
140-
* @return bool
141-
*/
142-
private function validateVoter(VoteOnPoll $request, $user, Poll $poll): bool
143-
{
144-
// Expect for simplifying the logic below while remain semantic.
145-
return !(
146-
// One user should never vote on one poll twice.
147-
(
148-
Voter::where('user_id', '=', $user->id)
149-
->where('poll_id', '=', $poll->id)
150-
->exists()
151-
) ||
152-
// If ip_checking is set, further examine request's IP.
153-
(
154-
$poll->ip_checking == 1
155-
&&
156-
Voter::where('user_id', '=', $user->id)
157-
->where('ip_address', '=', $request->ip())
158-
->exists()
159-
)
160-
);
161-
}
162132
}

app/Http/Kernel.php

-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ class Kernel extends HttpKernel
7676
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
7777
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
7878
'can' => \Illuminate\Auth\Middleware\Authorize::class,
79-
'check_ip' => \App\Http\Middleware\CheckIfAlreadyVoted::class,
8079
'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,
8180
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
8281
'language' => \App\Http\Middleware\SetLanguage::class,

app/Http/Middleware/CheckIfAlreadyVoted.php

-46
This file was deleted.

app/Models/Voter.php

-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
* @property int $id
2323
* @property int $poll_id
2424
* @property int $user_id
25-
* @property string $ip_address
2625
* @property \Illuminate\Support\Carbon|null $created_at
2726
* @property \Illuminate\Support\Carbon|null $updated_at
2827
* @property-read \App\Models\Poll $poll
@@ -33,7 +32,6 @@
3332
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter query()
3433
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter whereCreatedAt($value)
3534
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter whereId($value)
36-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter whereIpAddress($value)
3735
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter wherePollId($value)
3836
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter whereUpdatedAt($value)
3937
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Voter whereUserId($value)

resources/views/Staff/poll/edit.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
</li>
1818
<li>
1919
<a href="{{ route('staff.polls.edit', ['id'=> $poll->id]) }}" itemprop="url" class="l-breadcrumb-item-link">
20-
<span itemprop="title" class="l-breadcrumb-item-link-title">@lang('poll.edit-poll') {{$poll->slug}}</span>
20+
<span itemprop="title" class="l-breadcrumb-item-link-title">@lang('poll.edit-poll') {{$poll->title}}</span>
2121
</a>
2222
</li>
2323
@endsection

resources/views/Staff/poll/index.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<tbody>
3838
@foreach ($polls as $poll)
3939
<tr>
40-
<td><a href="{{ url('/dashboard/polls/' . $poll->id) }}">{{ $poll->title }}</a></td>
40+
<td><a href="{{ route('staff.polls.show', ['id' => $poll->id]) }}">{{ $poll->title }}</a></td>
4141
<td>{{ date('d M Y', $poll->created_at->getTimestamp()) }}</td>
4242
<td>
4343
<form action="{{ route('staff.polls.destroy', ['id' => $poll->id]) }}" method="POST">

resources/views/Staff/poll/show.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
</li>
1818
<li>
1919
<a href="{{ route('staff.polls.show', ['id' => $poll->id]) }}" itemprop="url" class="l-breadcrumb-item-link">
20-
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->slug }} @lang('poll.results')</span>
20+
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->title }} @lang('poll.results')</span>
2121
</a>
2222
</li>
2323
@endsection

resources/views/poll/forms/vote.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<div class="form-group">
4040
<div class="col-md-12">
4141
<button type="submit" class="btn btn-primary">@lang('poll.vote')</button>
42-
<a class="btn btn-success" href="{{ route('poll_results', ['slug' => $poll->slug]) }}" role="button"><i
42+
<a class="btn btn-success" href="{{ route('poll_results', ['id' => $poll->id]) }}" role="button"><i
4343
class="{{ config('other.font-awesome') }} fa-bar-chart"
4444
aria-hidden="true"> @lang('poll.results')</i></a>
4545
</div>

resources/views/poll/latest.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
</div>
2222
<div class="blocks">
2323
@foreach ($polls as $poll)
24-
<a href="{{ url('/polls/' . $poll->slug) }}" style="padding: 0 2px;">
24+
<a href="{{ route('poll', ['id' => $poll->id]) }}" style="padding: 0 2px;">
2525
<div class="general media_blocks">
2626
<h2 style="font-size: 20px;"><i class="{{ config('other.font-awesome') }} fa-pie-chart"></i>
2727
{{ $poll->title }}</h2>

resources/views/poll/result.blade.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
</a>
1212
</li>
1313
<li>
14-
<a href="{{ route('poll', ['slug' => $poll->slug]) }}" itemprop="url" class="l-breadcrumb-item-link">
15-
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->slug }}</span>
14+
<a href="{{ route('poll', ['id' => $poll->id]) }}" itemprop="url" class="l-breadcrumb-item-link">
15+
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->title }}</span>
1616
</a>
1717
</li>
1818
<li>
19-
<a href="{{ route('poll_results', ['slug' => $poll->slug]) }}" itemprop="url" class="l-breadcrumb-item-link">
19+
<a href="{{ route('poll_results', ['id' => $poll->id]) }}" itemprop="url" class="l-breadcrumb-item-link">
2020
<span itemprop="title" class="l-breadcrumb-item-link-title">@lang('poll.results')</span>
2121
</a>
2222
</li>

resources/views/poll/show.blade.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
</a>
1212
</li>
1313
<li>
14-
<a href="{{ route('poll', ['slug' => $poll->slug]) }}" itemprop="url" class="l-breadcrumb-item-link">
15-
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->slug }}</span>
14+
<a href="{{ route('poll', ['id' => $poll->id]) }}" itemprop="url" class="l-breadcrumb-item-link">
15+
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $poll->title }}</span>
1616
</a>
1717
</li>
1818
@endsection

routes/web.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,9 @@
387387
// Poll System
388388
Route::group(['prefix' => 'polls'], function () {
389389
Route::get('/', 'PollController@index')->name('polls');
390-
Route::post('/vote', 'PollController@vote')->middleware('check_ip');
391-
Route::get('/{slug}', 'PollController@show')->name('poll');
392-
Route::get('/{slug}/result', 'PollController@result')->name('poll_results');
390+
Route::post('/vote', 'PollController@vote');
391+
Route::get('/{id}', 'PollController@show')->where('id', '[0-9]+')->name('poll');
392+
Route::get('/{id}/result', 'PollController@result')->name('poll_results');
393393
});
394394

395395
// Graveyard System

tests/Feature/Http/Controllers/PollControllerTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function result_returns_an_ok_response()
3737
$poll = factory(\App\Models\Poll::class)->create();
3838
$user = factory(\App\Models\User::class)->create();
3939

40-
$response = $this->actingAs($user)->get(route('poll_results', ['slug' => $poll->slug]));
40+
$response = $this->actingAs($user)->get(route('poll_results', ['id' => $poll->id]));
4141

4242
$response->assertOk();
4343
$response->assertViewIs('poll.result');
@@ -55,7 +55,7 @@ public function show_returns_an_ok_response()
5555
$poll = factory(\App\Models\Poll::class)->create();
5656
$user = factory(\App\Models\User::class)->create();
5757

58-
$response = $this->actingAs($user)->get(route('poll', ['slug' => $poll->slug]));
58+
$response = $this->actingAs($user)->get(route('poll', ['id' => $poll->id]));
5959

6060
$response->assertRedirect(withInfo('You have already vote on this poll. Here are the results.'));
6161

0 commit comments

Comments
 (0)