RedeemCodeController::show()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Furic\RedeemCodes\Http\Controllers;
4
5
use Furic\RedeemCodes\Models\Event;
6
use Furic\RedeemCodes\Models\RedeemCode;
7
use Furic\RedeemCodes\Models\RedeemCodeReward;
8
use App\Http\Controllers\Controller;
0 ignored issues
show
Bug introduced by
The type App\Http\Controllers\Controller was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use Illuminate\Http\Request;
10
use Validator;
11
12
// The controller for redeem code web console.
13
class RedeemCodeController extends Controller
14
{
15
16
    /**
17
     * Display a listing of the redeem code resource.
18
     *
19
     * @return \Illuminate\View\View
20
     */
21
    public function index()
22
    {
23
        $redeemCodes = RedeemCode::orderBy('created_at', 'desc')->get();
24
        foreach ($redeemCodes as $redeemCode) {
25
            $event = Event::find($redeemCode->event_id);
26
            if (!is_null($event)) {
27
                $redeemCode->description = $event->name;
28
            }
29
        }
30
        return view('redeem-codes::index', compact('redeemCodes'));
31
    }
32
33
    /**
34
     * Show the form for creating a new redeem code resource.
35
     * No need for the time being, simply redirect to index page.
36
     *
37
     * @return \Illuminate\Http\RedirectResponse
38
     */
39
    public function create(Request $request)
40
    {
41
        return redirect()->route('redeem-codes.index');
42
    }
43
44
    /**
45
     * Generate a random string with given length.
46
     *
47
     * @param  int  $length
48
     * @return string
49
     */
50
    private function generateRandomString($length = 10)
51
    {
52
        $characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
53
        $charactersLength = strlen($characters);
54
        $randomString = '';
55
        for ($i = 0; $i < $length; $i++) {
56
            $randomString .= $characters[rand(0, $charactersLength - 1)];
57
        }
58
        return $randomString;
59
    }
60
61
    /**
62
     * Store a newly created redeem code resource in storage.
63
     *
64
     * @param  Request  $request
65
     * @return \Illuminate\View\View
66
     */
67
    public function store(Request $request)
68
    {
69
        $validator = Validator::make($request->all(), [
70
            'count' => 'required|numeric|min:1|max:500',
71
        ]);
72
73
        if ($validator->fails()) {
74
            return view('redeem-codes::index')->with(['redeemCode' => $request->all(), 'message' => 'Data not valid']);
75
        }
76
77
        $event = new Event;
78
        $event->name = $request->description;
79
        $event->save();
80
81
        $codes = [];
82
83
        if ($request->has('reusable')) { // Make sure reusable only generate one code only
84
            $request->merge(['count' => 1]);
85
        }
86
87
        for ($i = 0; $i < $request->count; $i++) {
88
            $redeemCode = new RedeemCode;
89
            $redeemCode->event_id = $event->id;
90
            if ($request->has('reusable')) {
91
                $redeemCode->reusable = 1;
92
            }
93
            if (empty($request->prefix)) {
94
                $redeemCode->code = $this->generateRandomString(12);
95
            } else {
96
                $redeemCode->code = strtoupper($request->prefix).$this->generateRandomString(12 - strlen($request->prefix));
97
            }
98
            array_push($codes, $redeemCode->code);
99
            $redeemCode->save();
100
        }
101
102
        $rewardTypesCount = count($request->reward_types);
103
        for ($i = 0; $i < $rewardTypesCount; $i++) {
104
            $redeemCodeReward = new RedeemCodeReward;
105
            $redeemCodeReward->event_id = $event->id;
106
            $redeemCodeReward->type = $request->reward_types[$i];
107
            $redeemCodeReward->amount = $request->reward_amounts[$i];
108
            $redeemCodeReward->save();
109
        }
110
111
        return view('redeem-codes::added', compact('codes'));
112
    }
113
114
    /**
115
     * Display the specified redeem code resource.
116
     *
117
     * @param  int  $id
118
     * @return \Illuminate\Http\RedirectResponse
119
     */
120
    public function show($id)
121
    {
122
        return redirect()->route('redeem-codes.edit');
123
    }
124
125
    /**
126
     * Show the form for editing the specified redeem code resource.
127
     *
128
     * @param  int  $id
129
     * @return \Illuminate\View\View
130
     */
131
    public function edit($id)
132
    {
133
        $redeemCode = RedeemCode::findOrFail($id);
134
        $redeemCodesInEvent = $redeemCode->event->redeemCodes;
135
        return view('redeem-codes::edit', compact('redeemCode', 'redeemCodesInEvent'));
136
    }
137
138
    /**
139
     * Update the specified redeem code resource in storage.
140
     *
141
     * @param  Request  $request
142
     * @param  int  $id
143
     * @return \Illuminate\Http\RedirectResponse
144
     */
145
    public function update(Request $request, $id)
146
    {
147
        $redeemCode = RedeemCode::findOrFail($id);
148
149
        $redeemCode->fill($request->all());
150
        if ($request->has('reusable')) {
151
            $redeemCode->reusable = true;
152
        } else {
153
            $redeemCode->reusable = false;
154
        }
155
        if ($request->has('redeemed')) {
156
            $redeemCode->redeemed = $request->redeemed;
157
        } else {
158
            $redeemCode->redeemed = false;
159
        }
160
        $redeemCode->save();
161
162
        if ($request->has('description')) {
163
            $redeemCode->event->name = $request->description;
164
            $redeemCode->event->save();
165
        }
166
        if ($request->has('reward_types')) {
167
            $redeemCodeRewards = $redeemCode->rewards;
168
            $rewardTypesCount = count($request->reward_types);
169
            for ($i = 0; $i < $rewardTypesCount; $i++) {
170
                $redeemCodeReward = $i < $redeemCodeRewards->count() ? $redeemCodeRewards->slice($i, 1)->first() : new RedeemCodeReward;
171
                $redeemCodeReward->event_id = $redeemCode->event->id;
172
                $redeemCodeReward->type = $request->reward_types[$i];
173
                $redeemCodeReward->amount = $request->reward_amounts[$i];
174
                $redeemCodeReward->save();
175
            }
176
            for ($i = $rewardTypesCount; $i < $redeemCodeRewards->count(); $i++) {
177
                $redeemCodeReward = $redeemCodeRewards->slice($i, 1)->first();
178
                $redeemCodeReward->delete();
179
            }
180
        }
181
        return redirect()->route('redeem-codes.index')->with('message', 'Redeem code {$redeemCode->code} updated successfully.');
182
    }
183
184
    /**
185
     * Remove the specified redeem code resource from storage.
186
     *
187
     * @param  int  $id
188
     * @return \Illuminate\Http\RedirectResponse
189
     */
190
    public function destroy($id)
191
    {
192
        $redeemCode = RedeemCode::findOrFail($id);
193
        $redeemCode->delete();
194
        return redirect()->route('redeem-codes.index')->with('message', 'Redeem code {$redeemCode->code} deleted successfully.');
195
    }
196
    
197
}