Passed
Push — master ( 4f81af...b8fa45 )
by Davide
21:18
created

EventVenueController::edit()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 4.0092

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 12
c 1
b 0
f 1
dl 0
loc 17
ccs 11
cts 12
cp 0.9167
rs 9.8666
cc 4
nc 2
nop 1
crap 4.0092
1
<?php
2
3
namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers;
4
5
use DavideCasiraghi\LaravelEventsCalendar\Models\Country;
6
use DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue;
7
use DavideCasiraghi\LaravelEventsCalendar\Models\Region;
8
use Illuminate\Foundation\Auth\User;
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Facades\Auth;
11
use Illuminate\Support\Facades\Cache;
12
use Illuminate\Support\Facades\DB;
13
use Illuminate\Support\Str;
14
use Validator;
15
16
class EventVenueController extends Controller
17
{
18
    /* Restrict the access to this resource just to logged in users except show view */
19 12
    public function __construct()
20
    {
21 12
        $this->middleware('auth', ['except' => ['show']]);
22 12
    }
23
24
    /***************************************************************************/
25
26
    /**
27
     * Display a listing of the resource.
28
     *
29
     * @return \Illuminate\Http\Response
30
     */
31 3
    public function index(Request $request)
32
    {
33 3
        $cacheExpireTime = 900; // Set the duration time of the cache (15 min - 900sec)
34
        $countries = Cache::remember('countries', $cacheExpireTime, function () {
35 3
            return Country::orderBy('name')->pluck('name', 'id');
36 3
        });
37 3
        $regions = Region::listsTranslations('name')->pluck('name', 'id');
38
39 3
        $searchKeywords = $request->input('keywords');
40 3
        $searchCountry = $request->input('country_id');
41
42
        // To show just the veues created by the the user - If admin or super admin is set to null show all the venues
43 3
        $authorUserId = ($this->getLoggedAuthorId()) ? $this->getLoggedAuthorId() : null;
44
45 3
        if ($searchKeywords || $searchCountry) {
46 1
            $eventVenues = DB::table('event_venues')
47
                ->when($authorUserId, function ($query, $authorUserId) {
48
                    return $query->where('created_by', $authorUserId);
49 1
                })
50
                ->when($searchKeywords, function ($query, $searchKeywords) {
51 1
                    return $query->where('name', $searchKeywords)->orWhere('name', 'like', '%'.$searchKeywords.'%');
52 1
                })
53
                ->when($searchCountry, function ($query, $searchCountry) {
54
                    return $query->where('country_id', '=', $searchCountry);
55 1
                })
56 1
                ->orderBy('name')
57 1
                ->paginate(20);
58
        } else {
59
            $eventVenues = EventVenue::
60
                when($authorUserId, function ($query, $authorUserId) {
61
                    return $query->where('created_by', $authorUserId);
62 2
                })
63 2
                ->orderBy('name')
64 2
                ->paginate(20);
65
        }
66
        //dd(DB::getQueryLog());
67
68 3
        return view('laravel-events-calendar::eventVenues.index', compact('eventVenues'))
69 3
                ->with('i', (request()->input('page', 1) - 1) * 20)
70 3
                ->with('countries', $countries)
71 3
                ->with('regions', $regions)
72 3
                ->with('searchKeywords', $searchKeywords)
73 3
                ->with('searchCountry', $searchCountry);
74
    }
75
76
    /***************************************************************************/
77
78
    /**
79
     * Show the form for creating a new resource.
80
     *
81
     * @return \Illuminate\Http\Response
82
     */
83 1
    public function create()
84
    {
85 1
        $authorUserId = $this->getLoggedAuthorId();
86 1
        $users = User::pluck('name', 'id');
87 1
        $countries = Country::getCountries();
88 1
        $regions = [];
89
90 1
        return view('laravel-events-calendar::eventVenues.create')
91 1
                ->with('countries', $countries)
92 1
                ->with('regions', $regions)
93 1
                ->with('users', $users)
94 1
                ->with('authorUserId', $authorUserId);
95
    }
96
97
    /***************************************************************************/
98
99
    /**
100
     * Store a newly created resource in storage.
101
     *
102
     * @param  \Illuminate\Http\Request  $request
103
     * @return \Illuminate\Http\Response
104
     */
105 2
    public function store(Request $request)
106
    {
107
        // Validate form datas
108 2
        $validator = $this->eventsVenueValidator($request);
109 2
        if ($validator->fails()) {
110 1
            return back()->withErrors($validator)->withInput();
111
        }
112
113 1
        $eventVenue = new EventVenue();
114 1
        $this->saveOnDb($request, $eventVenue);
115
116 1
        return redirect()->route('eventVenues.index')
117 1
                        ->with('success', __('laravel-events-calendar::messages.venue_added_successfully'));
118
    }
119
120
    /***************************************************************************/
121
122
    /**
123
     * Display the specified resource.
124
     *
125
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
126
     * @return \Illuminate\Http\Response
127
     */
128 1
    public function show(EventVenue $eventVenue)
129
    {
130 1
        $country = DB::table('countries')
131 1
                ->select('id', 'name', 'continent_id')
132 1
                ->where('id', $eventVenue->country_id)
133 1
                ->first();
134
135 1
        return view('laravel-events-calendar::eventVenues.show', compact('eventVenue'))->with('country', $country);
136
    }
137
138
    /***************************************************************************/
139
140
    /**
141
     * Show the form for editing the specified resource.
142
     *
143
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
144
     * @return \Illuminate\Http\Response
145
     */
146 1
    public function edit(EventVenue $eventVenue)
147
    {
148
        //if (Auth::user()->id == $eventVenue->created_by || Auth::user()->isSuperAdmin() || Auth::user()->isAdmin()) {
149
        //if (Auth::user()->id == $eventVenue->created_by) {
150 1
        if (Auth::user()->id == $eventVenue->created_by || Auth::user()->group == 1 || Auth::user()->group == 2) {
0 ignored issues
show
Bug introduced by
Accessing group on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
Bug introduced by
Accessing id on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
151 1
            $authorUserId = $this->getLoggedAuthorId();
152 1
            $users = User::pluck('name', 'id');
153 1
            $countries = Country::getCountries();
154 1
            $regions = Region::getRegionsByCountry($eventVenue->country_id);
155
156 1
            return view('laravel-events-calendar::eventVenues.edit', compact('eventVenue'))
157 1
                ->with('countries', $countries)
158 1
                ->with('regions', $regions)
159 1
                ->with('users', $users)
160 1
                ->with('authorUserId', $authorUserId);
161
        } else {
162
            return redirect()->route('home')->with('message', __('auth.not_allowed_to_access'));
163
        }
164
    }
165
166
    /***************************************************************************/
167
168
    /**
169
     * Update the specified resource in storage.
170
     *
171
     * @param  \Illuminate\Http\Request  $request
172
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
173
     * @return \Illuminate\Http\Response
174
     */
175 2
    public function update(Request $request, EventVenue $eventVenue)
176
    {
177
        // Validate form datas
178 2
        $validator = $this->eventsVenueValidator($request);
179 2
        if ($validator->fails()) {
180 1
            return back()->withErrors($validator)->withInput();
181
        }
182
183
        //$eventVenue->update($request->all());
184 1
        $this->saveOnDb($request, $eventVenue);
185
186 1
        return redirect()->route('eventVenues.index')
187 1
                        ->with('success', __('laravel-events-calendar::messages.venue_updated_successfully'));
188
    }
189
190
    /***************************************************************************/
191
192
    /**
193
     * Remove the specified resource from storage.
194
     *
195
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
196
     * @return \Illuminate\Http\Response
197
     */
198 2
    public function destroy(EventVenue $eventVenue)
199
    {
200 2
        if (EventVenue::venueContainsEvents($eventVenue->id)) {
201 1
            return redirect()->route('eventVenues.index')
202 1
                            ->with('success', __('laravel-events-calendar::messages.venue_not_deleted'));
203
        } else {
204 1
            $eventVenue->delete();
205
206 1
            return redirect()->route('eventVenues.index')
207 1
                            ->with('success', __('laravel-events-calendar::messages.venue_deleted_successfully'));
208
        }
209
    }
210
211
    /***************************************************************************/
212
213
    /**
214
     * Save the record on DB.
215
     *
216
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
217
     * @return \Illuminate\Http\Response
218
     */
219 3
    public function saveOnDb($request, $eventVenue)
220
    {
221 3
        $eventVenue->name = $request->get('name');
222
        //$eventVenue->description = $request->get('description');
223 3
        $eventVenue->description = clean($request->get('description'));
224 3
        $eventVenue->continent_id = Country::where('id', $request->get('country_id'))->pluck('continent_id')->first();
225 3
        $eventVenue->country_id = $request->get('country_id');
226 3
        $eventVenue->region_id = $request->get('region_id');
227 3
        $eventVenue->city = $request->get('city');
228
        //$eventVenue->state_province = $request->get('state_province');
229 3
        $eventVenue->address = $request->get('address');
230 3
        $eventVenue->zip_code = $request->get('zip_code');
231 3
        $eventVenue->website = $request->get('website');
232
233 3
        if (! $eventVenue->slug) {
234 2
            $eventVenue->slug = Str::slug($eventVenue->name, '-').rand(10000, 100000);
235
        }
236
237
        //$eventVenue->created_by = Auth::id();
238 3
        $eventVenue->created_by = $request->get('created_by');
239
240 3
        $eventVenue->save();
241
242 3
        return $eventVenue->id;
243
    }
244
245
    /***************************************************************************/
246
247
    /**
248
     * Open a modal in the event view when 'create new venue' button is clicked.
249
     *
250
     * @return \Illuminate\Http\Response
251
     */
252
    public function modal()
253
    {
254
        $countries = Country::getCountries();
255
        $regions = [];
256
        $users = User::pluck('name', 'id');
257
258
        return view('laravel-events-calendar::eventVenues.modal')
259
                    ->with('countries', $countries)
260
                    ->with('regions', $regions)
261
                    ->with('users', $users);
262
    }
263
264
    /***************************************************************************/
265
266
    /**
267
     * Store a newly created VENUE from the create event view modal in storage.
268
     *
269
     * @param  \Illuminate\Http\Request  $request
270
     * @return \Illuminate\Http\Response
271
     */
272 1
    public function storeFromModal(Request $request)
273
    {
274 1
        $eventVenue = new EventVenue();
275
276 1
        $eventVenueId = $this->saveOnDb($request, $eventVenue);
277 1
        $eventVenue = EventVenue::find($eventVenueId);
278
279 1
        return response()->json([
280 1
                        'eventVenueId' => $eventVenueId,
281 1
                        'eventVenueName' => $eventVenue->name,
282
                    ]);
283
    }
284
285
    /***************************************************************************/
286
287
    /**
288
     * Return the Venue validator with all the defined constraint.
289
     *
290
     * @return \Illuminate\Validation\Validator
291
     */
292 4
    public function eventsVenueValidator($request)
293
    {
294
        $rules = [
295 4
            'name' => 'required',
296
            'city' => 'required',
297
            'country_id' => 'required',
298
            'website' => 'nullable|url',
299
        ];
300 4
        $messages = [];
301
302 4
        $validator = Validator::make($request->all(), $rules, $messages);
303
304 4
        return $validator;
305
    }
306
}
307