Passed
Push — master ( d814e3...62a6b7 )
by Davide
128:23 queued 93:44
created

EventVenueController::saveOnDb()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 20
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 19
c 0
b 0
f 0
dl 0
loc 31
ccs 20
cts 20
cp 1
rs 9.6333
cc 2
nc 2
nop 2
crap 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A EventVenueController::storeFromModal() 0 9 1
1
<?php
2
3
namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers;
4
5
use DavideCasiraghi\LaravelEventsCalendar\Facades\LaravelEventsCalendar;
6
use DavideCasiraghi\LaravelEventsCalendar\Models\Country;
7
use DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue;
8
use DavideCasiraghi\LaravelEventsCalendar\Models\Region;
9
use Illuminate\Foundation\Auth\User;
10
use Illuminate\Http\Request;
11
use Illuminate\Support\Facades\Auth;
12
use Illuminate\Support\Facades\Cache;
13
use Illuminate\Support\Facades\DB;
14
use Illuminate\Support\Str;
15
use Validator;
16
17
class EventVenueController extends Controller
18
{
19
    /* Restrict the access to this resource just to logged in users except show view */
20 13
    public function __construct()
21
    {
22 13
        $this->middleware('auth', ['except' => ['show']]);
23 13
    }
24
25
    /***************************************************************************/
26
27
    /**
28
     * Display a listing of the resource.
29
     *
30
     * @return \Illuminate\View\View
31
     */
32 3
    public function index(Request $request)
33
    {
34 3
        $countries = Country::getCountries();
35 3
        $regions = Region::listsTranslations('name')->pluck('name', 'id');
36
37 3
        $searchKeywords = $request->input('keywords');
38 3
        $searchCountry = $request->input('country_id');
39
40
        // To show just the veues created by the the user - If admin or super admin is set to null show all the venues
41 3
        $authorUserId = ($this->getLoggedAuthorId()) ? $this->getLoggedAuthorId() : null;
42
43 3
        if ($searchKeywords || $searchCountry) {
44 1
            $eventVenues = DB::table('event_venues')
45
                ->when($authorUserId, function ($query, $authorUserId) {
46
                    return $query->where('created_by', $authorUserId);
47 1
                })
48
                ->when($searchKeywords, function ($query, $searchKeywords) {
49 1
                    return $query->where('name', $searchKeywords)->orWhere('name', 'like', '%'.$searchKeywords.'%');
50 1
                })
51
                ->when($searchCountry, function ($query, $searchCountry) {
52
                    return $query->where('country_id', '=', $searchCountry);
53 1
                })
54 1
                ->orderBy('name')
55 1
                ->paginate(20);
56
        } else {
57
            $eventVenues = EventVenue::
58
                when($authorUserId, function ($query, $authorUserId) {
59
                    return $query->where('created_by', $authorUserId);
60 2
                })
61 2
                ->orderBy('name')
62 2
                ->paginate(20);
63
        }
64
        //dd(DB::getQueryLog());
65
66 3
        return view('laravel-events-calendar::eventVenues.index', compact('eventVenues'))
67 3
                ->with('i', (request()->input('page', 1) - 1) * 20)
68 3
                ->with('countries', $countries)
69 3
                ->with('regions', $regions)
70 3
                ->with('searchKeywords', $searchKeywords)
71 3
                ->with('searchCountry', $searchCountry);
72
    }
73
74
    /***************************************************************************/
75
76
    /**
77
     * Show the form for creating a new resource.
78
     *
79
     * @return \Illuminate\View\View
80
     */
81 1
    public function create()
82
    {
83 1
        $authorUserId = $this->getLoggedAuthorId();
84 1
        $users = User::pluck('name', 'id');
85 1
        $countries = Country::getCountries();
86 1
        $regions = [];
87
88 1
        return view('laravel-events-calendar::eventVenues.create')
89 1
                ->with('countries', $countries)
90 1
                ->with('regions', $regions)
91 1
                ->with('users', $users)
92 1
                ->with('authorUserId', $authorUserId);
93
    }
94
95
    /***************************************************************************/
96
97
    /**
98
     * Store a newly created resource in storage.
99
     *
100
     * @param  \Illuminate\Http\Request  $request
101
     * @return \Illuminate\Http\RedirectResponse
102
     */
103 2
    public function store(Request $request)
104
    {
105
        // Validate form datas
106 2
        $validator = $this->eventsVenueValidator($request);
107 2
        if ($validator->fails()) {
108 1
            return back()->withErrors($validator)->withInput();
109
        }
110
111 1
        $eventVenue = new EventVenue();
112 1
        $eventVenue->preSave($request);
113 1
        $eventVenue->save();
114
115 1
        return redirect()->route('eventVenues.index')
116 1
                        ->with('success', __('laravel-events-calendar::messages.venue_added_successfully'));
117
    }
118
119
    /***************************************************************************/
120
121
    /**
122
     * Display the specified resource.
123
     *
124
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
125
     * @return \Illuminate\View\View
126
     */
127 1
    public function show(EventVenue $eventVenue)
128
    {
129 1
        $country = DB::table('countries')
130 1
                ->select('id', 'name', 'continent_id')
131 1
                ->where('id', $eventVenue->country_id)
132 1
                ->first();
133
134 1
        return view('laravel-events-calendar::eventVenues.show', compact('eventVenue'))->with('country', $country);
135
    }
136
137
    /***************************************************************************/
138
139
    /**
140
     * Show the form for editing the specified resource.
141
     *
142
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
143
     * @return \Illuminate\Http\RedirectResponse | \Illuminate\View\View
144
     */
145 1
    public function edit(EventVenue $eventVenue)
146
    {
147
        //if (Auth::user()->id == $eventVenue->created_by || Auth::user()->isSuperAdmin() || Auth::user()->isAdmin()) {
148
        //if (Auth::user()->id == $eventVenue->created_by) {
149 1
        if (Auth::user()->id == $eventVenue->created_by || Auth::user()->group == 1 || Auth::user()->group == 2) {
0 ignored issues
show
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...
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...
150 1
            $authorUserId = $this->getLoggedAuthorId();
151 1
            $users = User::pluck('name', 'id');
152 1
            $countries = Country::getCountries();
153 1
            $regions = Region::getRegionsByCountry($eventVenue->country_id);
154
155
            // Invalidate cache tags for events map - This is not needed in event create() because the marker is created when an event gets creted.
156 1
            Cache::forget('active_events_map_markers_json');
157 1
            Cache::forget('active_events_map_markers_db_data');
158
159 1
            return view('laravel-events-calendar::eventVenues.edit', compact('eventVenue'))
160 1
                ->with('countries', $countries)
161 1
                ->with('regions', $regions)
162 1
                ->with('users', $users)
163 1
                ->with('authorUserId', $authorUserId);
164
        } else {
165
            return redirect()->route('home')->with('message', __('auth.not_allowed_to_access'));
166
        }
167
    }
168
169
    /***************************************************************************/
170
171
    /**
172
     * Update the specified resource in storage.
173
     *
174
     * @param  \Illuminate\Http\Request  $request
175
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
176
     * @return \Illuminate\Http\RedirectResponse
177
     */
178 2
    public function update(Request $request, EventVenue $eventVenue)
179
    {
180
        // Validate form datas
181 2
        $validator = $this->eventsVenueValidator($request);
182 2
        if ($validator->fails()) {
183 1
            return back()->withErrors($validator)->withInput();
184
        }
185
186
        //$eventVenue->update($request->all());        
187 1
        $eventVenue->preSave($request);
188 1
        $eventVenue->save();
189
190 1
        return redirect()->route('eventVenues.index')
191 1
                        ->with('success', __('laravel-events-calendar::messages.venue_updated_successfully'));
192
    }
193
194
    /***************************************************************************/
195
196
    /**
197
     * Remove the specified resource from storage.
198
     *
199
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
200
     * @return \Illuminate\Http\RedirectResponse
201
     */
202 2
    public function destroy(EventVenue $eventVenue)
203
    {
204 2
        if (EventVenue::venueContainsEvents($eventVenue->id)) {
205 1
            return redirect()->route('eventVenues.index')
206 1
                            ->with('success', __('laravel-events-calendar::messages.venue_not_deleted'));
207
        } else {
208 1
            $eventVenue->delete();
209
210 1
            return redirect()->route('eventVenues.index')
211 1
                            ->with('success', __('laravel-events-calendar::messages.venue_deleted_successfully'));
212
        }
213
    }
214
215
    /***************************************************************************/
216
217
    /**
218
     * Open a modal in the event view when 'create new venue' button is clicked.
219
     *
220
     * @return \Illuminate\View\View
221
     */
222
    public function modal()
223
    {
224
        $countries = Country::getCountries();
225
        $regions = [];
226
        $users = User::pluck('name', 'id');
227
228
        return view('laravel-events-calendar::eventVenues.modal')
229
                    ->with('countries', $countries)
230
                    ->with('regions', $regions)
231
                    ->with('users', $users);
232
    }
233
234
    /***************************************************************************/
235
236
    /**
237
     * Store a newly created VENUE from the create event view modal in storage.
238
     *
239
     * @param  \Illuminate\Http\Request  $request
240
     * @return \Illuminate\Http\JsonResponse
241
     */
242 1
    public function storeFromModal(Request $request)
243
    {
244 1
        $eventVenue = new EventVenue();
245 1
        $eventVenue->preSave($request);
246 1
        $eventVenue->save();
247
        
248 1
        return response()->json([
249 1
            'eventVenueId' => $eventVenue->id,
250 1
            'eventVenueName' => $eventVenue->name,
251
        ]);
252
    }
253
254
    /***************************************************************************/
255
256
    /**
257
     * Return the Venue validator with all the defined constraint.
258
     *
259
     * @param  \Illuminate\Http\Request  $request
260
     * @return \Illuminate\Contracts\Validation\Validator
261
     */
262 4
    public function eventsVenueValidator(Request $request)
263
    {
264
        $rules = [
265 4
            'name' => 'required',
266
            'city' => 'required',
267
            'country_id' => 'required',
268
            'website' => 'nullable|url',
269
        ];
270 4
        $messages = [];
271
272 4
        $validator = Validator::make($request->all(), $rules, $messages);
273
274 4
        return $validator;
275
    }
276
}
277